Автор: Алексей Федорчук
CRUX — не система быстрого развёртывания. И потому знакомство с ним надо начинать с настройки. Причём, опять-таки в отличие от СБР, например, того же Zenwalk’а, заниматься первичными настройками походя, в процессе работы, не получится: в свежеустановленном виде он мало пригоден к практическому использованию.
Так, вследствие аскетизма базовой комплектации, пользователь вряд ли найдёт в нём свои любимые и привычные пакеты. Их придётся устанавливать дополнительно, и причём, как будет рассказано в соответствующей заметке, исключительно из сети. А вот сетевого соединения-то по умолчанию в CRUX’е и не настроено. Как не настраивается в этом дистрибутиве при установке и многое другое — в частности, кириллические шрифты и раскладки клавиатуры для консоли, оконная система X и так далее.
Однако всё это не так страшно, как кажется на первый взгляд: система инициализации CRUX’а настолько проста, что её конфигурирование в соответствие с запросами пользователя не займёт много времени, хотя и потребует некоторой правки не только конфигов, но и даже скриптов инициализации. Поэтому с рассмотрения устройства стартовой схемы CRUX’а мы и начнём работу по его настройке.
Как уже говорилось во вступительных заметках, CRUX использует схему инициализации в BSD-стиле — ещё более простую, пожалуй, чем в современной FreeBSD. Однако он остаётся Linux’ом, и потому так называемые runleves (уровни запуска) из этой схемы никуда не девались, как и описывающий их файл /etc/inittab.
Правда, используются runlevels по минимуму: как можно видеть из содержимого /etc/inittab, кроме уровней 0 (останов системы) и 6 (перезагрузка), предусмотрены только уровни 1 (однопользовательский режим) и 2 (многопользовательский режим с консольным входом). Уровни 3-5 не используются — так что фактически мы видим полную идентичность стартовой схеме BSD. Это не значит, что нельзя, например, приписать к уровню 3 графический вход в систему, но заниматься этим пользователю придётся самостоятельно.
В соответствие с этим, набор стартовых сценариев, перечисленных в /etc/inittab, сведён к минимуму:
- /etc/rc — главный общесистемный сценарий, исполняемый в любом случае;
- /etc/rc.multi — сценарий, исполняемый при обычном входе в систему;
- /etc/rc.single — сценарий, отрабатываемый при переходе в однопользовательский режим;
- /etc/rc.shutdown — сценарий, исполняемый при перезагрузке системы или её останове.
Кроме основных сценариев, при инициализации могут быть задействованы и дополнительные:
- /etc/rc.modules, обеспечивающий, как легко догадаться из названия, загрузку модулей; впрочем, по умолчанию он исполняет только команду /sbin/depmod -a;
- /etc/rc.fix, вызываемый из /etc/rc и служащий для вызова дополнительных функций; по умолчанию он выполняет только проверку Иксовых шрифтов;
- /etc/rc.local — дополнительный сценарий неопределённого назначения, в который обычно помещают всякую всячину, не достойную места в главных сценариях инициализации; по умолчанию пуст.
Главный конфигурационный файл системы — /etc/rc.conf. В нём определяются:
- шрифт и клавиатурная раскладка для консоли (по умолчанию чистая латиница и us, соответственно);
- часовой пояс;
- имя хоста, если необходимо;
- программа для записи лог-файлов (по умолчанию sysklogd);
- список стартовых служб (демонов), запускаемых при инициализации системы (по молчанию он предельно аскетичен, и содержит только cron и net.
Сами сценарии запуска стартовых служб находятся в каталоге /etc/rc.d, и в свежеустановленной системе также не многочисленны, обеспечивая лишь работу сети, удалённого доступа по ssh, периодических запуск заданий и ещё несколько операций из числа самых необходимых.
Впрочем, по умолчанию сетевое соединение у нас как раз и отсутствует: при инсталляции автоматически конфигурируется только loopback-интерфейс и некий условный ethernet-интерфейс, подразумевающий статический IP-адрес. Так что с настройки сети нам и придётся начать — без этого невозможна доустановка пакетов, а их, как я уже говорил, в свежеинсталлированной системе не густо.
Запуск сетевого соединения осуществляется файлом /etc/rc.d/net. Открываем его в текстовом редакторе и редактируем должным образом. То есть, в случае использования провайдером DHCP в секциях start и stop убираем все строки, относящиеся к интерфейсу ethernet, а вместо них вписываем следующие:
start) ... # ethernet /sbin/dhcpcd -t 10 -h hostname eth0 ;; stop) /usr/bin/killall -q /sbin/dhcpcd ... ;;
Значение опции -h указывается в соответствие с требованиями провайдера, обычно его можно просто опустить. И очевидно, что строки, относящиеся к loopback-интерфейсу, трогать не нужно.
Если провайдер использует VPN-авторизацию — придётся каким-то образом вытаскивать, собирать и устанавливать порт pptp, имеющийся в одной из пользовательских коллекций, а потом настраивать его в соответствие с реалиями данной сети.
Однако предположим, что настройка сети (после перезапуска машины или реинициализции системы) прошла благополучно. Теперь можно воспользоваться портами CRUX для доустановки нужных пакетов. Из которых первейшим я полагаю gpm — без консольной мыши всякого рода настроечные манипуляции кажутся мне неудобными.
Само по себе обращение с портами мы сейчас не будем рассматривать — этому планируется посвятить отдельную заметку. Поэтому чисто конспективно изложу последовательность действий.
Перво-наперво делаем доступной категорию портов contrib (именно в ней «живёт» gpm):
# mv /etc/ports/contrib.rsync.inactive /etc/ports/contrib.rsync
Затем закачиваем себе дерево портов:
# ports -u
Переходим в каталог нужного порта:
# cd /usr/ports/contrib/gpm
Собираем порт:
# pkgmk -d
Устанавливаем образовавшийся в результате этой операции бинарный пакет:
# pkgadd gpm#1.20.6-1.pkg.tar.gz
Обращаю внимание на символ # в имени пакета перед номером версии: именно он отличает пакеты, собранные из коллекции портов CRUX, от любых других тарбаллов.
Теперь службу консольной мыши надо активизировать. Обычно достаточно вписать имя запускающего её сценария — gpm (этот файл волшебным образом появился в каталоге /etc/rc.d/ после установки пакета), — в нужное место /etc/rc.conf:
SERVICES=(cron net gpm)
Работает со всеми USB-мышами и ноутбучными тачпадами, с которыми я сталкивался в последнее время. Если нет — придётся подправить собственно сценарий /etc/rc.d/gmp на предмет правильности имени файла устройства и (или) его протокола. Как — описывалось бессчётное число раз.
Вернёмся, однако, к нашему главному конфигу. Следующее, что нужно в нём поправить — это указание на часовой пояс. Все возможные значения вытаскиваем из каталога /usr/share/zoneinfo/. Например:
TIMEZONE=Europe/Moscow
В дальнейшем можно доустановить порт ntp (включённый в категорию contrib), как описано выше, для регулярной синхронизации с серверами точного времени. Послденее потребует дописать соответствующю стартовую службу в список таковых:
SERVICES=(cron net ntpd gpm)
И последнее, что надлежит сделать с главным конфигом — выполнить русификацию консоли. Для чего требуется указать экранный шрифт и раскладку клавиатуры. Будем исходить из гипотезы, что мы относим себя ко всему прогрессивному человечеству, прочно перешедшему на локаль UTF-8. В этом случае со шрифтом на скорую руку можно поступить так:
FONT=LatArCyrHeb-16
В случае, если он не будет устраивать эстетически (а скорее всего не будет) — позднее можно выбрать один из портов пакета terminus-font (он в нескольких вариантах доступен в разных пользовательских коллекциях), и выбрать более подходящий. А пока все доступные шрифты находятся в каталоге /usr/share/kbd/consolefonts/.
А вот раскладку для UTF8 потребуется предварительно скачать (например,
KEYMAP=ru-utf
На этом, однако, русификация не заканчивается. Экономичность CRUX’а заключается также и в том, что по умолчанию в системе нет ни одной локали, кроме C. Так что нужную нам (а мы договорились, какая нам нужна) надо сгенерировать таким образом:
# localedef -i ru_RU -f UTF-8 ru_RU.utf8
Дальше можно поступить двояким образом. Первый способ — поместить строку
export LANG=ru_RU.utf8
в файл /etc/profile. В этом случае системная локаль будет одинаковой для всех пользователей. Второй вариант — указать ту же строку в профильном файле командной оболочки пользователя, каковой выступает bash, то есть вписать её в ~/.bashrc. А для администратора системы сохранить умолчальную локаль, то есть в файл /root/.bashrc вписать строку
export LANG=C
Для меня это вопрос привычки, но в принципе к тому есть и некоторые резоны, на которых задерживаться не буду.
Правда, в конфиг root’а эту строку вписать легко. А вот для пользователя придётся сначала создать аккаунт — мы же помним, что при установке на эту тему не говорилось ни слова.
Из подручных средств управления аккаунтами по умолчанию мы в CRUX’е располагаем одним — /usr/sbin/useradd. Это голая командная утилита, так что все атрибуты пользовательской учётной записи (пароль, командную оболочку, домашний каталог и так далее) нужно задать как значения соответствующих опций. Каких именно — в краткой форме можно узнать, дав эту команду без опций и аргументов. Ну а за подробностями — как обычно, к тёте Мане…
Вот теперь можно заняться редактированием ~/.bashrc. Думаю, большинство потенциальных пользователей CRUX’а уже имеют свой любимый конфиг для bash’а, который остаётся только скопировать в свой домашний каталог. Правда, тут я столкнулся с незадачей — и совершенно неожиданной.
А именно, переписав свой .bashrc, который верой и правдой служит мне много лет, и перелогинившись, я с удивлением обнаружил, что он просто игнорируется: то есть и локаль оказывается не установленной, и псевдонимы команд не работают, и пути работают только те, что прописаны в /etc/profile по умолчанию. Проверил для root’а — то же самое. В чём дело — так и не понял. Нашёл решение, может быть, и не изящное, но работающее: вписал в /etc/profile строку
source ~/.bashrc
После чего всё пришло в норму.
Надо сказать, что на этом неожиданности CRUX’а не закончились. Однако они относятся уже к другой области. А первичные настройки можно считать выполненными — по крайней мере, главные. И те, которые я упомнил. Если упустил что-то важное — пишите, дополню.
Собираем порт с опциями d (download) i (install)
# pkgmk -d -i
Если устанавливаем статический IP, не забываем в /etc/resolv.conf прописать адреса DNS серверов