Alpine Linux sur Proxmox avec Cloud-Init
Alpine Linux est une distribution légère, sécurisée et orientée conteneurs, idéale pour créer des machines virtuelles minimalistes. Combinée à Cloud-Init, elle permet un provisionnement automatisé parfait pour les environnements de virtualisation comme Proxmox VE.
Les différentes étapes
- Télécharger une image Alpine Linux pré-configurée pour Cloud-Init
- Créer une VM sur Proxmox à l’aide d’un script Bash paramétrable
- Configurer les options post-installation
- Transformer cette VM en template réutilisable
Prérequis
- Un serveur Proxmox VE fonctionnel (version 7.x ou 8.x)
- Accès root au shell Proxmox
- Stockage configuré (ZFS, LVM, ou autre)
- Une clé SSH publique pour l’authentification
Télécharger l’image Alpine Linux Cloud-Init
Alpine Linux propose des images cloud officielles au format qcow2, prêtes pour Cloud-Init. Téléchargez l’image sur votre serveur Proxmox :
1
2
3
4
5
6
| # Créer le répertoire de stockage des templates
mkdir -p /var/lib/vz/template/qcow
cd /var/lib/vz/template/qcow
# Télécharger l'image Alpine Linux Cloud-Init (UEFI)
wget https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/cloud/nocloud_alpine-3.23.3-x86_64-uefi-cloudinit-r0.qcow2
|
Note : Vérifiez la page officielle Alpine Cloud pour obtenir la dernière version disponible (Rechercher x86_64 • uefi • cloudinit • vm).
Script de création de la VM
Script Bash paramétrable pour créer la VM. Les variables en début de script permettent une personnalisation facile.
La clé publique SSH
1
2
| # Proxmox
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICzXedtMBAnjmFcytdwu0bF7VS6LuGjgwBoz348+GZl6 yann@pc1" > /root/.ssh/alpine-template.pub
|
Points clés de la configuration
- UEFI obligatoire : L’image Alpine Cloud-Init UEFI nécessite le firmware OVMF et le type de machine q35.
- Cloud-Init : Les paramètres
ciuser, cipassword et sshkey sont injectés au premier démarrage.
- Redimensionnement : Le disque qcow2 d’origine fait environ 15Go
- doas vs sudo : Alpine Linux utilise
doas par défaut comme alternative légère à sudo.
Variables de configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| #!/bin/bash
# Identification de la VM
VM_ID=110
VM_NAME="alpine-template"
VM_DESCRIPTION="Alpine Linux template"
VM_TAGS="alpine,template"
# Configuration matérielle
VM_ARCH="x86_64"
VM_CORES=1
VM_SOCKETS=1
VM_CPU="host"
VM_NUMA=0
VM_MEMORY=1024
VM_DISK_SIZE=15G
# Configuration système
VM_ONBOOT=1
VM_AGENT=1
VM_MACHINE="q35"
VM_BIOS="ovmf"
VM_TABLET=0
# Configuration stockage
VM_STORAGE="local-lvm"
VM_STORAGE_DISK="vm-$VM_ID-disk-1"
VM_EFIDISK0="$VM_STORAGE:0,pre-enrolled-keys=0"
# Configuration réseau
VM_BRIDGE="vmbr0"
VM_NET0="virtio,bridge=$VM_BRIDGE"
VM_IPCONFIG0="dhcp"
# Configuration Cloud-Init
VM_HA_MANAGED=1
VM_CIUSER="alpitemp"
VM_CIPASSWORD="alpitemp49"
VM_SSHKEY="/root/.ssh/alpine-template.pub"
|
Création de la VM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| qm create $VM_ID \
--name=$VM_NAME \
--arch=$VM_ARCH \
--cores=$VM_CORES \
--sockets=$VM_SOCKETS \
--cpu=$VM_CPU \
--numa=$VM_NUMA \
--onboot=$VM_ONBOOT \
--agent=$VM_AGENT \
--machine $VM_MACHINE \
--bios $VM_BIOS \
--efidisk0 $VM_EFIDISK0 \
--tablet=$VM_TABLET \
--memory=$VM_MEMORY \
--net0 $VM_NET0 \
--ipconfig0 "ip=$VM_IPCONFIG0" \
--ha-managed=$VM_HA_MANAGED \
--description "$VM_DESCRIPTION" \
--tags $VM_TAGS \
--ciuser=$VM_CIUSER \
--cipassword=$VM_CIPASSWORD \
--sshkey=$VM_SSHKEY
|
Import et configuration du disque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # Chemin vers l'image téléchargée
IMAGE="/var/lib/vz/template/qcow"
IMAGE+="/nocloud_alpine-3.23.3-x86_64-uefi-cloudinit-r0.qcow2"
# Importer le disque depuis l'image qcow2
qm disk import $VM_ID $IMAGE $VM_STORAGE
# Configurer le contrôleur SCSI et attacher le disque
qm set $VM_ID \
--scsihw virtio-scsi-pci \
--scsi0 $VM_STORAGE:$VM_STORAGE_DISK
# Ajouter le lecteur Cloud-Init
qm set $VM_ID --ide2 $VM_STORAGE:cloudinit
# Configurer le boot sur le disque SCSI
qm set $VM_ID --boot c --bootdisk scsi0
# Redimensionner le disque
qm resize $VM_ID scsi0 $VM_DISK_SIZE
# Démarrer la VM
qm start $VM_ID
|
Configuration post-installation
Relever adresse IP du template alpine
Une fois la VM démarrée et accessible via SSH, exécutez les commandes suivantes pour finaliser la configuration.
1
| ssh -i .ssh/alpine-template alpitemp@192.168.0.22
|
Configuration DNS
Adaptez l’adresse du serveur DNS et le domaine à votre environnement :
1
2
3
| cat <<EOF | doas tee /etc/resolv.conf
nameserver 192.168.0.205
EOF
|
Mise à jour et installation des paquets essentiels
1
2
3
| doas apk update
doas apk upgrade
doas apk add qemu-guest-agent bash-completion bash vim nano
|
Personnalisation du shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Définir Bash comme shell par défaut
chsh -s /bin/bash
# Configurer le terminal et les alias
cat <<'EOF' >> ~/.bashrc
export TERM=xterm-256color
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias vi='vim'
EOF
source ~/.bashrc
|
Activation du QEMU Guest Agent
1
2
| doas rc-update add qemu-guest-agent
doas rc-service qemu-guest-agent start
|
Conversion en template (optionnel)
Pour réutiliser cette configuration, convertissez la VM en template Proxmox :
1
2
3
| qm stop $VM_ID
# Attendre arrêt complet avant de lancer la commande suivante
qm template $VM_ID
|
Vous pourrez ensuite cloner ce template pour créer de nouvelles VMs.
Suppression de la VM
Pour supprimer complètement la VM et libérer les ressources :
1
2
| qm stop $VM_ID
qm destroy $VM_ID --destroy-unreferenced-disks --purge
|
Ressources complémentaires