Bonjour tout le monde.
Je n'en suis pas encore à cette distinction entre fichier et répertoire pupsave; aussi il reste à solutionner le problème soulevé par jplt, à savoir quoi faire quand toutes les positions de ?drv sont occupées.
Mais je suis satisfait du résultat à ce jour de cette version 0.5 du script. (Voir capture ci-dessous.) Il crée un sfs nommé adrv-bis.sfs qu'il suffit de renommer en adrv_version-du-Puppy.sfs si la position adrv n'est pas prise. Petite note en passant, la ligne rsync de ce script est inspirée d'une ligne similaire dans le script "refractasnapshot" de la distro Refracta.
Si vous avez une minute pour « donner une go » à ce script et me faire un petit retour, je vous en serais reconnaissant. N'oubliez pas de lire les commentaires s.v.p. avant de poser des questions au sujet de ce script. Merci.
À+
#!/bin/bash
####
# /opt/local/bin/psave2adrv-0.5.sh -- Version bilingue FR-EN | Bilingual EN-FR version --
# Alternately, you can save this script in: | À la place, vous pouvez enregistrer ce script
# dans /root/my-applications/bin/psave2adrv-0.5.sh
#
########## # Usage: (EN)
# First, enter the directory where your Pup is located and open a terminal there.
# Then type: psave2adrv-0.5.sh name-and-version-of-your-Pup
#
# Example: psave2adrv-0.5.sh xenial_7.0.6
# You have to change this variable to match the Puppy's name and version.
# However, if you already are in the Puppy's folder,
# you can type: psave2adrv-0.5.sh .
#
########## # Usage : (FR)
# D'abord entrer dans le répertoire où se trouve votre Puppy et y ouvrir une console.
# Puis taper : psave2adrv.0-5.sh nom-et-version-de-votre-Puppy
#
# Exemple : psave2adrv-0.5.sh xenial_7.0.6
# Vous devez changer cette variable pour qu'elle corresponde
# au nom et à la version du Puppy.
# Cependant, si vous êtes déjà dans le répertoire du Puppy,
# vous pouvez taper : psave2adrv-0.5.sh .
####
# © musher0, 2018-03-31. GPL3 # Rév. : 2018-06-10, 11 et 15
# Q.v. https://opensource.org/licenses/GPL-3.0 for original text in English.
##########
# Ce programme est libre : vous pouvez le redistribuer ou modifier selon les termes de la
# Licence Publique Générale GNU publiée par la Free Software Foundation (v. 3 ou toute
# version ultérieure choisie par vous).
# Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE
# GARANTIE, ni explicite ni implicite, y compris des garanties de commercialisation ou
# d'adaptation à un but spécifique. Pour obtenir plus de détails, veuillez vous reporter au
# texte de cette licence à https://opensource.org/licenses/GPL-3.0 pour le texte officiel, à
# http://www.linux-france.org/article/these/gpl.html pour une traduction et à
# https://fr.wikipedia.org/wiki/Licence_publique_générale_GNU pour une explication en français.
################
####
# LANGVx="$LANG";LANG=en_CA # For tests. | Pour les tests.
clear
case "${LANG:0:2}" in
fr) echo -e "\n\e[32m\e[4m Script pour faire un « adrv » d'un \e[7mfichier\e[27m « pupsave ». \e[0m" ;;
en|*) echo -e "\n\e[32m\e[4m Script to make an 'adrv' out of a 'pupsave' \e[7mfile\e[27m. \e[0m" ;;
esac
if [ "$1" = "" ];then
case "${LANG:0:2}" in
fr) echo -e "\n\t\e[33m\e[4mVeuillez redémarrer avec le nom et la version de\e[24m
\e[4mvotre Puppy comme 1er paramètre après la commande.\e[24m
Par ex. : psave2adrv-0.5.sh \e[4mxenial_7.0.6\e[0m\n" ;;
en|*) echo -e "\n\t\e[33m\e[4mPlease restart with the name and version of\e[24m
\e[4myour Pup as the first parameter after the command.\e[24m
E.g.: psave2adrv0.5.sh \e[4mxenial_7.0.6\e[0m\n" ;;
esac
exit
fi
# Mises en garde : # Word of caution:
case "${LANG:0:2}" in
fr) echo -e "\n\t\e[33mAvez-vous :
-- émondé votre contenu (c.-à-d. enlevé les fichiers
et répertoires vides ou superflus) ?
Cela a-t-il été fait ? Tapez 'o' pour oui ou 'n' pour non.\e[0m" ;;
# -- démonté tous les sfs de programmes ?
en|*) echo -e "\n\t\e[33mHave you:
-- pruned your content (i.e. removed empty or
superfluous files and directories)?
Has this been done? Type 'y' for yes or 'n' for no.\e[0m" ;;
# -- unmounted all program sfs's?
esac
read Reponse
case $Reponse in
n|N) case "${LANG:0:2}" in
fr) echo -e "\n\t\e[33mVeuillez émonder avant de reprendre.\e[0m\n" ;;
en|*) echo -e "\n\t\e[33mPlease prune what needs to be pruned
before re-running this script.\e[0m\n" ;;
esac
exit ;;
esac
#### Où ?
# Découverte de la partition
awk -F"'" '$1 ~ /PDEV1/ { print $2 }' /etc/rc.d/PUPSTATE > /tmp/Part
awk -F"'" '$1 ~ /PSUBDIR/ { print $2 }' /etc/rc.d/PUPSTATE > /tmp/Rep
Place="/mnt/`cat /tmp/Part``cat /tmp/Rep`"
cd $Place # cd /mnt/home/xenialPup32-706-n412-FR # par ex.
# tabula rasa
rm -rdf adrv-destination/*
[ -d $Place/adrv-destination ] && rmdir --ignore-fail-on-non-empty $Place/adrv-destination
mkdir -p adrv-destination
mkdir -p pupsave-source
# Assez de MEV ?
Tot="`du -c /initrd/pup_rw | tail -1 | awk '{ print $1}'`"
MEV="`free -b | awk '$1 ~ /Mem/ { print $2}'`"
if [ "$MEV" -gt "${Tot}" ];then
MEV="`echo "scale=3;$MEV/1000000000" | bc`"
case "${LANG:0:2}" in
fr)echo -e "\t\e[33m\e[4mVous avez assez de MEV ($MEV Go).\e[0m\n" ;;
en|*)echo -e "\t\e[33m\e[4mYou have enough RAM ($MEV Gb).\e[0m\n" ;;
esac
sleep 3s
else
case "${LANG:0:2}" in
fr)echo -e "\t\e[33m\e[4mVous n'avez pas assez de MEV ($MEV Go). On ne peut continuer.\e[0m\n" ;;
en|*)echo -e "\t\e[33m\e[4mYou do not have enough RAM ($MEV Gb). We cannot continue.\e[0m\n" ;;
esac
exit
fi
# Calcul probablement conservateur, mais empêchera les mauvaises surprises.
# Probably conservative calculation, but will prevent unpleasant surprises.
# Transférer
cd adrv-destination
rsync -azm /initrd/pup_rw/* . --exclude="dev" --exclude="initrd" --exclude="lost+found" --exclude=".wh.*" --exclude="tmp"
wait
Squasher () { ReceivingArch="adrv-bis";
mksquashfs /mnt/home/xenialPup32-706-n412-FR/adrv-destination ../$ReceivingArch.sfs -noappend -all-root -b 1048576 -comp xz -Xdict-size 100% > mksfs.rpt &
# The last part of this line < -b 104... etc. > insure pretty much maximum compression
# of the sfs archive. It takes a couple of minutes, depending on the size of the pupsave file. /
# La dernière partie de cette ligne < -b 104... etc. > assure une compression quasi maximale
# de l'archive sfs. Cela prend +/- deux minutes, selon la taille du pupsave.
# Pour voir les détails de l'opération, s.v.p. ouvrir le fichier texte mksquashfs.rpt
# dans votre éditeur ou lisez-le avec more. /
# To see the details of the operation, please open the mksquashfs.rpt text file
# in your editor or read it with more.
while pgrep mksquashfs &> /dev/null;do
echo -en "\e[34m.";sleep 0.5
# Source de cette barre : réponse no 0 par « purushothaman poovai » à https://
# stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-shell-script#238094
done
echo -e "\e[0m.\n"; }
Squasher
if [ $? = 0 ];then
case ${LANG:0:2} in fr)echo -e "\t\e[33mRéussi !\e[0m\n" ;;
en|*)echo -e "\t\e[33mSuccess!\e[0m\n" ;;
esac
else
case ${LANG:0:2} in fr)echo -e "\t\e[33mQuelque chose ne tourne pas rond.
Veuillez recommencer.\e[0m\n" ;;
en|*)echo -e "\t\e[33mSomething went wrong.
Please retry.\e[0m\n" ;;
esac
fi
case ${LANG:0:2} in fr)echo -e "\t\e[33mRappelez-vous de créer un nouveau, petit, fichier
'pupsave' avant de relancer votre Puppy, par exemple
avec le script < psave-96M-2fs-a > ci-joint.\e[0m\n" ;;
en|*)echo -e "\t\e[33mPlease remember to create a new, small, pupsave
file before before rebooting your Puppy, e.g. with
included script < psave-96M-2fs-a >.\e[0m\n" ;;
esac
# LANG="$LANGVx" # For tests. | Pour les tests.
exit
~~~~~~~~~~~~~~ Notes ~~~~~~~~~~~~~~
# else
# Autres conditions : # si l'utilisateur a un répertoire pupsave, on quitte ?
# Augras a réussi à le faire, mais il serait bon de retester.
#
# case ${LANG:0:2} in
# fr)echo -e "\t\e[33mCe script ne marchera pas parce que vous avez
# un répertoire plutôt qu'un fichier de sauvegarde.
# Veuillez faire l'opération manuellement.\e[0m\n" ;;
# en|*)echo -e "\t\e[33mThis script will not work because you have
# a pupsave folder rather than a pupsave file.
# Please do this operation manually.\e[0m\n" ;;
# esac
# exit
# fi
# Autres étapes
# S'il y a déjà un [a|f|y]drv__machin : combiner ? # Détecter et offrir l'option au début ?
~~~~~~~~~~~~~~ Fin des notes ~~~~~~~~~~~~~~