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:
#!/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}
#!/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, etbash
(1) le shell par défaut des utilisatrices; le shell de klibc est le shell par défaut dans l'environnement de l'initramdisk, etbusybox
(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 quesh
, 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 internelocal
)/bin/pdksh
(ce shell n'a pas de commande interneprintf
)/usr/bin/yash
(ce shell n'a pas de commande internelocal
)