nanodesk/nanodesk-files/usr/sbin/nanodesk-installer

208 lines
5.5 KiB
Text
Raw Permalink Normal View History

2023-05-03 00:39:55 +02:00
#!/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
2023-05-03 00:39:55 +02:00
CHROOTCMD="chroot /mnt/"
ERRORFILE="/tmp/nanodesk-installer.error"
SUCCESSFILE="/tmp/nanodesk-installer.success"
2023-05-03 00:39:55 +02:00
##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..."
2023-05-03 00:39:55 +02:00
exit 1
}
finish () {
message "removing installer files from target"
$CHROOTCMD /usr/bin/rm -Rf /usr/sbin/nanodesk-installer || error
2023-10-22 21:50:05 +02:00
$CHROOTCMD /usr/bin/rm -Rf /usr/bin/nanodesk-installer-gxm || error
$CHROOTCMD /usr/bin/rm -Rf /usr/share/applications/nanodesk-installer-gxm.desktop || error
2023-05-03 00:39:55 +02:00
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
2023-05-03 00:39:55 +02:00
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
2023-05-03 00:39:55 +02:00
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
2023-05-03 00:39:55 +02:00
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
2023-05-03 01:11:43 +02:00
KERNEL_VER="$(uname -r)"
2023-05-03 00:39:55 +02:00
#/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"
2023-05-06 23:39:12 +02:00
$CHROOTCMD /usr/sbin/update-initramfs -k all -c || error
2023-05-03 00:39:55 +02:00
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)
message "please change root pw"
$CHROOTCMD /usr/bin/passwd root || error
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
2023-05-03 00:39:55 +02:00
$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