nanodesk/makeanything.sh
2023-05-01 06:31:29 +02:00

253 lines
7.1 KiB
Bash
Executable file

#!/bin/bash
### this script makes everything to build a ready to boot .iso file of nanodesk
###
### By: DeltaLima
### 2023
CHROOTCMD="sudo chroot build/chroot/"
message () {
echo "== " $1
}
error ()
{
message "ERROR!!"
exit 1
}
message "installing requirements"
# ~fakeroot fakechroot~
# debootstrap chroot
### https://www.willhaley.com/blog/custom-debian-live-environment/
sudo apt install \
debootstrap \
squashfs-tools \
xorriso \
isolinux \
syslinux-efi \
grub-pc-bin \
grub-efi-amd64-bin \
grub-efi-ia32-bin \
mtools \
dosfstools \
coreutils
### stuff begins here
message "Checking build directory"
test -f build/chroot || mkdir -p build/chroot
###fakeroot -s build/fakechroot.save fakechroot debootstrap --variant=fakechroot bullseye build/chroot/ http://ftp.de.debian.org/debian
###fakechroot fakeroot debootstrap bullseye build/chroot/ http://ftp.de.debian.org/debian
### i have the problem, that fakechroot will not work atm. in ubuntu 22.04 i get libc6 version mismatch errors. so we run it direct as root. not my favorite, but works for now.
message "running debootstrap"
sudo debootstrap bullseye build/chroot/ http://ftp.de.debian.org/debian || sudo debootstrap bullseye build/chroot/ http://ftp.de.debian.org/debian
message "copy xdgmenumaker deb file into chroot"
sudo cp deb/xdgmenumaker* build/chroot/tmp
message "deploying install_base"
cat <<EOF > build/chroot/tmp/install_base.sh
#!/bin/bash
echo nanodesk > /etc/hostname
DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND
apt install -y --no-install-recommends \\
live-boot \\
linux-image-amd64 \\
grub-pc \\
ifupdown \\
net-tools \\
wireless-tools \\
wpagui \\
isc-dhcp-client \\
man \\
console-data \\
locales \\
xserver-xorg \\
jwm \\
xdm \\
xterm \\
xfe \\
pcmanfm \\
audacious \\
htop \\
host \\
mc \\
wget \\
curl \\
less \\
vim \\
links2 \\
firefox-esr \\
transmission-gtk \\
lxterminal \\
arandr \\
zenity \\
/tmp/xdgmenumaker*.deb
echo -e "debian\ndebian" | (passwd root)
useradd -m -s /bin/bash debian
echo -e "debian\ndebian" | (passwd debian)
### Configure timezone and locale
#dpkg-reconfigure locales
#dpkg-reconfigure console-data
#dpkg-reconfigure keyboard-configuration
###https://serverfault.com/a/689947
echo "Europe/Berlin" > /etc/timezone && \\
dpkg-reconfigure -f noninteractive tzdata && \\
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \\
echo 'LANG="en_US.UTF-8"'>/etc/default/locale && \\
dpkg-reconfigure --frontend=noninteractive locales && \\
locale-gen en_US.UTF-8 && \\
update-locale LANG=en_US.UTF-8
EOF
message "run install_base"
$CHROOTCMD /bin/bash /tmp/install_base.sh || error
### copy nanodesk configs to chroot
message "copy nanodesk config files into chroot"
sudo cp -r src/* build/chroot/
### liveboot part, https://www.willhaley.com/blog/custom-debian-live-environment/
message "checking liveboot directories"
for dir in $(echo build/{staging/{EFI/BOOT,boot/grub/x86_64-efi,isolinux,live},tmp})
do
message "check $dir"
test -d $dir || mkdir -p $dir
done
#mkdir -p build/{staging/{EFI/BOOT,boot/grub/x86_64-efi,isolinux,live},tmp}
test -f build/staging/live/filesystem.squashfs && sudo rm build/staging/live/filesystem.squashfs
sudo mksquashfs \
build/chroot \
build/staging/live/filesystem.squashfs \
-e boot || error
cp build/chroot/boot/vmlinuz-* build/staging/live/vmlinuz || error
cp build/chroot/boot/initrd.img-* build/staging/live/initrd || error
cat <<'EOF' >build/staging/isolinux/isolinux.cfg
UI vesamenu.c32
MENU TITLE Boot Menu
DEFAULT linux
TIMEOUT 600
MENU RESOLUTION 640 480
MENU COLOR border 30;44 #40ffffff #a0000000 std
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
MENU COLOR help 37;40 #c0ffffff #a0000000 std
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
LABEL linux
MENU LABEL nanodesk Live [BIOS/ISOLINUX]
MENU DEFAULT
KERNEL /live/vmlinuz
APPEND initrd=/live/initrd boot=live
LABEL linux
MENU LABEL nanodesk Live [BIOS/ISOLINUX] (nomodeset)
MENU DEFAULT
KERNEL /live/vmlinuz
APPEND initrd=/live/initrd boot=live nomodeset
EOF
cat <<'EOF' > build/staging/boot/grub/grub.cfg
insmod part_gpt
insmod part_msdos
insmod fat
insmod iso9660
insmod all_video
insmod font
set default="0"
set timeout=30
# If X has issues finding screens, experiment with/without nomodeset.
menuentry "nanodesk Live [EFI/GRUB]" {
search --no-floppy --set=root --label NANODESK
linux ($root)/live/vmlinuz boot=live
initrd ($root)/live/initrd
}
menuentry "nanodesk Live [EFI/GRUB] (nomodeset)" {
search --no-floppy --set=root --label NANODESK
linux ($root)/live/vmlinuz boot=live nomodeset
initrd ($root)/live/initrd
}
EOF
cp build/staging/boot/grub/grub.cfg build/staging/EFI/BOOT/ || error
cat <<'EOF' >build/tmp/grub-embed.cfg
if ! [ -d "$cmdpath" ]; then
# On some firmware, GRUB has a wrong cmdpath when booted from an optical disc.
# https://gitlab.archlinux.org/archlinux/archiso/-/issues/183
if regexp --set=1:isodevice '^(\([^)]+\))\/?[Ee][Ff][Ii]\/[Bb][Oo][Oo][Tt]\/?$' "$cmdpath"; then
cmdpath="${isodevice}/EFI/BOOT"
fi
fi
configfile "${cmdpath}/grub.cfg"
EOF
cp /usr/lib/ISOLINUX/isolinux.bin "build/staging/isolinux/" || error
cp /usr/lib/syslinux/modules/bios/* "build/staging/isolinux/" || error
cp -r /usr/lib/grub/x86_64-efi/* "build/staging/boot/grub/x86_64-efi/"
grub-mkstandalone -O i386-efi \
--modules="part_gpt part_msdos fat iso9660" \
--locales="" \
--themes="" \
--fonts="" \
--output="build/staging/EFI/BOOT/BOOTIA32.EFI" \
"boot/grub/grub.cfg=build/tmp/grub-embed.cfg"
grub-mkstandalone -O x86_64-efi \
--modules="part_gpt part_msdos fat iso9660" \
--locales="" \
--themes="" \
--fonts="" \
--output="build/staging/EFI/BOOT/BOOTx64.EFI" \
"boot/grub/grub.cfg=build/tmp/grub-embed.cfg"
(cd build/staging && \
dd if=/dev/zero of=efiboot.img bs=1M count=20 && \
mkfs.vfat efiboot.img && \
mmd -i efiboot.img ::/EFI ::/EFI/BOOT && \
mcopy -vi efiboot.img \
build/staging/EFI/BOOT/BOOTIA32.EFI \
build/staging/EFI/BOOT/BOOTx64.EFI \
build/staging/boot/grub/grub.cfg \
::/EFI/BOOT/
)
xorriso \
-as mkisofs \
-iso-level 3 \
-o "build/nanodesk_$(git rev-parse --short HEAD).iso" \
-full-iso9660-filenames \
-volid "NANODESK" \
--mbr-force-bootable -partition_offset 16 \
-joliet -joliet-long -rational-rock \
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
-eltorito-boot \
isolinux/isolinux.bin \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
--eltorito-catalog isolinux/isolinux.cat \
-eltorito-alt-boot \
-e --interval:appended_partition_2:all:: \
-no-emul-boot \
-isohybrid-gpt-basdat \
-append_partition 2 C12A7328-F81F-11D2-BA4B-00A0C93EC93B build/staging/efiboot.img \
"build/staging"