un petit script qui liste les partitions par label, monte automatiquement la partition et lance systemd-nspawn (avec ou sans
-b
)#!/usr/bin/env bash
pkgname='chrooter'
version="1.01"
excepts=('windows' 'RECOVERY' 'sauvegarde' 'EFI' 'MSR' 'ESP')
declare -A labels
get_labels()
{
local label=$(mount -l | awk -F'[' '/^\/.*on \/ / {print $2}')
excepts+=("${label:0:-1}") # ne pas monter la partition système
local l="", i=0
local dir="/tmp/mnt"
mkdir -p "$dir"
for l in /dev/disk/by-label/*; do
label="${l##*/}"
[[ "${excepts[@]} " =~ "${label} " ]] && continue
mount "/dev/disk/by-label/${label}" "${dir}" &>/dev/null;
if (( $? == 0 )); then
if [ -d "${dir}/etc" ]; then
labels[$i]="${label}"
((i++))
fi
umount "${dir}"
fi
done
rmdir "$dir"
}
run()
{
get_labels
local i=0
for p in "${!labels[@]}"; do
printf " %2s -> %s\n" "$i" "${labels[$i]}"
((i++))
done
echo -n "Numéro de la partition à monter :"
read i
part=${labels[$i]}
if [ -n "$part" ]; then
dir="/mnt/${labels[$i]}" # "/mnt/${pkgname}"
mkdir -p "$dir"
echo "monter : ${labels[$i]} dans ${dir}"
mount "/dev/disk/by-label/${labels[$i]}" "${dir}"
if (( $? == 0 )); then
echo "sudo systemd-nspawn ${USER} -D ${dir}"
sudo systemd-nspawn ${USER} -D "${dir}"
umount "$dir"
else
echo "Erreur ! /dev/disk/by-label/${labels[$i]} non monté"
fi
rmdir "$dir"
fi
}
main()
{
unset USER
while getopts "bh" flags; do
case $flags in
b)
USER="-b"
;;
h)
echo -e "Usage: ${pkgname} [-b]"
exit 0
;;
*)
exit 3
;;
esac
done
(($EUID != 0)) && {
echo "Impossible de faire cette opération sans avoir les droits root."
exit 99
}
#run
run "$@"
}
if [ "${BASH_SOURCE[0]}" == "$0" ]; then
main "$@"
exit 0
fi