Самая трудная проблема для начинающего - это выбор дистрибутива. Столько их развелось в последнее время, что глаза разбегаются. Даже производитель материнских плат Abit выпустил дистрибутив Linux под свои платы (Gentus; похоже уже умер). Хорошо что, когда я ставил себе Linux в первый раз, этой проблемы не было :) Либо ставишь Slackware, либо собираешь дистрибутив сам. Пару лет я им пользовался, пока не заметил, что слишком много пакетов приходится устанавливать дополнительно (в комплект Slackware входили очень старые версии или не входили вообще). Так как все дополнительные пакеты были в формате RPM, то вполне естественно, что я перешел на RedHat. Судя по опросам на linux-ve и linux.org.ru, я не одинок (учтите, что BlackCat и Mandrake тоже базируются(овались) на RedHat, так что в сумме они занимают порядка 60%). Наличие Alan Cox в штате RedHat тоже плюс ;) Можно еще обратить внимание на Debian GNU, но у меня нет на это времени (самая полная коллекция, но были (есть?) серьезные проблемы с русским языком). Бывают и "самодельные" дистрибутивы.
Из руссифицированных вариантов можно отметить (сам я не пробовал):
- Mandrake RE (ALTLinux, в девичестве IP LABS Linux Team)
- ASPLinux
- Black Cat Linux (ныне слился с ASPLinux)
Списки дистрибутивов:
- на LinuxJournal
- на LinuxHQ
- ISO-образы различных дистрибутивов (покупка в ближайшем ларьке обходится на порядок дешевле, чем загрузка по тарифам Ростелекома)
Времена, когда приходилось самостоятельно устанавливать новое "свежеиспеченное" ядро, надеюсь уже прошли. Сейчас лучше положиться на составителя дистрибутива. Однако, необходимость быть в курсе грядущих изменений осталась.
Сайты, следящие за изменениями в ядре:
- http://www.kernel.org/ (архив исходников ядра и заплаток)
- LinuxHQ (обзоры, Linux Edge)
- Kernel-traffic (еженедельник для разработчиков ядра - часто меняет место)
- Kernel Notes (когда-то здесь был список изменений для каждой версии с точки зрения пользователей, а не разработчиков, как в ChangeLog, но сейчас сайт заброшен)
Что нового в 2.4:
- Linux Gets An Upgrade (переход к 2.4, январь 2001)
- Joe Pranevich: Wonderful World of Linux 2.4 11/23/00 ("Turkey Day" Update)
- Linux 2.4 Status/TODO Page (с выходом версии перестал обновляться)
Когда-нибудь наступят светлые дни, когда изготовители оборудования будут сначала писать драйверы под Linux, а потом уж под 20 версий MS Windows. Но сейчас перед покупкой "железа" необходимо предварительно проверить, есть ли под него драйверы для Linux. Крайне желательно, чтобы эти драйверы входили в состав дистрибутива (поставить драйвер самому можно - если он не требуется при установке дистрибутива - но Вы узнаете много нового и интересного). Для RedHat проверить наличие драйвера можно на сайте компании.
К сожалению, проиводители оборудования очень любят выпускать разные устройства под одним маркетинговым именем или одно и то же устройство под разными. Так что доверять чужому опыту надо осторожно. Рекомендуется поискать в телеконференциях как положительные, так и отрицательные отзывы.
Ссылки на списки оборудования, совместимого с Linux.
- Linux hardware database
- http://www.linuxhardware.net/
- Hardware-HOWTO (1999 :(
Hardware
SMP
Шины
Конфигурация 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, если он необходим при загрузке.
Диски
- xx - либо hd (IDE), либо sd (SCSI)
- y - номер диска
- IDE
- a - первый IDE диск
- b - второй IDE диск
- и т.д.
- SCSI
- a -первый SCSI диск
- b - второй SCSI диск
- и т.д.
- IDE
- N - номер раздела (от 1 до 4 - номера primary или extended разделов, от 5 - номера логических разделов)
CD-R (CD-RW)
список, поддерживаемых устройств
Я пробовал на HP CD-Writer Plus 8100 , IDE/ATAPI (24/4/2, в действительности скорость чтения не выше 12x) и Mitsumi CR-4804TE, IDE/ATAPI (24/4/4).
Особенности конфигурации ядра (IDE CD-RW), шаг влево, шаг вправо - и работать не будет:
- SYSCTL=y
- автоматическая загрузка модулей (kerneld)
- IDE=y
- IDECD=m, модуль - ide-cd
- SCSI hostadaptor emulation (ибо ATAPI - это эмуляция SCSI на IDE/ATA), IDESCSI=m, модуль - ide-scsi
- Loopback device (файловая система внутри файла), BLK_DEV_LOOP=m, модуль - loop
- SCSI=m, модуль - scsi
- SCSI CDROM, BLK_DEV_SR=m, модуль - sr
- BLK_DEV_SR_VENDOR=y
- SCSI generic, CHR_DEV_SG = m, модуль - sg
- ни в коем случае SCSI_MULTI_LUN в версиях ядра до 2.2.10 (Up to kernel-version 2.2.10, don't enable CONFIG_SCSI_MULTI_LUN ('probe for multiple luns') and ide-scsi support at the same time)
- SCSI драйвер
- FAT_FS=m, MSDOS_FS=m, VFAT_FS=m, UMSDOS_FS=m
- ISO 9660 CDROM filesystem (включает RockRidge), обязательно встроенный в ядро.
- Microsoft Joliet cdrom
- mkisofs (ISO 9660, RockRidge, El torito, Juliet, HFS, мультисессии), пакет mkisofs-1.8-2 в RedHat 6.2 или mkisofs-1.9-2 в RedHat 7.0.
- простейший случай: mkisofs -r [ -P имя-публикатора ] [ -V имя-тома ] -v [-o образ-CD] исходная-директория ... (ISO9660 и RockRidge со сброшенными правами доступа к файлам)
если -o опущен, то выводится на stdout
-R (вместо -r, если надо сохранять права доступа в RockRidge)
-M исходный-образ-CD (позволяет добавлять файлы к ранее созданному образу)
-J (делает вдобавок оглавление Juliet, который не переносит несколько файлов с одним и тем же именем, получающиеся после слияния нескольких исходных директорий)
-m шаблон-имени-файла (не записывать эти файлы) - тестирование полученного:
mount -t iso9660 -o ro,loop=/dev/loop0 образ-CD /cdrom
- cdwrite - старая, заброшенная программа
- cdrecord-1.9. Пакет cdrecord-1.9-2 в ReDHat 7.0.
- загрузить ide-scsi (после этого надо обращаться не к /dev/hd?, а к /dev/scd?)
modprobe ide-scsi (нужны права root)
он должен найти CD-ROM и все про него рассказать (на syslog), создать sr-устройство (у меня sr0 на scsi0 (chanel 0, id 0, lun 0), даже оказался scsi3-mmc drive: 24x/24x writer cd/rw xa/form2 cdda tray) - появились устройства (/proc/devices): char 21 (sg) и block 11 (sr)
- cdrecord -scanbus находит устройство (scsibus0, 0)
- появились модули: ide-scsi, sg, scsi_mod
- после доступа к CD появились модули: cdrom, sr_mod
- запись обычного диска с данными в одну сессию
cdrecord -v speed=скорость dev=номер-шины,номер-устройства,lun-data образ-CD
для CD-RW надо добавить опцию: blank=fast (полторы минуты)
используйте имя файла "-" для обозначения stdin - ключ -dummy имитирует процесс записи, что позволяет проверить ее возможность на указанной скорости
- ключ -multi не закрывает диск, что позволяет в дальнейшем дописывать на него
- ключ -prcap рассказывает очень много интересной информации об устройстве
- ключ -force позволяет иногда вернуть к жизни CD-RW
- fs=размер задает размер буфера (более 16m не выносит Linux, а больше 4m не выносит HP 8100 )
- загрузить ide-scsi (после этого надо обращаться не к /dev/hd?, а к /dev/scd?)
- cdrdao (специально для CD-Audio)
- X-CD-Roast - интерфейс к mkisofs и cdrecord
- BurnIT - интерфейс (на Java) к mkisofs, cdrecord и cdda2wav
- XDaodio - интерфейс (Tcl/Tk) к cdrdao для копирования audio CD 1:1
Мышки
Где взять программы?
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-архивов меняется со временем (фактически каждый раз приходится искать куда же они его переместили и как расположили файлы на этот раз)
Примеры установок для различных версий и ситуаций:- Linux RedHat 7.1 на сервер с CD-ROM без графики
- Linux RedHat 7.1 на домашнюю рабочую станцию с выходом в интернет по модему с CD-ROM
- Linux RedHat 7.0 на сервер с CD-ROM
- Linux RedHat 6.2 на сервер с ftp-сервера
- Linux RedHat 6.2 на домашнюю рабочую станцию с выходом в интернет по модему
- Linux RedHat 6.0 на сервер с ftp-сервера
- Linux RedHat 6.0 на SMP сервер с ftp-сервера
- Linux RedHat 6.0 на домашнюю рабочую станцию с выходом в интернет по модему
LILO работает через BIOS, а большинство BIOS позволяют доступ только к первым двум IDE-дискам (считая ATAPI CD-ROM) в пределах первых 1023 цилиндров. Так что директория (или раздел) /boot должна удовлетворять данным ограничениям.
Зависимости пакетов от библиотек и средств программирования.
kernelcfg, netcfg -> tkinter -> tix, python
tix -> tk -> tcl
Tclx и itcl никем не используются.
Руссификация
- Linux Cyrillic HOWTO
- KOI8-R References (Russian Net Character Set) (Чернов)
Консоль
- пакет console-tools и документация из него (/usr/doc/console-tools* и man)
-
в /etc/sysconfig/i18n
- LANG="ru_RU.KOI8-R"
- SYSFONT="cyr-sun16"
- SYSFONTACM="koi8-r"
Драйвер клавиатуры
Клавиатура генерирует сканкоды (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
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, слова в скобках - именами секций в соответствующих файлах):
- LeftAlt Meta
- RightAlt ModeShift
- ScrollLock ModeLock (не работает)
- RightCtl Control
- XkbKeymap "xfree86(ru)"
- XkbRules "xfree86"
- XkbModel "pc101"
- XkbLayout "ru" (раскладка "йцукенг" - как в MS Windows, кроме символов над цифрами)
- закоментарить XkbKeycodes, XkbTypes, XkbCompat, XkbSymbols, XkbGeometry
- Можно keymap/xfree86 (секция ru) поменять en_US(pc105)+ru на ru(winkeys), чтобы в русском режиме вводились символы как на наклейках над цифрами.
- на моей клавиатуре оказались "лишние" кнопки с окошками, которые я приспособил для постоянного включения/выключения русского режима. В файле /usr/X11R6/lib/X11/xkb/symbols/ru добавил определение для левой кнопки с окошком:
key{ symbols[Group1]= [ ISO_Next_Group ] };
key{ symbols[Group1]= [ ISO_Next_Group ] }; - переделать файл /usr/X11R6/lib/X11/xkb/symbols/ru под "яверты"
Ввод. Использование специальной программы перекодировки. Я опробовал Xruskb А. Лукьянова. Есть rpm в contrib. Единственный метод, который заработал у меня в RH 6.0. Опять-таки должны возникать проблемы с "правильными" прикладными программами. Запуск:
xrus yawerty-koi8.xmm
Переключение по кнопке или двум shift-ам.
Менеджеры окон и рабочего стола.
Приложения под X11
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 шрифты ;). Также при печати нет подчеркиваний, цветов и оформления страницы (дата, имя файла и т.д.).
Конфигурирование
Пересборка ядра
- make mrproper (удалить весь мусор от предыдущей конфигурации). Если хочется сохранить предыдущую конфигурацию, то сказать: make dep; make clean.
- конфигурация ядра (не советую делать SCSI-драйвера модулями; увы приходится это делать, если надо писать на ATAPI CD-RW)
- make config (в виде ответов на вопросы: Y, N или M), надежно (ничего не забудешь поменять ;), 500 вопросов, на половину из которых не знаешь что сказать.
- make menuconfig (в виде меню), удобно (нужен ncurses_devel).
- make xconfig (под X-Windows), очень удобно :)
- make oldconfig (все ответы из .config)
- make dep
- make bzImage (не надо слепо следовать устаревшей инструкции и делать make boot, он не влезет в загрузчик)
- make modules
- insmod loop до перемещения модулей, а то не найдет loop0
- удаляем совсем старую копию модулей (если она есть)
rm -rf /lib/modules/2.2.5-22-old (нужен для mkinitrd) - делаем текущий набор модулей старым
mv /lib/modules/2.2.5-22 /lib/modules/2.2.5-22-old - инсталируем новый набор модулей (в /lib/modules/2.2.5-22)
make modules_install - если все-таки сделал 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, а теперь его убрал или включил в ядро. - копируем получившийся arch/i386/boot/bzImage в /boot/bzImage.new (переименовав старый, если надо)
- копируем получившийся System.map в /boot/System.map (переименовав старый?), klogd сначала пытается смотреть в /boot/System.map; если версия ядра не совпадает, то в /System.map, а если и там не совпадает, то в /usr/src/linux/System.map
- добавляем новую секцию в /etc/lilo.conf со ссылками на новое ядро и м.б. initrd (обязательно сохранив возможность загрузки старого ядра, System.map, modules?, где взять module-info для нового ядра?)
- /sbin/lilo -v
- перезагружаемся - DMA все-равно приходится включать вручную через hdparm, ибо не любит он WD :(
- /usr/src/linux занимает теперь 70МБ (RH 6.2 - 80 MB, RH 7.0 - 106 MB)
- скомпилированный emu10k1 не грузится, приходится брать модуль из дистрибутива
Обновление ядра
- подготовить все необходимые пакеты (скачать и положить в локальную директорию)
- на всякий случай сделать загрузочный диск
- rpm -Uvh kernel-utils-xyz kernel-headers-xyz kernel-source-xyz
- rpm -ivh kernel-xyz [kernel-ibcs-xyz] [kernel-pcmcia-cs-xyz]
- сделать новый initrd (только если при загрузке потребуется драйвер, сделанный в виде модуля)
- дополнить /etc/conf.modules (/etc/modules.conf)
- lilo -v
- перезагрузиться (shutdown -r now)
- настроить ядро
linuxconf
Поддерживает различные интерфейсы с пользователем:
- командная строка
- а/ц окна
- X11 (древовидное меню)
- www (позволяет удаленное администрирование, выключен по умолчанию)
Управляет списком пользователей, групп, файловых систем (в т.ч. сетевых), конфигурация локальной сети и PPP, сетевые клиенты и серверы, LILO.
control panel
chkconfig
Ключи:
- --list (получить список сервисов)
- --add имя (добавить сервис в список отслеживаемых)
- --del имя
- --level уровень имя [ on | off | reset ] (поднять/опустить/сбросить сервис на указанном уровне)
отдельные утилиты
- /usr/sbin/mouseconfig
- /usr/sbin/timeconfig, timetool, date, setclock, hwclock, adjtimex
- сервисы: /usr/sbin/ntsysv или /sbin/chkconfig
- mkbootdisk --device /dev/fd0 версия (хочет vmlinuz, а не bzImage)
- Xconfigurator или vi /etc/X11/XF86Config (про существование Interlace-режимов народ уже забыл :(
- useradd/userdel, passwd
- kbdconfig
RHL runlevels:
- 0: halt
- 1: single user
- 2: multiuser
- 3: multiuser + NFS (режим по умолчанию)
- 4:
- 5: X11 (xdm, gdm или kdm)
- 6: reboot
Network
- NET-3-HOWTO (может есть NET-4?), август 1998
- Network Adiministrators Guide - NAG (1996)
- изменить ip_local_port_range с "1024 4999" на "32768 61000" (echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range). Из этого интервала берутся номера локальных портов для соединения с удаленными серверами. Так как мой firewall глушит все соединения идущие снаружи на внутреннюю сеть и направленные на порты до 32768, считая их привилегированными, то надо вывести их выше.
- включить ip forwarding (необходим для transparent proxy, сбрасывает остальные параметры стека в соответствии с RFC 1122 для хостов и RFC 1812 для маршрутизаторов): echo 1 > /proc/sys/net/ipv4/ip_forward (во время загрузки устанавливается в зависимости от значения переменной FORWARD_IPV4 в /etc/sysconfig/network).
- включить незбежную дефрагментацию:
echo 1 > /proc/sys/net/ipv4/ip_always_defrag # в ядре 2.2.12 указывается во время конфигурации
sysctl -p /etc/sysctl.conf
в котором записаны операторы присваивания соответствующим переменным (имена переменных совпадают с именами файлов из /proc/sys с заменой слешей на точки):
- net.ipv4.ip_local_port_range = "32768 61000"
- net.ipv4.ip_forward = 1
- net.ipv4.ip_always_defrag = 1
- net.ipv4.conf.all.rp_filter = 1
- net.ipv4.conf.all.log_martians = 1 (сбрасывать пакеты с невозможными адресами в журнал)
- net.ipv4.conf.all.accept_source_route = 0 (запретить source route)
Однако похоже, что sysctl не работает с двумя параметрами (ip_local_port_range), так что этот параметр приходится устанавливать руками
Несколько IP-адресов на одном интерфейсе (aliasing):
- ядро должно быть собрано с поддержкой alias (CONFIG_IP_ALIAS=y)
- после конфигурации основного адреса на интерфейсе в /etc/rc.d/init.d/network (пусть eth0):
ifconfig eth0:0 дополнительный-адрес netmask маска-дополнительной-сетки up - в документации предлагается определить маршрут для этой сетки
route add -net дополнительная-сетка netmask маска-дополнительной-сетки eth0:0
но он устанавливается сам собой
PPP
- pppd.8, pppstats.8, char.8
- PPP-FAQ (1996)
- PPP-HOWTO (март 1997)
- /usr/doc/ppp-2.3.7
Ядро должно быть сконфигурировано с поддержкой 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-доступа в интернет :( Так что я сделал так:- добавляем в /etc/resolv.conf имя нашего DNS-сервера
nameserver 195.161.72.28 - убедиться, что /dev/modem указывает на нужное устройство (у меня COM2 - /dev/ttyS1)
- завел в control-panel/network интерфейс ppp0, а затем отредактировал конфигурационные файлы ручками
-
/etc/ppp/options (не забывать про ~/.ppprc)
- lock #чтобы никто больше не лез к тому же самому порту во время работы pppd
- modem crtscts #нормальная синхронизация и сигналы
- mtu 576 mru 576 # стандартный размер блока (1500) мешает одновременно работать с telnet и ftp
- asyncmap 00000000 # использовать все символы
- defaultroute # поднимать маршрутизацию после установления соединения
- debug kdebug 1 # потом можно выключить
- lcp-echo-interval 20 lcp-echo-failure 3 # при разрыве связи pppd почему не получает извещения об этом, приходится непрерывно проверять целостность соединения через LCP echo. Может приладить програмку, которая будет смотреть /proc/tty/driver/serial и рубить pppd при пропадании сигнала?
-
/etc/sysconfig/network-scripts/chat-ppp0 (у меня модем Zyxel Elite 2864, соединяюсь с DEOL), содержит expect-send пары для chat
- 'TIMEOUT' '2'
- 'ABORT' 'BUSY'
- 'ABORT' 'ERROR'
- 'ABORT' 'NO CARRIER'
- 'ABORT' 'NO DIAL TONE'
- '' 'ATI2&F'
- 'OK' 'AT*E1&S1S13=2S42=64S52=96'
- 'OK' 'ATDP9329765'
- 'TIMEOUT' '45'
- 'CONNECT' ''
- 'TIMEOUT' '15'
- 'Username:' 'имя'
- 'Password:' '\qпароль'
- /etc/sysconfig/network-scripts/ifcfg-ppp0 по вкусу (например, уменьшить RETRYTIMEOUT)
- после подъема/опускания канала pppd вызывает /etc/ppp/ip-up и /etc/ppp/ip-down, которые при необходимости тоже можно настроить (параметры: интерфейс, tty, скорость, localip, remoteip, ipparam)
-
/etc/ppp/options (не забывать про ~/.ppprc)
- создать в /etc/ppp скрипты для запуска ppp (названия условны):
- deol-up: /etc/sysconfig/network-scripts/ifup-ppp /etc/sysconfig/network-scripts/ifcfg-ppp0
- deol-down: /etc/sysconfig/network-scripts/ifdown-ppp /etc/sysconfig/network-scripts/ifcfg-ppp0
- вызывать deol-up/deol-down ручками, вставить в crontab или в графическое меню - дело вкуса (только с правами надо разобраться)
- а где же pppdump?
firewall и NAT (masquerading)
- IPCHAINS-HOWTO
- NET-3-HOWTO (может есть NET-4?), август 1998
- IP-Masquerading-HOWTO
- PPP-HOWTO
- Ethernet-HOWTO
- Firewall-HOWTO
- сайт автора: Linux IP Firewalling Chains
- ipchains.8, ipfw.4, ipchains-save.8, ipchains-restore.8
Теория. Каждый проверяемый IP-пакет проходит по цепочке ("сквозь строй") правил, определяющих, что с ним делать. Правило состоит из шаблона и действия. Каждая цепочка имеет действие по умолчанию. Задействованы цепочки с именами:
- input - обрабатываются пакеты, приходящие снаружи или с loopback;
- forward - обрабатываются пакеты, чьи исходные и конечные адреса лежат снаружи;
- output - обрабатываются пакеты, уходящие наружу или loopback;
- определенные пользователем - используются в качестве подпрограмм, есть отлов циклов.
- ACCEPT - пропустить пакет;
- REJECT - отвергнуть, послав ICMP Host Unreachable (если пакет не ICMP);
- DENY - выбросить молча;
- MASQ - только для цепочки forward - подменить адрес отправителя на свой, номер порта на свежесгенеренный и запомнить в таблицах ядро, чтобы обратный пакет преобразовывался автоматически;
- REDIRECT - только для цепочки input, TCP или UDP - несмотря на то, что пакет чужой, послать его локальному процессу на указанный порт;
- имя пользовательской цепочки - переход на подпрограмму;
- RETURN - конец цепочки (как бы возврат из пользовательской цепочки-подпрограммы);
- пусто - только увеличить счетчики байтов и пакетов и перейти к следующему правилу в цепочке, счетчики - 64-битные.
- -N имя-цепочки (создать цепочку)
- -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
- -L [ -v ] [имя-цепочки] (показать список правил и счетчики)
- -A имя-цепочки правило (добавить правило к цепочке)
- -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
- -D имя-цепочки правило (удалить правило по текстуальному совпадению)
- -F имя-цепочки (удалить все правила из цепочки)
- -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1)
- -R имя-цепочки номер правило (заменить)
- -M -L (показать текущие маскарадные соединения)
- -M -S tcp tcpfin udp (установить соответствующие timeout в секундах)
- -h icmp (выдать список ICMP имен)
- -Z имя-цепочки (обнулить счетчики)
- -C имя-цепочки пакет (тестировать прохождение пакета)
- -P имя-цепочки действие (изменить действие по умолчанию)
- --proto | -p [!] протокол (tcp/udp/icmp/all)
- --bidirectional | -b (добавляется два правила: прямое и обратное)
- --source | -s | --src [!] address[/mask] [!] [port[:port]] (маска может быть записана как в виде 4-х десятичных чисел через точку, так и в виде одного числа)
- --source-port [!] [port[:port]]
- --destination | -d | --dst [!] address[/mask] [!] [port[:port]]
- --destination-port [!] [port[:port]]
- --icmp-type [!] имя
- --interface | -i [!] имя[+] (ppp0, lo, eth0; + - соответствует любой подстроке)
- --jump | -j действие [port](номер порта для REDIRECT)
- --mark | -m [+-]число (пометить пакет для QoS)
- --log | -l (запись о пакете в журнал)
- --numeric | -n (выводить адреса и порты в числовом виде)
- --output | -o [maxsize] (вывести пакет на устройство netlink)
- -v (повысить болтливость)
- [!] --fragment | -f (только для последующих кусков фрагментированных пкетов)
- [!] --syn | -y (имеет смысл только для TCP: только пакеты с установленным флагом SYN, отрицание означает установленный флаг ACK)
- --TOS | -t andmask xormask (управление битами TOS - type of service)
В RH 6.2 появился сервис ipchains (управляемый обычным chkconfig) в /etc/rc.d/init.d с функциями:
- start (настройки берутся из /etc/sysconfig/ipchains - делаются либо с помощью функции save, либо ipchains-save)
- stop
- restart
- status
- save (сохранить текущие настройки в /etc/sysconfig/ipchains)
- panic (полная блокировка в случае атаки)
- :input ACCEPT
- :forward ACCEPT
- :output ACCEPT
- # доступ к HTTP-серверу (если есть)
- -A input -s 0.0.0.0/0.0.0.0 -d 127.0.0.1/255.255.255.255 80:80 -i lo -p 6 -j ACCEPT -l
- -A input -s 0.0.0.0/0.0.0.0 -d 127.0.0.1/255.255.255.255 80:80 -p 6 -j DENY -l
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 80:80 -p 6 -j ACCEPT
- # поддержка transparent proxy
- -A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 80:80 -p 6 -j REDIRECT 3128
- -A input -s сосед/255.255.255.255 -d наш-адрес/255.255.255.255 3130:3130 -p 17 -j ACCEPT
- -A input -s клиенты-proxy -d наш-адрес/255.255.255.255 3128:3128 -p 6 -j ACCEPT
- # NTP from LAN and dialup
- -A input -s сервера-NTP 123:123 -d наш-адрес/255.255.255.255 123:123 -p 17 -j ACCEPT
- # syslog from LAN
- -A input -s откуда-беррем-syslog -d наш-адрес/255.255.255.255 514:514 -p 17 -j ACCEPT
- # FTP from anywhere
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 21:21 -p 6 -j ACCEPT
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 20:20 -p 6 -j ACCEPT
- # пропуск FTP passive mode (д.б. согласован с passive ports в ftpaccess)
- -A input --syn -s 0.0.0.0/0.0.0.0 -d 195.161.72.12/255.255.255.255 начало:конец -p 6 -j ACCEPT
- # DNS
- # -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 53:53 -p 6 -j ACCEPT
- # -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 53:53 -p 17 -j ACCEPT
- # на адресах выше 32k только клиенты (кроме ftpd в пассивном режиме, ниже вообще ничего), заодно борьба с gnome
- -A input --syn -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 6 -j DENY
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 17 -j ACCEPT
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 32768:65535 -p 6 -j ACCEPT
- # ICMP
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 -p 1 -j ACCEPT
- # все остальное - запретить (DENY or REJECT ?)
- -A input -s 0.0.0.0/0.0.0.0 -d наш-адрес/255.255.255.255 -j DENY -l
- -A forward -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -l
Маршрутизация
В RH 6.2 для тех же целей используется /etc/sysconfig/static-routes, пока оставил как есть.
X11
запуск ("Ной родил Иакова, Иаков родил...")
xinit убеждается в наличии /etc/X11/xinit/Xclients и вызывает его.
Xclients пытается определить какой desktop установлен и запускает gnome-session/strtkde/Another Level/AfterStep/...
gnome-session (--help)...
X сервер
Менеджеры окон
Рабочий стол
Количество глюков просто поражает, особенно если запускать на одном экране приложения для нескольких пользователей.
Запуск панели, если она грохнулась: panel.
Каждая программа из комплекта gnome имеет привычку прислушиваться к tcp порту из клиентского интервала. Это даже не дыра, а открытые ворота в системе безопасности. На многократно заданный вопрос один из авторов заявил: "gnome(ORBit) специально предназначен для работы в сетевом окружении и порты он будет прослушивать всегда, а наша система безопасности - непробиваема". Предполагается, что по этому порту программа получает команды от session-manager (попытка отключить его с помощью ключа запуска --sm-disable или заменой запуска gnome-session на gnome-wm ни к чему не привела - порты открываются в любом случае). Таким образом любой осталоп может сконнектиться на этот порт и "пообщаться" с программой, что иногда вызывает ее аварийное завершение (если постараться, то и очередной buffer overflow exploit найти можно). Под горячую руку я закрыл доступ к любым серверным программам на интервале клиентских портов (фильтруя SYN пакеты), но говорят, что можно закрыть это безобразие через tcpwrapper (host_access(5)).
xterm
- infocmp xterm (в Solaris)
- записать в файл в linux (например, xterm-sol.ti)
- отредактировать имя терминала (например, xterm-sol)
- tic -v xterm-sol.ti (в linux, с правами root)
- при каждом заходе из Solaris в linux делать: export TERM=xterm-sol (или встроить в .bash_profile разбор откуда мы пришли по DISPLAY или - в RH 6.2 - по REMOTEHOST)
Печать
- Printing-HOWTO
- Printing-Usage-HOWTO
/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 имя-диска
с ключами
- -b размер-блока (по умолчанию 1024, в RedHat 7.0 - 4096)
- -c (искать плохие блоки)
- -f размер-фрагмента (по умолчанию равен размеру блока)
- -m резервируемый-процент (по умолчанию - 5)
- -v
swap
имя-файла-или-раздела none swap defaults 0 0
(в /etc/rc.d/rc.sysinit выдается команда swapon -a, надеюсь после монтирование всех локальных файловых систем).
Сервера и клиенты Internet
- http и ftp кэш - squid
- Apache
- PHP
- MySQL
- FTP сервер
- ntp (xntpd)
- INN (news сервер для протокола NNTP)
- nntpcache (news-сервер для маленьких)
- ftp mirror
- syslog
- SSH
- NSCD (кеш DNS)
Проблемы
Загрузка со SCSI при наличии IDE-дисков.
/sbin/lilo делает оба диска незагружаемыми. Бездумный способ: запускать lilo с выключенным IDE (и в BIOS тоже). Разумный способ ищется.Если диск уже запорчен:
- выключить IDE-диски
- загрузиться с дискеты UPDATE
- дойти до места где он монтирует SCSI диски
- перейти в консоль для ручного вмешательства
- mount /dev/sda6 /mnt
- cd /mnt
- bin/bash
- chroot .
- mount /dev/sda1 /boot
- теперь можно запускать lilo
Порталы, посвященные Linux:
- виртуальная энциклопедия Linux по-русски
- linux.ru.net (ежедневные новости)
- http://www.linux.ru/ (ежедневные новости почему-то без архива)
- Linux на opennet.ru
- Linux park на webclub.ru
- linuxcenter.ru (реклама книжек по Linux)
- linux.org.ru (еще новости - не перепутать бы их :) - и результаты опросов)
- ru.linuxstart.com
- linuxRSP.ru
- Linux на lib.ru
- linuxnews.ru
- Linux gazette по-русски
- linux knowledge base
- linux webwatcher
- LinuxHQ
- Linux.org
- Linuxcenter (оригинал - французский)
- linux journal
- Linux International
- Linuxcare (в основном, предложение платных услуг)
- Linux у IBM
Документация
- Linux Documentation Project
- зеркало Linux Documentation Project
- виртуальная энциклопедия
- Russian LDP
- ссылки на opennet.ru (400 kB)
- там же, но классифицированные
- ссылки на ru.linuxstart (куча мала на 600 кБ)
- команда man (чтобы работала man -k, должна быть создана поисковая база whatis: /etc/cron.weekly/makewhatis.cron)
- директория /usr/doc (LDP, HOWTO, FAQ)
- CD с документацией из полного комплекта RedHat
- Получить список документации, связанный с конкретной командой можно используя
rpm -qdfполное-имя-команды - команда locate для поиска файла
- команда info
News (USENET) и списки рассылки
- news:fido.ru.linux
- news:fido.ru.unix.linux
- news://news.redhat.com/redhat.*
- http://www.redhat.com/mailing-lists/
- news:comp.os.linux
- news:comp.os.linux.*
- архивы списков рассылки