Русское WIKI

Ссылка на оригинал: http://ru.gentoo-wiki.com

С версии: 1.0

Обновлено: 1.5



HOWTO hal и устройства ввода

Дата: 28.01.2008

hal-0.5.10

В связи с выходом hal-0.5.10 и включении поддержки hal в xorg возникло много вопросов: где раскладки, где мышка, где тачпад, и прочее.

Сейчас xorg использует hal для устройств ввода и xorg.conf игнорирует Данное руководство предназначенно для безболезненного перехода на новую систему

В данном руководстве используются пакеты из ~x86(~amd64) ветки. Посему заботу о keywords оставляю на вашей совести.

Обновляем portage

# emerge --sync

(# eix-sync -v)

Обновляем установку xorg

#emerge -avDNt  xorg-x11

убеждаемся в наличии флага hal. При отсутствии — включаем. / В окончании сборки пакета xorg-server выведется список пакетов для пересборки, их надо пересобрать. Если не заметили или пропустили вот комманда для получения списка пакетов:

emerge portage-utils; qlist -I -C x11-drivers/

Клавиатура

Правила(rules) пользователя можно разместить в каталогах:

/usr/share/hal/fdi/policy/20thirdparty/
или аналогичном /etc/hal/fdi/policy

получить список устройств "узнанных" hal можно командой lshal у меня системе(ноутбук с мультимедийными клавишами) оказалось несколько устройств которые совместимы с понятием "клавиатура", но основная была описана так:

udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input'
 info.addons.singleton = {'hald-addon-input'} (string list)
 info.capabilities = {'input', 'input.keyboard', 'input.keypad', 'input.keys', 'button'} (string list)
 info.category = 'input'  (string)
 info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port' (string)
 info.product = 'AT Translated Set 2 keyboard'  (string)
 info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input'  (string)
 input.device = '/dev/input/event2'  (string)
 input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port'  (string)
 input.physical_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port'  (string)
 input.product = 'AT Translated Set 2 keyboard'  (string)
 input.x11_driver = 'evdev'  (string)
 input.xkb.layout = 'us'  (string)
 input.xkb.model = 'evdev'  (string)
 input.xkb.rules = 'base'  (string)
 input.xkb.variant =   (string)
 linux.device_file = '/dev/input/event2'  (string)
 linux.hotplug_type = 2  (0x2)  (int)
 linux.subsystem = 'input'  (string)
 linux.sysfs_path = '/sys/devices/platform/i8042/serio0/input/input2/event2'  (string)

Заметно что

input.xkb.layout = 'us'
input.xkb.rules = 'base'
input.xkb.variant = 

нас не устраивает

Создаём новый файл

nano /usr/share/hal/fdi/policy/20thirdparty/10russian-layout.fdi

со следующим содержимым:

Файл: /usr/share/hal/fdi/policy/20thirdparty/10russian-layout.fdi

<?xml version="1.0" encoding="ISO-8859-1"?><!-- -*- SGML -*- -->
<match key="input.product" contains="AT Translated Set 2 keyboard">
<merge key="input.xkb.layout" type="string">us,ru</merge>
<merge key="input.xkb.variant" type="string">,winkeys</merge>
<merge key="input.xkb.options" type="string">grp:alt_shift_toggle,grp_led:scroll</merge>
</match>

если у вас одно устройство ввода типа "клавиатура",то можно сточку

<match key="input.product" contains="AT Translated Set 2 keyboard">

заменить на

<match key="info.capabilities" contains="input.keyboard">

Так мы получим более универсальное правило. Можно заметить что названия опций перекликается с аналогами xorg.conf. Так и есть, в принципе здесь можно записать все те параметры которые вы использовали в xorg.conf только в приложении к XML.

ВАЖНО: Если у вас остались проблемы с расположением клавиш, то возможно так и следует сделать?

например:

Option "XkbRules" "xorg"

тоже самое что

       <merge key="input.xkb.rules" type="string">xorg</merge>

Driver "kbd" 

=

    <merge key="input.x11_driver" type="string">kbd</merge>

Сохраняем файл.

#/etc/init.d/hald restart

Проверяем системный лог и убеждаемся, что правило успешно добавленно.

#lshal 

должно вывести следующие строчки:

...
 input.x11_driver = 'evdev'  (string)
 input.xkb.layout = 'us,ru'  (string)
 input.xkb.model = 'evdev'  (string)
 input.xkb.options = 'grp:alt_shift_toggle,grp_led:scroll'  (string)
 input.xkb.rules = 'base'  (string)
 input.xkb.variant = ',winkeys'  (string)
...

Если так и есть, то дело сделано. Если нет--внимательно перечитываем до просветления.

Перезапускаем X-ы

После чего можно перезапустить X-ы(перезагрузить компьтер, перезапустить xdm). Проверяем. Радуемся. Если не получаеться, то внимательно читаем лог Xorg, Скорее всего там можно найти ответ.

Мышка

Пока проблема одна. Hal по умолчанию использует драйвер evdev,которые не всегда корректно работает в полноэкранных приложениях(игры)

#echo "SDL_VIDEO_X11_DGAMOUSE=0" >>/etc/env.d/02locale
#env-update
#source /etc/profile

Должно решить эту проблему.

Touchpad

Пока в разработке.

HOWTO Ivman

Цель

Целью статьи является установка ivman для автомонтирования устройств.

Внимание: часть информации может быть недействительна для старых версий Ivman, особенно Ivman 0.5.x. Пожалуйста, используйте последние стабильные версии Ivman.

Требуемые программы



Все требуемые пакеты есть в портежах, поэтому минимальным действием будет:

emerge -av ivman

Размаскируйте требуемые пакеты, если необходимо.

Если установка HAL выдаёт предупреждения, что не установлены "u64" или "BLKGETSIZE64"и вы используете ядро 2.6, обновите пакет linux-headers:

emerge --oneshot linux-headers

Когда linux-headers полностью обновится, пересоберите glibc:

emerge --oneshot glibc

Использование

Есть два пути использования Ivman: от root, или от обычного пользователя. У любого из методов имеются как преимущества, так и недостатки.

Запуск Ivman от root

Запуск Ivman от обычного пользователя

Примечание: Вы можете не находиться в группе plugdev, потому что сейчас устройства монтируются так, что только вы имеете к ним доступ.

Ivman не требует дополнительной конфигурации для автомонтирования. Данные fstab игнорируются, сменные устройства/диски будут смонтированы в /media. Однако, Ivman может быть использован не только для монтирования. Обретите свободу для добавления ваших супер-правил на этой странице  :-)

Примеры некоторых правил

Code: Смонтировать всё, что есть

    <ivm:Match name="ivm.mountable" value="true">
        <ivm:Option name="mount" value="true" />
    </ivm:Match>

Code: Открыть мой MP3-плеер в mc, когда он подключен

    <ivm:Match name="hal.info.product" value="IAUDIO">
        <ivm:Option name="exec" value="xterm -e mc /home/share/music /media/IAUDIO" />
    </ivm:Match>

Code: Открыть мою камеру в mc, когда она подключена

    <ivm:Match name="hal.info.vendor" value="FUJIFILM">
        <ivm:Option name="exec" value="xterm -e mc /home/share/pics /media/usbdisk/DCIM/100_FUJI" />
    </ivm:Match>

Для KDE

Code: Выводит всплывающее окошко, когда что-нибудь подключено

    <ivm:Match name="hal.info.category" value="storage">
      <ivm:Match name="hal.storage.bus" value="usb">
         <ivm:Option name="exec" value="kdialog --passivepopup 'USB storage device detected: $hal.info.vendor$ $hal.info.product$' 4" />
      </ivm:Match>
   </ivm:Match>

Проблемы

Использование записей в fstab (ivman 0.6.x или более новый)

Ivman 0.6.x или более новый использует pmount для монтирования устройств, и не нуждается в записях fstab. Но если хочеться, то можно.

pmount (и Ivman, таким образом) будет автоматически учитывать записи fstab. С версии 0.6.0, на каждую символьную ссылку будет создано правило, без использования IvmConfigMappings.xml. Устройства, не отмеченные в fstab, будут монтироваться в /media.

Использование записей в fstab (ТОЛЬКО ivman 0.5.x!)

Ivman 0.5.x может использовать ваш /etc/fstab. Если вы до этого пользовались supermount, вам необходимо изменить записи для использования ivman. Например:

/dev/cdroms/cdrom0      /mnt/cdrom      iso9660   noauto,ro     0 0

Может также потребоваться отключение devfs.



Монтирование устройств с размонтированием от обычного пользователя (ТОЛЬКО ivman 0.5.x!)

Когда вы подключаете USB-носитель, ivman, запущеный от root монтирует его автоматически, но вы не можете размонтировать его иначе, чем от root. Это можно устранить, настроив HAL на монтирование всех устройств хранения данных с опцией "users", чего вам может очень не хотеться.

Создайте файл с названием whatever.fdi в директории /usr/share/hal/fdi/95userpolicy/ со следующим содержимым:

Файл: whatever.fdi

 <?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- --> 
  <deviceinfo version="0.2"> 
    <!-- Append users to default mount options --> 
   <device> 
     <merge key="storage.policy.default.mount_option.users" type="bool">true</merge> 
   </device> 
  </deviceinfo>

Для дополнительной информации смотрите HAL Specifications.



Решение проблемы неразмонитирования флешки после ее физического удаления

Иногда может возникать ситуация что после удаления флешки команда mount выдает что она подмонтирована, в результате следующие подсоединение флешки приводит к тому что ей присваевается следующая буква и в резульатет чего возникает множество мертвых точек монтирования

Code: Пример ситуации когда два раза вынута и вставлена одна и таже флешка

#mount
/dev/sdb1 on /media/sdb1 type vfat (rw,noexec,nosuid,nodev,quiet,shortname=mixed,uid=104,gid=412,umask=007,fmask=0117,dmask=0007,iocharset=utf8)
/dev/sdc1 on /media/sdc1 type vfat (rw,noexec,nosuid,nodev,quiet,shortname=mixed,uid=104,gid=412,umask=007,fmask=0117,dmask=0007,iocharset=utf8)

это происходит из за того что по умолчанию ivman для размонтирования вызывает команду pumount /dev/sdb1, которая нечего не выполняет выдавая что /dev/sdb1 нет (udev успевает удалить это устройсво)

решение проблемы следующее правим /etc/ivman/IvmConfigBase.xml таким образом

Файл: /etc/ivman/IvmConfigBase.xml

    <!-- mount command.  default is autodetected.  Must be specified with
         umountcommand. -->
    <ivm:Option name="mountcommand" value="/usr/bin/pmount -u 007 '$hal.block.device$'" />

    <!-- umount command.  default is autodetected.  Must be specified with
         mountcommand. -->
    <ivm:Option name="umountcommand" value="/usr/bin/sudo /bin/umount -l '$hal.block.device$'" />

а так же добавляя в /etc/sudoers строчку

Файл: /etc/sudoers

   ivman   ALL = NOPASSWD: /bin/umount

sudo конечно же должен быть установлен.

Разное

HAL может потребовать добавление coldplug на уровень загрузки boot для работы распознавания USB-устройств.

Если у вас проблемы с пользовательскими запусками ivman для автомонтирования USB flash, вам может потребоваться включить поддержку utf-8 в вашем ядре. Смотрите это обсуждение на форуме для подробностей.

Другие проблемы

Если ivman не работает, для начала остановите его:

/etc/init.d/ivman stop

Отредактируйте базовые настройки:

nano -w /etc/ivman/IvmConfigBase.xml

Отключите fork, и включите отладку. Потом запустите ivman из консоли. Смотрите сообщения.

Источник — «http://ru.gentoo-wiki.com/HOWTO_Ivman»






Настройка дисковой подсистемы

Всеобщий ликбез



Под IDE понимаются устройства, подключаемые к IDE-интерфейсу. Обычно это жесткие диски и дисководы CD-ROM. Эти устройства должны быть документированы, как:



IDE устройства могут передавать данные по шине в двух режимах - PIO и DMA. Учтите, что это именно передача данных по шине, с пластины данные читаются медленнее, а вот из аппаратного кеша на полной скорости.


PIO - Программный ввод/вывод, метод передачи данных между двумя устройствами, использующий процессор как часть маршрута данных (процессор выполняет команду чтения порта, считывает байт или слово данных в свой регистр, после чего переписывает его в память, затем повторяет эту процедуру до тех пор, пока вся необходимая информация не будет считана из устройства в память).


Бывает PIO Mode 0 1 2 3 4. Чем больше номер режима, тем быстрее. IDE ZIP100 приводы от Iomega например умеют только PIO mode 0. Старые CD-ROM обычно умеют PIO mode 4, если не могут DMA.



DMA - Direct Memory Access - прямой доступ к памяти - собирательное название протоколов, позволяющих периферийному устройству передавать информацию непосредственно в системную память без участия центрального процессора, жесткие диски используют эту возможность в сочетании с возможностью перехватывать управление шиной и самостоятельно управлять передачей информации (bus mastering), что уменьшает нагрузку на процессор и повышает скорость передачи данных.


DMA встречается двух типов: UDMA и MDMA.


UDMA - ultra DMA - наиболее предпочитаемый тип, основной на сегодня. Бывает UDMA 0 1 2 3 4 5 6. Реально встречаются:



Последний встречается на не Intel матерях и не все винты его умеют. Кстати SATA винчестеры используют UDMA = 150 Mb/s.

Для UDMA 66 - 100 - 133 необходим 80-жильный шлейф, кроме того старые матери умеют его не на всех каналах, смотрите в инструкцию. Форсирование этих режимов с 40-жильным шлейфом может убить Ваши данные.

MDMA - multiword dma, более древний режим, предпочтителен для старых винчестеров и CD-ROM.



На большинстве современных систем ядро автоматически определяет и настраивает IDE подсистему на максимальную производительность, если правильно его сконфигурировать. Но настроить что-нибудь всё равно можно.



ОЧЕНЬ ВАЖНО

Всё нижеописанное может убить Ваши данные, сломать Вам винчестер, спалить Вашу машину, удивить Вашу кошку и т.п. отмазы :)

Всё нижеописанное тестировалось, работало и работает на пяти машинах с ядром 2.6.9-gentoo-r4 и hdparm-5.7-r1, ACCEPT_KEYWORDS="~x86".



У Вас что-нибудь может не работать, работать не так.



ВАЖНО

Всё нижеописанное не относится к SATA дискам работающим через libata интерфейс (то есть видимым как sdX а не hdX). Поскольку sata интерфейс гораздо ближе к scsi чем к pata, разработчики вполне обоснованно используют scsi подсистему для работы с sata. Поэтому на текущий момент настройка sata винчестеров средствами hdparm невозможна, так как в libata не реализована специфичная для подобных програм функциональность.



В Сети есть патчик на ядро, добавляющий нужный функционал, но он ОЧЕНЬ сыр и с вероятностью в 100% убьёт вам раздел. Даже ссылку давать не буду, если Вы камикадзе, сами найдёте.

Для начала

Убедитесь, что Ваши IDE диски используют DMA интерфейс, и ядро правильно настроено.

Для этого сделайте :

dmesg | less

или загляните в логи.

Нас будут интересовать сообщения о настройке ide контроллера и дисков. Мой кусок kern.log выглядит так (с моими комментариями):

Nov 14 17:45:54 tsoptimus kernel: ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Можно при загрузке сказать ядру idebus=66, но это работает только для не использующих DMA винчестеров и сидиромов. Подробности в /usr/src/linux/Documentation/ide.txt

Nov 14 17:45:54 tsoptimus kernel: ICH2: IDE controller at PCI slot 0000:00:1f.1

Nov 14 17:45:54 tsoptimus kernel: ICH2: chipset revision 2

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Определили первый контроллер.

Nov 14 17:45:54 tsoptimus kernel: ICH2: not 100%% native mode: will probe irqs later

^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Это из-за того что интеловский контроллер использует разные прерывания для

каждого из каналов. Это нормально.

Nov 14 17:45:54 tsoptimus kernel: ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:DMA, hdb:pio

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

контроллер работает в busmaster режиме, dma для первого диска включен в BIOS.

Nov 14 17:45:54 tsoptimus kernel: ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:pio, hdd:DMA

Nov 14 17:45:54 tsoptimus kernel: Probing IDE interface ide0...

Nov 14 17:45:54 tsoptimus kernel: hda: ST340016A, ATA DISK drive

Nov 14 17:45:54 tsoptimus kernel: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14

Nov 14 17:45:54 tsoptimus kernel: Probing IDE interface ide1...

Nov 14 17:45:54 tsoptimus kernel: hdd: DV-516E, ATAPI CD/DVD-ROM drive

Nov 14 17:45:54 tsoptimus kernel: ide1 at 0x170-0x177,0x376 on irq 15

Nov 14 17:45:54 tsoptimus kernel: PDC20265: IDE controller at PCI slot 0000:02:0a.0

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Определили интегрированный promise контроллер

Nov 14 17:45:54 tsoptimus kernel: ACPI: PCI interrupt 0000:02:0a.0[A] -> GSI 17 (level, low) -> IRQ 17

Nov 14 17:45:54 tsoptimus kernel: PDC20265: chipset revision 2

Nov 14 17:45:54 tsoptimus kernel: PDC20265: 100%% native mode on irq 17

Nov 14 17:45:54 tsoptimus kernel: PDC20265: (U)DMA Burst Bit ENABLED Primary MASTER Mode Secondary MASTER Mode.

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

BIOS этого уродца не включает DMA, поэтому его включило ядро :)

Nov 14 17:45:54 tsoptimus kernel: ide2: BM-DMA at 0xac00-0xac07, BIOS settings: hde:pio, hdf:pio

^^^^^^^

Что мы собственно и наблюдаем.

Nov 14 17:45:54 tsoptimus kernel: ide3: BM-DMA at 0xac08-0xac0f, BIOS settings: hdg:pio, hdh:pio

Nov 14 17:45:54 tsoptimus kernel: Probing IDE interface ide2...

Nov 14 17:45:54 tsoptimus kernel: hde: FUJITSU MPG3204AT E, ATA DISK drive

Nov 14 17:45:54 tsoptimus kernel: ide2 at 0x9c00-0x9c07,0xa002 on irq 17

Nov 14 17:45:54 tsoptimus kernel: Probing IDE interface ide3...

Nov 14 17:45:54 tsoptimus kernel: hda: max request size: 128KiB

Nov 14 17:45:54 tsoptimus kernel: hda: 78165360 sectors (40020 MB) w/2048KiB Cache, CHS=65535/16/63, UDMA(100)

^^^^^^^^

Говорит само за себя

Nov 14 17:45:54 tsoptimus kernel: hda: cache flushes not supported

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

А вот это странно :( Ядро не сможет принудительно синхронизировать аппаратный кеш винчестера, в случае panic или oops будет не сладко. До этого было supported, разберусь...

Nov 14 17:45:54 tsoptimus kernel: /dev/ide/host0/bus0/target0/lun0: p1 p2 p3 p4

Nov 14 17:45:54 tsoptimus kernel: hde: max request size: 128KiB

Nov 14 17:45:54 tsoptimus kernel: hde: 40031712 sectors (20496 MB) w/512KiB Cache, CHS=39714/16/63, UDMA(100)

Nov 14 17:45:54 tsoptimus kernel: hde: cache flushes not supported

Nov 14 17:45:54 tsoptimus kernel: /dev/ide/host2/bus0/target0/lun0: p1 p2

Nov 14 17:45:54 tsoptimus kernel: hdd: ATAPI 48X DVD-ROM drive, 256kB Cache, UDMA(33)

Nov 14 17:45:54 tsoptimus kernel: Uniform CD-ROM driver Revision: 3.20

Проверьте настройки ядра. Мой кусок касающийся IDE выглядит так (с моими комментариями)

# ATA/ATAPI/MFM/RLL support

#

CONFIG_IDE=y

CONFIG_BLK_DEV_IDE=y



#

# Please see Documentation/ide.txt for help/info on IDE drives

#

# CONFIG_BLK_DEV_IDE_SATA is not set

# CONFIG_BLK_DEV_HD_IDE is not set

CONFIG_BLK_DEV_IDEDISK=y

#CONFIG_IDEDISK_MULTI_MODE is not set

CONFIG_BLK_DEV_IDECD=y

# CONFIG_BLK_DEV_IDETAPE is not set

# CONFIG_BLK_DEV_IDEFLOPPY is not set

# CONFIG_BLK_DEV_IDESCSI is not set

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Был нужен для пишущих cdrom, сейчас не нужен (даже вреден)



CONFIG_IDE_TASK_IOCTL=y

CONFIG_IDE_TASKFILE_IO=y

^^^^^^^^^^^^^^^^^^^^^^^^

Не разбирался :)

#

# IDE chipset support/bugfixes

#

# CONFIG_IDE_GENERIC is not set

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Не нужен если Ваши IDE контроллеры известны ядру. У 99% людей они известны. Посему выключен.

# CONFIG_BLK_DEV_CMD640 is not set

CONFIG_BLK_DEV_IDEPCI=y

CONFIG_IDEPCI_SHARE_IRQ=y

^^^^^^^^^^^^^^^^^^^^^^^^^^

Разрешает устройству совместно использовать одно прерывание с другими устройствами.

В случае проблем можно выключить.

# CONFIG_BLK_DEV_OFFBOARD is not set

# CONFIG_BLK_DEV_GENERIC is not set

# CONFIG_BLK_DEV_OPTI621 is not set

# CONFIG_BLK_DEV_RZ1000 is not set

CONFIG_BLK_DEV_IDEDMA_PCI=y

# CONFIG_BLK_DEV_IDEDMA_FORCED is not set

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ОПАСНО!!!! Если ваш винт или контроллер совсем никак не умеет DMA

или blacklisted, то есть риск потерять раздел.

CONFIG_IDEDMA_PCI_AUTO=y

^^^^^^^^^^^^^^^^^^^^^^^^^

А вот это значительно нежнее :) Если с винтом и контроллером всё в порядке, ядро само включит Вам DMA.

# CONFIG_IDEDMA_ONLYDISK is not set

Ежели ваш CDROM глючит с DMA или работает медленне чем в PIO режиме, ядро включит DMA только для винчестеров.

# CONFIG_BLK_DEV_AEC62XX is not set

# CONFIG_BLK_DEV_ALI15X3 is not set

# CONFIG_BLK_DEV_AMD74XX is not set

# CONFIG_BLK_DEV_ATIIXP is not set

# CONFIG_BLK_DEV_CMD64X is not set

# CONFIG_BLK_DEV_TRIFLEX is not set

# CONFIG_BLK_DEV_CY82C693 is not set

# CONFIG_BLK_DEV_CS5520 is not set

# CONFIG_BLK_DEV_CS5530 is not set

# CONFIG_BLK_DEV_HPT34X is not set

# CONFIG_BLK_DEV_HPT366 is not set

# CONFIG_BLK_DEV_SC1200 is not set

CONFIG_BLK_DEV_PIIX=y

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Контроллер моей материнки

# CONFIG_BLK_DEV_NS87415 is not set

CONFIG_BLK_DEV_PDC202XX_OLD=y

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Второй контроллер моей материнки

CONFIG_PDC202XX_BURST=y

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Форсируем DMA для promise, так как его биос DMA не включает. Странный он.

# CONFIG_BLK_DEV_PDC202XX_NEW is not set

# CONFIG_BLK_DEV_SVWKS is not set

# CONFIG_BLK_DEV_SIIMAGE is not set

# CONFIG_BLK_DEV_SIS5513 is not set

# CONFIG_BLK_DEV_SLC90E66 is not set

# CONFIG_BLK_DEV_TRM290 is not set

# CONFIG_BLK_DEV_VIA82CXXX is not set

# CONFIG_IDE_ARM is not set

CONFIG_BLK_DEV_IDEDMA=y

# CONFIG_IDEDMA_IVB is not set

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Форсирование UDMA4 5 6 если ядро само его не включает.

ОПАСНО - если у Вас 40-жильный или повреждённый шлейф, вы можете убить данные.

CONFIG_IDEDMA_AUTO=y

# CONFIG_BLK_DEV_HD is not set



Ускоряемся :)

Сделайте, если ещё не сделали,

emerge hdparm

На одной консоли сделайте:

man hdparm

А на другой мы начнём играться :)

Делайте:

hdparm -tT /dev/hdX


Где X - буква вашего винчестера

Мы запустили тест скорости чтения из кеша и с пластины. Для усреднения результатов запустите его несколько раз.

Должны увидеть следующее:



/dev/hda:

Timing cached reads: 616 MB in 2.00 seconds = 307.74 MB/sec

Timing buffered disk reads: 74 MB in 3.04 seconds = 42.33 MB/sec


Первый результат с учётом программного кеширования, он у всех большой :)


Второй - собственно чтение с диска с учётом аппаратного кеширования.


Второй результат мы собственно и будем улучшать :) Цифры в районе 35-55 mb/s хороший результат, выше 50 без raid контроллера вы на парралельном интерфейсе вряд ли получите (хотя... кто знает...). Но в любом случае кроме скорости можно

Разбираемся с железом на железном уровне


Имеет смысл заглянуть в BIOS и в корпус.


ВНИМАНИЕ!!! Если вы страдаете хронической неуверенностью, криворукостью, боитесь потерять гарантию, пропустите этот раздел!



Иногда сборщики компьютеров страдают излишней жадностью или криворукостью, поэтому всегда имеет смысл проверить, всё ли внутри корпуса как надо.


Каждый канал IDE/AТА интерфейса поддерживает подключение двух устройств - master и slave. Конфигурация обычно задается перемычкой на устройстве. Кроме этих двух позиций там обычно присутствует и третья - cable select. Для работы устройств в положении перемычки cable select требуется специальный Y-образный шлейф, центральный разъем которого подключается к материнской плате. Крайние разъемы такого кабеля неравноправны - устройство, подключенное к одному разъему, автоматически становится master, к другому - slave.

Проверьте, чтобы шлейфы были 80-жильные, на 40-жильных вы не сильно ускоритесь :).

Каждый канал в каждый момент времени может обрабатывать только один запрос к одному устройству. Следующий запрос, пусть даже к другому устройству, будет ожидать завершения текущего. Разные каналы при этом могут работать независимо. Поэтому не стоит подключать два активно используемых устройства (например, два жестких диска), к одному каналу.

В идеале каждое IDE-устройство стоит подключать к отдельному каналу (в этом заключается основное преимущество SATA).

Практически все современные чипсеты поддерживают возможность использования различных режимов передачи данных для устройств, подключенных к одному каналу. Однако злоупотреблять этим все-таки не стоит. Два устройства, существенно различающихся по скорости, лучше все-таки разнести по разным каналам.

Не рекомендуется подключать к одному каналу жесткий диск и ATAPI-устройство (например, CD-ROM). Как было сказано выше, протокол ATAPI использует другую систему команд, и, кроме того, даже самые быстрые ATAPI-устройства намного медленнее жесткого диска, что может замедлить работу последнего.




Идеальная конфигурация.

Каждый винт и CD-ROM на отдельном шлейфе.


Приемлемая конфигурация.

На первом канале основной винт, на втором дополнительный master и CD-ROM slave


Тоже неплохо.

На первом канале два винчестера одного поколения, CD-ROM на втором.


Плохо!!!

На одном канале современный винт и древняя древность на полтора гига :)


Смотрим в BIOS. Включаем UDMA где только можно, включаем Bus master для контроллеров IDE, включаем IDE Block mode.


Разбираемся с железом на софтварном уровне

А что умеет наш винчестер? И что у него включено сейчас?


Делаем:

hdparm -iIv /dev/hdX | less



Получаем длинный листинг с описанием возможностей нашего винчестера. Пример моего с комментариями приведён ниже.

Эта секция коротко описывает, что у нас включено прямо сейчас.


/dev/hda:

multcount = 16 (on)

IO_support = 1 (32-bit)

unmaskirq = 1 (on)

using_dma = 1 (on)

keepsettings = 0 (off)

readonly = 0 (off)

readahead = 256 (on)

geometry = 65535/16/63, sectors = 40020664320, start = 0

Эта секция показывает необработанные для читабельности данные, прочитанные напрямую с винчестера.

Model=ST340016A, FwRev=3.19, SerialNo=3HS9R2GG

Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }

RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4

BuffType=unknown, BuffSize=2048kB, MaxMultSect=16, MultSect=16

CurCHS=4047/16/255, CurSects=16511760, LBA=yes, LBAsects=78165360

IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes: pio0 pio1 pio2 pio3 pio4

DMA modes: mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

AdvancedPM=no WriteCache=enabled

Drive conforms to: device does not report version:


* signifies the current active mode

А вот это более интересно. Читайте комментарии в ней самой.

ATA device, with non-removable media

Model Number: ST340016A

Serial Number: 3HS9R2GG

Firmware Revision: 3.19

Standards:

Supported: 5 4 3 2

Likely used: 6

Configuration:

Logical max current

cylinders 16383 4047

heads 16 16

sectors/track 63 255

--

CHS current addressable sectors: 16511760

LBA user addressable sectors: 78165360

device size with M = 1024*1024: 38166 MBytes

device size with M = 1000*1000: 40020 MBytes (40 GB)

Capabilities:

LBA, IORDY(can be disabled)

bytes avail on r/w long: 4 Queue depth: 1

Standby timer values: spec'd by Standard

R/W multiple sector transfer: Max = 16 Current = 16

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Аппаратное блочное чтение. Может читать зараз 16 блоков. Так и делает.


Recommended acoustic management value: 128, current value: 254

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Управление акустикой. Чем больше значение, тем шумнее и быстрее.


DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 *udma5

Cycle time: min=120ns recommended=120ns

PIO: pio0 pio1 pio2 pio3 pio4

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Поддерживаемые режимы передачи. Звёздочка показывает текущий.

Cycle time: no flow control=240ns IORDY flow control=120ns

Commands/features:

Enabled Supported:

* READ BUFFER cmd

* WRITE BUFFER cmd

* Host Protected Area feature set

* Look-ahead

* Write cache

* Power Management feature set

Security Mode feature set

* SMART feature set

Device Configuration Overlay feature set

* Automatic Acoustic Management feature set

SET MAX security extension

* DOWNLOAD MICROCODE cmd

Security:

Master password revision code = 65534

supported

not enabled

not locked

not frozen

not expired: security count

not supported: enhanced erase

HW reset results:

CBLID- above Vih

Device num = 1

Checksum: correct


Имея эту информацию, мы можем ручками настраивать наш винчестер. Те параметры, которые и так настроены, настраивать не обязательно :). Сверяйтесь с man для hdparm, я расскажу про наиболее интересные параметры. \

Собственно настраиваем

Итак, параметры мы передаём как:

hdparm -параметр /имя/диска


Если hdparm ругается, значит или режим не поддерживается, или параметр не верный. Если режим не поддерживается, команда dmesg покажет нам последней строчкой ругань драйвера.


Интересные параметры


-a Количество секторов упреждающего чтения для файловой системы, то есть софтварное упреждающее чтение. Обычно значение по дефолту приемлемое, а наличие аппаратного упреждающего чтения смазывает эффект. Чем меньше, тем лучше в случае чтения кучи мелких файлов разбросанных хаотично по диску. Чем больше число, тем лучше для копирования фильмов и mp3.


-A Включение аппаратного упреждающего чтения винчестером. Обычно всегда включено по дефолту. Изменять следует, если в вышеописаном информационном выводе не стоит звёздочка перед Look-ahead в разделе Enabled Supported. 1 - включено, 0 - выключено.


-B Имеет смысл для нотебуков, управляет настройкой энергосбережения. Чем значение ниже, тем больше у винта желание остановить блин и заснуть :), от чего растёт время отклика. Значение 255 вырубает управление питанием, соответственно уменьшая время отклика. Не все винчестеры имеют собственное управление питанием. Проверьте параметр AdvancedPM= в коротком листинге с сырыми данными.


-c Значение 1 включает 32 битную передачу по внутренней шине, по шлейфу возможно только 16 бит. Значение 3 включает то-же самое с контролем чётности. Это более надёжно, но чуть медленне чем 1. По умолчанию всегда выключено, имеет смысл включить. разницы между 1 и 3 не заметил ни по скорости, ни по надёжности.


-d 1 - включено, 0 - нет. Признак использования DMA. Если у Вас стоит звёздочка напротив одного из dma режимов в вышеприведённых листингах, значит Вам этот параметр не нужен. Если не стоит, можно попробовать включить. ВНИМАНИЕ!!! Машина может зависнуть, раздел может навернуться!!! Если это случилось, что-то крепко не в порядке с железом или ядром!!!


-E Скорость cdrom. Если сильно воет... Просто укажите желаемую скорость. Для винтов бесполезен :)


-k и -K Сохранение настроек и опций винчестером. Это не означает что они автоматически сохранятся после перезагрузки. Это означает, что они сохранятся, если драйвер сделает reset контроллеру, или после спячки, но не гибернации (aka suspend to disk). 1 - сохранять. 0 - нет.


-m Количество секторов для аппаратного упреждающего чтения. Не может быть больше чем умеет винт. Смотреть в диагностический листинг, параметр MaxMultSect=. По дефолту обычно всегда максимум.


-M Управление акустикой. 254 - шумно и быстро. 0 - медленно и тихо. Многие драйвы умеют только 128 и 254. Многие вообще нисколько не умеют :)


-P Ещё одна ручка для регулирования аппаратного упреждающего чтения. Не работает ни на одном виденном мною винте. Может у Вас заработает?


-u Включить размаскирование прерываний. Если значение 1, то контроллер разрешает другие прерывания во время операции ввода-вывода. Это снижает нагрузку на систему и повышает отклик. Нужно включать. По умолчанию выключено. На оччень древних контроллерах система может повиснуть.


-W 1 - включает кеширование записи. Включено по дефолту у всех виденных мною винтов. Но пригодится может.


-X Самый мощный параметр. Позволяет вам принудительно выставить режим работы DMA. В последних версиях hdparm задаётся буквенно, например -X udma5. Внимание!!! Не включайте режимы, не поддерживаемые Вашим контроллером, или с плохим (40-жильным) шлейфом!!! Обычно ядро само выбирает максимальный режим DMA, и если оно не смогло, или выбрало как Вам кажется меньший режим чем можно, ПОДУМАЙТЕ!!! Вдруг тому есть ОБЪЕКТИВНЫЕ причины?.


Пробуйте параметры по одному, запускайте hdparm -tT, смотрите в dmesg.

Сидиромы понимают не все параметры из указанных выше. У разных винчестеров понимание тоже может отличаться :)

После того как наиграетесь, будем закреплять.

Закрепляем

В /etc/conf.d/hdparm заносим понравившиеся параметры. У меня это выглядит так:

hda_args="-u1c3M254Kk"

hde_args="-u1c3M254Kk"

#hdd - cdrom

hdd_args="-u1c3Kk"



Делаем: rc-update add hdparm default

Затем: /etc/init.d/hdparm start



Выбор планировщика ввода-вывода



В ядрах 2.6 появилась возможность выбирать между четырьмя планировщиками ввода-вывода. У каждого планировщика есть свои достоинства и недостатки. По дефолту в ядро всунуты все четыре, и выбран anticipatory io cheduler. Кратенько опишу их.

no-op - очень мелкий и лёгкий планировщик. Мало чего умеет. Для винтов не пригоден. В основном используется если вместо винта - флеш.

anticipatory - выбирается по дефолту. Середина-наполовину для всего на свете. И там хорош, и тут хорош.

deadline - более лёгкий и простой чем anticipatory, лучше себя ведёт при "взрывных" нагрузках. При равномерной нагрузке имеет особенность задумываться и притормаживать.

CFQ - размазывает ввод-вывод равномерно между всеми процессами. Ввод-вывод медленный, но плавный и равномерный независимо от загрузки. Это мой выбор на сегодня.

Как попробовать?

Передайте ядру в строке загрузки GRUB или другого загрузчика параметр elevator=[cfq|as|deadline|noop], поработайте, сравните. Ненужные планировщики ввода/вывода можно убрать из конфигурации ядра перед его компиляцией. Подробней можно узнать в статье "Компиляция ядра Linux". Они в

general setup ->

Configure standart kernel features...


Как нибудь потом расскажу про тюнинг vm и свопа ...




Работа с CD/DVD

Основные программы



Для начала, убедитесь что у вас установлены программы cdrecord и mkisofs, которые входят в пакет cdrtools. Если нет -- установите его:


emerge cdrtools


Конфигурация ядра и загрузчика


Убедитесь, что у вас ядро настроено соответствующим образом.


Ядра серии 2.4.x


Для ядер серии 2.4.x в ядро необходимо включить поддержку SCSI эмуляции: Linux Kernel Configuration:


Конфигурация ядра 2.4.x

ATA/IDE/MFM/RLL Support -->

IDE, ATA, and ATAPI Block Devices -->

<M> SCSI Emulation Support

SCSI Support -->

<M> SCSI Support

<M> SCSI CDROM Support

<M> SCSI Generic Support



Теперь, еще необходимо ядру при загрузке передать параметр hdc=ide-scsi (в данном случае предполагается, что ваш CD привод - это hdc).


Т.е. если вы используете grub, то его конфиг должен выглядеть примерно так:


Файл: /boot/grub/grub.conf

title Gentoo Linux

root (hd#,#)

kernel (hd#,#)/YOUR_KERNEL_NAME_HERE root=/dev/hdx# hdc=ide-scsi ANY_OTHER_KERNEL_OPTIONS_NEEDED


Т.е. если вы используете grub, то его конфиг должен выглядеть примерно так:

Файл: /boot/grub/grub.conf

title Gentoo Linux

root (hd#,#)

kernel (hd#,#)/YOUR_KERNEL_NAME_HERE root=/dev/hdx# hdc=ide-scsi ANY_OTHER_KERNEL_OPTIONS_NEEDED



Если вы ипользуете lilo, то соответсвующая часть конфига:

Файл: /etc/lilo.conf

# Linux bootable partition config

image = /boot/YOUR_KERNEL_NAME_HERE

append = "hdc=ide-scsi"

root = /dev/hdx#

label = Gentoo

read-only



Ядра серии 2.6.x



В ядрах серии 2.6.x вам уже нет необходимости включать SCSI (и, следовательно, не надо переконфигурировать загрузчик). Вместо этого, надо указать поддержку ATAPI CDROM: Linux Kernel Configuration:

Конфигурация ядра 2.6.x

Device Drivers -->

ATA/ATAPI/MFM/RLL support -->

<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

<*> Include IDE/ATAPI CDROM support




Подготовка ISO образа

Для начала, создайте папку:

mkdir /tmp/iso

а затем скопируйте все файлы, которые вы хотите записать, в созданную папку. cp *.doc /tmp/iso

Затем создайте image.iso mkisofs -o /tmp/image.iso /tmp/iso


Дополнительные опции при создании ISO образа

-r : добавляет (частично) поддержку так называемых расширений Rock Ridge, т.е. сохраняет специфичные для unix аттрибуты файлов. Например, добавляет поддержку длинных имён (до 255 символов, но не для MS Windows), символических ссылок. В отличие от опции -R, которая полностью соответсвует Rock Ridge, права доступа на файлы не сохраняются, они становятся доступны для чтения любому пользователю.

-jcharset=koi8-r: подразумевает под собой 2 опции: 1) -J включает поддержку Joliet, которая используется для распознавания длинных имён файлов под MS Windows; 2) -input-charset: устанавливает перекодировку символов для корректного отображения русских имён файлов. ("koi8-r" здесь дано для примера - замените на кодироку, используемую в вашей системе)

-joliet-long: Позволяет, чтобы имена Joliet могли быть установлены в 103 Unicode сивволы. Это нарушает Joliet спецификацию - но работает. Используйте с осторожностью.

-f : следование символическим ссылкам. Если вместо копирования файлов в /tmp/iso, вы просто создаёте в этой директории симлинки на них, то вы должны включить эту опцию.

-C : эта опция необходима, если вы хотите дописать мультисессионный диск (см. раздел [Как дописывать диски])

Определение ATAPI-приводов


Выполните cdrecord --dev=ATAPI --scanbus


Вы должны увидеть нечто похожее на следующее:


Cdrecord-Clone 2.01a25 (i686-pc-linux-gnu) Copyright (C) 1995-2004 J?rg Schilling

scsidev: 'ATAPI'

devname: 'ATAPI'

scsibus: -2 target: -2 lun: -2

Warning: Using ATA Packet interface.

Warning: The related libscg interface code is in pre alpha.

Warning: There may be fatal problems.

Using libscg version 'schily-0.8'.

scsibus0:

0,0,0 0) 'SONY ' 'CD-RW CRX175A1 ' '5YS2' Removable CD-ROM

0,1,0 1) *

0,2,0 2) *

0,3,0 3) *

0,4,0 4) *

0,5,0 5) *

0,6,0 6) *

0,7,0 7) *


Здесь показано, что на шине 0,0,0 есть CD-RW привод. Предупреждение: В новых версиях cdrtools (2.01.01) и ядра 2.6.x надо писать cdrecord --dev=ATA --scanbus


Запись ISO образа


cdrecord --dev=ATA:0,0,0 /tmp/image.iso


(Замените шину 0,0,0 на необходимую) Примечание: Вместо dev=ATA:0,0,0 можно указывать просто имя устройства, напирмер, dev=/dev/cdrw


Дополнительные возможности


Используйте опцию --speed=# для указания скорости записи


cdrecord --dev=ATAPI:0,0,0 --speed=4 /tmp/image.iso


Используйте --blank=fast для быстрой очистки CD-RW диска.


cdrecord --dev=ATAPI:0,0,0 --blank=fast


Большинство современных записывающих устройств поддерживает технологию BURN-free. К сожалению она не включена по умолчанию при запуске cdrecord. Для включения, добавьте опцию --driveropts=burnfree. Вы можете посмотреть, какие ещё опции поддерживает ваш CD-ROM посредством команды

cdrecord dev=/dev/cdrw driveropts=help -checkdrive


Если в файле /etc/default/cdrecord установить переменную CDR_DEVICE=ATAPI:0,0,0 (можно и CDR_DEVICE=/dev/hdc), то не придется каждый раз указывать устройство (ключ --dev=ATAPI:0,0,0) и тогда для очистки CD-RW диска понадобится набрать только следуюшее:


cdrecord --blank=fast

Если нужно разрешить пользователю запись на CD, то включите его в группу cdrom.


Копирование дисков


Если у вас всего один CD-ROM, то необходимо вначале создать файл-образ диска. Это можно сделать многими способами (с помощью dd, cat, cdrdao, readcd и т.д.). Лучше воспользоваться readcd, т.к. он уже входит в пакет cdrtools, и имеет множество интересных опций (смотри man readcd): readcd dev=/dev/cdrw -clone f=/tmp/image.iso

После этого запишем образ на болванку с помощью cdrecord:

cdrecord -v -eject dev=/dev/cdrw -raw96r -clone /tmp/image.iso


ВАЖНО: Ключи -raw96r и -clone необходимы ТОЛЬКО если вы создавали файл-образ с помощью команды readcd -clone.


Как дописывать диски


Прежде всего, при создании и последующем дописывании мульти-сессионных дисков, необходимо всегда для cdrecord указывать опцию -multi, а для mkisofs использовать ключ -r или -R (т.е. включать расширение Rock Ridge). Таким образом создание первой сессий будет выглядить примерно так: Code: Запись первой сессии


mkisofs -r -f -jcharset=koi8-r -o /tmp/image.iso /tmp/iso/


cdrecord -v -multi driveropts=burnfree -eject dev=/dev/cdrw /tmp/image.iso


Для создания последующих сессий, нам нужна информация о номере начального сектора последней сессии и о номере сектора с которого будет начинаться новая сессия. Эта пара чисел выводится командой cdrecord -msinfo dev=/dev/cdrw. После этого данные числа указываются в команде mkisofs в качетстве аргументов к опции -C. Также, чтобы были видны файлы из предыдущей сессии, необходим ключ -M, аргументом к ключу -М служит имя устройства вашего CD-ROM (т.е. в нашем примере - это /dev/cdrw). Команда cdrecord остаётся такой же. Резюмируя вышесказанное получаем для записи последующей сессии: Code: Запись последующих сессий


mkisofs -r -f -jcharset=koi8-r -C $(cdrecord dev=/dev/cdrw -msinfo) -M /dev/cdrw -o /tmp/image.iso /tmp/iso/


cdrecord -v -multi driveropts=burnfree -eject dev=/dev/cdrw /tmp/image.iso



Полезные ссылки

Классическое how-to по записи дисков на английском языке: http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html

То же самое на русском:

http://www.opennet.ru/docs/HOWTO-RU/CD-Writing-HOWTO.html

Создание аудио дисков (на английском языке): en:

HOWTO Create an Audio CD


Создание DVD

Введение

О чем эта статья



В данной статье будет подробно рассмотрен вопрос формирования и записи видео дисков формата DVD в Gentoo Linux.


Необходимые программы


Для начала, убедитесь что у вас установлены следующие программы: transcode


emerge -n transcode

cdrecord и mkisofs


emerge -n cdrtools

growisofs


emerge -n dvd+rw-tools

dvdauthor


emerge -n dvdauthor


также могут пригодиться: kino


emerge -n kino


cinelerra


emerge -n cinelerra-cvs


dvdrip


USE='cdr mplayer ogg subtitles xvid rar' emerge -n dvdrip


replex


emerge -n replex

cdrecord-prodvd


emerge -n cdrecord-prodvd


Кодирование видео в формате DVD


Использование transcode для декодирования видео произвольного формата и кодирования его в формат MPEG2, совместимый с DVD


Хотелось бы заметить, что если вы не любители программ с кучей непонятных опций, то вам следует попробовать программу dvdrip, которая является неплохим фронтендом для transcode с понятным интерфейсом.


Transcode, пожалуй, лучший инструмент для нашей задачи. Вам, возможно, придётся заглянуть в man страницу по transcode, чтобы понять те команды, которые используются здесь. Также вам могут пригодиться и другие инструменты для декодирования и кодирования вашего формата, так что не поленитесь заглянуть и в их man странички. Здесь будет приведен пример того, как конвертировать стандартный divx файл в широэкранный формат (без черных полос сверху и снизу). Затем мы конвертируем все это в формат letterbox 1.5:1. Зачем, спросите вы. Затем, что изначально широкоэкранный формат имеет соотношение 1.73 (16:9) с разрешением 720x416. DVD в свою очередь поддерживает размеры изображения только 720x480, 704x480, 352x480 и 352x240 (возможно это не все). Поэтому самое простое и качественное решение здесь - это привести наше видео к формату 720x480 (соотношение 1.5), добавив по 32 черных полоски сверху и снизу к изображению.


transcode -i test-divx.avi -V -y mpeg -F d -Y -32,0,-32,0 -E 44100 -b 128 -o showgirls-dvd


Отрицательные значения для параметра -Y сообщают transcode о том, чтобы добавить нужное количество черных полосок сверху и снизу. Если использовать положительные значения, то полоски будут соответственно убираться сверху и снизу. Часто вам может попасться видео уже в формате 720x480 или еще каком-то "хорошем" формате, тогда не нужно изменять его размеры, то есть просто не используйте опцию -Y.


Here's what some of those command line arguments mean: Вот, что означают остальные опции:

-V использовать YV12/I420 в качестве встроенного видео кодека [выключено изначально]

Это, как правило, намного быстрее чем RGB процессинг, но

некоторые импортированные модули могут не поддерживать этот формат.

Используйте эту опцию всегда, когда это возможно.

-y vmod[,amod]

видео[,аудио] модули для эксопртирования [отсутствуют изначально].

Если опустить, то transcode не будет кодировать никаким модулем.

Полностью установленный transcode имеет следующие модули:

<вырезано>

mpeg - (видео) MPEG 1/2 | (аудио) MPEG 1 Layer II

nasm должен быть доступен во время компиляции. Этот модуль не имеет

зависимостей. Этот модуль хорошо поддерживается.

Инетрфейс к библиотеке bbmpeg (включена в transcode). Может

кодировать в mpeg1, VCD, SVCD, MPEG2 и DVD видео форматы.

Кодированое видео является отдельным файлом, который следует объединить

с соответствующим аудио файлом после кодирования.

-F codec_string

параметры енкодера [зависят от модуля].

Параметр -F имеет разные значения для разных модулей.

<вырезано>

-y mpeg:

Синтаксис: -F "<base-profile>[,<resizer-mode>[,user-profile]]"

<base-profile> может быть одним из:

'1' = MPEG 1 (по умолчанию)

'b' = big MPEG 1 (экспериментальный)

'v' = VCD

's' = SVCD

'2' = MPEG2

'd' = DVD совместимый

<resizer-mode> может быть одним из:

0 = выключить resizer (по умолчанию)

1 = 352x288

2 = 480x480

3 = 480x576

4 = 352x240

<user-profile> Имя файла профиля. Вы можете

можно указать как абсолютный путь так и относительный

(относительно директории из которой запускаете transcode).

-Y top[,left[,bottom[,right]]]

определить (для енкодера) рамку по котрой будет обрезано изображение.

Отрицаельные значения будут добавлять рамку [отключено изначально].

-E r[,b[,c]]

частота сэмплирования выходного аудио [Гц], битов на сэмпл и каналы

[входящие данные]. Опция "-J resample" должна быть передана

не совместимым с ресэмплингом.

-B n[,m[,M]]

изменить размеры до высота-n*M горизонтальных полосок

[,ширина-m*M] вертикальных полосок [отключено изначально,32].

M должно иметь одно из значений 8, 16 или 32. Неважно какое M

вы используете. Также взгляниет на флаг fast опции -Z если

не хотите считать n и m вручную.

-b b[,v,[q,[m]]]

битрейт аудио енкодера кБит/с [,vbr[,quality[,mode]]] [128,0,5,0]

Параметр mode оперделяет какие модули будет использовать lame

при кодировании. Возможные значения для mode:

0 Joint Stereo (по умолчанию)

1 Full stereo

2 Mono

-o file

имя выходного файла, по умолчанию [/dev/null].


Если бы, к примеру, наше видео имело формат 728x424, то следовало бы воспользоватья командой типа следующей:

transcode -i showgirls-divx.avi -V -y mpeg -F d -B 1,1,8 -E 44100 -b 128 -o showgirls-dvd


Также обратитесь к опции -X для того, чтобы увеличить размеры видео.


Использование tcmplex для объединения аудио и видео данных


Transcode должен был создать *.m2v (mpeg-2 видео) и *.mpa (аудио) файлы в текущей директории. Теперь мы их объединим так:

tcmplex -o showgirls-dvd.vob -i showgirls-dvd.m2v -p showgirls-dvd.mpa -m d


Использование kino (альтернатива transcode+tcmplex)


Kino используется для получения видео с dv камер. Эта программа имеет возможности простейшего видеомонтажа (вырезать сцену, вставить, поменять местами). Она имеет удобный интерфейс для захвата видео (хотя вы можете использовать dvgrab для этой цели). Она использует фомат qt4linux mov по умолчанию для захвата.

Для более продвинутого монтажа cinelerra, пожалуй, пока единственный выбор под Linux. Это достаточно мощная, но достаточно долгая в освоении и пока что нестабильная (сохраняйтесь как можно чаще) программа. Вы можете просто импортировать тот же .mov полученный с помощью kino (dvgrab) в cinelerra (на самом деле, она падает при работе с большинством других форматов). Затем вы можете использовать cinelerra, чтобы привести оконченный фильм обратно к формату mov.

Как только вы наконец получите тот .mov файл, какой вы хотели, загрузите его опять в kino и перейдите в закладку export. Здесь вы уже можете экспортировать video в формат vcd, svcd или dvd. Формат DVD потребует достаточно много времени для конвертирования (желателен мощный процессор).


Использование replex (подготовка DVB записей с цифрового телевидения (Digital Television))


"Эти инструкции были испробованы на записях формата DVB-C, сделанных в Финляндии"


Примечание: пожалуй, для России эта глава абсолютно бесполезна, но если есть большое желание, то я переведу и её. Мало ли, кто где живет ;)


Digital television streams are transmitted as MPEG2-TS in which the TS stands for Transport Stream. This means that extra information, such as multiple audio streams, could be transferred along with the actual video. Quite fortunately, the video stream is already suitable for DVD without re-encoding which is both time consuming and stupid as it lowers the quality. Enter replex. First use czap for tuning into some channel:

czap -r -n 3


This tunes the DVB card to channel number 3. Now, record some data by typing:

cat /dev/dvb/adapter0/dvr0 > stream.ts


This simply writes raw data from the first tuner card into a file. After awhile press CTRL-C to stop recording.


Now, you should have a blob of data which could be played with e.g. mplayer. Next, you should use replex to transform TS format suitable for DVD. Enter following command:

replex -k -i TS -t DVD -o stream.dvd stream.ts


This command ignores possible errors in original stream (-k), assumes that input file is in TS format (-i TS), outputs format suitable for DVD (-t DVD), writes to a file called stream.dvd (-o stream.dvd) and reads its input from the file entered as a last parameter (stream.ts).


After a moment a file called stream.dvd should appear in the same directory where above command was entered. Now just follow the instructions from the next chapter onwards to burn this baby on a DVD.


Создание структуры директорий (authoring) с использованием dvdauthor


Это самый сложный этап! Имея готовый MPEG2 файл, воспользуйтесь программой dvdauthor (или вашим любимым графическим фронтендом к ней (например, dvdstyler)), чтобы создать структуру директорий для записи DVD (VIDEO_TS и AUDIO_TS).


dvdauthor -o . showgirls-dvd.vob && dvdauthor -o . -T


Создание DVD образа для записи


Если директории AUDIO_TS и VIDEO_TS созданы у вас в директории bar, которая в свою очередь находится в текущей директории, то введите команду:

mkisofs -dvd-video -o ./bar.img ./bar/


и вы получите образ bar.img в текущей директории, который теперь следует записать на диск вашей любимой программой для записи дисков.


Или можете записать диретории AUDIO_TS и VIDEO_TS прямо из каталога bar/ набрав:


growisofs -Z /dev/dvd -dvd-video -V название_диска .


Где /dev/dvd - ваш DVD-writer.


Запись


В Linux существует множество способов записи DVD. Из уже показанных можно использовать cdrecord или growisofs.


С помощью графического интерфейса


Формат ISO можно записать с помощью программы X-CDroast (она использует cdrecord-ProDVD, которая требует ключ, что доставляет определенное неудобство).


Также можно воспользоваться прораммой k3b, котрая использует growisofs. Это, пожалуй, самый простой способ.


Из командной строки


Можно записать образ ещё и так:

cdrecord-ProDVD -dao -speed=4 -dev=/dev/dvd ./bar.img


Воспользуйтесь командой cdrecord -scanbus предварительно, чтобы определить какое устройство использовать для записи. Для устройств ATAPI используйте формат -dev=/dev/dvd или -dev=/dev/hdd (зависит от машины), для эмуляции SCSI устройств используйте -dev=0,0,0 или -dev=0,0,1 (зависит от машины).


Если у вас нет cdrecord-ProDVD можете использовать growisofs.

growisofs -dvd-compat -Z /dev/dvd=./bar.img


Подсказка: С помощью growisofs вы можете писать диски налету (без создания четырёхгигабайтного файла .iso):

growisofs -dvd-compat -Z /dev/dvd -dvd-video ./bar


Можно также воспользоваться скриптом, который расположен по адресу http://james.nontrivial.org/projdvd.htm


Система Portage

Portage через NFS

Проблемы

Слишком долгое время выполнения 'emerge --sync' на всех серверах в LAN. Согласно этикету gentoo, вы не можете синхронизироваться чаще одного раза в день



Решение



Общий NFS portage. Одна машина синхронизируется под управлением cron, остальные машины монтируют свою директорию /usr/portage с помощью NFS.


Общее представление


1. Обязательная поддержка nfs в ядре. В случае компиляции ее как модуля, добавить соответствующие строчки в modules.autoload

2. Если потребуется, перезагрузить или загрузить модуль nfs

3. Выполнить emerge nfs-utils

4. Настроить NFS/fstab для автоматического монтирования общего репозитария portage.

5. Установить локальный PORTAGE_TMPDIR на локальную файловую систему.


Выгоды

Только один сервер заботится о синхронизации portage (ночью по заданию cron'а).

Не нужен локальный rsync сервер.

Общий для всех каталог /usr/portage/distfiles означает, что вам не нужно скачивать одно и то же каждый раз, чтобы синхронизировать репозитарий portage на ваших ваши компьютерах.

И вообще, NFS - это классная штука ;)


Предупреждение: NFS является очень скудным протоколом по части безопасности. Убедитесь, что используете его только в пределах вашей локальной сети, где вы полностью доверяете вашим пользователям. Мы вас предупредили!



Подробный процесс


Поддержка ядра


У вас ДОЛЖНА быть включена поддержка NFS в вашем ядре, либо вкомпиленная в ядро (в таком случае необходимо будет перезагрузиться):


Linux Kernel Configuration: Встроенная поддержка

File systems --->

Network File Systems --->

<*> NFS file system support

[*] Provide NFSv3 client support

[ ] Provide NFSv4 client support (EXPERIMENTAL)

[ ] Allow direct I/O on NFS files (EXPERIMENTAL)

<*> NFS server support

[*] Provide NFSv3 server support

[ ] Provide NFSv4 server support (EXPERIMENTAL)

[ ] Provide NFS server over TCP support (EXPERIMENTAL)



либо в качестве модулей:

Linux Kernel Configuration: Включение модулей

File systems --->

Network File Systems --->

<M> NFS file system support

[*] Provide NFSv3 client support

[ ] Provide NFSv4 client support (EXPERIMENTAL)

[ ] Allow direct I/O on NFS files (EXPERIMENTAL)

<M> NFS server support

[*] Provide NFSv3 server support

[ ] Provide NFSv4 server support (EXPERIMENTAL)

[ ] Provide NFS server over TCP support (EXPERIMENTAL)



Добавляем NFS server support, так как на данной машине будет размещаться общий каталог portage. Поддержку клиента NFS можно добавить по желанию.


Сохраните конфиг вашего ядра и пересоберите его. Code: Пересборка ядра


gentoo # mount /boot //если это еще не сделано

gentoo # cd /usr/src/linux


Для ядер 2.4:


gentoo # make dep && make bzImage modules modules_install install

Для ядер 2.6:

gentoo # make && make modules_install



Включение поддержки


Перезагрузитесь, если включили поддержку NFS в ядро, или, если вы собрали ее как модули, просто запустите: modprobe nfs


Установка и настройка


Установите пакет

nfs-utils: emerge nfs-utils

Настраиваем автоматическое монтирование общего portage

rc-update add portmap default

rc-update add nfs default

Отредактируйте crontab на сервере (метод зависит от того, какой cron вы используете). Для vixie-cron и dcron команда выглядит так: crontab -e Добавьте код:


0 0 * * * emerge --sync > /dev/null 2>&1 || true --nospinner && emerge world -vup


Отредактируйте файл /etc/exports на сервере, чтобы в нем были следующие строчки:

/usr/portage ip_range/subnet(sync,no_root_squash,rw)


Отредактируйте /etc/fstab на клиентах, добавив в него следующий код:

SERVER_IP:/usr/portage /usr/portage nfs bg,hard 0 0


Отредактируйте /etc/modules.autoload.d/kernel-version, добавив следующую строку: nfs

Примечание: Кеш портежей не расшарен через nfs. Если каждый раз вас докучает обновление кеша при команде emerge сразу после синхронизации, попробуйте добавить следующее в crontab клиентов. Это обновит кеш на компьютерах ваших клиентов спустя 10 минут после старта синхронизации на сервере. Установите время согласно скорости вашего подключения.


10 0 * * * emerge --metadata



PORTAGE_TMPDIR


PORTAGE_TMPDIR должен быть локальным каталогом (для скорости).


Переменная PORTAGE_TMPDIR устанавливается в файле /etc/make.conf и по умолчанию указывает на /var/tmp, то есть на локальную файловую систему, но просто для того, чтобы увериться в том, что это так, а не иначе, сделайте: emerge info Если всё прошло успешно (а всё так и должно быть), вы спокойно можете очистить содержимое каталога /usr/portage на КЛИЕНТСКОЙ машине (например, чтобы освободить дополнительное свободное место на диске)


Пояснение кода


Запись crontab'а

0 0 * * * emerge --sync > /dev/null 2>&1 || true --nospinner && emerge world -vup


говорит о том, что раз в сутки, в полночь будут выполнятся синхронизация с перенаправлением вывода в мусор и без бегунка и emerge world -vup и отправка письма root'у о том, что должно быть обновлено - настройте корректно почту).


/etc/exports:

"/usr/portage" - каталог для экспорта

"ip_range/subnet" - только компьютеры из этого диапазона могут подключать его по сети

"(sync,no_root_squash,rw)" - полезные параметры, всегда мною используемые


/etc/fstab:

"SERVER_IP:/usr/portage" - что вы хотите подключить

"/usr/portage" - куда вы хотите подключить

"nfs" - ФС ресурса

"bg,hard 0 0" - полезные параметры, всегда мною используемые


/etc/modules.autoload.d/kernel-version:

"nfs" сообщает какой модуль загружать при загрузке ядра версии kernel-version


Комментарии


Советы? Пожелания? Похвала? Дайте нам знать.


Если вы получаете ошибку "Error starting NFS daemon" попробуйте


# mount -t nfsd nfsd /proc/fs/nfsd


это работает для меня.


Настройка Portage

Portage Setup Howto



Целевая аудитория


Это руководство создается для людей, которые хотят использовать все возможности системы Portage.


Зачем нужно это howto?


Portage — это система управления пакетами Gentoo Linux. Ее возможности довольно велики — сборка пакетов из исходников, включая конфигурирование пакета на основе пользовательских USE-флагов; начальная настройка приложений; установка предкомпилированных пакетов; удаление програм; автоматическое обновление, и т. д. Однако, как показывает опыт, несмотря на отличную документацию, большинство пользователей не знают всех возможностей этой замечательной системы, поэтому очень часто Gentoo Linux подвергается незаслуженной критике. Данный документ — это попытка восполнить этот пробел.


Профили Portage (Portage profiles)


Gentoo — многоплатформенная система, при этом количество поддерживаемых архитектур постоянно увеличивается. Поэтому возникает необходимость в так называемых профилях сборки. Профиль — это набор настроек по умолчанию для определенной архитектуры, или определенного класса задач (например, для систем с повышенной безопасностью существуют профили hardened и selinux). Наличие профилей, которые легко создавать, позволяет называть Gentoo не дистрибутивом, а метадистрибутивом, то есть дистрибутивом для создания других дистрибутивов ;). Но не об этом сейчас разговор.


Итак, для того, чтобы иметь работающую Gentoo-систему, необходимо выбрать себе нужный профиль. Профили по умолчанию находятся в каталоге /usr/portage/profiles. По названию профиля легко определить тот, который нужен вам. Например, 'default-x86-2004.2' — это стандартный профиль для архитектуры x86 версии 2004.2. Если в каталоге с профилем есть файл deprecated, то это означает, что данный профиль больше не поддерживается и выбирать его не следует.


После того как вы определились с выбранным профилем необходимо создать симлинк /etc/make.profile на каталог с выбранным профилем. Например, ln -s /usr/portage/profiles/default-x86-2004.2 /etc/make.profile Когда выйдет новая версия Gentoo, вам не надо бежать в магазин, покупать новые диски. Достаточно просто поменять симлинк /etc/make.profile на симлинк, указывающий на каталог с новым профилем.


Примечание: Сейчас идет переход на новый вид профилей — Cascading


Profiles. Такие профили имеют вид:


default-linux/x86/2004.2/


То есть настройки, общие для нескольких профилей не надо записывать по несколько раз. Пока что это экспериментальная фича, но если вы хотите помочь ее протестировать, то используйте на здоровье ;).


Примечание: Вообще-то переход на cascading profiles уже произошел, посему надо обновить то, что написано выше в этой секции "Portage profiles"



Настройки профилей


В профилях содержится следующая информация:


Конфигурацию профилей напрямую менять не следует, так как ваши настройки будут удалены после следующей синхронизации с rsync-сервером. О том как правильно настраивать portage будет рассказано в следующем разделе.


/etc/portage и /etc/make.conf

Для того, чтобы изменить конфигурацию выбранного профиля, нужно использовать конфигурационные файлы в /etc/portage. Если у вас нет этого каталога, то его необходимо создать. Вот список конфигурационных файлов, которые читает Portage во время своей работы:


/etc/portage/package.mask

Синтаксис: в каждой строке содержится DEPEND ATOM, то есть один из знаков >, <, >=, <=, =, категорию, название и версию пакета. Логические знаки обязательны если указана версия пакета.

Например: >=net-www/mozilla-1.7


Неправильные примеры:

net-www/mozilla-1.7 (нет логической операции)

>=mozilla-1.7 (нет категории)


Предназначение: Маскирует пакеты. Может использоваться для того, чтоб Portage не обновлял нужный вам пакет. Например, если вы хотите использовать apache-1.3 вместо apache-2.0


/etc/portage/package.unmask

Синтаксис: такой же, как и у package.mask

Предназначение: Демаскирует пакеты, которые маскированы в профиле. Используется для установки нестабильных пакетов. Рекомендуется использовать только тем, кто хочет протестировать какой-то нестабильный пакет.


/etc/portage/profile/package.provided

Синтаксис: В каждой строчке содержится полное имя пакета, то есть category/name-version

Например: dev-lang/ghc-6.2.1-r1

Предназначение: Замена 'emerge --inject'. При наличии пакета в package.provided Portage будет считать, что этот пакет уже установлен в системе.

Примечание: Иногда этого бывает недостаточно и пакет приходится вносить в /etc/make.profile/package.provided (который удаляется после каждого emerge sync)



/etc/portage/mirrors

Синтаксис: Такой же как и у файла /usr/portage/profiles/thirdpartymirrors. Предназначение: Список зеркал, которые будут использоватся в первую очередь. Можно также указать зеркала sourceforge или gnu, которые будут использоватся в первую очередь.

Например: sourceforge http://keihanna.dl.sourceforge.net/sourceforge


Так же можно использовать тип миррора 'local'. Такое зеркало будет проверятся, даже если в ebuild'е пакета есть RESTRICT="NOMIRROR". Например:


local ftp://gentoo.linux.kiev.ua/pub/Linux/Gentoo/distfiles/




/etc/portage/package.use

Синтаксис: DEPEND ATOM USE-флаги

Например: x11-libs/gtk+ doc

Предназначение: Установка индивидуальных USE-флагов для отдельных пакетов


/etc/portage/package.keywords

Синтаксис: DEPEND ATOM KEYWORD KEYWORD — это идентификатор, который показывает, насколько стабилен пакет на данной архитектуре. Всего есть 4 вида KEYWORDS:

arch — пакет стабилен на архитектуре arch

~arch — пакет стабилен на архитекруре arch, но еще не прошло время тестирования

-arch — у пакета наблюдаются проблемы на архитектуре arch.

-* — пакет нестабилен на всех архитектурах


Например: >=app-editors/emacs-cvs-21.3 ~x86

Предназначение: Установка индивидуальных KEYWORDS для отдельных пакетов. Используйте если хотите, чтоб в вашей стабильной системе были отдельные нестабильные пакеты или наоборот :)


/etc/portage/categories

Синтаксис: В каждой строке содержится название категории. Предназначение: Используется для создание новых категорий для Portage.

Например: app-vasia

Теперь вы можете создать ebuild для пакетов категории app-vasia. emacs ${PORTDIR_OVERLAY}/app-vasia/pupkin/pupkin-0.0.1.ebuild


/etc/make.conf

Файл /etc/make.conf служит для настройки самого процесса сборки пакетов. Никаких сложных опций там нет, читайте внимательно комментарии в /etc/make.conf.example.


$PORTDIR_OVERLAY

Представьте себе такую ситуацию: вы хотите установить пакет, ebuild'а которого нет в официальном дереве, но кто-то уже его написал. Или вы собираетесь самостоятельно научится писать ebuild'ы, и вы хотите, чтоб Portage мог устанавливать нужные вам программы. Если вы запишете свой ebuild в /usr/portage, то он сотрется при следующей синхронизации с rsync-сервером. Для того, чтобы third-party ebuild'ы сохранялись, необходимо создать каталог для их хранения (например, /usr/local/portage) и записать его имя в переменную $PORTDIR_OVERLAY в файле /etc/make.conf. Теперь вы можете размещать свои ebuild'ы в этом каталоге, пример был показан в предыдущем разделе.

Portage Overlay

Введение

Это руководство расскажет о том как установить ebuild который не включен в официальное дерево портежей.

Установка Portage Overlay

Первым делом мы должны указать PORTAGE_OVERLAY директорию, для этого необходимо отредактировать файл /etc/make.conf



Файл: /etc/make.conf

PORTDIR_OVERLAY="/usr/local/portage"



Таким образом мы позволяем устанавливать дополнительные ebuild'ы при этом не нарушая процесс синхронизации основного дерева портежей.



Месторасположение ebuild

Проверьте наличие директории /usr/local/portage, и если ее нет создайте ее install -d /usr/local/portage

Когда помещаете новый ebuild в /usr/local/portage, вы должны использовать такую же схему как в /usr/portage (category/program/program.ebuild)

Создание digest-файлов



digest-файлы -- это файлы, которые содержат md5 суммы файлов, необходимых для установки пакетов. После того, как Portage скачает необходимые файлы, будет сделана проверка на соответствие файлов их md5-суммам (это дает возможность убедиться в целостности файлов). Для того, чтобы Portage мог устанавливать пакеты, необходим digest-файл. Digest-файл можно создать с помощью команды ebuild /usr/local/portage/category/program/program.ebuild digest Вручную редактировать созданные этой командой файлы не следует. При этом надо учитывать требования к имени ebuild-а. При переименовании ebuild-а в произвольное имя, команда



ebuild /usr/local/portage/category/program/program.ebuild digest выдаст ошибку:



!!! /usr/local/portage does not seem to have a valid PORTDIR structure.



Чтобы этого не произошло необходимо переименовывать ebuild в то же самое имя, но с приставкой номера релиза.

Пример:

В портежах имеется ebuild:

/usr/portage/media-sound/ncmpc/ncmpc-0.11.1-r1.ebuild

И архив исходных кодов:

/usr/portage/distfiles/ncmpc-0.11.1.tar.gz для этого ebuild-а.

Вы хотите наложить свой патч и добавить ebuild вашего пропатченного пакета в систему. Для этого вы должны скопировать исходный ebuld в ваш новый, но добавить к нему приставку '-rN', где N - номер релиза. Если такая преставка уже есть - изменить её номер:

cp /usr/portage/media-sound/ncmpc/ncmpc-0.11.1-r1.ebuild /usr/local/portage/media-sound/ncmpc/ncmpc-0.11.1-r2.ebuild





После этого пропатчите исходные коды пакета, на который ссылается исходный

ebuild /usr/portage/distfiles/ncmpc-0.11.1.tar.gz

и сохраните его в /usr/portage/distfiles/ncmpc-0.11.1-r2.tar.gz



Далее, нам нужно будет поправить наш новый ebuild:



vi /usr/local/portage/media-sound/ncmpc/ncmpc-0.11.1-r2.ebuild

И изменить строку:

SRC_URI="http://mercury.chem.pitt.edu/~shank/${P}.tar.gz mirror://sourceforge/musicpd/${P}.tar.gz"


На строку:

SRC_URI="http://mercury.chem.pitt.edu/~shank/${P}-r2.tar.gz mirror://sourceforge/musicpd/${P}-r2.tar.gz"


Т.е. добавив наш префикс '-r2', чтобы система знала, какой именно файл с исходными кодами ей необходимо прописать. В данном случае скачать с сайта этот пакет конечно же не удастся, но нам этого и не требуется - нам необходимо установить нами поправленный пакет.



После этого даём команду

ebuild /usr/local/portage/media-sound/ncmpc/ncmpc-0.11.1-r2.ebuild digest,

после чего emerge будет знать о вашем пакете.



Установка нового ebuild



Когда вы будете устанавливать пакет используя новый ebuild, скорее всего он будет masked, поэтому надо добавить имя пакета в /etc/portage/package.keywords

Создайте директорию /etc/portage/, если она еще не создана, и затем выполните команду:

echo "<category>/<package> ~x86" >>/etc/portage/package.keywords



Теперь этот пакет можно установить как и любой другой:

emerge -p package

emerge package



Дополнительно



Unofficial ebuilds содержит список с коротким описанием сайтов где можно найти неофициальные пакеты Многие, написанные юзерами ebuild'ы, которые еще не попали в официальное дерево, находятся в Bugzill'е Gentoo. Найти нужные ebuild'ы можно с помощью поиска



Экономия трафика с помощью deltup

Что это такое?

Как известно, программы в Gentoo Linux устанавливаются из исходников. Это чистый текст. Однако, такие программы как, например, gcc или openoffice весят непростительно много. А у большинства из нас интернет не позволяет качать файлы больших объемов, а пользователи модемов вообще толком ничего обновить не могут. Для людей, которые экономят свои деньги, и была написана программа deltup. Вместо wget мы заставляем emerge использовать getdelta. Эта программа скачивает со специального сайта не весь архив программы, а только разницу между требуемой версией и тем, что у вас есть. Если у вас нет предыдущей версии программы, то придется качать весь архив.

Установка и настройка

Установка deltup

Теперь установим deltup:

emerge deltup и getdelta: emerge getdelta



Примечание: Если при выполнении emerge deltup выйдет ошибка "!!!All ebuilds that could satisfy "deltup" have been masked." перед командой добавьте ACCEPT_KEYWORDS="~x86"

Настройка emerge

Теперь нужно предупредить emerge о том что мы хотим использовать getdelta вместо wget. Для этого добавим в /etc/make.conf параметр FETCHCOMMAND: Файл: File /etc/make.conf

FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}"



Конфигурация getdelta



У getdelta есть свой файл конфигурации:/etc/deltup/getdelta.rc. Рассмотрим некоторые полезные параметры:

DELTUP_SERVER - указывает на используемый deltup сервер. Рекомендуется оставить без изменений, так как deltup-сервера сейчас собраны в сеть обращение к которой идёт через один сервер linux01.gwdg.de.

QUEUERETRY - количество секунд, которые будет ждать getdelta,пока сервер не сделает dtu-файл.

MAXIMUM_ACCEPTABLE_QUEUEPOS - максимальный номер в очереди ожидания. В связи с ростом загруженности deltup-сервера имеет смысл установить число побольше.

REMOVE_OLD - удалять старые версии файлов. Полезно, если вы не хотите складировать дистфайлы.

DO_NOT_REMOVE - путь к файлу, содержащему имена файлов, которые не следует удалять при включенной опции REMOVE_OLD

Дополнительно

Могут возникнуть проблемы если вы скачали часть файла нужного для установки. Дело в том, что для продолжения докачки emerge использует не FETCHCOMMAND, а RESUMECOMMAND. Однако не следует менять RESUMECOMMAND на getdelta, так как getdelta не поддерживает докачку.



Обновление портежей без доступа в интернет непосредственно из системы



Данное руководство может помочь вам если с доступом в интернет из системы Gentoo проблемы. Однако у вас есть свежий portage-xxxxxxxx.tar.bz2. Если portage-xxxxxxxx.tar.bz2.md5sum не старше 40 дней(возможно это ограничение можно убрать, но автор этих строк не знает как) тогда проще сделать так :

Создаем папку /var/tmp/emerge-webrsync/ командой:

# mkdir /var/tmp/emerge-webrsync/

Копируем фаилы portage-xxxxxxxx.tar.bz2 и portage-xxxxxxxx.tar.bz2.md5, которые находятся к примеру, в корневом каталоге на CD-ROM диске (/mnt/cdrom/portage-xxxxxxxx.tar.bz2 и /mnt/cdrom/portage-xxxxxxxx.tar.bz2.md5sum), командами:

# cp /mnt/cdrom/portage-xxxxxxxx.tar.bz2 /var/tmp/emerge-webrsync/

#cp /mnt/cdrom/portage-xxxxxxxx.tar.bz2.md5sum /var/tmp/emerge-webrsync/

и обновляем портежи при помощи

emerge -webrsync: # emerge-webrsync



Теперь мы получили систему портежей по состоянию на xxxxxxxx.

Если же portage-xxxxxxxx.tar.bz2 старше 40 дней тогда:

Первым делом переименовываем каталог /usr/portage например в /usr/portage2:

# mv /usr/portage /usr/portage2

затем создаем переименнованный /usr/portage:

# mkdir /usr/portage

Перемещаем из /usr/portage2/distfiles исходники (если вам они нужны :) ) обратно в /usr/portage/distfiles:

# cp /usr/portage2/distfiles /usr/portage/distfiles

Теперь можно распаковывать наш новый portage-xxxxxxxx.tar.bz2, который находится, к примеру, в корневом каталоге на CD-ROM диске (/mnt/cdrom/portage-xxxxxxxx.tar.bz2), командой:


# tar -xvjpf /mnt/cdrom/portage-xxxxxxxx.tar.bz2 -C /usr/portage

После достаточно продолжительной распаковки нужно обновить кэш системы портежей:

# emerge metadata

Теперь мы получили систему портежей по состоянию на xxxxxxxx, а в каталоге /usr/portage2 - её бэкап.

Дополнительно можно прочитать:

HOWTO Обновление пакетов без доступа в интернет непосредственно из системы.



Обновление пакетов без доступа в интернет непосредственно из системы



В моем случае это понадобилось в следующей (я полагаю довольно распространенной) ситуации: дома - нет интернета (дорогой, медленный - нужное подчеркнуть :) ), а на работе - хороший и бесплатный. Итак для начала необходимо получить список нужных пакетов. В этом примере мы хотим установить/обновить glibc baselayout texinfo gettext zlib binutils gcc ncurses. Список мы сохраняем на устаревший магнитный носитель, но счастливые обладатели более надежных носителей естественно могут пользоваться ими.

Получение списка для скачивания:

(Не забывайте '2' перед '>') Code:

# emerge -fp glibc baselayout gettext zlib binutils gcc ncurses 2> stage1.list

# mount -t vfat /dev/fd0 /mnt/floppy

# cp /mnt/gentoo/stage1.list /mnt/floppy

# umount /mnt/floppy



Теперь вставляем дискету в компьютер с хорошим каналом. (В моем случае это рабочий компьютер.) Если заглянуть в файл stage1.list, можно увидеть, что в нем перечисляются несколько ссылок на каждую загрузку. К сожалению, это не совсем то, что нам надо. Сначала список надо почистить от лишнего:



Очистка от лишних ссылок:



Этот скрипт привязан к формату вывода emerge, который может измениться без предварительного предупреждения - используйте с осторожностью! # cut -f 1 -d ' ' stage1.list > stage1.download

Теперь используем wget для загрузки списка пакетов:

# wget -N -i stage1.download

Получив все файлы, переносим их в наш компьютер в /mnt/gentoo/usr/portage/distfiles. И для проверки запустим

# emerge -pv glibc baselayout gettext zlib binutils gcc ncurses

Если в строке Total Download: указана цифра 0 - значит все было сделано верно. Можно теперь запускать установку:

# emerge glibc baselayout gettext zlib binutils gcc ncurses

У всего вышеописанного есть один недостаток. В фаиле stage1.download есть все необходимые для установки фаилы. Даже те, которые у вас могут быть в distfiles. А как вырезать ссылки из stage1.download на имеющиеся в distfiles фаилы я не знаю. Если кто знает - напишите.

Взято с Gentoo.org: http://www.gentoo.org/doc/ru/altinstall.xml



Полное обновление системы



Приведение в порядок /var/lib/portage/world



В world должен быть список программ, которые нужно доустановить к тем, которые уже входят в "system" (т.е. в текущий профайл).

в world не должно быть никаких библиотек, и т.д., которые не нужны сами по себе, а нужны только для удовлетворения чьих-то зависимостей (чтобы не продолжать устанавливать/обновлять их, если они уже станут не нужны по какой-то причине) программ, которые уже входят в "system", не должно быть в world. В world нельзя указывать определенную версию софта, это лучше делать в /etc/portage/package.mask.

Скрипт regenworld может помочь восстановить world путем анализа /var/log/emerge.log и генерации на его базе файла world (он перезапишет текущий world!).

Скрипт dep -p -w поможет найти избыточные записи в world(которые всё-равно нужны другим записям в world или входят в system).


Перед серьёзными обновлениями желательно просмотреть /etc/portage/*, т.к. там могут быть уже не актуальные записи мешающие текущему обновлению.



Обновление profile

Не каждый Gentoo release включает в себя новый profile (например, 2004.1 был без profile). Даже если новый profile есть, то переходить на него не обязательно (если это будет обязательно, то старый профайл будет deprecated и emerge об этом должен будет громко кричать).

Инструкции по обновлению profile будут выкладываться здесь:

http://www.gentoo.org/doc/en/gentoo-upgrading.xml

и как правило сводиться к изменению симлинка /etc/make.profile

USE-флаги

Запустить emerge -uDpv --newuse world и проверить что USE-флаги для всех пакетов выставлены корректно, и при необходимости скорректировать

USE-флаги выставляются в /etc/make.conf и /etc/portage/package.use

Запуск обновления системы (если не нужно обновлять toolchain)





Если

emerge -uDav --newuse world

показывает что будет обновляться пакет входящий в toolchain (linux-headers, glibc, binutils или gcc), то крайне рекомендуется полностью перекомпилировать всю систему - см. следующий пункт - а иначе можно вместо следующего пункта просто запустить:

emerge -uDav --newuse world

Некоторые причины не использовать emerge -U вместо -u

Причина 1: Проблемы со SLOT

Это, к примеру, происходит потому, что некоторые люди хотели gimp-2 вместо gimp-1.2. Представьте ситуацию, где gimp-1.2 помечен stable и находится в SLOT 1, gimp-2 помечен unstable и находится в SLOT 2. Теперь при выполнении ACCEPT_KEYWORDS=~x86 emerge gimp получите gimp-2.

Позже, когда вы посчитаете, что наступило время обновить свою систему чем-либо похожим на "emerge -U world", эта команда установит gimp-1.2, потому, что gimp находится в world-файле, и флаг "-U" не обрабатывает SLOT должным образом.



Причина 2: Проблемы, в случае удаления ebuild-ов с Portage-дерева.

Допустим, в Portage находятся 2 версии пакетов foo, foo-1.4 (помеченный как stable) и foo-1.6 (помеченный как unstable). Вы хотите вариант unstable и делаете emerge, как с вышеуказанным gimp. Позже обновляете world как было сказано выше, но в промежутке этого времени вышло критическое обновление для foo-1.6 - foo-1.6.1. Теперь появляется несколько возможностей обработки.

foo-1.6 был удален из Portage. Будет установлен foo-1.4, несмотря на "снижение" версии вместо флага "-U"

Ситуация будет еще хуже, если foo-1.6 не был удалён из Portage по какой-либо причине: foo-1.6 (тот, что с критической уязвимостью) будет оставаться на вашей системе до тех пор, пока не будет помечено stable что-либо выше чем foo-1.6.



Обновление одного из пакетов входящих в toolchain



Если обновляется хотя-бы один из linux-headers, glibc, binutils или gcc, то рекомендуется пересобрать их дважды, после чего весь system, после чего весь world.

Примечание: Цель двойной компиляции toolchain - получить гарантированно стабильный и корректный toolchain не зависящий от предыдущего. Перекомпилировать system/world после этого жёсткой необходимости нет, по крайней мере если остальной софт продолжает работать (возможно даже используя библиотеки из старого toolchain - см. предыдущие пункты об апгрейде).

Цель перекомпиляции system/world - чтобы весь софт получил потенциальное преимущество от установки нового toolchain. system перекомпилируется перед world из тех-же соображений, т.к. при компиляции программ из world используются утилиты из system.

Если увеличивается первая или вторая цифра версии gcc, то перед второй сборкой нужно переключиться на новую версию через gcc-config - иначе новый gcc просто установится параллельно со старым в "новый слот", но по умолчанию использоваться будет старый.

При сборке system после двойной перекомпиляции toolchain нет необходимости опять компилировать toolchain как часть system. Аналогично при сборке world после system нет небходимости опять компилировать пакеты из system как часть world. Это можно попробовать обойти либо вручную, либо используя скрипты [1], либо через бинарные пакеты и `emerge -k` (я предпочитаю последний вариант).

Итак, рекомендованный набор команд:

# для того, чтобы безопасно использовать `emerge -k` нужно очистить

# каталог с текущими бинарными пакетами

# (напр., переместить его в /tmp/portage-packages)

pkgdir=$(portageq pkgdir)

mv $pkgdir /tmp/portage-packages1

install -d -o portage -g portage $pkgdir

# первая сборка toolchain

emerge linux-headers glibc binutils gcc-config gcc

# выбрать новый gcc если он установился в новый слот

gcc-config имя_или_номер_нового_gcc

# см. `gcc-config -l`

source /etc/profile

# компиляция toolchain с созданием бинарных пакетов

emerge -b glibc binutils gcc portage

# не компилить glibc, binutils и gcc

emerge -bke system

# не компилить предыдущие пакеты (включая system)

emerge -bke world

Примечание: Чисто теоретически существует пакет binutils-config, который когда-нибудь может потребоваться использовать аналогично gcc-config.



Обновление безопасности.



Примечание: Даже после `emerge -uDav --newuse world` в системе могут оставаться

устаревшие пакеты с дырами в безопасности - в слотах!



glsa-check -l | grep '\[N\]'

emerge ... # если нужно



Удаление неиспользуемых пакетов.



После обновления системы в ней могут оказаться пакеты, которые никто не использует. Эти пакеты желательно удалить, т.к. они не будут в дальнейшем обновляться при `emerge -uDav --newuse world`.

emerge -a depclean # очень осторожно!!!

После обновления библиотек может потребоваться перекомпилировать программы, которые эти библиотеки используют:



Примечание: Для glsa-check, revdep-rebuild необходимо установить пакет gentoolkit



rm /root/.revdep-rebuild*.?_*

revdep-rebuild -p

revdep-rebuild



Обновление конфигов.

dispatch-conf

Если используется runit-init и обновлялся пакет baselayout, то нужно восстановить /sbin/init:

ls -l /sbin/*init*

if (/sbin/init это бинарник, а не симлинк) {

mv /sbin/init /sbin/init-sysv

ln -s runit-init /sbin/init

}


Отслеживание важных сообщений при установке пакетов.


В процессе emerge world выдаётся очень много сообщений, причём важные комментарии перемешаны с командами компиляции, и отследить их при сборке нескольких пакетов одновременно не возможно.

Но все эти сообщения можно получить из log-файлов после окончания установки emerge world. Для этого нужно использовать либо enotice, либо portlog-info.



Сборка на другом компьютере



Существует много методов добиться этого, но мы используем самый удобный - тот, что работает с портежами.

Другие методы могут быть более подходящими для других ситуаций, когда главная проблема не только медленный процессор и долгое время сборки, например, если надо перенести Gentoo на систему, которая не может загружаться с CD или сети.

Скомпилировать Gentoo для старых систем x86 (например, Pentium Pro 200MHz с небольшим количеством RAM) можно на x86_64-системе с работающей Gentoo. Обратный трюк, собрать 64-битную систему на 32-битном компьютере, невозможен.



Я собирал систему в chroot-окружении согласно Gentoo-handbook, используя мою 64bit-Gentoo вместо "живого" CD:

# mkdir /your/new/gentoo

# tar xjvpf stage3-x86-*.tar.bz2 -C /your/new/gentoo



Отредактируйте переменные CHOST и CFLAGS, соответствующие вашей целевой системе (не изменяйте CHOST, если используете стадию 2 или 3 - возмите стадию для соответствующей платформы). У меня было:

# CHOST="i686-pc-linux-gnu"

# CFLAGS="-march=pentiumpro -Os -momit-frame-pointer -pipe"

# CXXFLAGS="$CFLAGS"



Далее переходим в chroot-окружение и выполняем все шаги, описанные в Руководстве Gentoo по установке.



Чтобы собрать ядро для i386 на x86_64-машине добавьте ARCH=i386 при конфигурации и компиляции ядра.

# make menuconfig ARCH=i386

# make clean dep modules modules_install bzImage ARCH=i386

# cp arch/i386/boot/bzImage /boot/vmlinuz



Размечать диск и создавать файловые системы на старом компьютере вам придется с помощью "живого" CD или другой системы Linux.



Переносим готовую систему на старый компьютер:

# cd /your/new/gentoo

# echo "/sys/*" >> tar_exclusions

# echo "/var/run/*" >> tar_exclusions

# echo "/tmp/*" >> tar_exclusions

# echo "/proc/*" >> tar_exclusions

#

# tar -C /your/new/gentoo -X tar_exclusions --preserve -cf ../gentoo.tar .

## можете добавить -v для подробного вывода или -j / -z для компрессии

# scp [-P ssh_port] ../gentoo.tar user@dest_pc:



На старой машине подготавливаем диски и распаковываем систему:

# tar -C /your/new/system --preserve -xf ~user/gentoo.tar



Теперь вы можете войти в chroot-окружение. Сконфигурируйте системный загрузчик и перегрузитесь. Теперь вы находитесь в новой, с иголочки, Gentoo.

Система теперь должна работать, но я заметил проблему - я не могу ничего скомпилировать. Похоже, что не работает ни C-препроцессор, ни gcc (обычно configure говорит, что /lib/cpp fails sanity check). Не знаю почему, но копирование /usr/include из chroot-каталога с исходной машины на старый компьютер эту проблему решило.



Удачи!



Оригинал на http://gentoo-wiki.com/HOWTO_Compile_on_another_computer

Перевод Poor Fred



Прочее



Разделы MS Windows по-русски

Введение



Достаточно часто возникает необходимость подмонтировать раздел с установленным M$ Windows.

Ядро



Для того, чтобы система могла работать с разделами FAT или NTFS, необходимо включить их поддержку в ядре.

Linux Kernel Configuration: Filesystems

File systems ->

DOS/FAT/NT Filesystems ->

(M) DOS FAT fs support

(M) MSDOS fs support

(M) VFAT (Windows-95) fs support

(M) NTFS file system support



Также надо включить поддержку следующих кодировок:

Linux Kernel Configuration: Native Language Support

File systems ->

Native Language Support ->

<M> Windows CP1251 (Bulgarian, Belarusian)

<M> Codepage 866 (Cyrillic/Russian)



Монтирование



Теперь можно примонтировать любой windows-раздел программой mount. mount -t file_system /dev/device /mnt/dir В нашем случае в качестве file_system необходимо указывать vfat или ntfs, в зависимости от файловой системы раздела с windows.



Монтирование FAT



Для монтирования разделов FAT нужно использовать следующую команду:

mount -t vfat -o codepage=866,iocharset=koi8-r,quiet,umask=000 /dev/hdd2 /mnt/win1



Для украинских символов:

mount -t vfat -o codepage=866,iocharset=koi8-u,quiet,umask=000 /dev/hdd2 /mnt/win1



Мы использовали дополнительные опции iocharset, codepage, quiet и umask.

Рассмотрим их внимательнее:



Параметры codepage и iocharset можно задать прямо в ядре. Тогда не нужно будет писать их каждый раз:

Linux Kernel Configuration: FAT

File systems ->

DOS/FAT/NT Filesystems ->

(utf8) Default iocharset for FAT

(866) Default codepage for FAT



То есть вместо

mount -t vfat -o codepage=866,iocharset=utf8,quiet,umask=000 /dev/hdd2 /mnt/win1 можно писать

mount -t vfat -o quiet,umask=000 /dev/hdd2 /mnt/win1



Монтирование NTFS



Для монтирования NTFS разделов опции mount немного изменяться. Делаем это так:

mount -t ntfs -o nls=koi8-r,umask=0,ro /dev/hdd2 /mnt/win1

Для украинских символов:

mount -t ntfs -o nls=koi8-u,umask=0,ro /dev/hdd2 /mnt/win1

Вот что они значат:

nls - указывает на вашу системную локаль. Отсутствие опций codepage и iocharset связано с тем,что NTFS разделы используют юникод для хранения имен файла.

umask - указывает на то что читать файлы с этого раздела могут все. А вот писать не разрешает опция ro. Мы рекомендуем ее поставить,так как функция записи на разделы NTFS еще не отлажена.

В случае если вы в качестве системной кодировки используете utf-8, то опции mount должны быть следующими: mount -t ntfs -o utf8,umask=0,ro /dev/hdd2 /mnt/win1

utf8 - использовать UTF-8 для перекодировки имён файлов.



Автомонтирование

Если у вас все еще есть разделы ОС Windows на харде,то можно добавить монтирование этих разделов при загрузке.Для этого необходимо отредактировать файл /etc/fstab. Файл: /etc/fstab

...

/dev/hda9 /mnt/win1 vfat auto,codepage=866,iocharset=koi8-r,quiet,umask=000 0 0

#/dev/hda9 /mnt/win1 vfat auto,codepage=866,iocharset=koi8-u,quiet,umask=000 0 0

/dev/hda3 /mnt/win2 ntfs auto,nls=koi8-r,umask=0,user 0 0



еще к опциям можно добавить showexec, чтобы все файлы не выглядели исполняемыми, в случае с FAT32



Udev

Настройка системы



Установка необходимых программ

emerge udev hotplug coldplug

Конфигурация ядра



Для активизации udev нам необходимо ядро 2.6. Лично у меня 2.6.12-mm1.

General setup --->

[*] Support for hot-pluggable devices

File systems --->

Pseudo filesystems --->

[ ] /dev file system support (OBSOLETE)

[ ] Automatically mount at boot (NEW)

[*] Virtual memory file system support (former shm fs)



Примечание: devfs Может быть включен, но автоматическое монтирование обязано быть выключено. А с учетом того, что из 2.6.13 его вообще собираются убрать... ну смотрите сами.

Примечание: Во всяком случае, из 2.6.14 убрали



Ядро собираем и устанавливаем.



Конфигурация системы



Не буду рассматривать как udev работает из таррбола, рассматриваю вариант чистого udev.


/etc/conf.d/rc:

...

RC_DEVICE_TARBALL="no"

...

RC_DEVFSD_STARTUP="yes"

...



Примечание: Последнюю опцию можно поставить в "no", когда мы убедимся в нормальной работоспособности udev



rc-update add coldplug boot rc-update add hotplug default



Конфигурация процесса загрузки



GrUB



К строке kernel от старого ядра необходимо дописать:

kernel /boot/kernel-2.6.9-r4 root=/dev/hda3 gentoo=noudev



А в строке kernel для нового ядра прописать:

kernel /boot/kernel-2.6.10-r6 root=/dev/hda3 gentoo=nodevfs



Troubleshuting



Попытка номер раз



В принципе можно перегружаться, но нас ждет одно неприятное сообщение. Вот примерно такое:

WARNING: Unable to open an initial console



Для того чтобы все было хорошо, нам необходимо загрузиться с другого носителя (например любой LiveCD) подмонтировать наш корневой раздел, и в каталоге /dev (каталог по идее должен оказаться абсолютно пустым) проделать следующее: Code:

# mknod -m 660 console c 5 1

# mknod -m 660 null c 1 3



POMAH007: Зачем же так жестоко - заставлять грузиться с компакта? Согласно udev guide с www.gentoo.org (http://www.gentoo.org/doc/en/udev-guide.xml), доступ к девственному /dev можно получить альтернативно: Code: Code Listing 3.1: Listing device nodes available at boot

# mkdir test

# mount --bind / test

# cd test/dev

# ls





Попытка номер два



С консолью вроде все в порядке, а вот иксы не хотят... грузимся в шелл и в файле конфигурации Xorg прописываем в разделе мыши:



Option "Device" "/dev/input/mice"



PS

Ну теперь вроде все так как было раньше. и старая конфигурация тоже работает. Если старая конфигурация не нужна, то убираем все из загрузчика, ставим в /etc/conf.d/rc - "no" и живем спокойно под udev.



PPS

Кстати тарболл может потребоваться пользователям нестандартных устройств, а так же некоторых сторонних модулей ядра





Использование CFLAGS для оптимизации собранных программ



Для чего все это надо?



Стремление выжать из своего компьютера максимум производительности есть в каждом, ну почти в каждом ;-). Особенно его много в русских линуксоидах Gentoo'шниках ;) Мы попытаемся путем изменения флагов оптимизации ускорить работу приложений нашей системы.

ВНИМАНИЕ: Некоторые флаги могут сделать приложения нестабильными, так что нужно быть аккуратным.



Оптимизация



Переменная окружения CFLAGS

Для указания параметров оптимизации компилятору GCC, используется переменная окружения CFLAGS. Эта переменная определена в /etc/make.conf, её можно изменить двумя способами:

Отредактировать эту переменную в /etc/make.conf;

Экспортировать ее в окружение (emerge будет использовать эти параметры, но каждый раз выполнять export неудобно):



export CFLAGS='параметры оптимизации'



Уровни оптимизации



Для gcc версий 3.x и выше существует только 5 уровней оптимизации: -O0 (без оптимизации), -O1, -O2 и -O3 (O3 - самый высокий уровень), а так же -Os.

Примечание: Если вы используете несколько -O опций, то только последняя объявленная будет оказывать влияние на процесс компиляции.



-O0

Отключает оптимизацию. Только переменные, объявленные register, сохраняются в регистрах.



-O(-O1)

Включает оптимизацию. Пытается уменьшить размер кода и ускорить работу программы. Соответственно увеличивается время компиляции. При указании -O активируются следующие флаги: -fthread-jumps, -fdefer-pop.

На машинах, у которых есть слоты задержки, включается опция -fdelayed-branch.

На тех машинах, которые способны поддерживать отладку даже без указателя на стек функции, также включается опция -fomit-frame-pointer.

На других машинах могут быть включены и другие флаги.



-O2

Оптимизирует еще больше. GCC выполняет почти все поддерживаемые оптимизации, которые не включают уменьшение времени исполнения за счет увеличения длины кода. Компилятор не выполняет раскрутку циклов или подстановку функций, когда вы указываете -O2. По сравнения с -O, эта опция увеличивает как время компиляции, так и эффективность сгенерированного кода.

-O2 включает все флаги оптимизации наследованные от -O. Также включает следущие флаги оптимизации:

-fforce-mem -foptimize-sibling-calls

-fstrength-reduce -fcse-follow-jumps -fcse-skip-blocks

-frerun-cse-after-loop -frerun-loop-opt -fgcse -fgcse-lm

-fgcse-sm -fgcse-las -fdelete-null-pointer-checks -fexpensive-optimizations

-fregmove -fschedule-insns -fschedule-insns2 -fsched-interblock

-fsched-spec -fcaller-saves -fpeephole2 -freorder-blocks

-fre-order-functions -fstrict-aliasing -funit-at-a-time -falign-functions

-falign-jumps -falign-loops -falign-labels -fcrossjumping



-O3

Оптимизирует еще немного. Включает все оптимизации -O2 и также включает флаг -finline-functions и -fweb.



-Os

Включает оптимизацию по размеру. -Os флаг активирует все флаги оптимизации из -O2, в основном те, которые не увиличивают размер выходного файла. В дальнейшем выполняются оптимизации по уменьшению размера кода.

-Os выключает следущие флаги оптимизации: -falign-functions, -falign-jumps, -falign-loop, -falign-labels, -freorder-blocks, -fprefetch-loop-arrays.



Примечание: Более полное описание флагов -Ox, -fflag смотрите в man gcc



Оптимизация под тип процессора



Не все процессоры одинаковы,поэтому давайте укажем компилятору на наш тип процессора. Для этого есть опции -mtune и -march.Отличие в том,что с опцией -mtune компилятор сделает код,который будет совместим с более младшими моделями процессора,в то время как с -march этого не происходит.Вот список возможных значений для данных опций:

i386

i486

i586

i686

pentium

pentium-mmx

pentiumpro

pentium2

pentium3

pentium4

pentium-m

prescott

nocona

k6

k8

k6-2 (не рекомендуется ставить, из-за багов в компиляторе, заменять на i686)

k6-3

athlon

athlon-tbird

athlon-4

athlon-xp

athlon-mp

athlon64

opteron

winchip-c6

winchip2

c3.



Внимание! pentium-m - это аналог для pentium3. Если процессор в вашем ноутбуке Mobile Intel Pentium 4 - M, то нужно ставить опцию pentium4 или pentium4m (они равнозначны)



Примечание(JohnBat26) (обновлено в 1.5): Если Вы используете компилятор версии 4.2.0 и выше, то вместо указания специфичного типа процессора, можно указывать одно из двух (в параметрах: -march и -mtune):

  1. generic: если Вы хотите, чтобы Ваш скомпилированный код запускался на всех процессорах, архитектуры x86;

  2. native: если Вы хотите оптимизировать код только для Вашего процессора. В этом случае компилятор будет брать сведения о процессоре путем вызова cpuid ! .





Выбор оптимальных параметров



Для этого есть очень интересная утилита. emerge acovea



Правда существующие профили рассчитаны только на pentium 3/4, и на gcc 3.3/3.4, Но в принципе добавить свою конфигурацию тоже не составляет труда. Также рекомендуется добавить в конфигурацию опции -ftracer и -mfpmath=sse. В некоторых случаях они дают значительный прирост производительности сгенерированного кода.



После чего вызываем утилиту runacovea -config gcc33_pentium3.acovea -bench evobench.c Ждем несколько часов и получаем оптимальные флаги компиляции.



Возможны различные тесты, которые хранятся в каталоге /usr/share/acovea/benchmarks, И различные конфигурации платформы /usr/share/acovea/config, к которым при желании можно добавить свою.



Редактор nano



nano - Nano's ANOther editor



Nano - достаточно простой и удобный текстовый редактор, клон редактора pico



Установка



emerge nano



Конфигурация

Файл: /etc/nanorc



Запуск



Запуск редактора

nano -w somefile



Параметр -w здесь означает запрет переноса строк.





Udev и автомонтирование носителей

Введение



В данной статье речь пойдет о том, как настроить udev для автоматического монтирования и отмонтирования usb-носителей. Ведь согласитесь, неудобно каждый раз монтировать флэшки из консоли. А когда вам нужно быстро что-то скинуть с одной флэшки на другую? Здесь я привожу одно из возможных решений.



Требования



У меня установлена следующая версия udev:

sys-fs/udev-069



Я умышленно не ставлю более новые версии, т.к. с ними возникают проблемы при загрузке firmware на моем компьютере. Возможно в более новых версиях что-то работает по-другому, но суть одна и та же.



Настраиваем udev



Создаем правила для flash-носителей

Правила udev, в соответствии с которыми устройствам назначаются имена, а также выполняются специфические действия, расположены в /etc/udev/rules.d/*. В этой директории уже есть файлы, содержащие правила, у меня их было 2:

# ls /etc/udev/rules.d

05-udev-early.rules

50-udev.rules



Такие названия им были даны неспроста. Дело в том, что udev обрабатывает файлы в этой директории в алфавитном порядке по возрастанию. Вообще, при написании правил udev следует помнить 2 главные вещи:

Udev считывает файлы из /etc/udev/rules.d в алфавитном порядке.

Найдя первое подходящее правило для устройства, udev прекращает дальнейший поиск.

Давайте добавим свой файл с правилами так, чтобы он обрабатывался раньше, чем файл с правилами по умолчанию (50-udev.rules). Назовем его 10-udev-my.rules. Содержимое нового файла будет следующим:

Файл: /etc/udev/rules.d/10-udev-my.rules



# First rule

SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="add", NAME="%k", GROUP="disk", RUN+="/etc/udev/scripts/udev-flash-mount add %k"

#Second rule

SUBSYSTEM=="block", KERNEL=="sd*", ACTION=="remove", RUN+="/etc/udev/scripts/udev-flash-mount remove %k"



Теперь разберемся в том, что написали.

Первое правило (добавление устройства)

SUBSYSTEM=="block" При добавлении нового устройства в систему возникает множество событий разных классов. block - это класс для блочных устройств, который нам больше всего подходит для составления правила. Для просмотра значений всех переменных, возникающих событий используйте udevmonitor --env Т.о. здесь мы реагируем только на событие, в окружении которого есть переменная SUBSYSTEM со значением block .

KERNEL=="sd*" Эта часть правила сравнивает имя устройства, которое было дано по умолчанию ядром, с шаблоном. В данном случае нам нужны такие имена как: sda, sda1, sdb, sdb1 и т.д.

ACTION=="add" Реагируем на событие добавления устройства. Например, usb флэшка была вставлена в разьем.

NAME="%k" Обратите внимание на то, что здесь стоит один знак равенства, а не два, как в предыдущих частях правила. Это говорит о присваивании, а не сравнении. Здесь мы присваиваем вставленному устройству имя, которое соответствует тому, что было дано по умолчанию ядром. %k это одна из переменных окружения. Подробнее о них можно прочитать в man udev.

GROUP="disk" Причисляем устройство к группе дисковых.

RUN+="/etc/udev/scripts/udev-flash-mount add %k" Это самая интересная часть скрипта. Здесь мы добавляем ("+=") одно из действий, которое произойдет после обработки правила. В данном случае мы запускаем скрипт (он будет рассмотрен далее) /etc/udev/scripts/udev-flash-mount и передаем ему 2 параметра. Первый указывает на то что нужно выполнить действия по добавлению и инициализации нового устройства, а второй содержит имя устройства, с которым нужно выполнять действия.

Второе правило (удаление устройства)

ACTION=="remove" Реагируем на удаление устройства.

RUN+="/etc/udev/scripts/udev-flash-mount remove %k" Здесь мы запускаем скрипт, использовавшийся в первом правиле, но уже для выполнения действий после удаления устройства из системы. Этот скрипт будет выполнен как только ядро заметит, что устройство было удалено из системы. Это не самое лучшее решение, т.к. данные могут быть утеряны, но об этом в следующем разделе.



Пишем скрипт



Теперь напишем скрипт, который будет выполняться после добавления устройства и после его удаления. Допустим он будет размещен в /usr/bin/. Итак, от пользователя root:

# su



Создадим файл:

# touch /etc/udev/scripts/udev-flash-mount



Сделаем его исполняемым:

# chmod u+x /etc/udev/scripts/udev-flash-mount



Напишем в нем следующее: Файл: /etc/udev/scripts/udev-flash-mount

#!/bin/bash



LOG="/var/log/udev"

sleep 3

DEV=`echo $2 | sed -n '/^sd[a-z][1-9]\?/p'`

if [ "$1" = "add" ]; then

if [ "$DEV" != "" ]; then

echo "--- `date` ---" >> $LOG

echo "Mounting /dev/$DEV" >> $LOG

mkdir /mnt/$DEV >> $LOG 2>&1

chmod a+rwx /mnt/$DEV >> $LOG 2>&1

mount /dev/$DEV /mnt/$DEV -o sync,umask=0000,iocharset=cp1251 >> $LOG 2>&1

fi

elif [ "$1" = "remove" ]; then

if [ "$DEV" != "" ]; then

echo "--- `date` ---" >> $LOG

echo "Unmounting /dev/$DEV" >> $LOG

umount /dev/$DEV >> $LOG 2>&1

rm -rf /mnt/$DEV >> $LOG 2>&1

fi

fi





Задержка в 3 или более секунд необходима для того, чтобы ядро успело выполнить свои действия по инициализации устройства. Если не лень, то поэкспериментируйте с задержкой. Если скрипту был передан параметр add, то он создает папку с именем устройства, затем пытается примонтировать устройство в эту папку. Весь вывод, в том числе и ошибки, выводятся в файл лога. Соответственно, при вызове скрипта с параметром remove, он пытается отмонтировать устройство и удалить ранее созданную папку. Предупреждение: Опция sync в параметрах mount является необходимой, т.к. форсирует мгновенную запись на устройство. Если ее не будет, то когда вы удалите устройство из системы, данные не будут записаны на него. Поэтому, чтобы избежать проблем такого рода, дождитесь пока индикатор на носителе перестанет мигать и после этого извлеките устройство. НО для файловой системы fat c версии ядра linux 2.6.13 sync ставить нельзя т.к. функционирование данной опции сильно изменилось и максимальная скорость записи на usb2.0 это 200 клибойт в секунду а для usb1.0 это где то 10 - 20 килобайт в секунду. Кроме того, опция sync в параметрах mount убьет Вашу флешку с гарантией за 6 месяцев использования. См. http://bugs.debian.org/309625

Предупреждение: Внимание! Если какая-либо запущенная программа просматривает содержимое папки, в которую смонтировано устройство, то скрипт не сможет отмонтировать его и удалить папку. Поэтому сначала убедитесь в том, что ни одна из программ не использует эту папку.



Заключение



Последний скрипт можно немного модернизировать. Предположим, если вы монтируете свою камеру, чтобы просмотреть фотографии, то можно передать скрипту еще один параметр из udev правила, например, с производителем устройства. Либо можно проанализировать содержимое каталога и на основе этого выполнить какие-либо действия. Все в ваших руках, дерзайте



Оптимизация glibc



Введение



Glibc - свободная библиотека, предоставляющая системные вызовы и другие основные операторы для основных систем GNU/Linux. Если C является наиболее распространённым языком, используемым для программирования в Linux, такая же судьба постигла и glibc - она является продуманной частью ядра системы. Glibc может быть оптимизирована на вашей системе для ускорения операций различными способами. Оптимизация, естественно, зависит от вашей системы и её использования. Это также зависит от установки флагов USE, доступных при выполнении emerge. До применения рекомендаций рекомендуется узнать о назначении и использовании флагов USE. Есть неплохая инструкция здесь.



Оптимизация компиляции Glibc



Эффект CFLAGS



Компиляция Glibc с возможностями GCC используется в основном коде glibc. Glibc идентифицирует GCC как компилятор и использует установленный флаги CFLAGS.Подробней здесь. Используя правильные флаги CFLAGS для вашей системы, вы можете хорошо оптимизировать glibc.



Улучшение оптимизации



Если вы использовали -fomit-frame-pointer, вы можете также поместить glibc-omitfp во флаги USE. Повторно пересоберите glibc. Code: Remerging glibc

emerge --newuse -v world



При этом соберутся Glibc и её зависимости. При компиляции glibc этот флаг активизирует флаг -enable-omitfp, который, в свою очередь, указывает glibc на использование --fomit-frame-pointer. В результате более безопасно устанавливается указатель кадра. Этот флаг устанавливает максимальную оптимизацию glibc и предоставляет два типа библиотек - 'оптимизированная' и 'стандартная'. То есть, по умолчанию будут использоваться оптимизированные библиотеки, но при необходимости можно будет использовать 'стандартную' версию. Это увеличит размер glibc и приведет к обычному поведению при установленном --fomit-frame-pointer, т.е. сделает невозможным отладку (debug) программ, так что не используйте этот флаг если вы планируете заниматься разработкой программ. Теоретически этот флаг может вызвать некоторые ошибки компилятора, хотя на практике он достаточно безопасен, тем не менее вы были предупреждены.



Модели потоков



glibc поддерживает 2 различных модели потоков - старую linuxthreads и новую nptl. По умолчанию, если не был указан флаг nptlonly, кроме nptl собирается и версия с linuxthreads. В случае, если у вас нет устаревшего программного обеспечения, вы можете указать флаг nptl. Если у вас современная система без сторонних бинарных пакетов, будет лучше указать nptlonly, чтобы избежать сборки glibc дважды (с поддежкой linuxthreads и без неё).



Локализация



В основном это основано на еженедельном новостном бюллетене Gentoo от 8 ноября 2004 года, который можно найти здесь (en:TIP Specifying only needed locales). Вы можете выбрать, какие локали (включая раскладки и установки клавиатуры, времени и т.д.) будут собраны при установке. Если вы не ограничите локали, используемые в вашей системе, будут собраны все имеющиеся локали, начиная с aa_DJ (локаль Афар для Джибути) через en_GB (английская локаль для Великобритании) и заканчивая zu_ZA.utf8 (локаль Зулу для Южной Африки). При ограничении сборки локалей вы можете сохранить до 90% места, необходимого для Glibc в вашей системе, сохранить время, необходимое на сборку ненужных вам локале и, как следствие, уменьшить общее время компиляции. Если вы действительно не нуждаетесь в них всех (а трудно представить, кому это могло бы понадобиться), вы можете ограничить их необходимым минимумом.



Используйте флаг USE userlocales для сборки только тех локалей, которые указаны в /etc/locales.build.



Отредактируйте /etc/make.conf в вашем любимом редакторе и поместите userlocales где-нибудь между "" в строке USE="".



Другой способ - изменить /etc/portage/package.use используя данную команду: Code: Activating the userlocales USE flag for glibc

echo "sys-libs/glibc userlocales" >> /etc/portage/package.use





После этого вы можете указать локали, которые хотите использовать:

Файл: nano -w /etc/locales.build

#Читайте комментарии в начале файла для большей информации!

en_US/ISO-8859-1

en_US.UTF-8/UTF-8

#en_GB/ISO-8859-1

#en_GB.UTF-8/UTF-8

de_DE/ISO-8859-1

de_DE@euro/ISO-8859-15

ru_RU.UTF-8/UTF-8



В glibc-2.3.6-r4 или glibc-2.4-r2, был удалён флаг userlocales. Вы должны править файл /etc/locale.gen и удалить /etc/locales.build.



Вы можете воспользоваться для этого следующими командами: Code: Convert locales.build to locale.gen

cd /etc

grep '^[^#].*' locales.build | sed 's:/: :' > locale.gen

rm locales.build

nano -w locale.gen

Файл: nano -w /etc/locale.gen

#Читайте комментарии в начале файла для большей информации!

en_US.UTF-8 UTF-8

en_US ISO-8859-1

ru_RU.UTF-8 UTF-8

de_DE ISO-8859-1

de_DE@euro ISO-8859-15





Вы можете найти правильные значения локалей в файле /usr/share/i18n/SUPPORTED.



Помогите! Я не знаю, какими должны быть настройки моей локали!



Не волнуйтесь, это просто. Записи в этом файле должны быть в формате <locale>/<charmap>. <locale> это локаль из каталога /usr/share/i18n/locales, а <charmap> -- это имя одного из файлов каталога /usr/share/i18n/charmaps/. Нужно только понимать два момента: первое, локаль с новой валютой, такой как евро, требует изменения @euro, описанного в примере выше. Второе, локали UTF-8 требуют от вас добавления .UTF-8 в конец определения локали (нет, я не знаю, зачем, но иначе оно не работает).



Если вы В САМОМ ДЕЛЕ хотите минимизировать ваши локали, вам всего лишь нужно перевести вашу систему на Юникод. Вообще-то пока есть причины этого не делать, но это уже становится стандартом de facto, так как несёт множество преимуществ перед старыми форматами ISO, ASCII и другими. Больше об этом можно прочесть здесь и здесь, а также непосредственно в соответствующем руководстве с сайта Gentoo.



Вам просто нужно определить следующее: Файл: nano -w /etc/locales.build

#Как раньше!

en_US.UTF-8/UTF-8

ru_RU.UTF-8/UTF-8





Обратите внимание, я оставил строку US UTF-8. Её лучше не убирать, так как некоторые программы не соберутся без неё.



Сделайте это до установки Gentoo



Вы можете выполнить эти настройки до началасборки системы с нуля. Просто следуйте инструкциям из Gentoo Handbook. Это позволит меньше волноваться о возможных недоделках программ после сборки и наслаждаться быстрой сборкой.



Сделайте это после установки Gentoo



Если glibc уже установлена, вам потребуется пересобрать glibc:

Code: Пересборка glibc

emerge glibc



Вы также можете пересобрать world, если пакеты были скомпилированы с поддержкой множества локалей, но полученное ускорение работы пакетов и сэкономленное дисковое пространство не стоят затрат времени. Придётся затратить очень много времени на пересборку всей системы.

Возможно, вам стоит обратить внимание на пакет localepurge, который может очистить систему от любых установленных man страниц или info-файлов на языках не используемых в вашей системе. Вначале прочитайте man к localepurge, что бы определить локали, которые необходимо пропустить в /etc/locale.nopurge.

Для большей инфомации об управлении локалями читайте:

Gentoo Linux Localization Guide.

Или на русском языке Руководство по русской локализации Gentoo Linux.

Эта оптимизация полностью безопасна (Кроме случаев, если вы не можете читать на языке, который установили!).

Безопасность



Как безопасность относится к оптимизации? Итак, это оптимизация безопасности, поскольку ранее было сказано, как оптимизация зависит от вашей системы и как всё это работает. Если это сервер, вы, к примеру, можете пожертвовать оптимизацией в угоду безопасности, или выполнить обе оптимизации.



Стабилизация Glibc



Это предполагает (как вы, возможно, догадывались...) использование флага USE hardened. Это сделает вашу систему более устойчивой к нападениям разного вида.



Усиление стека



Используйте флаг erandom если вам необходимо использование модуля случайных чисел, установленного в вашем ядре.



Подключение USB-flash



Подключение USB-flash к компьютеру



Введение

В Linux я пользователь новый и с этим вопросом никогда не сталкивался, и более того - ядро по жизни собирал без поддержки USB устройств, т.к. ничего такого у меня просто нет :), но вот, как говорится - пришлось и срочно. И как оказалось - это довольно несложно.

Итак, по прочтении парочки-тройки вопросов связанных с USB, и небольшого количества теории - я без проблем подмонтировал USB флешку. Примечание: Что такое флешка и USB описывать не буду, т.к. если читатель этого не знает - то имхо ему следует сначала прочесть несколько других статей.



Итак, начнем



Конфигурация ядра

USB флешки видны в Linux как scsi устройства,ибо поддержка usb устройств в ядре Linux реализуется именно посредством эмуляции скази, т.е. типа /dev/sda1(2,3) и т.д, смотря сколько партиций.

Следовательно, чтобы была возможность подключения флешки, сначала необходимо добавить поддержку scsi в ядро

Linux Kernel Configuration: Включаем поддержку SCSI

Device Drivers --->

SCSI device support

<*>legacy /proc/scsi/ support

--- SCSI support type (disk, tape, CD-ROM)

<*> SCSI disk support

<*> SCSI generic support

--- Some SCSI devices (e.g. CD jukebox) support multiple LUNs

<*> Probe all LUNs on each SCSI device



Далее добавляем непосредственно поддержку USB (я не говорю о клавиатурах или других устройствах USB, а говорю только о флешке)

Linux Kernel Configuration: Поддержка USB

Device Drivers --->

USB support

<*> Support for Host-side USB

<*> USB device filesystem

<*> EHCI HCD (USB 2.0) support

< > OHCI HCD support

<*> UHCI HCD (most Intel and VIA) support

<*> USB Mass Storage support

Примечание: В разделе USB Mass Storage support есть куча других устройств - я там не отмечал ничего, у меня заработало и так. Подозреваю, что для специфических устройств (всмысле каких то навороченных флешок) нужно будет что нибудь еще там отметить.



Кроме того, для этих всяких сложных флешок скорее всего придется добавить MTD в ядро

Linux Kernel Configuration: MTD

Device Drivers --->

Memory Technology Devices (MTD) --->



ну и там смотрим, что нужно. Примечание: Для большинства современных флэшек, USB носителей и цифровых фотоаппаратов поддержка MTD не требуется.



Монтирование

После загрузки с новым ядром, нажимаем Alt+F12 и вставляем флешку - если с ядром все ок- то сразу появятся сообщения, что мол есть устройство USB , потом пишется, что есть /dev/uba ну и т.п.

Если этого не происходит, делаем

dmesg | grep usb

Если и здесь ничего нет, то советую перегрузиться и посмотреть включены ли USB контроллеры в BIOS :) как это не смешно звучит, но я сам себе это отрубил, когда ядро собирал, а потом включить забыл, и минут 15 гадал - чего же оно не работает :)

Если dmesg | grep usb выдает результат, а когда вставляем флешку - никакой реакции, то нужно проверить еще раз - все ли отмечено в ядре.

Вобщем - надеемся , что все заработало и теперь нужно смонтировать флешку.

Добавляем в /etc/fstab строку

Файл: /etc/fstab

/dev/uba1 /mnt/usbdir auto user,noauto,rw 0 0



и можно монтировать! но есть одно но, в опциях я не указал кодировки, т.к. кодировка по умолчанию указанна в разделе Native Languages конфигурации ядра.

Не будет лишним напомнить отмонтировать флешку перед тем как вытаскивать ее!

Если такой вариант вас не устраивает, то вы можете установить пакет submount и монтировать флэшку вот так:

Файл: /etc/fstab

/dev/uba1 /mnt/usb subfs fs=vfat,auto,umask=0,quiet,sync 0 0



Параметр sync необходим чтобы отключить отложенную запись и избежать потерю данных при копировании файлов на флэшку.

Вроде бы все. Удачи всем!

И естественно- за любые комментарии, дополнения, уточнения и исправления ошибок – буду только благодарен :)



надеюсь, кому-то помог tradakad

исправил касательно монтирования при помощи submount (dernik)



Монтирование под kde

Установите пакеты: hal, dbus, and hotplug



Добавьте флаг hal в /etc/make.conf

emerge -avt kdebase-kioslaves



Убедитесь, что hal используется всеми пакетами:

emerge -DNu world

rc-update add dbus default

/etc/init.d/dbus start

rc-update add hald default

/etc/init.d/hald start



так же можно монтировать устройства без изменения /etc/fstab с помощью

emerge -av pmount



Добавьте себя в групп plugdev

gpasswd -a USER plugdev



Включите "Storage media" ("Устройства хранения данных" в русском варианте) в systray (на панель). Наслаждайтесь :)



Автоматическое монтирование



Если лень замарачиваться каждый раз при втыкании флэшки или сидюка, а хочется, чтоб как в одной другой ОС, добавьте параметр managed в /etc/fstab к требуемому устройству, например

Файл: /etc/fstab

/dev/cdrw /mnt/cdrom iso9660 user,noauto,ro,managed 0 0

/dev/sda /mnt/flash vfat exec,user,noauto,sync,managed 0 0



Типа, все, теперь при появлении флэшки в системе будет появляться иконка на рабочем столе.

ps. распишите эту статью подробнее. Добавьте gpasswd в статью:

http://gentoo-wiki.com/HOWTO_D-BUS,_HAL,_KDE_media:/



Чтение-запись NTFS с использованием драйвера ntfs-3g



Введение



"Драйвер ntfs-3g является открытым, лицензированным по GPL, драйвером NTFS для Linux, созданным в рамках проекта Linux-NTFS. Он предоставляет полный доступ к разделам NTFS (чтение-запись), кроме работы с зашифрованными файлами и записи сжатых файлов. Так же не поддерживается смена владельца файла и его прав доступа. Технически он является сильно усовершенствованным драйвером ntfsmount. Улучшена функциональность, качество и добавлены дополнительные возможности." (Szakacsits Szabolcs, автор ntfs-3g)



Автор создал драйвер, который гораздо лучше пригоден для использования, чем другие драйвера NTFS для Linux, и при этом не менее быстрый, чем драйвера родных файловых систем Linux - временами в два раза быстрее чем родной модуль файловой системы EXT3 в ядре.



Для получения более подробной информации посетите: [1]

Предупреждение: Драйвер имеет статус BETA, имеются некоторые не решённые вопросы, возможна потеря данных и/или зависания при попытке примонтировать раздел. Он НЕ работает на архитектурах, отличных от x86 и amd64.



СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ ДАННЫХ ПЕРЕД ЛЮБЫМИ ПОПЫТКАМИ ИСПОЛЬЗОВАНИЯ !!! В ЛЮБОМ СЛУЧАЕ - ВЫ ПРЕДУПРЕЖДЕНЫ !!!



Установка



ebuild драйвера зависит от sys-fs/fuse (portage установит его автоматически).



Поскольку это программное обеспечение находится на стадии бета-тестирования, вы должны размаскировать его:

# echo "sys-fs/ntfs3g ~x86" >> /etc/portage/package.keywords



И установить его:

# emerge sys-fs/ntfs3g



Модуль ядра fuse должен быть загружен перед использованием драйвера

# modules-update

# modprobe fuse



Примеры использования



Монтирование раздела:

# ntfs-3g /dev/hda1 /mnt/windows



Полный доступ для всех пользователей, без ограничений прав доступа, и поддержкой заданной локали (В примере используется ru_RU.utf8, однако у вас она может отличаться):

# ntfs-3g /dev/hda1 /mnt/windows -o silent,umask=0,locale=ru_RU.utf8



Размонтирование

# fusermount -u /mnt/windows



Прочтите страницу руководства по ntfs-3g для получения более подробной информации.

$ man ntfs-3g



Монтирование при загрузке:



Для автоматической загрузки модуля fuse при старте системы выполните:

# echo "fuse" >> /etc/modules.autoload.d/kernel-2.6



Отредактируйте /etc/fstab:

# echo "/dev/hda1 /mnt/windows ntfs-3g silent,umask=0,locale=ru_RU.utf8 0 0" >> /etc/fstab



Вопрос обновления ядра



Если после обновления ядра драйвер перестал работать, сделайте следующее:

# emerge sys-fs/fuse

# modules-update

# modprobe fuse



Отказ от гарантий



Автор этого документа не отвечает за какие либо последтсвия, связанные с использованием этого драйвера. Всё что вы делаете - вы делаете на свой страх и риск.



Сетевые сервисы

Установка Apache2

Установка



Apache2 сейчас работает на большинстве системах без проблем, если у вас возникли проблемы прочтите раздел Common Problems это может помочь.

Начнем установку apache2: добавьте "apache2" к вашим USE флагу в файле /etc/make.conf и выполните:

emerge apache

Запуск Apache



Запустите Apache2:

/etc/init.d/apache2 start



Если вы хотите запускать apache2 при запуске системы выполните комманду:

rc-update add apache2 default



Посмотрите init scripts section для дополнительной информации.

Теперь у вас есть работующий веб сервер Apache2. Перейдите в вашем браузере на страницу http://localhost/ и вы должны увидеть страницу приветствия.

Вы найдете в /var/www/localhost/htdocs/index.html HTML код страницы приветствия которую вы видите на http://localhost/. Замечаем что Apache отображает htdocs/index.html когда вы пытаетесь открыть htdocs/ . Это особенность протокола HTTP. Apache не может передать директорию но может показать содержимое. Список (index) файлов в директории может быть передан. Apache ищет страницу со специальным именем index либо генерирует список файлов в директории. Если у вас есть страница с именем 'index' то будет отображена она; в этом случае вы не сможете посмотреть список файлов в директории.



Модули



Apache очень гибок. Он может сёрфить файлы используя HTTP либо серфить файлы и помощью FTP. Он может передать файл с жесткого диска, либо вывод PHP скрипта. Для реализации этого Apache использует модули. Другие приложения используют для этого плагины. При добавлении модули добавляют функциональность. Их также можно инсталлировать, удалять, пересобирать (перекомпилировать).

Модули Apache обычно называются mod_something. Некоторые уже включены в Апачь а некоторые нужно добавлять отдельно. В портежах содержатся множество модулей. Процесс установки выглядит примерно так:

  1. emerge module ;

  2. отредактируйте /etc/conf.d/apache2 для активации добавьте -D MOD ;

  3. опционально /etc/apache2/modules.d/xy_module ;

  4. добавьте директивы конфигурации в httpd.conf либо .htaccess ;

emerge mod_perl

nano /etc/conf.d/apache2

# change APACHE_OPTS="" to APACHE_OPTS="-D PERL"



Документацию по конкретным модулям вы найдете Apache Index in this wiki. Вы также можете почитать the documentation для дополнительной информации о модулях Apache.



Конфигурация



В файле httpd.conf, (/etc/apache2/httpd.conf,) который поставляется с Gentoo хранятся большинство настроек Apache. However, it probably does both more and less than you need it to. Apache configuration files have a consistent syntax.



Любые строки начинающиеся с # игнорируются

# Apache не анализирует написанное здесь

# это комментарии



Некоторые строки начинаются с директивы и могут иметь один или несколько аргументов.



Директивы могут быть объединены в секции. Разделы обычно заключены в угловые скобки.

<Section>

# Will only apply when the section matches

AnotherDirective

</Section>



В разделе могут быть подразделы. Вот часть файла httpd.conf:

# If mod_alias is loaded

<IfModule mod_alias.c>

# Alias is a directive and it only applies if mod_alias is loaded

Alias /icons/ "/usr/share/httpd/icons/"

# If the file is in the directory

<Directory "/usr/share/httpd/icons">

# Options will only apply if:

# mod_alias is loaded AND

# the file is in the directory

Options Indexes MultiViews

</Directory>

</IfModule>



Вы можете прочитать подробнее configuration files и sections в оффициальная документация Apache.



Common Problems



SSI Not Working



When configuring for SSI (Server Side Includes), an error may occur:

mod_include: Options +Includes (or IncludesNoExec) wasn't set, INCLUDES filter removed

The problem is that setting Options +Includes in either .htaccess or httpd.conf is overwritten by the additional configuration file as defined at the end of httpd.conf.

Include /etc/apache2/vhosts.d/*.conf



You need to edit this additional configuration file such that

AllowOverride None



Is replaced by

AllowOverride Options



Could Not Open Error Log



While starting Apache, it prints:

Error while starting apache: (2)No such file or directory: apache2: could not open error log file /usr/lib/apache2/logs/error_log.



/usr/lib/apache2/logs should be a symlink pointing to /var/log/apache2 . Check it using:

ls -la /usr/lib/apache2/logs



(note the lack of a slash on the end). If /var/log/apache2 is missing, create it and make sure you give apache ownership:

mkdir /var/log/apache2

chown apache:apache /var/log/apache2



If the symlink /usr/lib/apache2/logs is missing, you can create it:

ln -s /var/log/apache2 /usr/lib/apache2/logs



You don't need to set permissions on the symlink.



Check the Logs



See /var/log/apache2/error_log for errors, especially towards the end of the file. You may find tail useful because it displays only the last few lines of a file:

tail /var/log/apache2/error_log



If you wish to keep an eye one the log the -f option for tail may be useful:

tail -f /var/log/apache2/error_log



Here's one error you might see:

Error: [alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of ""



With the base installation "mod_unique_id" is turned on, this can cause problems, notably the server not starting. Simply comment out this module in /etc/apache2/httpd.conf and the problem will be solved.



(Your config file might be /etc/apache2/conf/apache2.conf)



Forbidden User Directories



If the server is returning "403 Forbidden" while accessing http://server/~username/ Make sure Apache (usually user apache and group apache) has read access to username's home directory and public_html (or equivalent). You can grant everyone read access using:

chmod 755 ~username/ ~username/public_html/



Not Enough Entropy



If Apache2

accepts connections

does not respond to clients

creates exactly one process

is not stopped by

/etc/init.d/apache2 stop



Check to see how much entropy is available using:

cat /proc/sys/kernel/random/entropy_avail



If little entropy (less than 100) is available, Apache2 is probably waiting for more so it can generate the secret for digest authentication (mod_auth_digest). To generate more entropy, just do something else for a little while. Grepping the kernel or emerging a package usually works well.



The video-entropyd and audio-entropyd supply /dev/random with entropy gathered from your video and audio devices, respectively. If you have a hardware random number generator (RNG), you can emerge rng-tools and run rngd.



If there's still a shortage of entropy, you can enable the urandom USE flag and re-emerge APR and Apache2. This makes APR use /dev/urandom, which falls back to a pseudorandom number generator when there isn't enough entropy. The program gets a number immediately, but it is cryptographically weaker. This is okay for some things (e.g. solitaire), but completely unacceptable for others (like PGP key generation).



Confusing config files



If you start the Apache2 server with the startup script /etc/init.d/apache2 check to see if the line



local myconf="/etc/apache2/httpd.conf"



from /etc/init.d/apache2 points to your configuration script. If it points to apache.conf and you use httpd.conf, make the necessary adjustments.









See Also



Configure LAMP (Linux, Apache, MySQL, and Python/PHP/Perl) - A popular web server combination

Apache Installation & Configuration

How to install mod_security for Apache



Настройка iptables для начинающих

Введение

В сети мало документации по iptables рассчитанной на новичков. Мы же попытаемся восполнить этот пробел. Рассмотрим основы составления правил, а также некоторые дополнительные модули которые помогут сделать жизнь легче.

Прежде чем двигаться дальше - убедитесь, что ...

  1. Всё ваше аппаратное обеспечение работоспособно. То есть Вы подключили все оборудование, модули грузятся, устройства видны в системе. Полезно в начале проверить, что соединение с интернетом возможно и без всяких там iptables. Нет ничего хуже, чем в течении многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая карта не работает или модем сконфигурирован неправильно.

  2. Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием Linux и Gentoo Linux в частности. То есть необходимы навыки работы с такими базовыми вещами как ifconfig, rc-update, /etc/conf.d/net, и так далее. Если для Вас это пока пустые звуки, то, пожалуйста предварительно изучите Настольную книгу Gentoo и Linux Help's Networking Basics 101

Конфигурация ядра ОС Linux

Все что вам нужно - это включить поддержку iptables.

Networking --->
  Networking Options---->
   Network Packet Filtering (replace Ipchains)--->
    Netfilter Configuration

Включим все опции как модули (хотя с точки зрения безопасности модули следует вообще отключить, монолитное ядро надежнее, хотя и медленнее).

Установка iptables

Далее вы должны установить пакет iptables: emerge iptables

Проверка сети

Предположим, что у нас есть 2 сетевых интерфейса: eth0 - локальная сеть и ppp0 - интернет соединение.

Проверим работоспособность сети командой ping:

Code: ping

ping www.google.com
ping 192.168.1.78 
ping 192.168.2.77

Запуск iptables

Запустим iptables: /etc/init.d/iptables start

Эта команда загрузит основные модули и создаст цепочки в ядре Linux. Теперь добавим iptables в автозагрузку: rc-update add iptables default

Использование /etc/init.d/iptables

Скрипт /etc/init.d/iptables понимает несколько команд (/etc/init.d/iptables <команда>), некоторые из них:

Создание правил

Практически все правила можно привести к виду: iptables -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ

Цепочки

Все изменения будем проводить над таблицей filter, именно она отвечает за фильтрацию пакетов. В таблице filter существует 3 цепочки: INPUT, OUTPUT и FORWARD. В каждой цепочки свой "тип" пакетов:

Работают с цепочками так: iptables <опция> <цепочка>

Для работы с цепочками предусмотрены следующие опции:

iptables -I INPUT 2 bla-bla-bla - сделает наше правило вторым.

iptables -D INPUT 5

ПРИМЕЧАНИЕ: Удалить цепочки INPUT, OUTPUT и FORWARD нельзя.

iptables -P ЦЕПОЧКА ПОЛИТИКА

Параметры пакетов

Итак по каким параметрам можно фильтровать пакеты? Рассмотрим самые основные.

Источник пакета

Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.133.133: iptables -A INPUT -s 192.168.133.133 -j DROP

Можно использовать доменное имя для указания адреса хоста. То есть: iptables -A INPUT -s test.host.jp -j DROP

Также можно указать целую подсеть: iptables -A INPUT -s 192.168.133.0/24 -j DROP

Также вы можете использовать отрицание (знак !). Например так - все пакеты с хостов отличных от 192.168.133.156 будут уничтожаться: iptables -A INPUT -s ! 192.168.133.156 -j DROP



Адрес назначения

Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.156.156: iptables -A OUTPUT -d 192.168.156.156 -j DROP

Как и в случае с источником пакета можно использовать адреса подсети и доменные имена. Отрицание также работает.



Протокол

Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp.



Порт источника

Указывает на порт с которого был прислан пакет. Вот синтаксис: iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.



Порт назначения

Порт назначения. Синтаксис: iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

Действия над пакетами

Проку от того,что мы укажем параметры пакета нет.Нужно указать,что надо с ним делать. Для этого служит опция -j. Рассмотрим основные действия:

В качестве действия можно указать и имя пользовательской цепочки. Например перекинем все пакеты с локальной сети в цепочку, где будет производиться дополнительная проверка: iptables -A INPUT -s 192.168.200.0/24 -j LOCAL_NET

Пример правил

В большинстве случаев пользователю достаточно выполнить такую последовательность комманд: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -P INPUT DROP

Вот собственно и вся настройка. На первый взгляд непонятно, что мы тут вообще сделали. Поэтому ознакомимся с основами составления правил.

Модули

Может сложиться впечатление, что возможностей у iptables маловато. Однако с использованием модулей iptables получит просто безграничные возможности. Для указания модуля используется опция -m. Например: iptables -A INPUT -m модуль bla-bla

-m owner

Добавляет следующие опции (опции только для цепочки OUTPUT):

Следующие опции доступны только в версиях ядра ниже 2.6.14:



-m multiport

Позволяет указывать не по одному порту, а сразу несколько:



-m state

Предназначен для указания состояния пакета с помощью опции --state. Доступны следующие типы пакетов:



-m mac

Проверяет соответствие MAC-адреса в пакете с помощью опции --mac-source, например:

iptables -A INPUT -s 192.168.0.1 -m mac --mac-source 00:65:3F:ED:12:98 -j DROP

Получено с http://ru.gentoo-wiki.com/Настройка_iptables_для_начинающих


Подробная настройка iptables



Введение

Документация по iptables в сети не рассчитана на новичков. В этой статье будет сжато и быстро описаны команды, затем, возможно, будут правки и добавления для расширенного объяснения. Так что это будет минимальная установка которую мы в дальнейшем расширим и упрочим с помощью правил.

Так же примите во внимание, что будет использовано pppoe соединение и 2.6.x ядро. Для настройки сетевой карты надо будет заменить ppp0 на eth0 (или подходящий по смыслу ваш сетевой интерфейс глядящий в интернет)

Прежде чем двигаться дальше - убедитесь, что ...

Конфигурация ядра

Все что вам нужно - это включить поддержку iptables.

Linux Kernel Configuration: Включение IPTables

Device Drivers--->
 Networking Support--->
  Networking Options---->
   Network Packet Filtering (replace Ipchains)--->
    Netfilter Configuration

Я включил все опции как модули (с тем рассчетом, что я захочу попробовать другие опции позже) и добавил ip_tables в modules.autoload. Это загрузит еще несколько модулей в качестве зависимостей. Модуль ip_conntrack необходим для "statefull" фильтрования, то есть для отслеживания соединений. Для запуска скриптов выполните команду :

# modprobe ip_tables

Необходимые утилиты

Далее вы должны установить пакет iptables:

# emerge iptables

Конфигурация интерфейсов

Сетевые протоколы

Прикладной уровень

HTTP, SMTP, SSH, SNMP, FTP, NNTP, NTP, LDAP, ...

Сеансовый уровень

TLS, SSL, RPC, WSP...

Транспортный уровень

TCP, UDP, SCTP, ICMP, OSPF, RSVP, VRRP, RTP, DCCP ...

Сетевой уровень

IPv4, IPv6, ARP, RARP, MPLS, IPX ...

Канальный уровень

Ethernet, 802.11, xDSL, Fibre Channel, FDDI, ATM, ISDN ...

В моем случае имеется 3 сетевых адаптера. Один подключен к WAN через pppoe. Другие два - к моей внутренней сети. Для того, чтобы не было проблем с iptables и маскардингом (NAT'ом), они должны быть сконфигурированы для различных подсетей. Для примера, 2 сетевых адаптера подключены к моим внутренним компьютерам (внутренние сетевые интерфейсы). Им присвоены IP-адреса: 192.168.1.1 и 192.168.2.1.

Следует заметить, что будет лучше если подключать эти внутренние адаптеры в любое сетевое устройство, такие как свитч и хаб. Для pppoe подключений мы должны убедиться, что сетевой адаптер подключен к внешнему миру, то есть внешним интерфейсам не присвоены никакие IP-адреса. Его запись в /etc/conf.d/net должна оставаться пустой. Это делается потому, что pppoe выступает в качестве виртуального устройства, которое включается вслед за сетевым интерфейсом. Мы также должны присвоить правильные сетевые маски и широковещательные адреса для этих интерфейсов. Ваш conf.d/ должна выглядеть примерно так:

Сервер

Файл: /etc/conf.d/net

 # Для pppoe подключений вы не должны указывать значения для [[eth0]], 
 # просто добавьте net.ppp0 или rc-pppoe в default уровень загрузки.
 iface_eth0="192.168.1.1 broadcast 192.168.1.255 netmask 255.255.255.0"
 iface_eth1="192.168.2.1 broadcast 192.168.2.255 netmask 255.255.255.0"

Заметьте, что не было указано никаких шлюзов.

Клиент1

Файл: /etc/conf.d/net

 iface_eth0="192.168.1.77 broadcast 192.168.1.255 netmask 255.255.255.0"
 gateway="eth0/192.168.1.1"



Клиент2

Файл: /etc/conf.d/net

 iface_eth0="192.168.2.77 broadcast 192.168.2.255 netmask 255.255.255.0"
 gateway="eth0/192.168.2.1"

Шлюз для клиентов установлен на внутренний IP сетевого интерфейса сервера, что и логично. Теперь добавьте все интерфейсы в default уровень загрузки и перезапустите подключения:

# rc-update add net.eth1 default && rc-update add net.eth2 default && rc-update add net.ppp0 default

и

# /etc/init.d/net.eth1 start && /etc/init.d/net.eth2 start && /etc/init.d/net.ppp0 start

# /etc/init.d/net.eth0 restart

Проверка настроек

Теперь убедитесь в том, что ваш сервер подключен к интернету, а также все интерфейсы могут пинговать друг друга. Для сервера:

Code: ping

ping www.google.com; 
ping 192.168.1.78 
ping 192.168.2.78
ping 192.168.1.77
ping 192.168.2.77

Убедитесь что у клиентов правильно указаны DNS-сервера в /etc/resolv.conf

Scripting

Теперь интересная часть... iptables и NAT(трансляция адресов). Для начала сделаем простое перенаправление адресов с минимальными правилами, чтобы убедиться что можем выходить в сеть.

Предупреждение: Если вы параноик, то это не самое секретное, что можно сделать... мы открываемся в сеть с мизерной защитой. Однако будем считать, что сеть настраиваем для дома или для игрового класса.

Файл: /var/lib/iptables/rules-save

#!/bin/bash

IPTABLES='/sbin/iptables'

# Определяем интерфейсы
EXTIF='ppp0'
INTIF1='eth1'
INTIF2='eth2'

# Включаем форвардинг ip в ядре.
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward

# Сбросить правила и удалить цепочки 
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Включаем маскарадинг для разрешения доступа в интернет
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

# Форвардить сетевой трафик с $INTIF1 на интернетовский интерфейс $EXTIF
$IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT

# Форвардить сетевой трафик с $INTIF2 на интернетовский интерфейс $EXTIF
$IPTABLES -A FORWARD -i $INTIF2 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT

#echo -e "       - Разрешаем доступ к SSH серверу"
$IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT
#echo -e "       - Разрешаем доступ к HTTP серверу"
$IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT
# Блокируем все прочие попытки доступа на $EXTIF
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP

Проверка на работоспособность

Примечание: Этот скрипт написан кем-то в сетевом форуме... Адрес автора утерян, имя... В общем, спасибо ему, пусть и без имени. (Надеюсь, он не обидется).

Теперь проверяем могут ли наши пользователи выйти в интернет или подключиться к серверу по ssh. Если все нормально, то можно переходить ниже по тексту. Если нет - проверьте синтаксические ошибки и прочее... Удостоверьтесь, что IP-адреса и маски клиентов и сервера введены правильно... Ну или...

Если все работает, как задумали, сохраняем конфигурацию:

# /etc/init.d/iptables save

И бэкапим вашу рабочую конфигурацию для возможного восстановления "как было":

# cp /var/lib/iptables/rules-save /var/lib/iptables/rules.working

Проверим iptables start-up скрипт перед тем как добавить iptables в default runlevel:



Code: Проверка скрипта

  1. /etc/init.d/iptables start

  2. /etc/init.d/iptables stop

  3. /etc/init.d/iptables start

Смысл в запуске-остановке-запуске в том, что у нас нет скрипта запуска iptables... поэтому нужно “инициализировать” статус перед остановкой. Остановка, по существу, обнуляет настройки и возвращает все к исходному. Перезапуск покажет нам работает ли наша сеть после перезагрузки. Если все в порядке, то добавляем iptables в default runlevel:

rc-update add iptables default

Не забудем также установить в /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Оборона Firewall

Далее мы сделаем наш, уже работающий файрвол безопасным, т.е. защищающим нашу систему от проникновений извне. На самом деле нам придется настроить файрвол таким образом, чтобы он не только защищал нас, но и защищал внешнюю сеть от нас. :) Защита такого рода является обязательной, она нужна для того, чтобы, в том случае, если наша система все-таки была взломана, взломщик не смог воспользоваться нашими ресурсами для дальнейшей атаки любого рода. Этот аспект является важнейшим в сетях класса SOHO, т.е. небольших офисах. Обыкновенно вирусы не оказывают никакого влияния на малые сети и заражение ими редко приводит к потере данных. Для нас, пользователей *nix, этой проблемы практически не существует. В любом случае, т.к. небольшие сети, как правило, защищены гораздо хуже больших, кракеры стараются использовать их в качестве “опорной базы” для DoS атак, или другой своей вредоносной активности.

В последующем я опишу всю конфигурацию по кусочкам, дабы мы смогли бы проверить пошагово каждый фрагмент. Каждый шаг может потребовать от вас вставки чего-либо до, после или в середину указываемого скрипта. Все действия производятся так, чтобы (я надеюсь) ваша сеть не работала только лишь короткий промежуток времени во время настройки. Это сделано мною потому как я предположил что у многих из вас (таких как я) выделен сервер под Firewall. И так как я предпочитаю настраивать свой сервер через SSH, отключение сети может иметь пренеприятные последствия, такие как ползания под столами или хуже того. Если же вы смелы, то вы можете скопировать скрипт в конце этого документа и запустить его на своей машине. Этот скрипт должен быть работоспособен на все сто, но тестировал я его только на своей машине, так что ymmv.



Установка переменных окружения

Вы можете установить необходимые переменные окружения следующим скриптом:

Code: '

#!/bin/sh
#
# Внешний интерфейс
EXTIF="ppp0"

# Внутренний интерфейс
INTIF="eth1"

# Loop device/localhost
LPDIF="lo"
LPDIP="127.0.0.1"
LPDMSK="255.0.0.0"
LPDNET="$LPDIP/$LPDMSK"

# Необходимые утилиты
IPT="/sbin/iptables"
IFC="/sbin/ifconfig"
G="/bin/grep"
SED="/bin/sed"
AWK="/usr/bin/awk"
ECHO="/bin/echo"

# Последующие команды могут работать некорректно при локализации.

# Установка переменных окружения внешнего интерфейса
EXTIP="`$IFC $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
EXTBC="255.255.255.255" 
#EXTMSK="`$IFC $EXTIF | $G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
EXTMSK="`$IFC $EXTIF | $AWK /$EXTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
EXTNET="$EXTIP/$EXTMSK"
$ECHO "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"

# Due to absence of EXTBC I manually set it to 255.255.255.255
# this (hopefully) will serve the same purpose

# Установка переменных окружения внутреннего интерфейса
INTIP="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[2],a," ");print a[1];exit}'`"
INTBC="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[3],a," ");print a[1];exit}'`"
INTMSK="`$IFC $INTIF | $AWK /$INTIF/'{next}//{split($0,a,":");split(a[4],a," ");print a[1];exit}'`"
INTNET="$INTIP/$INTMSK"
$ECHO "INTIP=$INTIP INTBC=$INTBC INTMSK=$INTMSK INTNET=$INTNET"

iptables ACCEPTS

Теперь мы должны установить ACCEPTы, так, чтобы мы могли соединяться с нашим сервером. На самом деле это очень больной вопрос. Правила для надежного маршрутизатора должны по умолчанию запрещать нежели разрешать. Однако, если вы сделаете это, то потеряете все соединения. Продолжайте тестирование пока не будете уверены что ваши ACCEPTы работают как надо. Однако думаю, что сперва мы введем следующее и это будет предпоследним правилом в окончательном скрипте.

Code: '

$IPT -t nat -A PREROUTING -j ACCEPT
# $IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET -j SNAT --to $EXTIP

# Закомментируйте последующие строки (которые содержат "MASQUERADE") 
# для сетей без трансляции адресов (NAT)
$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET2 -j MASQUERADE
$IPT -t nat -A POSTROUTING                       -j ACCEPT
$IPT -t nat -A OUTPUT                            -j ACCEPT
$IPT -A INPUT   -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
$IPT -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables DROP & REJECT

Теперь мы определим пару цепочек (chains) которые будут фиксировать события DROP и REJECT. Таким образом нам не придется вводить отдельные строки для каждой введенной команды. Сообщения о событиях будут отправлены сервису syslog, (обычно они фиксируются в /var/log/messages). Позже я (переводчик не имеет к этому никакого отношения) собираюсь написать скрипт на sed/grep по разбору событий для облегченного просмотра и установлю его как ежедневную работу для сервиса cron.

Эти строки следует вставить сразу после текста выше, в тот же скрипт. Когда вы это сделаете, запустите скрипт снова. Это не окажет влияния на вашу сеть, вы пока просто устанавливаете правила. Но это поможет убедиться что мы не сделали ошибок на данном этапе.

Code: '

# ********** Цепочки журналирования событий **********
#
# Теперь мы определяем несколько цепочек которые служат для записи 
# событий о сбрасываемых пакетах. Это позволит нам избежать ввода 
# команд для каждого правила. Сперва мы фиксируем DROP, а потом REJECT.
# Не жалуйтесь, если цепочки уже существуют (однако это не приведет к ошибкам???)
$IPT -N DROPl   2> /dev/null
$IPT -A DROPl -m limit --limit 3/minute --limit-burst 10 -j LOG --log-prefix 'FIREWALL DROP BLOCKED:'
$IPT -A DROPl   -j DROP
$IPT -N REJECTl 2> /dev/null
$IPT -A REJECTl -m limit --limit 3/minute --limit-burst 10 -j LOG --log-prefix 'FIREWALL REJECT BLOCKED:'
$IPT -A REJECTl -j REJECT
$IPT -N DROP2   2> /dev/null
$IPT -A DROP2 -m limit --limit 3/second --limit-burst 10 -j LOG --log-prefix 'FIREWALL DROP UNKNOWN:'
$IPT -A DROP2   -j DROP
$IPT -N REJECT2 2> /dev/null
$IPT -A REJECT2 -m limit --limit 3/second --limit-burst 10 -j LOG --log-prefix 'FIREWALL REJECT UNKNOWN:'
$IPT -A REJECT2 -j REJECT

# Для тестирования фиксируем события ACCEPT
$IPT -N ACCEPTl   2> /dev/null
$IPT -A ACCEPTl -m limit --limit 10/second --limit-burst 50 -j LOG --log-prefix 'FIREWALL ACCEPT:'
$IPT -A ACCEPTl   -j ACCEPT

Сброс правил

Теперь, когда мы видим наши устройства, правильно определенные, вставляем команду сброса правил. Однако все уже назначенные правила будут сброшены. Эти строки должны быть вставлены после определения утилит, которые заканчиваются строкой: ECHO='/bin/echo'

Code: '

# Сброс всех существующих и очистка персональных цепочек.
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`

for i in $CHAINS
do
    $IPT -t $i -F
done

for i in $CHAINS
do
    $IPT -t $i -X
done

Локальные интерфейсы

Теперь мы готовы для того, чтобы описать некоторые правила. Для начала мы разрешим все пакеты с loopback интерфейса, имеющие в качестве адреса назначения один из адресов наших интерфейсов.

Code: '

$IPT -A INPUT   -i $LPDIF -s   $LPDIP  -j ACCEPT
$IPT -A INPUT   -i $LPDIF -s   $EXTIP  -j ACCEPT
$IPT -A INPUT   -i $LPDIF -s   $INTIP1  -j ACCEPT
$IPT -A INPUT   -i $LPDIF -s   $INTIP2  -j ACCEPT

Блокировка широковещательных пакетов

Теперь мы должны заблокировать все входящие и исходящие широковещательные пакеты. Это предотвратит DoS атаки против нас, и не позволит нашим клиентам проводить DoS атаки против кого либо другого. Если бы все системные администраторы следовали этим правилам, тогда много суровых и дорогих DoS атак не состоялись или были максимально ограниченными.

Code: Блокировка широковещательных пакетов

$IPT -A INPUT   -i $EXTIF -d   $EXTBC  -j DROPl
$IPT -A INPUT   -i $INTIF1 -d  $INTBC1  -j DROPl
$IPT -A INPUT   -i $INTIF2 -d  $INTBC2  -j DROPl
$IPT -A OUTPUT  -o $EXTIF -d   $EXTBC  -j DROPl
$IPT -A OUTPUT  -o $INTIF1 -d  $INTBC1  -j DROPl
$IPT -A OUTPUT  -o $INTIF2 -d  $INTBC2  -j DROPl
$IPT -A FORWARD -o $EXTIF -d   $EXTBC  -j DROPl
$IPT -A FORWARD -o $INTIF1 -d  $INTBC1  -j DROPl
$IPT -A FORWARD -o $INTIF2 -d  $INTBC2  -j DROPl

Теперь проверим скрипт еще раз, чтобы убедиться в том, что мы не наделали синтаксических ошибок. Также отмечу, что мы используем определенные нами DROP1 цепочки (chains). Это означает, что отбрасываемые пакеты будут отмечены в журнале событий (log file).

Блокировка доступа в локальную сеть из глобальной

Теперь мы блокируем доступ из глобальной сети в нашу локальную сеть, если мы не хотим что бы интернет провайдер назначал IP адреса для нашей внутренней сети.

Code: '

# Блокировать внешний доступ к локальной сети
# Это позволит остановить боевых кракеров от использования 
# нашей сети как стартовой точки для других атак.
#
# Нижеприведенная строчка на человеческом языке будет выглядеть как
# "если входящий пакет, пришедший на наш внешний интерфейс,
# имеет адрес назначения, отличный от адреса нашего внешнего интерфейса,
# то этот пакет не будет пропущен."
$IPT -A INPUT   -i $EXTIF -d ! $EXTIP  -j DROPl

Изолирование локальных сетей

Теперь мы предпримем некоторые действия для наших локальных сетей. Другими словами - все пакеты не относящиеся к локальным сетям должны быть блокированы.

Code: '

# Теперь мы должны заблокировать все пакеты не относящиеся к 
# адресному пространству наших локальных сетей.
# Запомните, если вы подключите свой ноутбук к другому разъему, 
# вам надо убедиться, что ваш сетевой адрес соответствует адресам этой сети.
#
# Первая локальная сеть
$IPT -A INPUT   -i $INTIF1 -s ! $INTNET1 -j DROPl
$IPT -A OUTPUT  -o $INTIF1 -d ! $INTNET1 -j DROPl
$IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
$IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
# Вторая локальная сеть
$IPT -A INPUT   -i $INTIF2 -s ! $INTNET2 -j DROPl
$IPT -A OUTPUT  -o $INTIF2 -d ! $INTNET2 -j DROPl
$IPT -A FORWARD -i $INTIF2 -s ! $INTNET2 -j DROPl
$IPT -A FORWARD -o $INTIF2 -d ! $INTNET2 -j DROPl

Дальше мы сделаем некоторые дополнительные проверки исходящих пакетов и остановим все icmp пакеты кроме ping.

Code: '

# Дополнительная проверка
$IPT -A OUTPUT  -o $EXTIF -s ! $EXTNET -j DROPl
# Блокируем исходящие ICMP (кроме PING)
$IPT -A OUTPUT  -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
$IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl

Замечательно. Двигаемся дальше и проверяем скрипт на ошибки.

Ports

Предполагая что у нас все сработало мы заткнем еще несколько портов, доступ по которым может представлять для нас серьезную опасность:

# COMmon ports:
# 0 is tcpmux; SGI had vulnerability, 1 is common attack
# 13 is daytime
# 98 is Linuxconf
# 111 is sunrpc (portmap)
# 137:139, 445 is Microsoft
# SNMP: 161,2
# Squid flotilla: 3128, 8000, 8008, 8080
# 1214 is Morpheus or KaZaA
# 2049 is NFS
# 3049 is very virulent Linux Trojan, mistakable for NFS
# Common attacks: 1999, 4329, 6346
# Common Trojans 12345 65535
 COMBLOCK="0:1 13 98 111 137:139 161:162 445 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
# TCP ports:
# 98 is Linuxconf
# 512-5!5 is rexec, rlogin, rsh, printer(lpd)
#   [very serious vulnerabilities; attacks continue daily]
# 1080 is Socks proxy server
# 6000 is X (NOTE X over SSH is secure and runs on TCP 22)
# Block 6112 (Sun's/HP's CDE)
 TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"

# UDP ports:
# 161:162 is SNMP
# 520=RIP, 9000 is Sangoma
# 517:518 are talk and ntalk (more annoying than anything)
 UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000 9 6346 3128 8000 8008 8080 12345 65535"

После определения переменных окружения нам останется только пробежаться по ним циклом:

echo -n "FW: Blocking attacks to TCP port"
for i in $TCPBLOCK;
do
 echo -n "$i "
  $IPT -A INPUT   -p tcp --dport $i  -j DROPl
  $IPT -A OUTPUT  -p tcp --dport $i  -j DROPl
  $IPT -A FORWARD -p tcp --dport $i  -j DROPl
done
echo ""
echo -n "FW: Blocking attacks to UDP port "
for i in $UDPBLOCK;
do
 echo -n "$i "
   $IPT -A INPUT   -p udp --dport $i  -j DROPl
   $IPT -A OUTPUT  -p udp --dport $i  -j DROPl
   $IPT -A FORWARD -p udp --dport $i  -j DROPl
done
echo ""

Ну что ж, теперь каждый раз, когда мы запускаем скрипт, эти строчки просто добавляются к уже существующим... что создаёт небольшой бардак. По этой причине мы собираемся перепрыгнуть в начало скрипта... сразу после переменных окружения для sed и grep, но перед переменными для EXTIP и EXTBC - там мы добавляем цикл, который производит очистку. Так мы будем уверены, что работаем в чистой среде. Нам не приходилось задумываться об этом ранее, потому что мы не имели возможности оттестить скрипт без обрыва соединения либо закрытия файрвола. Этот скрипт сначала выставляет всю политику в DROP, после чего очищает и удаляет наши цепочки. Чтобы убедиться, что мы по-прежнему можем залогиниться по ssh на наш сервер после того, как скрипт перезапуститься, мы добавим цепочку INPUT для ssh. Пока что поставим её в конец скрипта. Это делается для того чтобы избежать открытия дыры в момент установки новых правил, что является довольно распространённой ошибкой:

# Отказываем, потом принимаем: это уберёт дыру в момент,
# когда мы закрываем порты
 $IPT        -P INPUT       DROP
 $IPT        -P OUTPUT      DROP
 $IPT        -P FORWARD     DROP
# Очищаем все существуещие цепочки и стираем дополнительные
 CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
 for i in $CHAINS;
 do
   $IPT -t $i -F
 done
 for i in $CHAINS;
 do
   $IPT -t $i -X
 done
 $IPT -A INPUT   -i $INTIF1 -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT

Sysctl'ы

Сразу после этого мы запустим sysctl'ы для tcp_syncookies, icmp_echo_ignore_broadcasts, rp_filter и accept_source_routе. До этого момента многие правила, которые мы "проверяли", фактически не выполнялись. По сути, мы просто делали проверку синтаксических ошибок. Теперь наши правила будут выполняться в полной мере:

echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Проверка адреса источника
for f in /proc/sys/net/ipv4/conf/*/rp_filter;
do
 echo 1 > $f
done
# Отключаем роутинг источника IP и ICMP-редиректы
for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
do
 echo 0 > $f
done
for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
do
 echo 0 > $f
done
echo 1 > /proc/sys/net/ipv4/ip_forward

Теперь мы собираемся добавить трекинг ftp-соединения, так что нам не доведётся наблюдать ошибки PASV при установке паков:

# Запускаем трекинг ftp-соединения
MODULES="ip_nat_ftp ip_conntrack_ftp"
for i in $MODULES;
do
 echo "Добавляем модуль $i"
 modprobe $i
done

Базовая конфигурация NAT

А сейчас возвратимся к концу нашего скрипта, поскольку мы собираемся открыть сервисы для хостов, находящихся за файерволом. Я включил следующие сервисы: IRC, MSN, ICQ, and NFS, FTP, domain,time и некоторые другие. Самое главное здесь то, что эти сервисы могут использоваться ТОЛЬКО ЗА файерволом.Таким образом никто не сможет их использовать по ftp внутри Вашей локальной сетки:

IRC='ircd'
MSN=1863
ICQ=5190
NFS='sunrpc'
# Мы пользуемся sync!!
PORTAGE='rsync'
OpenPGP_HTTP_Keyserver=11371
# Все порты сервисов считываются из /etc/services
TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ $OpenPGP_HTTP_Keyserver"
UDPSERV="domain time"
echo -n "FW: Allowing inside systems to use service:"
for i in $TCPSERV;
do
 echo -n "$i "
 $IPT -A OUTPUT  -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
 $IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 --dport $i --syn -m state --state NEW -j ACCEPT
 $IPT -A FORWARD -i $INTIF2 -p tcp -s $INTNET2 --dport $i --syn -m state --state NEW -j ACCEPT
done
echo ""
echo -n "FW: Allowing inside systems to use service:"
for i in $UDPSERV;
do
 echo -n "$i "
 $IPT -A OUTPUT  -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
   $IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 --dport $i -m state --state NEW -j ACCEPT
   $IPT -A FORWARD -i $INTIF2 -p udp -s $INTNET2 --dport $i -m state --state NEW -j ACCEPT
done
echo ""

Теперь сделаем так, чтобы файервол позволил нам пинговать внешний мир. Для этого разрешим прохождение icmp-пакетов через внешний интерфейс:

# Разрешаем внешнее пингование
$IPT -A OUTPUT  -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF2 -p icmp -s $INTNET2 --icmp-type 8 -m state --state NEW -j ACCEPT
                                                                              
# Разрешим файерволу пинговать наши внутренние сетки:
$IPT -A OUTPUT  -o $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A OUTPUT  -o $INTIF2 -p icmp -s $INTNET2 --icmp-type 8 -m state --state NEW -j ACCEPT

Теперь мы по умолчанию будем записывать в журнал все прочие запросы, но никак не будем на них реагировать. Все что нам надо было принять мы описали в начале наших правил. Так что заканчиваем правила блокировкой всего, что специально не разрешено:

# Заблокируем все, что осталось:
 $IPT -A INPUT             -j DROPl
 $IPT -A OUTPUT            -j REJECTl
 $IPT -A FORWARD           -j DROPl

Итак, все сделано. я имею дружественные nmap и nessus для моих соединений с вышеописанным набором правил и ничего не препятствует использованию IRC, MSN, ICQ, и emerge sync.

The full script

А сейчас, полноценный скрипт во всей своей красе (Заодно я поместил форвардинг ssh в более подходящее для него место):

# Внешний интерфейс
 EXTIF=ppp0
# Внутренний интерфейс
 INTIF1=eth1
 INTIF2=eth2
# Loop-устройство/localhost
 LPDIF=lo
 LPDIP=127.0.0.1
 LPDMSK=255.0.0.0
 LPDNET="$LPDIP/$LPDMSK"
# Переменные текстовых инструментов
 IPT='/sbin/iptables'
 IFC='/sbin/ifconfig'
 G='/bin/grep'
 SED='/bin/sed'
# Последнее (но немаловажное) - пользователи
 JAMES=192.168.1.77
 TERESA=192.168.2.77
# Deny вместо accept: предотвращает открытие "дыр"
# в то время, как мы закрываем порты и все такое
 $IPT        -P INPUT       DROP
 $IPT        -P OUTPUT      DROP
 $IPT        -P FORWARD     DROP
# Сброс всех существующих цепочек и стирание персональных цепочек
 CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
 for i in $CHAINS
 do
  $IPT -t $i -F
  $IPT -t $i -X
 done
 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Проверка адреса источника
 for f in /proc/sys/net/ipv4/conf/*/rp_filter;
 do
  echo 1 > $f
 done
# Запрет маршрутизации IP от источника и редиректов ICMP
 for f in /proc/sys/net/ipv4/conf/*/accept_source_route;
 do
  echo 0 > $f
 done
 for f in /proc/sys/net/ipv4/conf/*/accept_redirects;
 do
  echo 0 > $f
 done
 echo 1 > /proc/sys/net/ipv4/ip_forward
# Установка переменных среды для внешнего интерфейса
 EXTIP="`$IFC $EXTIF|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
 #EXTBC="`$IFC $EXTIF|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
 EXTBC="255.255.255.255"
 EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
 EXTNET="$EXTIP/$EXTMSK"
 #echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
 echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
# Так как EXTBC отсутствует, я устанавливаю ее вручную как it to 255.255.255.255
# Это (надеюсь) послужит тем же целям
# Устанвка переменных среды для первого внутреннего интерфейса
 INTIP1="`$IFC $INTIF1|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
 INTBC1="`$IFC $INTIF1|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
 INTMSK1="`$IFC $INTIF1|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
 INTNET1="$INTIP1/$INTMSK1"
 echo "INTIP1=$INTIP1 INTBC1=$INTBC1 INTMSK1=$INTMSK1 INTNET1=$INTNET1"
# Установка переменных среды для второго внутреннего интерфейса
 INTIP2="`$IFC $INTIF2|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
 INTBC2="`$IFC $INTIF2|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
 INTMSK2="`$IFC $INTIF2|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
 INTNET2="$INTIP2/$INTMSK2"
 echo "INTIP2=$INTIP2 INTBC2=$INTBC2 INTMSK2=$INTMSK2 INTNET2=$INTNET2"
# Сейчас мы собираемся создать несколько собственных цепочек, результатом работы 
# которых будет логгинг отброшенных пакетов. Это поможет нам избежать необходимости
# вводить команду log перед каждым отбрасыванием пакета, что мы хотим запротоколировать.
# Первыми идут лог отброшенных пакетов и собственно отброс, затем лог пакетов с отказами
# и собственно отказы.
# Отключаем сообщения о том, что цепочки уже существуют (чтобы перезапуск был без мусора)
 $IPT -N DROPl   2> /dev/null
 $IPT -A DROPl   -j LOG --log-prefix 'DROPl:'
 $IPT -A DROPl   -j DROP
 $IPT -N REJECTl 2> /dev/null
 $IPT -A REJECTl -j LOG --log-prefix 'REJECTl:'
 $IPT -A REJECTl -j REJECT
# Весь траффик от устройства loopback принимается
# если IP совпадает с любым из наших интерфейсов.
 $IPT -A INPUT   -i $LPDIF -s   $LPDIP  -j ACCEPT
 $IPT -A INPUT   -i $LPDIF -s   $EXTIP  -j ACCEPT
 $IPT -A INPUT   -i $LPDIF -s   $INTIP1  -j ACCEPT
 $IPT -A INPUT   -i $LPDIF -s   $INTIP2  -j ACCEPT
# Широковещательные пакеты блокируем
 $IPT -A INPUT   -i $EXTIF -d   $EXTBC  -j DROPl
 $IPT -A INPUT   -i $INTIF1 -d   $INTBC1  -j DROPl
 $IPT -A INPUT   -i $INTIF2 -d   $INTBC2  -j DROPl
 $IPT -A OUTPUT  -o $EXTIF -d   $EXTBC  -j DROPl
 $IPT -A OUTPUT  -o $INTIF1 -d   $INTBC1  -j DROPl
 $IPT -A OUTPUT  -o $INTIF2 -d   $INTBC2  -j DROPl
 $IPT -A FORWARD -o $EXTIF -d   $EXTBC  -j DROPl
 $IPT -A FORWARD -o $INTIF1 -d   $INTBC1  -j DROPl
 $IPT -A FORWARD -o $INTIF2 -d   $INTBC2  -j DROPl
# Блокируем доступ к внутренней сети из WAN
# Это также призвано не дать нечестивым крякерам использовать нашу сетку 
# в качестве отправной точки для атак на других людей
# Перевод с языка iptables:
# "если пришедшие на наружный интерфейс пакеты были отправлены не с выданного
# nefarious адреса, выкинуть их как горячую картошку"
 $IPT -A INPUT   -i $EXTIF -d ! $EXTIP  -j DROPl
# А сейчас мы блокируем внутренние адреса, кроме двух, присвоенных нашим двум
# внутренним интерфейсам.....только помните, что если вы воткнете свой лэптоп или
# какой другой pc в напрямую в одну из этих сетевых карт, то нужно удостовериться,
# что они имеют именно эти IP-адреса или добавить соответствующий адрес отдельно.               
# Первый интерфейс/первая внутренняя сеть
 $IPT -A INPUT   -i $INTIF1 -s ! $INTNET1 -j DROPl
 $IPT -A OUTPUT  -o $INTIF1 -d ! $INTNET1 -j DROPl
 $IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
 $IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
# Второй интерфейс/вторая внутренняя сеть
 $IPT -A INPUT   -i $INTIF2 -s ! $INTNET2 -j DROPl
 $IPT -A OUTPUT  -o $INTIF2 -d ! $INTNET2 -j DROPl
 $IPT -A FORWARD -i $INTIF2 -s ! $INTNET2 -j DROPl
 $IPT -A FORWARD -o $INTIF2 -d ! $INTNET2 -j DROPl
# Дополнительная Egress-проверка
 $IPT -A OUTPUT  -o $EXTIF -s ! $EXTNET -j DROPl
# Блокируем исходящиие пакеты ICMP (за исключением PING)
 $IPT -A OUTPUT  -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
 $IPT -A FORWARD -o $EXTIF -p icmp --icmp-type ! 8 -j DROPl
# печально известные порты:
# 0 - tcpmux; у SGI есть уязвимость, через которую можно атаковать
# 13 - daytime
# 98 - Linuxconf
# 111 - sunrpc (portmap)
# 137:139, 445 - Microsoft
# SNMP: 161,2
# Флотилия Squid: 3128, 8000, 8008, 8080
# 1214 - Morpheus или KaZaA
# 2049 - NFS
# 3049 - очень заразный троян для Linux, часто путаемый с NFS
# Часто атакуемые: 1999, 4329, 6346
# Частые трояны 12345 65535
 COMBLOCK="0:1 13 98 111 137:139 161:162 445 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
# Порты TCP:
# 98 - Linuxconf
# 512-5!5 - rexec, rlogin, rsh, printer(lpd)
#   [очень серьезеные уязвимости; продолжаются ежедневные атаки]
# 1080 - прокси-серверы Socks
# 6000 - X (ЗАМЕЧАНИЕ. X через SSH - безопасен, и работает на порту TCP 22)
# Блокировка 6112 (CDE у Sun и HP)
 TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"
# Порты UDP:
# 161:162 - SNMP
# 520=RIP, 9000 - Sangoma
# 517:518 - talk и ntalk (самые надоедливые)
 UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"
echo -n "FW: Blocking attacks to TCP port"
for i in $TCPBLOCK;
do
 echo -n "$i "
  $IPT -A INPUT   -p tcp --dport $i  -j DROPl
  $IPT -A OUTPUT  -p tcp --dport $i  -j DROPl
  $IPT -A FORWARD -p tcp --dport $i  -j DROPl
done
echo ""
echo -n "FW: Blocking attacks to UDP port "
for i in $UDPBLOCK;
do
 echo -n "$i "
  $IPT -A INPUT   -p udp --dport $i  -j DROPl
  $IPT -A OUTPUT  -p udp --dport $i  -j DROPl
  $IPT -A FORWARD -p udp --dport $i  -j DROPl
done
echo ""
# Открываем отлеживание соединений по ftp
 MODULES="ip_nat_ftp ip_conntrack_ftp"
 for i in $MODULES;
 do
  echo "Inserting module $i"
  modprobe $i
 done
# Защищаем некоторые распространенные клиенты для чата.
# Уберите из списка допустимых для пущей безопасности.
 IRC='ircd'
 MSN=1863
 ICQ=5190
 NFS='sunrpc'
# Нам нужно синхронизировать данные!!
 PORTAGE='rsync'
 OpenPGP_HTTP_Keyserver=11371
# Все порты сервисов читаются из /etc/services
 TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ  $OpenPGP_HTTP_Keyserver" UDPSERV="domain time"
echo -n "FW: Allowing inside systems to use service:"
for i in $TCPSERV;
do
 echo -n "$i "
  $IPT -A OUTPUT  -o $EXTIF -p tcp -s $EXTIP --dport $i --syn -m state --state NEW -j ACCEPT
  $IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 --dport $i --syn -m state --state NEW -j ACCEPT
  $IPT -A FORWARD -i $INTIF2 -p tcp -s $INTNET2 --dport $i --syn -m state --state NEW -j ACCEPT
done
echo ""
echo -n "FW: Allowing inside systems to use service:"
for i in $UDPSERV;
do
 echo -n "$i "
  $IPT -A OUTPUT  -o $EXTIF -p udp -s $EXTIP --dport $i -m state --state NEW -j ACCEPT
  $IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 --dport $i -m state --state NEW -j ACCEPT
  $IPT -A FORWARD -i $INTIF2 -p udp -s $INTNET2 --dport $i -m state --state NEW -j ACCEPT
done
echo ""
# Разрешается ping наружу
$IPT -A OUTPUT  -o $EXTIF -p icmp -s $EXTIP --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A FORWARD -i $INTIF2 -p icmp -s $INTNET2 --icmp-type 8 -m state --state NEW -j ACCEPT
# Файерволу разрешается ping внутренних систем
$IPT -A OUTPUT  -o $INTIF1 -p icmp -s $INTNET1 --icmp-type 8 -m state --state NEW -j ACCEPT
$IPT -A OUTPUT  -o $INTIF2 -p icmp -s $INTNET2 --icmp-type 8 -m state --state NEW -j ACCEPT                                                                                                                                                             
$IPT -A INPUT   -i $INTIF1 -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT
$IPT -t nat -A PREROUTING -j ACCEPT
$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET1 -j MASQUERADE
$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET2 -j MASQUERADE
$IPT -t nat -A POSTROUTING -j ACCEPT
$IPT -t nat -A OUTPUT -j ACCEPT
$IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Заблокировать и запротоколировать все, что мы могли забыть.
$IPT -A INPUT -j DROPl
$IPT -A OUTPUT -j REJECTl
$IPT -A FORWARD -j DROPl







Установка почтовой системы





Установка почтовой системы на Gentoo linux для небольшой конторы



Используется postfix + cyrus-imap, авторизация пользователей через cyrus-sasl без прикручивания какой-либо БД (подходит для контор с несколькими десятками почтовых ящиков - хранить что-либо в mysql или postgress в данном случае нет смысла). Пользователи хранятся в базе sasldb, поэтому нет нужды заводить в системе реальных пользователей.

Возможно при установке указанных пакетов понадобится установить все зависимости, которые они за собой тянут. Предоставим системе самой разобраться, что же ей не хватает - она с этим вполне успешно справляется.

Предпочитаю использовать для /var reiserfs, но это сугубо личные предпочтения.





emerge -pv cyrus-sasl

[ebuild N ] dev-libs/cyrus-sasl-2.1.20 -authdaemond +berkdb -debug +gdbm +java -kerberos -ldap +mysql +pam -postgres +ssl -static 0 kB



На всякий случай проверяем флаги - все ОК

emerge cyrus-sasl



Этот пакет поставили, едем дальше

emerge -pv postfix

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild N ] mail-mta/postfix-2.1.5-r1 +ipv6 -ldap -mailwrapper -mbox +mysql +pam -postgres -sasl*(-selinux) +ssl -vda 0 kB



Здесь нам может пригодиться флаг sasl, хотя в моем случае пока нет нужды авторизоваться на smtp, возможно в дальнейшем здесь будет описана авторизация через cyrus-sasl на smtp - вообщем выставляйте флаги по вкусу кому что надо

USE="sasl" emerge postfix



Постфикс собрался

emerge -pv cyrus-imapd

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild N ] net-mail/cyrus-imapd-2.2.10 -afs -drac -idled -kerberos +pam -snmp +ssl +tcpd 0 kB



После проверки и установки нужных нам флагов пересобираем openssl и imap-сервер

emerge cyrus-imapd



Программа для администрирования имаповских ящиков

emerge cyrus-imap-admin



После того как все нужные нам пакеты поставлены, можно приступать к настройке



сначала cyrus-sasl

passwd cyrus

pwconv

chown -R cyrus:mail /etc/sasl2 - доступ cyrus к базе /etc/sasl2/sasldb2

saslpasswd2 cyrus - заводим в sasldb2

sasldblistusers2 - для проверки

Разбираемся с postfix



Cодержимое /etc/postfix/main.cf, ниже приведена примерная конфигурация почтового сервера подключенного напрямую к инету (не через relayhost), естественно для этого случая должна быть MX-запись в ДНС. Подчеркиваю, что умышленно опускаю многие параметры в main.cf, чтобы не раздувать описание. Добавьте все остальное руководствуясь документацией postfix.



queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/lib/postfix

mail_owner = postfix

myhostname = mail.domain.tld

mydomain = mail.domain.tld

myorigin = $mydomain

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

local_recipient_maps =

unknown_local_recipient_reject_code = 550

mynetworks_style = subnet

mynetworks = 192.168.1.0/24, 127.0.0.0/8

relay_domains = $mydestination

НА ЭТУ СТРОЧКУ ОБРАТИТЕ ВНИМАНИЕ!!!

mailbox_transport = lmtp:unix:/var/imap/socket/lmtp

Если надо подключить procmail то вместо нее пишем

mailbox_transport = procmail



Когда добавили все, что нужно в main.cf, идем в /etc/postfix/master.cf



Ищем такую строку

# Also specify in main.cf: cyrus_destination_recipient_limit=1

cyrus unix - n n - - pipe

user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

И заменяем путь на

# Also specify in main.cf: cyrus_destination_recipient_limit=1

cyrus unix - n n - - pipe

user=cyrus argv=/cyrus/deliver -e -r ${sender} -m ${extension} ${user}



При использовании procmail, добавляем

procmail unix - n n - - pipe

flags=R user=cyrus argv=/usr/bin/procmail -p /etc/procmailrc USER=${user}



Где файл /etc/procmailrc :

DELIVERMAIL=/usr/lib/cyrus/deliver

LOGFILE=/var/log/procmaillog

IMAP="$DELIVERMAIL -e -a $USER -m user.$USER"

(если надо подключить spamassassin)

:0fw : spamassassin.lock

* < 90000

| /usr/bin/spamassassin

и далее обязательно

:0

| $IMAP

:0w

{

EXITCODE=$?

HOST

}



Все, с постфиксом разобрались, теперь cyrus-imapd



Редактируем /etc/cyrus.conf

# $Header: /var/cvsroot/gentoo-x86/net-mail/cyrus-imapd/files/cyrus.conf,v 1.4 2004/07/18 04:02:23 dragonheart Exp $

# Standard standalone server configuration.

START {

# Do not delete this entry!

recover cmd="ctl_cyrusdb -r"

# This is only necessary if using idled for IMAP IDLE.

#idled cmd="idled"

}

# UNIX sockets start with a slash and are put into /var/imap/socket.

SERVICES {

# Add or remove based on preferences.

imap cmd="imapd" listen="imap2" prefork=0

pop3 cmd="pop3d" listen="pop-3" prefork=0

# Don't forget to generate the needed keys for SSL or TLS

# (see doc/html/install-configure.html).

imaps cmd="imapd -s" listen="imaps" prefork=0

pop3s cmd="pop3d -s" listen="pop3s" prefork=0

sieve cmd="timsieved" listen="sieve" prefork=0

# at least one LMTP is required for delivery

#lmtp cmd="lmtpd" listen="lmtp" prefork=0

##ОБРАТИТЕ ВНИМАНИЕ НА ЭТУ СТРОКУ

lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0

# this is only necessary if using notifications

#notify cmd="notifyd" listen="/var/imap/socket/notify" proto="udp" prefork=1

}

EVENTS {

# This is required.

checkpoint cmd="ctl_cyrusdb -c" period=30

# This is only necessary if using duplicate delivery suppression.

delprune cmd="ctl_deliver -E 3" period=1440

# This is only necessary if caching TLS sessions.

tlsprune cmd="tls_prune" period=1440

}



Вот так делаем сертификаты

openssl req -new -nodes -out req.pem -keyout key.pem

openssl rsa -in key.pem -out new.key.pem

openssl x509 -in req.pem -out ca-cert -req \

-signkey new.key.pem -days 999

cp new.key.pem /etc/ssl/cyrus/server.pem

rm new.key.pem

cat ca-cert >> /etc/ssl/cyrus/server.pem

chown cyrus:mail /etc/ssl/cyrus/server.pem

chmod 600 /etc/ssl/cyrus/server.pem # Your key should be protected



Проверяем все-ли директории созданы

/var/imap

cd /var

mkdir imap

chown cyrus:mail imap

chmod 750 imap

/var/spool/imap

cd /var/spool

mkdir imap

chown cyrus:mail imap

chmod 750 imap

/usr/sieve

cd /usr

mkdir sieve

chown cyrus:mail sieve

chmod 750 sieve



Далее редактируем /etc/imapd.conf

configdirectory: /var/imap

partition-default: /var/spool/imap

auto_transition: yes

tls_ca_path: /etc/ssl/cyrus

tls_cert_file: /etc/ssl/cyrus/server.pem

tls_key_file: /etc/ssl/cyrus/server.pem

admins: cyrus

hashimapspool: yes

allowanonymouslogin: no

allowplaintext: yes

sasl_pwcheck_method: auxprop

sasl_auxprop_plugin: sasldb

sasldb_path: /etc/sasl2/sasldb2

sasl_mech_list: LOGIN PLAIN



Авторизация через базу sasldb, механизмы авторизации LOGIN,PLAIN Если мы будем использовать обычные открытые пароли, без шифрования (например внутри организации) то изменим в /etc/imapd.conf

allowanonymouslogin: yes



вроде бы с настройкой cyrus покончено



Теперь займемся почтовыми ящиками юзеров, для этого используем программу cyradm

/etc/init.d/cyrus start

cyradm -user cyrus -server localhost

localhost> cm user.testuser

localhost> help - выводит все команды для руления юзерскими ящиками

localhost> exit



Не забудьте забить в sasldb2 нового юзера:

saslpasswd2 testuser



Поднимаем сервисы

/etc/init.d/postfix start

/etc/init.d/cyrus start



Настраиваем почтового клиента (проверено с thunderbird 1.0 и с KMail 1.7.1, с Outlook Express тоже не должно быть проблем).



Пробуем отправить письмо, если что-то не работает - смотрим логи, прежде всего проверьте права на доступ в /var/imap/socket/lmtp для пользователей postfix и cyrus, чаще всего проблемы связаны именно с этим. Также проверьте права на доступ к /etc/sasl2/sasldb2 для пользователя cyrus, который должен быть в группе mail.



Желательно поставить антивирус например clamav используем для этого связку clamav + clamsmtp хотя возможны и другие варианты например amavisd-new. Установка прекрасно описана здесь http://www.nixp.ru/articles/clamav_postfix, необходимо руководствоваться ей,естественно с адаптацией под реалии Gentoo

emerge clamav

ACCEPT_KEYWORDS="~x86" emerge clamsmtp (пока замаскирован в портаджах)



Затем в файле /etc/conf.d/clamd START_CLAMD = yes (для версии старше 0.85 уже не актуально - все настройки только в clamd.conf и clamsmtpd.conf)



Редактируем файлы /etc/clamd.conf и /etc/clamsmtpd.conf в соответствии с рекомендациями приведенными выше по ссылке Обратите внимание на параметры LocalSocket: /var/run/clamav/clamd.sock в /etc/clamav.conf и ClamAddress: /var/run/clamav/clamd.sock в /etc/clamsmtpd.conf - путь и имя файла должен одинаковым для обоих конфигов



В файл main.cf необходимо добавить две строчки:

content_filter = scan:127.0.0.1:10025

receive_override_options = no_address_mappings



Первая говорит postfix'у о том, что необходимо пересылать всю почту через сервис (фильтр) 'scan' на 10025-ый порт, который, как раз, открыт clamsmtpd. Вторая строчка говорит о том, чтобы postfix не делал никаких манипуляций с адресами до того, как они дойдут до content_filter. Так что получается, что фильтр работает с реальными почтовыми адресами, а не с результатами перевода в виртуальные псевдонимы, маскарадингом и т.п.



В файл master.cf необходимо добавить следующие строки:

# AV scan filter (used by content_filter)

scan unix - - n - 16 smtp

-o smtp_send_xforward_command=yes

# For injecting mail back into postfix from the filter

127.0.0.1:10026 inet n - n - 16 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o mynetworks_style=host

-o smtpd_authorized_xforward_hosts=127.0.0.0/8



Примечание: вокруг знака '=' пробелы не ставить. Значение 127.0.0.1:10026 открывает 10026-порт для возвращения почты обратно от clamsmtpd.

rc-update add clamd default

rc-update add clamsmtpd default

/etc/init.d/postfix reload



все - антивирус должен проверять всю почту проходящую через Ваш почтовик



P.S. Все вышеописанное проверялось на моей рабочей машине и на серваке небольшой конторы. Автор (или авторы) не несут ответственности за безграмотное и необдуманное применение данного руководства. Ваша безопасность в ваших руках и в голове! Данное описание не претендует на полное и развернутое и не является единственно возможным вариантом конфигурации. Также выражаю признательность разработчикам вышеописанных замечательных программ за прекрасное исполнение и хорошую документацию. Практически все вышенаписанное подчерпнуто из документации к самим пакетам, а также некоторые мысли родились из отрывочных данных, блуждающих в рунете - большое спасибо за это их авторам.



PS. Некоторая путаница возникает с переадресацией почты - самый простой вариант использование файла aliases - но до его использования в отличие от sendmail, ящик который должен быть переадресован должен быть все-таки создан в системе через cyradm -user cyrus -auth login -server localhost команда cm и не забыть что etc/postfix/main.cf

alias_maps = hash:/usr/local/etc/postfix/aliases

alias_database = hash:/usr/local/etc/postfix/aliases



Настройка vsftpd

Введение



Это перевод статьи en:HOWTO vsftpd. Кое-что изменено и добавлено от себя для более понятного, как мне кажется, изложения

Взято из en:HOWTO Plan, setup and run a high school Gentoo Club и модифицировано.

Это руководство описывает процесс установки VSFTP и настройки его для анонимного доступа с правами только для чтения. FTP (File Transfer Protocol) - старый, но надежный протокол, используемый для быстрой передачи файлов в сети.



Установка VSFTPD



Зайдите в систему под пользователем root и введите комманду: Code: Установка

emerge vsftpd



Настройка



Это очень легко. Откройте файл /etc/vsftpd/vsftpd.conf вашим любимым текстовым редактором и внесите в него вот эти изменения:



Общие настройки

Файл: /etc/vsftpd/vsftpd.conf

dirmessage_enable=YES

# banner_file=/etc/vsftpd/vsftpd.banner # edit banner first

chown_uploads=NO

xferlog_enable=YES

idle_session_timeout=600

data_connection_timeout=120

ascii_upload_enable=NO

ascii_download_enable=NO

chroot_list_enable=YES

background=YES

listen=YES

ls_recurse_enable=NO





Анонимный пользователь (Anonymous), только для чтения

Файл: /etc/vsftpd/vsftpd.conf

anonymous_enable=YES

anon_upload_enable=NO

anon_mkdir_write_enable=NO

Отключаем локальных пользователей



Это плохая идея разрешать локальным пользователям доступ через ftp (проще sftp/ssh), потому мы отключаем им доступ. Файл: /etc/vsftpd/vsftpd.conf

local_enable=NO

write_enable=NO

Запуск службы



Gentoo предоставляет централизированное место для служб, которые называються init scripts или скрипты инициализации. Эти скрипты находяться в каталоге /etc/init.d/ и имеют имя сервиса, который они стартуют. Инит скрипты используються для управления сервисами. Для запуска VSFTPD сервера наберите Code: Запуск vsftpd как службы

/etc/init.d/vsftpd start



Вы можете узнать больше о том что вы можете сделать этим скриптом инициализации набрав "/etc/init.d/vsftpd" без аргументов ("start" это аргумент, еще есть "stop" и "restart") )



Настройка скриптов конфигурации



Вы не хотите набирать /etc/init.d/vsftpd start каждый раз когда вы включаете свой компьютер? Gentoo предоставляет простой путь запуска скриптов инициализации при включении вашего компьютера. Чтобы настроить VSFTPD для запуска при каждой загрузке, наберите: Code: запуск vsftpd как службы загрузке

rc-update add vsftpd default



Если вы хотите узнать больше о rc-update наберите "man rc-update".



Также можно и через chkconfig: Code: запуск vsftpd как службы загрузке

chkconfig vsftpd on

Где размещать файлы



Файлы анонимного пользователя находятся в домашнем каталоге специального пользоватьля ftp (пользователя в системе). По умолчанию это - /home/ftp. Если вы хотите сменить его например на /var/ftp, вам нужно сделать следущие действия: /var/ftp Code: Смена размещения

rmdir /home/ftp

mkdir /var/ftp

chown ftp:ftp /var/ftp

ln -s /var/ftp /home/





Теперь можно что-то разместить в этом каталоге. Например, если вы хотите сделать доступными для других каталоги disfiles и packages, можно сделать следущие действия: Code: '

mv /usr/portage/disfiles /var/ftp/

ln -s /var/ftp/disfiles /usr/portage/

mv /usr/portage/packages /var/ftp/

ln -s /var/ftp/packages /usr/portage/





Примечание: VSFTPD автоматически запусается в chroot окружении, поэтому символические ссылки не работают. Именно для этого пришлось перенести каталоги /usr/portage/disfiles и usr/portage/packages и создать символические ссылки в тех местах где они должны находится.



Но можно например монтировать нужные каталоги в .../ftp при помощи fstab. Для этого нужно создать каталоги: /var/ftp/distfiles и /var/ftp/packages Code: '

mkdir /var/ftp/distfiles

mkdir /var/ftp/packages





После чего пропишите в /etc/fstab следущее: Code: '

/usr/portage/distfiles /var/ftp/distfiles none ro,bind 0 0

/usr/portage/packages /var/ftp/packages none ro,bind 0 0

Клиенты



Есть множеcтво программ, которые позволяют получать доступ к ftp серверу. Вот некоторые из них:

ftp

lftp - лучшый консольный клиент

mozilla-firefox

nautilus

gftp

Jabber Server

Введение



Jabber - это открытый протокол, использующий XML, для быстрого обмена сообщениями и информацией о присутствии между любыми двумя абонентами в интернете. Благодаря своей уникальной расширяемости и гибкости, jabber способен поддерживать множество протоколов - ICQ, IRQ, MSN, RSS, Yahoo и др.

Установка пакетов

В качестве платформы для развертывания протокола jabber возьмем пакет jabberd. Он поддерживает множество возможностей - основные IM-протоколы ICQ, MSN, Yahoo, поддержку SSL-соединений и даже IPv6.

Сначала посмотрим, какие USE-флаги требует jabber: Code: Зависимости



# emerge -pv jabberd

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild N ] net-im/jabberd-1.4.3-r5 -icq -ipv6 -ldap -msn -oscar -ssl -yahoo 0 kB

Total size of downloads: 0 kB



Включаем соответсвующие флаги в установку (неважно, через переменную USE или через файл make.conf) и собираем: USE="icq ssl" emerge jabberd В качестве зависимости вытянется пакет jit - Jabber ICQ Transport, необходимый для поддержки протокола ICQ.



Конфигурация



Сначала добавьте пользователей, ответсвенных за администрирование сервера jabber, в группу jabber:

gpasswd -a имя_пользователя jabber

Все конфигурационные файлы, связанные с jabber, имеют формат XML и находятся в каталоге /etc/jabber.

Обязательно надо прописать имя хоста и РАЗРЕШИТЬ регистрации.

Запуск демона



Добавляем запуск сервера при старте системы:

rc-update add jabber default

Стартуем наш сервер: /etc/init.d/jabber start

Все должно работать :)



Выделенный сервер Counter-Strike



Рано или поздно у большинства админов локальных сетей возникает необходимость настраивать игровые сервера для пользователей. Одной из самых популярных сетевых игр на сегодняшний день является Counter-Strike.CS:Source. Которая, к сожалению пока не приобрела достаточной популярности у нас в России. Мы рассмотриму установку сервера для игры CS 1.6. Более популярной в среде российских геймеров.



Необходимое программное обеспечение

Для установки CS-сервера нам понадобится только одна программа:halflife-steam Code: emerge -pv halflife-steam



Calculating dependencies ...done!

[ebuild N ] games-server/halflife-steam-2.0 3,431 kB

Total size of downloads: 3,431 kB





Steam - это утилита от Valve,позволяющая обновлять любую их игру через steam-network.

Установка и настройка



Ставим steam

Установка сводится к простому emerge halflife-steam.



Настройка установка hl



Steam установится в каталог /opt/halflife



ВАЖНО: в ноябре 2006 года в пакете была бага. Что характерно для всех продуктов получаемых через стим, они иногда забывают unix специфику. Непостредственно у меня, на steam не стоял бит исполняемости. И в cs было имя типа xxx.WAD (нужно wad, различаеться регистр) Code: команды



cd /opt/halflife

chmod +x stream



Code: команды

./steam -command update -game cstrike -dir ./



Наблюдаем лог. Если никаких слов типа error нет - значит сервер установился. Code: output



HLDS installation up to date





Предупреждение: Этот сервер работает только в LAN (класс С) и только со steam клиентами. Все остальное Варез



Файл сервер Samba в домене Win2k

Задача:

Организация файлового сервера

Авторизация пользователей через домен контроллер



Дано:

Red Hat 9.0

Samba 3.0.13

DC win 2003 server



Вступление

Взяться за написание данной статьи меня побудило то, что когда возникла задача о которой написано выше , то статьи описывающей решение данной проблемы полностью я не нашел вот и решил написать такую статью в которой было бы готовое решение.



Основная часть

Первым делом устанавливаем самбу. Решено было использовать последнюю версию 3.0.13. Установлено все это было из стандартного RPM пакета. Думаю с этим сложностей ни у кого не возникает, док по данному вопросу полно и потому начнем сразу править конфиг самбы. Ниже приведен окончательный работающий конфиг, может там и есть что лишнее, но после того как все заработало я убирать оттуда ничего не стал.

[global]

realm = bryusov.iasnet.ru

# Workgroup = имя NT-домена (или рабочей группы):

workgroup = DOMAIN



# NetBIOS-имя, под которым будет виден сервер остальным машинам сети.

netbios name = NAU



# Комментарий, появляющийся рядом с именем машины в "Сетевом окружении" Windows.

server string = Samba Server



# Следующий параметр влияет на безопасность. Hosts allow разрешает машинам с

# указанными IP-адресами присоединяться к Samba-серверу.

hosts allow = 172.18. 172.17. 127.



# если подставить %m то для каждой машины подключенной к Samba-серверу будет

# использоваться свой log-файл.

log file = /var/log/samba/log.smbd



# это кому скока не жалко

max log size = 500



# определяет, каким образом будет осуществляться проверка пароля (нам надо через DC)

security = domain



# Параметр Password server используется только совместно с опцией security = domain

password server = <IP домен контролера>



# для репликации всех доменов входящих в траст с вашим доменом

allow trusted domains = yes



# включаем поддержку шифрованных паролей.

encrypt passwords = yes



# Используя следующий параметр можно создать отдельную конфигурацию для каждой машины домена.

# Вместо пары символов %m при входе подставляется NetBIOS-имя машины.

# Я Такого не делал хотя поэксперементровать можно.

# include = /usr/local/samba/lib/smb.conf.%m



# данные строчки можно не включать в работающий конфиг они определяют место

# хранения , порядок обновления Unix паролей и какой программой все это производится

smb passwd file = /etc/samba/smbpasswd

unix password sync = Yes

passwd program = /usr/bin/passwd %u

passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*



# В документации говорится, что с помощью этого параметра

# можно повысить производительность Samba-сервера.

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192



# по дефолту слушаются все интерфейсы, здесь можно указать конкретно

interfaces = <ip или название интерфейса>



# строчки которых не было в стандартном конфиге и были добавлены руками для pепликации NT-юзеpов:



winbind uid = 10000-20000

winbind gid = 10000-20000

winbind enum groups = yes

winbind enum users = yes



# Если вам нужны русские буквы в именах файлов, то раскоментируйте

# следующие 3 строки (заменив KOI8-R на свою локаль)

# dos charset = CP866

# unix charset = KOI8-R

# display charset = KOI8-R







# описываем шары

[FILES]

comment = share

path = /share/FILES

public = no

writable = yes

valid users = DOMAIN\users

create mask = 0744



# настройка кириллицы по желанию



Все с конфигом самбы закончили, далее привожу конфиг /etc/krb5.conf

[logging]

default = FILE:/var/log/krb5libs.log

kdc = FILE:/var/log/krb5kdc.log

admin_server = FILE:/var/log/kadmind.log



[libdefaults]

ticket_lifetime = 24000

default_realm = PDC.DOMAIN.NAME.RU

dns_lookup_realm = false

dns_lookup_kdc = false



[realms]

DOMAIN.NAME.RU = {

kdc = pdc.domain.name.ru:88

admin_server = kerberos.domain.name.ru:749

default_domain = domain.name.ru

}



[domain_realm]

.domain.name.ru = DOMAIN.NAME.RU

domain.name.ru = DOMAIN.NAME.RU



[kdc]

profile = /var/kerberos/krb5kdc/kdc.conf



[appdefaults]

pam = {

debug = false

ticket_lifetime = 36000

renew_lifetime = 36000

forwardable = true

krb4_convert = false

}



Все остальное оставлено без изменений.



Теперь заводим самба сервер в домен, делаем со стороны домен контролера двусторонние доверительные отношения, запускаем getent group и видим что все работает.



Вот и все надеюсь полезной инфы достаточно для быстрой и эффективной настройки файл сервера.



Огромное спасибо всем кто писал статьи про самбу почти все их прочитал и почерпнул много полезного , в том числе не только для решения своих задач.



Руководство по настройке Samba в режиме PDC с использованием LDAP



Устанавливаемые пакеты



Установим нужные пакеты:



# USE="ldap acl ldapsam pam gdbm samba ssl tcpd winbind" emerge samba openldap acl nss_ldap pam_ldap







ВАЖНО: Версия nss_ldap должна быть не ниже 250-r1 (>=sys-auth/nss_ldap-250-r1)



OpenLDAP



Конфигурирование OpenLDAP



Для примера используется домен amber.global.com который является дочерним доменом домена global.com, который работает под управлением Win2003 Server.



Примечание: Не решенной задачей осталось создание доверительных отношений между доменами и включение домена amber в лес global.com

Файл: /etc/openldap/slapd.conf

include /etc/openldap/schema/core.schema

include /etc/openldap/schema/cosine.schema

include /etc/openldap/schema/inetorgperson.schema

include /etc/openldap/schema/misc.schema

include /etc/openldap/schema/nis.schema

include /etc/openldap/schema/openldap.schema

include /etc/openldap/schema/samba.schema

pidfile /var/run/openldap/slapd.pid

argsfile /var/run/openldap/slapd.args



access to dn.base=""

by self write

by * auth

access to attr=userPassword

by self write

by * auth

access to attr=shadowLastChange

by self write

by * read

access to *

by * read

by anonymous auth

#loglevel 1

database ldbm

suffix "dc=amber,dc=global,dc=com"

rootdn "cn=Manager,dc=amber,dc=global,dc=com"

# Пароль rootpw лучше всего указывать в зашифрованном виде.

# Для генерации шифрованного пароля используйте утилиту slappasswd

# Например: slappasswd -h {MD5}

# rootpw = secret

rootpw {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==

directory /var/lib/openldap-ldbm



index objectClass eq

index cn eq,subinitial

index sn eq,subinitial

index uid eq,subinitial

index displayName eq,subinitial

index uidNumber eq

index gidNumber eq

index memberUID eq

index sambaSID eq

index sambaPrimaryGroupSID eq

index sambaDomainName eq

Файл: /etc/openldap/ldap.conf

HOST 127.0.0.1

BASE dc=sanaa,dc=global,dc=com







Проверяем разрешения на каталоги /var/lib/openldap-*

ls -la /var/lib/



ВАЖНО:

drwx------ 2 ldap ldap 104 Июн 8 18:31 openldap-data

drwx------ 2 ldap ldap 72 Июн 8 18:31 openldap-ldbm

drwx------ 2 ldap ldap 72 Июн 8 18:31 openldap-slurp



Запуск сервера OpenLDAP



пока работаем без шифрования трафика, так как сервер LDAP и SAMBA работают на одном сервере, подправляем конфиг чтобы LDAP слушал 389 порт только на localhost.

Файл: /etc/conf.d/sldap

# conf.d file for the openldap-2.1 series

#

# To enable both the standard unciphered server and the ssl encrypted

# one uncomment this line or set any other server starting options

# you may desire.

#

# OPTS="-h 'ldaps:// ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"

OPTS="-h 'ldap://127.0.0.1'"



и запускаем OpenLDAP



/etc/init.d/slapd start



SAMBA



Миграция OpenLDAP



Существует 2 пути создания учетных записей пользователей: домен уже существует и создание нового домена. В первом случае самбу нужно настроить в режиме BDC, перенести все учетные записи, и потом изолировав PDC, перезапустить самбу в режиме PDC. Во втором случае все еще проще, самбу сразу запускаем в режиме PDC и создаем стандарные учетные записи при помощи замечательного пакета smbldap-tools.







emerge smbldap-tools



/etc/init.d/samba start



Code: configure.pl

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

smbldap-tools script configuration

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Before starting, check

. if your samba controller is up and running.

. if the domain SID is defined (you can get it with the 'net getlocalsid')



. you can leave the configuration using the Crtl-c key combination

. empty value can be set with the "." character

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Looking for configuration files...



Samba Configuration File Path [/etc/samba/smb.conf] >

The default directory in which the smbldap configuration files are stored is shown.

If you need to change this, enter the full directory path, then press enter to continue.

Smbldap-tools Configuration Directory Path [/etc/smbldap-tools/] >

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Let's start configuring the smbldap-tools scripts ...



. workgroup name: name of the domain Samba act as a PDC

workgroup name [amber] >

. netbios name: netbios name of the samba controler

netbios name [neptun] >

. logon drive: local path to which the home directory will be connected

(for NT Workstations). Ex: 'H:'

logon drive [U:] >

. logon home: home directory location (for Win95/98 or NT Workstation).

(use %U as username) Ex:'\\neptun\%U'

logon home (press the "." character if you don't want homeDirectory) [\\%L\users\%U] >

. logon path: directory where roaming profiles are stored. Ex:'\\neptun\profiles\%U'

logon path (press the "." character if you don't

want roaming profile) [\\%L\Profiles\%a\%U] >

. home directory prefix (use %U as username) [/home/%U] >

. default users' homeDirectory mode [700] >

. default user netlogon script (use %U as username) [] >

default password validation time (time in days) [45] > 900

. ldap suffix [dc=amber,dc=global,dc=com] >

. ldap group suffix [ou=Groups] >

. ldap user suffix [ou=Users] >

. ldap machine suffix [ou=Users] >

. Idmap suffix [ou=Idmap] >

. sambaUnixIdPooldn: object where you want to store the next uidNumber

and gidNumber available for new users and groups

sambaUnixIdPooldn object (relative to ${suffix}) [sambaDomainName=amber] >

. ldap master server: IP adress or DNS name of the master (writable) ldap server

ldap master server [127.0.0.1] >

. ldap master port [389] >

. ldap master bind dn [cn=Manager,dc=amber,dc=global,dc=com] >

. ldap master bind password [] >

. ldap slave server: IP adress or DNS name of the slave ldap server: can also

be the master one

ldap slave server [127.0.0.1] >

. ldap slave port [389] >

. ldap slave bind dn [cn=Manager,dc=amber,dc=global,dc=com] >

. ldap slave bind password [] >

. ldap tls support (1/0) [0] >

. SID for domain amber: SID of the domain (can be obtained with 'net getlocalsid neptun')

SID for domain amber [S-1-5-21-1918777035-593721947-2697221154] >

. unix password encryption: encryption used for unix passwords

unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA) [SSHA] > MD5

. default user gidNumber [513] >

. default computer gidNumber [515] >

. default login shell [/bin/bash] >

. default skeleton directory [/etc/skel] >

. default domain name to append to mail adress [] >

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

backup old configuration files:

/etc/smbldap-tools/smbldap.conf->/etc/smbldap-tools/smbldap.conf.old

/etc/smbldap-tools/smbldap_bind.conf->/etc/smbldap-tools/smbldap_bind.conf.old

writing new configuration file:

/etc/smbldap-tools/smbldap.conf done.

/etc/smbldap-tools/smbldap_bind.conf done.







Если мы не хотим, что бы у всех пользователей профили были перемещаемыми, то в файле /etc/smbldap-tools/smbldap.conf установим следующее значение: Файл: /etc/smbldap-tools/smbldap.conf

...

userProfile=""

...

Инициализируем каталоги самбы в LDAP:



smbldap-populate -a Administrator -k 0 -m 0



Конфигурация SAMBA

Файл: /etc/samba/smb.conf

[global]

workgroup = amber

netbios name = neptun

realm = amber.global.com

nt acl support = yes

acl compatibility = win2k

map acl inherit = yes

server string = Samba Server %v

interfaces = eth0

bind interfaces only = yes

hosts allow = 192.168.7. 127.

log file = /var/log/samba/log.%m

debug level = 9

max log size = 500

socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192

security = user

os level = 250

passdb backend = ldapsam:"ldap://127.0.0.1/"

enable privileges = yes

passwd program = /usr/sbin/smbldap-passwd "%u"

passwd chat = *new*password* %n\n *new*password* %n\n *successfully*

passdb expand explicit = no

unix password sync = no

ldap passwd sync = no

ldap suffix = dc=amber,dc=global,dc=com

ldap admin dn = cn=Manager,dc=amber,dc=global,dc=com

ldap user suffix = ou=Users

ldap group suffix = ou=Groups

# Т.к. для самбы компьютеры и пользователи - одно и то же,

# и искать она в дальнейшем записи компьютеров будет в пользователях,

# то для избежания дальнейших проблем при добавлении рабочих станций

# к домену мы вместо следующей строки

#

# ldap machine suffix = ou=Computers

#

# напишем другую:

ldap machine suffix = ou=Users

ldap idmap suffix = ou=Idmap

idmap backend = ldapsam:ldap://127.0.0.1/

idmap uid = 10000-20000

idmap gid = 10000-20000

ldap delete dn = Yes

ldap ssl = no

add user script = /usr/sbin/smbldap-useradd -n -a "%u"

delete user script = /usr/sbin/smbldap-userdel "%u"

add group script = /usr/sbin/smbldap-groupadd -p "%g"

delete group script = /usr/sbin/smbldap-userdel "%g"

add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"

delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"

set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

add machine script = /usr/sbin/smbldap-useradd -w "%u"

#PDC

domain master = yes

preferred master = yes

#BDC

# domain master = no

# preferred master = no

domain logons = Yes



logon script =

# Если хотите, что бы профили всех пользователей были перемещаемыми

# и хранились на сервере (со всеми гигабайтами фильмов и личных фотографий)

# то укажите такое значение следующего параметра:

#

# logon path = \\%L\Profiles\%a\%U

#

# Если вы не хотите гонять профили по сети, оставьте значение пустым,

# (но ни в коем случае не комментируйте эту строку, она просто получит

# значение по умолчанию), вот так:

logon path =

logon drive = U:

logon home = \\%L\users\%U

#============================ Share Definitions ==============================

[netlogon]

comment = Network Logon Service

path = /var/lib/samba/netlogon

browseable = yes

guest ok = yes

writable = no

share modes = no



[Profiles]

admin users = admin

create mode = 600

directory mode = 700

path = /var/lib/samba/profiles

browseable = yes

guest ok = yes

writable = yes



[homes]

comment = Home Directories

browseable = no

read only = no



[public]

path = /pub

guest ok = yes

read only = no



[users]

path = /home/users

writable = yes

printable = no





Добавим запуск winbind с самбой (если нужно): Файл: /etc/conf.d/samba

...

daemon_list="smbd nmbd winbind"

...

Введём пароль рабочей станции:



smbpasswd -w secret



Введём контроллёр домена, собственно в домен



net rpc join -S neptun -U Administrator



Настройка системы на авторизацию в LDAP



--ladserg 14:05, 28 июля 2006 (UTC) У меня честно говоря не получилось сделать авторизацию пользователей samba через LDAP без настройки поддержки авторизации системных пользователей в LDAP, пришлось настраивать и это.



Сначала поправим файл /etc/ldap.conf, приведя его примерно к следующему виду:



Файл: /etc/ldap.conf

host 127.0.0.1

base dc=amber,dc=global,dc=com

ldap_version 3

rootbinddn cn=Manager,dc=amber,dc=global,dc=com

bind_timelimit 10

bind_policy soft

pam_filter objectClass=posixAccount

pam_password exop

nss_base_passwd ou=Users,dc=tty,dc=perm,dc=ru?one

nss_base_shadow ou=Users,dc=tty,dc=perm,dc=ru?one

nss_base_group ou=Groups,dc=tty,dc=perm,dc=ru?one

nss_base_hosts ou=Hosts,dc=tty,dc=perm,dc=ru?one

nss_base_services ou=Services,dc=tty,dc=perm,dc=ru?one

nss_base_networks ou=Networks,dc=tty,dc=perm,dc=ru?one

nss_base_protocols ou=Protocols,dc=tty,dc=perm,dc=ru?one

nss_base_rpc ou=Rpc,dc=tty,dc=perm,dc=ru?one

nss_base_ethers ou=Ethers,dc=tty,dc=perm,dc=ru?one

nss_base_netmasks ou=Networks,dc=tty,dc=perm,dc=ru?one

nss_base_bootparams ou=Ethers,dc=tty,dc=perm,dc=ru?one

nss_base_aliases ou=Aliases,dc=tty,dc=perm,dc=ru?one

nss_base_netgroup ou=Netgroup,dc=tty,dc=perm,dc=ru?one

ssl off

nss_reconnect_tries 4

nss_reconnect_sleeptime 1

nss_reconnect_maxsleeptime 16

nss_reconnect_maxconntries 2

Сим мы скажем nss_ldap где и как искать зписи пользователей и групп.



Теперь сзодадим файл /etc/ldap.secret и при помощи лбого текстого редактора в plain/text виде занесём туда пароль пользователя, который выше у нас указан в опции rootbinddn, нпример пароль secret:

Файл: /etc/ldap.secret

secret



Затем непременно установим на него нужные права:

Code: Установка прав на файл /etc/ldap.secret

#chmod 600 /etc/ldap.secret

#chown root:root /etc/ldap.secret



Далее приведём файл /etc/pam.d/system-auth к следующему виду:

Файл: /etc/pam.d/system-auth

auth required pam_env.so

auth sufficient pam_unix.so likeauth nullok

auth sufficient pam_ldap.so use_first_pass

auth required pam_deny.so



account sufficient pam_ldap.so

account required pam_unix.so



password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3

password sufficient pam_unix.so nullok md5 shadow use_authtok

password sufficient pam_ldap.so use_authtok

password required pam_deny.so



session required pam_limits.so

session required pam_unix.so

session required pam_mkhomedir.so skel=/etc/skel/ umask=077

session optional pam_ldap.so

Обратите внимание на строку:



session required pam_mkhomedir.so skel=/etc/skel/ umask=077



Она заставляет систему создавать домашние каталоги для тех пользоватей у которых они ещё не созданы, при этом в новый каталог помещается содержимое директории /etc/skel/ и задаётся маска каталога 0x700



После чего правим файл /etc/nsswitch.conf, приводя его к следующему виду:

Файл: /etc/nsswitch.conf

passwd: files ldap

shadow: files ldap

group: files ldap



hosts: files dns

networks: files dns



services: db files

protocols: db files

rpc: ldap [NOTFOUND=return] db files

ethers: ldap [NOTFOUND=return] db files

netmasks: files

netgroup: ldap [NOTFOUND=return] files

bootparams: files



automount: files

aliases: files



Предупреждение: Ни в коем случае не добавляйте значение ldap к следующим базам: hosts, networks, protocols, services. Иначе вы рискуете не дождаться следующей загрузки системы.



Всё, теперь мы указали системе брать пользователей как из системных файлов, так и из LDAP.



Перезагрузим наш компьютер, дабы убедиться что система грузится нормально. Если система останавливается на загрузке udev, то смотрите ошибки в файле /etc/nsswitch.conf, может вы указали использовать ldap не в той базе.



Управление пользователями



Ранее мы установили пакет smbldap-tools, теперь рассмотрим возможность управления пользователями с его помощью.



Создание пользователя



smbldap-useradd [-o] [-a] [-b] [-w] [-i] [-u uid] [-g gid ] [-G groups,,,]

[-n] [-d home] [-s shell] [-c gecos] [-m [-k]] [-t] [-P] [-A 0|1] [-B 0|1]

[-C sambaHomePath] [-D sambaHomeDrive] [-E sambaLogonScript] [-F sambaProfilePath]

[-H sambaAcctFlags] [-N surname] [-S family name] [-M local mailAddress,,,]

[-T mailToAddress] [-?] user



Где:

user - системное имя создаваемого пользователя

-o - add the user in the organizational unit (relative to the user suffix)

-a - is a Windows User (otherwise, Posix stuff only)

-b - is a AIX User

-w - is a Windows Workstation (otherwise, Posix stuff only)

-i - is a trust account (Windows Workstation)

-u - uid

-g - gid

-G - список групп пользователя, разделённых запятой.

-n - do not create a group

-d - домашний каталог пользователя (по умолчанию /home/имя_пользователя)

-s - оболочка пользователя (по умолчанию /bin/false)

-c - отображаемое в Windows имя пользователя

-m - создать домашний каталог и скопировать в него файлы из /etc/skel

-k - указать иной каталог, из которого будут копироваться файлы при

создании домашнего каталога пользователя (используется с ключём -m)

-t - time. Wait 'time' seconds before exiting (when adding Windows Workstation)

-P - ends by invoking smbldap-passwd

-A - возможность менять пароль пользователем, значение 0 если нет, 1 если да

-B - пользователь должен поменять пароль, значение 0 если нет, 1 если да

-C - домашний каталог samba (например '\\PDC-SRV\homes')

-D - буква диска для монтирования домашнего каталога samba (например 'H:')

-E - скрипт, выполняемый при входе в систему

-F - каталог профиля пользователя (например '\\PDC-SRV\profiles\foo')

-H - sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]')

-N - настоящее имя пользователя (для русских ещё и отчество)

-S - фамилия пользователя

-M - local mailAddress (comma seperated)

-T - mailToAddress (forward address) (comma seperated)

-? - отобразить помощь



Например создание пользователя ladserg:



smbldap-useradd -a -c 'Serg Alex Lad' -N 'Serg Alex' -S 'Lad' -s /bin/bash ladserg



К сожалению подружить smbldap-tools с русским мне не удалось, даже при использовании кодировки UTF-8.

Итак, в приведённом выше примере будет создан пользователь с системным именем ladserg, фамилией Lad, именем Serg Alex, оболочкой /bin/bash, домашним каталогом /home/ladserg. Флаг -a укажет, что пользователь также будет являться пользователем домена.



Изменение пароля

smbldap-passwd [-s] [-u] [-h] username



Где:

username - имя пользователя

-h, -?, --help - показать помощь

-s - обновить только samba пароль

-u - обновить только UNIX пароль





Например:



smbldap-passwd ladserg



После чего дважды будет запрошен пароль.



Теперь можно попробовать зайти в систему под учётной записью только что созданного пользователя.



Модификация пользователя

smbldap-usermod [-a] [-c comment] [-d home_dir] [-e expiration_date]

[-g initial_group] [-r new_login_name] [-p passwd] [-s shell] [-u uid [ -o]] [-x]

[-A canchange] [-B mustchange] [-C smbhome] [-D homedrive] [-E scriptpath]

[-F profilepath] [-G group[,...]] [-H acct‐flags] [-N canonical_name]

[-S surname] [-P] login



Где:

-c - Полное имя

-d - Домашний каталог

-r - новое имя пользователя (cn, sn и dn будут обновлены)

-u - uid

-o - uid может быть не уникальным

-g - gid

-G - список групп пользователя, разделённых запятой.

-s - оболочка

-N - настоящее имя пользователя (для русских ещё и отчество)

-S - фамилия пользователя

-P - ends by invoking smbldap-passwd

For samba users:

-a - add sambaSAMAccount objectclass

-e - expire date ("YYYY-MM-DD HH:MM:SS")

-A - возможность менять пароль пользователем, значение 0 если нет, 1 если да

-B - пользователь должен поменять пароль, значение 0 если нет, 1 если да

-C - домашний каталог samba (например '\\PDC-SRV\homes')

-D - буква диска для монтирования домашнего каталога samba (например 'H:')

-E - скрипт, выполняемый при входе в систему

-F - каталог профиля пользователя (например '\\PDC-SRV\profiles\foo')

-H - sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]')

-I - disable an user. Can't be used with -H or -J

-J - enable an user. Can't be used with -H or -I

-M - mailAddresses (comma seperated)

-T - mailToAddress (forward address) (comma seperated)

-?|-h - отобразить помощь





Например команда:

smbldap-usermod -A 1 ladserg



Позволит пользователю ladserg менять пароль. А команда:

smbldap-usermod -a slad-adm



Добавит к учётной записи пользователя slad-adm класс sambaSAMAccount, что сделает его пользователем samba.



Удаление пользователя

smbldap-userdel [-r|-R|-?] username



Где:

-r удалить домашний каталог

-R удалить домашний каталог с запросом на удаление каждого файла

-? отобразить помощь



Например команда:

smbldap-userdel -r slad-adm



удалит пользователя slad-adm, и его домашний каталог.



Управление пользователями в оффтопике



Если вы вводите в домен компьютеры под управлением Windows, то вам пригодятся пара утилит, архив которых можно скачать отсюда:



ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE



Мониторинг работы системы



Введение



В данной статье описывается, как осуществить мониторинг разных системных и физических параметров компьютеров, работающих под GNU/Linux или другими UNIX.







Постановка задачи



Нужно осуществлять постоянный мониторинг основных параметров работы компьютеров (физических и системных) через сеть, собирать и выдавать эту информацию в удобной форме.



Для примера см: http://monitoring.sourceforge.net/example.html



К основным системным параметрам относят: загрузка процессоров (пользователями, системой, привилегированными программами, свободное процессорное время), использования оперативной памяти (и многие другие, всего больше 100), дисков, сетевого трафика. Для получения необходимых нам значений параметров работы системы используем программы df, sar и iptables или ipfw.



К физическим параметрам относят: температуру процессора и материнской платы, скорость вращения вентиляторов, напряжения питания. Для получения показателей датчиков материнских плат используется модуль ядра I2C и программа lm_sensors.



Для передачи информации через сеть используем клент-серверную модель и программу Net-Telnet. Базу данных строим пакетом rrdtool, информацию предоставляем через сервер apache и/или по почте. С помощью скриптов постараемся максимально упростить и автоматизировать поставленную задачу, это избавит вас от рутинной работы.



Программа работает по клиент-серверной технологии. На компьютерах, которые нужно мониторить, размещается часть программы, которая снимает различные показатели работы компьютера и выдает их по запросу через сеть. На одном административном компьютере осуществляется периодический опрос всех компьютеров, за которыми ведется наблюдение, данные записываются в специально созданную базу, и на её основе формируется html страница, которая экспортируется через apache для просмотра обычным браузером.



Теперь подробно о том, что нам нужно сделать:

Загружаем последнюю версию программы для мониторинга с сайта http://monitoring.sourceforge.net/ Файл monitoring-*.tar.bz2 размещаем в доступном месте, например в папке локального ftp: /var/ftp/pub/linux.

"Серверная" сторона



Разархивируйте monitoring-*.tar.bz2.



У Gentoo есть ебилд, для установки программы monitoring со всеми зависимостями. С сайта необходимо скачать monitoring-*.ebuild.tar.bz2 и распаковать его в /usr/local. Далее выполните:

# emerge -pv monitoring

[ebuild N ] net-analyzer/monitoring-0.11 USE="-admin -apache2 -lm_sensors -server"



Для серверной стороны необходимо добавить USE="server", а для поддержки мониторинга датчиков USE="lm_sensors"

# export "USE=lm_sensors server"

# emerge monitoring



Компиляция и установка lm_sensors, sysstat, iptables, coreutils, xinetd в случае использования Gentoo можно пропустить, потому что эти пакеты уже установлены как зависимости, и перейти сразу к их настройке.

Мониторинг физических параметров



Определяем на базе какого чипсета сделаны платы: материнская, видеокарта (некоторые имеют датчики) и прочие, заходим на страницы: http://secure.netroedge.com/~lm78/supported.html и http://www.lm-sensors.nu/~lm78/newdrivers.html и ищем, есть ли драйверы для мониторинга этих плат под Линуксом. Если определили, что ваши чипсеты поддерживаются и драйвер стабильный, можете продолжить выполнение этого пункта.



Внимание, если версия ядра меньше за 2.4.9, нужно обновить ядро или воспользоваться старой версией программы! смотрите: i2c. Если ядро версии 2.4.*, вам дополнительно нужен СООТВЕТСТВУЮЩИЙ! модуль i2c-*.*.*.tar.gz, родной Линуксовый не подходит. В версии ядра 2.6.* все хорошо - отлично работает родной модуль ядра i2c.



Компиляция ядра



Подробную инструкцию по сборке нового ядра можно прочесть по ссылке "Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0"

Обратите особое внимание на пункты, которые добавляют к ядру GNU/Linux поддержку сенсоров:

Для поддержания ACPI:

Power management options (ACPI, APM) ---> ACPI (Advanced Configuration and Power Interface) Support --->



Для поддержки IPMI стандарта управления сенсорами.

Device Drivers ---> Character devices ---> IPMI --->



Включаем поддержку сенсоров в ядре

Device Drivers ---> I2C support --->



Выбираем алгоритмы, использующие ваши чипы

Device Drivers ---> I2C support ---> I2C Algorithms --->



Выбираем ваш чипсет (внимание, здесь нужно указать чипсет именно вашей системной платы, или видеокарты, см. ниже):

Device Drivers ---> I2C support ---> I2C Hardware Bus support --->

Device Drivers ---> I2C support ---> Miscellaneous I2C Chip support --->



Выбираем драйверы ко всем вашим сенсорам (внимание, именно тех, соответствующих вашим чипам, предыдущим пунктам):

Device Drivers ---> Hardware Monitoring support --->



Можно собрать необходимые драйверы как модули, хотя это несколько добавит работы при настройке (нужно будет запустить программу sensors-detect). Для мониторинга сети можно использовать netfilter (iptables) и прочие опции...



Если Ваше аппаратное обеспечения поддерживается, установите lm_sensors



Загружаем с: lm_sensors, свеженькую версию lm_sensors-*.*.*.tar.gz. Разархивируем lm_sensors-*.*.*.tar.gz Заходим в директорию, какая создалась и выполняем:

# make user

# make user_install

# depmod -a



Проверяем, есть ли строка /usr/local/lib в файле /etc/ld.so.conf, если нет, добавляем и выполняем команду:

# ldconfig





Настройка lm_sensors



Выполняем команду

# prog/mkdev/mkdev.sh



Чтобы правильно определить ваше оборудование и знать, какие модули нужно загрузить, выполним:

# prog/detect/sensors-detect



именно этот скрипт и указывает, какие у вас чипсеты, и какие в них сенсоры!

Добавляем строки, созданные программой для modules.conf в /etc/modules.conf

Копируем prog/init/lm_sensors.init в каталог /etc/rc.d/init.d/lm_sensors (назначить права для исполнения).

Добавляем строки, которые создала программа prog/detect/sensors-detect с modprobe и sensors -s например, в конец файла /etc/conf.d/local.start - чтобы они загружались при старте системы

или можно запускать как сервис:

для Gentoo выполняем:

# rc-update -a lm_sensors default



Только для клонов RedHat выполняем:

# chkconfig --add lm_sensors



копируем prog/init/lm_sensors.sysconfig в /etc/sysconfig/lm_sensors

копируем etc/sensors.conf.eg в /etc/sensors.conf

копируем prog/sensors/sensors в каталог /usr/bin/sensors (предоставить права на выполнение)



Все теперь выполняют modprobe с параметрами, которые указала программа sensors-detect для загрузки модулей, потом выполняем:

# sensors -s



Корректируем /etc/sensors.conf таким образом, чтобы названия напряжений, скорости вентиляторов и температур, именно Ваших чипов содержали соответственно: "Volt", "Fan", "Temp". При этом, названия меток допускают только малые и большие латинские буквы, цифры, знак "_", и не должны содержать знаков „.”, ”/” или ”+”! Выполнение этих условий обязательно!!!

Пример /etc/sensors.conf можно найти в server/etc/sensors.conf

Например, для lm85*:

# cat /etc/sensors.conf

...

# Voltage inputs

label in0 "VoltA1_5" # AGP on Intel S845WD1-E

label in1 "Volt1_5"

label in2 "Volt3_3"

label in3 "Volt5"

label in4 "Volt12"

# Temperature inputs

label temp1 "TempCPU"

label temp2 "TempMB1"

label temp3 "TempMB2"

# Fan inputs

label fan1 "FanCPU"

label fan2 "FanSys1"

label fan3 "FanSys2"

label fan4 "FanSys3"

# PWM Outputs

label pwm1 "CPUF_PWM"

label pwm2 "SysF1_PWM"

label pwm3 "SysF2_PWM"

...



Теперь выполним команду sensors, и если у нас все получилось, то увидим примерно следующее:

# sensors

lm85b-i2c-0-2e

Adapter: SMBus I801 adapter at c800

VoltA1_5: +1.48 V (min = +1.42 V, max = +1.58 V)

Volt1_5: +1.50 V (min = +1.45 V, max = +1.60 V)

Volt3_3: +3.33 V (min = +3.13 V, max = +3.47 V)

Volt5: +5.10 V (min = +4.74 V, max = +5.26 V)

Volt12: +12.31 V (min = +11.38 V, max = +12.62 V)

FanCPU: 3360 RPM (min = 3000 RPM)

TempCPU: +36C (low = +10C, high = +60C)

TempMB1: +33C (low = +10C, high = +45C)

TempMB2: +33C (low = +10C, high = +45C)

CPUF_PWM: 255

SysF1_PWM: 255

SysF2_PWM: 77

vid: +1.525 V (VRM Version 9.1)



Если у вас названия напряжений, скорости вентиляторов и температуры не содержат соответственно: "Volt", "Fan", "Temp" - обязательно отредактируйте файл /etc/sensors.conf как показано выше.



Мониторинг системных параметров



Установка sysstat



Загружаем последнюю версию пакета sysstat с сайта http://perso.wanadoo.fr/sebastien.godard/ или ftp://ibiblio.org/pub/Linux/system/status/

Розархивируем файл sysstat-*.*.*.tar.bz2 в /usr/src

Заходим в созданный каталог и выполняем:

# make config #Отвечаем на вопросы только 'y' или 'n'

# make

# make install



Теперь из командной строки пробуем:

# sar -A 1 1 |grep Average:

Average: proc/s

Average: 0.00

Average: cswch/s

Average: 258.00

Average: CPU %user %nice %system %iowait %idle

Average: all 1.90 0.00 0.40 0.00 97.70

........................................................................

Average: runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15

Average: 0 83 0.06 0.15 0.16



Проверка df

# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/sda3 2007996 411772 1596224 71% /

/dev/sda1 132206 10981 114399 43% /boot

/dev/sda5 248895 4256 231789 2% /tmp

/dev/sda6 5863496 2556028 3307468 64% /var

/dev/sda7 6843432 5128048 1715384 75% /usr

/dev/sda8 1976492 1048740 827348 56% /home

/dev/sda9 5863496 4479752 1383744 77% /usr/portage/distfiles

none 254752 0 254752 0% /dev/shm

/usr/portage/distfiles 5863496 4479752 1383744 77% /var/ftp/pub/linux/distfiles

/usr/portage/packages 6843432 5128048 1715384 75% /var/ftp/pub/linux/packages



Если Вам выдало:

bash: df: command not found

установите df из пакета coreutils.



Мониторинг сети



Мониторинг сети основывается на подсчете байт, попадающих в правила сетевых экранов - iptables или ipfw, и поэтому они достаточно гибкие, но является зависимым от конфигурации сетевого экрана.

Если Вы хотите осуществлять мониторинг сети: просмотрите server/etc/show_network.conf (/etc/monitoring/show_network.conf) – это список графиков, которые Вы получите. Он должен отвечать названиям графиков в admin/etc/network (/etc/monitoring/network).



Linux iptables



Нужно откорректировать server/etc/show_iptables_acc.conf (/etc/monitoring/show_network.conf)

1 колонка – название графика (должна отвечать show_network.conf, но с “in_*.N” или “out_*.N”, где N – некоторый идентификатор, например число)

2 колонка – название таблицы

3 колонка – название цепочки с таблицы

4 колонка – порядковый номер правила с цепочки

Это всё должно отвечать Вашим правилам!

Простые примеры экранов находятся в server/firewall/* и если подходит Вам, можете использовать их.

Проверьте работу /usr/bin/show_iptables.sh. Результат найдёте в /home/monitoring



FreeBSD ipfw



Для BSD, надо откорректировать server/bin/show_ipf_acc.conf:

1 колонка – название графика

2 колонка – номер правила

3 колонка – порядковый номер правила в ipfw show

Это должно отвечать Вашим правилам!

Проверьте работу /usr/bin/show_ipfw.sh Результат в /home/monitoring



Некоторые важные системные настройки



Если нет xinetd – установите его. Загляньте в

server/etc/host.allow (/etc/host.allow):

# BEGIN allow services for monitoring

show_hdisk.sh:127.0.0.1 # IP ком п'ютера что мониторит

show_sensors.sh:127.0.0.1 # IP ком п'ютера что мониторит

show_info.sh:127.0.0.1 # IP ком п'ютера что мониторит

show_system.sh:127.0.0.1 # IP ком п'ютера что мониторит

show_network.sh:127.0.0.1 # IP ком п'ютера что мониторит

# END allow services for monitoring



Также некоторые из них вы можете изменить в server/bin/show_* и строки "only_from", "bind" и "disable" в server/xinetd.d/show_*

$ cat server/xinetd.d/show_hdisk

# default: on

# description: The showdisk server show disk useg on the server.

# It dont uses authentication !!!!!!!!!!!!!!!.

service df

{

socket_type = stream

wait = no

user = monitoring

bind = 127.0.0.1 # IP сетевого интерфейса, на котором мониторят

server = /usr/bin/show_hdisk.sh

only_from = 127.0.0.1 # IP комп'ютера, который мониторит

disable = no # Вкл./Выкл.

}



Откройте доступ к следующим портам: 9045/tcp 9046/tcp 9047/tcp 9048/tcp 9049/tcp с административного компьютера в случае наличия сетевых экранов. Если Вы хотите осуществить установку вручную, пропустите следующий пункт.



Автоматическая инсталляция



Для автоматической установки отредактируйте следующие строки в monitoringinstall.sh (/usr/sbin/monitoringinstall.sh):

# Edit this first:

# all command will execute user:

runuser=monitoring

rungroup=monitoring

# cron cfg directory

cronpath=/etc/cron.d

# init script locations:

crond=/etc/init.d/crond

# Edit only for server side:

# init script location:

xinetd=/etc/init.d/xinetd

# program location:

dfpath=/bin/df

sarpath=/usr/bin/sar

sensorspath=/usr/bin/sensors



Теперь с правами суперпользователя выполните:

# ./monitoringinstall.sh --server



В Gentoo просто:

# monitoringinstall.sh --server



Вы можете пропустить пункт следующий пункт и перейти к „административной” части системы.



Ручная установка



Копируем следующие файлы:

cp server/etc/show_iptables_acc.conf /etc/monitoring #for GNU/Linux

cp server/etc/show_ipfw_acc.conf /etc/monitoring #for BSD

cp server/etc/show_network.conf /etc/monitoring

cp server/xinetd.d/show_hdisk /etc/xinetd.d/

cp server/xinetd.d/show_network /etc/xinetd.d/

cp server/xinetd.d/show_sensors /etc/xinetd.d/

cp server/xinetd.d/show_system /etc/xinetd.d/

cp server/bin/show_hdisk.sh /usr/bin

cp server/bin/show_iptables.sh /usr/bin #for GNU/Linux

cp server/bin/show_ipfw.sh /usr/bin #for BSD

cp server/bin/show_network.sh /usr/bin

cp server/bin/show_sar.sh /usr/bin

cp server/bin/show_sensors.sh /usr/bin

cp server/bin/show_system.sh /usr/bin



Добавим следующие строки к /etc/service:

network 9045/tcp # show network info

info 9046/tcp # show server info

df 9047/tcp # show disk info

sys 9048/tcp # show system info

sensors 9049/tcp # show sensors info



Создадим специального пользователя:

groupadd monitoring

useradd -g monitoring -d /home/monitoring -s /bin/bash -c monitoring monitoring

mkdir /home/monitoring

chmod 700 /home/monitoring

chown -R monitoring:monitoring /home/monitoring



В случае использования политик SELinux необходимо также добавить:

# cat /etc/security/selinux/src/policy/users

...

# BEGIN monitoring selinux:

user monitoring roles user_r;

# END monitoring selinux.



и дополнительно выполнить:

# cd /etc/security/selinux/src/policy

# make load



Перегрузим xinetd:

# /etc/init.d/xinetd restart



и добавьте строки в crontab:

*/10 * * * * monitoring /usr/bin/show_iptables.sh # для GNU/Linux

*/10 * * * * monitoring /usr/bin/show_ipfw.sh # для BSD

*/1 * * * * monitoring /usr/bin/show_sar.sh



Перегрузим crond:

# /etc/init.d/crond restart



Все вышесказанное нужно сделать на КАЖДОМ сервере, который вы хотите мониторить...



"Административная" сторона



Для начала убедитесь что все хорошо со стороны серверов



Для каждого сервера проверяем доступность необходимых сервисов:

# telnet server_name 9045

Trying serverIP...

Connected to serverIP.

Escape character is '^]'.

in_ftp 0

out_ftp 0

in_http 0

out_http 0

in_other 249

out_other 27

Connection closed by foreign host.



# telnet server_name 9046

Trying serverIP...

Connected to server_name.

Escape character is '^]'.

Intel(R) Celeron(R) CPU 2.40GHz | 504 Mb

Connection closed by foreign host.



# telnet server_name 9047

Trying serverIP...

Connected to server_name.

Escape character is '^]'.

/dev/sda3 2007996 411772 1596224 71% /

/dev/sda1 132206 10981 114399 43% /boot

/dev/sda5 248895 4256 231789 2% /tmp

/dev/sda6 5863496 2556028 3307468 64% /var

/dev/sda7 6843432 5128048 1715384 75% /usr

/dev/sda8 1976492 1048740 827348 56% /home

/dev/sda9 5863496 4479752 1383744 77% /usr/portage/distfiles

Connection closed by foreign host.



# telnet server_name 9048

Trying serverIP...

Connected to server_name.

Escape character is '^]'.

Average: proc/s

Average: 3.98

Average: cswch/s

Average: 308.00

Average: CPU %user %nice %system %iowait %idle

Average: all 1.76 0.00 0.47 0.00 97.76

.............................................................

Average: runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15

Average: 1 88 0.05 0.21 0.21

Connection closed by foreign host.



# telnet server_name 9049

Trying serverIP...

Connected to server_name.

Escape character is '^]'.

lm85b-i2c-0-2e

Adapter: SMBus I801 adapter at c800



Volt1_5: +1.48 V (min = +1.42 V, max = +1.58 V)

VoltCore: +1.50 V (min = +1.45 V, max = +1.60 V)

Volt3_3: +3.33 V (min = +3.13 V, max = +3.47 V)

Volt5: +5.10 V (min = +4.74 V, max = +5.26 V)

Volt12: +12.25 V (min = +11.38 V, max = +12.62 V)

CPU_Fan: 3377 RPM (min = 3000 RPM)

fan2: 0 RPM (min = 0 RPM)

fan3: 0 RPM (min = 0 RPM)

fan4: 0 RPM (min = 0 RPM)

TempCPU: +32 C (low = +10 C, high = +50 C)

TempBoard: +30 C (low = +10 C, high = +45 C)

TempRemot: +30 C (low = +10 C, high = +40 C)

CPU_PWM: 255

Fan2_PWM: 255

Fan3_PWM: 77

vid: +1.525 V (VRM Version 9.0)



Connection closed by foreign host.







Установление необходимых программ



Разархивируйте monitoring-*.tar.bz2.



Для Gentoo есть ебилд, для установления программы monitoring со всеми зависимостями с сайта стоит брать monitoring-*.ebuild.tar.bz2 и распаковать его в /usr/local дальше выполните:

# emerge -pv monitoring

[ebuild N ] net-analyzer/monitoring-0.11 USE="-admin -apache2 -lm_sensors -server"



Для административной стороны необходимо добавить USE=admin, а для поддержки apache-2* USE=apache2

# export "USE=admin apache2"

# emerge monitoring



Компиляцию и установление rrdtool, apache, Net-Telnet в случае использования Gentoo можно пропускать, потому что эти пакеты уже будут установлены как зависимости, а переходить сразу к их настройке.



Инсталляция rrdtool



Базой данных, для хранения информации и инструмент генерации графиков, используется пакет rrdtool (round robin database tool). Зкачать пакет можно отсюда: http://rrdtool.eu.org или http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/ Подробно ознакомиться с этим пакетом можно здесь: http://www.bog.pp.ru/work/rrdtool.html (Российская). В принципе, программа самостоятельно создаст необходимые базы так, что дополнительных знаний не нужно и следующий пункт Пример расчёта настройки базы RRD можно пропустить.



Пример расчёта настройки базы RRD



Расчёт настроек создания базы RRD файлы /etc/monitoring/*.rrd.cf Количество "слов" в файле будет соотведствовать количеству графиков в разных маштабах времени. например для расчёта подобия MRTG: 5-ти минутный - даные за последние 2 дня: х-доля=0.5 количество отсчётов на ячейку=1 количество ячеек=2*24*12=576 +min+max+avg+cur ~ 650

0.5:1:650



30-ти минутный - дание за последние две недели: х-доля=0.5 количество отсчётов на ячейку=30/5=6 количество ячеек=2*7*24*2=672 +min+max+avg+cur ~ 750

0.5:6:750



2-ух часовой - даные за последние два месяца: х-доля=0.5 количество отсчётов на ячейку=60*2/5=24 количество ячеек=2*31*24/2=744 +min+max+avg+cur ~ 850

0.5:24:850



1-но дневный - даные за последние два года: х-доля=0.5 количество отсчётов на ячейку=60*24/5=288 количество ячеек=2*366=732 +min+max+avg+cur ~ 900

0.5:288:900



Таким образом имеем:

# cat /etc/monitoring/5min.rrd.cf

0.5:1:650 0.5:6:750 0.5:24:850 0.5:288:900



Инсталляция Net-Telnet



Данная версия программы для работы через сеть требует Net-Telnet perl модуль (можно при желании использовать и netcat): из-за этого нужно установить perl (что пожалуй уже сделано). Дальше Net-Telnet perl модуль берем и устанавливаем отсюда: http://cpan.perl.org/modules/by-module/Net/ название файлу Net-Telnet-*.tar.gz



Инсталляция Apache



Нужно установить и настроить apache сервер, дополнительно можете добавить (admin/etc/apache/monitoring.conf):

# cat /etc/apache2/vhosts.d/monitoring.conf

### /etc/apache2/vhosts.d/monitoring.conf

### $Id: monitoring.conf,v 0.11 2006/09/28 16:27:12 hse Exp $

###

### For Monitoring *.shtml

AddType text/html .shtml

AddOutputFilter INCLUDES .shtml

### For authentication:

<Directory "/var/www/localhost/htdocs/administration/monitoring">

AllowOverride All

Options Includes

<IfModule mod_access.c>

### For password authentication:

# AuthUserFile /var/www/localhost/htdocs/administration/passwd_file

# AuthGroupFile /dev/null

# AuthName Administrative-information

# AuthType Basic

# Require valid-user

### For host/network authentication:

Order deny,allow

Deny from all

Allow from 127.0.0.1

# Allow from .cluster.linux

</IfModule>

</Directory>



Добавляем пользователя для просмотра веб страницы:

# htpasswd -bcm /var/www/localhost/htdocs/administration/passwd_file username password



Если все хорошо идем дальше.



Установка программ для мониторинга



В файл admin/etc/host (/etc/monitoring/host) вносим перечень серверов, которые нужно мониторить (имена должны разрешаться в IP адреса). Коректируем под свои потребности файл admin/etc/monitoring.conf (/etc/monitoring/monitoring.conf)

путь по которому установлено скрипт:

installpath=/usr/

путь к веб страницы:

apachehtmldir=/var/www/html

webdirpath=/administration/monitoring

путь к файлу с перечнем серверов для мониторинга:

confpath=$installpath/etc/host

путь к временных файлов:

diskinfopath=/tmp/monitoring/disk.tmp

sarinfopath=/tmp/monitoring/sar.tmp

sensorsinfopath=/tmp/monitoring/sensors.tmp

путь где установлен пакет rrdtool:

rrdtoolpath=/usr/bin/rrdtool

почтовый адресов:

emailvalue=root@localhost

По желанию (или за потребностью) правим другие файлы с каталога etc/ (/etc/monitoring/):



diskusage memusage quantity cpu memory systemload - содержимое файлов должно отвечать тем параметрам которые Вы хотите мониторить. Все параметры должны выводиться командой sar -A 1 1 |grep Average: Названия файлов отвечают названиям графиков и баз которые создадутся и должны быть записаны в файле system. Значение параметров принадлежащих одном файлу должны быть одного типа!



system - первая колонка определяет какие графики получите и каждый ее элемент отвечать файлу из этого же каталога (см. выше). Вторая указывает через какие периоды времени база rrdtool будет принимать данные. Третья и четвертая колонка определяет минимальное и максимальное значение параметра которое еще может быть записано в базу. Пятая колонка определяет легенду (размерность).



сolors - файл с номерами цветов в 16-ричной системе.

config - содержит имена конфигурационных файлов из этого же каталога отвечающие веб страницам что создаються (можно добавлять свои, но тогда их должны создать!).



disk - содержит названия графиков, периоды времени через которые база rrdtool будет принимать данные, минимальные и максимальные значение параметров которые мониторите, легенду (размерность).



network - содержит названия графиков, периоды времени через которые база rrdtool будет принимать данные, минимальные и максимальные значение параметров которые мониторите, легенду (размерность).



sensors - содержит названия графиков, периоды времени через которые база rrdtool будет принимать данные, минимальные и максимальные значение параметров которые мониторите, легенду (размерность).



disk.rrd.cf network.rrd.cf sensors.rrd.cf system.rrd.cf - описывают структуру базы данных.



disk.msg network.msg sensors.msg system.msg - содержит информацию которую получите почтой в критических ситуациях.



Если хотите осуществить установку вручную, пропустите следующий пункт.



Автоматическая установка программ



Теперь можете воспользоваться скриптом для инсталляции. Для этого нужно откорректировать следующие строки в файле monitoringinstall.sh (/usr/sbin/monitoringinstall.sh) или пропустить этот пункт и следовать дальнейшей инструкции для установки в ручную.

имя пользователя и группы:

runuser=monitoring

rungroup=monitoring

директория где расположены cron настройки:

cronpath=/etc/cron.d

путь к инициализационному скрипту

crond crond=/etc/init.d/crond

директория где находятся настройки apache

apachconfdir=/etc/apache/conf

файл конфигурации apache:

apachconffile=apache.conf

путь к инициализационному скрипту apache

apached=/etc/init.d/apache



Теперь с правами рута выполните (нужно подождать 1 минуту, если не установили мониторинг сети, и 10 минут после установки мониторынга сети на последнем сервере, прежде чем выполнять следующую команду):

# ./monitoringinstall.sh --admin



В Gentoo просто

# monitoringinstall.sh --admin



Если видите ошибки, наверное надо:

1 поправить файлы конфигурации в admin/etc/ (/etc/monitoring)

2 посмотреть в /home/monitoring/hostname/err/...

3 удалить файлы с /home/monitoring/hostname/ и перезапустити скрипт

4 удалить базы данных с /var/db/monitoring/... и перезапустити скрипт

5 bin/net_telnet.pl читает только 500 строк входа. Если в Вас больше, отредактируйте його:

line 32: while [$и ne 500]



Тогда попробуйте еще, но добавьте имена сервисов, под рутом выполните:

# ./monitoringinstall.sh --admin=disk

# ./monitoringinstall.sh --admin=sensors

# ./monitoringinstall.sh --admin=system

# ./monitoringinstall.sh --admin=network



Если где-то допустили ошибку, можно просто выполнить monitoringuninstall.sh и попытаться еще раз. Можете пропустить следующий пункт.



Ручная установка программ



Устанавливаем скрипти для мониторинга, генерации базы данных и веб страницы скопировав с каталога monitoring/admin в каталог: /usr/ ($INSTALL_PATH), используя опцию –p для сохранения прав. Выполняем:

# cp -p admin/bin/* $INSTALL_PATH/bin/

# mkdir /etc/monitoring

# cp -p admin/etc/* /etc/monitoring/

# mkdir $INSTALL_PATH/share/monitoring

# cp -p admin/share/* $INSTALL_PATH/share/monitoring/



# mkdir -p /var/www/localhost/htdocs/administration/monitoring

# chmod 755 /var/www/localhost/htdocs/administration/monitoring/

# groupadd -g 1111 monitoring

# useradd -u 1111 -g monitoring -d /home/monitoring -s /bin/bash -c monitoring monitoring

# chmod -R 700 /home/monitoring

# chown -R monitoring:monitoring /home/monitoring

# chown -R monitoring:monitoring /var/www/localhost/htdocs/administration/monitoring/



И тогда выполняйте (подождите 1 минуту, если не устанавливали мониторинг сети, и 10 минут после установки мониторынга сети на последнем сервере, прежде чем выполнять следующую команду):

# su monitoring

$ $INSTALL_PATH/bin/net.vert.1.sh

$ $INSTALL_PATH/bin/net.vert.10.sh



создаются базы данных в каталоге /var/db/monitoring/имя_сервера/ для всех серверов с файлу /etc/monitoring/host и дополнительная конфигурация в /home/monitoring

Выполняем:

$ $INSTALL_PATH/bin/png_graph.sh disk -1week 30min

$ $INSTALL_PATH/bin/png_graph.sh disk -1month 2hour

$ $INSTALL_PATH/bin/png_graph.sh disk -1year 1day

$ $INSTALL_PATH/bin/png_graph.sh network -1week 30min

$ $INSTALL_PATH/bin/png_graph.sh network -1month 2hour

$ $INSTALL_PATH/bin/png_graph.sh network -1year 1day

$ $INSTALL_PATH/bin/png_graph.sh sensors -2day 5min

$ $INSTALL_PATH/bin/png_graph.sh sensors -1week 30min

$ $INSTALL_PATH/bin/png_graph.sh sensors -1month 2hour

$ $INSTALL_PATH/bin/png_graph.sh sensors -1year 1day

$ $INSTALL_PATH/bin/png_graph.sh system -2day 5min

$ $INSTALL_PATH/bin/png_graph.sh system -1week 30min

$ $INSTALL_PATH/bin/png_graph.sh system -1month 2hour

$ $INSTALL_PATH/bin/png_graph.sh system -1year 1day



Если видите ошибки, наверное нужно:

1 поправить файлы конфигурации в /etc/monitoring

2 посмотреть в /home/monitoring/hostname/err/...

3 удалить файлы с /home/monitoring/hostname/ и перезапустить скрипт

4 удалить базы данных с /var/db/monitoring/... и перезапустить скрипт

5 bin/net_telnet.pl читает только 500 строк входа. Если в Вас больше, отредактируйте его:

line 32: while [$и ne 500]



Тогда попробуйте еще раз.



В каталоге /var/www/localhost/htdocs/administration/monitoring создаются начальная страница и каталоги с веб страницами для каждого сервера.



Если не возникло больше ошибок, используйте следующий файл для автоматизации всей работы с crond:

$ exit

# cat /etc/cron.d/monitoring



SHELL=/bin/bash

PATH=/bin:/usr/bin

MAILTO=root

HOME=/home/monitoring

LANG=POSIX



# Begin server part (may be you wont monitoring "admin" computer too)

*/1 * * * * monitoring /usr/bin/show_sar.sh

*/10 * * * * monitoring /usr/bin/show_iptables.sh #GNU/Linux

#*/10 * * * * monitoring /usr/bin/show_ipfw.sh #BSD

# End server part



# Begin disk admin part

*/30 * * * * monitoring /usr/bin/png_graph.sh hdisk -1week 30min

0 */2 * * * monitoring /usr/bin/png_graph.sh hdisk -1month 2hour

0 0 * * * monitoring /usr/bin/png_graph.sh hdisk -1year 1day

# End disk admin part



# Begin network admin part

*/30 * * * * monitoring /usr/bin/png_graph.sh network -1week 30min

0 */2 * * * monitoring /usr/bin/png_graph.sh network -1month 2hour

0 0 * * * monitoring /usr/bin/png_graph.sh network -1year 1day

# End network admin part



# Begin system admin part

*/5 * * * * monitoring /usr/bin/png_graph.sh system -2day 5min

*/30 * * * * monitoring /usr/bin/png_graph.sh system -1week 30min

0 */2 * * * monitoring /usr/bin/png_graph.sh system -1month 2hour

0 0 * * * monitoring /usr/bin/png_graph.sh system -1year 1day

# End system admin part



# Begin sensors admin part

*/5 * * * * monitoring /usr/bin/png_graph.sh sensors -2day 5min

*/30 * * * * monitoring /usr/bin/png_graph.sh sensors -1week 30min

0 */2 * * * monitoring /usr/bin/png_graph.sh sensors -1month 2hour

0 0 * * * monitoring /usr/bin/png_graph.sh sensors -1year 1day

# End sensors admin part



# Begin vert admin part

*/1 * * * * monitoring /usr/bin/net.vert.1.sh

*/10 * * * * monitoring /usr/bin/net.vert.10.sh

# End vert admin part



Выполняем:

# /etc/init.d/crond restart







Если все хорошо



Теперь заходим Вашим любимым браузером на страницу http://servername/administration/monitoring/index.html. Здесь уже можем выбрать ссылки на сервер, который вас интересует :)



Добавление новых серверов



Если Вам когда-то придется добавить новый сервер, достаточно будет сделать следующее:

1. Выполнить для него пункт 2 („Серверная” сторона)

2. Добавить его имя в файл /etc/monitoring/host

Всё остальное создастся само !!! Наслаждайтесь :)))



Альтернативы



Если Вы недовольны реализацией мониторинга таким образом (по моему мнению достаточно неплохое решение ;)) подберите себе лучшую. Вот некоторый перечень альтернатив или дополнений :=)

Angel Network Monitor http://www.paganini.net/angel/

Autostatus http://www.angio.net/consult/autostatus/

Cacti http://cacti.net

HiWAyS http://www.hiways.org/

MARS http://www.altara.org/mars.html

Mon http://www.kernel.org/software/mon/

Monit http://www.tildeslash.com/monit/

Nagios http://www.nagios.org

Netup (French) http://www.pasteur.fr/units/sis/netup/

NocMonitor http://www2.discpro.org/nocmon/

NodeWatch http://www.skendric.com/nodewatch/

Penemo http://www.communityprojects.org/apps/penemo/

PIKT http://pikt.org/

RITW http://www.terravista.pt/Ancora/1883/ritw_e.html

RRDWorld http://oss.oetiker.ch/rrdtool/rrdworld/index.en.html

Scotty http://wwwhome.cs.utwente.nl/~schoenw/scotty/

Spong http://spong.sourceforge.net/

Sysmon http://www.sysmon.org/

ZABBIX http://www.zabbix.com

ZEUS http://www.zeus.com/



Настройка X



Настройка русских шрифтов в X



Введение



Введение временное



Ну вот и начался этот проект, призванный восполнить достаточно широкий пробел в документации по настройке шрифтов в Иксах. Надеюсь многочисленные русские пользователи проявят некую сознательность и отпишут сюда пару строчек.



Кто принимает участие

Macil - линуксоид из Ярославля. Обитает на yar.lancktelecom.ru/talk, forum.median.ru, а также Macil [at] jabber.ru

Wanderer - пользователь Linux из Москвы. Всерьез занимаюсь изучением и использоваением Linux последние 4 года, до этого просто приглядывался ;-). На Gentoo пересел почти год назад и ничуть не жалею и даже наоборот, очень этим доволен. Связаться со мной можно посредством e-mail (wanderer_mg [at] mail.ru) или jabber (wanderer [at] jabber.ru).



Две системы рисования шрифтов

Исторически в X Window System существует 2 системы рисования шрифтов. Родная (core) и Xft.

Родная система – прямой потомок системы рисования шрифтов, введенной в X11R1, выпущенной в 1987 году. Изначально она могла рисовать только монохромные растровые шрифты, но на протяжении всех этих лет предпринимались более-менее успешные попытки заставить ее работать с векторными шрифтами.

Xft не является неотъемлемой частью X, хотя возможно будет ей в будущем. Это значит, что она распространяется не со всеми реализациями X. Она проектировалась для работы с векторными шрифтами, и делает это достаточно эффективно. В отличие от родной системы рисования, Xft поддерживает anti-aliasing и sub-pixel rasterisation. Кроме того, она позволяет приложениям полностью контролировать то, как будут рисоваться шрифты, обеспечивая возможность создания WYSIWYG приложений.



Нужно ли уточнять что эти две подсистемы совершенно не совместимы на уровне API? Из-за достаточно анархичного развития X в последнее время, возникла большая путаница в определениях и версиях используемых библиотек.



//Источник: вольный перевод файла README.fonts



Хft



Введение в Xft



Xft это библиотека, которая предоставляет клиентский API для рисования шрифтов. В настоящее время версия Xft 2.0 использует библиотеки fontconfig и freetype для выбора шрифтов и их рисования, соответственно. Xft 1.0 использовала внутренний механизм конфигурации, что было не очень хорошей идеей так как KDE и Pango "заимствовали" механизм конфигурации шрифтов и создали еще большую путаницу. Подробности можно посмотреть [здесь].



Нужно запомнить 3 вещи:

fontconfig - для конфигурации

freetype - для рисования

XFT - связывает все во едино



Freetype - библиотека рисования шрифтов



[Freetype] - совершенно независимый от кого-либо проект по созданию библиотеки рисования шрифтов. Библиотека предоставляет достаточно простой API, но поскольку обычные приложения заинтересованы в более высокоуровневых сервисах, в чистом виде не используется. Вместе с X идет модифицированная freetype, предназначенная для поддержки векторных шрифтов родной системой рисования. Я не вижу смысла даже пытаться ее компилировать (она компилируется в модуль freetype), так как большинство приложений перешли на использование Xft и путанице со шрифтами приходит конец. Рендеринг векторных шрифтов очень сложный процесс, и к сожалению, freetype не может его выполнять до конца и в некоторых шрифтах появляются не очень приятные артефакты. Но ничего лучшего (открытого и бесплатного) пока нет... Как обычно, существует 2 версии freetype: freetype1 и freetype2. Отличия их в том, что freetype1 может рисовать тоько шрифты формата TrueType. Сложно найти современный дистрибутив, где отсутствует freetype2.



Теория рендеринга векторных шрифтов



Что такое hinting



На английском много информации о hinting можно найти тут http://www.myfonts.com/activity/hinting/



Не уверен, однако, что можно тут публиковать такие ссылки.

Это — незавершённая статья. Вы можете помочь проекту, исправив и дополнив материал.



Что такое anti-aliasing



Это методы избавления от артефактов, возникающих при отрисовке векторного изображения в растовое. Когда вектороное изображение (не дискретное, к примеру, формула y=2*x) отрисовывается в растовое, то в результате погрешностей и того, что цвет каждого пискселя строго зависит от формулы, возникают артефакты. То есть наклонную линию мы будем видеть ступенчато, а не плавно. Методы anti-aliasing, в основном, базируются на отрисовке изображения в большее разрешение и приведение к обычному путём билинейной фильтрации, т.е. цвет пикселя будет строиться из цветов нескольких пикселей большого изображения. Шрифты после применения anti-aliasing выглядят более гладко, т.к. более точно соответствуют "векторной формуле".

Это — незавершённая статья. Вы можете помочь проекту, исправив и дополнив материал.



Шрифты из Microsoft Windows





Установка шрифтов Microsoft Windows имея доступ в интернет



Если есть доступ к интернету, то можно просто установить пакет corefonts: emerge corefonts



Настройка родной подсистемы



Настройка Xft



Все настройки Xft хранятся в файлах /etc/fonts/fonts.conf и /etc/fonts/local.conf. Все изменения нужно производить в файле /etc/fonts/local.conf. Изменение файла /etc/fonts/fonts.conf не рекомендуется, т.к. при обновлении пакета fontconfig он будет перезаписан и все настройки потеряны.



Отключение сглаживания для шрифтов меньше определенного размера



По умолчанию сглаживание действует для всех шрифтов, но для шрифтов маленького размера его лучше отключить, т.к. смотрится это почти всегда плохо.



Ниже приведен пример конфига /etc/fonts/local.conf, в котором указана отмена сглаживания для шрифтов, размер которых меньше 14. Code: /etc/fonts/local.conf

<?xml version="1.0"?>

<!DOCTYPE fontconfig SYSTEM "fonts.dtd">

<!-- /etc/fonts/local.conf file for local customizations -->

<fontconfig>



<!-- Enable sub-pixel rendering -->



<match target="font">

<edit name="rgba" mode="assign"><const>rgb</const></edit>

</match>

<match target="font">

<test name="size" compare="less_eq">

<double>14</double>

</test>

<edit name="antialias" mode="assign">

<bool>false</bool>

</edit>

</match>

<match target="font">

<test name="pixelsize" compare="less_eq">

<double>14</double>

</test>

<edit name="antialias" mode="assign">

<bool>false</bool>

</edit>

</match>



</fontconfig>



Настройка Qt и Gtk



Для Qt

emerge qt qtconfig



Для Gtk

emerge gtk-theme-switch switch2





Настройка размера шрифтов в X



Введение

Столкнулся с проблемой (и не я один) размера шрифтов.



Процесс сталкивания выглядел так:

~ $ emerge xorg-x11

...

~ $ emerge kde

...

startx



Попал я, естессна сразу в KDE. И увидел очень мелкие шрифты, очень мелкие, похожие на точечки. Примерно такие:

Естессна, первое, что я сделал - полез в центр управления и установил размер, соответствующий моему зрению. Им оказался 40. Немало. Тогда я понял, что что-то неправильно. Порылся в инете, не нашел ничего. Смирился. Однако вскоре узнал, что та же проблема у меня и в KDM, только там изменить размер немного сложнее. Изменил. Но проблему это не решило, потому что нашлись еще всякие шибко умные проги, которые пользовались собственными настройками шрифтов. Их (настройки) искать оказалось очень сложно и пришлось брать быка за рога. Итак,

Суть проблемы



Она состоит в том, что шрифты ориентированы на определенное физическое разрешение экрана - dpi (точек на дюйм). В винде по дефолту оно идет равным 96. X11 решил, что это слишком сложно не знаю для кого и, как выяснилось позже, выставил себе аж целых 25 dots per inch. В переводе в метрическую систему это около 1 точки на миллиметр. Соответсвенно, экран разрешением 1024х768 должен быть шириной в метр, высотой 77 см, чтоб читалось все как надо. Ну а поскольку реально экран у нас меньше, мы видели то, что мы видели.



Неправильный ход мысли



но полезный совет. Увеличть размер шрифта для KDM можно в этом файле:

/usr/kde/3.5/share/config/kdm/kdmrc

Но это не выход, как я уже говорил. Кстати, GDM настраивается в другом файле, его я не знаю, потому что пришел к следующему пункту:



Правильный ход мысли

Надо изменить разрешение, те самые dpi. Где? Как?



Меняем dpi



Тут, кстати, возможны варианты. Если Вы запускаете иксы из консоли по мере необходимости командой startx, то Вам сюда. Если иксы стартуют сами при загрузке системы - то сюда. В идеале стоит проделать оба варианта.



Для команды startx



Лезем туда, где этот стартикс лежит и правим его

~ $ find /usr -name startx



У меня он оказался в /usr/bin, и с вероятностью 99,(9)% там же он будет и у Вас.

Вписать в него надо всего ничего параметр -dpi 96 в ключ defaultserverargs

defaultserverargs="-dpi 96"



Те параметры, которые там есть не удаляйте, у них свое назначение, этот просто допишите к ним.

В принципе, на этом все. Можно

~ $ startx



Жизнь удалась.



Для пользователей KDM, XDM и тому подобного



Вооружитесь калькулятором. В файле xorg.conf Вам надо изменить параметр DisplaySize. По умолчанию, он устанавливается равным разрешению (помните, я говорил в начале статьи), но ваш-то монитор меньше. Можно померять линейкой, можно посчитать, какие значения ему присвоить:

X = x * 25,4 / dpi

Y = y * 25,4 / dpi

где X, Y - значения, которые надо присвоить DisplaySize

x, y - разрешение монитора (x - ширина, y - высота)

dpi - то физическое разрешение, которое должно получиться



У меня при разрешении 1024x768 получилось так:

~ $ vi /etc/X11/xorg.conf



Section "Monitor"

Identifier "Monitor0"

VendorName "HSD"

ModelName "HSD150PX17-A"

DisplaySize 270.9 203.2 # mm

EndSection



Вывод

Ерунда какая, ничего сложного, если сразу заглянуть в xorg.conf и почитать комментарии, то этого можно избежать. Но я не избежал и, кстати, долго с этим мучился.



Вывод-то в чем: будьте внимательнее!



P.S.

В Gnome есть такая настроечка, как dpi, сам не видел, но знающие люди говорят, что есть и рекомендуют ее тоже выставить на 96 или то, которое принято везде.





Xorg X11 и прозрачность



Введение



Это руководство поможет в установке X.org на Linux/Gentoo машине, хотя общие настройки должны работать и на любом другом дистрибутиве.



Шаг за шагом



Установка X.org



Установите последнюю версию X.org с помощью команды emerge xorg-x11



После компиляции необходимо настроить X.org путем редактирования /etc/X11/xorg.conf

Если у вас было установленно XFree86 то рабочий /etc/X11/XF86Config будет автоматически использоватся для работы X.org. Для обеспечения целостности рекомендуется переименовать /etc/X11/XF86Config в /etc/X11/xorg.conf.



Для загрузки X.org выполните команду startx



Установка X Composite Extension



Откройте /etc/X11/xorg.conf для редактирования nano -w /etc/X11/xorg.conf пользуйте ваш любимый редактор ;)



Добавьте следующие строки в любом месте конфиг файла Файл: /etc/X11/xorg.conf

Section "Extensions"

Option "Composite" "Enable"

Option "RENDER" "Enable"

EndSection



При следующей перезагрузке X.org у вас будет включен Composite Extension. Это расширение включает предварительную отрисовку вне экрана, чтобы на экран выводилось уже законченное изображение. Это позволяет использовать различные эффекты (например прозарчность и тени).



Для достоверности можно проверить лог файл grep COMPOSITE /var/log/Xorg.0.log

(II) Initializing built-in extension COMPOSITE



Включение теней и настоящей прозрачности



KDE 3.4 или более поздняя



Начиная с версии 3.4 KDE поддерживает прозрачность через Xorg. На заголовке любого окна щелкните правой кнопкой мыши, выбирите "настройка поведения окна" и в списке слева надите пункт полупрозрачность. Поставьте флажок "использовать прозрачность/тени", после чего станут доступны множество настроек прозрачности (активного,неактивного окна, окна при перетаскивании, плавные переходы прозрачности и т.д.) и теней.



xcompmgr и transset



Многие WM еще не обладают поддержкой новых функций X.org, так что нам придется использовать дополнительные инструменты для наших эффектов.

Вначале нам надо установить xcompmgr



echo "x11-misc/xcompmgr ~x86" >> /etc/portage/package.keywords



emerge xcompmgr

Затем установим transset



echo "x11-misc/transset ~x86" >> /etc/portage/package.keywords



emerge transset



Теперь у нас есть все необходимое, чтобы включить тени, затенение и настоящую прозрачность. Запустите из Xterm xcompmgr xcompmgr -c Эта команда позволит вам увидеть эффекты от запущенного xcompmgr, если они вам не понравятся, то CTRL+C в консоли позволит вам убить процесс, а если они вам нравятся, то надо убить процесс и запустить его в фоновом режиме (сзади консоли): xcompmgr -c & Примечание: символ & позволяет запустить xcompmgr в фоновом режиме, но при этом если убить сам терминал - процесс тоже сдохнет, чтобы этого не произошло можно использовать утилиту nohup: nohup xcompmgr -c & При этом весь вывод будет направлен в nohup.out



Таким образом xcompmgr включит "мягкие" тени. Если будет использован флаг -s то будут "грубые" тени.



Рабочий пример для xcompmgr с тенью и затенением xcompmgr -cCfF -r7 -o.65 -l-10 -t-8 -D7 &



Теперь о прозрачности. Выполните в консоли transset Теперь ваш курсор изменился, вы можете кликнуть на окне которое хотите сделать прозрачным. Если запустить transset с цифровым значением от 0 до 1 то это укажет насколько прозрачным должно быть окно

0 - полностью прозрачно

1 - не прозрачно



Попробуйте выполнить transset 0.2



Для возвращения окна назад просто выполните transset и кликните по прозрачному окну.



Как это выглядит



Изображение взято на http://www.grebowiec.net/archives/xorg4.html





Выключение эффектов



Для выключения всех эффектов выполните killall xcompmgr



Примечание



NVIDIA



При использовании NVIDIA видео карточек рекомендуется добавить в /etc/X11/xorg.conf нижеприведенные строки для того, чтобы можно было использовать расширение "Composite" и увеличить производительность при его использовании. Файл: /etc/X11/xorg.conf



Section "Device"

...

Option "RenderAccel" "true"

Option "AllowGLXWithComposite" "true"

...

EndSection



ВАЖНО: При использовании RenderAccel у вас могут возникнуть проблемы со стабильностью, так как эта опция экспериментальная и использовать ее вам предлагается на свой страх и риск.

При использовании AllowGLXWithComposite у вас могут возникнуть проблемы с opengl приложениями. Могут появляться артефакты, так как glx и composite не рекомендуется использовать одновременно.



ATI



При использовании ATI видео карточек совместно с ATI драйверами, дополните /etc/X11/xorg.conf опцией backingstore, для включения поддержки backing store, механизма с помощью которого пиксельные данные закрытого окна запоминаются Х сервером и снимает необходимость посылки сообщений к Х клиенту когда надо обновить изображение Файл: /etc/X11/xorg.conf



Section "Device"

...

Option "backingstore" "true"

...

EndSection





Заключение



Эти разработки находятся в самой начальной стадии и мы можем использовать их уже в X.org версии 6.8. По мере развития WM и приложений будет возможность воспользоваться новым функционалом X.org в полную меру без установки дополнительных приложений. Некоторые программы, kwin к примеру, уже портируются.



Xorg. Переключение раскладок

Переключение USA/RUS + Scroll Lock Led



В секции InputDevice для клавиатуры надо дописать следующее:

Section "InputDevice"

Identifier "Keyboard1"

Driver "kbd"

Option "AutoRepeat" "500 30"

Option "XkbModel" "pc105"

Option "XkbLayout" "us,ru(winkeys)"

Option "XkbOptions" "grp:alt_shift_toggle, grp_led:scroll"

EndSection



Раскладки будут переключаться по Alt+Shift, с индикацией на Scroll Lock Led



Если, конечно, не забыть, что в Section "ServerLayout" должно быть прописано InputDevice "Keyboard1". По умолчанию там как раз Keyboard0, так что будьте внимательны.



а если вы захотите что-бы CTRL-C CTRL-V работали во всех раскладках так-же четко как в микрософт виндовс - то этого увы вам никто не расскажет :) - надо править запутанные конфиги xkb



Возможно, вариант русской раскладки winkeys у вас не заработает. Тогда измените следующую строку:

Option "XkbLayout" "us,ru"



и добавьте

Option "XkbVariant" ",winkeys"



Обратите внимание на запятую, она указывает на то, что вариант "winkeys" применяется именно к русской раскладке!



Установка Xgl

Введение



Проект Xgl позволяет ускорять посредством подсистемы OpenGL вывод примитивов X сервера, а также обеспечивать ускорение composite и render. На данный момент мы можем получить быструю работу с прозрачностью, тенью и отрисовкой окон.



Более подробное руководство на английском языке рамещено по адресу en:HOWTO XGL



Инсталяция



Xorg



Нам понадобится последняя версия Xorg. Необходимо размаскировать нужные пакеты и установить Xorg-7.0emerge xorg-x11 Примечание: Дополнительно можно почитать статью Настройка Portage





glitz



Так же необходимо скачать из CVS последнюю версию glitz. cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/cairo co glitz Установить ее.autogen.sh && ./configure --prefix=/usr/ && make && make install



glxcompmgr



Для работы с расширением composite скачаем утилиту glxcompmgr cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co app/glxcompmgr Скомпилируем и установимautogen.sh && ./configure --prefix=/usr/ && make && make install



metacity



Так уж сложилось, что пока glxcompmgr может себя показать во всей красе только с оконным менеджером metacity, да, он способен работать и с kwin, но при этом запуск kdesktop вызовет прекращение нормальной работы glxcompmgr. metacity



MesaLib



Если мы хотим использовать composite, необходимо собрать библиотеку libGL.so.1.2 из пакета MesaLib-6.4.1 с патчем mesa-glx-x11-render-texture-3.diff, который лежит в каталоге glxcompmgr.patch -p0 <mesa-glx-x11-render-texture-3.diff && ./configure --prefix=/usr/ && make Нет необходимости переустанавливать весь пакет т.к. нас интересует только файл ./lib/libGL.so.1.2. Заменим старый файл.cp ./lib/libGL.so.1.2 /usr/lib/opengl/xorg-x11/lib/



Xgl



Теперь скачаем. cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg login

CVS password: нажмите Enter

cvs -d:pserver:anoncvs@cvs.freedesktop.org:/cvs/xorg co -r xgl-0-0-1 xserver

Код находится в ./hw/xql

И установим сам Xgl сервер. ./configure --prefix=/usr/ --enable-xglserver --enable-glx --enable-xkb && make && make install



Запуск сервера для видеокарт nvidia



"Голый" сервер



Убедимся, что мы используем libGL.so.1.2 от nvidiaeselect opengl set nvidia Для запуска сервера в отдельном окне откройте свой любимый терминал и выполните командуXgl :1 -ac -accel xv -accel glx:pbuffer -screen 800x600 & Если сервер не запускается, то, возможно, необходимо отключить расширение xkb, добавив опцию -kb Xgl :1 -kb -ac -accel xv -accel glx:pbuffer -screen 800x600 & Также могут возникнуть проблемы с шрифтами, тогда путь к ним надо указать вручную Xgl :1 -kb -ac -accel xv -accel glx:pbuffer -fp /usr/share/fonts/misc/ -screen 800x600 & Для запуска сервера в полноэкранном режиме можно использовать опцию -fullscreenXgl :1 -kb -ac -accel xv -accel glx:pbuffer -fp /usr/share/fonts/misc/ -fullscreen &



Для запуска на ATI картах с установленными драйверами fglrx необходимо вместо ... -accel xv... Использовать ... -accel xv:pbuffer...



Запускаем glxcompmgr



Сначала для примера запустим xterm и metacity из терминала. export DISPLAY=:1xterm &metacity & После этого необходимо переключиться на использование библиотеки libGL.so.1.2 из пакета MesaLibeselect opengl set xorg-x11 После этого можно запускать glxcompmgr.glxcompmgr shadow wobbly & После этого уже должен быть виден интересный эффект на запущеном xterm'е.



KDE, GNOME



Для запуска kde или Gnome необходимо запустить сначало metacity затем kde(Gnome) и в последнюю очередь glxcompmgr.



Возможные проблемы



Возможно у вас не получится запустить сервер т.к. файл /usr/lib/libGL.so.1 будет указывать не на /usr/lib/opengl/nvidia/lib/libGL.so.1.2, а на /usr/lib/libnvidia-tls.so.1. Поменяйте симлинк и сервер запустится.

Для переключения раскладки подойдет программа xruskb.



XGL

Введение



Xgl это X сервер, который использует OpenGL для прорисовки обьектов. Вместе с композитным оконным менеджерами Compiz или новой версией Metacity позволяет получить превосходное качество 3D и 2D эффектов рабочего стола. Xgl базируется на расширении Mesa, GLX_EXT_texture_from_pixmap, который представлен только в версиях Mesa 6.5 и старше.



На the XOrg mailing list предлагается написать спецификацию GLX_EXT_texture_from_pixmap расширения совместно с NVIDIA. Бета версия драйверов уже выпущеных NVIDIA, версия 9625, поддерживают это расширение, это означает что Xgl уже не нуждается в использовании Compiz на NVIDIA картах, кроме этого использование данной конфигурации приветствуется. Для информации об этом методе использования Xgl, пожалуйста ознакомтесь на en:HOWTO nVidia GL Desktop Effects



Кроме того, Compiz тесно связан с GNOME-компонентами, Xgl и Compiz работают прекрасно во всех окружениях рабочих столов (KDE/GNOME/Xfce/*box). Если Вы всё же не используете GNOME, будте готовы к установке необходимых библиотек и утилит.

Предупреждение: Данное программное обеспечение ещё не является стабильным, и хотя оно почти всегда работает, всё же используйте его с осторожностью.



Системные требования



см. the article on video card support under Xgl.



Установка Xgl Примечание: Установка должна быть произвадена на системе с работающей X сессией используя эмулятор терминала типа konsole или gterm, выполнение этого условия необходимо для запуска gconf-editor или gset-compiz для конфигурации Compiz в конце установки.

Требования к програмному обеспечению



Обновите Ваше локальное дерево портажей.



emerge --sync



Вам необходима модульная версия XOrg (версия 7.x). Для установки модульной версии XOrg ознакомтесь с официальной Gentoo документацией или соответствующей статьёй wiki.

en:HOWTO Modular Xorg



Официальное руководство



Модульный XOrg (версия 7.x) был опубликован в стабильнй ветке дерева портажей, поэтому Вы можете пропустить эту главу если Ваш Gentoo полностью обновлен.



Compiz использует рабочую оболочку GNOME GConf для конфигурации, и некоторые из опций конфигурации будут приведены здесь. Наиболее легким и популярным способом конфигурации является программа gconf-editor, одна из приложений GNOME. Конечно, и менее известная KDE программа KConfigEditor также может использоваться для конфигурации. Правда для этой программы пока не существует ebuild файла, но Вы можете загрузить исходный код этой программы с extragear.kde.org. Пожалуй самый нежелательный из способов это редактирование gconf конфигурационных файлов вручную, что является скучным и неблагодарным занятием.



Если Вы хотите использовать gconf-editor, то его необходимо установить.



emerge -nav gconf-editor



Также Вам необходимо установить Subversion с включенной поддержкой webdav. Вы должны отключить флаг nowebdav. Добавте добавте при необходимости следующую строку в /etc/portage/package.use: Примечание: Тут используется двойное отрицание в использовании USE флага.



echo "dev-util/subversion -nowebdav" >> /etc/portage/package.use

затем,

emerge -nav subversion



Загрузка Portage оверлея



Существуют два метода для создания требуемого оверлея; оверлей можно загрузить используя svn утилиту или использовать layman утилиту которая будет управлять оверлеями вместо Вас. Используя layman производить обновление системы проще, так что решать Вам. Вне зависимости, что Вы будете использовать результат будет одним и темже.



Метод по умолчанию: использование Layman утилиты



Если вы ещё не установили Layman, сделайте это сейчас.



emerge -nav layman



Также Вам необходимо добавить следующую строку в Ваш make.conf.



echo "source /usr/portage/local/layman/make.conf" >>/etc/make.conf



Если Вы используете Eix Caching System, удостовертесь что Вы используете самую новую версию; старые версии не поддерживают чтение внешних файлов make.conf.



Измените "nocheck" переменную на значение "yes" в конфигурационном файле утилиты layman. (/etc/layman/layman.cfg)



Затем добавте оверлей с помощью Layman утилиты:



layman -f

layman -a xeffects



если вы используете layman версии 1.0.7 или позже, то оверлеи с неправильными атрибутами будут проигнорированы. Используйте опцию -k для обхода этой ситуации.



layman -k -a xeffects



Альтернативный метод: Создание оверлея вручную



Если Вы хотите обслуживать Вашь оверлей самостоятельно, то сделайте следующее. Иначе (если используется lanman), вы можете перейти к главе Размаскирование необходимых пакетов. Примечание: Лучше всего не смешивать оверлеи и использовать их отдельно друг от друга.



Перейдите в Вашу директорию оверлеев



cd /usr/local/overlays



Загрузите последнюю версию из CoffeeBuzz's Subversion репозитория в директорию 'xgl-coffee'



svn co http://svn.xgl-coffee.org/xgl-coffee/trunk xgl-coffee



Теперь Вы создали оверлей дерева портежей в /usr/local/overlays/xgl-coffee.



Добавьте следующий путь в переменную PORTDIR_OVERLAY в /etc/make.conf.

Файл: /etc/make.conf

PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/overlays/xgl-coffee"





Размаскирование необходимых пакетов



Много пакетов маркированы как нестабильные и должны быть размаскированы чтобы их можно было установить из дерева портажей Добавте следующие строки к файлу /etc/portage/package.keywords или /etc/portage/package.unmask

Файл: /etc/portage/package.keywords

# Зависимости

dev-util/git

media-libs/glitz

media-libs/mesa

x11-apps/mesa-progs

sys-apps/man

x11-libs/cairo

dev-python/pycairo

x11-libs/qt

x11-misc/util-macros

x11-proto/glproto

x11-apps/xvinfo

x11-apps/xlsclients

x11-libs/libwnck

x11-misc/xwinwrap

virtual/xft

gnome-base/gconf

gnome-base/libgnomeui

x11-libs/gtk+

dev-libs/glib

x11-libs/libdrm



#XGL пакет

x11-base/xgl



# старые версии Compiz

x11-wm/compiz-quinnstorm

x11-misc/compiz-quinnstorm-plugins

x11-wm/compiz

x11-wm/cgwd

x11-misc/csm

x11-misc/cgwd-themes

x11-misc/cgwd-themes-extra

x11-misc/gset-compiz

x11-misc/compiz-manager



# новая ветка Beryl для Compiz

x11-wm/beryl-core

x11-plugins/beryl-plugins

x11-misc/beryl-manager

x11-misc/beryl-settings

x11-wm/emerald

x11-misc/emerald-themes





Удостоверьтесь что флаги glitz, pdf и png включены в переменную USE для Cairo. Возможно Вам понадобится добавить следующую строку к файлу package.use:

Файл: /etc/portage/package.use

x11-libs/cairo glitz pdf png



Установка Xgl



Новые бета драйверы с закрытым исходным кодом от nVidia (версия 1.0.9625) уже включают в себя поддержку XGL. Поэтому не нужно более никаких установок. Если вы не хотите использовать новейшие бета драйвера, то следуйте к главе "не-nVidia пользователи". Данный способ работает на nVidia картах при этом установка и использование новых nVidia драйверов намного проще. Если Вы хотите использовать новейшие бета драйвера тогда Вы должны перейти к главе "nVidia Пользователи".



Не-nVidia пользователи



Во-первых Вы должны установить Cairo. Используй опуцию --oneshot чтобы не записывать этот пакет в список world (не захламляй свой world список).



# emerge --oneshot --ask --verbose cairo



Переинсталируй pango и gtk+ с использованием новоустановленного Cairo пакета.



# emerge --oneshot --ask --verbose pango gtk+





Далее у Вас есть выбор между beryl и compiz ветками:

compiz это оригинальное приложение написанное Давидом Равеманом (David Reveman) из Новел (Novell). Это приложение уже включено в дерево портажей.

beryl это снимок Quinnstorm's Ubuntu кодовой базы с некоторыми экспериментальными плагинами. Формально эта ветка известна под названием compiz-quinnstorm. Использует emerald как window decorator. это отдельный пакет не включенный в дерево портежей.



Проверьте что флаги dbus и svg включены в переменную USE для Compiz. Возможно Вам потребуется добавить следующую строку в package.use: Файл: /etc/portage/package.use

x11-wm/compiz dbus svg



Проверьте что пакеты glproto и libdrm установлены. Установите их если это требуется:



# emerge --ask --verbose --oneshot --noreplace glproto libdrm



В конечном итоге Вы должны будете установить Xgl и Mesa, которые автоматичеси скомпилируют и установят Compiz а также все его плагины и Xgl сервер.



# emerge --ask --verbose --oneshot --noreplace mesa



Опция 1: Для использования vanilla compiz:



# emerge --ask --verbose xgl compiz



Опция 2: Для использования beryl мета пакета:



# emerge --ask --verbose xgl beryl-core



Примечание: Установка beryl также устанавливает декоратор окон emerald и его темы. Таким образом emerald не надо устанавливать отдельно.

Примечание: NVIDIA пользователи пожалуйста переустановите nvidia-drivers после установки Xgl

Примечание: Если неудается скомпилировать xgl, проверте заплатку на

http://forums.xgl-coffee.org/viewtopic.php?t=178

Примечание: Если неудается скомпилировать beryl из за dbus, попробуйте обновить пакет dbus

Примечание: Если неудается скомпилировать xgl и компиляция обрывается на fbmmx.c или fbedge.c, попробуйте удалить флаг "-fforce-addr" из переменной CFLAGS. Также ознакомтесь с документацией на форуме



Если всё прошло удачно, то Cairo должен присутствовать в системе как зависимость. Примечание: Для следующей проверки необходим установленый пакет gentoolkit.



Проверите с помощью следующей команды



# equery d -o -p cairo



Предупреждение: Если команда не возвращает никаких пакетов, то значит чтото прошло не правильно!



После произведенных действий Вы должны получить функционирующую установку Xgl. Пожалуйста ознакомтесь с Глава работающий Xgl.



nVidia пользователи



nVidia драйвер версии 9625 BETA и старше содержат XGL и AIGLX-подобные расширения и могут быть использованы совмесно с другими композитными менеджерами окон. см. en:HOWTO nVidia GL Desktop Effects для более детальной информации.



Обновление Xgl



Из-за быстрой разработки Xgl и Compiz, оверлей обновляется как минимум один раз в неделю. Используйте один из приведённых методов для обновления оверлея.



Обновление с помощью Layman утилиты



Обновление оверлея с помощью Layman утилиты очень просто:



layman -s xeffects



Обновление вручную



Для обновления оверлея вручную, перейдите в директорию оверлея и введите ./svnup.sh. этот скрипт также выведет список изменений.

cd /usr/local/overlays/xgl-coffee/

./svnup.sh



Запуск Xgl



Конфигурация Compiz



Для начала надо сконфигурировать Compiz и его плагинов. Если никакие плагины не указаны, тогда окна останутся без декораций! (не будет кнопок minimize/maximize/close, невозможно будет изменять размеры окна, ничего вообще толком не будет.)



Существуют два пути указания плагинов. Вы можете указать плагины в командной строке или использовать оконный редактор конфигурации например с помощью программ gconf-editor или gset-compiz. Но вы не можете использовать оба способа одновременно! Если gconf указан в командной строке, тогда Compiz проигнорирует все другие плагины указанные в командной сторке и возьмёт список плагинов из вашей конфигурации gconf.



Таким образом если Вы впервые запускаете Xgl и Вы хотите конфигурировать в оконном редакторе, наступило время сделать это, до того как Вы выйдете из Вашей X сессии.



Способ "По умолчанию": Использование gconf-editor

# gconf-editor



Перейдите в apps --> compiz --> general --> allscreens --> options и отредактируйте узел active_plugins находящийся справа. Примечание: Если в gconf-editor нет вкладок Сompiz, тогда это можно исправить таким образом:

# export GCONF_CONFIG_SOURCE="xml:merged:/etc/gconf/gconf.xml.defaults"

# gconftool-2 --makefile-install-rule /etc/gconf/schemas/compiz.schemas



Способ "По умлочанию" для compiz-quinnstorm: Использование csm

# csm



Плагины могут быть активированы кликая в checkbox после имени. Индивидуальная конфигурация плагинов осуществляется после щелчка мышью на имени плагина. Примечание: Compiz-quinnstorm поставляется вместе с Compiz Manager (compiz-manager). Это оконное приложение находящееся в системной панели и включает в себя Compiz Settings Manager (csm) и Compiz Theme Manager (gcompizthemer). Запустив на выполнение эти две утилиты (управляйте compiz и темами), перестартуйте оконный менеджер или декоратор из системной панели и установите запасной оконный менеджер который будет использоваться в случае неудачного старта.



# compiz-manager

or (if any dbus problem) :

# dbus-launch compiz-manager



Альтернативный способ: Испльзование gconftool-2

# gconftool-2 -s /apps/compiz/general/allscreens/options/active_plugins "[gconf,decoration,wobbly,fade,minimize,cube,switcher,move,resize,place,rotate,zoom,scale]" -t list --list-type=string



Укажите активные плагины внутри квадратных скобок.



Альтернативный способ: Использование gset-compiz Предупреждение:



gset-compiz больше не пытается использовать все возможности Compiz. Используйте лучше gconf-editor или более новые программы для возможностей которыми не располагает gset-compiz.



# gset-compiz



Плагин можно активировать поставив галочку сразу возле его имени. Конфигурация индивидуальных настроек плагина доступна после нажатия кнопки Plugins находящейся сразу под меню.



Как минимум, потребуются пакеты gconf и decoration. Также, если Вы хотите включить все доступные эффекты, надо также добавить wobbly, fade, switcher, move, resize, place, minimize, cube, rotate, zoom, и scale. Из имени пакета Вы сами можете догадаться, что выполняет каждый из плагинов, так что не торопитесь включать их все. Это как предпочтения "сладостей для глаз", установите плагины move и resize - у Вас появится возможность работать с их функциями.



Using Quinnstorm's compiz & cgwd



Quinnstorm's new compiz doesn't use gconf plugin anymore (so settings). To use it, replace any instance of compiz --replace gconf found in this document with dbus-launch compiz --replace dbus csm. And set it by csm or dbus-launch csm.



Quinnstorm's new window decorator must be called instead of gnome-window-decorator in order to function. If you chose to emerge cgwd, just replace any instance of gnome-window-decorator found in this document with dbus-launch cgwd.



Оконный режим



Запустив Xgl таким способом мы создадим новое окно с включенным Xgl сервером. Это отличный способ протестировать правильность установки прежде чем запускать XGL в полноэкранном режиме.



Чтобы попробовать его работу в оконном режиме при уже запущенном X сервере: Code: Для ati пользователей

Xgl :1 -ac -accel glx:pbuffer -accel xv:pbuffer -fp /usr/share/fonts/misc,/usr/share/fonts/other_fonts

Code: Для nVidia пользователей

Xgl :1 -ac -accel glx:pbuffer -accel xv -fp /usr/share/fonts/misc,/usr/share/fonts/other_fonts



Примечание: Обсуждение использования pbuffer или fbo как аргументов accel, можно почитать здесь http://forums.gentoo.org/viewtopic-t-455153-highlight-.html

Примечание: Xgl не будет считывать значение FontPath из xorg.conf, по-этому, лучше в конце строки после опции -fp прописать пути к шрифтам разделяя их запятой. Используйте этот скрипт для получения путей к шрифтам прописанным в файле xorg.conf:



grep -i fontpath /etc/X11/xorg.conf | egrep -v "[:space:]*#" | sed "s/.\+\"\(.\+\)\"/\1,/g" | xargs echo | sed "s/\ //g" | sed "s/,\$//"



Протестируйте Вашу конфигурацию:



Запустите композитный оконный менеджер (compiz or compiz-quinnstorm), запустите декоратор окон (gnome-window-decorator or cgwd) и запустите приложение (xterm). Code: Для большинства: Если Вы используете compiz совмесно с gnome-window-decorator



Учтите что название gnome-window-decorator изменилось на gtk-window-decorator 22 Сентября 2006 года.

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ \

DISPLAY=:1 compiz gconf

DISPLAY=:1 gnome-window-decorator

DISPLAY=:1 xterm

Code: Альтернатива 1: если Вы используете compiz-quinnstorm совмесно с gnome-window-decorator

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ \

DISPLAY=:1 dbus-launch compiz dbus csm

DISPLAY=:1 gnome-window-decorator

DISPLAY=:1 xterm

Code: Альтернатива 2: Если вы используете compiz-quinnstorm с cgwd

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ \

DISPLAY=:1 dbus-launch compiz dbus csm

DISPLAY=:1 dbus-launch cgwd

DISPLAY=:1 xterm





Если всё прошло успешно, мы можем начать конфигурировать Вашу систему для запуска Xgl с Вашим графическим менеджером аутентификации. Следуйте инструкциям которые помогут Вам настроить менеджер аутентификации. Это последний шаг необходим для удобного использования Xgl.



startx (Для пользователей startx)



Если вы обычно загружаетесь в консоль и Xorg сервер запускается через startx, а .xinitrc загружает ваш менеджер окон на DISPLAY:0, то вам нужно: написать скрипт startxgl для запуска сервера Xgl, а так же файл .xglinitrc для загрузки менеджера окон на DISPLAY:1. Эти действия не изменят вашей текущей конфигурации и вы сможете в любой момент вернутся в нормальный Xorg сервер.



1) Скопируйте startx (cp /usr/bin/startx /usr/local/bin/startxgl) и отредактируйте 2 строки: Файл: /usr/local/bin/startxgl

## userclientrc=$HOME/.xinitrc

userclientrc=$HOME/.xglinitrc



## xinit $clientargs -- $serverargs -deferglyphs 16 &

# ATI

xinit $clientargs -- /usr/bin/Xgl :1 $serverargs -ac -accel xv -accel glx:pbuffer -deferglyphs 16 &

# NVIDIA

xinit $clientargs -- /usr/bin/Xgl :1 $serverargs -ac -accel xv -accel glx:fbo -deferglyphs 16 &





2) создайте файл ~/.xglinitrc (vi ~/.xglinitrc) Файл: ~/.xglinitrc

sleep 2 # give Xgl some extra time to start

DISPLAY=:1 KDEWM=compiz-decorator startkde

Примечание: Пользователи Gnome должны вписать gnome-session вместо startkde и WINDOW_MANAGER вместо KDEWM. Пользователи других DM вписывают соответствующие им команды запуска. Для уточнения проверте ваш ~/.xinitrc.





3) создайте файл compiz-decorator (vi /usr/local/bin/compiz-decorator) Файл: /usr/local/bin/compiz-decorator

## Start compiz or compiz-quinnstorm

## compiz --replace gconf &

## dbus-launch compiz --replace dbus csm &

compiz --replace gconf &



sleep 2



## Start gnome-window-decorator or cgwd

## gnome-window-decorator &

## dbus-launch cgwd &

gnome-window-decorator &

Примечание: Команды для запуска и использования compiz-quinnstorm и cgwd в скрипте закоментированны. Если вы хотите пользоваться ими то незабудте закоментировать текущие



Смените права доступа на /usr/local/bin/compiz-decorator что бы сделать его исполняемым:

# chmod +x /usr/local/bin/compiz-decorator



4) Для запуска вашего оконного менеджера в XOrg используйте startx, для запуска в Xgl используйте startxgl.



Скрипты тестировались на связке ATI и KDE. --Ash 17:48, 11 Сентября 2006 (UTC)



XDM (Базовая графическая система аутентификации)



Измените ссылку на X сервер: Файл: /etc/X11/xdm/Xservers

:0 local /usr/bin/Xgl vt7





KDM (для пользователей KDM)



Замените строку с ServerCmd в kdmrc на одну из следующих:

Файл: /usr/kde/<your version>/share/config/kdm/kdmrc

# NVidia Command

ServerCmd=/usr/bin/Xgl -br -ac -accel glx:pbuffer -accel xv

# ATI Command

ServerCmd=/usr/bin/Xgl -br -ac -accel glx:pbuffer -accel xv:pbuffer



Вы также должны поменять занчение ServerTimeout так как Xgl запускается немного дольше, чем нормальный Х сервер:

Файл: /usr/kde/<your version>/share/config/kdm/kdmrc

ServerTimeout=30

Если kdm не смог загрузится, измените значение ServerTimeout на 600. Учтите, что в этом случае время загрузки Xgl значительно увеличится.

Не используйте скрипт /usr/kde/3.5/share/config/kdm/Xstartup для запуска Compiz. Для его выполнения нужны права пользователя root.



Скопируйте скрипт в другое место, например сюда: Файл: /usr/local/bin/compiz-decorator

## Start compiz or compiz-quinnstorm

## compiz --replace gconf &

## dbus-launch compiz --replace dbus csm &

compiz --replace gconf &



sleep 2



## Start gnome-window-decorator or cgwd

## gnome-window-decorator &

## dbus-launch cgwd --replace &

gnome-window-decorator --replace &



Примечание: Команды для запуска и использования compiz-quinnstorm и cgwd в скрипте закоментированны. Если вы хотите пользоваться ими то незабудте закоментировать текущие.



Сделайте вновь созданный скрипт /usr/local/bin/compiz-decorator исполняемым:

# chmod +x /usr/local/bin/compiz-decorator





Далее измените:

Файл: /etc/env.d/99kde-env

KDEWM=compiz-decorator



И наконец, выполните команду:

# env-update



Теперь после перезагрузки или выполнения комманды /etc/init.d/xdm start вы запустите полнофункциональный Xgl со всеми эффектами без пользовательского вмешательства и аутентификацией с помощью KDM.



GDM (для пользователей GNOME)



Вы должны сделать 3 вещи, чтобы заставить Xgl работать с GDM и использовать Compiz для автоматической загрузке при авторизации пользователя.

Сконфигурируйте GDM для Xgl с отложенным запуском, чтобы при запуске нельзя было сказать, что она не работает

Сконфигурируйте GDM для использования с Xgl-сервером

Установите сессию GNOME для автоматического запуска из Compiz Примечание: Конфигурирование gdm для отложенного запуска Xgl доступно с gdm-2.14.1 и поздних версий. Если Вы используете раннюю версию, начинте с шага 2, но, возможно, Вам не удастся заставить gdm работать с Xgl. Также использование gdmsetup для конфигурирования gdm на испольльзоваине Xgl-сервера (Раздел 2a) может быть недоступно для версий gdm ранее 2.14.0. Если недоступны необходимые Вам функции, самостоятельно отредактируйте конфигурационный файл GDM (Раздел 2b).





Конфигурирование Gdm на отложенный запуск для запуска Xgl



Gdm сконфигурирована по умолчанию на завершение (kill) X-сервера, если загрузка заняла более 10 секунд. К сожадению, новые версии Xgl могут загружаться дольше. Пользователи Xgl в Gentoo, могут сконфигурировать Gdm (пример по версии 2.14.1) на ожидание более 10 секунд.

# emerge --ask --verbose >=gdm-2.14.1

Добавьте/измените следующие команды секции [daemon] файла /etc/X11/gdm/custom.conf. Строка: Файл: /etc/X11/gdm/custom.conf

GdmXserverTimeout=30



Если /etc/X11/gdm/custom.conf не существует, попробуйте /etc/X11/gdm/gdm.conf-custom или /etc/X11/gdm/gdm.conf.



Конфигурирование Gdm для использования сервера Xgl



Использование gdmsetup

Для начала сделайте резервную копию файла gdm.conf

cp /etc/X11/gdm/gdm.conf /etc/X11/gdm/gdm.conf.bak

Запустите gdmsetup

Выберите раздел Security

Щёлкните кнопку Configure X Server, расположенную снизу-справа раздела



Для начала мы удалим значения для стандартного X-сервера

Нажмите по стандартному серверу, ктороы находится в списке Servers to Start

Нажмите Remove Button



Сейчас мы создадим значения для сервера Xgl

Нажмите кнопку Add/Modify

Задайте использование нового сервера VT 1. Используйте Standard для Server опцию — она отображает, какой профиль использовать для сервера, в идеале мы должны создать новый "Xgl"-профиль, а в настоящее время при помощи gdmsetup это сделать невозможно, так что отредактируем настройки для профиля Standard. Не воодите здесь каких-либо опций. Нажмите Ok по завершении.

В Server Settings измените Server Name на "Xgl"

Введите команду Xgl в поле Command, например, для пользователей ATI:

/usr/bin/Xgl :1 -ac -accel glx:pbuffer -accel xv:pbuffer

NVIDIA users should use:

/usr/bin/Xgl -br -ac -accel glx:pbuffer -accel xv

Измените в выпадающем списке Launch значение на Greeter

Установите Logins are handled by this computer

Установите Flexible (on demand)

Save и Close

Перезапустите gdm



Ручная настройка

Для начала сделайте резервную копию файла gdm.conf

cp /etc/X11/gdm/gdm.conf /etc/X11/gdm/gdm.conf.bak

Now open /etc/X11/gdm/gdm.conf in a text editor and search for the [servers] section. This should be near the end of the file.

Comment out 0=Standard and add a new line that reads 0=inactive and one that reads 1=Xgl.

Add the server information for the Xgl server, remember to substitute the correct Xgl server command! The one below is for ATI cards.



The modified /etc/X11/gdm/gdm.conf:

[servers]

#0=Standard

1=Xgl



# Definition of the xgl X server.

[server-Xgl]

name=Xgl

command=/usr/bin/Xgl :1 -ac -accel xv:pbuffer -accel glx:pbuffer

flexible=true

chooser=false

handled=true

priority=0

Restart gdm Примечание: For i810 users (not necessarly i915; this would kill my xorg sessions, I had to use the ATI command), the command for the above should be:

[server-xgl]

name=Xgl server

command=/usr/bin/Xgl -accel xv -accel glx:pbuffer -accel xv:pbuffer -ac -audit 0 -br -dpms -dpi 72

flexible=true





Via xsession



You can add another session for Xgl on display :1 (leaving the standard server on :0). It is a 2 step setup and imho the best option, first create a file to start Xgl and second create a new xsession file.



Create a new file startxgl.sh in /usr/bin which starts Xgl.

vim /usr/bin/startxgl.sh



And add one of the four options below.

NVIDIA (using GNOME)

#!/bin/bash

Xgl -fullscreen :1 -audit 0 -ac -br -accel glx:pbuffer -accel xv:fbo &

sleep 2 && DISPLAY=:1 gnome-session

NVIDIA (using KDE)

#!/bin/bash

Xgl -fullscreen :1 -audit 0 -ac -br -accel glx:pbuffer -accel xv:fbo &

sleep 2 && DISPLAY=:1 startkde

ATI and Intel (using GNOME)

#!/bin/bash

Xgl -fullscreen :1 -audit 0 -ac -br -accel glx:pbuffer -accel xv:pbuffer &

sleep 2 && DISPLAY=:1 gnome-session

ATI and Intel (using KDE)

#!/bin/bash

Xgl -fullscreen :1 -audit 0 -ac -br -accel glx:pbuffer -accel xv:pbuffer &

sleep 2 && DISPLAY=:1 startkde



Create a new xsession file: Файл: /usr/share/xsessions/xgl.desktop

[Desktop Entry]

Encoding=UTF-8

Name=Xgl

Comment=Start an Xgl Session

Exec=/usr/bin/startxgl.sh

Icon=

Type=Application





Now you will be able to select a new session via gdm's option menu. Options -> Select Session



The benefit is that it will not replace your normal XOrg server. So when you "break" your Xgl you can return to the normal XOrg server.



Adding Compiz to your GNOME session (replacing Metacity)



Here is a little startscript, which I've placed in /usr/bin/. Useful if you do not always run Xgl. Change or remove the setxkbmap line according to your keyboard layout. Файл: /usr/bin/compizrc

#!/bin/bash

#

# Start compiz within gnome-session

#

if [ `ps -A -o comm | grep -c '^Xgl$'` == "1" ]; then

DISPLAY=:1 LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace gconf &

DISPLAY=:1 gnome-window-decorator &

# DISPLAY=:1 setxkbmap -model pc105 -layout it -variant basic # Change according to your needs, and uncomment if needed



# Or like that, if you need to switch between layouts.

# setxkbmap -model pc105 -layout "us,ru(winkeys)" -variant winkeys -option "grp:alt_shift_toggle,grp_led:scroll"

else echo "${0}: Error: Compiz and g-w-d not launched. Xgl not running?"

fi

Файл: /usr/bin/compizrc.modified

#!/bin/bash

#

# Start compiz within gnome-session

#

if [ `ps -A -o comm | grep -c '^Xgl$'` == "1" ]; then

# For old versions

# DISPLAY=:0 LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace gconf &

# For Compiz-Quinnstorm with csm

DISPLAY=:0 LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace dbus csm &

DISPLAY=:0 dbus-launch cgwd --replace &

# DISPLAY=:0 setxkbmap -model br-abnt2 -layout br -variant br

else echo "${0}: Error: Compiz and cgwd not launched. Xgl not running?"

fi

Code: Make the script executable



chmod 755 /usr/bin/compizrc







After logging into GNOME, start System->Settings->Sessions. Here you go to the 3rd tab Startup Programs and press the Add button. Enter the path to your Compiz startscript (e.g., /usr/bin/compizrc).

After logging out and back in Compiz will start, but you'll see no decorations and effects. Thats because the Compiz gconf tree for the current user has just been created - without any plugins!

So start your configuration editor and go to apps/compiz/general/allscreens/options and edit the active_plugins key. This should contain the following items in this order: gconf decoration wobbly fade minimize cube rotate zoom scale move resize place menu switcher

If the key is not there, make it with a type of List

After restarting your Xgl Server should be accessible with GDM & gnome-session.



Xsession (Modifying startx)Примечание: This is for NVIDIA users.

Предупреждение: This currently will not work for ATI users because of the display issues, requiring to be run on DISPLAY=:1.

Примечание: I use simmilar configuration (see startx section) on ATI. Consider /usr/bin/Xgl :1 instead of /usr/bin/Xgl and starting Gnome at :1 as well, if DISPLAY:0 is problematic. --Ash 17:57, 11 September 2006 (UTC)





Copy /usr/bin/startx to /usr/bin/startxgl and change the following line towards the end of the file: Файл: /usr/bin/startxgl

xinit $clientargs -- $serverargs -deferglyphs 16 &



to

xinit $clientargs -- /usr/bin/Xgl $serverargs -ac -accel xv -accel glx:pbuffer -deferglyphs 16 &





This does not start Compiz so create a small start script and add it to the gnome-session manager (Once GNOME is up. The first time, you will have to open a terminal and call the script manually.) Файл: /usr/bin/compizrc

#!/bin/bash

#

# Start compiz within gnome-session

#

if [ `ps -A | grep Xgl | wc -l` == "1" ]; then

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace gconf &

gnome-window-decorator &

# setxkbmap -model pc105 -layout it -variant basic # Change according to your needs, and uncomment if needed



# Or like that, if you need to switch between layouts.

# setxkbmap -model pc105 -layout "us,ru(winkeys)" -variant winkeys -option "grp:alt_shift_toggle,grp_led:scroll"



fi

Примечание: This should start the desktop environment configured via XSESSION in /etc/rc.conf





Xfce4



With xfce4-session



xfce4-session is installed by default as part of the xfce4 meta-package. If you installed xfce4 this way, the following will work.



First, it is necessary to create a script that will start Compiz and gnome-window-decorator with the correct libraries and switches. Файл: /usr/bin/compizrc

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib compiz --replace gconf &

gnome-window-decorator

Code: Make the script executable

chmod 755 /usr/bin/compizrc





Now, edit the xfce4-session settings to point to this rather than xfwm4. Файл: /etc/xdg/xfce4-session/xfce4-session.rc

[Failsafe Session]

Count=4

Client0_Command=compizrc

Client0_PerScreen=False

Client1_Command=xfce4-panel

Client1_PerScreen=True

Client2_Command=xftaskbar4

Client2_PerScreen=True

Client3_Command=xfdesktop

Client3_PerScreen=False

Примечание: Instead of editing system-wide file you may also add above section to ~/.config/xfce4-session/xfce4-session.rc file. Note also that you may need to delete content of the ~/.cache/sessions directory, if you still have xfwm4 rather than Compiz running.







Finally, create a script to start Xgl with Xfce4. Файл: /usr/bin/startxgl for NVIDIA

#!/bin/bash

Xgl -ac -accel xv:fbo -accel glx:pbuffer &

xfce4-session

Файл: /usr/bin/startxgl for ATi

#!/bin/bash

Xgl -ac -accel xv:pbuffer -accel glx:pbuffer &

xfce4-session

Code: Make the script executable

chmod 755 /usr/bin/startxgl





You will notice that xfce4-panel is now transparent, just like if you were using xfwm4's compositor. The pager will be distorted, but otherwise everything works beautifuly. Windows even minimize to the correct spot on the taskbar.



Without xfce4-session



If you compiled a minimal Xfce (without xfce4-session, xffm4, etc.), then you can use this altered startxgl script from the gnome script above:

#!/bin/bash

echo ">Starting XGL at Display: $1"

echo "========= XGL ============"

Xgl :$1 -ac -accel xv -accel glx:pbuffer &

sleep 3

echo "======= COMPIZ ==========="

DISPLAY=:$1 LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace switcher decoration wobbly fade minimize cube rotate zoom scale move resize place &

sleep 3

echo "======= XFCE ============"

DISPLAY=:$1 xfce-mcs-manager

DISPLAY=:$1 gnome-window-decorator &

DISPLAY=:$1 xftaskbar4 &

DISPLAY=:$1 xfdesktop &

DISPLAY=:$1 exec xfce4-panel



Again, xfce4-panel will be transparent as if you had the X.org composite extension turned on (but you don't) or if you use xfce4-svn, and the pager will be distorted. Everything else should be fine.



With startxfce4



To do it the old fashioned, or 'normal' way via startx/startxfce4 I did the following. First, startxfce4 shouldn't be called I don't think. just use an .xinitrc in your homedir and startx. Файл: ~/.xinitrc

#!/bin/sh

/usr/bin/startxfce4





Now as root, we create compizrc, like above. Note however that for me, it worked best/only without the DISPLAY variable. Файл: /usr/bin/compizrc

#!/bin/bash

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib/ compiz --replace gconf > ~/compiz.log 2>&1 &

sleep 1;

gnome-window-decorator > ~/gnome-window.log 2>&1 &





Obviously the output redirections are optional (but handy for debugging). The sleep 1; might also be removed to speed things up. If things go TO fast however, you might get in trouble though. Don't forget to chmod 755 /usr/bin/compizrc



Lastly we need to use this new compizrc instead of the default xfce4 window manager.



Again, as root edit /etc/xdg/xfce4-session/xfce4-session.rc and replace xfwm4 with compizrc Файл: /etc/xdg/xfce4-session/xfce4-session.rc (old)

Client0_Command=xfwm4

Файл: /etc/xdg/xfce4-session/xfce4-session.rc (new)

Client0_Command=compizrc





Now only one thing is left, start Xgl. As above you can copy startx in /usr/bin/startx to /usr/bin/startxgl and make the following change: Файл: /usr/bin/startxgl (old)



xinit $clientargs -- $serverargs -deferglyphs 16 &

Файл: /usr/bin/startxgl (new)



xinit $clientargs -- /usr/bin/Xgl -ac -accel xv -accel glx:pbuffer $serverargs -deferglyphs 16 &





Примечание: Todo: Make Client0_Command depend on wether startx or startxgl is beeing used as 3D apps don't appear to work as they should and switching back to the 'old way' is required.





Edit: it seams that when using the startxfce4 script, the /etc/xdg/xfce4-session/xfce4-session.rc file (and the .xinitrc) get ignored thus starting a non Xgl desktop. Making 'switchin' not needed. startxfce4 for oldschool, startxgl for new style



Entrance

Emerge latest entrance:

echo "=x11-misc/entrance-0.9.0.007 ~x86" >> /etc/portage/package.keywords

emerge -av entrance

Use the ecore_config utility to change the xserver string (choose according to your video card):

# ATI

ecore_config -k "/entranced/xserver" -s "/usr/bin/Xgl -ac -accel xv:pbuffer -accel glx:pbuffer -nolisten tcp" -c /etc/entrance_config.cfg

# NVIDIA

ecore_config -k "/entranced/xserver" -s "/usr/bin/Xgl -ac -accel xv:fbo -accel glx:pbuffer -nolisten tcp" -c /etc/entrance_config.cfg

Restart entrance.



Qingy



It is quite easy to change Qingy to start Xgl instead of a regular X server. All you need to do to make it start Xgl is change 2 lines in /etc/qingy/settings Файл: /etc/qingy/settings

...

# x_server = "/usr/X11R6/bin/XFree86"

x_server = "/usr/bin/Xgl"

# x_args = "-nolisten tcp"

x_args = "-ac -accel xv -accel glx:pbuffer -nolisten tcp"

...





Now Qingy should start Xgl instead of regular X. To make KDE and GNOME load Compiz you need to export a variable. KDEWM for KDE and WINDOW_MANAGER for GNOME. It is easiest to do this in /etc/X11/Sessions.



You need to have followed the instructions for adding plugins to gconf-editor. Then make a /usr/bin/compizrc as shown and chmod +x it. Файл: /usr/bin/compizrc

#!/bin/bash

LD_LIBRARY_PATH=/usr/lib/opengl/xorg-x11/lib compiz --replace gconf &

sleep 2

gnome-window-decorator &

setxkbmap -model itouch -layout gb & ## Change/Remove as appropriate





Then edit the appropriate file (or both) in /etc/X11/Sessions

For KDE: Файл: /etc/X11/Sessions/kde-3.5

#!/bin/sh

export KDEWM="/usr/bin/compizrc"

exec /usr/kde/3.5/bin/startkde





Or for GNOME add this to the top of the file : Файл: /etc/X11/Sessions/Gnome

#!/bin/sh



export WINDOW_MANAGER="/usr/bin/compizrc"



...





For Xfce4 edit /etc/xdg/xfce4-session/xfce4-session.rc as shown in a previous section.

Hopefully Qingy should now start Xgl and Compiz instead of X and some other WM.



Generic startxgl script



There is a generic startup script in the overlay. For usage instructions start it without arguments.

Currently it support Xfce, Xfce-svn, GNOME and KDE.

cd /usr/local/overlays/xgl-coffee

./startxgl

Автоматическое переключение раскладок

Для начала сделаем ebuild в portage overlay



Создаём каталог:

mkdir -p /usr/local/portage/x11-misc/xneur cd /usr/local/portage/x11-misc/xneur



Создаём ebuild:

nano -w xneur-0.1.0_1.ebuild Файл: /usr/local/portage/x11-isc/xneur/xneur-0.1.0_1.ebuild

# Copyright 1999-2005 Gentoo Foundation

# Distributed under the terms of the GNU General Public License v2



DESCRIPTION="It's program like Punto Switcher, but has other final aim."

SRC_URI="http://www.xneur.ru/xneur/${P}.tar.gz"

HOMEPAGE="http://www.xneur.ru/"

DEPEND="virtual/x11"



LICENSE="GPL-2"

SLOT="0"

KEYWORDS="~x86 ~amd64 ~sparc ~alpha ~ppc ~hppa ~ppc64"



src_install () {

make DESTDIR=${D} install || die

#dodoc AUTHORS README COPYING INSTALL NEWS ChangeLog TODO .xneurrc

}



pkg_postinst() {

# einfo "Run:"

# einfo "gzcat /usr/doc/${P}/.xneurrc.gz > ~/.xneurrc"

}





Далее: ebuild xneur-0.1.0_1.ebuild digest Поскольку у нас бэта: echo "x11-misc/xneur ~x86" >> /etc/portage/package.keywords emerge xneur ;)



А за подробностями на http://www.xneur.ru/



Cedega 5.1

Введение



Cedega - коммерческая версия ПО для реализации WinAPI на *nix-платформах WINE, разработанная Transgaming, ранее известная как Winex. Поддерживается большинство популярных игр. В последней версии добавилась официальная поддержка Sid Meier's Civilization® IV, FIFA® 06 и Need for Speed™: Most Wanted.



Cedega 5.1 состоит из двух компонентов:

Point-to-play - графический интерфейс для простой установки игр, распространяется в виде .rpm/.deb/.tgz

Engine / engine update - модифицированный WINE, распространяется в виде файлов .cpkg - tar архивы, содержащие tgz архив и файл manifest с номером версии .



Установка



Установка самого эмулятора, без неудобного в использовании Point-to-play выглядит так:

Code: Установка Cedega

su

tar -zxf cedega-engine-5.1-local-update.i386.cpkg

tar -C /usr -zxf cedega_5.1-1.i386.p2p.tgz bin winex

mv /usr/share/share/doc/* /usr/share/doc

mv /usr/share/share/man/man1/* /usr/share/man1

mv /usr/bin/winex3 /usr/bin/cedega

mkdir /usr/lib/transgaming/cedega; mv /usr/winex /usr/lib/transgaming_cedega

exit





Первоначальная настройка

Code: Первоначальная настройка

tar -C $HOME -zxf cedega_5.1-1.i386.p2p.tgz .transgaming

nano ~/.transgaming/config



Проверка



cedega -version



Секреты командной строки



Общие команды



поиск команды Linux, ее описания и номера секции man страниц



apropos word

закодировать файл file с помощью GnuPG



gpg -c file

раскодировать файл file



gpg file.gpg

быстрый поиск по словарю слов, начинающихся с word



look word

подсветить слово word в файле /somefile



grep --color word /somefile

запустить command с низким приоритетом



nice command

назначить низший приоритет текущему шеллу (и всем потомкам). Может быть полезно, если вашу систему сильно замедляет установка нового пакета (emerge). Кстати, для автоматического понижения приоритета emerge используется переменная PORTAGE_NICENESS в файле /etc/make.conf



renice 19 -p $$

посмотреть код завершения предыдущей команды



echo $?

скачать список новых страничек с нашего сайта в 01:00 в текущую директорию



echo "wget http://ru.gentoo-wiki.com/Special:Newpages" | at 01:00

в 17:45 послать пустое письмо с заголовком 'got the r00t?'на bugs@microsoft.com



echo "mail -s 'got the r00t?' bugs@microsoft.com < /dev/null" | at 17:45

напечатать 1234 в соответствии с настройками локали (в России обычно 1.234)



printf "%'d\n" 1234

запускать просмотр прерываний каждую секунду



watch -n1 "cat /proc/interrupts"

посмотреть, сколько времени занимает выполнение команды



time command

удобный алиас для вывода дампа



alias hd='od -Ax -tx1z -v'

полный путь к команде command



which command

вывести в 9 колонок по ширине терминала



ls | pr -T9 -W$COLUMNS

установить время изменения для файла file (в формате YYMMDDhhmm)



touch -c -t 0304050607 file

показать иерархию запущенных процессов



pstree -p

показать процессы, использующие файл /dir/file (чаще всего использую нечто вроде 'lsof /mnt/cdrom'). Не забудьте сделать 'emerge -n lsof'



lsof /dir/file



Ввод-вывод

объединить stderr и stdout (вернее сказать перенаправить stderr в stdout)



gcc file.c 2>&1 | less

Перенаправить stderr в файл errors.log а stdout в файл compile.log для дальнейшего анализа



gcc file.c 2>errors.log 1>compile.log

Если нужно запретить вывод потока (например убрать в скрипте сообщения об ошибках) то достаточно перенаправить поток на устройство /dev/null, тогда сообщения уйдут в никуда:



rm -r /var/tmp/portage 2>&1 >/dev/null или rm -r /var/tmp/portage &> /dev/null

Порой нужно обьединить выходной поток сразу нескольких комманд, а поток одной изних отключить, тогда группу нужно объединить в скобки:



( cat /etc/gentoo-release ; cat /etc/passwd >/dev/null; cat /etc/group ) |less



Навигация по директориям.

вернуться в предыдущую директорию (не путать с 'cd ..')



cd -

вернуться в домашнюю директорию



cd

перейти в директорию dir, запустить command и автоматически вернуться назад



(cd dir; command)

добавить текущую директорию в стек, чтобы потом можно было сделать popd и вернуться к ней



pushd .



Дисковое пространство

показать список файлов с информацией о каждом файле (-l), отсортировав список по убыванию размера (-S) и перевернуть список (-r). Получим сортировку по возрастанию.



ls -lSr

показать, сколько места на диске занимает файл file и директория dir



du -sh file dir

показать свободное место на примонтированных ресурсах



df -h

то же самое но в инодах



df -i

показать геометрию размещения разделов жесткого диска (нужны права root)



fdisk -l



Работа с CD

создать iso-образ диска и заархивировать его



dd bs=1M if=/dev/cdrom | gzip > cdrom.iso.gz

создать iso-образ из директории dir



mkisofs -r dir | gzip > cdrom.iso.gz

смонтировать cdrom.iso в /mnt/dir (для просмотра и правки)



mount -o loop cdrom.iso /mnt/dir

записать архивированный образ на диск



gzip -dc cdrom.iso.gz | cdrecord dev=0,0,0 -

рипнуть дорожки с Audio-CD в текущую директорию (в формате .wav)



cdparanoia -B

создать Audio-CD из всех .wav файлов в текущей директории



cdrecord dev=0,0,0 -audio *.wav

конвертировать файл track.cdda.wav формат .ogg



oggenc --tracknum="track" track.cdda.wav -o "track.ogg"



Работа с архивами

создать архив директории dir



tar c dir/ | bzip2 > dir.tar.bz2



tar -cjf dir.tar.bz2 dir

извлечь архив в директорию /to/dir (без '-C /to/dir' в текущую директорию)



bzip2 -dc dir.tar.bz2 | tar x -С /to/dir



tar -xjf dir.tar.bz2 -C /to/dir

создать архив всех .png файлов в директории dir/



find dir/ -name "*.png" | xargs tar rf dir.tar; bzip2 dir.tar

скопировать (с сохранением прав доступа!) директорию /dir/to/copy/ в /where/to/



( tar cf - /dir/to/copy ) | ( cd /where/to/ && tar xf - )

скопировать (с сохранением прав доступа!) содержимое директории /dir/to/copy в /where/to/



( cd /dir/to/copy && tar cf - . ) | ( cd /where/to/ && tar xf - )

скопировать (с сохранением прав доступа!) директорию /dir/to/copy/ в директорию /where/to/ на удаленной машине



( tar cf - /dir/to/copy ) | gzip | ssh user@remote 'cd /where/to/ && gzip -dc | tar xf -'

создать и сохранить бэкап жесткого диска на удаленной машине



dd bs=1M if=/dev/hda | gzip | ssh user@remote 'dd of=hda.gz'



Работа с файлами

удобный листинг по команде l



alias l='ls -l --color=auto'

вывести листинг с упорядочиванием по дате



ls -lrt

показать в папке dir файлы модифицированные раньше, чем 2 дня назад



find dir -mtime +2

удаляем в папке dir файлы старше 1 часа



find dir -type f -mmin +60 -exec rm -f {} \;

удаляем в папке dir файлы старше 10 дней



find dir -type f -mtime +10 -exec rm -f {} \;

найти в текущей директории (и ниже) .c и .h файлы содержащие строку "search string"



find -name "*.[ch]" | xargs grep -E "search string"

искать строку "search string" только в обычных файлах



find -type f | xargs grep -E "search string"

искать строку "search string" только в текущей директории (не спускаться ниже)



find -type f -maxdepth 1 | xargs grep -E "search string"

в текущей директории найти все файлы с расширением sql содержащие USER1 и заменить в них USER1 на USER2



tmp="/tmp/$RANDOM$$.tmp"; f="USER1"; r="USER2";



find . -name '*.sql' -exec grep -l "$f" {} \; |



xargs --replace="{}" bash -c "( sed 's/$f/$r/g' < {} > $tmp && cat $tmp > {} && rm -f $tmp )"

найти файл в базе данных программы slocate. Замечание: данное регулярное выражение эквивалентно маске *file*.txt



locate -r 'file[^/]*\.txt'



Работа с файловой системой

отформатировать флоппи-диск с FAT



mkdosfs -c -f 16 -n "название тома" /dev/fd0 или mkfs -t fat16 /dev/fd0

"правильная" кодировка и права файлов для сменных носителей (floppy, CD, flash)



необходимо прописать в /etc/fstab!!!

для CDROM

/dev/cdrom /mnt/cdrom iso9660 ro,nosuid,noauto,exec,user,nodev 0 0



для "дискетки"

/dev/fd0 /mnt/floppy vfat iocharset=koi8-r,sync,nosuid,codepage=866,user,--,noauto,nodev,unhide 0 0



для раздела Windows

/dev/hda1 /mnt/win vfat user,exec,umask=0,codepage=866,iocharset=koi8-r 0 0

для "флешки"



/dev/sda1 /mnt/flash vfat user,exec,umask=0,sync,codepage=866,iocharset=koi8-r 0 0

вышенаписанное справедливо для локали koi8-r, ваша может отличаться (см. locale), в этом случае все "koi8-r" необходимо исправить на свои, и помните, что это, лишь, пример



Работа с календарем

вывести на экран календарь на текущий, предыдущий и следующий месяцы



cal -3

на какой день недели выпал в этом году день рождения Linux?



date --date='25 Aug' +%A

конвертировать в дату (в соответствии с локалью) - 130204800 секунд, прошедшие с начала эпохи Unix



date --date '1970-01-01 UTC 130204800 seconds'

Сколько сейчас времени на западном побережьи США (используйте tzselect чтобы узнать параметр для TZ)



TZ="America/Los_Angeles" date



Работа с сетью

(Предварительно сделать emerge на net-tools, sys-apps/iproute2, net-dns/bind-tools)

показать сетевые интерфейсы



ip link show

показать статус сетевых интерфейсов



ethtool interface или /sbin/ifconfig

переименовать eth0 в wan



ip link set dev eth0 name wan

добавить ip 1.2.3.4 с маской 255.255.255.0 на eth0



ip addr add 1.2.3.4/24 brd + dev eth0

поднять интерфейс



ip link set dev interface up

опустить интерфейс



ip link set dev interface down

сделать шлюзом по умолчанию 1.2.3.254



ip route add default via 1.2.3.254

показать ip адрес для name



host name

показать прослушиваемые порты в системе (и кто их слушает)



netstat -lp --inet

показать активные соединения



netstat -p --inet



Математика

простое вычисление



echo "(321-123)/123" | bc -l

простое целочисленное вычисление с использование bash



echo "$(( (51+123)/2 ))"

использование python для научных вычислений



echo "print (10E3-123)/123" | python

приведение систем счисления (в данном случае, десятичной к шестнадцатеричной)



echo "obase=16;ibase=10;123" | bc

Более сложное вычисление - максимальная скорость передачи (в пакетах в секунду) в Fast Ethernet сети (100Mb)



echo "framing=20; minsize=64; (100*10^6)/((framing+minsize)*8)" | bc

А здесь мы строим график зависимости скорости передачи от размера пакета всё в той же 100-мегабитной сети.



echo "framing=20; plot [64:1518] (100*10**6)/((framing+x)*8)" | gnuplot -persist





Тонкость работы ccache с emerge



Вы пробовали оценить эффективность работы ccache при пересборке системы? Проделайте опыт: очистите кэш (ccache -C) и запустите пересборку (emerge --emptytree world). После пересборки десятка-другого пакетов прервите процесс и посмотрите статистику (ccache -s) Запустите пересборку по новой и опять прервитесь на старом месте. Что показывает статистика? Много ли совпадений?



А теперь добавьте в /etc/make.conf строчки

CC=gcc

CXX=g++



очистите кэш и статистику и повторите эксперимент заново. Не правда ли, что после этого кэш только и заработал?



Суть: по состоянию на апрель 2005 ccache опознает как компилятор только стандартные имена типа gcc, g++ и не опознает такие имена как i686-pc-linux-gnu-gcc. Однако именно такие имена и используют пакеты в качестве компилятора после работы скриптов кофигурации configure



Keymap



Варианты раскладок клавиатуры для прописывания в /etc/conf.d/keymaps (в старых версиях baselayout переменная находится в файле /etc/rc.conf) Файл: /etc/conf.d/keymaps

...

KEYMAP="-u ru4"

...

Доступные варианты:

ru -- кодировка KOI-8, переключение [Right-Ctrl], одиночный символ [Right-Alt]

ru1 -- кодировка KOI-8, переключение [Right-Alt]

ru2 -- альтернативная кодировка (IBM866), переключение [Right-Alt]

ru3 -- кодировка KOI-8, 102 кнопочная клавиатура, переключение [CapsLock], [Shift+CapsLock] -- фиксация регистра

ru4 -- кодировка KOI-8, 105 кнопочная клавиатура, переключение [CapsLock], [Shift+CapsLock] -- фиксация регистра

ru-cp1251 -- кодировка CP1251, переключение [Right-Ctrl], одиночный символ [Right-Alt]

ru-ms -- раскладка как в Microsoft Cyrillic keyboard layout, переключение [Right-Ctrl]

ru_win -- кодировка CP1251, переключение [Right-Ctrl], одиночный символ [Right-Alt]

ru-yawerty -- кодировка KOI-8, раскладка "ЯВЕРТЫ" (это бывает удобно при работе на клавиатуре без русских символов), переключение [Right-Alt]



Вариант, которого нет в стандартной поставке, но весьма удобен ru-utf. Переключение [Right-Ctrl], одиночный символ [Right-Alt]. Брать тут: http://mlclm.narod.ru/ru-utf.map.gz, сохранить в каталог /usr/share/kbd/keymaps/i386/qwerty или в случае отсутствия этого, в каталог /usr/share/keymaps/i386/qwerty.



Кроме того есть вариант ru-mab. Он даёт переключение по [Ctrl+Shift]. Взять можно тут: http://moose.ylsoftware.com/gentoo.ru/ru-mab.map.gz Code: /etc/conf.d/keymaps

...

KEYMAP="ru-utf"