Si vous exploitez un nuage privé ou une plateforme de virtualisation fonctionnant avec KVM. La manière la plus idéale de faire tourner une machine virtuelle Debian 12 est d’utiliser une image de nuage
KVM - Debian virtuel
Installer un serveur debian virtuel sur Lenovo KVM
Se connecter sur le serveur Lenovo
Installer image debian cloud
Télécharger image debian cloud
- nocloud : Principalement utile pour tester le processus de construction lui-même. N’a pas installé cloud-init, mais permet à l’utilisateur de se connecter en tant que root sans mot de passe.
Toutes les images de Debian 12 Cloud sont disponibles sur la page officielle de téléchargement des images d’OS. Dans ce guide, nous allons télécharger l’image nocloud qcow2
# Nom serveur à créer
export VM_NAME="debsrv01"
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.qcow2 -O /lvssd/kvm/libvirt/images/$VM_NAME.qcow2
Redimensionner taille image à 8Go
# Nom serveur à créer
export VM_NAME="debsrv01"
qemu-img resize /lvssd/kvm/libvirt/images/$VM_NAME.qcow2 8G
Info sur l’image : qemu-img info /lvssd/kvm/libvirt/images/debsrv01.qcow2
image: /lvssd/kvm/libvirt/images/debsrv01.qcow2
file format: qcow2
virtual size: 8 GiB (8589934592 bytes)
disk size: 348 MiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: false
refcount bits: 16
corrupt: false
extended l2: false
Créez une nouvelle machine virtuelle Debian 12 à l’aide de la commande virt-install
.
Nous utilisons le réseau en pont , remplacer network=default
par bridge=br0
sudo virt-install \
--memory 2048 \
--vcpus 1 \
--name $VM_NAME \
--disk /lvssd/kvm/libvirt/images/$VM_NAME.qcow2,device=disk,bus=virtio,format=qcow2 \
--os-variant debiantesting \
--network bridge=br0,model=virtio \
--virt-type kvm \
--graphics none \
--boot uefi \
--import
La sortie du mode console: Ctrl+Altgr ]
A la fin de l’installation, on arrive sur le login (en mode console) :
Saisir “root”
[...]
Debian GNU/Linux 12 localhost ttyS0
localhost login:
Par défaut openssh ne fonctionne pas: [FAILED] Failed to start ssh.servic…[0m - OpenBSD Secure Shell server.
Il faut regénérer les clés : dpkg-reconfigure openssh-server
et valider “Keep the local version currently installed”
Mise à jour
apt update && apt upgrade -y
Redimensionner taille partition
Il faut mettre la taille au maximun sur la partition 1 du disque /dev/vda
root@localhost:~# fdisk /dev/vda
Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
GPT PMBR size mismatch (4194303 != 16777215) will be corrected by write.
The backup GPT table is not on the end of the device. This problem will be corrected by write.
This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.
Command (m for help): p
Disk /dev/vda: 8 GiB, 8589934592 bytes, 16777216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: AA02A0A0-DE2C-E343-AC65-FCC478C5851B
Device Start End Sectors Size Type
/dev/vda1 262144 4192255 3930112 1.9G Linux filesystem
/dev/vda14 2048 8191 6144 3M BIOS boot
/dev/vda15 8192 262143 253952 124M EFI System
Partition table entries are not in disk order.
Command (m for help): d
Partition number (1,14,15, default 15): 1
Partition 1 has been deleted.
Command (m for help): n
Partition number (1-13,16-128, default 1):
First sector (262144-16777182, default 262144):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (262144-16777182, default 16775167):
Created a new partition 1 of type 'Linux filesystem' and of size 7.9 GiB.
Partition #1 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: N
Command (m for help): w
Redémarrer machine virtuelle
systemctl reboot
Mot passe root
Créer mot de passe root ( rootsso49600)
passwd root
Créer un utilisateur
Après s’être connecté en tant qu’utilisateur root, créer le premier utilisateur
useradd -m -d /home/usersso -s /bin/bash -c "vm-srv01 Owner" -U usersso
Mot de passe usersso (usersso49600)
passwd usersso
Ajout à sudoers
echo "usersso ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/usersso
Relever adresse IP
ip a |grep "inet "
inet 127.0.0.1/8 scope host lo
inet 192.168.0.22/24 metric 100 brd 192.168.0.255 scope global dynamic enp1s0
Réseau netplan
netplan est utilisé comme gestionnaire réseau avec l’image debian cloud
Les périphériques du réseau
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:a1:89:e4 brd ff:ff:ff:ff:ff:ff
Netplan est un utilitaire qui permet de configurer facilement le réseau sous Linux.
Les fichiers de configuration sont dans le dossier /etc/netplan
90-default.yaml
On retire les fichiers de configuration originaux
mkdir /etc/backup.netplan
mv /etc/netplan/* /etc/backup.netplan/
On propose cette configuration statique de l’interface enp1s0
bash -c 'cat << EOF > /etc/netplan/01-enp1s0.yaml
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
addresses:
- 192.168.0.219/24
nameservers:
addresses:
- 1.1.1.1
- 9.9.9.9
search: []
routes:
- to: default
via: 192.168.0.254
EOF'
Droits
chmod 600 /etc/netplan/01-enp1s0.yaml
Et on génère la configuration pour l’appliquer auprès du gestionnaire
netplan generate
netplan apply
Cannot call openvswitch: ovsdb-server.service is not running
Il s’agit juste d’un avertissement…
Pour vérification
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:ae:ba:a2 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.219/24 brd 192.168.0.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 2a01:e0a:9c8:2080:5054:ff:feae:baa2/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 86386sec preferred_lft 86386sec
inet6 fe80::5054:ff:feae:baa2/64 scope link
valid_lft forever preferred_lft forever
Modifier hostname
hostnamectl set-hostname vm-srv01
hostnamectl
Static hostname: vm-srv01
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: c2899a89218d46af92cafe2aaba0d1a6
Boot ID: 198d45e8f81a4cb78ae413ab9a2ed9a5
Virtualization: kvm
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0-18-amd64
Architecture: x86-64
Hardware Vendor: QEMU
Hardware Model: Standard PC _Q35 + ICH9, 2009_
Firmware Version: 0.0.0
OpenSSH clé
sur la machine virtuelle
SSH Il faut activer authentification mot de passe
nano /etc/ssh/sshd_config
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
Relancer
systemctl restart sshd
connexion avec clé
sur l'ordinateur de bureau
Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) pour une liaison SSH avec le serveur.
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/debsrv01
Envoyer les clés publiques sur le serveur KVM
ssh-copy-id -i ~/.ssh/debsrv01.pub usersso@192.168.0.219
sur la machine virtuelle On se connecte
ssh usersso@192.168.0.219
Modifier la configuration serveur SSH
sudo nano /etc/ssh/sshd_config
Modifier
Port = 55219
PasswordAuthentication no
Relancer le serveur
sudo systemctl restart sshd
Sortie console
Sortir du mode console par poweroff
en mode su avec le message suivant
Création de domaine terminée.
Vous pouvez redémarrer votre domaine en exécutant :
virsh --connect qemu:///system start debsrv01
Démarrer la vm et positionner le démarrage auto
sudo virsh --connect qemu:///system start debsrv01 # Domain 'debsrv01' started
sudo virsh autostart debsrv01 # Domain 'debsrv01' marked as autostarted
Connexion utilisateur via SSH
ssh -p 55219 -i ~/.ssh/debsrv01 usersso@192.168.0.219
Utilitaires
Installer utilitaires
sudo apt update && sudo apt install rsync curl tmux jq figlet git
Effacer et créer motd
sudo rm /etc/motd && sudo nano /etc/motd
__ __ __ __ _ _ ___ _
\ \ / /| \/ | __| | ___ | |__ ___ _ __ __ __ / _ \ / |
\ \ / / | |\/| | / _` | / _ \| '_ \ / __|| '__|\ \ / /| | | || |
\ V / | | | | | (_| || __/| |_) |\__ \| | \ V / | |_| || |
\_/ |_| |_| \__,_| \___||_.__/ |___/|_| \_/ \___/ |_|
____ _ _ _ ____
| _ \ ___ | |__ (_) __ _ _ __ / ||___ \
| | | | / _ \| '_ \ | | / _` || '_ \ | | __) |
| |_| || __/| |_) || || (_| || | | | | | / __/
|____/ \___||_.__/ |_| \__,_||_| |_| |_||_____|
_ ___ ____ _ __ ___ ___ ____ _ ___
/ | / _ \|___ \ / | / /_ ( _ ) / _ \ |___ \ / | / _ \
| || (_) | __) | | || '_ \ / _ \ | | | | __) || || (_) |
| | \__, |/ __/ _ | || (_) || (_) |_| |_| |_ / __/ | | \__, |
|_| /_/|_____|(_)|_| \___/ \___/(_)\___/(_)|_____||_| /_/
Historique de la ligne de commande
Ajoutez la recherche d’historique de la ligne de commande au terminal
Se connecter en utilisateur
Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.
# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc
Site statique test
Jekyll
Installation Simplifiée Jekyll (générateur de site statique) sur Linux
jekyll 4.3.3 au 4 mai 2024
Création dossier et modification des droits
sudo mkdir sharenfs/debsrv01
sudo chown $USER:$USER sharenfs/debsrv01
Se positionner dans le dossier
cd ~/sharenfs/debsrv01/yannstatic/
Le fichier Gemfile
source "https://rubygems.org"
# gem "github-pages", group: :jekyll_plugins
gem "jekyll-text-theme"
gem "jekyll-html-pipeline"
Le fichier _config.yml
(Afficher/Cacher) _config.yml
Bundle lit le fichier Gemfile
bundle install # Patientez ...
Résultat exécution
Bundle complete! 2 Gemfile dependencies, 44 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Créer le dossier destination
sudo mkdir sharenfs/rnmkcy/racine/static
sudo chown $USER:$USER sharenfs/rnmkcy/racine/static
Générer le site
bundle exec jekyll build --source "/home/usersso/sharenfs/debsrv01/yannstatic" --destination "/home/usersso/sharenfs/rnmkcy/racine/static"
Lancer le serveur
tmux
cd sharenfs/debsrv01/yannstatic/
bundle exec jekyll serve
Résultat de la dernière commande
Configuration file: /home/usersso/sharenfs/debsrv01/yannstatic/_config.yml
Source: /home/usersso/sharenfs/debsrv01/yannstatic
Destination: /home/usersso/sharenfs/debsrv01/yannstatic/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 35.971 seconds.
Auto-regeneration: enabled for '/home/usersso/sharenfs/debsrv01/yannstatic'
Server address: http://127.0.0.1:4000
Server running... press ctrl-c to stop.
Test depuis un poste de bureau ayant un droit d’accès via SSH
ssh -L 9500:localhost:4000 usersso@192.168.0.219 -p 55219 -i /home/yann/.ssh/debsrv01