Post

Proxmox VM Alpine Linux Template

Proxmox VM Alpine Linux Template

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

Cet article est sous licence CC BY 4.0 par l'auteur.