#!/bin/bash ### installer for nanodesk ### By: DeltaLima ### 2023 ### ### this is just a hobby, nothing serious. i know the debian installer and other ### exist, but i wanted to try some handcrafted installation. if [ -n "$2" ] && [ "$2" == true ] then GXMINSTALLER=true else GXMINSTALLER=false fi CHROOTCMD="chroot /mnt/" ERRORFILE="/tmp/nanodesk-installer.error" SUCCESSFILE="/tmp/nanodesk-installer.success" ##message () { ## echo "== " $1 ##} # colors for colored output 8) RED="\e[31m" GREEN="\e[32m" YELLOW="\e[33m" ENDCOLOR="\e[0m" function message() { case $1 in warn) MESSAGE_TYPE="${YELLOW}WARN${ENDCOLOR}" ;; error) MESSAGE_TYPE="${RED}ERROR${ENDCOLOR}" ;; info|*) MESSAGE_TYPE="${GREEN}INFO${ENDCOLOR}" ;; esac if [ "$1" == "info" ] || [ "$1" == "warn" ] || [ "$1" == "error" ] then MESSAGE=$2 else MESSAGE=$1 fi echo -e "[${MESSAGE_TYPE}] $MESSAGE" } error () { echo "Error at: $MESSAGE" >> $ERRORFILE message error "ERROR!" test "$GXMINSTALLER" == true && read -p "Press [ENTER] to continue..." exit 1 } finish () { message "removing installer files from target" $CHROOTCMD /usr/bin/rm -Rf /usr/sbin/nanodesk-installer || error $CHROOTCMD /usr/bin/rm -Rf /usr/bin/nanodesk-installer-gxm || error $CHROOTCMD /usr/bin/rm -Rf /usr/share/applications/nanodesk-installer-gxm.desktop || error message "removing live-packages from target" $CHROOTCMD /usr/bin/apt -y purge 'live-boot*' 'live-tools*' message "autoremove unneeded dependencies" $CHROOTCMD /usr/bin/apt -y autoremove message "we are now ready to boot from $target" touch $SUCCESSFILE exit 0 } if [ "$1" == "--help" ] || [ -z "$1" ] then echo "Usage: $0 [OPTION] TARGETDEVICE Example: $0 /dev/sda1 TARGETDEVICE: blockdevice already formatted with filesystem like ext4 Options: --help: Show this helptext $0 trys to install grub into the mbr of the given targetdevice. We simply cut the last character away from the targetdevice, so /dev/sda1 gets /dev/sda, where grub will be installed." exit 1 fi target="$1" if [ ! -b "$target" ] then message "$target does not exist or is not a blockdevice." error fi message " ----==== nanodesk Installer ====----" message "Make sure you have a linux compatible filesystem at $target" message warn "!! The installer immediately begins to write things to disk !!" message warn "!! The installer only works reliable with legacy BIOS boot !!" message message "I will mount $target to /mnt/. I try to install grub to ${target::-1}" message message "Are you sure to install nanodesk to $target?" message "To continue type 'YES' and enter, to cancel type anything else or CTRL+C" read -p "> " DOINSTALL test "$DOINSTALL" == "YES" || error message "... GOOD LUCK!" message "mounting $target to /mnt/" mount $target /mnt || error message "copy systemfiles" # rsync is dumb #rsync -aHx / /mnt/ || error unsquashfs -d /mnt/ /run/live/medium/live/filesystem.squashfs || error message "bind mount dev proc sys" for m in dev proc sys do mount -o bind /$m /mnt/$m || error done message "creating /boot directory" mkdir -p /mnt/boot/ || error message "create tmp script for reinstalling grub and kernel" cat <<\EOF > /mnt/tmp/reinstall_kernel.sh DEBIAN_FRONTEND=noninteractive export DEBIAN_FRONTEND KERNEL_VER="$(uname -r)" #/usr/bin/apt --yes purge 'linux-image-*' 'grub-*' /usr/bin/apt --yes --reinstall install \ linux-image-amd64 \ linux-image-$KERNEL_VER \ grub-pc grub-pc-bin \ grub-common \ grub2-common \ os-prober EOF message "install kernel and grub" $CHROOTCMD /bin/bash /tmp/reinstall_kernel.sh || error message "modify /etc/default/grub" $CHROOTCMD /usr/bin/sed -i 's/GRUB_DISTRIBUTOR=.*/GRUB_DISTRIBUTOR=\"nanodesk \`cat \/usr\/share\/nanodesk\/version\`\"/g' /etc/default/grub message "grub-install $target" $CHROOTCMD grub-install ${target::-1} || error message "create initramfs" $CHROOTCMD /usr/sbin/update-initramfs -k all -c || error message "update-grub" $CHROOTCMD /usr/sbin/update-grub || error message "create fstab" echo "UUID=$(blkid -o value -s UUID $target) / $(blkid -o value -s TYPE $target) defaults 0 1" >> /mnt/etc/fstab message "activating swap if present in fstab" SWAP="$(blkid -o list | grep swap | awk '{print $5}')" test -n "$SWAP" && echo "UUID=$SWAP none swap defaults 0 0" >> /mnt/etc/fstab message "Cleanup and create own [U]ser or [K]eep everything as it is?" read -p "> " USERSTEP STEPFINISH=0 while [ $STEPFINISH != 1 ] do case $USERSTEP in u|U) CONTINUESTEP=false while [ $CONTINUESTEP != true ] do message "Do you want to set a password for '${RED}root${ENDCOLOR}'?" read -p "[y/n] > " ROOTPASSCHANGE case ${ROOTPASSCHANGE,,} in y|yes) message "please change root pw" $CHROOTCMD /usr/bin/passwd root || error CONTINUESTEP=true ;; n|no) message "leaving root password empty" CONTINUESTEP=true ;; *) message warn "Unrecognized answers, please try again..." ;; esac done message "deleting user 'debian'" $CHROOTCMD /usr/bin/id -u debian && $CHROOTCMD /usr/sbin/userdel -f debian || error message "removing user 'debian' from sudoers" $CHROOTCMD /usr/bin/sed -i '/^debian/d' /etc/sudoers || error message "please enter a name for a new user" read -p "> " NEWUSER $CHROOTCMD /usr/sbin/adduser $NEWUSER || error message "adding $NEWUSER to sudo group" $CHROOTCMD /usr/sbin/usermod -a -G sudo $NEWUSER || error $CHROOTCMD /usr/bin/ln -s -f /usr/share/nanodesk/pixmaps/nanodesk-installed.xpm /usr/share/nanodesk/pixmaps/nanodesk.xpm || error $CHROOTCMD /usr/bin/ln -s -f /usr/share/nanodesk/pixmaps/nanodesk-bw-installed.xpm /usr/share/nanodesk/pixmaps/nanodesk-bw.xpm || error STEPFINISH=1 ;; k|K) finish ;; esac done finish