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.
203 lines
4.1 KiB
203 lines
4.1 KiB
#!/bin/bash
|
|
|
|
# Script de configuration est utilisé par VDN.
|
|
# Ne pas supprimer/modifier
|
|
|
|
getRandomPasswd() {
|
|
local k
|
|
|
|
while :; do
|
|
k=$(tr -dc _A-Z-a-z-0-9 < /dev/urandom 2> /dev/null | head -c${1:-32} )
|
|
if [ $(echo -n $k | wc -c) = 32 ]; then
|
|
break
|
|
fi
|
|
echo "Wait for entropy avail : $(cat /proc/sys/kernel/random/entropy_avail)" >&2
|
|
sleep 1
|
|
done
|
|
echo -n $k
|
|
}
|
|
|
|
set -x
|
|
|
|
echo "Start rc.local (buster)..."
|
|
|
|
echo "cmdline:$(cat /proc/cmdline)"
|
|
|
|
lastDisk=$(lsblk -i -n -o PATH | grep '/...$' | tail -n 1)
|
|
lastDiskSize=$(lsblk -n -b -o SIZE $lastDisk)
|
|
|
|
# Disque supplémentaire (avec la clé publique, ...) ?
|
|
|
|
#[ $lastDiskSize -gt 200000 ] && exit 0
|
|
|
|
# Si oui
|
|
|
|
# Désarchive la configuration en provenance de VDN
|
|
|
|
# le fichier /etc/vdn/rc.vdn n'est modifié que si absent
|
|
# Consultez les répertoires distribs/guest/...
|
|
|
|
[ ! -d /etc/vdn ] && mkdir /etc/vdn
|
|
|
|
tar -C / -xzf $lastDisk
|
|
|
|
[ -e /etc/vdn/config ] && {
|
|
set -a
|
|
. /etc/vdn/config
|
|
}
|
|
|
|
[ $VDN_DEBUG = 1 ] && set -x || :
|
|
|
|
# set real / mode
|
|
chmod 755 /
|
|
chown root:root / /etc
|
|
chown -R root:root /etc/vdn
|
|
|
|
systemctl restart haveged
|
|
|
|
# extract files (host, all, guest)
|
|
if [ $MODE = "cow" ]; then
|
|
for d in /etc/vdn/host /etc/vdn/all /etc/vdn/guest; do
|
|
if [ -d $d ]; then
|
|
( cd $d && tar czf - . ) | ( cd / && tar --no-same-owner --sparse -xpzf - )
|
|
fi
|
|
done
|
|
fi
|
|
|
|
|
|
# swap
|
|
if [ $SWAP_SIZE != 0 ]; then
|
|
swapDev=$(lsblk -n -o PATH | grep '/...$' | tail -n 2 | head -n 1)
|
|
swapoff -a
|
|
swapon $swapDev
|
|
fi
|
|
|
|
|
|
if [ ! -e /etc/vdn-$MODE-initialized ]; then
|
|
|
|
# regenerate ssh_host_keys
|
|
|
|
rm -f /etc/ssh/ssh_host_*
|
|
|
|
dpkg-reconfigure openssh-server
|
|
|
|
#systemctl restart ssh
|
|
|
|
# Random root and test password
|
|
|
|
echo "Random passwords."
|
|
|
|
k=$(getRandomPasswd)
|
|
#echo "root passwd : $k"
|
|
passwdRoot=$k #$(cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32};)
|
|
k=$(getRandomPasswd)
|
|
#echo "test passwd : $k"
|
|
passwdTest=$k #$(cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c${1:-32};)
|
|
|
|
cat <<- EOF | chpasswd
|
|
root:$passwdRoot
|
|
test:$passwdTest
|
|
EOF
|
|
|
|
touch /etc/vdn-$MODE-initialized
|
|
|
|
fi
|
|
|
|
# Add user id_rsa.pub to /root/.ssh/authorized_keys
|
|
|
|
[ ! -d /root/.ssh ] && {
|
|
mkdir /root/.ssh
|
|
chmod 700 /root/.ssh
|
|
}
|
|
|
|
[ ! -e /root/.ssh/authorized_keys ] &&
|
|
touch /root/.ssh/authorized_keys
|
|
|
|
k=$(cat /etc/vdn/.ssh/id_rsa.pub)
|
|
|
|
[ -n "$k" ] && {
|
|
! fgrep -q "$k" /root/.ssh/authorized_keys &&
|
|
echo "$k" >> /root/.ssh/authorized_keys
|
|
}
|
|
|
|
|
|
# Add user id_rsa.pub to /home/test/.ssh/authorized_keys
|
|
|
|
if [ -d "/home/test" ]; then
|
|
if [ ! -d /home/test/.ssh ]; then
|
|
mkdir /home/test/.ssh
|
|
chown test: /home/test/.ssh
|
|
chmod 700 /home/test/.ssh
|
|
fi
|
|
|
|
[ ! -e /home/test/.ssh/authorized_keys ] &&
|
|
touch /home/test/.ssh/authorized_keys
|
|
|
|
chown test: /home/test/.ssh
|
|
|
|
if [ -n "$k" ]; then
|
|
! fgrep -q "$k" /home/test/.ssh/authorized_keys &&
|
|
echo "$k" >> /home/test/.ssh/authorized_keys
|
|
fi
|
|
fi
|
|
|
|
|
|
# init slirp connection
|
|
|
|
lastEth=$(ifconfig -a | grep eth[0-9] | tail -n 1 | cut -d ':' -f 1)
|
|
echo "lastEth=$lastEth"
|
|
|
|
[ -n "$lastEth" ] && {
|
|
ifconfig $lastEth down
|
|
sleep 1
|
|
dhclient $lastEth
|
|
|
|
|
|
if [ "$EXTRA_ETH_DEFAULT_ROUTE" = 0 ]; then
|
|
# Set default root to host (slirp)
|
|
#route add default gw 10.0.2.2 &> /dev/null
|
|
route del default gw 10.0.2.2 &> /dev/null
|
|
else
|
|
echo "Set default route to 10.0.2.2"
|
|
route add default gw 10.0.2.2 &> /dev/null
|
|
fi
|
|
|
|
ping -c 1 10.0.2.2 &> /dev/null &
|
|
|
|
#echo "EXTRA_ETH_MASQUERADING:$EXTRA_ETH_MASQUERADING"
|
|
|
|
if [ "$EXTRA_ETH_MASQUERADING" = 1 ]; then
|
|
#echo "iptables -t nat -A POSTROUTING -o $lastEth -j MASQUERADE"
|
|
iptables -t nat -A POSTROUTING -o $lastEth -j MASQUERADE
|
|
fi
|
|
|
|
}
|
|
|
|
### ON_BOOT
|
|
|
|
if [ ! -z "$ON_BOOT" ]; then
|
|
echo "ON_BOOT:$ON_BOOT"
|
|
eval $ON_BOOT
|
|
fi
|
|
|
|
### run rc scripts
|
|
|
|
rcScripts=$(ls /etc/vdn/[0-9]* 2> /dev/null)
|
|
|
|
# Add vdn.rc
|
|
|
|
[ -e /etc/vdn/vdn.rc ] && rcScripts="$rcScripts /etc/vdn/vdn.rc"
|
|
|
|
# run rc scripts
|
|
|
|
for i in $rcScripts; do
|
|
echo "Run script : $i"
|
|
. $i
|
|
done
|
|
|
|
systemctl unmask ssh
|
|
sleep 1
|
|
systemctl enable ssh
|
|
systemctl start ssh
|
|
|