25461Fermer25463
GodzilLe 27/04/2015 à 11:42
Je te conseille de regarder mieux comment sont fait des vrai systeme d'init base sur des script shell comme OpenRC avant de dire de telle anneries.

Comment tu fait un tel script d'init avec un truc aussi rigide que systemd:
#!/sbin/runscript # Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/net-misc/openssh/files/sshd.rc6.4,v 1.3 2013/04/24 03:13:03 vapier Exp $ extra_commands="checkconfig" extra_started_commands="reload" SSHD_CONFDIR=${SSHD_CONFDIR:-/etc/ssh} SSHD_CONFIG=${SSHD_CONFIG:-${SSHD_CONFDIR}/sshd_config} SSHD_PIDFILE=${SSHD_PIDFILE:-/var/run/${SVCNAME}.pid} SSHD_BINARY=${SSHD_BINARY:-/usr/sbin/sshd} depend() { use logger dns if [ "${rc_need+set}" = "set" ]; then : # Do nothing, the user has explicitly set rc_need else warn_addr='' for x in $(awk '/^ListenAddress/{ print $2 }' "$SSHD_CONFIG" 2>/dev/null) ; do case "$x" in 0.0.0.0|0.0.0.0:*) ;; ::|\[::\]*) ;; *) warn_addr="${warn_addr} $x" ;; esac done unset x if [ "${warn_addr:+set}" = "set" ]; then need net ewarn "You are binding an interface in ListenAddress statement in your sshd_config!" ewarn "You must add rc_need=\"net.FOO\" to your /etc/conf.d/sshd" ewarn "where FOO is the interface(s) providing the following address(es):" ewarn "${warn_addr}" fi unset warn_addr fi } checkconfig() { if [ ! -d /var/empty ] ; then mkdir -p /var/empty || return 1 fi if [ ! -e "${SSHD_CONFDIR}"/sshd_config ] ; then eerror "You need an ${SSHD_CONFDIR}/sshd_config file to run sshd" eerror "There is a sample file in /usr/share/doc/openssh" return 1 fi ssh-keygen -A || return 1 [ "${SSHD_PIDFILE}" != "/var/run/sshd.pid" ] \ && SSHD_OPTS="${SSHD_OPTS} -o PidFile=${SSHD_PIDFILE}" [ "${SSHD_CONFDIR}" != "/etc/ssh" ] \ && SSHD_OPTS="${SSHD_OPTS} -f ${SSHD_CONFDIR}/sshd_config" "${SSHD_BINARY}" -t ${SSHD_OPTS} || return 1 } start() { checkconfig || return 1 ebegin "Starting ${SVCNAME}" start-stop-daemon --start --exec "${SSHD_BINARY}" \ --pidfile "${SSHD_PIDFILE}" \ -- ${SSHD_OPTS} eend $? } stop() { if [ "${RC_CMD}" = "restart" ] ; then checkconfig || return 1 fi ebegin "Stopping ${SVCNAME}" start-stop-daemon --stop --exec "${SSHD_BINARY}" \ --pidfile "${SSHD_PIDFILE}" --quiet eend $? } reload() { checkconfig || return 1 ebegin "Reloading ${SVCNAME}" start-stop-daemon --signal HUP \ --exec "${SSHD_BINARY}" --pidfile "${SSHD_PIDFILE}" eend $? }

Oui les script shell peuvent sembler un peu illisible des qu'on joue avec les variables, mais c'est bien plus souple qu'un truc qui ne fait que lancer/arreter un executable, au poins qu'avec systemd on est oblige de lancer des script shell pour pouvoir faire la meme chose ouéééééé

Et le script la pour sshd n'est pas un des plus complexe, celui pour apache fait plus de trucs, dont des tests de verifications sur les fichiers de configs, etc...

SystemD, le seul moyen? soit lancer un script shell externe, soit faire un module a compiler pour le bousin top

C'est pratique n'est-ce pas?
Je m’abstiendrais de parler encore une fois des choses que systemd fait qu'il ne devrait pas faire, la lourdeur du machin pour tout ce qui n'est pas PC high-end, ni de la difficulté accrue pour la maintenance d'un serveur grace a systemd etc..