Virtualiser Fedora CoreOS sur Proxmox VE
Guide d'installation de Fedora Core OS sur Proxmox VE

Au sommaire :
- 1-Qu'est-ce que Fedora CoreOS ?
- 2-Création d'une machine virtuelle
- 3-Création du fichier butane
- 4-Conversion au format Ignition
- 5-Ouvrir un serveur HTTP
- 6-Installation
- 7-Conclusion
1-Qu'est-ce que Fedora CoreOS ?
Fedora CoreOS est un système d'exploitation minimal et immuable spécifiquement conçu pour déployer des conteneurs de manière sécurisée et à grande échelle.

Petit retour en arrière. En 2013, la société CoreOS sort une distribution nommée CoreOS Containers Linux soit la même année que Docker.
L'objectif de ce système d'un nouveau genre est de proposer un environnement d’exécution minimal et sécurisé pour déployer des conteneurs à grande échelle dans le cloud.
Dans le secteur de la tech, autant vous dire que la société CoreOS attire assez vite les convoitises car le besoin d'une distribution conçu spécifiquement pour les conteneurs devient de plus en plus pressante.
Le suspens prind fin en janvier 2018 lorsque Red Hat rachètera la société pour 250 millions de dollars.

Red Hat profitera de ce rachat pour fusionner CoreOS Containers Linux avec Fedora Atomic Host/RHEL Atomic Host issues du projet Atomic Host.



Cette fusion donnera naissance à deux distributions :
- Fedora CoreOS, la version upstream et communautaire
- Red Hat CoreOS (RHCOS) à destinations des entreprises

De Fedora Atomic Host, Red Hat gardera :
- La distribution Fedora dérivée de RHEL
- La sécurité avec SELinux
- Le gestionnaire de paquets rpm-ostree qui adopte la philosophie de Git
- Le mécanisme de mise à jour automatique
De CoreOS Container Linux, Red Hat gardera :
- L'approche cloud-native
- La philosophie
- La méthode de provisionnement
Pour finir, Fedora CoreOS/RHCOS est également le système d'exploitation utilisé par OpenShift Kubernetes Distribution (OKD) qui est la version upstream (en amont, communautaire) de Red Hat OpenShift, un PaaS (Platform as a Service) sous Kubernetes destiné aux entreprises.
Il faut savoir que Red Hat propose en général deux versions de leur produits :
- Une version communautaire,
- Une version commerciale,
Dans le cas de Ansible par exemple :
- AWX est la version communautaire
- Ansible Tower est la version commerciale à destination des entreprises.
Enfin, il faut noter qu'un fork de CoreOS Containers Linux existe sous le nom de Flatcar Linux, maintenu par la société allemande Kinvolk


Société qui a été racheté par.....Microsoft.

Je sais, il y a de quoi devenir GOAT.

Donc si vous avez bien suivi :
- Fedora CoreOS/Red Hat CoreOS est le produit d'une fusion entre CoreOS Containers Linux et Fedora Atomic Host/RHEL Atomic Host
- Elle est la base de Openshift Kubernetes Distribution/Red Hat Openshift
Maintenant, passons à la pratique. Nous allons créer une machine virtuelle.
3-Création d'une machine virtuelle
Récupérez l'ISO sur le site.

Ou sur le terminal de PVE à la racine du dossier contenant vos ISO, téléchargez le avec ce lien et la commande "wget" :
wget https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/37.20221225.3.0/x86_64/fedora-coreos-37.20221225.3.0-live.x86_64.iso
Puis commencez par créer une machine virtuelle vierge en suivant mes instructions.
General
- Choisissez un VMID disponible et un nom

OS
- Storage : Sélectionnez l'image ISO de Fedora CoreOS.
- Guest OS : laissez par défaut.

System
Laissez tout par défaut et activez Qemu Agent.

Disks
Laissez tout par défaut et cochez deux options :
- SSD emulation : indique à l'OS qu'il démarre sur un SSD et non sur un disque rotatif,
- Discard : active le TRIM.

CPU
- Cores: 2 cores sont suffisants.

Memory
- Mémory : laissez par défaut.

Network
Laissez tout par défaut.

Vérifiez que tout est correct puis finalisez la création de la machine virtuelle.

4-Création du fichier butane
Note : Sachez que je me suis simplement formé à travers la documentation de FCOS, rien d'autre.

Sur votre poste client, commencez par créer un fichier butane formaté en YAML.
touch coreos.bu
On commence à inclure ces deux options :
- variant : fcos (pour Fedora CoreOS)
- version : 1.4.0 (la dernière version en date)
variant: fcos
version: 1.4.0
Passons à "passwd".
passwd
Dans "passwd", vous allez créer un utilisateur, l'ajouter à des groupes et ajouter votre clé SSH :
- users : indiquez dans "name" le nom de l'utilisateur (sussudio pour l'exemple)
- groups : ajoutez le au groupe sudo et au groupe docker pour ne plus taper "sudo" avant chaque appel de commande (Docker nécessite un accès root, contrairement à Podman)
- ssh_authorized_key : ajoutez votre clé SSH
####### PASSWD ########################
passwd:
users:
- name: sussudio
groups:
- docker
- sudo
ssh_authorized_keys:
- ssh-rsa.......
Si vous voulez plutôt utiliser un mot de passe, remplacez "ssh_authorized_keys" par "password_hash".
Sur votre poste client, déployez un conteneur fedora.
docker run --rm -it fedora
Puis à l'intérieur du conteneur, installez mkpasswd, tapez un mot de passe (coucou pour l'exemple) et laissez mkpasswd effectuer le hashage.
dnf -y install mkpasswd ; mkpasswd --method=yescrypt
Lorsque le mot de passe est hashé, copiez le et incluez le dans votre fichier "coreos.bu".

####### PASSWD ########################
passwd:
users:
- name: sussudio
groups:
- docker
- sudo
password_hash: $y$j9T$QZzs.Yw/zm5EaE8f7Arq11$vdClPBHsw7l42vw7zmL9THKP4yTXOUgq5utakyEeff1
Passons à "storage".
storage
Dans "storage", vous allez indiquez un nom d'hôte, le type de clavier et le fuseau horaire.
- hostname : fedora-dev pour l'exemple avec un mode d'écriture 0644 (lecture/écriture pour l'utilisateur, lecture pour le groupe et les personnes de l'extérieur)
- vconsole.conf (type de clavier) : KEYMAP=fr (AZERTY)
- localtime (fuseau horaire) : Europe/Paris
####### STORAGE ######################
storage:
####### FILES ########################
files:
- path: /etc/hostname
mode: 0644
contents:
inline: fedora-dev
- path: /etc/vconsole.conf
mode: 0644
contents:
inline: KEYMAP=fr
####### LINKS ########################
links:
- path: /etc/localtime
target: ../usr/share/zoneinfo/Europe/Paris
Ensuite, il va falloir formater le disque :
- device : scsi0, le disque principal créer par PVE
- wipe_table : aucun formatage de bas niveau
- partitions : on va en créer 4 dont une qui fera minimum 8192 Mib qui est le minimum syndical sous peine de ne pas voir FCOS démarrer.
####### DISKS ########################
disks:
- device: /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0
wipe_table: false
partitions:
- number: 4
label: root
size_mib: 8192
resize: true
- size_mib: 0
label: var
Si vous avez bien suivi la procédure, vous devriez avoir ce fichier à la fin.
variant: fcos
version: 1.4.0
####### PASSWD ########################
passwd:
users:
- name: sussudio
groups:
- docker
- sudo
ssh_authorized_keys:
- ssh-rsa.......
####### STORAGE ######################
storage:
####### FILES ########################
files:
- path: /etc/hostname
mode: 0644
contents:
inline: fedora-dev
- path: /etc/vconsole.conf
mode: 0644
contents:
inline: KEYMAP=fr
####### DISKS ########################
disks:
- device: /dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0
wipe_table: false
partitions:
- number: 4
label: root
size_mib: 8192
resize: true
- size_mib: 0
label: var
####### FILESYSTEMS ##################
filesystems:
- path: /var
device: /dev/disk/by-partlabel/var
format: ext4
with_mount_unit: true
####### LINKS ########################
links:
- path: /etc/localtime
target: ../usr/share/zoneinfo/Europe/Paris
On commence en mode claquettes-chaussettes.

5-Conversion au format Ignition
Sur votre poste, à la racine du dossier contenant votre fichier "coreos.bu", déployez un conteneur qui effectuera la conversion du fichier au format Ignition (.ign).
sudo docker run -i --rm quay.io/coreos/butane:release --strict < coreos.bu > coreos.ign
6-Ouvrir un serveur HTTP
Ensuite, si Python3 est installé sur votre poste, tapez la commande suivante pour ouvrir un serveur web HTTP et rendre accessible le fichier coreos.ign à votre instance FCOS.
python3 -m http.server
Ou alors déployez un conteneur temporaire avec le répertoire de travail monté accessible sur le port 8000.
docker run -p 8000:8000 -v $PWD:/data -it --rm python
Lorsque vous serez dans le conteneur, tapez la commande suivante et validez.
import os
os.chdir("/data")
from http.server import HTTPServer, SimpleHTTPRequestHandler
HTTPServer(('', 8000), SimpleHTTPRequestHandler).serve_forever()
Si vous êtes sur votre poste en local, tapez "localhost:8000" pour vérifier que tout fonctionne.

Bingo!!!!!! Démarrez votre machine virtuelle et récupérez le fichier à l'aide de la commande "curl".
curl -O http://IP_ADRESS:8000/coreos.ign
Enfin, tapez la commande suivante pour déployer la configuration :
Avec l'aide de l'appel de commande "coreos-installer", vous allez installer dans "/dev/sda" (le disque principal) la configuration issue du fichier "coreos.ign".
sudo coreos-installer install /dev/sda --ignition-file 1_basic.ign
Et c'est fini!!! Redémarrez le système avec "reboot".

Connectez vous en SSH. Bingo, la clé est bien prise en compte au démarrage.

7-Conclusion
J'ai volontairement tronquer ce tutoriel car à la base je devait vous montrer comment déployer des conteneurs à travers la créations de services et socket via systemd mais ce sera pour un prochain tutoriel car je rencontre des soucis de droits utilisateurs (j'ai passer une nuit blanche dessus).
Dans tout les cas, Fedora CoreOS est un système très intéressant à étudier et je doute pas que les systèmes immuables de ce genre sont le futur de l'informatique.
Voir mon article sur NixOS, un autre système immuable.

Vidéos complémentaires
Je vous conseille également de regarder ces trois vidéos pour mieux comprendre ce que représente Fedora CoreOS.
Sources :



