OpenRC, альтернатива systemd

From Manjaro Linux
Jump to: navigation, search

OpenRC - основанная на init система, поддерживаемая разработчиками Gentoo, и взаимодействующая с программой, обеспечивающей запуск компонентов системы, как правило sysvinit. Это не замена sysvinit.

Это альтернатива systemd для тех пользователей, кто хотел бы иметь больший контроль над своей системой, и при этом не нуждается во всех компонентах, предоставляемых и автоматически запускаемых systemd.

Установка

OpenRC доступна из репозиториев Manjaro устанавливается так:

sudo pacman -S openrc-base

Результат ввода команды в терминале выглядит так:

$ sudo pacman -S openrc-base
:: 11 объектов в группе openrc-base:

:: Репозиторий community
   1) cronie-openrc  2) cryptsetup-openrc  3) dbus-openrc  4) device-mapper-openrc  5) dhcpcd-openrc  6) glibc-openrc  7) inetutils-openrc  8) lvm2-openrc
   9) mdadm-openrc  10) netifrc  11) udev-openrc

Выберите вариант (по умолчанию=все): 
разрешение зависимостей...
проверка конфликтов...
:: cronie-openrc и systemd-sysvcompat конфликтуют. Удалить systemd-sysvcompat? [y/N] y
:: dbus-openrc и dbus конфликтуют (dbus-core). Удалить dbus? [y/N] y

Пакеты (15) dbus-1.10.0-4 [удаление]  openrc-0.18.3-1  systemd-sysvcompat-227-1 [удаление]  sysvinit-2.88-16  cronie-openrc-20151014-2
            cryptsetup-openrc-20151014-1  dbus-openrc-1.10.0-3  device-mapper-openrc-20151020-1  dhcpcd-openrc-20151014-1  glibc-openrc-20151014-1
            inetutils-openrc-20151014-1  lvm2-openrc-20151014-1  mdadm-openrc-20151014-1  netifrc-0.3.1-7  udev-openrc-30-3

Будет загружено:  0,58 MiB
Будет установлено:  2,26 MiB
Изменение размера:  1,28 MiB

:: Приступить к установке? [Y/n] 

После устаноыки пакетов группы openrc-base, OpenRC будет загружаться по-умолчанию вместо systemd. Учтите, что он будет загружаться в командную строку, поскольку соответствующий сервис для графического менеджера еще не был установлен.

При установке openrc-base, может появиться следующие сообщения:

run 'rc-update add dbus default'
run 'rc-update add cronie default'

Запуск данных команд добавит соответствующие сервисы в список запуска. Например, выполнив команду:

sudo rc-update add dbus default

вы добавите сервис dbus в список запуска по-умолчанию и будет загружаться при старте системы автоматически.

dbus (шина системных сообщений) и cronie (для cron) некоторые из сервисов, которые могут быть активированы.

Дополнительные пакеты

Дисплейный менеджер

Для загрузки дисплейного менеджера должен быть установлен пакет displaymanager-openrc.

После его установки нужно отредактировать файл /etc/conf.d/xdm чтобы соответствовать менеджеру дисплея.

Например, чтобы использовать lightdm, измените строку:

DISPLAYMANAGER="xdm"

на

DISPLAYMANAGER="lightdm"

В итоге сервис xdm может быть добавлен в список запуска по умолчанию:

sudo rc-update add xdm default
Замечание: lightdm и lightdm-greeter (или lightdm-gtk-greeter) должнны быть установлены для использования lightdm в качестве менеджера дисплея.

Альтернативой lightdm является LXDM. Однако версия в репозиториин не будет автоматически запускать ck-session при входе в систему. Можно использовать lxdm-consolekit из AUR.

За более детальной информацией о consolekit обратитесь в раздел Consolekit.

Звук(ALSA)

Можно установить пакет alsa-utils-openrc. Чтобы alsa автоматически запускалась при старте системы, после установки запустите:

sudo rc-update add alsasound default

Network Manager

По умолчанию dhcpcd доступен через netifrc. Но если кто-то пользуется беспроводной сетью для выхода в интернет, или нужен графический апплет сети, то нужно установить networkmanager-openrc.

networkmanager-openrc заменяет обычный пакет networkmanager в репозитории. Также необходимо установить consolekit иpolkit-consolekit, который заменяет обычный polkit из репозитория.

Еще возможны другие варианты, как wicd-openrc иconnman-openrc.

Consolekit

Можно установить пакет consolekit-openrc. Consolekit поддерживают многопользовательские настройки, монтирование разделов неавторизованными пользователями и проч. Больше подробностей на Gentoo-Wiki.

Consolekit также дает возможность обыным пользователям (не root) выключать и перезагрузать систему, если рабочее окружение это поддерживает. См. раздел Using Consolekit чтобы узнать, как его установить и настроить.

openrc-desktop

Метапакет openrc-desktop предназначен для установки большинства вышеуказаных пакетов. Например:

$ sudo pacman -S openrc-desktop
:: There are 6 members in group openrc-desktop:
:: Repository community
   1) acpid-openrc  2) alsa-utils-openrc  3) avahi-openrc  4) consolekit-openrc
   5) displaymanager-openrc  6) gpm-openrc

Enter a selection (default=all): 
resolving dependencies...
looking for inter-conflicts...

Packages (6): acpid-openrc-20140614-1  alsa-utils-openrc-20140614-1
              avahi-openrc-20140614-1  consolekit-openrc-20140614-1
              displaymanager-openrc-20140614-1  gpm-openrc-20140614-1

Total Installed Size:   0.12 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n]

Прочее

ACPI

Для управления событиями acpi можно установить и задействовать acpid-openrc. (За подробностями сюда).

Логирование

Логер можно выбрать из metalog-openrc, syslog-ng-openrc, и rsyslog-openrc, установив пакет и задействовав соответствующий сервис.

Приостановка/Засыпание

Для приостановки работы и перевода в спящий режим чере командную строку можно установить pm-utils. Также может потребоваться пакет upower-pm-utils, если эти режимы не работают. См. раздел troubleshooting для решения возможных проблем.

Замечание

Если прежде использовался plymouth, вам потребуется отредактировать /etc/mkinitcpio.conf, чтобы удалить перенаправление plymouth', потому что plymouth не может корректно работать с OpenRC. Строка перенаправления должна выглядеть так:

HOOKS="base udev autodetect modconf block resume filesystems keyboard keymap fsck"

После выполнения операции необходимо перечитать initrd:

sudo mkinitcpio -p linux<version>

Например,

sudo mkinitcpio -p linux314

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

Добавление и удаление сервисов

Добавление сервисов в загрузку:

sudo rc-update add <service> <runlevel>

Например,

sudo rc-update add sshd default

runlevel can be skipped if adding services to the current runlevel, ie:

sudo rc-update add sshd

Удалить сервис из списка запуска можно командой:

sudo rc-update del <service> <runlevel>

Check running services

To check what services are running, one can type:

rc-status

Start / stop / restart services

To start / stop / restart services immediately, the rc-service command can be used. For example:

sudo rc-service networkmanager restart

Some common services

To enable printing support, the cups-openrc package can be installed. For example,

$ sudo pacman -S cups-openrc
resolving dependencies...
looking for inter-conflicts...

Packages (1): cups-openrc-20141014-1

Total Installed Size:   0.01 MiB
Net Upgrade Size:       0.00 MiB

:: Proceed with installation? [Y/n] 

The service for it is cupsd.

$ sudo rc-service cupsd start
* Starting cupsd ...                                                                                                       [ ok ]

For ssh, the openssh-openrc package can be installed.

The service for it is named sshd.

Tip: All services present can be listed with the rc-service --list command.

Using Consolekit

Additionally, if not already done, consolekit can be installed to perform root actions like shutting down or restarting system as non-root user from your Desktop Environment.

Consolekit can be installed in the following way:

sudo pacman -S consolekit-openrc polkit-consolekit cgmanager-openrc

The output looks like the following:

$ sudo pacman -S consolekit-openrc polkit-consolekit cgmanager-openrc
resolving dependencies...
looking for inter-conflicts...
:: polkit-consolekit and polkit are in conflict. Remove polkit? [y/N] y

Packages (9): cgmanager-0.37-2  consolekit-1.0.0-3  libnih-1.0.3-2  openrc-core-0.17-2  polkit-0.112-2 [removal]  cgmanager-openrc-20150911-1
              consolekit-openrc-20150911-1  polkit-consolekit-0.113-1

Total Download Size:    0.92 MiB
Total Installed Size:   4.44 MiB
Net Upgrade Size:       2.84 MiB

:: Proceed with installation? [Y/n] 

After installing it can be enabled with sudo rc-update add consolekit and would be activated after a reboot. To check that consolekit is running and a ck-session was started, the following command can be used:

ck-list-sessions

The output looks like the following:

Session1:
	unix-user = '1000'
	realname = 'Aaditya Bagga'
	seat = 'Seat1'
	session-type = 
	active = TRUE
	x11-display = ':0'
	x11-display-device = '/dev/tty7'
	display-device = 
	remote-host-name = 
	is-local = TRUE
	on-since = '2014-06-15T13:29:58.652929Z'
	login-session-id = 

If you are not getting any output, then maybe a ck-session is not being started by your display manager.

To start a ck-session and X session from the command line following syntax could be used:

ck-launch-session <session-name>

For example,

ck-launch-session startxfce4

Some gotcha's

Display managers that are known to work with consolekit are lightdm, lxdm (via lxdm-consolekit), kdm (via kdebase-workspace-consolekit), and mdm (via mdm-nosystemd). Have a look at the Display Manager section for more info.

If you start a graphical session from the command line, this forum post may be of some help.

If you use Openbox or another Window Manager along with oblogout, then oblogout-consolekit from the AUR can be used for having a graphical logout interface.

Replacing systemd with eudev (advanced users)

With OpenRC being used as init system, the role of systemd is reduced to that of a udev provider, and for compatibility reasons.

eudev, developed by the Gentoo folks, can be used as replacement. Note that removing systemd could cause some incompatibilities with existing software.

The steps to install eudev are as follows:

sudo pacman -S eudev eudev-systemdcompat

The output looks like the following:

$ sudo pacman -S eudev eudev-systemdcompat
resolving dependencies...
looking for conflicting packages...
:: eudev and libsystemd are in conflict (libgudev-1.0.so). Remove libsystemd? [y/N] y
:: eudev-systemdcompat and systemd are in conflict. Remove systemd? [y/N] y
warning: dependency cycle detected:
warning: eudev-systemdcompat will be installed before its eudev dependency

Packages (4) libsystemd-219-6 [removal]  systemd-219-6 [removal]  eudev-3.0-1  eudev-systemdcompat-219-2

Total Download Size:     0.95 MiB
Total Installed Size:    7.09 MiB
Net Upgrade Size:      -18.78 MiB

:: Proceed with installation? [Y/n] 

After the above steps systemd would be uninstalled and replaced by eudev and its counterparts.

Possible issues

Generic

Some packages depend on systemd components like systemd-tmpfiles and systemd-sysusers in their post install tasks; the openrc-systemdcompat package from the AUR can be installed to compensate for these missing components.

Troubleshooting

Boot logs

The boot logs for OpenRC are stored in /var/log/rc.log

Get warning at shutdown

If at shutdown there is a message like:

WARNING: /usr/lib/rc/cache is not writable!

Then this directory can be created as:

sudo mkdir /usr/lib/rc/cache

Error about /etc/sysctl.conf not found

It can be created with:

sudo touch /etc/sysctl.conf

Enable Swap (for GPT partitions)

If you were using systemd on a GPT partitioned hard disk, then you may need to enable swap via /etc/fstab. This is so because systemd handled swap automatically on GPT partitions, and gave error if it was mounted via fstab.

I added the following entry to my /etc/fstab

# /dev/sda10
UUID=0c3e9434-bc5c-461c-a5e4-4e9fe5f9a149	swap	swap	sw	0	0

Using tmpfs

systemd used to set a tmpfs by default; to set it manually via /etc/fstab, the following lines can be added:

tmpfs		/tmp		tmpfs   nodev,nosuid          	0  	0

See the Arch Wiki for more details.

Module auto-loading

For OpenRC, the modules to be loaded at boot are specified in /etc/conf.d/modules rather than being present as individual files in /etc/modules-load.d

The required modules can be manually moved over. An example /etc/conf.d/modules file looks like the following:

# You should consult your kernel documentation and configuration
# for a list of modules and their options.

modules="vboxdrv"

Setting hostname

If your hostname is being displayed as localhost even if there a different hostname in /etc/hostname, then you probably need to change your hostname in /etc/conf.d/hostname

Setting keymap

The keymap for the console can be set via editing /etc/conf.d/keymaps.

For X11 (graphical part of the system), it can be set via /etc/X11/xorg.conf.d/20-keyboard.conf

For more information have a look at the Gentoo wiki (with the difference that in Arch/Manjaro the keymaps are stored in /usr/share/kbd/keymaps [1]).

Setting Hardware clock

Can be done by editing /etc/conf.d/hwclock

Shutting down / rebooting

To shutdown the system, the poweroff command can be used.

Similarly to reboot, the reboot command can be used.

X does not start from a virtual terminal

With Xorg-1.16, Arch Linux decided to make X rootless using systemd-logind [2]. This means that using startx from a virtual terminal will possibly not work for users of OpenRC init system.

The workaround is to create a file /etc/X11/Xwrapper.config with the contents:

# Xorg.wrap configuation file
needs_root_rights = yes

Reference: Arch forum

Input devices not working

With eudev-3.0, a new input group was introduced; you could try adding your user to it.

sudo gpasswd -a <user> input

Reference: https://github.com/gentoo/eudev/issues/107

MySQL service not working

See: https://forum.manjaro.org/index.php?topic=19131.msg182573#msg182573

MySQL/MariaDB installation seems to have changed slightly, an extra step may be required before starting the service; see the Arch wiki for more details.

Советуем почитать

The Arch Wiki

OpenRC on Arch Linux

Support

Following is a link to this page's forum counterpart where you can post any related feedback: [3]