Как известно, archlinux к данному моменту почти полностью перешёл на systemd. Старый механизм sysvinit/initscripts тоже почти полноценно пока поддерживается через костыли. Чтобы вату не катать, я тоже стал переходить. В данный момент переход довольно подробно описан на арчвики, но на момент накидывания черновика этой заметки всё только начиналось, к тому же у меня чуть более сложный случай, т.к. стояло несколько специфических сервисов итд. Чтобы сразу всё не сломалось (а оно может даже если ничего не трогать), переходить решил постепенно, в принципе, на арчвики так же рекомендовано сейчас.
Смешанная установка systemd+sysvinit+initscripts
Сам systemd уже должен стоять по-любому, но если отдельно не настраивалось, то грузится пока старый init. Попробуем прописать init=/bin/systemd в параметры ядра. Очевидные вещи разжёвывать не нужно, если grub2, то в /etc/default/grub
прописываем в GRUB_CMDLINE_LINUX_DEFAULT="init=/bin/systemd"
, и далее grub-mkconfig, как положено.
Из /etc/rc.conf
надо убрать лишние демоны. Самое простое: после перезагрузки надо изучить что поднялось (cups, sshd итд), и это убрать из DAEMONS в /etc/rc.conf
. По идее, все стандартные службы должны уже иметь systemd-unit и корректно подняться. У меня остались в DAEMONS network, а также мои специфические activemq и т.д.
Это и ниже всё нужно будет включить руками через systemctl enable, читать справку по systemd в той же арчвики по ссылке выше.
Если согласно предыдущим рекомендациям (с archlinux.org или при апдейтах) журналирование меняли, то не забыть изменить в /etc/syslog-ng/syslog-ng.conf
на systemd-шный.
source src {
...
unix-dgram("/run/systemd/journal/syslog");
#unix-dgram("/dev/log");
...
};
Ещё у меня был netfs, теперь он не нужен, всё работает искаропки. Но надо только включить не забыть (как и раньше) rpcbind, для него тоже есть нативный юнит.
# systemctl enable rpcbind
Также надо не забыть заенаблить нужный dm для графического входа (у меня lxdm).
Перезагружаемся и (скорее всего) радуемся.
Смешанная установка systemd+initscripts
Это вариант предыдущего этапа, но фиксируем systemd как init по дефолту. Ставим systemd-sysvcompat
, оно заменяет sysvinit
и прописывает линки init на systemd и прочие sysvinit бинарники на systemctl. Так что init= из grub убираем. Перегружаемся.
После проверки и написания недостающих юнитов, когда rc.conf опустел можно приступить к следующему этапу. На что, возможно, придётся до этого обратить внимание:
Сеть
Если было настроено как служба network (а не через NetworkManager или другие механизмы), то оно почти как служба осталась, но с нюансами. Итак, из rc.conf надо убрать настройку сети и загрузку демона network, а сеть включить нативно как-то так (если через dhcp, например):
systemctl enable dhcpcd@eth0
Если нужно грузить модуль ядра для сети и т.д., см. ссылку на арчвики выше.
Группы юзера
Нужно не забыть выкинуть всех локальных юзеров из дополнительных групп (audio, lock, scan итд итп) кроме wheel пожалуй только, это всё тоже написано в инструкции к арчвики. Походу, проблемы иначе действительно возникают.
Чистая установка systemd
Это такой окончательный этап на арчвики, но на самом деле отличается от предыдущего только тем, что не стартует костыль который запускает все инитскриптовские скрипты (которые называются у этого костыля легаси-юниты) и вообще как-либо парсит rc.conf
. Ну и удаляем initscripts, раз он не нужен больше. Удаляются также и rc.conf, rc.local, rc.local.shutdown.
Автор: Дмитрий