diff options
-rwxr-xr-x | satellit_upgrader/pack-update.sh | 75 | ||||
-rw-r--r-- | satellit_upgrader/updater.template.sh | 24 |
2 files changed, 80 insertions, 19 deletions
diff --git a/satellit_upgrader/pack-update.sh b/satellit_upgrader/pack-update.sh index 37b96c1..3997b98 100755 --- a/satellit_upgrader/pack-update.sh +++ b/satellit_upgrader/pack-update.sh @@ -3,10 +3,10 @@ declare -rg SELFPID=$$ perror () { if [ -n "$IGNORE_ERRORS" ]; then - echo "[ERROR] $@" + echo "${RED}[ERROR]${RESET} $@" return 0 fi - echo "[FATAL] $@" + echo "${RED}[FATAL]${RESET} $@" [ "$$" != "$SELFPID" ] && kill "$SELFPID" exit 1 } @@ -24,9 +24,43 @@ declare -rg TGZ_DOZMOD="files/dozmod.tar.gz" declare -rg TGZ_TASKMANAGER="files/taskmanager.tar.gz" declare -rg TGZ_TFTP="files/tftpdir.tar.gz" declare -rg TGZ_IPXE="files/ipxe.tar.gz" +declare -rg FILES_IPXE=" + pxelinux.0 + src/ + .git/ +" declare -rg TGZ_LDADP="files/ldadp.tar.gz" declare -rg TGZ_DNBD3="files/dnbd3-server.tar.gz" +checkfiles () { +tar tf "$1" | awk -v strings="$2" ' +BEGIN { + numStrings = split(strings,tmp) + for (i in tmp) strs[tmp[i]] +} +numStrings == 0 { exit 0 } +{ + for (str in strs) { + if ( $0 == str ) { + delete strs[str] + numStrings-- + } + } +} +END { exit (numStrings ? 1 : 0) } +' +} + +RED= +GREEN= +RESET= +if [ -t 1 ]; then + RED=$( echo -en '\033[1;31m' ) + GREEN=$( echo -en '\033[1;32m' ) + RESET=$( echo -en '\033[0m' ) +fi +readonly RED GREEN RESET + # Prepare installer cp "updater.template.sh" "$UPDATER" || perror "could not copy template" chmod +x "$UPDATER" @@ -67,13 +101,20 @@ fi addpayload () { echo -n "Includes $2: " - local FILEVAR=$1 + local FILEVAR="TGZ_$1" + local LISTVAR="FILES_$1" local FILENAME=${!FILEVAR} + local LISTFILES=${!LISTVAR} if [ -e "${FILENAME}" ]; then - echo "yes" + if [ -n "$LISTFILES" ] && ! checkfiles "$FILENAME" "$LISTFILES"; then + echo "${RED}no !!! BAD FORMAT !!!${RESET}" + patchtgz "$FILEVAR" + return + fi + echo "${GREEN}yes${RESET}" patchtgz "$FILEVAR" "$FILENAME" else - echo "no" + echo "${RED}no${RESET}" patchtgz "$FILEVAR" fi } @@ -83,15 +124,15 @@ addinstallfile () { local file=$1 local path=$(dirname "$file") if [ ! -d "../satellit_installer" ]; then - echo "NO! (satellit_installer not found)" + echo "${RED}NO!${RESET} (satellit_installer not found)" elif [ ! -e "../satellit_installer/static_files/$file" ]; then - echo "NO! (file not found in satellit_installer/static_files)" + echo "${RED}NO!${RESET} (file not found in satellit_installer/static_files)" else mkdir -p "files/$path" || echo -n "(mkdir failed) " if cp "../satellit_installer/static_files/$file" "files/$file"; then - echo "yes" + echo "${GREEN}yes${RESET}" else - echo "...no! (copy failed)" + echo "...${RED}no!${RESET} (copy failed)" fi fi } @@ -100,7 +141,7 @@ addinstallfile () { # slxadmin version echo -n "Includes SLX-Admin: " if [ -e "$TGZ_SLXADMIN" ]; then - echo "yes" + echo "${GREEN}yes${RESET}" VERS=$(date +%Y%j%H) [ -n "$VERS" ] || perror "Could not extract slx-admin version!" echo "Version: $VERS" @@ -108,16 +149,16 @@ if [ -e "$TGZ_SLXADMIN" ]; then sed -i "s/%SLXADMIN_FOOTER%/$(date '+%y-%m-%d %H:%M')/" "$UPDATER" || perror "could not patch slxadmin footer in updater" patchtgz "TGZ_SLXADMIN" "$TGZ_SLXADMIN" else - echo "no" + echo "${RED}no${RESET}" patchtgz "TGZ_SLXADMIN" fi -addpayload "TGZ_DOZMOD" "Dozmod server" -addpayload "TGZ_TASKMANAGER" "Taskmanager" -addpayload "TGZ_TFTP" "TFTP/PxeLinux data" -addpayload "TGZ_IPXE" "iPXE source code" -addpayload "TGZ_LDADP" "ldap/ad proxy" -addpayload "TGZ_DNBD3" "dnbd3-server" +addpayload "DOZMOD" "Dozmod server" +addpayload "TASKMANAGER" "Taskmanager" +addpayload "TFTP" "TFTP/PxeLinux data" +addpayload "IPXE" "iPXE source code" +addpayload "LDADP" "ldap/ad proxy" +addpayload "DNBD3" "dnbd3-server" if [ -z "$LEAN" ]; then addinstallfile "lighttpd.conf" diff --git a/satellit_upgrader/updater.template.sh b/satellit_upgrader/updater.template.sh index b51a0f4..2f34c0c 100644 --- a/satellit_upgrader/updater.template.sh +++ b/satellit_upgrader/updater.template.sh @@ -209,6 +209,7 @@ if [ -n "$TGZ_TASKMANAGER" ]; then tar -x -C "$PATH_TASKMANAGER" -f "$TMPDIR/$TGZ_TASKMANAGER" fixperms "$PATH_TASKMANAGER" root:root chmod -R a+x "$PATH_TASKMANAGER/scripts" + # Where we place the downloadable iPXE images mkdir -p -m 0755 "/srv/openslx/www/boot/download" fixperms "/srv/openslx/www/boot/download" taskmanager:www-data echo "Restarting service" @@ -240,7 +241,7 @@ if [ -n "$TGZ_IPXE" ]; then } & IPXE_PID=$! fi -# Need mtools +# Need mtools for creating floppy images for iPXE if ! which mformat &>/dev/null; then failprint apt-get install -y mtools fi @@ -252,6 +253,8 @@ if [ -n "$TGZ_SLXADMIN" ]; then # Test archive INCMODS=$(mktemp) tar tf "$TMPDIR/$TGZ_SLXADMIN" | grep -oP '^modules-available/[^/]+/$' > "$INCMODS" || perror "Could not read $TGZ_SLXADMIN" + # Remember boot module if already set + bootmodule=$( basename "$( readlink -f "$PATH_SLXADMIN/modules/serversetup" 2> /dev/null )" ) # Remove old files - wipe selectively, just in case someone added a new module by hand rm -rf -- "$PATH_SLXADMIN/"{inc,apis,modules,templates,Mustache,script,style} while read -r line || [[ -n "$line" ]]; do @@ -291,12 +294,29 @@ if [ -n "$TGZ_SLXADMIN" ]; then diffcp "slxadmin-cronscript" "/opt/openslx/slxadmin-cronscript" # New crontab supplied diffcp "slxadmin-crontab" "/etc/cron.d/slx-admin" + # Ask about ipxe / pxelinux + if [ -z "$bootmodule" ] || ! [ -d "$PATH_SLXADMIN/modules-available/$bootmodule" ]; then + bootmodule="serversetup-bwlp-pxelinux" + if [ -t 0 ] && [ -t 1 ]; then + echo "Congratulations! You have won a bwLehrpool-Server with iPXE support!" + echo "Do you want to enable iPXE boot support instead of the old ipxelinux4 approach?" + echo -n "If unsure, say NO here. [y/n]: " + read answer + while ! [[ "$answer" =~ ^[nNyY] ]]; do + echo -n "Please answer [Y]es or [N]o: " + read answer + done + [[ "$answer" =~ ^[yY] ]] && bootmodule="serversetup-bwlp-ipxe" + else + echo "(Not asking about iPXE vs. pxelinux 4 because we're not running from a terminal)" + fi + fi # Enable modules ( mkdir -p "$PATH_SLXADMIN/modules" cd "$PATH_SLXADMIN/modules" || perror "Cannot cd to slxadmin" echo "Enabling slx-admin modules" - for mod in adduser backup baseconfig baseconfig_bwidm baseconfig_bwlp bootstrap_datepicker bootstrap_dialog bootstrap_multiselect bootstrap_switch bootstrap_timepicker dnbd3 dozmod eventlog exams js_chart js_circles js_jqueryui js_moment js_selectize js_stupidtable js_vis js_weekcalendar locationinfo locations main minilinux news permissionmanager rebootcontrol roomplanner runmode serversetup-bwlp session statistics statistics_reporting summernote sysconfig syslog systemstatus vmstore webinterface; do + for mod in adduser backup baseconfig baseconfig_bwidm baseconfig_bwlp bootstrap_datepicker bootstrap_dialog bootstrap_multiselect bootstrap_switch bootstrap_timepicker dnbd3 dozmod eventlog exams js_chart js_circles js_jqueryui js_moment js_selectize js_stupidtable js_vis js_weekcalendar locationinfo locations main minilinux news permissionmanager rebootcontrol roomplanner runmode "$bootmodule" session statistics statistics_reporting summernote sysconfig syslog systemstatus vmstore webinterface; do name=${mod%%-*} rm -f -- "$name" ln -s "../modules-available/$mod" "$name" || pwarning "Could not activate module '$mod' (alias '$name')" |