Bog BOS: Linux с точки зрения системного администратора

Выбор дистрибутива

Самая трудная проблема для начинающего - это выбор дистрибутива. Столько их развелось в последнее время, что глаза разбегаются. Даже производитель материнских плат Abit выпустил дистрибутив Linux под свои платы (Gentus; похоже уже умер). Хорошо что, когда я ставил себе Linux в первый раз, этой проблемы не было :) Либо ставишь Slackware, либо собираешь дистрибутив сам. Пару лет я им пользовался, пока не заметил, что слишком много пакетов приходится устанавливать дополнительно (в комплект Slackware входили очень старые версии или не входили вообще). Так как все дополнительные пакеты были в формате RPM, то вполне естественно, что я перешел на RedHat. Судя по опросам на linux-ve и linux.org.ru, я не одинок (учтите, что BlackCat и Mandrake тоже базируются(овались) на RedHat, так что в сумме они занимают порядка 60%). Наличие Alan Cox в штате RedHat тоже плюс ;) Можно еще обратить внимание на Debian GNU, но у меня нет на это времени (самая полная коллекция, но были (есть?) серьезные проблемы с русским языком). Бывают и "самодельные" дистрибутивы.

Из руссифицированных вариантов можно отметить (сам я не пробовал):

Списки дистрибутивов:

Ядро

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

Сайты, следящие за изменениями в ядре:

Что нового в 2.4:

Подбор оборудования

Когда-нибудь наступят светлые дни, когда изготовители оборудования будут сначала писать драйверы под Linux, а потом уж под 20 версий MS Windows. Но сейчас перед покупкой "железа" необходимо предварительно проверить, есть ли под него драйверы для Linux. Крайне желательно, чтобы эти драйверы входили в состав дистрибутива (поставить драйвер самому можно - если он не требуется при установке дистрибутива - но Вы узнаете много нового и интересного). Для RedHat проверить наличие драйвера можно на сайте компании.

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

Ссылки на списки оборудования, совместимого с Linux.


Hardware

SMP

Шины

IDE (EIDE, ATA-2)

Конфигурация IDE-дисков: hdparm. Для нормальных устройств рекомендуется:
hdparm -c 1 -d 1 -m 16 # включить 32-битный режим, использование DMA, обмен по 16 секторов

SCSI

Конфигурирование SCSI-устройств: scsiinfo (scsiinfo, scsiformat, scsi-config).

Именование дисков: /dev/sdyN

Если драйвер конкретного SCSI-контроллера встроен в ядро (не модуль), то параметры можно передавать через /etc/lilo.conf. Например, чтобы отключить работу с очередями для устройств с идентификаторами 1 и 2, подключенных к контроллеру ncr53c8xx, надо вставить строку:
append = "ncr53c8xx=tags:8/t1t2q1"

То же самое достигается после загрузки командой (если, конечно, удастся загрузиться ;):
echo "settags 2 1" > /proc/scsi/ncr53c8xx/0

Если драйвер для SCSI-контроллера скомпилирован как модуль, то аналогичный эффект достигается включением в /etc/conf.modules строки:
alias scsi_hostadapter ncr53c8xx
options ncr53c8xx ncr53c8xx=tags:8/t1t2q1
и не забыть сделать mkinitrd, если он необходим при загрузке.

Диски

Именование дисков: /dev/xxyN, где

CD-R (CD-RW)

FAQ и копия

список, поддерживаемых устройств

Я пробовал на HP CD-Writer Plus 8100 , IDE/ATAPI (24/4/2, в действительности скорость чтения не выше 12x) и Mitsumi CR-4804TE, IDE/ATAPI (24/4/4).

Особенности конфигурации ядра (IDE CD-RW), шаг влево, шаг вправо - и работать не будет:

Создание образа файловой системы (не более 650MB!, 680 000 000) Прожигание GUI

Мышки

Обязательно иметь мышь с тремя кнопками, иначе замучаешься тексты редактировать. Настройка: mouseconfig. Для обычной старой последовательной мышки с 3 кнопками подходит "Mouse System" или "Generic Serial Mouse (Microsoft Serial)" без эмуляции 3ей кнопки. У меня одна и та же мышка Genius EasyMouse (FCC ID: FSUGMZE3, а как их еще различать?) на одном компе работает только в режиме MouseSystem, а на другом только как "Generic 3 button serial mouse".


Где взять программы?

RPM

Командный интерфейс: rpm

Графический интерфейс: glint (где же он в RedHat 6.0?), ему не нужен был gnome и он умел выдавать список Неустановленных пакетов.

Графический интерфейс: gnorpm. Позволяет манипулировать установленными пакетами (поиск, проверка, удаление, upgrade) и качать новые, пользуясь базой данных на сервере RedHat или http://rpmfind.net/ (40 тысяч пакетов / 55 GB).


Установка RedHat

Итак, берем ISO-образы дистрибутива с ближайшего российского зеркала. Достаточно двух дисков: документацию, исходники и powertools качать не обязательно. Предварительно неплохо скачать с ftp.redhat.com MD5 суммы для файлов и сравнить их с MD5 суммами скопированных файлов (так, на всякий случай ;). Прожигаем полученные iso-образы на CD. Кстати, покупка комплекта в ближайшем ларьке обойдется гораздо дешевле (но MD5 все равно надо сравнить!).

Затем надо скопировать накопившиеся изменения к дистрибутиву. К моменту выпуска следующей версии изменений набегает на целый CD! При исправлении ошибок основной дистрибутив не изменяется, а просто добавляются файлы в директорию update, т.е. при установке приходится сначала устанавливать плохо работающий дистрибутив, а затем вручную вносить изменения (а это иногда сотни мегабайт!). Иногда RedHat делает называемый "respin", т.е. обновленный дистрибутив, но там изменяется только программа установки, а обновленные пакеты все равно надо качать самому.

Расположение ftp-архивов меняется со временем (фактически каждый раз приходится искать куда же они его переместили и как расположили файлы на этот раз)

Примеры установок для различных версий и ситуаций:

LILO работает через BIOS, а большинство BIOS позволяют доступ только к первым двум IDE-дискам (считая ATAPI CD-ROM) в пределах первых 1023 цилиндров. Так что директория (или раздел) /boot должна удовлетворять данным ограничениям.

Зависимости пакетов от библиотек и средств программирования.

gnumeric -> guile -> umb-scheme

kernelcfg, netcfg -> tkinter -> tix, python

tix -> tk -> tcl

Tclx и itcl никем не используются.


Руссификация

Документация

Консоль

Документация Предварительное замечание. ReHat заменила в 6.0 реализацию драйвера консоли kbd на console-tools, так что старые рекомендации по руссификации консоли более неприменимы. Рекомендации данные здесь неприменимы к старым системам. Если при установке RH 6.2 выбрать Russian/ru-yawerty, то все будет настроено само собой (в частности, устанавливается LANG=ru_RU.KOI8-R - очень прикольно смотрятся устаревшие переводы man-ов на русский).

Драйвер клавиатуры

Клавиатура генерирует сканкоды (scancode), которые преобразуются в коды клавиш (keycode) с помощью таблицы преобразования, затаваемой setkeycodes. Коды клавиш преобразуются в символы с помощью таблицы keymap, которая устанавливается программой loadkeys. В RHL есть надстройка в виде kbdconfig, которая позволяет выбрать keymap из списка, имеющихся в наличии (/usr/lib/kbd/keymaps/i386/qwerty). Я использую ru-yawerty.kmap.gz (koi8-r, раскладка ЯВЕРТЫ, твердый знак на подчеркивании, переключение по правому ALT). Имя ru-yawerty заносится в /etc/sysconfig/keyboard, который используется при загрузке из /etc/rc.d/init.d/keytable. Можно вызывать вручную: loadkeys ru-yawerty. Для рабиты обычных 8-битных (не UNICODE) программ этого достаточно.

Драйвер экрана

Разработчики нынешней версии ядра перешли на использование UNICODE (UCS2) в драйвере консоли, поддержка национальных алфавитов отстала (во всяком случае всякие FAQs, HOWTO и советы, оставшиеся от прошлых времен не помогают; шрифты и таблицы перекодировок просто глючат). Механизм RHL 6.0 действует так: при загрузке вызывается /etc/rc.d/init.d/keytable (там же встроена поддержка клавиатуры), которая вызывает /sbin/setsysfont. setsysfont в свою очередь выполняет (если есть) /etc/sysconfig/i18n, ожидая что та определит переменные SYSFONT (имя файла со шрифтом, берется из /usr/lib/kbd/consolefonts) и UNIMAP (имя файла с таблицей соответствия, берется из /usr/lib/kbd/consoletrans). После чего выполняет
consolechars -f $SYSFONT --sfm $UNIMAP
в качестве SYSFONT я беру koi8-8x16, в качестве UNIMAP - koi8-r. Так что и клавиатура и экран работают в koi8-r и не надо ничего перекодировать (в новой версии использование koi8-r не ломает таблички MidnightCommander, в RH 6.0 вместо русской буквы 'В' выводится тире с точками, в RH 6.2 - поправлено). Есть и другие шрифты (koi8-8x8, koi8-8x14, alt-8x8, alt-8x14, alt-8x16, Cyr_a8x8, Cyr_a8x14, Cyr_8x16), но таблица UNIMAP есть только для koi8-r. Иногда setsysfont (consolechars) не срабатывает с первого раза, приходится повторять. В 2.2.12 вообще перестал работать (клавиатура переключается, но вместо русских букв на экран выдается псевдографика, а вместо псевдографики - русские буквы).  В 2.2.14 работает без проблем.

X11

Растровые шрифты. В принципе какой-то комплект входит в поставку, но в RH 6.0 я взял более свежий с kiarchive. Встать в /usr/X11R6/lib/X11/fonts и распаковать. Появятся поддиректории cyrillic/{75dpi|100dpi|misc}. Шрифты из поставки можно удалить. В RH 6.2 я взял шрифты из дистрибутива.

Type1 шрифты. Взять с kiarchive(pfb-шрифты). А лучше взять шрифты вместе с pfm-метрикой в gpi (тогда fonts.dir и fonts.scale придется сделать самому). Можно еще взять afm-метрику в gpi. Создать в /usr/X11R6/lib/X11/fonts/cyrillic поддиректорию Type1 и положить шрифты туда. Из fonts.dir-scale.add сделать fonts.dir и fonts.scale (не забыть добавить 16 первой строчкой). Шрифты в формате pfa изготовляются из pfb-шрифтов программой pfbtops.

xfs. В RHL 6.0 все шрифты берутся от  xfs (X font server). Запускается в /etc/rc.d/init.d/xfs (по SIGHUP перезагружает конфигурационный файл). Конфигурационный файл - /etc/X11/fs/config. Команда catalogue определяет список директорий, из которых font server будет брать шрифты. Вписать нужный cyrillic/...dpi в начало списка, затем cyrillic/misc, cyrillic/другойdpi, cyrillic/Type1. Перезапустить xfs (/etc/rc.d/init.d/xfs stop; /etc/rc.d/init.d/xfs start). Только не надо делать это при работающем X сервере, он этого не любит.

locale. В XFree86 3.3. (X11R6) уже должен быть locale ru_RU.KOI8-R. Если нет, то можно взять на kiarchive (X11R5, X11R6). Чтобы его включить надо установить переменную LANG равной ru_RU.KOI8-R (например, в ~/.bashrc). Я попробовал... Gnome явно пытается говорить по русски, В заголовках окон у него это получается, а вот в остальных местах он пытается использовать ISO5589-5, которого у меня нет, пришлось отключить. В RH 6.2 (XFree86 3.3.6) русский язык уже почти везде нормально смотрится (на этот раз кроме заголовков окошек :).

Ввод. Правильный метод. Использование Cyrillic_* keysyms в XKB. Возникают проблемы со старыми программами. В XFree86 3.3.3 ошибка, приводящая к использованию ISO8859-5 таблиц вместо KOI8-R. Есть заплатка, позволяющая это дело поправить (если, конечно, есть желание самому собирать XFree86). Для того, чтобы включить русский ввод надо добавить
XkbKeymap "xfree86(ru)"
в секцию Keyboard файла XF86Config и установить переменную окружения LANG=ru_RU.KOI8-R. К сожалению, RHL 6.0 как раз включает ошибочную версию XFree86 3.3.3. К тому имеются проблемы с шрифтами у Gnome/enlightment

Ввод. Правильный метод в RH 6.2. Правый Alt работает как ModeShift (русские буквы вводятся, пока на нее жмешь). В XF86Config в секции Keyboard записываем (слова в кавычках являются именами файлов в соответствующих поддиректориях /usr/X11R6/lib/X11/xkb, слова в скобках - именами секций в соответствующих файлах):

Улучшения для правильного метода в RH 6.2. Ввод. Обманный Xmodmap. Подстановка "улучшенного" Xmodmap в /usr/X11R6/lib/X11/xinit/.Xmodmap, который подменяет стандартную раскладку ISO8859-1 на KOI8-R. Может быть придется где-то вручную вызывать xmodmap /usr/X11R6/lib/X11/xinit/.Xmodmap (это должен делать xinitrxc или ~/.xinitrc, но всякое бывает). Прикладные программы после этого считают, что они имеют дело с обычными латинскими символами, а при вводе после нажатия CapsLock происходит преобразование в соответствии с клавиатурной раскладкой ЯВЕРТЫ. Нарушает все концепции интернационализации в X11. У меня не заработало в XFree86 3.3.3 (в прежних версиях работало отлично).

Ввод. Использование специальной программы перекодировки. Я опробовал Xruskb А. Лукьянова. Есть rpm в contrib. Единственный метод, который заработал у меня в RH 6.0. Опять-таки должны возникать проблемы с "правильными" прикладными программами. Запуск:
xrus yawerty-koi8.xmm
Переключение по кнопке или двум shift-ам.

Менеджеры окон и рабочего стола.

gnome/enlightment - нельзя выбирать Themes/BrushedMetal, иначе не будет русских букв в заголовках окон (используется шрифт lucida?).

Приложения под X11

gnome-terminal: setting->preferences->font->browse. В фильтрах ставим, что шрифт должен иметь charset=koi8-r, после чего выбираем какой-нибудь из шрифтов типа курьер (они моноширинные).

ghostscript. Копируем все .pfm, .afm и .pfb файлы из созданной ранее cyrillic/Type1 в /usr/share/fonts/default/ghostscript. Берем в gpi gs-Fontmap.add и добавляем его в конец /usr/share/ghostscript/5.10/Fontmap (оригинал сохранить). Затем закоментировать в Fontmap алиасы для Helvetica, Courier и Times, раскоментировать алиасы на соответствующие русские шрифты (там два курьера, выбрать CourierCyrPS, см. про Netscape). Еще советуется запускать с ключем -dNOPLATFONTS, но у меня gv и так с ним зпускается. Преобразование ps в pcl для печати дл HP LaserJet:
gs -q -sDEVICE=ljet4 -r600x600 -sPAPERSIZE=a4 -dNOPAUSE -dSAFER -dNOPLATFONTS -sOutputFile=-

Netscape 4.6: Edit->Preferences->Fonts. Для кодировки koi8-r выбираем Times(cronyx) и Curier (cronix). Почему-то netscape не любит шрифтов Type1 (ни pfb, ни pfa, ни с метрикой, ни без нее). Проблема при печати - он использует только встроенные метрики шрифтов и русские буквы плывут. Есть заплатка, которая правит бинарник netscape, записывая туда метрики CourierCyrPS и TimesCyrMT (любой версии, у меня сработало на 4.6/4.72). Естественно, теперь нельзя удалять русские Type1 шрифты ;). Также при печати нет подчеркиваний, цветов и оформления страницы (дата, имя файла и т.д.).


Конфигурирование

Пересборка ядра

Все делать из /usr/src/linux (если ядро из поставки). Если был сделан upgrade пакета kernel_headers, то м.б. придется сделать ссылки для /usr/include/asm и /usr/include/linux.
  1. make mrproper (удалить весь мусор от предыдущей конфигурации). Если хочется сохранить предыдущую конфигурацию, то сказать: make dep; make clean.
  2. конфигурация ядра (не советую делать SCSI-драйвера модулями; увы приходится это делать, если надо писать на ATAPI CD-RW)
    • make config (в виде ответов на вопросы: Y, N или M), надежно (ничего не забудешь поменять ;), 500 вопросов, на половину из которых не знаешь что сказать.
    • make menuconfig (в виде меню), удобно (нужен ncurses_devel).
    • make xconfig (под X-Windows), очень удобно :)
    • make oldconfig (все ответы из .config)
  3. make dep
  4. make bzImage (не надо слепо следовать устаревшей инструкции и делать make boot, он не влезет в загрузчик)
  5. make modules
  6. insmod loop до перемещения модулей, а то не найдет loop0
  7. удаляем совсем старую копию модулей (если она есть)
    rm -rf /lib/modules/2.2.5-22-old (нужен для mkinitrd)
  8. делаем текущий набор модулей старым
    mv /lib/modules/2.2.5-22 /lib/modules/2.2.5-22-old
  9. инсталируем новый набор модулей (в /lib/modules/2.2.5-22)
    make modules_install
  10. если все-таки сделал SCSI в виде модуля (или еще какой-нибудь модуль нужен при загрузке; ide-scsi не нужен), то пересобери initrd (отредактировать /etc/conf.modules  (/etc/modules.conf в RedHat 7.0) - вставить alias scsi_hostadapter имя-драйвераи соответствующие options имя-драйвера имя-драйвера="параметры"; проверить alias eth0 - и выполнить
    mkinitrd /boot/имя-нового-initrd 2.2.5-22
    после чего отредактировать /etc/lilo.conf). Также необходимо сделать, если раньше был модуль SCSI, а теперь его убрал или включил в ядро.
  11. копируем получившийся arch/i386/boot/bzImage в /boot/bzImage.new (переименовав старый, если надо)
  12. копируем получившийся System.map в /boot/System.map (переименовав старый?), klogd сначала пытается смотреть в /boot/System.map; если версия ядра не совпадает, то в /System.map, а если и там не совпадает, то в /usr/src/linux/System.map
  13. добавляем новую секцию в /etc/lilo.conf со ссылками на новое ядро и м.б. initrd (обязательно сохранив возможность загрузки старого ядра, System.map, modules?, где взять module-info для нового ядра?)
  14. /sbin/lilo -v
  15. перезагружаемся - DMA все-равно приходится включать вручную через hdparm, ибо не любит он WD :(
  16. /usr/src/linux занимает теперь 70МБ (RH 6.2 - 80 MB, RH 7.0 - 106 MB)
  17. скомпилированный emu10k1 не грузится, приходится брать модуль из дистрибутива

Обновление ядра

  1. подготовить все необходимые пакеты (скачать и положить в локальную директорию)
  2. на всякий случай сделать загрузочный диск
  3. rpm -Uvh kernel-utils-xyz kernel-headers-xyz kernel-source-xyz
  4. rpm -ivh kernel-xyz [kernel-ibcs-xyz] [kernel-pcmcia-cs-xyz]
  5. сделать новый initrd (только если при загрузке потребуется драйвер, сделанный в виде модуля)
  6. дополнить /etc/conf.modules (/etc/modules.conf)
  7. lilo -v
  8. перезагрузиться (shutdown -r now)
  9. настроить ядро

linuxconf

источник

Поддерживает различные интерфейсы с пользователем:

Общие ощущения, как от Unixware 1.0: здорово, красиво, но ненадежно. Если помнишь, как это вручную делается, то лучше сделать вручную. Так и есть! Linuxconf ведет свою базу конфигурации и некоторые обычные конфигурационные файлы генерирует исходя из нее при загрузке (например, sendmail.cf!), так что вносить измения в них вручную безсмысленно. Есть мнение, что его надо отключить (начальник д.б. один).

Управляет списком пользователей, групп, файловых систем (в т.ч. сетевых), конфигурация локальной сети и PPP, сетевые клиенты и серверы, LILO.

control panel

Запускается командой control-panel в xterm. Является площадкой для запуска отдельных графических средств конфигурации (printtool, kerneld, netcfg, run level editor, time and date, modem configuration).

chkconfig

Манипуляция файлами в /etc/rc.d (какие сервисы запускать и останавливать при переходе с уровня на уровень). Криво сделан. Проще вручную сделать, но кругом натыкано проверок с помощью chkconfig. Он действует в терминах: включен/выключен. На самом деле для сервиса м.б. как процедура включения, так и выключения в любых комбинациях. В результате он выдает ответ "запущен сервер или нет" в зависимости от того, какой файл создан в директории последним - K или S!

Ключи:

отдельные утилиты

RHL runlevels:


Network

Документация по конфигурации сети (NET-4) Управление параметрами стека через /proc/sys/net/ipv4 (посмотреть - cat имя, изменить echo параметр... > имя). Смысл имен описан в ip-sysctl.txt. В частности необходимо (для установки во время загрузки надо поменять /etc/rc.d/init.d/network) В RH 6.2 для управления параметрами стека (и любыми другими переменными из /proc/sys) используется
sysctl -p /etc/sysctl.conf
в котором записаны операторы присваивания соответствующим переменным (имена переменных совпадают с именами файлов из /proc/sys  с заменой слешей на точки):

Однако похоже, что sysctl не работает с двумя параметрами (ip_local_port_range), так что этот параметр приходится устанавливать руками

Несколько IP-адресов на одном интерфейсе (aliasing):

PPP

Документация

Ядро должно быть сконфигурировано с поддержкой PPP (netdriver/ppp, модули ppp, slhc, bsd_comp

В RedHat 6.2 rp3 настраивает PPP почти нормально (правда, я не пробовал настраивать диалог). Конфигурационный файл - "/etc/wvdial.conf". rp3 аварийно завершается, если слишком быстро нажать stop/start. Обрыва линии не замечает, так что приходится прописывать в /etc/ppp/options lcp-echo-interval и lcp-echo-failure. Адреса DNS-серверов берет от сервера доступа.

В RedHat 6.0 linuxconf и control-panel имеют недоработки в конфигурировании PPP-доступа в интернет :( Так что я сделал так:

firewall и NAT (masquerading)

Документация: Реализация firewall в linux 2.1.102 и выше сделана с помощью ipchains. В предыдущих версиях - с помощью ipfwadm. В следующих версиях обещают полностью переделать (в 2.3 - network filter). Состоит из кода, встраиваемого в ядро (при генерации включить FIREWALL, IP_FIREWALL; появляются /proc/net/ip_fwchains и /proc/net/ip_fwnames), и внешней программы ipchains (ipchains-save, ipchains-restore). Настойчиво рекомендуется дефрагментировать все пакеты (/proc/sys/net/ipv4/ip_always_defrag или IP_ALWAYS_DEFRAG, в зависимости от версии ядра).

Теория. Каждый проверяемый IP-пакет проходит по цепочке ("сквозь строй") правил, определяющих, что с ним делать. Правило состоит из шаблона и действия. Каждая цепочка имеет действие по умолчанию. Задействованы цепочки с именами:

Действия (действие в недопустимом месте эквивалентно DENY): Конфигурация производится с помощью ipchains, ipchains-save (сохранение текущей конфигурации на stdout), ipchains-restore (чтение сохраненной ранее конфигурации  с stdin). После загрузки определены цепочки input (ACCEPT), output (ACCEPT), forward (ACCEPT). Основные опции ipchains: Шаблон правила может включать (если в качестве адреса хоста указывается имя, соответствующее нескольким адресам, то при добавляется соответствующее количество правил; восклицательный знак инвертирует шаблон): Тщательно составленные и отлаженные цепочки сохранять по ipchains-save (ipchains.transparent_proxy_and_firewall) и восстанавливать при загрузке по ipchans-restore (/etc/rc.d).

В RH 6.2 появился сервис ipchains (управляемый обычным chkconfig) в /etc/rc.d/init.d с функциями:

Пример (/etc/sysconfig/ipchains в RH6.2 позволяет комментарии):

Маршрутизация

Пока чистая статика. Локальная сетка и прямая маршрутизация модемов на NAS (routes_to_modems.sh - куча "route add -host адрес gw NAS metric 1", /etc/rc.d).

В RH 6.2 для тех же целей используется /etc/sysconfig/static-routes, пока оставил как есть.


X11

запуск ("Ной родил Иакова, Иаков родил...")

Начинается все со startx: добавляет xauth для доступа данного пользователя через unix и localhost к X-серверу и вызывает xinit. Т.к. никто их оттуда (.Xauthority и .ICEauthority) не удаляет, то через некоторое время запуск X начинает тормозить (пытается обратиться к серверу доступа через указанные в этих файлах порты, а там уже никого нет). Пришлось в собственный скрипт перед запуском startx добавить обнуление этих файлов).

xinit убеждается в наличии /etc/X11/xinit/Xclients и вызывает его.

Xclients пытается определить какой desktop установлен и запускает gnome-session/strtkde/Another Level/AfterStep/...

gnome-session (--help)...

X сервер

Ключ "--nolisten tcp" отменяет прослушивание порта 6000 для общения с клиентскими программами по TCP/IP. После этого клиентские программы на этом же хосте, но из-под другого пользователя не запускаются.

Менеджеры окон

Рабочий стол

Gnome

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

Запуск панели, если она грохнулась: panel.

Каждая программа из комплекта gnome имеет привычку прислушиваться к tcp порту из клиентского интервала. Это даже не дыра, а открытые ворота в системе безопасности. На многократно заданный вопрос один из авторов заявил: "gnome(ORBit) специально предназначен для работы в сетевом окружении и порты он будет прослушивать всегда, а наша система безопасности - непробиваема". Предполагается, что по этому порту программа получает команды от session-manager (попытка отключить его с помощью ключа запуска --sm-disable или заменой запуска gnome-session на gnome-wm ни к чему не привела - порты открываются в любом случае). Таким образом любой осталоп может сконнектиться на этот порт и "пообщаться" с программой, что иногда вызывает ее аварийное завершение (если постараться, то и очередной buffer overflow exploit найти можно). Под горячую руку я закрыл доступ к любым серверным программам на интервале клиентских портов (фильтруя SYN пакеты), но говорят, что можно закрыть это безобразие через tcpwrapper (host_access(5)).

xterm

Проблема при работе в linux из xterm под Solaris: не выходит из режимов реверса и подчеркивания (less)

Печать

Ссылки: Пакеты printtool, rhs-printfilters и lpr обеспечивают вполне сносные средства для настройки и печати, но не поддерживают наш старый HP JetDirect (который вместо lpd использует просто порт TCP/9100). Приходится устанавливать LPRng. Читая документацию по LPRng, обнаружил ссылку на netcat, которого мне вполне хватает для печати страниц из Netscape и прочих PS-файлов. Устанавливаем netcat (например, из contrib). В /usr/local/bin уже лежит фильтр для преобразования PS в PCL (ps2pcl.sh). Добавляем туда же tojd.sh:
/usr/sbin/nc имя-принтера 9100
и pstojd.sh:
ps2pcl.sh | tojd.sh
Вот и все. Теперь вместо команды lp/lpr для печати PS-файлов можно использовать pstojd.sh. Когда мне потребуется настоящий спулинг, я буду изучать LPRng ;).


Диски, разделы

Создание и редактирование таблицы разделов производится командой
fdisk /dev/hda (подставить требуемое имя диска)

Раздел надо создавать в той ОС, которая будет с ним работать. Например, MS Windows не любит разделов не на границе цилиндра. Переключение режима работы с большими дисками (LBA/Large/Auto) меняет размер цилиндра. Так что после смены режима надо заново разбивать диск.

cfdisk, sfdisk, parted

Файловые системы

Создание стандартной файловой системы ext2:
mke2fs имя-диска
с ключами

Поиск файлов: locate. Создание базы данных для поиска: /etc/cron.daily/updatedb.cron (в RH 6.2 /etc/cron.daily/slocate.cron). Добавить ключ "-l 0", что слегка уменьшает безопасность, зато не надо переходить в root, чтобы найти ВСЕ файлы. Добавить в список непросматриваемых директорий всякие squid-кеш и inn-иерархии.

swap

Linux позволяет использовать от 1 до 8 разделов диска (тип раздела - 0x82) или файлов в качестве swap-области. Максимальный размер раздела/файла для Intel-архитектуры - 2GB (на каждый MB swap-области тратится 1KB ОЗУ). Создание swap-области: mkswap имя-файла-или-раздела (файл или раздел требуемого размера надо создать заранее). Включение файла/раздела в работу: swapon [-p приоритет ] имя-файла-или-раздела. Приоритет может быть установлен от 0 до 32767. В первую очередь используется место в swap-области с более высоким приоритетом. Если существует несколько областей с равным приоритетом, то обеспечивается балансировка нагрузки, так что полезно разнести их по разным дискам/каналам. Какая-то засада с установкой приоритета по умолчанию, так что лучше назначать их вручную. Прекратить использование области: swapoffимя-файла-или-раздела. Посмотреть, какие swap-области используются и как: swapon -s (или cat /proc/swaps). Чтобы обеспечить автоматическое включение файла/раздела в работу при начальной загрузке, надо занести в /etc/fstab строку:
имя-файла-или-раздела none swap defaults 0 0
/etc/rc.d/rc.sysinit выдается команда swapon -a, надеюсь после монтирование всех локальных файловых систем).


Сервера и клиенты Internet


Проблемы

Загрузка со SCSI при наличии IDE-дисков.

/sbin/lilo делает оба диска незагружаемыми. Бездумный способ: запускать lilo с выключенным IDE (и в BIOS тоже). Разумный способ ищется.

Если диск уже запорчен:

Где взять дополнительную информацию

Порталы, посвященные Linux:

Документация

News (USENET) и списки рассылки

Copyright © 1996-2001 Sergey E. Bogomolov