#!/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