La documentation gentoo décrit comment transformer n'importe quel Linux en gentoo à la volée. Malheureusement, l'instruction a été mise à jour pour la dernière fois en 2014 et si vous l'appliquez directement, vous aurez très probablement des problèmes. Cependant, sur le github, vous pouvez trouver un script qui, selon l'auteur, peut automatiquement transformer n'importe quel Linux en gentoo. Le script n'a pas été mis à jour depuis longtemps, mais après des modifications mineures, il a fonctionné comme il se doit. L'auteur du script original a décidé de ne pas appliquer ma pull request, mais a modifié son script en fonction de mes suggestions. Ma version du script peut être trouvée ici .
Alors allons-y et transformez ubuntu 20.04 en gentoo. Pour ce faire, créez une machine virtuelle à l'aide de l'image minimale ubuntu 20.04 et connectez-vous en tant qu'utilisateur ubuntu. Après cela, passez à l'utilisateur root:
sudo -i
Passer en mode mono-utilisateur:
systemctl rescue
Dans des conditions normales, le réseau tombe. Cela ne se produit pas dans Oracle Cloud, mais le processus résolu par systemd se termine et, par conséquent, DNS cesse de fonctionner. Fixons-le:
rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
Vous pouvez maintenant exécuter le script de migration et aller prendre le thé, cela prendra un certain temps:
wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
Lorsque le script est terminé, il vous invite à redémarrer. Avant de faire cela, vous devez vous assurer que vous ne perdez pas l'accès root après le redémarrage. Pour ce faire, vous devez autoriser l'accès root via ssh:
sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
Et corrigez le fichier /root/.ssh/authorized_keys:
sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
Vous pouvez maintenant redémarrer, mais la commande reboot n'aidera pas, alors apportons de l'artillerie lourde:
sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
La machine redémarre et après quelques minutes, vous pourrez vous y connecter via ssh en tant que root. Vous êtes dans un environnement gentoo, mais vous utilisez toujours l'ancien noyau et initrd. Corrigeons ça.
Activons le swap, sans cela, vous n'aurez pas assez de mémoire pour compiler un nouveau noyau.
fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
Je n'ai pas l'intention d'utiliser systemd sur cette machine, donc je le masque et udev:
echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
Après cela, vous pouvez installer les packages nécessaires à la compilation du noyau:
emerge gentoo-sources app-arch/lz4
Maintenant, vous pouvez aller dans le répertoire avec les sources du noyau,
cd /usr/src/linux
générer une nouvelle configuration de noyau en utilisant la configuration de noyau chargée,
yes ""|make oldconfig
et ne laissez dans la configuration que les modules actuellement utilisés.
yes ""|make localmodconfig
Je prévois de ne pas utiliser initrd sur cette machine, donc tous les modules seront compilés dans le noyau:
yes ""|make localyesconfig
Nous commençons à compiler et installer le noyau:
make && make INSTALL_MOD_STRIP=1 modules_install && make install
Notre machine est très faible, donc ce processus prendra beaucoup de temps. Lorsque la compilation est terminée, vous devez mettre à jour la configuration du chargeur de démarrage. J'ai ajouté les options du noyau qui étaient utilisées dans l'ubuntu d'origine.
cat >/boot/grub/grub.cfg <<EOF
set timeout=1
menuentry 'gentoo' {
linux $(ls -t /boot/vmlinuz-*|head -n1) root=/dev/sda1 console=tty1 console=ttyS0 nvme.shutdown_timeout=10 libiscsi.debug_libiscsi_eh=1
}
EOF
Il est judicieux d'autoriser la connexion sur la console série en cas de problèmes de réseau:
sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
Laissé un peu. Après le redémarrage, l'interface réseau ne sera pas nommée ens3, mais eth0. Il est nécessaire de supprimer le script d'initialisation de l'ancienne interface et d'ajouter l'initialisation de la nouvelle:
cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
Si vous devez vous connecter via la console série, vous devez définir un mot de passe pour l'utilisateur root:
passwd
Tout est prêt, vous pouvez redémarrer.
Si, après le redémarrage, vous ne parvenez pas à vous connecter à la machine via ssh, créez une connexion console et utilisez-la pour le débogage.
Vous avez maintenant une installation de base de gentoo qui peut être modifiée pour répondre à vos besoins. Il reste des artefacts dans le système de l'ubuntu d'origine. Ils ne sont plus nécessaires et peuvent être supprimés. Les scripts avec les commandes de migration peuvent être trouvés ici .