LINUX.ORG.RU

Вопросы миграции на systemd в gentoo

 ,


1

2

Пробую сабж в деле. Возникло несколько вопросов:

  • Совместно с openrc использовал Early userspace mounting Однако если я все понял правильно systemd вообще плевать на /etc/fstab ? Где в systemd настраивать необходимость проверки разделов ?
  • На openrc для distfiles использовал связку nfs+autofs. Как ту же связку правильно использовать с systemd ?
  • И самый важный для меня вопрос - на openrc использовал squashed portage tree как правильно её же поднять с systemd с условием того что поддержку старых init.d/* скриптов из свежего systemd выпилили? Я правильно понимаю что самый простой путь это переписать init.d скрипт в обычный скрипт с параметрами запуска start/stop/reload/… и уже этот скрипт пинать из service файла?

И не думайте что я не умею гуглить. По nfs+autofs пробовал

autofs.service nfs3-client.target nfs4-client.target proc-fs-nfsd.mount rpcbind.service rpcbind.socket rpc.gssd.service rpc.idmapd.service rpc.statd.service sm-notify.service syslog-ng.service var-lib-nfs-rpc_pipefs.mount

и из нескольких оверлеев и из арча. Вроде бы все должно быть ок но на openrc оно работало а на systemd это увы не так.

★★★★★

Последнее исправление: init_6 (всего исправлений: 1)

.service файл для systemd пишется за 10 минут на коленке без проблем. если сам затупишь, можешь писать в гугложаббер mikedmorto dog gmail.com

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

systemd учитывает /etc/fstab

Ну он у меня во время загрузки ″висит″ именно на проверке дисков. Хотя она мне вообще не нужна поскольку для {почти} всех разделов эту функцию берет на себя initramfs. Да и ничего кроме fsck при загрузке у меня больше не выводит. Отсюда и сделал такие выводы.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от init_6

я могу дать тебе доку про systemd где все детально расписано.

ЗЫ я уже год как минимум на боевых с серверах работаю с systemd местами даже LSB скрипты переписал сам под сервисы.

MikeDM ★★★★★
()

Я уже переходил на своей генте на systemd, в итоге система грузилась через раз.ЕМНИП с /etc/fstab никаких проблем небыло.

adolf_jesus
()

Переделал squashed portage tree на обычный bash скрипт с тремя параметрами запуска /usr/local/sbin/squash_portage {start/stop/sync} написал для него

>cat squash.service 
[Unit]
Description=squash portage & layman tree

[Service]
ExecStart=/usr/local/sbin/squash_portage start
ExecStop=/usr/local/sbin/squash_portage stop
ExecReload=/usr/local/sbin/squash_portage sync

[Install]
WantedBy=multi-user.target

Но не работает… Что я делаю не так?

init_6 ★★★★★
() автор топика
Ответ на: комментарий от init_6

непрописаны зависимости (если они нужны) ну и покажи systemctl status squash.service

MikeDM ★★★★★
()

Юзаю systemd с гентой около года, если что - спрашивай.

У systemd с устройствами и fstab очень особые отношения. Работает это так. При старте systemd запускает генератор fstab - утилиту, конвертирующую fstab в юниты. В общем и целом учитывается основная семантика fstab. В итоге fstab преобразуется в набор .mount юнитов. Особенность .mount юнита в том, что он не отработает (выполнит монтирование) до тех пор, пока устройство содержащее раздел не будет запущено. Причем важно понимать, что с т.з. systemd, устройство запущено тогда, когда анонсировано udev. Т.е. даже если по факту устройства есть, но udev их не анонсирует systemd, systemd не будет пытаться выполнить монтирование. Исходя из этих соображений заполнять fstab нужно с оглядкой.

autofs функциональность выполняется запихиванием комбинации noauto,comment=systemd.automount в fstab. Генерированный юнит будет зависить от цели remote-fs в случае nfs.

как правильно её же поднять с systemd с условием того что поддержку старых init.d/* скриптов из свежего systemd выпилили?

В принципе, тебе ничего не мешает выставить openrc в softlevel и дергать напрямую инит скрипт из юнита. Когда соберется squashfs-tools попробую другой способ

vasily_pupkin ★★★★★
()
Ответ на: комментарий от MikeDM

ЗЫ я уже год как минимум на боевых с серверах работаю с systemd

Это по принципу лучше раньше, так как все равно от systemd не убежать?

Я как то даже на десктопе не рискую переходить.

partyzan ★★★
()
Ответ на: комментарий от vasily_pupkin

Нужно дорисовать RemainAfterExit=yes, иначе после завершения скрипта systemd его остановит с ExecStop.

vasily_pupkin ага вот так

cat squash.service 
[Unit]
Description=squash portage & layman tree

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/squash_portage start
ExecStop=/usr/local/sbin/squash_portage stop
ExecReload=/usr/local/sbin/squash_portage sync

[Install]
WantedBy=multi-user.target

дело пошло… но я еще не совсем так как нужно.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

напиши потом кратенький отзыв, что понравилось, что нет

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

Ну а из минусов нет(или я не нашел) нормального мануала по миграции в примерах т.е. вот был к примеру вот такой то init.d мы из него делаем вот то то и теперь оно у нас работает в systemd.

Ну и еще к минусам - service файлы к стандартному минимуму демонов есть… но вот к примеру те же вышеперечисленные nfs, autofs увы но за бортом. Или опять же я не знаю как правильно это в systemd.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от init_6

выключить у systemd

fs_passno в 0 выставить в fstab

nfs, autofs увы но за бортом

Для них не нужны отдельные юниты. autofs вообще реализует systemd

vasily_pupkin ★★★★★
()
Ответ на: комментарий от partyzan

Это по принципу лучше раньше, так как все равно от systemd не убежать?

Я как то даже на десктопе не рискую переходить.

у меня на серверах по большей части OpenSUSE 12.X а там systemd хорошо собрали и интегрировали. Если есть желание поглядеть как там что сделано, поставь себе сюську 12.2 хоть даже в виртуалочку, глянуть на реализацию systemd

MikeDM ★★★★★
()
Ответ на: комментарий от init_6

Кстати, а зачем вообще отдельный скрипт для squashfs?

# grep squash /etc/fstab 
/usr/sportage/portage.sqfs	/usr/sportage	squashfs defaults,loop					0 0
# systemctl start /usr/sportage/
# # systemctl status /usr/sportage/ -a
usr-sportage.mount - /usr/sportage
	  Loaded: loaded (/proc/self/mountinfo)
	  Active: active (mounted) since Сб. 2013-02-09 13:56:45 EET; 1min 15s ago
	   Where: /usr/sportage
	    What: /dev/loop0
	 Process: 11119 ExecMount=/bin/mount /usr/sportage/portage.sqfs /usr/sportage -t squashfs -o defaults,loop (code=exited, status=0/SUCCESS)

февр. 09 13:56:45 BlackICE systemd[1]: Mounting /usr/sportage...
февр. 09 13:56:45 BlackICE systemd[1]: usr-sportage.mount: Directory /usr/sportage to mount over is not empty, mounting anyway.
февр. 09 13:56:45 BlackICE systemd[1]: Mounted /usr/sportage.
vasily_pupkin ★★★★★
()
Ответ на: комментарий от MikeDM

OpenSUSE 12.X а там systemd хорошо собрали и интегрировали

Это.. Я не хочу тебя пугать, но в opensuse systemd «интегрирован» настолько через жопу, что хочется плакать (%

Да и старый он там, к тому же

vasily_pupkin ★★★★★
()
Ответ на: комментарий от anonymous

напиши потом кратенький отзыв, что понравилось, что нет

И самые большие минусы:

  • В gentoo нет никакого virtual/init и ни о каком любом из sys-apps/{openrc/systemd/*} на выбор речи не идет. Т.е. либо все если юзать официальные портежи либо да пилить оверлей и тогда выпилить openrc реально.
  • Старые init.d/* в случае мигрирования почти элементарно переписать в баш скрипты… но нужны функции elog errlog einfo ewarn eerror veinfo vewarn ebegin eend eindent eoutdent и возможно прочие.

Пока что это все.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

а лог-файл бинарный? хочется что-то типа syslog-ng

А не пофиг ли? И да если нужен syslog-ng то для него service готовый есть и можно юзать все вместе.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от vasily_pupkin

Кстати, а зачем вообще отдельный скрипт для squashfs?

У меня в squashfs не только portage но и layman. И там не просто squashfs а aufs+squashfs т.е. еще и rw.

Я понял еще вот что systemd у меня в данный момент «отвязан» от терминала и именно поэтому на tty1 ничего и не ″плюет″. Как правильно настроить systemd таким макаром чтобы по аналогии с openrc все демоны при запуске и выключении системы срали бы на первый терминал а syslog всегда срал бы на свой 12й ?

init_6 ★★★★★
() автор топика
Ответ на: комментарий от init_6

Я понял еще вот что systemd у меня в данный момент «отвязан» от терминала

Это как?

В journal.conf надо запихать нечто типа

ForwardToConsole=yes
TTYPath=/dev/tty12
MaxLevelConsole=info

И проверить, что quet в kernel cmdline нет или подобного

vasily_pupkin ★★★★★
()
Ответ на: комментарий от adolf_jesus

Я уже переходил на своей генте на systemd, в итоге система грузилась через раз.

А я уже переходил на своей генте/дебиане на systemd, в итоге система грузилась нормально, только .service нехватало.

PaxtonFettel
()
Ответ на: комментарий от vasily_pupkin

В journal.conf у меня вообще все было замаскировано а quet в cmdline есть но я не думал что он сделает его вообще немым.

Спасибо!

init_6 ★★★★★
() автор топика
Ответ на: комментарий от PaxtonFettel

А я уже переходил на своей генте/дебиане на systemd, в итоге система грузилась нормально, только .service нехватало.

Возможно я и мог разобратся в проблеме но после того как узнал что будет форк udev'а решил что в генте systemd по умолчанию не будет никогда и откатился на openrc.

adolf_jesus
()
Ответ на: комментарий от vasily_pupkin

Это.. Я не хочу тебя пугать, но в opensuse systemd «интегрирован» настолько через жопу, что хочется плакать (%

Да и старый он там, к тому же

подробности в студию =)

MikeDM ★★★★★
()
Ответ на: комментарий от vasily_pupkin

Ииии? systemd поддерживает LSB поэтому и все работает.

и вовсе не старый релиз там. согласен есть небольшое отставание но в пределах допустимого, это же ни дебиан +)

MikeDM ★★★★★
()
Ответ на: комментарий от vasily_pupkin

сейчас systemd-44-10.8.1.x86_64

неужеле в федоре убежало в перед на десятки версий?

я сильно не слежу за версиями systemd, я его просто использую.

MikeDM ★★★★★
()
Ответ на: комментарий от vasily_pupkin

подробности в студию. просто любопытно чего там еще наворотили.

MikeDM ★★★★★
()

В общем можно сказать что победил.

Непонятно осталось к примеру со swap. Он у меня вот такой вот

grep swap /etc/fstab 
/dev/mapper/vg-swap	none			swap	defaults			0 0

но на момент старта systemd все уже подключено при помощи initramfs. Однако при включенном во fstab swap-е почему то systemd именно на нем сбоит при старте системы. Сейчас еще буду экспериментировать со swap-ом. Пересоздам его… в общем буду смотреть.

Из самых больших минусов systemd в gentoo на данный момент это отсутствие многих service файлов. Но спасибо exherbo, archlinux там они есть :) И да в случае перехода на systemd старые скрипты придется переписывать на bash а в нем нет elog, errlog, einfo, ewarn, eerror, veinfo, vewarn, ebegin, eend, eindent, eoutdent и прочих функций. Т.е. да опять же выковыриваем из старого /etc/init.d/functions.sh либо придумываем сами…

Из плюсов systemd скорость. Опять же если я все правильно понял то потребность в net-fs/autofs вообще отпадает. В systemd есть автомонтирование.

init_6 ★★★★★
() автор топика
Ответ на: комментарий от vasily_pupkin
# cat /proc/swaps 
Filename				Type		Size	Used	Priority
# grep swap /etc/fstab 
/dev/mapper/vg-swap	swap			swap	defaults			0 0
# cat /proc/swaps
Filename				Type		Size	Used	Priority
# systemctl status dev-mapper-vg\x2dswap.device
dev-mapper-vgx2dswap.device
	  Loaded: loaded
	  Active: inactive (dead)

# udevadm info --query=all /dev/mapper/vg-swap | grep systemd
E: TAGS=:systemd:

Если после этого выполнить к примеру swapon -a то все без проблем работает. И да swap пробовал и так как есть и через UUID пока что одинаково.

Еще не совсем понятно с моим велосипедом для замены net-fs/autofs cредствами systemd. Итак есть такой велосипед:

# cat /etc/systemd/system/net.mount 
[Unit]
Description=/net NFS share
Wants=rpcstatd.service
After=network.target

[Mount]
What=server:/share
Where=/net
Type=nfs
Options=nfsvers=3,rw,async

После запуска системы его нет и в mount закономерно тоже на его счет пусто

# systemctl status net.mount
net.mount - /net NFS share
	  Loaded: loaded (/etc/systemd/system/net.mount; enabled)
	  Active: failed (Result: exit-code) since Пн. 2013-02-11 12:24:37 EET; 9min ago
	   Where: /net
	    What: server:/share
	 Process: 484 ExecMount=/bin/mount server:/share /net -t nfs -o nfsvers=3,rw,async (code=exited, status=32)
	  CGroup: name=systemd:/system/net.mount
		  └─493 rpc.statd --no-notify

февр. 11 12:24:37 localhost mount[484]: mount.nfs: Network is unreachable
февр. 11 12:24:37 localhost systemd[1]: Failed to mount /net NFS share.

# journalctl -u net.mount
февр. 11 12:24:37 localhost mount[484]: mount.nfs: Network is unreachable

Однако его зависимости rpcstatd.service (nfs) отрабатывают

# systemctl status rpcstatd.service
rpcstatd.service - NFSv2/3 Network Status Monitor Daemon
	  Loaded: loaded (/etc/systemd/system/rpcstatd.service; enabled)
	  Active: active (running) since Пн. 2013-02-11 12:24:37 EET; 9min ago
	Main PID: 510 (rpc.statd)
	  CGroup: name=systemd:/system/rpcstatd.service
		  └─510 /sbin/rpc.statd --no-notify -F

Т.е. systemd запускает net.mount раньше чем ему сказано? Или я в чем то накосячил?

И да опять же если уже после запуска системы перезагрузить net.mount то все опять же как и в случае со swap просто прекрасно…

init_6 ★★★★★
() автор топика
Ответ на: комментарий от init_6

Посмотри еще поле DEVNAME в udev. Устройства, которые в данный момент подняты в systemd: systemct -t device

Посмотреть job order можно так (от пользователя) :

systemd --test --system

Запуск network.target не означает что поднялась сеть, если только у тебя нет какого либо юнита, который это гарантирует, WantedBy=network.target и Before=network.target. Если пользуешься NM, то есть NetworkManager-wait-online.service

vasily_pupkin ★★★★★
()
Ответ на: комментарий от vasily_pupkin

vasily_pupkin За NetworkManager-wait-online.service спасибо! Именно это и нужно было.

В automount не подалал… Пока оставил почти как и было

# cat /etc/systemd/system/net.mount 
[Unit]
Description=/net NFS share
After=NetworkManager-wait-online.service

[Mount]
What=server:/share
Where=/net
Type=nfs
Options=nfsvers=3,rw,async

И все заработало чудесно. Со swap-ом так и не придумал ничего умнее чем отключить его в fstab вовсе. Для подключения свопа написал такой костыль:

# cat swap.service 
[Unit]
Description=Start swap

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/swapon /dev/mapper/vg-swap
ExecStop=/sbin/swapoff /dev/mapper/vg-swap

[Install]
WantedBy=multi-user.target

Все работает. И можно сказать что вопрос решен!

init_6 ★★★★★
() автор топика
Последнее исправление: init_6 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.