Table of Contents

Rasp - Ubuntu

Ubuntu 20.04 von USB SSD booten

Vorbereitungen

  1. SD Karte mit Raspbian (Lite reicht) vorbereiten - Flash via Raspberry PI Image
  2. 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
<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


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.