====== Rasp - Ubuntu ======
Ubuntu 20.04 von USB SSD booten
\\
===== Vorbereitungen =====
- SD Karte mit Raspbian (Lite reicht) vorbereiten - Flash via Raspberry PI Image
- SSD / Disk mit Ubuntu vorbereiten - Ubuntu für Raspberry direkt von der Ubuntu Webseite laden - Flash via Etcher
\\
===== USB Boot aktivieren =====
Booten von der SD Karte mit Debian. \\
Checken der Firmware vim Raspberry und USB Boot setzten:
OS muss aktuell sein
apt update
apt dist-upgrade
reboot
\\
Firmware checken bzw. einspielen
[[https://dwiki.heisl.org/doku.php?id=raspberry:rasp-firmware]]
\\
USB Boot aktivieren
raspi-config
\\
===== SSD Bootfähig machen =====
Dazu müssen wir das Raspbian wieder gebootet haben. \\
Schauen welches Device die SSD ist mit fdisk. In meinem Beispiel ist sda die SD Karte und sdb die SSD.
fdisk -l
\\
Mounten der SSD
mkdir -p /mnt/boot
mkdir -p /mnt/os
mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/os
\\
Kopieren von boot Daten
root@raspberrypi:~# cp -v /boot/*.elf /mnt/boot/
'/boot/start4cd.elf' -> '/mnt/boot/start4cd.elf'
'/boot/start4db.elf' -> '/mnt/boot/start4db.elf'
'/boot/start4.elf' -> '/mnt/boot/start4.elf'
'/boot/start4x.elf' -> '/mnt/boot/start4x.elf'
'/boot/start_cd.elf' -> '/mnt/boot/start_cd.elf'
'/boot/start_db.elf' -> '/mnt/boot/start_db.elf'
'/boot/start.elf' -> '/mnt/boot/start.elf'
'/boot/start_x.elf' -> '/mnt/boot/start_x.elf
root@raspberrypi:~# cp -v /boot/*.dat /mnt/boot/
'/boot/fixup4cd.dat' -> '/mnt/boot/fixup4cd.dat'
'/boot/fixup4.dat' -> '/mnt/boot/fixup4.dat'
'/boot/fixup4db.dat' -> '/mnt/boot/fixup4db.dat'
'/boot/fixup4x.dat' -> '/mnt/boot/fixup4x.dat'
'/boot/fixup_cd.dat' -> '/mnt/boot/fixup_cd.dat'
'/boot/fixup.dat' -> '/mnt/boot/fixup.dat'
'/boot/fixup_db.dat' -> '/mnt/boot/fixup_db.dat'
'/boot/fixup_x.dat' -> '/mnt/boot/fixup_x.dat'
\\
Entpacken der Kernels (ARM kann aktuell nicht von gepackten Kernels booten
cd /mnt/boot
zcat vmlinuz > vmlinux
\\
Boot Config anpassen. \\
Dies Zeilen unten einfach hinzufügen.
nano /mnt/boot/config.txt
# USB Ubuntu Boot
dtoverlay=vc4-fkms-v3d
boot_delay
kernel=vmlinux
initramfs initrd.img followkernel
\\
===== System update-fähig machen =====
Wenn jetzt ein Kernel Update gespielt werden würde, würde das System nicht mehr booten. Es muss der Kernel wieder entpackt werden. Dazu verwenden wir ein Script im apt
nano /mnt/boot/auto_decompress_kernel
#!/bin/bash -e
# auto_decompress_kernel script#Set Variables
BTPATH=/boot/firmware
CKPATH=$BTPATH/vmlinuz
DKPATH=$BTPATH/vmlinux
#Check if compression needs to be done.
if [ -e $BTPATH/check.md5 ]; then
if md5sum --status --ignore-missing -c $BTPATH/check.md5; then
echo -e "\e[32mFiles have not changed, Decompression not needed\e[0m"
exit 0
else
echo -e "\e[31mHash failed, kernel will be compressed\e[0m"
fi
fi
#Backup the old decompressed kernel
mv $DKPATH $DKPATH.bak
if [ ! $? == 0 ]; then
echo -e "\e[31mDECOMPRESSED KERNEL BACKUP FAILED!\e[0m"
exit 1
else
echo -e "\e[32mDecompressed kernel backup was successful\e[0m"
fi
#Decompress the new kernel
echo "Decompressing kernel: "$CKPATH".............."
zcat $CKPATH > $DKPATH
if [ ! $? == 0 ]; then
echo -e "\e[31mKERNEL FAILED TO DECOMPRESS!\e[0m"
exit 1
else
echo -e "\e[32mKernel Decompressed Succesfully\e[0m"
fi
#Hash the new kernel for checking
md5sum $CKPATH $DKPATH > $BTPATH/check.md5
if [ ! $? == 0 ]; then
echo -e "\e[31mMD5 GENERATION FAILED!\e[0m"
else
echo -e "\e[32mMD5 generated Succesfully\e[0m"
fi
#Exit
exit 0
\\
Code ausführbar machen
chmod +x /mnt/boot/auto_decompress_kernel
\\
Apt dies als Hook einhängen
nano /mnt/os/etc/apt/apt.conf.d/999__decompress_rpi_kernel
DPkg::Post-Invoke {"/bin/bash /boot/firmware/auto_decompress_kernel"; };
\\
Hook ausführbar machen
chmod +x /mnt/os/etc/apt/apt.conf.d/999__decompress_rpi_kernel
\\
===== USB Boot =====
Jetzt sollte das System fertig sein. Daher fahren wir den Rasp runter
shutdown -h now
\\
Von USB wird nur dann gebootet wenn keine SD Karte eingelegt ist. Daher muss diese entfernt werden und es kann via USB gebootet werden.
\\
===== Default Login Ubuntu =====
Der Default Login von Ubuntu ist "ubuntu / ubuntu". Dies funktioniert aber nur wenn die RJ45 Schnittstelle einen Link hat.