Created
June 16, 2018 16:20
-
-
Save floffel/d19f93390073b8e24805e1c98cd733b4 to your computer and use it in GitHub Desktop.
Revisions
-
floffel created this gist
Jun 16, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,184 @@ #!/usr/bin/bash ############################ # Script zum erstellen von # # nspawn Containern # # # # <[email protected]> # ############################ # basic checks if [ $UID -ne 0 ]; then echo "run this script as root" >&2 exit 1 fi if [ -z "$1" ]; then echo "Usage: $0 </destination>" >&2 echo " (destination=machinename)" exit 0 fi input="$1" # Colors: ######### MRED_ON="\033[1m\033[31m" URED_ON="\033[5m\033[31m" LRED_ON="\033[0m\033[31m" MGREEN_ON="\033[1m\033[32m" LGREEN_ON="\033[0m\033[32m" MYELLOW_ON="\033[1m\033[33m" LYELLOW_ON="\033[0m\033[33m" MBLUE_ON="\033[1m\033[34m" LBLUE_ON="\033[0m\033[34m" MMAGENTA_ON="\033[1m\033[35m" UMAGENTA_ON="\033[5m\033[35m" LMAGENTA_ON="\033[0m\033[35m" MCYAN_ON="\033[1m\033[36m" UCYAN_ON="\033[5m\033[36m" LCYAN_ON="\033[0m\033[36m" BOLD_ON="\033[1m" UNDERLINE_ON="\e[4m" COL_OFF="\033[m" ########################### ###############UI-Variables UI_TEXTOUT_INSET=0 # Catch the sigint sigint_handler() { # TODO: implement better error-handling...! echo "No tmp-files where deleted... This is the end..."; # Finally, reset the Terminal echo -e "$COL_OFF" exit 1 } trap 'sigint_handler' INT # Prints the text to stdout/stderr # gets the following arguments # - any subargument in any subargument can be omitted # $TEXT_OUT $1 # ! // reverse or fatal the command # ERROR // prints the error to STDERR # INSET // insets the following code # {COLOR} // Color is one of {@COLORS} # function TEXT_OUT { #$1 #$@ local reverse="off" local error="off" if [ "$1" == "!" ]; then shift reverse="on" fi if [ "$1" == "ERROR" ]; then shift if [ "$reverse" == "on" ]; then TEXT_OUT "!" "$@" 1>&2 return else TEXT_OUT "$@" 1>&2 return fi if [ "$reverse" == "on" ]; then exit 030 fi fi if [ "$1" == "INSET" ]; then if [ "$reverse" == "on" ]; then ((UI_TEXTOUT_INSET-=1)) else ((UI_TEXTOUT_INSET+=1)) fi shift TEXT_OUT "$@" return fi # print the INSETS local inset_num=0 while [ "$inset_num" -lt "$UI_TEXTOUT_INSET" ]; do printf " " ((inset_num+=1)) done echo "$@" } # 1. Create the directory for the container # 2. Chown to floffel # 3. Packstrap container without linux function createAndPacstrapContainer { #$1 local dest="$1" TEXT_OUT "INSET" "Creating Container $dest: " if test -e "$dest"; then TEXT_OUT "!" "ERROR" "Destination directory exists: $dest!" fi mkdir "/home/container/$dest" TEXT_OUT "Running pacstrap: " pacstrap -i -c -d "$dest/" base --ignore linux TEXT_OUT "Running systemd-nspawn to start the container - remember to halt the machine" systemd-nspawn -b --network-veth -D "$dest" TEXT_OUT "Symlinking to the right direction..." ln -s "/home/container/$dest" "/var/lib/machines/$dest" TEXT_OUT "!" "INSET" "CREATED CONTAINER in directory: $dest" } # 1. create the /etc/systemd/nspawn/$dest file # 2. insert the nework bridge access granting function giveHostNetworkAccess { #$1 dest="$1" file="/etc/systemd/nspawn/$dest.nspawn" if test -e "$file"; then TEXT_OUT "!" "ERROR" "File $file alrdy exists...!" else touch "$file" echo ' [Network] Bridge=natbr0 [Files] Bind=/var/cache/pacman/pkg ' > "$file" fi TEXT_OUT "CREATED: $file" } function giveGuestNetworkAccess { #$1 dest="$1" systemctl start "systemd-nspawn@$input" sleep 10; machinectl shell "root@$dest" /bin/bash -c "systemctl enable systemd-networkd" sleep 5; machinectl shell "root@$dest" /bin/bash -c "systemctl enable systemd-resolved" sleep 5; machinectl shell "root@$dest" /bin/bash -c "systemctl start systemd-networkd" sleep 5; machinectl shell "root@$dest" /bin/bash -c "systemctl start systemd-resolved" sleep 5; machinectl shell "root@$dest" /bin/bash -c "rm /etc/resolv.conf" sleep 5; machinectl shell "root@$dest" /bin/bash -c "ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf" } giveHostNetworkAccess "$input" sleep 5; createAndPacstrapContainer "$input" sleep 5; giveGuestNetworkAccess "$input"