CRUX: инициализация и настройка

Автор: Алексей Федорчук

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 потребуется предварительно скачать (например, отсюда) и скопировать в каталог /usr/share/kbd/keymaps/i386/qwerty. После чего вписать:

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’а не закончились. Однако они относятся уже к другой области. А первичные настройки можно считать выполненными — по крайней мере, главные. И те, которые я упомнил. Если упустил что-то важное — пишите, дополню.

CRUX: инициализация и настройка: 1 комментарий

  1. Собираем порт с опциями d (download) i (install)
    # pkgmk -d -i
    Если устанавливаем статический IP, не забываем в /etc/resolv.conf прописать адреса DNS серверов

Обсуждение закрыто.