Ubuntu 20.04 von USB SSD booten
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
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 <code> \\ Mounten der SSD <code> 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
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
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.
Der Default Login von Ubuntu ist “ubuntu / ubuntu”. Dies funktioniert aber nur wenn die RJ45 Schnittstelle einen Link hat.