You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
4.4 KiB
238 lines
4.4 KiB
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
|
|
set -x
|
|
|
|
DRY=0
|
|
SYSTEMS=""
|
|
FORCE=0
|
|
DDISK=0
|
|
|
|
synopsis() {
|
|
cat << EOF
|
|
Usage : `basename $0` [-hdf] system...
|
|
`basename $0` -t disk
|
|
EOF
|
|
}
|
|
|
|
help() {
|
|
cat << EOF
|
|
|
|
`basename $0` télécharge les disques associés au(x) système(s).
|
|
|
|
`synopsis`
|
|
|
|
Les disques utilisés par les systèmes spécifiés sont téléchargés.
|
|
|
|
Remarque : les fichiers "*.disk.gz" sont automatiquement decompressés.
|
|
|
|
-h : affiche cette aide
|
|
-d : dry run
|
|
-f : pas de demande de confirmation
|
|
|
|
EOF
|
|
}
|
|
|
|
usage() {
|
|
synopsis
|
|
exit 1
|
|
}
|
|
|
|
args() {
|
|
local opt
|
|
while getopts "hdft" opt; do
|
|
case $opt in
|
|
h) help; exit 0;;
|
|
d) DRY=1;;
|
|
f) FORCE=1;;
|
|
t) DDISK=1;;
|
|
?) usage;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND-1))
|
|
SYSTEMS=$@
|
|
if [ -z "$SYSTEMS" ]; then
|
|
SYSTEMS=$(vdn-list | grep -v '^#')
|
|
fi
|
|
#[ $# -lt 1 ] && usage
|
|
}
|
|
|
|
download() {
|
|
|
|
local i
|
|
|
|
echo "start download func"
|
|
|
|
|
|
for i in $@; do
|
|
|
|
echo "loop"
|
|
file=$(basename $i .gz)
|
|
echo "file:$file"
|
|
if [[ $i =~ \.gz ]]; then
|
|
if [ $DRY = 1 ]; then
|
|
echo "Dry run : download $i"
|
|
else
|
|
echo "Download to $VDN_PATH/files/$file..."
|
|
wget -c -O - $i | { gzip -d -c || error "Problème de téléchargement"; } | \
|
|
dd of=$VDN_PATH/files/$file conv=sparse bs=512 || \
|
|
error "Problème de téléchargement"
|
|
fi
|
|
if [ "$(stat -c %s $VDN_PATH/files/$file)" = "0" ]; then
|
|
error "Problème de téléchargement"
|
|
fi
|
|
|
|
else
|
|
echo "no gz"
|
|
if [ $DRY = 1 ]; then
|
|
echo echo "Dry run : download $i"
|
|
else
|
|
wget -c -O $VDN_PATH/files/$file $i
|
|
fi
|
|
fi
|
|
done
|
|
}
|
|
|
|
downloadDisks() {
|
|
|
|
local error=0 absent=0 r
|
|
|
|
LIST=""
|
|
LIST_DISKS=""
|
|
|
|
# find all files (uniq)
|
|
|
|
for i; do
|
|
GUEST_NAME="$i"
|
|
if echo $GUEST_NAME | grep -q '/'; then
|
|
error "$GUEST_NAME est un nom de système invalide"
|
|
fi
|
|
|
|
DISKS_REPOSITOY="";
|
|
CDROM_REPOSITORY="";
|
|
HDA=""; HDB=""; CDROM=""; BOOT_CDROM="0";
|
|
KERNEL=""; INITRAMFS=""
|
|
|
|
loadGuestVars $GUEST_NAME
|
|
|
|
[ "$MODE" = "tgz" ] && {
|
|
[ -n "$KERNEL" ] && LIST="$LIST $DISKS_REPOSITORY/$KERNEL"
|
|
[ -n "$INITRAMFS" ] && LIST="$LIST $DISKS_REPOSITORY/$INITRAMFS"
|
|
}
|
|
|
|
#[ -n "$CDROM" -a "$BOOT_CDROM" = 1 ] &&
|
|
[ -n "$CDROM" ] && \
|
|
LIST="$LIST $CDROM_REPOSITORY/$CDROM"
|
|
|
|
[ -n "$HDA" ] && LIST_DISKS="$LIST_DISKS $DISKS_REPOSITORY/$HDA.gz"
|
|
[ -n "$HDB" ] && LIST_DISKS="$LIST_DISKS $DISKS_REPOSITORY/$HDB.gz"
|
|
|
|
done
|
|
|
|
#set -x
|
|
LIST_DISKS=$(echo $LIST_DISKS | tr -s ' ' '\n' | sort -u | grep -v '^$')
|
|
LIST=$(echo $LIST | tr -s ' ' '\n' | sort -u | grep -v '^$' || :)
|
|
|
|
LIST="$LIST $LIST_DISKS"
|
|
|
|
#echo "LIST :"
|
|
#echo $LIST | tr -s ' ' '\n'
|
|
|
|
# test dates
|
|
|
|
LIST_DOWNLOAD=""
|
|
|
|
for i in $LIST; do
|
|
file=$(basename $i .gz)
|
|
locDate=0
|
|
[ -e $VDN_PATH/files/$file ] && \
|
|
locDate=$(stat -c %Y $VDN_PATH/files/$file)
|
|
|
|
set +e
|
|
reInfos="$(wget --spider -S $i 2>&1)"
|
|
r=$?
|
|
set -e
|
|
|
|
if [ $r -ne 0 ]; then
|
|
warning "$(basename $i) not found on server !"
|
|
error=1
|
|
[ ! -e $VDN_PATH/files/$file ] && absent=1
|
|
continue
|
|
fi
|
|
|
|
reDate=$(echo "$reInfos" | grep "Last-Modified:" | cut -d ':' -f 2-)
|
|
reDate=$(date -d "$reDate" +%s)
|
|
|
|
#echo $locDate $reDate
|
|
|
|
[ $locDate -lt $reDate ] && LIST_DOWNLOAD="$LIST_DOWNLOAD $i"
|
|
done
|
|
|
|
if [ $error = 1 ]; then
|
|
if [ -n "$LIST_DOWNLOAD" ]; then
|
|
if [ $FORCE = 0 ]; then
|
|
request "Tous les fichiers ne peuvent être téléchargés !\nTélécharger quand même ceux qui peuvent l'être ?"
|
|
[ $? -ne 0 ] && exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
[ -n "$LIST_DOWNLOAD" ] && {
|
|
echo
|
|
echo "LIST_DOWNLOAD :"
|
|
echo
|
|
echo $LIST_DOWNLOAD | tr -s ' ' '\n'
|
|
echo
|
|
|
|
NEW=""
|
|
|
|
for i in $(echo $LIST_DOWNLOAD | tr -s ' ' '\n'); do
|
|
request "Télécharger le fichier : $i ?"
|
|
|
|
[ $? -eq 0 ] && NEW="$NEW $i" || :
|
|
done
|
|
LIST_DOWNLOAD=$NEW
|
|
|
|
}
|
|
|
|
if [ -n "$LIST_DOWNLOAD" -a $FORCE = 0 ]; then
|
|
request "Télécharger les fichiers ?"
|
|
[ $? -ne 0 ] && exit 0
|
|
fi
|
|
|
|
|
|
# download
|
|
|
|
echo "LIST_DOWNLOAD:$LIST_DOWNLOAD"
|
|
download $LIST_DOWNLOAD
|
|
|
|
echo "End of download"
|
|
|
|
for i in $LIST; do
|
|
file=$(basename $i .gz)
|
|
if [ ! -e $VDN_PATH/files/$file ]; then
|
|
warning "$file absent"
|
|
absent=1
|
|
fi
|
|
done
|
|
|
|
[ $absent = 1 ] && error "Fichiers manquants" || :
|
|
}
|
|
|
|
|
|
# Programme principal
|
|
|
|
GUEST_OWNER=$USER
|
|
VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh
|
|
|
|
|
|
args "$@"
|
|
|
|
if [ $DDISK = 1 ]; then
|
|
download http://opale.u-clermont1.fr/vdn/files/$SYSTEMS
|
|
else
|
|
downloadDisks $SYSTEMS
|
|
fi
|