Aujourd'hui nous allons voir comment installer Ubuntu dans sa version 64 bits sur une carte Raspberry 4 mais également KVM afin de virtualiser quelques machines. Nous ferons ici un essai avec la distribution Alpine Linux pour sa légèreté !

Le modèle 4 de la célèbre carte est disponible depuis maintenant plus d'un an. Les tests réalisés à l'époque ( par exemple, celui ci-dessous qui est très complet ) m'ont toujours donnés envie de l'essayer :

Benchmarking the Raspberry Pi 4
UPDATE: Since this feature was written, the Raspberry Pi team has been hard at work releasing regular firmware updates which add new features — like network boot support — and enhance the Raspberry…

L'arrivée fin Mai du modèle 8GB a fini par me faire craquer, je souhaitais de longue date me servir d'une telle carte pour réaliser un environnement de tests avec des machines virtuelles.

Le choix d'un OS 64 bits est pour moi évident mais si vous souhaitez vérifier l'utilité d'un tel choix, voici un article intéressant sur le sujet :

Why you should run a 64 bit OS on your Raspberry Pi4
A comparision of two Raspberry Pi4 running a 32 bit and a 64 bit OS

Passons maintenant à l'installation de l'OS sur notre carte mémoire !

Installation

Ubuntu 20.04 propose depuis son lancement une version ARM64 de son système d'exploitation dédié aux Raspberry :

Download Ubuntu for Raspberry
Ces images sont dédiées aux Raspberry car il s'agit en réalité d'une version d'Ubuntu server "pré-installé".

1.1 Installation en ligne de commande :

Pour l'installer sur votre carte SD, commencez par extraire l'image :

$ unxz ubuntu-20.04-preinstalled-server-arm64+raspi.img.xz

Ensuite, vous pouvez exécuter la commande dd pour flasher votre carte. Attention de bien vérifier le chemin de votre périphérique avant d'exécuter la commande :

$ sudo dd if=ubuntu-20.04-preinstalled-server-arm64+raspi.img of=/dev/sdX bs=8M

1.2 Installation graphique :

Pour réaliser cette installation sur votre carte, vous pouvez également récupérer l'outil graphique officiel mis à disposition par la fondation pour installer un OS sur le Raspberry :

Downloads

Une fois téléchargé, installez ce logiciel avec la commande :

$ sudo dpkg -i imager_1.4_amd64.deb

S' il vous manque des dépendances :

$ sudo apt install -f

Enfin vous pouvez l'exécuter :

$ rpi-imager
rpi-imager choose OS

Sélectionnez "Ubuntu 20.04 LTS (Raspberry Pi 3/4 ) et votre carte SD :

rpi-imager choose SD Card

Il ne reste plus qu'à écrire sur votre carte !

1.2 Premier démarrage

Peu importe la méthode que vous utiliserez pour flasher votre carte, l'utilitaire graphique est vraiment simple d'utilisation et fait très bien le job, il va être ensuite nécessaire de l'insérer dans votre Raspberry afin de réaliser un premier démarrage !

Pas de besoin d'écran ou de clavier supplémentaire si vous raccordez votre Raspberry avec un câble RJ45. Celui-ci obtiendra automatiquement une adresse IP au travers de votre DHCP.

Si vous souhaitez utiliser du Wi-Fi, c'est un peu plus complexe. Je vous conseille de suivre ce tutoriel : https://medium.com/@huobur/how-to-setup-wifi-on-raspberry-pi-4-with-ubuntu-20-04-lts-64-bit-arm-server-ceb02303e49b

Pour retrouver la carte sur mon réseau, nmap va encore m'aider :

$ sudo nmap -sP 192.168.1.0/24
...
MAC Address: DC:A6:32:B8:01:89 (Raspberry Pi Trading)
Nmap scan report for rpi4.home (192.168.1.49)

Il ne me reste plus qu'à me connecter sur ma carte :

$ ssh ubuntu@192.168.1.49

Le mot de passe par défaut est : ubuntu

Il vous sera demandé de le modifier à la première connexion.

Il est possible de personnaliser l'installation par défaut avec un fichier cloud-init mais nous verrons ça dans un autre article.

Nous allons maintenant pouvoir installer KVM sur notre raspberry.

KVM

Une fois connectée en ssh , rien de plus simple :

$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils

Je vais également mettre en place un bridge public afin que mes machines virtuelles soient sur le même réseau que mon poste de travail :

Ubuntu 20.04 et KVM : Un bridge “Public”
Comment rendre vos machines virtuelles disponibles sur votre réseau “lan” en quelques minutes !

🚩 Vous n'êtes pas obligés de supprimer le bridge par défaut, il suffira de préciser le bridge utilisé lors de la création de votre machine 🚩

Il est également possible d'utiliser cockpit pour gérer votre Raspberry et les machines virtuelles :

cockpit dashboard

Pour l'installer il suffit de saisir la ligne suivante :

$ sudo apt-get install cockpit cockpit-machines

Enfin lancez votre navigateur et rendez-vous sur http://<IP_RPI4>:9090/ :

cockpit dashboard login

Je vais pour ma part réaliser l'installation en ligne de commande. Tout d'abord je récupère l'ISO d' Alpine Linux  :

$  wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/aarch64/alpine-virt-3.12.0-aarch64.iso

Et je lance ma machine virtuelle :

$ virt-install \
--name vm1 \
--ram=1024 \
--disk size=10 \
--vcpus 1 \
--os-type linux \
--cdrom ~/distros/alpine-virt-3.12.0-aarch64.iso \
--os-variant alpinelinux3.8 \
--network bridge:br0,model=virtio \
--console pty,target_type=serial \
--graphics none

🚩 br0 est le nom de mon bridge public 🚩

Vous allez ensuite être connecté directement sur la console :

starting install...
Allocating 'vm1.qcow2'     
Connected to domain vm1
Escape character is ^]

Welcome to Alpine Linux 3.12
Kernel 5.4.43-1-virt on an aarch64 (/dev/ttyAMA0)

localhost login: 

Connectez-vous avec le compte root qui ne possède aucun mot de passe. Installez votre VM avec la commande setup-alpine :

localhost login: root
Welcome to Alpine!

localhost:~# setup-alpine

Après avoir terminé, redémarrez votre VM en tapant reboot, et connectez-vous en ssh !

Si vous souhaitez utiliser le compte root pour la connexion ssh, il faudra autoriser la connexion dans le fichier /etc/ssh/sshd_config.

Depuis votre hôte et après le redémarrage :

$ virsh console vm1
Connected to domain k3s-node1
Escape character is ^]
Welcome to Alpine Linux 3.12
Kernel 5.4.43-1-virt on an aarch64 (/dev/ttyAMA0)

k3s-node1 login: 

Utilisez votre compte root et éditez le fichier /etc/ssh/sshd_config :

#PermitRootLogin prohibit-password
PermitRootLogin yes

Relancez sshd :

service sshd restart

Et voilà !


Bien évidemment tout ce que nous venons de voir ici est réalisable sur un modèle avec 4GB de mémoire.

Modèle qui pourrait d'ailleurs se révéler bien suffisant dans mon utilisation. Mais si vous souhaitez virtualiser autre chose qu'une distribution comme Alpine Linux, alors ces 4GB supplémentaires seront bien utiles ! Ubuntu préconisant par exemple 2GB de mémoire pour fonctionner correctement dans sa version virtualisée ...

Avec cette installation, nous allons pouvoir faire quelques tests de cluster avec une seule carte et plusieurs machines virtuelles !

N'hésitez pas à permettre au blog de continuer à exister et à fournir un contenu de qualité - enfin je l'espère - au travers de vos dons sur : buymeacoff.ee/lfache
Et n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter, ou ici 👇