Sous-sections

8.7 Démarrer, arrêter, se connecter et se déconnecter avec fli4l

8.7.1 Concept de Boot

fli4l 2.0 peut être installé sur différent média, disque-dur ou carte-Compact-Flash(TM), il est aussi possible de l’installer sur un support Zip ou sur un CD-ROM amorçable. En outre, l’installation d’une version sur un disque-dur n'est pas fondamentalement différente que sur une disquette. 8.10

Ces exigences ont été réalisé grâce à l’archive opt.img, jusqu'ici il était installé sur un disque-RAM maintenant il peut être placé sur d’autre média. Il peut s'agir d'une partition sur un disque dur ou une carte-CF. Pour ce second volume, le répertoire /opt sera monté et les programmes auront des liens symboliques et seront intégrés dans le rootfs. La structure apparaissant dans le système de fichier RootFS correspond au répertoire opt de la distribution fli4l à une exception prète - le préfixe des fichiers seront omis. Le fichier opt/etc/rc se trouve directement dans /etc/rc et pour le fichier opt/files/bin/busybox il est dans /bin/busybox. Ces fichiers sont seulement des liens dans le média monté en lecture seule, on peut les ignorer, tant que les fichiers ne sont pas modifiés. Si vous voulez les modifier, il faut d'abord rendre ces fichiers accessibles en écriture avec la commande mk_writable (voir ci-dessous).

8.7.2 Scripts de démarrage et d'arrêt

Les Scripts qui sont exécutés lors du boot système, sont dans les répertoires opt/etc/boot.d et opt/etc/rc.d ils sont également exécutés dans l'ordre.


Important: Quand ces scripts sont exécutés aucun processus particulier n'est produit, ils ne peuvent pas être arrêtés avec la commande «exit». Cette commande conduirait à une rupture du processus de Boot !

8.7.2.1 Scripts de démarrage dans opt/etc/boot.d/

Les scripts de ce répertoire sont exécutés les premiers. Ils ont pour mission, de monter le périphérique de boot, le fichier de configuration rc.cfg se trouve sur le support de boot et décompresse l'archive opt.img. Selon le type de Boot il est plus ou moins complexe et font les choses suivantes :

Lors de la construction des scripts, vous avez la chance d'en apprendre davantage sur la configuration de fli4l, le fichier de configuration est également intégré dans l'archive rootfs, dans ce fichier /etc/rc.cfg vous trouverez les variables de configuration qui seront analysées puis les scripts de démarrage seront exécutés depuis le répertoire opt/etc/boot.d/. Après le montage du volume de boot, le fichier /etc/rc.cfg est remplacé par le fichier de configuration dans le volume de boot, de sorte que les scripts de démarrage dans opt/etc/rc.d/ soit disponible pour l'actuel configutation du volume de boot (voir ci-dessous). 8.11

8.7.2.2 Scripts de démarrage dans opt/etc/rc.d/

C'est les commandes qui sont exécutées à chaque démarrage du routeur, elles peuvent être stockés dans le répertoire opt/etc/rc.d/. Les conventions suivantes s'appliquent :

  1. Il faut classer les noms de script comme ceci :

        rc<nombre à trois chiffres>.<nom de l'OPT>
    

    Les scripts sont démarrés dans l'ordre croissant des numéros. Si plusieurs scripts ont le même numéro attribué, c’est le caractère alphabétique après le point qui détermine l'ordre. L’installation des paquetages s’effectue les uns après les autres, ils sont définis par un numéro.

    Voici une estimation approximative, des numéros pouvant être utilisé pour une installation :


    Numéro Fonction
    000-099 Système de base (hardware, fuseau horaire, système de fichiers)
    100-199 Module Kernel (drivers)
    200-299 Connexions externe (PPPoE, ISDN4Linux, PPtP)
    300-399 Réseau (routage, interface, filtrage de paquet)
    400-499 Serveur (DHCP, HTTPD, Proxy, etc.)
    500-900 Tout le reste
    900-997 Tout ce qui peut générer un dial-up
    998-999 Réservé (ne pas utiliser!)

  2. Vous devez placer dans ces scripts, toutes les fonctions nécessaires pour changer le RootFS. (par ex. pour la création d'un répertoire /var/log/lpd).

  3. Vous ne devez pas effectuer d'écriture dans les fichiers scripts qui font partie de l'archive-opt, car ces fichiers sont en lecture seule sur le média. Pour modifier de tel fichier, il faut, au préalable rendre accessible ce fichier en écriture via mk_writable (voir ci-dessous). En exécutant cette fonction, le fichier si nécessaire, sera copié et sera accessible en écriture sur le RootFS. Si le fichier est déjà en écriture, rien ne se passera lors de l’exécution de la fonction mk_writable.


    Important: mk_writable doit être utilisé sur les fichiers qui sont dans le rootfs et non pas par le biais du dossier /opt. Si vous voulez modifier /usr/local/bin/foo vous exécutez mk_writable /usr/local/bin/foo.

  4. Ces scripts ont besoin de vérifiés, avant d'exécuter les commandes réelles, si l'OPT correspondant est actif. Cela se fait habituellement par une simple distinction de cas :

        if [ "$OPT_<OPT-Name>" = "yes" ]
        then
            ...
            # ici OPT start!
            ...
        fi
    

  5. Pour pouvoir déboguer plus facile, vous devez inséter dans le script les fonctions begin_script et end_script :

        if [ "$OPT_<OPT-Name>" = "yes" ]
        then
            begin_script FOO "configuring foo ..."
            ...
            end_script
        fi
    

    Pour juste déboguer de script au démarrage, vous devez simplement activer la variable FOO_DO_DEBUG='yes'.

  6. Toutes les variables de configuration sont directement disponible par les scripts. Des explications pour accéder à d'autres scripts à partir des variables de configuration peuvent être trouvés dans la section «Gestion des variables de configuration»

  7. Le dossier /opt ne doit pas être utilisé comme stocker des données OPTs. Si de l'espace supplémentaire est nécessaire, l'utilisateur doit de définir un chemin approprié en utilisant la variable de configuration. Selon le type de données à stocker (données persistante ou transitoire) vous devez utiliser différentes affectations par défaut. Le chemin /var/run/ est logique pour les données transitoires, tandis que pour les données persistant, il est conseillé d'utiliser la fonction map2persistent combiné avec une variable de configuration appropriée.

8.7.2.3 Scripts d'arrêt dans opt/etc/rc0.d/

Chaque ordinateur a besoin d’un temps pour s’arrêter ou redémarrer. Il se pourrait bien que vous pouvez avoir à effectuer des opérations avant que l'ordinateur s'éteigne ou redémarre. Les commandes officielles sont «halt» et «reboot». Ces commandes sont également placées dans IMONC ou dans le Web-GUI si vous l’avez installé, un clique sur le bouton suffira pour arrêter ou redémarrer le routeur.

Tous les scripts d'arrêt se trouvent dans le répertoire opt/etc/rc0.d/. Le nom du fichier est analogue à celui du script de démarrage. Ils sont également exécutées dans ordre croissant des numéros.

8.7.3 Fonctions auxiliaires

Dans /etc/boot.d/base-helper différentes fonctions sont mises à disposition, elles peuvent être utilisées pour les scripts de démarrage. Cela se applique pour certaines choses comme pour un support de débogage, pour le chargement des modules du Kernel ou pour la sortie des messages.

Les différentes fonctions sont les suivantes et brièvement décrites.

8.7.3.1 Contrôle des scripts

begin_script <Symbol> <Message> :
envoie un message et active le débogueur de script en utilisant set -x, si <Symbol>_DO_DEBUG est sur «yes».

end_script :
envoie un message final et fournit l'état de débogage si vous avez activé le begin_script. Pour chaque activation du begin_script un end_script sera associé et activé (et vice versa).

8.7.3.2 Chargement des modules du Kernel

do_modprobe [-q] <Module> <Paramètre>*:
Charge le module du Kernel, y compris ses paramètres, en résolvant en même temp les dépendances du module. Le paramètre «-q» empêche qu'un message erreur soit mis. La fonction retourne en cas de succès une valeur nulle, dans le cas d'une erreur une valeur non nulle. Cela permet décrire un code pour gérer les échecs lors du chargement les modules du Kernel :

    if do_modprobe -q acpi-cpufreq
    then
        # pas de contrôle de fréquence du CPU via ACPI
        log_error "le contrôle de fréquence du CPU via ACPI n'est pas disponible."
        # [...]
    else
        log_info "le contrôle de fréquence du CPU via ACPI est activé."
        # [...]
    fi

do_modrobe_if_exists [-q] <Chemin> <Module> <Paramètre>* :

vérifie d'abord si le module /lib/modules/<version du kernel>/<Chemin>/<Module> existe et ensuite exécute do_modprobe.


Important: Le module doit exister précisément par ce nom, aucun alias ne peuvent être utilisé. Lorsque vous utilisez un alias do_modprobe sera exécuté immédiatement.

8.7.3.3 Messages et gestion des erreurs

log_info <Message> :
envoi un message sur la console et dans /bootmsg.txt. Si aucun message n'est enregistré dans ce paramètre le fichier log_info sera lu depuis l'entrée par défaut. La fonction renvoie toujours en retour une valeur nulle.

log_warn <Message> :
envoi un message d'avertissement sur la console et dans /bootmsg.txt, la chaîne WARN: sera utilisée comme préfixe. Si aucun message n'est enregistré dans ce paramètre le fichier log_warn sera lu depuis l'entrée par défaut. La fonction renvoie toujours en retour une valeur null.

log_error <Message> :
envoi un message d'erreur sur la console et dans /bootmsg.txt, la chaîne ERR: sera utilisée comme préfixe. Si aucun message n'est enregistré dans ce paramètre le fichier log_error sera lu depuis l'entrée par défaut. La fonction renvoie toujours en retour une valeur null.

set_error <Message> :
envoi un message d'erreur qui sera définit dans une variable d'erreur interne, ensuite elle pourra être examiné via is_error.

is_error :
réinitialise la variable d'erreur interne et renvoie true, si elle a été précédemment défini par set_error.

8.7.3.4 Fonctions réseau

translate_ip_net <Valeur> <Nom de Variable> [<Variable de Résultat>] :

remplace les références symboliques par des paramètres. Actuellement les traductions suivantes ont lieu :
*.*.*.*, none, default, pppoe
ne sont pas remplacé
any
sera remplacé par 0.0.0.0/0
dynamic
sera remplacée par une adresse IP du routeur, à travers laquel il existe une connexion Internet.
IP_NET_x
sera remplacé par le réseau se trouvant dans la configuration.
IP_NET_x_IPADDR
sera remplacé par l'adresse IP se trouvant dans la configuration.
IP_ROUTE_x
sera remplacé par le réseau routé se trouvant dans la configuration
@<Hostname>
sera remplacé par l'hôte ou par l'adresse IP se trouvant dans la configuration.

Le résultat de la traduction est mémorisée dans la variable dont le nom est transmis dans le troisième paramètre, si ce paramètre est manquant, le résultat sera stocké dans la variable res. Le nom de la variable qui est transmis dans le second paramètre est utilisé uniquement pour les messages d'erreur si la traduction échoue, cela permet d'appeler la source de la valeur à traduire. Si une erreur se produit, un message est alors exécuté.

    Unable to translate value '<Valeur>' contained in <Nom de Variable>.

La valeur nulle est retourée si la traduction a réussie et une valeur non nulle sera retounée si une erreur s'est produite.

8.7.3.5 Divers

mk_writable <Fichier> :
pour vous assurer que le fichier transmis sera accessible en écriture. Seulement si le fichier est en lecture seule dans le fichier-système et juste monté par un lien symbolique, une copie locale sera alors crée pour avoir le fichier en écrit.

unique <Liste> :
supprime les doublons dans la liste transmise. La liste est retournée avec la variable list.

8.7.4 Périphériques ttyI

Au sujet les périphériques ttyI, vous pouvez utiliser (/dev/ttyI0 .../dev/ttyI15), pour la création d’un «émulateur de modem» avec plusieurs cartes ISDN (ou RNIS), il existe un compteur pour les conflits entre les différents OPTs et les utilisations de ces périphériques, c'est un dispositif à éviter. Ces émulateur seront créés lors du démarrage du routeur, dans le fichier /var/run/next_ttyI, avec l'utilisation un compteur. Dans l'exemple de script suivant, la valeur est interrogé et peut être augmentée de un, il sera exporté de nouveau dans le prochain OPT.

    ttydev_error=
    ttydev=$(cat /var/run/next_ttyI)
    if [ $ttydev -le 16 ]
    then                                    # ttyI device available? yes
        ttydev=$((ttydev + 1))              # ttyI device + 1
        echo $ttydev >/var/run/next_ttyI    # save it
    else                                    # ttyI device available? no
        log_error "No ttyI device for <Nom de votre OPT> available!"
        ttydev_error=true                   # set error for later use
    fi

    if [ -z "$ttydev_error" ]               # start OPT only if next tty device
    then                                    # was available to minimize error
        ...                                 # messages and minimize the
                                            # risk of uncomplete boot
    fi

8.7.5 Scripts de connexion et de déconnexion par modem

8.7.5.1 Généralités

Après avoir établi ou coupé une connexion par modem, les scripts /etc/ppp/ sont traitées. Voici les actions qui sont nécessaires pour activer ou déactiver une connexion, qui seront stocker dans l'OPT. Le schéma des noms de fichier est le suivant :


ip-up<numéro à trois chiffres>.<nom d'OPT>
ip-down<numéro à trois chiffres>.<nom d'OPT>

Le script ip-up est exécuté après la connexion et le script ip-down est exécuté après la déconnexion


Important: Dans le script ip-down aucune intervention ne doit être réalisé, autrement cela conduirait à une nouvelle connexion Internet, avec uniquement un accès à l’état online permanent, pour les utilisateurs qui non pas de forfait illimité, cela peut couter très cher.


Important: Car pour ce script, il n’y a aucun processus qui est généré, en plus, ce script ne peut pas être arrêté avec la commande «exit»!

Remarque : le scripts ip-up peut être examiné lors qu'il est exécuté, pour cela le fichier rc400 sera vérifier avec la variable ip_up_events. Si c'est réglé sur "yes", une connexion par modem existe et le script ip-up sera exécuté. Si c'est réglé sur "no", une connexion par modem n'existe pas et le script ip-up ne sera pas exécuté. Il y a une exception pour cette règle : Si un routeur Ethernet pur n'est pas configuré pour des connexions commutées, mais configuré pour une route par défaut (0.0.0.0/0), le script ip-up sera exécuté qu'une fois, exactement à la fin du processus de boot. (De même le script ip-down sera exécuté qu'une fois avant l'arrêt du routeur).

8.7.5.2 Les variables

Grâce au concept d'appel spécial les scripts ip-up et ip-down sont exécutés et les variables suivantes sont utilisées :


real_interface L'interface actuelle, par ex. ppp0, ippp0, ...
interface Interface-IMOND, avec pppoe, ippp0, ...
tty Terminal de connexion, peut-être vide !
speed Vitesse de connexion, par ex. avec ISDN 64000
local Adresse-IP spécifique
remote Adresse-IP d'ordinatuer auquel vous êtes connecté
is_default_route Indique si l'actuel ip-up/ip-down est utilisé pour l'interface de la route par défaut peut-être «yes» ou «no»)

8.7.5.3 Route par défaut

Depuis la version 2.1.0, les scripts ip-up et ip-down sont exécutés non seulement pour l'interface sur laquelle la route par défaut est configurée, mais aussi pour toutes les connexions qui ont besoin les scripts ip-up et ip-down. Pour émuler des comportements anciens, vous devez inclure les éléments à déclencher dans les scripts ip-up et ip-down la requête suivante doit être insérée :

    # is a default-route-interface going up?
    if [ "$is_default_route" = "yes" ]
    then
        # Les actions à déclencher
    fi

Naturellement, les nouveaux comportements doivent être utilisés, pour des actions spécifiques.



Notes

... disquette.8.10
À l'origine fli4l pouvait s'exécuter à partir d'une disquette. Depuis fli4l est devenue trop volumineux, la disquette ne peut plus est utilisée.
... ci-dessous).8.11
Normalement, ces deux fichiers sont identiques. Un changement n'est possible que si le fichier de configuration sur le volume de démarrage a été modifié manuellement, par exemple pour modifier une configuration qui sera utilisé plus tard, sans avoir à reconstruire l'archive fli4l.
© 2001-2019 L'équipe fli4l - 27 janvier 2019