Ссылка на оригинал: http://ru.gentoo-wiki.com
С версии: 1.0
Обновлено: 1.5
Дата: 28.01.2008
В связи с выходом hal-0.5.10 и включении поддержки hal в xorg возникло много вопросов: где раскладки, где мышка, где тачпад, и прочее.
Сейчас xorg использует hal для устройств ввода и xorg.conf игнорирует Данное руководство предназначенно для безболезненного перехода на новую систему
В данном руководстве используются пакеты из ~x86(~amd64) ветки. Посему заботу о keywords оставляю на вашей совести.
# emerge --sync
(# eix-sync -v)
#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">
заменить на
<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-ы(перезагрузить компьтер, перезапустить xdm). Проверяем. Радуемся. Если не получаеться, то внимательно читаем лог Xorg, Скорее всего там можно найти ответ.
Пока проблема одна. Hal по умолчанию использует драйвер evdev,которые не всегда корректно работает в полноэкранных приложениях(игры)
#echo "SDL_VIDEO_X11_DGAMOUSE=0" >>/etc/env.d/02locale #env-update #source /etc/profile
Должно решить эту проблему.
Пока в разработке.
Целью статьи является установка 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 выполните: /etc/init.d/ivman start
Чтобы Ivman стартовал при каждом запуске выполните: rc-update add ivman default
Все действия Ivman после запуска выполняются с привилегиями пользователя «ivman» и группы «plugdev».
По умолчанию, сменные устройства будут монтироваться для доступа на чтение/запись только входящим в группу «plugdev» (группа пользователей, которым разрешено использовать pmount). Это более безопасно, чем запуск Ivman от обычного пользователя.
Размонтирование дисков обычным пользователем может быть затруднено. Вам может потребоваться использование sudo pumount или sudo umount. Размонтирование используя 'media:/' ioslave в KDE может не работать.
Для легкого размонтирования
дисков обычными пользователями
отредактируйте файл
/usr/share/hal/fdi/policy/10osvendor/10-storage-policy.fdi,
изменив user на users в строке
<merge
key="storage.policy.default.mount_option.user"
type="bool">true</merge>
. Если у
вас нет такого файла, поищите похожий
в
/usr/share/hal
.
(
Внимание
:
это работает
для ivman 0.5.x
, но
не для последних версий ivman
.
)
Для начала, у вас должен быть запущен HAL. Выполните как root: /etc/init.d/hald start
Для запуска HAL каждый раз при загрузке выполните: rc-update add hald default
Для запуска Ivman единично выполните команду ivman под вашим пользовательским аккаунтом. Чтобы Ivman запускался автоматически, когда вы входите в систему, вы должны сделать следующее:
KDE: создать символьную ссылки для ivman в ~/.kde/Autostart: ln -s $(which ivman) ~/.kde/Autostart/ivman
X: поместите ivman-launch --exit-with-session xinit & в ~/.xinitrc (требуется Ivman 0.6.9 или более новый).
E17: Создание Ivman.eap (секция 'приложения GTK+'), и добавьте это в ~/.e/e/applications/all/ . После отредактируйте ~/.e/e/applications/startup/.order, добавив Ivman.eap.
fluxbox: поместите ivman-launch --exit-with-session xinit & в ~/.fluxbox/startup (требуется Ivman 0.6.9 или более новый)
Другие: пожалуйста, добавьте ваши инструкции здесь!
Ivman запустится под вашим пользовательским аккаунтом.
Примечание: Вы можете не находиться в группе plugdev, потому что сейчас устройства монтируются так, что только вы имеете к ним доступ. |
По умолчанию сменные устройства будут монтироваться на запись/чтение для вас и не допускать больше никого.
Размонтирование работает как обычно. Работает стандартный pumount. Размонтирование используя 'media:/' ioslave в KDE работает.
Когда возможно (а, как правило, это возможно), запускайте Ivman одновременно от root и от обычного пользователя. В этом случае автомонтирование будет произведено от пользовательского запуска Ivman, а если пользовательский Ivman отсутствует, автомонтирование будет автоматически передано запуску Ivman от root. Не запускайте более одного пользовательского Ivman, даже под различающимися пользовательскими аккаунтами – это приведёт к войне за ресурсы.
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
ATA
ATAPI
Enhanced IDE (EIDE)
Fast ATA или Fast ATA-2
IDE устройства могут передавать данные по шине в двух режимах - PIO и DMA. Учтите, что это именно передача данных по шине, с пластины данные читаются медленнее, а вот из аппаратного кеша на полной скорости.
PIO - Программный ввод/вывод, метод передачи данных между двумя устройствами, использующий процессор как часть маршрута данных (процессор выполняет команду чтения порта, считывает байт или слово данных в свой регистр, после чего переписывает его в память, затем повторяет эту процедуру до тех пор, пока вся необходимая информация не будет считана из устройства в память).
Бывает PIO Mode 0 1 2 3 4. Чем больше номер режима, тем быстрее. IDE ZIP100 приводы от Iomega например умеют только PIO mode 0. Старые CD-ROM обычно умеют PIO mode 4, если не могут DMA.
PIO Mode 0 = 3.3 Mb/s
PIO Mode 1 = 5.2 Mb/s
PIO Mode 2 = 8.3 Mb/s
PIO Mode 4 = 11.1 Mb/s
PIO Mode 5 = 16.7 Mb/s
DMA - Direct Memory Access - прямой доступ к памяти - собирательное название протоколов, позволяющих периферийному устройству передавать информацию непосредственно в системную память без участия центрального процессора, жесткие диски используют эту возможность в сочетании с возможностью перехватывать управление шиной и самостоятельно управлять передачей информации (bus mastering), что уменьшает нагрузку на процессор и повышает скорость передачи данных.
DMA встречается двух типов: UDMA и MDMA.
UDMA - ultra DMA - наиболее предпочитаемый тип, основной на сегодня. Бывает UDMA 0 1 2 3 4 5 6. Реально встречаются:
UDMA 2 = 33 mb/s
UDMA 4 = 66 mb/s
UDMA 5 = 100 mb/s
UDMA 6 = 133 mb/s
Последний встречается на не Intel матерях и не все винты его умеют. Кстати SATA винчестеры используют UDMA = 150 Mb/s.
Для UDMA 66 - 100 - 133 необходим 80-жильный шлейф, кроме того старые матери умеют его не на всех каналах, смотрите в инструкцию. Форсирование этих режимов с 40-жильным шлейфом может убить Ваши данные.
MDMA - multiword dma, более древний режим, предпочтителен для старых винчестеров и CD-ROM.
MDMA0 = 4.2 mb/s
MDMA1 = 13.3 mb/s
MDMA2 = 16.7 mb/s
На большинстве современных систем ядро автоматически определяет и настраивает 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 и свопа ...
Для начала, убедитесь что у вас установлены программы 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 : эта опция необходима, если вы хотите дописать мультисессионный диск (см. раздел [Как дописывать диски])
Выполните 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
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:
В данной статье будет подробно рассмотрен вопрос формирования и записи видео дисков формата 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
Использование 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 используется для получения видео с 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.
Это самый сложный этап! Имея готовый 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
Слишком долгое время выполнения '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 — это система управления пакетами Gentoo Linux. Ее возможности довольно велики — сборка пакетов из исходников, включая конфигурирование пакета на основе пользовательских USE-флагов; начальная настройка приложений; установка предкомпилированных пакетов; удаление програм; автоматическое обновление, и т. д. Однако, как показывает опыт, несмотря на отличную документацию, большинство пользователей не знают всех возможностей этой замечательной системы, поэтому очень часто Gentoo Linux подвергается незаслуженной критике. Данный документ — это попытка восполнить этот пробел.
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"
В профилях содержится следующая информация:
use-флаги использующиеся по умолчанию;
системные пакеты, то есть такие пакеты, которые устанавливаются при emerge system;
маскированные пакеты;
Настройки сборки пакетов по умолчанию. (CFLAGS, CHOST и другие);
Какие пакеты надо устанавливать при наличии альтернативных. (например, xorg или xfree)
Конфигурацию профилей напрямую менять не следует, так как ваши настройки будут удалены после следующей синхронизации с 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'ы в этом каталоге, пример был показан в предыдущем разделе.
Это руководство расскажет о том как установить ebuild который не включен в официальное дерево портежей.
Первым делом мы должны указать PORTAGE_OVERLAY директорию, для этого необходимо отредактировать файл /etc/make.conf
Файл: /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage"
Таким образом мы позволяем устанавливать дополнительные ebuild'ы при этом не нарушая процесс синхронизации основного дерева портежей.
Проверьте наличие директории /usr/local/portage, и если ее нет создайте ее install -d /usr/local/portage
Когда помещаете новый ebuild в /usr/local/portage, вы должны использовать такую же схему как в /usr/portage (category/program/program.ebuild)
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, скорее всего он будет 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'ы можно с помощью поиска
Как известно, программы в 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 о том что мы хотим использовать getdelta вместо wget. Для этого добавим в /etc/make.conf параметр FETCHCOMMAND: Файл: File /etc/make.conf
FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}"
У 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
В 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
Запустить 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
Достаточно часто возникает необходимость подмонтировать раздел с установленным 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 - это кодовая страница используемая на монтируемой ФС. Так как мы из России,то нужно писать codepage=866. Эта опция нужна для перекодировки имен файлов.
iocharset - указывает какую кодировку использовать для ввода/вывода.Нужно указать свою системную локаль. Локаль можно узнать командой locale. (Здесь под вводом/выводом понимается ввод с и вывод на терминал. Иммено поэтому нужно указывать кодировку локали, т.е. кодировку которую используют программы запущенные в терминале.)
quiet - при копировании на файловую систему FAT программа попытается записать права доступа, владельца и т.д., но на FAT их сохранить нельзя и будет выведено сообщение об ошибке ( хотя файл скопируется ). Чтобы ошибки не появлялись мы просим смонтировать в "молчаливом" режиме
umask - в некоторых случаях у простого пользователя может не хватить прав на чтение или запись файлов из-за неправильно установленных прав на файлы и директории. Поскольку у файловой системы FAT нет прав доступа, они выставляются операционной системой ( в данном случае Linux ) на лету в соответствии с указанным значением umask. Про umask смотрите в umask(2)
Параметры 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
Установка необходимых программ
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
Попытка номер раз
В принципе можно перегружаться, но нас ждет одно неприятное сообщение. Вот примерно такое:
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
Кстати тарболл может потребоваться пользователям нестандартных устройств, а так же некоторых сторонних модулей ядра
Стремление выжать из своего компьютера максимум производительности есть в каждом, ну почти в каждом ;-). Особенно его много в русских линуксоидах 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):
generic: если Вы хотите, чтобы Ваш скомпилированный код запускался на всех процессорах, архитектуры x86;
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's ANOther editor
Nano - достаточно простой и удобный текстовый редактор, клон редактора pico
emerge nano
Конфигурация
Файл: /etc/nanorc
Запуск редактора
nano -w somefile
Параметр -w здесь означает запрет переноса строк.
В данной статье речь пойдет о том, как настроить udev для автоматического монтирования и отмонтирования usb-носителей. Ведь согласитесь, неудобно каждый раз монтировать флэшки из консоли. А когда вам нужно быстро что-то скинуть с одной флэшки на другую? Здесь я привожу одно из возможных решений.
У меня установлена следующая версия udev:
sys-fs/udev-069
Я умышленно не ставлю более новые версии, т.к. с ними возникают проблемы при загрузке firmware на моем компьютере. Возможно в более новых версиях что-то работает по-другому, но суть одна и та же.
Создаем правила для 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 - свободная библиотека, предоставляющая системные вызовы и другие основные операторы для основных систем GNU/Linux. Если C является наиболее распространённым языком, используемым для программирования в Linux, такая же судьба постигла и glibc - она является продуманной частью ядра системы. Glibc может быть оптимизирована на вашей системе для ускорения операций различными способами. Оптимизация, естественно, зависит от вашей системы и её использования. Это также зависит от установки флагов USE, доступных при выполнении emerge. До применения рекомендаций рекомендуется узнать о назначении и использовании флагов USE. Есть неплохая инструкция здесь.
Эффект 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 если вам необходимо использование модуля случайных чисел, установленного в вашем ядре.
Введение
В 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)
Установите пакеты: 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-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 сейчас работает на большинстве системах без проблем, если у вас возникли проблемы прочтите раздел Common Problems это может помочь.
Начнем установку apache2: добавьте "apache2" к вашим USE флагу в файле /etc/make.conf и выполните:
emerge 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. Некоторые уже включены в Апачь а некоторые нужно добавлять отдельно. В портежах содержатся множество модулей. Процесс установки выглядит примерно так:
emerge module ;
отредактируйте /etc/conf.d/apache2 для активации добавьте -D MOD ;
опционально /etc/apache2/modules.d/xy_module ;
добавьте директивы конфигурации в 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.
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.
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. Нет ничего хуже, чем в течении многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая карта не работает или модем сконфигурирован неправильно.
Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием Linux и Gentoo Linux в частности. То есть необходимы навыки работы с такими базовыми вещами как ifconfig, rc-update, /etc/conf.d/net, и так далее. Если для Вас это пока пустые звуки, то, пожалуйста предварительно изучите Настольную книгу Gentoo и Linux Help's Networking Basics 101
Все что вам нужно - это включить поддержку iptables.
Networking ---> Networking Options----> Network Packet Filtering (replace Ipchains)---> Netfilter Configuration
Включим все опции как модули (хотя с точки зрения безопасности модули следует вообще отключить, монолитное ядро надежнее, хотя и медленнее).
Далее вы должны установить пакет iptables: emerge iptables
Предположим, что у нас есть 2 сетевых интерфейса: eth0 - локальная сеть и ppp0 - интернет соединение.
Проверим работоспособность сети командой ping:
Code: ping |
ping www.google.com ping 192.168.1.78 ping 192.168.2.77 |
Запустим iptables: /etc/init.d/iptables start
Эта команда загрузит основные модули и создаст цепочки в ядре Linux. Теперь добавим iptables в автозагрузку: rc-update add iptables default
Скрипт /etc/init.d/iptables понимает несколько команд (/etc/init.d/iptables <команда>), некоторые из них:
start - запуск iptables. Восстанавливает все правила (правила хранятся в /var/lib/iptables/rules-save);
stop - сброс всех цепочек;
save - сохранение всех правил.
Практически все правила можно привести к виду: iptables -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ
Цепочки
Все изменения будем проводить над таблицей filter, именно она отвечает за фильтрацию пакетов. В таблице filter существует 3 цепочки: INPUT, OUTPUT и FORWARD. В каждой цепочки свой "тип" пакетов:
INPUT - пакеты пришедшие к Вам. То есть входящий трафик.
FORWARD - пакеты которые предназначены для другого узла, то есть транзитный трафик.
OUTPUT - пакеты, которые уходят от нас, или исходящий трафик.
Работают с цепочками так: iptables <опция> <цепочка>
Для работы с цепочками предусмотрены следующие опции:
-A - добавление нового правила в цепочку. Правило будет добавлено в конец цепочки.
-I - добавление правила не в конец,а туда куда вы укажите. Например команда:
iptables -I INPUT 2 bla-bla-bla - сделает наше правило вторым.
-D - удаление правила. Например для удаления пятого правила введите:
iptables -D INPUT 5
-F - сброс всех правил цепочки. Нужно, например,при удалении ненужной цепочки.
-N - создание пользовательской цепочки. Если не хотите создавать кашу в каждой цепочке, то создайте несколько дополнительных цепочек. Синтаксис такой: iptables -N ЦЕПОЧКА. Только русские буквы, конечно, использовать нельзя.
-X - удаление пользовательской цепочки.
ПРИМЕЧАНИЕ: Удалить цепочки INPUT, OUTPUT и FORWARD нельзя.
-P - установка политики для цепочки. Например:
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. Рассмотрим основные действия:
ACCEPT - разрешить пакет.
DROP - уничтожить пакет.
REJECT - будет отправлено ICMP сообщение, что порт недоступен.
LOG - информация об этом пакете будет добавлена в системный журнал (syslog).
В качестве действия можно указать и имя пользовательской цепочки. Например перекинем все пакеты с локальной сети в цепочку, где будет производиться дополнительная проверка: 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):
--uid-owner UID - UID программы пославшей пакет.
--gid-owner GID - GID прораммы пославшей пакет.
Следующие опции доступны только в версиях ядра ниже 2.6.14:
--pid-owner PID - PID программы пославшей пакет.
--sid-owner SID - SID (идентификатор сессии) производится проверка SID пакета, значение SID наследуются дочерними процессами от "родителя".
--cmd-owner NAME - имя программы пославшей пакет.
-m multiport
Позволяет указывать не по одному порту, а сразу несколько:
--source-ports порт1,порт2 - список портов, с которых пришел пакет;
--sports порт1,порт2 - укороченый аналог --source-ports;
--destination-ports порт1,порт2 - список портов назначения;
--dports порт1,порт2 - укороченый аналог --destination-ports;
--ports порт1,порт2 - проверяет как исходящий так и входящий порт пакета.
-m state
Предназначен для указания состояния пакета с помощью опции --state. Доступны следующие типы пакетов:
NEW - пакет устанавливающий новое соединение.
ESTABLISHED - пакет от уже установленного соединения.
RELATED - новый пакет уже установленном соединении.
-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
Документация по iptables в сети не рассчитана на новичков. В этой статье будет сжато и быстро описаны команды, затем, возможно, будут правки и добавления для расширенного объяснения. Так что это будет минимальная установка которую мы в дальнейшем расширим и упрочим с помощью правил.
Так же примите во внимание, что будет использовано pppoe соединение и 2.6.x ядро. Для настройки сетевой карты надо будет заменить ppp0 на eth0 (или подходящий по смыслу ваш сетевой интерфейс глядящий в интернет)
Прежде чем двигаться дальше - убедитесь, что ...
1.Всё ваше аппаратное обеспечение работоспособно. То есть вы все подключили, модули грузятся, устройства видны в системе. Полезно вначале проверить, что соединение с интернетом возможно и без всяких там iptables. Нет ничего хуже, чем в течение многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая плата не работает или модем сконфигурирован неправильно.
2.Вы читали маны по теме. Предполагается, что, пока вы изучаете это руководство, man iptables постоянно открыт в соседнем терминале для точного понимания и уточнения, что же та или иная команда означает на самом деле.
3.Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием Linux и Gentoo Linux в частности. То есть необходимы навыки работы с такими базовыми вещами как ifconfig, rc-update, /etc/conf.d/net, и так далее. Если для вас это пока пустые звуки, то, пожалуйста предварительно изучите The Gentoo Handbook и Linux Help's Networking Basics 101
Все что вам нужно - это включить поддержку 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
В моем случае имеется 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
Теперь интересная часть... 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: Проверка скрипта |
|
Смысл в запуске-остановке-запуске в том, что у нас нет скрипта запуска iptables... поэтому нужно “инициализировать” статус перед остановкой. Остановка, по существу, обнуляет настройки и возвращает все к исходному. Перезапуск покажет нам работает ли наша сеть после перезагрузки. Если все в порядке, то добавляем iptables в default runlevel:
rc-update add iptables default
Не забудем также установить в /etc/sysctl.conf:
net.ipv4.ip_forward = 1
Далее мы сделаем наш, уже работающий файрвол безопасным, т.е. защищающим нашу систему от проникновений извне. На самом деле нам придется настроить файрвол таким образом, чтобы он не только защищал нас, но и защищал внешнюю сеть от нас. :) Защита такого рода является обязательной, она нужна для того, чтобы, в том случае, если наша система все-таки была взломана, взломщик не смог воспользоваться нашими ресурсами для дальнейшей атаки любого рода. Этот аспект является важнейшим в сетях класса 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" |
Теперь мы должны установить 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 |
Теперь мы определим пару цепочек (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 |
Замечательно. Двигаемся дальше и проверяем скрипт на ошибки.
Предполагая что у нас все сработало мы заткнем еще несколько портов, доступ по которым может представлять для нас серьезную опасность:
# 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'ы для 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
А сейчас возвратимся к концу нашего скрипта, поскольку мы собираемся открыть сервисы для хостов, находящихся за файерволом. Я включил следующие сервисы: 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.
А сейчас, полноценный скрипт во всей своей красе (Заодно я поместил форвардинг 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 - для проверки
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
Это перевод статьи en:HOWTO vsftpd. Кое-что изменено и добавлено от себя для более понятного, как мне кажется, изложения
Взято из en:HOWTO Plan, setup and run a high school Gentoo Club и модифицировано.
Это руководство описывает процесс установки VSFTP и настройки его для анонимного доступа с правами только для чтения. FTP (File Transfer Protocol) - старый, но надежный протокол, используемый для быстрой передачи файлов в сети.
Зайдите в систему под пользователем 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 - это открытый протокол, использующий 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.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 клиентами. Все остальное Варез
Задача:
Организация файлового сервера
Авторизация пользователей через домен контроллер
Дано:
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 и видим что все работает.
Вот и все надеюсь полезной инфы достаточно для быстрой и эффективной настройки файл сервера.
Огромное спасибо всем кто писал статьи про самбу почти все их прочитал и почерпнул много полезного , в том числе не только для решения своих задач.
Установим нужные пакеты:
# 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
Для примера используется домен 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
пока работаем без шифрования трафика, так как сервер 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
Миграция 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
--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).
Нужно откорректировать 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
Для 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 (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 perl модуль (можно при желании использовать и netcat): из-за этого нужно установить perl (что пожалуй уже сделано). Дальше Net-Telnet perl модуль берем и устанавливаем отсюда: http://cpan.perl.org/modules/by-module/Net/ название файлу Net-Telnet-*.tar.gz
Нужно установить и настроить 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/
Введение временное
Ну вот и начался этот проект, призванный восполнить достаточно широкий пробел в документации по настройке шрифтов в Иксах. Надеюсь многочисленные русские пользователи проявят некую сознательность и отпишут сюда пару строчек.
Кто принимает участие
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
Введение в 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
emerge qt qtconfig
Для Gtk
emerge gtk-theme-switch switch2
Столкнулся с проблемой (и не я один) размера шрифтов.
Процесс сталкивания выглядел так:
~ $ 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 или то, которое принято везде.
Это руководство поможет в установке X.org на Linux/Gentoo машине, хотя общие настройки должны работать и на любом другом дистрибутиве.
Шаг за шагом
Установите последнюю версию 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
Откройте /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
Включение теней и настоящей прозрачности
Начиная с версии 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 к примеру, уже портируются.
Переключение 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 позволяет ускорять посредством подсистемы 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
"Голый" сервер
Убедимся, что мы используем 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 это 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
Существуют два метода для создания требуемого оверлея; оверлей можно загрузить используя 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
Новые бета драйверы с закрытым исходным кодом от 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 и Compiz, оверлей обновляется как минимум один раз в неделю. Используйте один из приведённых методов для обновления оверлея.
Обновление с помощью Layman утилиты
Обновление оверлея с помощью Layman утилиты очень просто:
layman -s xeffects
Обновление вручную
Для обновления оверлея вручную, перейдите в директорию оверлея и введите ./svnup.sh. этот скрипт также выведет список изменений.
cd /usr/local/overlays/xgl-coffee/
./svnup.sh
Конфигурация 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 - коммерческая версия ПО для реализации 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
создать 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 при пересборке системы? Проделайте опыт: очистите кэш (ccache -C) и запустите пересборку (emerge --emptytree world). После пересборки десятка-другого пакетов прервите процесс и посмотрите статистику (ccache -s) Запустите пересборку по новой и опять прервитесь на старом месте. Что показывает статистика? Много ли совпадений?
А теперь добавьте в /etc/make.conf строчки
CC=gcc
CXX=g++
очистите кэш и статистику и повторите эксперимент заново. Не правда ли, что после этого кэш только и заработал?
Суть: по состоянию на апрель 2005 ccache опознает как компилятор только стандартные имена типа gcc, g++ и не опознает такие имена как i686-pc-linux-gnu-gcc. Однако именно такие имена и используют пакеты в качестве компилятора после работы скриптов кофигурации configure
Варианты раскладок клавиатуры для прописывания в /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"