Архив метки: systemd

Леннарт Поттеринг — Systemd для администраторов

systemd111 Год выхода: 2014

Автор: Ленарт Поттеринг

Перевод: Сергей Пташник

Язык: русский

Лицензия: CC-BY-SA 3.0 Unported

Страниц: 107

 

Ssytemd — это новая система инициализации, пришедшая на смену уже устаревшей SysVinit. Systemd начала использоваться в Fedora начиная с версии 14, на данный момент, она используется в большинстве популярных дистрибутивов, это OpenSUSE, RedHat и даже Ubuntu. Читать

Автозапуск скрипта при загрузке ОС с помощью Systemd на примере x11vnc. Service-файлы.

Автозапуск скрипта при загрузке ОС с помощью Systemd на примере x11vnc. Service-файлы.

С массовым переходом на systemd, вопрос запуска скрипта от имени пользователя root при загрузке ОС, стал всё чаще подниматься на форумах и в умах линуксоидов, которым ещё не приходилось сталкиваться с этой новой системой инициализации. Меня этот вопрос так же не обошёл стороной, когда пришлось внедрять корпоративный дистрибутив, использующий systemd и появилась необходимость запускать при загрузке ОС x11vnc от имени пользователя root. Выяснилось, что в systemd, эта задача решается с помощью service-файлов, имеющих простой для понимания формат и создаваемых по стандартному, для этих целей, шаблону. Файлы эти располагаются в /lib/systemd/system (системные) и /etc/systemd/system (эта директория приоритетнее первой для systemd) и имеют имена вида: название.service. Загляните в эти директории, просмотрите несколько service-файлов имеющих знакомые названия типа network.service или cups.service и в общих чертах всё станет ясно. Содержание созданного мной service-файла таково:

[root@comp-core-2-81b58d system]# cat startvncserver.service
[Unit]
Description=Start vnc server /usr/bin/startvncserver

[Service]
Type=oneshot
ExecStart=/usr/bin/startvncserver
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

Где, Description=Start vnc server /usr/bin/startvncserver — Описание сервиса.
Type=oneshot — Задание метода окончания периода запуска сервиса. Oneshot означает что действие, выполняемое сервисом должно быть окончено до запуска следующего сервиса.
RemainAfterExit=yes — Используется в связке с предыдущей опцией и говорит systemd о том, что данный сервис хоть и завершит свою работу после выполнения скрипта, но должен оставаться со статусом active.
ExecStart=/usr/bin/startvncserver — Путь к скрипту для выполнения.
WantedBy=graphical.target — Параметр, который даёт понять systemd, на какой стадии загрузки системы нужно выполнить данный сервис.  multi-user.target соответствует init3. graphical.target соответствует init5.

Для запуска, остановки, перезапуска, просмотра статуса  и включения в автозгрузку сервиса (и соответственно нашего скрипта), используются стандартные команды systemd.
Запустить:

[root@comp-core-2-81b58d system]# systemctl start startvncserver.service

Остановить:

[root@comp-core-2-81b58d system]# systemctl stop startvncserver.service

Перезапустить:

[root@comp-core-2-81b58d system]# systemctl restart startvncserver.service

Посмотреть статус:

[root@comp-core-2-81b58d system]# systemctl status startvncserver.service

И самое важное! Для запуска сервиса при загрузке ОС, его нужно включить:

[root@comp-core-2-81b58d system]# systemctl enable startvncserver.service

С автозагрузкой скрипта разобрались, теперь разберём сам скрипт и опции запуска vnc сервера x11vnc. В нашем случае, подключаются клиенты только из локальной сети, поэтому шифрование мы не используем. Из необходимых требований — запрет завершения процесса от имени пользователя и запрет чтения пароля на подключение пользователем. Поэтому мы запускаем x11vnc от имени root и храним пароль в файле, доступном на чтение только ему.

[root@comp-core-2-81b58d system]# cat /usr/bin/startvncserver

#!/bin/bash
while [[ $(test -f /var/run/xauth/A* ; echo $?) -ne 0 ]]
do
sleep 1s
done
/usr/bin/x11vnc -noipv6 -shared -forever -passwdfile /etc/x11vncpasswd -bg -display :0 -auth /var/run/xauth/A*

Где, используя цикл while мы задаём проверку того, появился ли файл «магической печенки», необходимый для запуска vnc сервера и если он ещё не появился, то ждём 1 секунду и проверяем вновь. Когда необходимый файл появляется, запускаем x11vnc со следующими опциями:

-noipv6 — Не использовать ipv6.
-shared — Обеспечить возможность подключения одновременно нескольких клиентов. Без этой опции, при подключении одного клиента, второй уже подключиться не сможет.
-forever — Не завершать работу сервера после подключения первого клиента.
-passwdfile /etc/x11vncpasswd — Указать, где искать пароль для подключения. Пароль содержится в текстовом файле, без шифрования, либо создаётся командой x11vnc -storepasswd в интерактивном режиме и записывается в файл ~/.vnc/passwd в шифрованном виде. При использовании первого варианта, нужно выставить права на чтение файла только пользователю root и соответственно запускать x11vnc от имени root, что я в общем и описываю.
-bg — запустить процесс на заднем фоне, то есть отвязать его от текущего терминала.
-display :0 — номер дисплея для подключения. По умолчанию в одномониторных системах это :0.
-auth /var/run/xauth/A* — путь к файлу с магической печенкой 🙂 То есть файлу авторизации X сервера. Где он лежит в вашей системе, можно выяснить так:

[yar4e@yar4e-admin ~]$ ps aux | grep X
yar4e     6888  0.0  0.0    568   144 pts/5    D+   14:39   0:00 grep X
root      7324  0.0  0.9  42356 19852 tty7     Ss+  Mar26  26:19 X :0 vt7 -auth /var/run/xauth/A:0-uyXr3I

Всё вышеописанное реализовывалось на Alt Linux P7 TDE и может незначительно отличаться на вашем дистре.

Автор: Yar4e

Монтирование дисков средствами Systemd.

Предисловие.

С переходом дистрибутивов Linux на Systemd, мы не редко сталкиваемся с особенностями/багами реализации в этой системе инициализации той или иной привычной нам вещи. Хоть Systemd и пытается сохранять совместимость с привычными нам способами настройки системы, но часто в итоге получается не так всё красиво, как на картинке. В данной заметке, речь пойдёт о том, как в Systemd взаимодействует с файлом /etc/fstab, почему сетевые диски, прописанные в этом файле раньше монтировались, а с приходом новой системы инициализации перестали и рассмотрим родной, для Systemd, способ монтирования дисков.

Всё ниже описанное актуально для Systemd 201 и и основанного на нём дистрибутива Alt Linux P7. Так как Systemd ещё находится в фазе активной разработки, то со временем исправят описанные баги и изменят/добавят опции или синтаксис (или уже возможно что-то изменилось, так как текущая версия Systemd — 216), но в общем информация будет полезна. Читать

linux: русский в консоли archlinux

Возникла проблема со шрифтами в виртуальной консоли. Квадратики вместо кириллицы. В графическом эмуляторе терминала, разумеется, всё нормально, а в /dev/ttyX беда. Выяснилось, что всё портит systemd, сначала загружая шрифты и настраивая их согласно vconsole.conf как и положено, а потом подгружая drm-модуль видеокарты, который создаёт новый фреймбуфер (например, у меня /dev/fb0), в котором уже никаких настроек не делается.

Считаю, что это косяк. Когда-нибудь это должны поправить, вероятно. Это давно было уже, до сих пор актуально, сначала долго копался, потом появилось несколько материалов в сети. Примерный механизм описан здесь. Основная тема на archlinux.org.ru здесь.

Т.к. у меня грузится с локальной ФС, то я ограничился способом добавления

MODULES="i915"

(нужно подставить свой модуль: i915, nouveau, radeon итд) в /etc/mkinitcpio.conf
и перегенерацией initramfs:

mkinitcpio -p linux

Проверить в этом ли дело можно руками поставив нужный шрифт (они лежат в /usr/share/kbd/consolefonts/):

setfont cyr-sun16[.psfu.gz]

Автор: Дмитрий

archlinux перевод на systemd

Как известно, 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.

Автор: Дмитрий