dotfiles/scripts/create_container

77 lines
2 KiB
Bash
Executable file

#!/bin/bash
# Debian containers only
# ca-certificates needed in order to clone from github
PACKAGES="ca-certificates vim git dbus "
REPO=https://github.com/SonnyBA/dotfiles.git
run() {
systemd-nspawn -D $CONTAINER_PATH $@
}
add_ssh() {
sed -i 's/^#Port .*/Port '"$PORT"'/' $CONTAINER_PATH/etc/ssh/sshd_config
sed -i 's/^#PermitRootLogin .*/PermitRootLogin yes/' $CONTAINER_PATH/etc/ssh/sshd_config
cat <<- 'EOF' > $CONTAINER_PATH/root/.bash_profile
# Start ssh-agent and add keys in ~/.ssh directory
# Should only be used without a desktop manager
ENV=/tmp/.agent_env
KEYS=$(basename --suffix=.pub -a $HOME/.ssh/*.pub)
if [ -z "$SSH_AGENT_PID" ] && [ ! -e "$ENV" ] ; then
ssh-agent > $ENV
source $ENV
for key in $KEYS;
do
ssh-add ~/.ssh/$key
done
echo 'Agent started'
else
source $ENV
echo 'Agent started already, good to go'
fi
EOF
}
dotfiles() {
run git clone $REPO /root/dotfiles
run /root/dotfiles/initialize_script
}
read -e -p "Enter the path of the container (including container root): " CONTAINER_PATH
read -p "Enter debian release channel: " CHANNEL
read -e -p "Enter (private) ssh key for git (absolute path): " KEY
read -p "Start a ssh server? [y/n]: " SSH_SERVER
if [ "$SSH_SERVER" == "y" ];then
read -p "Enter ssh listening port: " PORT
PACKAGES+=" ssh "
fi
echo "Current packages: $PACKAGES"
read -p "Enter additional packages (space separated) to install or leave blank: " EXTRA
PACKAGES+=$EXTRA
# Seperate packages with a comma for debootstrap's include flag
PACKAGES=$(echo $PACKAGES | sed 's/\ /,/g;s/,$//')
read -p "Add dotfiles? [y/n]: " DOTFILES
echo "Creating container.."
debootstrap --include=$PACKAGES $CHANNEL $CONTAINER_PATH
mkdir $CONTAINER_PATH/root/.bin/
echo "Copying key.."
mkdir $CONTAINER_PATH/root/.ssh
cp $KEY $KEY.pub $CONTAINER_PATH/root/.ssh/
if [ "$SSH_SERVER" == "y" ] ;then
add_ssh
fi
if [ "$DOTFILES" == "y" ] ;then
dotfiles
fi
echo "Enter root pass"
run passwd