====== 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.