#!/bin/bash TITLE="nanodesk-installer-gxm" VERSION=$(cat /usr/share/nanodesk/version) HEADER=" ----==== nanodesk-installer-gxm ====---- nanodesk ${VERSION} " GXMCMD="gxmessage -name $TITLE -center -geometry 669x420 -wrap -font mono,10 -file -" GXMINFO="gxmessage -name $TITLE -center -buttons Close -default Close -font mono,13 -file -" DOCROOT="/usr/share/doc/nanodesk-installer" DILLOCMD="dillo -f -g 640x480 $DOCROOT" TARGET="" ERRORFILE="/tmp/nanodesk-installer.error" SUCCESSFILE="/tmp/nanodesk-installer.success" # initialize RETURN with a high value RETURN=255 ##### # # DIALOGES # ##### gxm-abort() { if gxm-confirm then echo "Installation aborted!"| $GXMINFO exit 1 fi } gxm-confirm() { echo "Are you sure you want abort?" | $GXMINFO -buttons "Yes:0,No:1" return $? } gxm-cleanup() { echo "!! An old Errorfile !! $ERRORFILE !! was found Last message: $(cat $ERRORFILE) It is necessary to delete it if you want to continue. When deleting it, you will be asked for your password. Delete $ERRORFILE ?" | $GXMINFO -buttons "Yes:0,No:1" -default Yes -geometry 640x320 return $? } gxm-welcome() { echo "$HEADER This is a gxmessage based Installation assistant for nanodesk. To install nanodesk you need a partitioned and formated drive. You can do the partioning and formating with 'GParted'. (Close 'GParted' when you are done) If you need help how to do so, click on 'Help'. When you are done partitioning and your installation target is formated, go ahead with 'Install'. When asked for a password, type in 'debian', which is the nanodesk live default." | $GXMCMD -buttons "Abort:1,Help:2,GParted:10,Install:0" return $? } gxm-select-target() { echo "$HEADER Please enter the target and press 'Install'. For example: /dev/sda1" | $GXMCMD -entry -buttons "Abort:1,Help:2,Install:0" return $? } gmx-start-cli-installer() { echo "$HEADER The commandline nanodesk-installer will now open in a new xterm window. Target device: $1 Please follow the instructions there and see you later again..." | $GXMCMD -buttons "Abort:1,open nanodesk-installer CLI:0" -default "open nanodesk-installer CLI" return $? } gxm-success() { echo "$HEADER Installation complete! :) You can now reboot or continue using nanodesk live." | $GXMCMD -buttons Continue:0,Reboot:2 -default Continue return $? } gxm-error() { echo "$HEADER Installation FAILED!! :( Last message was: $(cat $ERRORFILE)" | $GXMCMD -buttons Close -default Close return $? } ##### # # HELP # ##### help-gparted() { cat <<EOF | $GXMCMD $HEADER # Partitioning Help ## You have an empty drive Cool, easiest way! When you have an empty drive, just start GParted and select in the right up corner your correct drive you want to install nanodesk on. After that click in the upper Menu the entry 'Drive' and select 'create partitiontable'. In the upcoming dialoge select 'ms-dos' abd 'Apply'. Now right click in the empty bar representing your drive and select 'New'. First we create your root filesystem. It gets most of the space, just let around 4-8GB space left after free for a swap partition we create afterwards. Create as 'Primary' and select 'ext4' as filesystem. Confirm that with 'OK' and repeat the steps with the leftover diskspace and create a partition with the 'linux-swap' filesystem. When you done all this we need to activate our changes. Select 'Edit' from the upper Menu and choose 'Apply All Operations' and confirm. When all operations are done successfully, close GParted and click on 'Install' in the nanodesk-installer. EOF } help-select-target() { cat <<EOF | $GXMCMD $HEADER # target device Here you have to enter the path to your drive with the 'ext4' filesystem on it. This could be in most cases for example /dev/sda1 Which says it's the first drive in the system (sdA) and the first partition on it (sda1). If you are not sure, you can abort here and open nanodesk-installer again. Open again GParted to verify that you choose the correct drive. # commandline nanodesk-installer In the next step the core of the installer, the commandline tool `/usr/sbin/nanodesk-installer` opens up in a new xterm window. Confirm the start of the installation by typing 'YES' all upper case and confirm it by pressing [ENTER]. When the base system is installed, you can choose if you want to keep the default user 'debian' with its password 'debian' (press [K]) or you also can remove this default user and create your own new one (press [U]). # when something goes wrong If the installation proccess exits with an error, you can clean up everything by hand: sudo su - umount /mnt/ rm -Rf /tmp/nanodesk-installer.* mkfs.ext4 [TARGET] # you can re-run the GUI again nanodesk-installer-gxm # or the cli nanodesk-installer directly nanodesk-installer [TARGET] EOF } ##### # # EXEC # ##### exec-gparted() { pkexec /usr/sbin/gparted } exec-nanodesk-installer() { # run the installer within xterm xterm -e /bin/bash -c "pkexec /usr/sbin/nanodesk-installer $1 true || echo 'pkexec auth failed' >> $ERRORFILE" } ##### # # MAIN # ##### # cleanup old errorfile if [ -f "$ERRORFILE" ] then RETURN=255 while [ $RETURN -gt 0 ] do gxm-cleanup RETURN=$? if [ $RETURN -gt 0 ] then gxm-abort else pkexec rm -f $ERRORFILE || RETURN=255 fi done fi RETURN=255 # welcome screen while [ $RETURN -gt 0 ] do gxm-welcome RETURN=$? echo CODE $RETURN case $RETURN in 1) gxm-abort ;; 2) help-gparted ;; 10) exec-gparted ;; esac done # target select RETURN=255 while [ $RETURN -gt 0 ] do TARGET=$(gxm-select-target) RETURN=$? echo CODE $RETURN echo TARGET $TARGET # if RC = 1, then user clicked "abort" case $RETURN in 1) gxm-abort ;; 2) help-select-target ;; 0) echo test if blockdevice if [ ! -b "$TARGET" ] then RETURN=255 echo no echo -e "Error!\n'${TARGET}' does not exist or is not a blockdevice!" | $GXMINFO fi ;; esac done # start cli nanodesk-installer RETURN=255 while [ $RETURN -gt 0 ] do gmx-start-cli-installer $TARGET RETURN=$? test $RETURN -eq 1 && gxm-abort echo CODE $RETURN done exec-nanodesk-installer $TARGET if [ -f "$ERRORFILE" ] then gxm-error exit 1 elif [ -f "$SUCCESSFILE" ] then gxm-success RETURN=$? case $RETURN in 2) systemctl reboot ;; *) exit 0 ;; esac else echo "Unexpected Error! Exit here." | $GXMINFO -buttons Close -default Close exit 1 fi #if [ $RETURN != 0 ] #then # echo "ERROR!" | $GXMINFO # exit 1 #else # echo "SUCCESS!" | $GXMINFO # exit 0 #fi