Post

cwwk KVM Alpine Linux (vm-alpine06)

cwwk KVM Alpine Linux (vm-alpine06)

Alpine Linux est une distribution Linux ultra-légère

Alpine Linux

Création machine virtuelle Alpine de type KVM avec 2 Go de RAM, 1 cœur de processeur et 5 Go de disque dur.

Créer vm-alpine sur un serveur

Téléchargez la dernière image Alpine (Virtual).
Virtual –> Similar to standard. Slimmed down kernel. Optimized for virtual systems.

1
2
# ISO au 14/10/2025
wget https://dl-cdn.alpinelinux.org/alpine/v3.22/releases/x86_64/alpine-virt-3.22.2-x86_64.iso

Création d’une image virtuelle vm-alpine06 sous le serveur Lenovo rnmkcy.eu
On se connecte sur le serveur Lenovo en SSH, puis on exécute la commande suivante pour créer une machine virtuelle Alpine avec 2 Go de RAM, 1 cœur de processeur et 8 Go de disque dur

1
2
3
4
5
6
7
8
9
10
11
sudo virt-install \
--osinfo alpinelinux3.21 \
--name vm-alpine06 \
--memory 2048 \
--vcpus 1 \
--cpu host \
--hvm \
--disk path=/srv/kvm/libvirt/images/vm-alpine06.qcow2,format=qcow2,size=8 \
--cdrom /home/yick/FreeUSB2To/iso/alpine-virt-3.22.2-x86_64.iso \
--network bridge=br0 \
--graphics vnc  

Note: La dernière version Alpine Linux est alpinelinux3.22 au 14/10/2025 mais KVM ne connait que alpinelinux3.21 (sudo virt-install --osinfo list |grep alpine)

Après exécution dans un terminal de la commande ci dessus, on arrive sur En attente de fin d’installation

Configurer vm-alpine

ATTENTION: Désactiver "Affichage VNC" des autres machines

VNC, configuration xml

1
2
3
<graphics type="vnc" port="5900" autoport="yes" listen="127.0.0.1">
  <listen type="address" address="127.0.0.1"/>
</graphics>

Le serveur Lenovo n’a pas d’affichage, il faut créer un tunnel ssh depuis un terminal d’un poste client

1
ssh -L 5900:127.0.0.1:5900 yick@192.168.0.205 -p 55205 -i /home/yann/.ssh/yick-ed25519

Puis lancer de ce même poste un client VNC

la console s’affiche

Une fois l’image ISO lancée, on arrive à un invite de connexion.
Indiquez root comme nom d’utilisateur, aucun mot de passe ne vous sera demandé à cette étape.

Le système est utilisable, mais on veut l’installer, ce qui passe par la commande suivante (clavier qwerty)

1
setup-alpine # saisir setup)qlpine

Une suite de questions :
fr
fr
[localhost] Entrée
[eth0] Entrée
[dhcp] Entrée
manual network configuration [n] Entrée
Root password: azertyuiop (saisir 2 fois)
Europe/
Paris
Proxy [none] Entrée
Enter mirror number or URL: [1] Entrée
Setup a user? alpi
Fullname Entrée
Password alpi: alpi49 (saisir 2 fois)
ssh key [none] Entrée
ssh server [openssh] Entrée
disk use: vda Entrée
use it: sys Entrée
Erase disk: y Entrée

A la fin
Installation is complete, Please reboot.

Relever l’adresse ip allouée : ip a –> 192.168.10.194
Puis redémarrer : reboot
La fenêtre vnc se ferme

On n’a plus besoin de VNC, en mode graphique
Arrêter la machine virtuelle


Redémarrer la machine virtuelle

Connexion vm-alpine via SSH

Sur un poste linux du réseau

1
ssh alpi@192.168.10.194

Une fois connecté ,vous pouvez accéder au “root” de manière classique avec la commande :

1
su -

Mise à jour

1
2
3
4
apk update
apk upgrade 
# Vous pouvez fusionner les deux lignes avec 
apk -U upgrade

Editeur nano (Vous pouvez aussi opter pour vi qui est nativement présent sur le système)

1
apk add nano

Réseau - IP statique

How to configure static IP address on Alpine Linux

Le fichier de configuration /etc/network/interfaces

1
/etc/network/interfaces
1
2
3
4
5
6
7
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
  address 192.168.10.216
  gateway 192.168.10.1

Ajout serveur DNS Unbound 192.168.0.205 (présent dans le serveur debian 13 cwwk rnmkcy.eu)
dans le fichier /etc/resolv.conf

1
2
nameserver 192.168.0.205
nameserver 192.168.10.1

Les modifications apportées à /etc/network/interfaces peuvent être activées en exécutant

1
service networking restart 

Un reboot est préférable

ATTENTION: Déconnexion SSH car changement adresse IP

Connexion SSH avec IP 192.168.10.216

1
ssh alpi@192.168.10.216

Message à la connexion SSH, /etc/motd

1
2
3
4
5
6
7
8
9
10
11
12
13
    _    _        _              _     _                 
   /_\  | | _ __ (_) _ _   ___  | |   (_) _ _  _  _ __ __
  / _ \ | || '_ \| || ' \ / -_) | |__ | || ' \| || |\ \ /
 /_/ \_\|_|| .__/|_||_||_|\___| |____||_||_||_|\_,_|/_\_\
           |_|          _        _              __    __ 
 __ __ _ __  ___  __ _ | | _ __ (_) _ _   ___  /  \  / / 
 \ V /| '  \|___|/ _` || || '_ \| || ' \ / -_)| () |/ _ \
  \_/ |_|_|_|    \__,_||_|| .__/|_||_||_|\___| \__/ \___/
  _  ___  ___     _   __  |_|     _   __     ___  _   __ 
 / |/ _ \|_  )   / | / / ( _ )   / | /  \   |_  )/ | / / 
 | |\_, / / /  _ | |/ _ \/ _ \ _ | || () |_  / / | |/ _ \
 |_| /_/ /___|(_)|_|\___/\___/(_)|_| \__/(_)/___||_|\___/
                                                         

OpenSSH avec clés

Connexion ssh sur un autre port avec un jeu de clés

Générer une paire de clé sur l’ordinateur de bureau PC1
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec la machine virtuelle vm-alpine06

1
2
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/vm-alpine06
chmod 600 ~/.ssh/vm-alpine06

Copier la clé publique cat ~/.ssh/vm-alpine06.pub dans le presse-papier

1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHJXXXPhNI7WD1q9AJ70fnoI2OyNjReheLKR/hFhWaiz yann@PC1

On se connecte depuis PC1 qui est dans le réseau 192.168.0.0/24

Dans le cas où les réseaux ne sont pas interconnectés
On se connecte sur la machine virtuelle alpine linux “vm-alpine06” en proxy avec le serveur cwwk (192.168.0.205)

1
ssh -o ProxyCommand="ssh -W %h:%p -p 55205 -i /home/yann/.ssh/yick-ed25519 yick@192.168.0.205" alpi@192.168.10.216 -p 55216 -i /home/yann/.ssh/vm-alpine06

Créer le répertoire et ouvrir nouveau fichier

1
2
mkdir -p $HOME/.ssh/
nano $HOME/.ssh/authorized_keys

Coller le contenu du presse-papier , sauver le fichier et sortir

Modifier les droits

1
chmod 600 $HOME/.ssh/authorized_keys

Passer en mode su

1
su -

Créer la configuration “alpi.conf” serveur SSH

1
nano /etc/ssh/sshd_config.d/alpi.conf

Ajouter

1
2
Port = 55216
PasswordAuthentication no

Relancer le serveur

1
service sshd restart

Test connexion

1
ssh alpi@192.168.10.216 -p 55216 -i /home/yann/.ssh/vm-alpine06

Dans le cas où les réseaux ne sont pas interconnectés

1
ssh -o ProxyCommand="ssh -W %h:%p -p 55205 -i /home/yann/.ssh/yick-ed25519 yick@192.168.0.205" alpi@192.168.10.216 -p 55216 -i /home/yann/.ssh/vm-alpine06

sudo

Passer en root

1
su -

Ajout dépôt communauté
Editer la configuration des dépôts

1
nano /etc/apk/repositories

Trouvez maintenant la ligne qui se termine dans /community
Ensuite, retirez le # au début de la ligne.
Le fichier résultant devrait ressembler à ceci

1
2
3
#/media/cdrom/apks
http://dl-cdn.alpinelinux.org/alpine/v3.22/main
http://dl-cdn.alpinelinux.org/alpine/v3.22/community

Installer sudo

1
2
apk update
apk add sudo

Ajouter un utilisateur avec les privlèges root

1
echo "alpi     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-alpi

Outils Réseau

1
apk update && apk add bind-tools

Partage (virtiofs)

Virtiofs est un système de fichiers partagé qui permet aux machines virtuelles d’accéder à une arborescence de répertoires sur l’hôte. Contrairement aux approches existantes, il est conçu pour offrir la sémantique et les performances d’un système de fichiers local.

Un arrêt puis un démarrage de la machine virtuelle est obligatoire

Il faut valider Enable shared memory

Puis ajouter un système de fichier

Vue des éléments XML de domaine suivants pour partager le répertoire hôte /path avec l’invité

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<domaine>
      ...
  <memoryBacking>
    <source type="memfd"/>
    <access mode="shared"/>
  </memoryBacking>
      ...
  <devices>
        ...
    <filesystem type="mount" accessmode="passthrough">
      <driver type="virtiofs"/>
      <source dir="/sharenfs"/>
      <target dir="sharenfs"/>
    </filesystem>
        ...
   </devices>
</domaine>

Créer dossier local en mode utilisateur

1
mkdir -p ~/sharenfs

Le partage sur /etc/fstab en mode su

1
sharenfs   /home/alpi/sharenfs   virtiofs rw 0 0

monter

1
sudo mount -a

Démarrage automatique VM

Démarrage auto

Maintenance

Alpine Linux - Mises à jour automatique

Installer curl

1
sudo apk add curl

En mode su

Pour chaque nouveau serveur Alpine Linux, créer un script shell nommé apk-autoupgrade dans le dossier /etc/periodic/daily/ avecles permissions suivantes : 700

1
2
echo -e "#!/bin/sh\napk upgrade --update | sed \"s/^/[\`date\`] /\" >> /var/log/apk-autoupgrade.log" > /etc/periodic/daily/apk-autoupgrade && \
	chmod 700 /etc/periodic/daily/apk-autoupgrade

Si les tâches cron ne sont pas activées

1
2
rc-service crond start
rc-update add crond

Le script exécute la commande apk upgrade –update une fois par jour, apk par défaut ne demande jamais l’intervention de l’utilisateur.

Additif pour notification ntfy

1
nano /etc/periodic/daily/apk-autoupgrade

Ajouter ce qui suit en fin de fichier

1
2
3
4
5
6
7
8
curl \
-H "X-Email: ntfy@cinay.eu" \
-H "Title: 💻 Alpine Linux Navidrome vm-alpine06 : Fin exécution script 'apk-autoupgrade'" \
-H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H prio:low \
-d "Navidrome vm-alpine06 192.168.10.216 
✔️ Fin exécution script /etc/periodic/daily/apk-autoupgrade" \
https://noti.rnmkcy.eu/yan_infos
Cet article est sous licence CC BY 4.0 par l'auteur.