Afficher/cacher Sommaire
Alpine Linux est une distribution Linux ultra-légère. Création d’une machine virtuelle ‘alpine-vm01’ IP 192.168.0.222
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éation machines virtuelles KVM avec la commande virsh
- Accéder aux machines virtuelles KVM via le client VNC
- Wiki Alpine Linux
- https://pkgs.alpinelinux.org/packages
Créer vm-alpine sur un serveur
Les dernières images Alpine Linux
Création d’une image virtuelle alpine-vm01 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 5 Go de disque dur
sudo virt-install \
--osinfo alpinelinux3.17 \
--name alpine-vm01 \
--memory 2048 \
--vcpus 1 \
--cpu host \
--hvm \
--disk path=/srv/kvm/libvirt/images/alpine-vm01.qcow2,format=qcow2,size=5 \
--cdrom /srv/kvm/libvirt/boot/alpine-standard-3.20.2-x86_64.iso \
--network bridge=br0 \
--graphics vnc
Note: La dernière version Alpine Linux est alpinelinux3.20 au 10/07/2024 mais KVM ne connait que alpinelinux3.17 (sudo virt-install --osinfo list |grep alpine
)
Après exécution dans un terminal de la commande ci dessus, on arrive sur l’écran suivant
Configurer vm-alpine
ATTENTION: Désactiver "Affichage VNC" des autres machines
Le serveur Lenovo n’a pas d’affichage, il faut créer un tunnel ssh depuis un terminal d’un poste client
ssh -L 5900:127.0.0.1:5900 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-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)
setup-alpine # saisir setup)qlpine
Une suite de questions :
mot de passe root (toorrtyuiop)
APK mirror…
Utilisateur aluser49600 et suite…
Relever l’adresse ip allouée : ip a
–> 192.168.0.31
Puis redémarrer : reboot
La fenêtre vnc se ferme
On n’a plus besoin de VNC, en mode graphique
Eteindre puis redémarrer la machine virtuelle
Explications sur la procédure
Normalement, vous n’avez rien à faire, les paramètres par défaut doivent convenir. Mais si vous le désirez, vous pouvez les modifier pour utiliser une interface particulière, une IP fixe, un serveur proxy, etc.
Une soixantaine de serveurs mirroir vous seront proposés pour télécharger les paquets. Choisissez un numéro dans la liste ou demandez au système de les tester et de sélectionner le plus rapide. Vous pouvez aussi modifier le fichier des sources. Il vous faudra ensuite choisir votre serveur SSH : OpenSSH, Dropbear ou aucun.
On termine par la méthode d’installation. Il en existe quatre :
- none : le système et ses données sont placés en RAM et seront perdus après le redémarrage
- sys : le système et ses données sont placés sur un HDD/SSD
- data : le système est placé en RAM, les données sur un HDD/SSD
- lvm : utilisation de Logical Volume Manager, les deux choix précédents seront proposés (lvmsys, lvmdata)
Si vous stockez le système en mémoire, il faudra trouver un moyen de sauvegarder la configuration. Vous pourrez le faire uniquement depuis un lecteur de disquettes (!) ou une clé USB. Une fois le système installé, vous pourrez l’utiliser directement s’il est placé en mémoire ou redémarrer si vous avez opté pour un stockage classique.
Il n’est pas conseillé d’utiliser directement le compte root pour les actions du quotidien.
Si utilisateur non créé dans la procédure d’installation, le créer avec son propre espace dans /home/
adduser aluser
Vous pouvez utiliser l’utilisateur pour vous connecter via SSH (impossible avec le compte root)
Connexion vm-alpine via SSH
Sur un poste linux du réseau
ssh aluser@192.168.0.31
Une fois connecté ,vous pouvez accéder au “root” de manière classique avec la commande :
su -
Mise à jour
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)
apk add nano
Réseau - IP statique
How to configure static IP address on Alpine Linux
Le fichier de configuration /etc/network/interfaces
/etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.222/24
gateway 192.168.0.254
hostname linux-alpine
Fichier de résolution dns
/etc/resolv.conf
nameserver 1.1.1.1
nameserver 9.9.9.9
Les modifications apportées à /etc/network/interfaces peuvent être activées en exécutant
service networking restart
ATTENTION: Déconnexion SSH car changement adresse IP
Connexion SSH avec IP 192.168.0.222
ssh aluser@192.168.0.222
Message à la connexion SSH, /etc/motd
_ ____ __ __ __ _ _ _
| |/ /\ \ / /| \/ | /_\ | | _ __ (_) _ _ ___
| ' < \ V / | |\/| | / _ \ | || '_ \| || ' \ / -_)
|_|\_\ \_/ |_| |_| /_/ \_\|_|| .__/|_||_||_|\___|
_ _ |_| __ _
__ _ | | _ __ (_) _ _ ___ ___ __ __ _ __ / \ / |
/ _` || || '_ \| || ' \ / -_)|___|\ V /| ' \| () || |
\__,_||_|| .__/|_||_||_|\___| \_/ |_|_|_|\__/ |_|
|_|
_ ___ ___ _ __ ___ __ ___ ___ ___
/ |/ _ \|_ ) / | / / ( _ ) / \ |_ )|_ )|_ )
| |\_, / / / _ | |/ _ \/ _ \ _| () |_ / / / / / /
|_| /_/ /___|(_)|_|\___/\___/(_)\__/(_)/___|/___|/___|
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é
<domaine>
...
<memoryBacking>
<source type="memfd"/>
<access mode="shared"/>
</memoryBacking>
...
<devices>
...
<filesystem type="mount" accessmode="passthrough">
<driver type="virtiofs"/>
<source dir="/srv/media/statique"/>
<target dir="statique"/>
</filesystem>
<filesystem type="mount" accessmode="passthrough">
<driver type="virtiofs"/>
<source dir="/mnt/sharenfs"/>
<target dir="sharenfs"/>
</filesystem>
...
</devices>
</domaine>
Créer dossier local en mode utilisateur
mkdir -p ~/{sharenfs,statique}
Le partage sur /etc/fstab
en mode su
statique /home/aluser/statique virtiofs rw 0 0
sharenfs /home/aluser/sharenfs virtiofs rw 0 0
monter
sudo mount -a
Démarrage automatique VM
Démarrage auto
SSH tunnel proxy
Erreur en cas d’utilisation du tunnel SSH
how to solve the “open failed: administratively prohibited: open failed” when using a SSH tunnel proxy
Le transfert TCP est désactivé sur le serveur. Dans le fichier /etc/ssh/sshd_config
de votre serveur, assurez-vous que la ligne suivante n’est pas présente ou qu’elle est commentée, sinon mettez-la en commentaire.
#AllowTcpForwarding no
Relancer le serveur ssh en mode su
service sshd restart
Annexe
Bash sur Alpine Linux
How to install bash shell in Alpine Linux
Par défaut, bash n’est pas inclus avec BusyBox et Linux alpine.
Installer un shell bash dans Alpine Linux
Voici comment installer un shell bash dans Alpine Linux en utilisant la commande apk.
Passer en mode root : su -
apk update
apk upgrade
apk add bash
Obtenez une liste des “shell” de connexion valides sur Linux Alpine
cat /etc/shells
Produit :
# valid login shells
/bin/sh
/bin/ash
/bin/bash
documentation et auto complétion
Installer la documentation de bash : apk add bash-doc
Installer l’auto complétion bash : apk add bash-completion
Vérifiez et appelez /etc/bash/bash_completion.sh
source /etc/bash/bash_completion.sh
cat /etc/bash/bash_completion.sh
Comment configurer bash comme shell login
Pour utiliser bash juste saisir : bash
Changer le root shell en bash
En mode su : nano /etc/passwd
Remplacer /bin/sh
par /bin/bash
pour les utilisateurs root et aluser
root:x:0:0:root:/root:/bin/bash
aluser:x:1000:1000:aluser:/home/aluser:/bin/bash
Personnaliser le bash
cat > ~/.bashrc << EOF
alias update='apk update && apk upgrade'
export HISTTIMEFORMAT="%d/%m/%y %T "
export PS1='\u@\h:\W \$ '
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
source /etc/bash/bash_completion.sh
export PS1="\[\e[31m\][\[\e[m\]\[\e[38;5;172m\]\u\[\e[m\]@\[\e[38;5;153m\]\h\[\e[m\] \[\e[38;5;214m\]\W\[\e[m\]\[\e[31m\]]\[\e[m\]\\$ "
EOF
Version bash : bash --version
GNU bash, version 5.2.26(1)-release (x86_64-alpine-linux-musl)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
sudo
Installer sudo (‘)en mode su)
apk update
apk add sudo
Ajouter un utilisateur avec les privlèges root
echo "aluser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/20-aluser
Docker (NON INSTALLE)
Installation
Install docker & docker-compose on Alpine Linux
Passer en root
su -
Ajout dépôt communauté (si non effectué lors de l’installation)
Editer la configuration des dépôts
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
#/media/cdrom/apks
http://mirrors.ircam.fr/pub/alpine/v3.20/main
http://mirrors.ircam.fr/pub/alpine/v3.20/community
Installation docker
Installer docker et docker-compose
apk update
apk add docker docker-compose
Activer autostart sur boot en utilisant
rc-update add docker default
puis vous pouvez lancer le service docker en utilisant la commande
/etc/init.d/docker start
# ou
service docker start
Site statique
Ruby
Installation de Ruby avec RVM sur Alpine Linux (Installing Ruby with RVM on Alpine Linux)
Passer en mode root : su -
Paquets de base
apk update
apk add curl gcc gnupg gpg dirmngr procps musl-dev linux-headers zlib zlib-dev openssl openssl-dev build-base
# libssl1.1
exit
En mode utilisateur
Téléchargez ensuite la dernière version stable de rvm depuis Github, décompressez-la, placez-la dans le répertoire utilisateur approprié (~/.rvm) et installez toutes les bibliothèques requises :
curl -sSL https://github.com/rvm/rvm/tarball/stable -o rvm-stable.tar.gz
echo 'export rvm_prefix="$HOME"' > ~/.rvmrc
echo 'export rvm_path="$HOME/.rvm"' >> ~/.rvmrc
mkdir rvm && cd rvm
tar --strip-components=1 -xzf ../rvm-stable.tar.gz
./install --auto-dotfiles --autolibs=0
Faire le ménage et créer un lien vers rvm
cd ../ && rm -rf rvm-stable stable.tar.gz rvm
source ~/.rvm/scripts/rvm
On va installer la version Ruby 3.1.4
rvm install ruby-3.1.4
Patienter plusieurs minutes…
Vérification : ruby -v
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux-musl]
Projet jekyll
On va dupliquer le dossier yannstatic existant sur PC1 en aluserstatic sur alpine-vm01
Installer Jekyll et Bundler
Vérifier les sources
localhost:~$ gem source
*** CURRENT SOURCES ***
# rien ci dessus ,on active une source
localhost:~$ gem source -a https://rubygems.org/
https://rubygems.org/ added to sources
# Vérification
localhost:~$ gem source
*** CURRENT SOURCES ***
https://rubygems.org/
installez Jekyll et Bundler
gem install jekyll bundler
Naviguez dans le répertoire de votre projet Jekyll et exécutez:
cd /home/aluser/aluserstatic
Le fichier Gemfile
source "https://rubygems.org"
# gem "github-pages", group: :jekyll_plugins
gem "jekyll-text-theme"
gem "sass-embedded", "1.76.0"
Supprimer Gemfile.lock : rm Gemfile.lock
Bundle lit le fichier Gemfile
bundle install
An error occurred while installing eventmachine (1.2.7), and Bundler cannot continue.
Il faut installer le paquet build-base
GCC, qui représente GNU Compiler Collection, est un système de compilation libre et open-source produit par le projet GNU.
Le moyen le plus rapide pour commencer avec GCC sur Alpine Linux est de lancer la commande suivante:
sudo apk add build-base
build-base est un méta-package qui installera les paquets gcc, musl-dev et binutils (entre autres).
Info sur jekyll après installation : bundle info jekyll
* jekyll (4.3.4)
Summary: A simple, blog aware, static site generator.
Homepage: https://jekyllrb.com
Source Code: https://github.com/jekyll/jekyll
Changelog: https://github.com/jekyll/jekyll/releases
Bug Tracker: https://github.com/jekyll/jekyll/issues
Path: /home/aluser/.rvm/gems/ruby-3.1.4/gems/jekyll-4.3.4
Reverse Dependencies:
jekyll-feed (0.17.0) depends on jekyll (>= 3.7, < 5.0)
jekyll-sitemap (1.4.0) depends on jekyll (>= 3.7, < 5.0)
jekyll-text-theme (2.2.6) depends on jekyll (>= 3.6, < 5.0)
jemoji (0.13.0) depends on jekyll (>= 3.0, < 5.0)
Création des liens
Création des liens sur les dossiers files , images , _posts et htmldoc
ln -s /home/aluser/statique/files /home/aluser/aluserstatic/files
ln -s /home/aluser/statique/images /home/aluser/aluserstatic/images
ln -s /home/aluser/statique/_posts /home/aluser/aluserstatic/_posts
ln -s /home/aluser/statique/htmldoc /home/aluser/aluserstatic/htmldoc
ln -s /home/aluser/statique/htmldoc/htmldoc.md /home/aluser/aluserstatic/htmldoc.md
La structure des liens : ls -l ~/aluserstatic/ |grep ^l
lrwxrwxrwx 1 aluser aluser 28 Sep 18 19:43 _posts -> /home/aluser/statique/_posts
lrwxrwxrwx 1 aluser aluser 27 Sep 18 19:43 files -> /home/aluser/statique/files
lrwxrwxrwx 1 aluser aluser 29 Sep 18 19:46 htmldoc -> /home/aluser/statique/htmldoc
lrwxrwxrwx 1 aluser aluser 40 Sep 18 19:44 htmldoc.md -> /home/aluser/statique/htmldoc/htmldoc.md
lrwxrwxrwx 1 aluser aluser 28 Sep 18 19:43 images -> /home/aluser/statique/images
Génération dossier “static”
Dans le dossier aluserstatic
cd $HOME/aluserstatic
bundle exec jekyll build
C’est ça ! Maintenant si vous exécutez bundle exec jekyll serve
vous trouverez votre projet Jekyll fonctionnant localement!
localhost:~/aluserstatic$ bundle exec jekyll serve --source "$HOME/aluserstatic"
Configuration file: /home/aluser/aluserstatic/_config.yml
Source: /home/aluser/aluserstatic
Destination: /home/aluser/aluserstatic/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 31.908 seconds.
Auto-regeneration: enabled for '/home/aluser/aluserstatic'
Server address: http://127.0.0.1:4000
Server running... press ctrl-c to stop.
Dans un terminal de PC1
ssh -L 9500:localhost:4000 aluser@192.168.0.222
Dans un navigateur de PC1 : localhost:9500
Service gener_static
Créer un script gener_static.sh
sudo nano /usr/local/bin/gener_static.sh
#!/bin/sh
echo $$ > /run/gener_static.pid # Store the PID of this process
cd $HOME/aluserstatic
bundle exec jekyll build --watch --incremental
Le rendre exécutable
sudo chmod +x /usr/local/bin/gener_static.sh
Augmenter taille disque virtuel
[yann@yann-pc1 ~]$ sudo virsh list
ID Nom État
------------------------------------------
1 vm-debian12 en cours d’exécution
6 alpine-vm01 en cours d’exécution
[yann@yann-pc1 ~]$ sudo virsh shutdown alpine-vm01
Le domaine 'alpine-vm01' est en cours de fermeture
[yann@yann-pc1 ~]$ sudo virsh domblklist alpine-vm01
Cible Source
---------------------------------------------------
vda /home/yann/virtuel/KVM/alpine-vm01.qcow2
[yann@yann-pc1 ~]$ sudo qemu-img resize /home/yann/virtuel/KVM/alpine-vm01.qcow2 +15G
Image resized.
[yann@yann-pc1 ~]$ sudo qemu-img info /home/yann/virtuel/KVM/alpine-vm01.qcow2
image: /home/yann/virtuel/KVM/alpine-vm01.qcow2
file format: qcow2
virtual size: 20 GiB (21474836480 bytes)
disk size: 3.11 GiB
cluster_size: 65536
Format specific information:
compat: 1.1
compression type: zlib
lazy refcounts: true
refcount bits: 16
corrupt: false
extended l2: false
Child node '/file':
filename: /home/yann/virtuel/KVM/alpine-vm01.qcow2
protocol type: file
file length: 5 GiB (5369757696 bytes)
disk size: 3.11 GiB
[yann@yann-pc1 ~]$ sudo virsh start alpine-vm01
Domaine 'alpine-vm01' démarré
Connexion ssh aluser@192.168.0.222
# Outils
sudo apk add --no-cache cfdisk e2fsprogs-extra
# cfdisk pour redimensionner la partition vda3
localhost:~$ sudo cfdisk
sélectionner la partition à étendre puis resize write quit
Syncing disks.
# resize
localhost:~$ sudo resize2fs /dev/vda3
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/vda3 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 3
The filesystem on /dev/vda3 is now 4838144 (4k) blocks long.
# vérification
localhost:~$ sudo df -H |grep vda3
/dev/vda3 18.1G 2.9G 14.4G 17% /