diff --git a/41_snapshots-btrfs b/41_snapshots-btrfs index ab22278..6e92175 100644 --- a/41_snapshots-btrfs +++ b/41_snapshots-btrfs @@ -1,139 +1 @@ -#! /usr/bin/bash -set -e - -. /usr/share/grub/grub-mkconfig_lib -. /etc/default/grub - -###################################### -### variables in /etc/default/grub ### -###################################### -## Submenu name -submenuname=${GRUB_BTRFS_SUBMENUNAME:-"ArchLinux Snapshots"} -## Prefix entry -prefixentry=${GRUB_BTRFS_PREFIXENTRY:-"Snapshot"} -## Kernel(s) name(s) -nkernel=("${GRUB_BTRFS_NKERNEL[@]:-vmlinuz-linux}") -## Initramfs name(s) -ninit=("${GRUB_BTRFS_NINIT[@]:-initramfs-linux.img initramfs-linux-fallback.img}") -## Intel-ucode name(s) -intel_ucode=("${GRUB_BTRFS_INTEL_UCODE[@]:-intel-ucode.img}") - -######################## -### variables script ### -######################## -## Internationalization (default : english) -export TEXTDOMAIN=grub-btrfs-git -export TEXTDOMAINDIR="/usr/share/locale" -## fr: paramêtre des chaînes --hint -## en: Parameter of the chains --hint (Translation unclear) -pboot=$(${grub_probe} --target="hints_string" "/boot" 2>/dev/null) -## UUID of the root partition -uuid=$(${grub_probe} "/" --target="fs_uuid" 2>/dev/null) -## UUID of the boot partition -buuid=$(${grub_probe} --target="fs_uuid" "/boot" 2>/dev/null) -## Parameters passed to the kernel -params="$GRUB_CMDLINE_LINUX $GRUB_CMDLINE_LINUX_DEFAULT" - -############## -### Script ### -############## - -typeset -A date_time -unset snapshots - -# Create list of filesystem snapshots -oldIFS=$IFS -IFS=$'\n' - -for snap in $($bindir/btrfs subvolume list -sa / --sort=-ogen | $bindir/awk '{gsub(/^.*\//,"",$NF);print $11" "$12"?"$NF}'); do - snap_name="${snap#*"?"}" - # Discard deleted snapshots - if [ $snap_name = "DELETED" ]; then continue; fi - snapshots+=("$snap_name") - date_time[$snap_name]="${snap%"?"*}" -done -IFS=$oldIFS - -# fr: on affiche le menu -# en: Display the menu -echo "submenu '$submenuname' {" - -# fr: on traite la variable kernel -# en: Treat the kernel variables (Translation unclear) -for kernel in ${nkernel[@]}; do - # fr: on test si le(s) nom(s) du(des) kernel existe(nt), autrement on affiche une erreur et on sort - # en: Check the specified kernel(s) exist, if it/they don't, display an error and exit - if [ ! -f /boot/$kernel ]; then gettext_printf $"Error: /boot/$kernel, kernel does not exist" >&2; exit 1; fi - # fr: on vérifie le nombre de kernel présent, si >1 on crée un menu - # en: If there are >1 kernels, create a menu - if [ ${#nkernel[*]} != 1 ]; then echo " submenu '$kernel' { - submenu '---> Kernel: $kernel <---' { echo }"; fi - # fr: On traite la variable snapshots - # en: Treat the snapshots variable - for item in ${snapshots[@]}; do - # fr: affiche la liste des snapshots trouvés - # en: Output name of snapshot - gettext_printf $"Found Snapshot: %s\n" "$item ${date_time[$item]}" >&2 - # fr: on crée un menu pour chaque snapshot présent (nom + date de création) - # en: Create a menu for remaining snapshots (name + creation date) - echo " submenu '$prefixentry $item [${date_time[$item]}]' {" - # fr: si plusieurs kernel on été trouvé, on affiche un titre indicatif - # en: if more than one kernel is found, create a menu - if [ ${#nkernel[*]} != 1 ]; then echo " submenu '---> Kernel: $kernel <---' { echo }"; fi - # fr: on traite la variable de l'initramfs - # en: Treat the initramfs variables (Translation unclear) - for init in ${ninit[@]}; do - # fr: on test si le(s) nom(s) du(des) initramfs existe(nt), autrement on affiche une erreur et on sort - # en: Check the specified initramfs(es) exist, if it/they don't, display an error and exit - if [ ! -f /boot/$init ]; then gettext_printf $"Error: /boot/$init, initramfs does not exist" >&2; exit 1; fi - # fr: on traite chaque entrée des snapshots avec leurs kernel et initramfs respectifs - # en: Specify a kernel and initramfs for every snapshot - echo "\ - menuentry '$item $init' --class arch --class gnu-linux --class gnu --class os "\$menuentry_id_option" 'gnulinux-snapshots-$uuid'{ - load_video - set gfxpayload=$GRUB_GFXPAYLOAD_LINUX - if [ x"\$feature_platform_search_hint" = xy ]; then - search --no-floppy --fs-uuid --set=root $pboot $buuid - else - search --no-floppy --fs-uuid --set=root $buuid - fi - echo 'Loading Linux snapshot ...'" - # fr: on vérifie l'emplacement de la partition /boot - # en: Check the location of the /boot partition - if [ $uuid = $buuid ]; then - echo "\ - linux /$item/boot/$kernel root=UUID=$uuid rw rootflags=subvol=$item $params - echo 'Loading initial ramdisk ...'" - # fr: on vérifie la présence du microcode intel - # en: Check intel microcode exist - if [ -f /boot/$intel_ucode ]; then - echo "\ - initrd /$item/boot/$intel_ucode /$item/boot/$init" - else - echo "\ - initrd /$item/boot/$init" - fi - else - echo "\ - linux /$kernel root=UUID=$uuid rw rootflags=subvol=$item $params - echo 'Loading initial ramdisk ...'" - # fr: on vérifie la présence du microcode intel - # en: Check intel microcode exist - if [ -f /boot/$intel_ucode ]; then - echo "\ - initrd /$intel_ucode /$init" - else - echo "\ - initrd /$init" - fi - fi - echo "\ - }" - done - echo " }" - done - # fr: on oubli pas de fermer le menu si plusieurs kernels ont été trouvé - # en: Don't forget to close menus if more than one kernel is found - if [ ${#nkernel[*]} != 1 ]; then echo " }"; fi -done -echo "}" \ No newline at end of file +in progress ...