Description

bilibop-common
fonctions shell pour les scripts bilibop

Ce paquet fournit des fonctions shell utilisables par d'autres scripts bilibop sur le système en cours d'exécution ou dans l'environnement du disque mémoire initial (initramdisk). Ces fonctions utilisent les informations disponibles dans /dev, /proc et /sys pour obtenir le nom du disque ou de la partition hébergeant le système, et sont pleinement utilisables par n'importe quelle utilisatrice ou application sans privilège. Dm-crypt, LVM, les périphériques boucle (loop) et les systèmes de fichiers aufs (et n'importe laquelle de leurs combinaisons) sont supportés. Une commande drivemap est aussi fournie, pour montrer les périphériques bloc dans un arbre de dépendances.


Utilisation

bilibop-common est en général installé en tant que dépendance d'autres paquets, mais il peut aussi être installé seul, soit pour sa commande drivemap, soit pour sa bibliothèque de fonctions shell facilement exploitable dans des scripts ad hoc.

Scripts

Les fichiers suivants, fournis par le paquet, sont deux exemples de tels scripts:

/lib/bilibop/disk[↗]:

#!/bin/sh
# Output the underlying disk name of the root filesystem or of the
# file/device/directory given as argument.
. /lib/bilibop/common.sh
get_udev_root
physical_hard_disk ${1}

/lib/bilibop/test[↗]:

#!/bin/sh
set -e

# Test if the argument (file/directory/device) is on the same underlying
# device than the root filesystem; if this is the case and -q option is
# not used, then output something.
. /lib/bilibop/common.sh
get_udev_root
DISK="$(physical_hard_disk /)" || exit $?

if [ "${1}" = "-q" ]; then
    quiet="true"
    shift
else
    quiet="false"
fi

[ -e "${1}" ] && [ "$(physical_hard_disk ${1})" = "${DISK}" ] || exit 1

if [ "${quiet}" = "false" ]; then
    if [ -f /etc/bilibop/bilibop.conf ]; then
        . /etc/bilibop/bilibop.conf
    fi
    echo ${BILIBOP_COMMON_BASENAME:-bilibop}
fi

drivemap(1)

La commande drivemap(1) peut être utilisée comme un complément à la commande lsblk(8) dans la mesure où elle ne traite pas les périphériques virtuels de type boucle (loop) comme indépendants, mais les intègre à l'arbre des dépendances d'un disque physique, au même titre que les autres périphériques virtuels du device mapper.


Portabilité

Les fonctions shell du fichier /lib/bilibop/common.sh(↗) ont maintenant atteint un degré de portabilité qui leur permet d'être éxécutées par différents shells et dans différents environnements.

Shells POSIX

Il y a deux manières d'appeler les fonctions de bilibop-common depuis un script shell:

  • soit en utilisant #!/bin/sh comme shebang, /bin/sh pouvant alors être un lien symbolique vers:

    • /bin/dash
    • /bin/bash
    • /bin/busybox
    • /usr/lib/klibc/bin/sh.shared

    ou encore:

    • /bin/mksh
    • /bin/mksh-static
    • /bin/bash-static
    • /bin/posh
    • /bin/zsh4

    Sous Debian, dash(1) est actuellement le shell par défaut du système, et bash(1) le shell par défaut des utilisatrices; le shell de klibc est le shell par défaut dans l'environnement de l'initramdisk, et busybox(1) son éventuel remplaçant, en fonction de la configuration du système.

  • soit en fixant, grâce au shebang, le shell que l'on souhaite utiliser:

    • #!/bin/dash
    • #!/bin/bash
    • #!/bin/busybox sh
    • #!/usr/lib/klibc/bin/sh.shared

    ou encore:

    • #!/bin/posh
    • #!/bin/zsh4
    • #!/bin/sash -f

La bibliotèque de functions de bilibop-common a été testée avec la plupart des shells disponibles sur Debian, sinon tous; certains offrent un fonctionnement partiel dans le contexte de cette bibliothèque:

  • /bin/sash (ne fonctionne pas quand ce programme est appelé en tant que sh, mais uniquement dans un shebang avec l'option -f)

D'autres, en revanche, sont inutilisables dans ce même contexte:

  • /bin/ksh93 (ce shell n'a pas de commande interne local)
  • /bin/pdksh (ce shell n'a pas de commande interne printf)
  • /usr/bin/yash (ce shell n'a pas de commande interne local)

Initramfs / Rootfs


Limitations