igloo

Installation d'une Gentoo en VM avec QEMU/KVM

mise à jour: 05/2024

Pour démarrer une machine, n'importe quel ISO de Live CD Linux peut faire l'affaire mais vous êtes sûr d'avoir tous les outils nécessaires sur le 'Minimal Installation CD' ou le 'LiveGUI USB image' disponibles sur la page de téléchargement Gentoo.

L'un des principes de base de la Gentoo, c'est de vous laisser le choix mais j'ai fait ces choix pour vous ;) . Pour avoir plus de détails, n'hésitez pas à vous reporter à l'excellente documentation en ligne: Gentoo AMD68 Handbook. Il faudra bien sûr adapter la configuration du noyau à votre hyperviseur si vous n'utilisez pas Qemu/KVM ('lspci -k' vous listera les périfériques et les pilotes utilisés) ou utiliser genkernel (voir la doc sus-mentionnée).

S'il n'y a pas de serveur DHCP sur votre réseau (à adapter à votre configuration réseau):

# ip -c a
# ip a add 192.168.0.6/24 dev enp1s0
# ip route add default via 192.168.0.1
# ip link set enp1s0
# emacs /etc/resolv.conf

nameserver 192.168.0.1
nameserver 208.67.222.222

# ping -c 3 gentoo.org

Si vous avez besoin d'effectuer l'installation via ssh (par exemple, pour profiter de votre clavier bépo ou pour faire facilement des copier/coller) :

# passwd
# rc-service sshd start
# ip -c a

Pas besoin de l'UEFI
Table de partition utilisée :

/boot512Moext2
swap4096Mosw
/reste du disqueext4

Préparation du disque :

# parted -a optimal /dev/vda
(parted)mklabel msdos
(parted)unit mib
(parted)mkpart primary 1 513
(parted)set 1 boot on
(parted)mkpart primary 513 4609
(parted)mkpart primary 4609 -1
(parted)print
(parted)quit

# mkfs.ext2 -T small /dev/vda1
# mkfs.ext4 /dev/vda3
# mkswap /dev/vda2

-Si vous devez reprendre votre installation, repartez d'ici

# swapon /dev/vda2
# mount /dev/vda3 /mnt/gentoo

On peut noter les ID des partitions pour la création du fichier fstab (si on a plusieurs disques, en utilisant les UUID, sinon, on peut utiliser /dev/vda*), on met le système à l'heure et on se déplace dans le dossier où va se dérouler l'installation :

# blkid
# chronyd -q
# cd /mnt/gentoo

Choissez l'archive sur la page suivante (j'utilise la version 'Hardened stage 3' pour ce tuto) et copiez l'adresse du lien :

https://www.gentoo.org/downloads/#other-arches

Téléchargez l'archive et décompressez-la :

# wget <collez l'adresse du lien>
# tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner

On édite le fichier make.conf, la commande 'nproc' vous indique le nombre de processeurs disponibles pour la variable MAKEOPTS et tenant compte de la quantité de RAM affectée à votre VM (comptez 2Go de RAM par thread)

# nproc
# emacs /mnt/gentoo/etc/portage/make.conf

COMMON_FLAGS="-march=native -O2 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
MAKEOPTS="-j4 -l4"

On sélectionne des miroirs dans la liste (je prends tous les français)

# mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

On monte quelques systèmes de fichier nécessaire à Gentoo

# cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
# mount --types proc /proc /mnt/gentoo/proc
# mount --rbind /sys /mnt/gentoo/sys
# mount --make-rslave /mnt/gentoo/sys
# mount --rbind /dev /mnt/gentoo/dev
# mount --make-rslave /mnt/gentoo/dev
# mount --bind /run /mnt/gentoo/run
# mount --make-slave /mnt/gentoo/run

On entre dans la nouvelle Gentoo

# chroot /mnt/gentoo /bin/bash
# source /etc/profile
# export PS1="(chroot) ${PS1}"
# mount /dev/vda1 /boot

On la met à jour, on lit les nouvelles et on choisit son profil (le profil 'Hardenned' est sélectionné par défaut).

# emerge-webrsync
# eselect news read
# emerge --sync #(Optionel, 'emerge --sync' ne fonctionnera pas derrière un proxy)
# eselect profile list
# emerge --ask --verbose --update --deep --newuse @world

La variable USE, dans le fichier make.conf, permet de sculpter votre Gentoo selon vos besoin. Liste des valeurs disponibles :
https://www.gentoo.org/support/use-flags/#global

Si vous utilisez emacs, il faut l'installer dans votre nouvel environnement

# emerge -a emacs
# emacs /etc/portage/make.conf

Je n'utilise ni l'interface graphique, ni le son, ni la wifi ni le serveur d'impression

USE="-X -cups -sound -wifi"

On peut ajouter des informations sur notre processeur

# emerge --ask --oneshot app-portage/cpuid2cpuflags
# cpuid2cpuflags
# echo "*/* $(cpuid2cpuflags)" > /etc/portage/package.use/00cpu-flags

Un peu de localisation

# echo "Europe/Paris" > /etc/timezone
# emerge --config sys-libs/timezone-data
# emacs /etc/locale.gen

fr_FR.UTF-8 UTF-8
fr_FR ISO-8859-1
fr_FR@euro ISO-8859-15

# locale-gen
# eselect locale list

Sélectionnez l'UTF-8

# eselect locale set 7
# env-update && source /etc/profile && export PS1="(chroot) $PS1"

Il est temps d'installer les sources du noyau Linux et de créer le lien symbolique pointant vers /usr/src/linux.

# emerge --ask sys-kernel/gentoo-sources
# emerge --ask sys-kernel/installkernel
# eselect kernel list
# eselect kernel set 1

Installez également pciutils pour avoir des informations sur votre configuration matériel grâce à la commande 'lspci -k', ces informations seront nécessaire pour la configuration du noyau.

Dans le menu de configuration du noyau, vous pouvez tapez '/' puis le nom d'un module pour vérifier qu'il est bien sélectionné

# emerge --ask sys-apps/pciutils

Configurons le noyau:

# cd /usr/src/linux
# make menuconfig

General setup --->
(tux) Default hostname
Preemption Model (No Forced Preemption (Server)) --->

Processor type and features --->
[*] Symmetric multi-processing support
[*] Linux guest support --->
[*] Enable paravirtualization code
[ ] paravirt-ops debugging (NEW)
[ ] Paravirtualization layer for spinlocks (NEW)
[ ] Xen guest support (NEW)
[*] KVM Guest support (including kvmclock) (NEW)
-*- Disable host haltpoll when loading haltpoll driver
Processor family (Opteron/Athlon64/Hammer/K8) --->
(X) Opteron/Athlon64/Hammer/K8
( ) Intel P4 / older Netburst based Xeon
( ) Core 2/newer Xeon
( ) Intel Atom
( ) Generic-x86-64
[ ] EFI runtime service support
[X] Machine Check / overheating reporting
[ ] Intel MCE Features
[X] AMD MCE Features

Power management and ACPI options --->
[ ] Suspend to RAM and standby
[ ] Hibernation (aka 'suspend to disk')

[ ] Virtualization

-*- Enable the block layer --->
Partition Types --->
[ ] Advanced partition selection

[*] Networking support --->
-*- Wireless --->
< > cfg80211 - wireless configuration API
< > RF switch subsystem support ---
< > Plan 9 Ressource Sharing Support (9P2000) ---
Networking options --->
[*] Network packet filtering framework (Netfilter) --->

Device Drivers --->
Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
[ ] Automount devtmpfs at /dev, after the kernel mounted the rootfs
< > PCCard (PCMCIA/CardBus) support ----
Firmware Drivers --->
<* > BIOS Enhanced Disk Drive calls determine boot disk
<* > QEMU fw_cfg device support in sysfs
[*] Block devices --->
<*> Virtio block driver
[ ] Multiple devices driver support (RAID and LVM) ----
[ ] Macintosh device drivers ----
[*] Network device support --->
[*] Network core driver support
<*> Virtio network driver
[ ] Ethernet driver support ---
Multifunction device drivers --->
<M> Intel ICH LPC
Graphics support --->
[ ] Auxiliary Display support ----
< > /dev/agpgart (AGP Support) ----
[ ] Laptop Hybrid Graphics - GPU switching support
< > Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) ----
Frame buffer Devices --->
<M> Support for frame buffer device drivers --->
<M> Simple framebuffer support
[ ] Enable firmware EDID
[*] Provide legacy /dev/fb* device
[ ] Framebuffer foreign endianness support ----
[ ] Enable Video Mode Handling Helpers
[ ] Enable Tile Blitting Support
< > Sound card support ----
[*] Virtio drivers (NEW) --->
--- Virtio drivers
<*> PCI driver for virtio devices
[*] Support for legacy virtio draft 0.9.X and older devices (NEW)
<*> Virtio balloon driver (NEW)
<*> Virtio input driver (NEW)
< > Platform bus driver for memory mapped virtio devices (NEW)

File systems --->
<*> Second extended fs support
[*] Ext2 extended attributes
<*> The Extended 4 (ext4) filesystem
[ ] Miscellaneous filesystems ----
DOS/FAT/NT Filesystems --->
<*> MSDOS fs support
<*> VFAT (Windows-95) fs support
-*- Native Language support --->
<*> Codepage 850 (Europe)
[*] NLS ISO 8859-15 (Latin 9; Western European Languages with Euro)
Pseudo Filesystems --->
[*] /proc file system support
[*] Tmpfs virtual memory file system support (former shm fs)

Compilation et installation du noyau :

# make && make modules_install
# make install

Configuration du système (nom d'hôte, config réseau, mot de passe root, disposition du clavier) :

# emacs /etc/fstab

/dev/vda1/bootext2defaults0 2
/dev/vda2noneswapsw0 0
/dev/vda3/ext4defaults,noatime0 1

# echo tux > /etc/hostname
# emacs /etc/conf.d/net

config_enp1s0="192.168.0.6/24"
routes_enp1s0="default via 192.168.0.1"

ou
config_enp1s0="dhcp"

# cd /etc/init.d
# ln -s net.lo net.enp1s0
# rc-update add net.enp1s0 default
# passwd
# emacs /etc/conf.d/keymaps

keymap="fr-bepo"

Installation de quelques outils système :

# emerge --ask app-admin/sysklogd
# rc-update add sysklogd default
# emerge --ask sys-process/cronie
# rc-update add cronie default
# emerge --ask sys-apps/mlocate
# emerge --ask net-misc/chrony
# rc-update add chronyd default

Installation de GRUB :

# emerge --ask --verbose sys-boot/grub
# grub-install /dev/vda
# grub-mkconfig -o /boot/grub/grub.cfg

L'installation est terminée mais on va tout de suite créer un utilisateur et on lance le serveur ssh pour pouvoir se connecter à distance dès le premier redémarrage.

# useradd -m -G users,wheel -s /bin/bash rod
# passwd rod
# rc-update add sshd default

On démonte les partitions et on reboot :

# exit
# cd
# umount -l /mnt/gentoo/dev{/shm,/pts,}
# umount -R /mnt/gentoo
# reboot

On peut faire un peu de ménage et supprimer l'archive.

# rm /stage3-*.tar.*

Faites un snapshot!

Félicitations!