Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

D.1. /etc/rc.d/init.d/rc‌

La rc script est le premier script appelé par init et lance le processus de démarrage.

image

#! / Bin / bash

##################################################### ########################

# Commencer rc

#

# Description : Script de contrôle de niveau d'exécution principal

#

# Auteurs : Gérard Beekmans - [email protected]

# : DJ Lucas - [email protected]

# Mise à jour : Bruce Dubbs - [email protected]

#

# Version : LFS 7.0

#

##################################################### ########################

. /lib/lsb/init-functions print_error_msg()

{

log_failure_msg

# $i est défini lors de l'appel

MSG="FAILURE :\n\nVous ne devriez pas lire ce message d'erreur.\n\n" MSG="${MSG}Cela signifie qu'une erreur imprévue s'est produite dans\n" MSG="${MSG}${ dans"

MSG="${MSG}qui s'est terminé avec une valeur de retour de ${error_value}.\n"


MSG="${MSG}Si vous êtes en mesure de retracer cette erreur à un bogue dans l'un des\n" MSG="${MSG}les fichiers fournis par le livre ${DISTRO_MINI},\n" MSG=" ${MSG}veuillez nous en informer à ${DISTRO_CONTACT}.\n" log_failure_msg "${MSG}"


log_info_msg "Appuyez sur Entrée pour continuer..." wait_for_user

}


check_script_status()

{

# $i est défini lors de l'appel si [ ! -f ${i} ]; alors

log_warning_msg "${i} n'est pas un lien symbolique valide." SCRIPT_STAT="1"

fi


si [ ! -x ${i} ]; alors

image


log_warning_msg "${i} n'est pas exécutable, ignoré." SCRIPT_STAT="1"

fi

}


Cours()

{

if [ -z $interactif ]; alors

 ${1} ${2}

retourner $?

fi


bien que vrai; faire

read -p "Exécuter ${1} ${2} (Oui/non/continuer) ? " -n 1 runit echo


cas ${runit} en c | C)

interactif=""

${i} ${2}

ret=${?} pause ;

;;


n | N)

retour 0

;;


y | O)

${i} ${2}

ret=${?} pause

;;

esac fait


retourner $ret

}


# Lisez tous les paramètres/remplacements locaux

[ -r /etc/sysconfig/rc.site ] && source /etc/sysconfig/rc.site


DISTRO=${DISTRO:-"Linux From Scratch"}

DISTRO_CONTACT=${DISTRO_CONTACT :-"[email protected] (Inscription requise)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}

IPROMPT=${IPROMPT:-"non"}


# Ces 3 signaux ne feront pas sortir notre script de trap "" INT QUIT TSTP


[ "${1}" != "" ] && runlevel=${1}


if [ "${runlevel}" == "" ]; then echo "Utilisation : ${0} " >&2 sortie 1

fi

image


précédent=${NIVEAU PRÉCÉDENT}

[ "${précédent}" == "" ] && précédent=N


si [ ! -d /etc/rc.d/rc${runlevel}.d ]; alors

log_info_msg "/etc/rc.d/rc${runlevel}.d n'existe pas.\n" sortie 1

fi


if [ "$runlevel" == "6" -o "$runlevel" == "0" ]; puis IPROMPT="non" ; Fi


# Remarque : Dans ${LOGLEVEL:-7}, c'est ':' 'dash' '7', pas moins 7 if [ "$runlevel" == "S" ]; alors

[ -r /etc/sysconfig/console ] && source /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"

fi


if [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; alors

# La longueur totale de la chaîne de bienvenue de la distribution, sans les codes d'échappement wlen=${wlen:-$(echo "Bienvenue dans ${DISTRO}" | wc -c )} welcome_message=${welcome_message:-"Bienvenue dans ${INFO }${DISTRO}${NORMAL}"}


# La longueur totale de la chaîne interactive, sans les codes d'échappement ilen=${ilen:-$(echo "Appuyez sur 'I' pour entrer dans le démarrage interactif" | wc -c )}

i_message=${i_message:-"Appuyez sur '${FAILURE}I${NORMAL}' pour entrer dans le démarrage interactif"}


# dcol et icol sont des espaces avant le message pour centrer le message

# À l'écran. time est le temps d'attente pour que l'utilisateur appuie sur une touche wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))

icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) time=${itime:-"3"}


echo -e "\n\n"

echo -e "\\033[${wcol}G${welcome_message}" echo -e "\\033[${icol}G${i_message}${NORMAL}" echo ""

read -t "${itime}" -n 1 interactif 2>&1 > /dev/null

fi


# Faire des minuscules

[ "${interactive}" == "I" ] && interactive="i" [ "${interactive}" != "i" ] && interactive=""


# Lire le fichier d'état s'il existe depuis le niveau d'exécution S

[ -r /var/run/interactive ] && source /var/run/interactive


# Tenter d'arrêter tous les services démarrés par le niveau d'exécution précédent,

# et tué dans ce niveau d'exécution

if [ "${précédent}" != "N" ]; alors

pour i dans $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) faire

check_script_status

if [ "${SCRIPT_STAT}" == "1" ]; puis SCRIPT_STAT="0"

continuer

fi

image


suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix


if [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; alors

si [ ! -f ${prev_start} -a ! -f ${sysinit_start} ] ; then MSG="AVERTISSEMENT :\n\n${i} ne peut pas être "

MSG="${MSG}exécuté car il n'a pas été " MSG="${MSG} pas démarré dans le " MSG="${MSG} runlevel (${previous}) précédent." log_warning_msg "$MSG"

continuer

fi

fi


exécuter ${i} arrêter error_value=${?}


if [ "${error_value}" != "0" ]; puis print_error_msg ; fi fait

fi


if [ "${précédent}" == "N" ]; puis exportez IN_BOOT=1 ; Fi


if [ "$runlevel" == "6" -a -n "${FASTBOOT}" ]; puis touchez /fastboot

fi


# Démarrer toutes les fonctions de ce niveau d'exécution

pour i dans $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) faire

if [ "${précédent}" != "N" ]; alors suffixe=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} stop=/etc/rc.d/rc$runlevel.d/K[0 -9][0-9]$suffixe prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffixe


[ -f ${prev_start} -a ! -f ${stop} ] && continuer

fi


check_script_status

if [ "${SCRIPT_STAT}" == "1" ]; puis SCRIPT_STAT="0"

continuer

fi


case ${runlevel} dans 0|6)

exécuter ${i} arrêter

;;

*)


Esac


exécuter ${i} démarrer

;;


valeur_erreur=${?}



if [ "${error_value}" != "0" ]; puis print_error_msg ; fi fait


# Stocke la variable interactive au passage du niveau d'exécution S et supprime si ce n'est pas le cas if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; alors

echo "interactive=\"i\"" > /var/run/interactive

d'autre

rm -f /var/run/interactive 2> /dev/null

fi


# Copiez le journal de démarrage uniquement lors du démarrage initial

if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; puis cat $BOOTLOG >> /var/log/boot.log


# Marquer la fin du démarrage

echo "--------" >> /var/log/boot.log


# Supprimer le fichier temporaire rm -f $BOOTLOG 2> /dev/null

fi


# Fin rc

if [ "${error_value}" != "0" ]; puis print_error_msg ; fi fait


# Stocke la variable interactive au passage du niveau d'exécution S et supprime si ce n'est pas le cas if [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; alors

echo "interactive=\"i\"" > /var/run/interactive

d'autre

rm -f /var/run/interactive 2> /dev/null

fi


# Copiez le journal de démarrage uniquement lors du démarrage initial

if [ "${previous}" == "N" -a "${runlevel}" != "S" ]; puis cat $BOOTLOG >> /var/log/boot.log


# Marquer la fin du démarrage

echo "--------" >> /var/log/boot.log


# Supprimer le fichier temporaire rm -f $BOOTLOG 2> /dev/null

fi


# Fin rc


image

image

: Gérard Beekmans - [email protected]

: DJ Lucas - [email protected]

: Bruce Dubbs - [email protected]

: Gérard Beekmans - [email protected]

: DJ Lucas - [email protected]

: Bruce Dubbs - [email protected]

: EPA 7.0


: Avec du code basé sur simpleinit-msb de Matthias Benkmann http://winterdrache.de/linux/newboot/index.html


Le fichier doit être situé dans /lib/lsb

: EPA 7.0


: Avec du code basé sur simpleinit-msb de Matthias Benkmann http://winterdrache.de/linux/newboot/index.html


Le fichier doit être situé dans /lib/lsb

Meilleur système d'exploitation Cloud Computing chez OnWorks :