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.
191 lines
4.4 KiB
191 lines
4.4 KiB
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
#set -x
|
|
|
|
DISK_NAME="DebianBuster-amd64.disk"
|
|
FOR_ROOT=0
|
|
USE_SUDO=0
|
|
UMOUNT=0
|
|
|
|
synopsis() {
|
|
cat << EOF
|
|
Usage : `basename $0` [-h] [-r] [-i user] [-s] [-u]
|
|
EOF
|
|
}
|
|
|
|
help() {
|
|
cat << EOF
|
|
|
|
`basename $0` exécute VDN dans un environnement chroot en utilisant le disque :
|
|
|
|
$DISK
|
|
|
|
* Le mot de passe root vous sera demandé !
|
|
|
|
AVERTISSEMENTS :
|
|
|
|
1. de nombreuses opérations sous root sont effectuées (montages, chroot,
|
|
démontages). Pour que le démontage se fasse correctement, fermez toutes
|
|
les fénêtres et processus de l'environnement chroot (VDN).
|
|
|
|
2. L'isolation entre le système initial et le système chrooté n'est pas
|
|
totale. Les répertoires suivants du système initial sont partagés :
|
|
/dev, /dev/pts, /sys, /proc, /tmp et /home/$USER.
|
|
|
|
Autrement dit, ne faites pas n'importe quoi avec ces répertoires, ce
|
|
sont ceux de votre système.
|
|
|
|
`synopsis`
|
|
|
|
-h : affiche cette aide.
|
|
-r : (réservé) exécution spécifique à l'utilisateur root. Ne pas utiliser
|
|
directement sans savoir ce que vous faites !
|
|
-s : utilise "sudo" plutôt que "su -" pour basculer sous le compte root.
|
|
-i user : (réservé) indique l'utilisateur pour l'option -r. Ne pas utiliser
|
|
directement sans savoir ce que vous faites !
|
|
-u : démontages seulement.
|
|
|
|
EOF
|
|
}
|
|
|
|
usage() {
|
|
synopsis
|
|
exit 1
|
|
}
|
|
|
|
args() {
|
|
local opt
|
|
while getopts "hrsi:u" opt; do
|
|
case $opt in
|
|
h) help; exit 0;;
|
|
r) FOR_ROOT=1;;
|
|
s) USE_SUDO=1;;
|
|
i) USER="$OPTARG";;
|
|
u) UMOUNT=1;;
|
|
?) usage;;
|
|
esac
|
|
done
|
|
shift $(($OPTIND - 1))
|
|
[ $# -ne 0 ] && usage || :
|
|
}
|
|
|
|
vdnMountChrootForRoot() {
|
|
|
|
#key="$(cat $TMPDIR/vdn-key-$USER)"
|
|
|
|
disp=$(cat $TMPDIR/vdn-display-$USER)
|
|
|
|
echo "USER:$USER"
|
|
|
|
d=$TMPDIR/vdn-chroot-$USER;
|
|
|
|
if [ $UMOUNT = 0 ]; then
|
|
|
|
mount | grep -q $d || mount -o loop,offset=$((2048*512)) $DISK $d
|
|
|
|
for i in /dev /dev/pts /sys /proc /tmp /etc; do
|
|
mount | grep -q $d$i || { mount --bind $i $d$i; }
|
|
done
|
|
|
|
#mount --bind $VDN_PATH $d/home/test/vdn
|
|
mount --rbind /home $d/home
|
|
|
|
#mount | grep $d
|
|
|
|
#chroot $d su - -s /bin/bash -c "export DISPLAY=":"$disp; \
|
|
#unset XAUTHORITY; rm -rf /home/test/.config/xfce4-session; \
|
|
#rm -rf /home/test/.config/xfce4/terminal/; \
|
|
#xauth add \$DISPLAY . $key; \
|
|
#export NO_AT_BRIDGE=1; \
|
|
#xfce4-terminal --disable-server # 2> /dev/null;" test
|
|
|
|
whoami
|
|
|
|
ls -l $VDN_PATH/bin/vdn
|
|
|
|
#chroot $d su - $VDN_PATH/bin/vdn $USER
|
|
|
|
chroot $d su - --session-command "export DISPLAY=:"$disp"; $VDN_PATH/bin/vdn" $USER || :
|
|
|
|
#chroot $d su - -s /bin/bash -c "export DISPLAY=":"$disp; \
|
|
#xfce4-terminal --disable-server # 2> /dev/null;" $USER
|
|
|
|
fi
|
|
|
|
for i in /tmp /proc /sys /dev/pts /dev /etc; do
|
|
mount | grep -q $d$i && { umount $d$i || { echo "umount lazy : $d$i"; umount -l $d$i; } ; } || :
|
|
done
|
|
|
|
|
|
fuser -mv $d/home
|
|
|
|
mount | grep -q $d/home && { umount -l $d/home; } || :
|
|
sleep 1
|
|
mount | grep -q $d && { umount $d || umount -l $d; } || :
|
|
|
|
mount | grep $d
|
|
|
|
}
|
|
|
|
vdnMountChroot() {
|
|
|
|
d=$TMPDIR/vdn-chroot-$USER; [ ! -d $d ] && mkdir $d || :
|
|
|
|
if [ $UMOUNT = 0 ]; then
|
|
|
|
# get display
|
|
|
|
(rm -f $TMPDIR/vdn-display-$USER; umask 077 ; touch $TMPDIR/vdn-display-$USER)
|
|
DISP=$(echo $DISPLAY | cut -d ':' -f 2 | cut -d '.' -f 1)
|
|
echo $DISPLAY | cut -d ':' -f 2 >> $TMPDIR/vdn-display-$USER
|
|
|
|
# get xauth key
|
|
|
|
#key=$(xauth list| grep $(uname -n) | grep $DISP | tail -n 1 | tr -s ' ' | cut -d ' ' -f 3)
|
|
|
|
#[ -n "$key" ] || error "Xauth key is empty !"
|
|
#echo $key | egrep -q '^[[:xdigit:]]+$' || error "Bad xauth key ($key) !"
|
|
|
|
#(rm -f $TMPDIR/vdn-key-$USER; umask 077 ; touch $TMPDIR/vdn-key-$USER)
|
|
|
|
#echo $key >> $TMPDIR/vdn-key-$USER
|
|
|
|
|
|
fi
|
|
|
|
if [ $USE_SUDO = 0 ]; then
|
|
echo "Le mot de passe demandé est celui de l'administrateur (root)"
|
|
if [ $UMOUNT = 0 ]; then
|
|
su - -c "$VDN_PATH/bin/vdn-mount-chroot -r -i $USER"
|
|
else
|
|
su - -c "$VDN_PATH/bin/vdn-mount-chroot -r -i $USER -u"
|
|
fi
|
|
else
|
|
if [ $UMOUNT = 0 ]; then
|
|
sudo $VDN_PATH/bin/vdn-mount-chroot -r -i $USER
|
|
else
|
|
sudo $VDN_PATH/bin/vdn-mount-chroot -r -i $USER -u
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Programme principal
|
|
|
|
VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh
|
|
|
|
DISK=$VDN_PATH/files/$DISK_NAME
|
|
|
|
[ ! -e $DISK ] && error "$DISK not found !" || :
|
|
if [ ! -w $DISK ]; then
|
|
error "$DISK doit être accessible à l'utilisateur en écriture !"
|
|
fi
|
|
|
|
args "$@"
|
|
|
|
if [ $FOR_ROOT = 1 ];then
|
|
vdnMountChrootForRoot
|
|
else
|
|
vdnMountChroot
|
|
fi
|