Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
# cat /etc/debian_version
jessie/sid
# dpkg -l | grep systemd
ii libsystemd-journal0:amd64
ii libsystemd-login0:amd64
cat /etc/debian_version jessie/sid dpkg -l|grep systemd ii libpam-systemd:amd64 204-10 amd64 system and service manager - PAM module ii libsystemd-daemon0:amd64 204-10 amd64 systemd utility library ii libsystemd-id128-0:amd64 204-10 amd64 systemd 128 bit ID utility library ii libsystemd-journal0:amd64 204-10 amd64 systemd journal utility library ii libsystemd-login0:amd64 204-10 amd64 systemd login utility library ii systemd 204-10 amd64 system and service manager ii systemd-sysv 204-10 amd64 system and service manager - SysV links
Всё хорошо. Просто простой базис становится сложным.По-моему, это происходило всегда в процессе прогресса цивилизации.
systemctl list-dependencies
Почему init имеет связи с udev'ом?
udev появился задолго до systemd, и их «блобоинтеграция» получилась отвратительной.
У меня относительно маленький опыт в embedded, но по моим воспоминаниям для не очень сложной железки размер «фирмвари» под линуксом был 2Мб. Строго и ровно.
Более того, сейчас в комьюнити идёт особый срач на тему minimize footprint (internet of things, $0.5 за компьютер и всё такое). И в условиях срача за 400кб TCP-стека 6Мб на /sbin/init выглядит как… ну, «пусть едят пирожные».
Я к тому, что монолитный дизайн (а что бы Поттеринг не говорил, получается монолитный блобик) — это зло. Вместо аккуратного конструктора — лапша из зависимостей и огромный функционал там, где его не ожидают (нахрена там встроенный веб-сервер?)
Я этот срач внимательно читаю. Посылают их товарищи с жирных десктопов и серверов. С учётом, что «если не линукс, то кто-нибудь другой», интереса Интела и ситуации, когда подобное железо будет востребовано, я думаю, здравый смысл победит.
Что sysv-init не аккуратный конструктор а артефакт-переросток я уже выше писал. Но это не означает, что его замена должна быть столь громоздкой и немодулярной.
«Отключение функционала при сборке» — это не совсем то, о чём я говорю. Хорошие универсальные компоненты можно использовать как самостоятельные инструменты.
Огромные блобо-куски — только там, куда их написали. Об этом и скорбь. Много кода, гигантский функционал, который «делает всё».
nc -l 80 — и у вас готовый веб-сервер. Которому можно даже что-то ответить. Аналогично, nc foobar 80 — и у вас готовый веб-клиент, куда можно написать за разумное число усилий HTTP запрос.Я со своего дилетантского уровня не вижу, в чем проблема с upstart, и категорически не понимаю, почему не взяли его.
Потому что он хуже systemd. Я в свое время смотрел на него. И я бы не сказал что он сильно лучше systemd.Это не выглядит сильной аргументацией в пользу systemd.
1.8. Применение философии Unix
…
Структура баз данных и протоколы приложений должны быть, если это возможно, текстовыми (доступными человеку для чтения и редактирования).
Главная претензия — оно невероятно сложное. Отладить sysv-init может любой администратор.У вас какое-то странное определение сложности.
#!/bin/sh
set -e
### BEGIN INIT INFO
# Provides: postgresql
# Required-Start: $local_fs $remote_fs $network $time
# Required-Stop: $local_fs $remote_fs $network $time
# Should-Start: $syslog
# Should-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: PostgreSQL RDBMS server
### END INIT INFO
# Setting environment variables for the postmaster here does not work; please
# set them in /etc/postgresql/<version>/<cluster>/environment instead.
[ -r /usr/share/postgresql-common/init.d-functions ] || exit 0
. /usr/share/postgresql-common/init.d-functions
# versions can be specified explicitly
if [ -n "$2" ]; then
versions="$2 $3 $4 $5 $6 $7 $8 $9"
else
get_versions
fi
case "$1" in
start|stop|restart|reload)
if [ -z "`pg_lsclusters -h`" ]; then
log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
exit 0
fi
for v in $versions; do
$1 $v || EXIT=$?
done
exit ${EXIT:-0}
;;
status)
LS=`pg_lsclusters -h`
# no clusters -> unknown status
[ -n "$LS" ] || exit 4
echo "$LS" | awk 'BEGIN {rc=0} {if (match($4, "down")) rc=3; printf ("%s/%s (port %s): %s\n", $1, $2, $3, $4)}; END {exit rc}'
;;
force-reload)
for v in $versions; do
reload $v
done
;;
*)
echo "Usage: $0 {start|stop|restart|reload|force-reload|status} [version ..]"
exit 1
;;
esac
exit 0
[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres
Environment=PGROOT=/var/lib/postgres
SyslogIdentifier=postgres
PIDFile=/var/lib/postgres/data/postmaster.pid
ExecStartPre=/usr/bin/postgresql-check-db-dir ${PGROOT}/data
ExecStart= /usr/bin/pg_ctl -s -D ${PGROOT}/data start -w -t 120
ExecReload=/usr/bin/pg_ctl -s -D ${PGROOT}/data reload
ExecStop= /usr/bin/pg_ctl -s -D ${PGROOT}/data stop -m fast
# Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in
# killing Postgres, so adjust it downward
OOMScoreAdjust=-200
[Install]
WantedBy=multi-user.target
Это в одной категории с UEFI boot. Было старо куце и легаси, но просто. Сделали «ново, модно», но безумно сложно.Боже, а с UEFI-то что не так в плане сложности? Я вот всегда мечтал делать загрузочные флешки простым копированием файлов. UEFI так позволяет делать.
А что, oss/alsa работали лучше? У меня на ноутбуке pulseaudio вполне справляется с поставленными задачами. Ну и не понятно, почему отношение к продукту диктуется отношением к другому продукту того же разработчика.
Причём сложность systemd делает процесс определения «виноватого», мягко говоря, не самым тривиальным, потому что отследить весь процесс старта становится слишком сложно.

Отладить sysv-init может любой администратор. Отладить systemd может только системный программист, да ещё с приличным запасом времени.
Но все эти прелести компенсируются двумя ублюдочными инициативами redhat: ограничение отдельного usr и systemd. Такое ощущение, что по юникс-идеалогии прошлись грязными эппломсовскими сапогами.Вообще-то отдельный /usr никогда не был «юникс-идеалогией». Изначально в /usr хранились файлы пользователей и системные программы туда попали по одной-единственной причине: кончилось место в корневом разделе. «И самый настоящий из всех настоящих» Unix'ов (Solaris) отказался от поддержки /usr на отдельном разделе лет много лет назад
И объял меня systemd до глубин дистрибутива моего