script de inicialização do Debian a partir do zero

5

Estou tentando escrever um script de inicialização para o software de destino SCST iSCSI para Debian / Ubuntu. O atual no download não funciona e parece estar equipado para funcionar no SuSE e em outros.

Isso é o que eu tenho até agora, mas estou baseando isso em meu conhecimento limitado de scripts de inicialização e muitas pesquisas no Google.

Eu só estou querendo saber se estou pensando demais nisso, eu preciso descarregar os módulos toda vez que eu parar o script. Os módulos não carregam na inicialização, eu sei que preciso iniciar o daemon iscsi e carregar a configuração.

Qualquer ajuda seria apreciada.

#!/bin/sh

DAEMON=/usr/local/sbin/iscsi-scstd
PIDFILE=/var/run/iscsi-scstd.pid
CONFIG=/etc/scst/scst.conf

case "$1" in

start)
    echo "Starting SCST iSCSI target service: "
    modprobe scst
    modprobe scst_vdisk
    modprobe iscsi_scst
    start-stop-daemon --start --quiet --exec $DAEMON
    scstadmin -config $CONFIG
    $RETVAL=$?
    if [ $RETVAL == "0" ]; then
        echo -n "Success"
    fi
    ;;

stop)
    echo "Stopping SCST iSCSI target service: "
    modprobe -r scst
    modprobe -r scst_vdisk
    modprobe -r iscsi_scst
    start-stop-daemon --stop --quiet --exec $DAEMON --pidfile $PIDFILE
    $RETVAL=$?
    if [ $RETVAL == "3" ]; then
        echo -n "Success"
    fi
    if [ $RETVAL == "1" ]; then
        rm -f $PIDFILE
        echo -n "Success"
    fi
    ;;

restart)
    echo "Stopping SCST iSCSI target service: "
    modprobe -r scst
    modprobe -r scst_vdisk
    modprobe -r iscsi_scst
    start-stop-daemon --stop --quiet --exec $DAEMON --pidfile $PIDFILE
    sleep 2
    echo "Stopping SCST iSCSI target service: "
    modprobe scst
    modprobe scst_vdisk
    modprobe iscsi_scst
    start-stop-daemon --start --quiet --exec $DAEMON
    scstadmin -config $CONFIG
    ;;

status)
    $RETVAL=$?
    if [ $RETVAL == "0" ]; then
        echo -n "SCST iSCSI target service is running"
    fi
    if [ $RETVAL == "3" ]; then
        echo -n "SCST iSCSI target service is not running"
    fi
    if [ $RETVAL == "4" ]; then
        echo -n "SCST iSCSI target service is unknown"
    fi  


*)
    echo "Usage: /etc/init.d/scst {start|stop|restart}"
    exit 1

esac

exit 0

Na verdade, acabei encontrando exatamente o que estava procurando em um antigo PPA do Ubuntu para o meu destino iSCSI. Então essa questão é muito discutível.

    
por ianc1215 29.08.2011 / 23:23

2 respostas

4

O Debian Squeeze está se movendo para uma ordenação baseada em dependência de scripts init em vez de numerar os scripts sequencialmente. Se você quiser usar isso, precisará de comentários especiais em seu script para que insserv (a update-rc.d de substituição) atenda.

Existe um guia para escrever um script de init "adequado" no wiki da Debian aqui .

O Ubuntu foi com upstart para substituir o init, mas deixou um sistema de compatibilidade de init no lugar para que o script de init que você escreve seguindo as regras do Debian funcione corretamente no Ubuntu. Caso contrário, você pode escrever um arquivo de serviço upstart (um exemplo muito básico para suas necessidades é dado no wiki do Ubuntu aqui )

Quanto ao resto, descarregar os módulos provavelmente não é necessário (e nem sempre é possível). Se você descarregar os módulos, eu diria que eles precisam ser descarregados após o serviço ser interrompido. Você também pode precisar reverter a ordem de descarregar os módulos se os módulos iniciados posteriormente dependerem dos módulos iniciados anteriormente. Dependendo da rapidez com que o daemon passar de "iniciado" para "pronto para ter a configuração carregada nele", você pode precisar de um sleep 1 antes de executar scstadmin (ou talvez não. Apenas algo para estar ciente de que ele falha .)

    
por 30.08.2011 / 02:39
5

Confira /etc/init.d/skeleton para um exemplo. Isso deve estar presente em um host Ubuntu.

    
por 30.08.2011 / 01:52