Oracle Cloud: transformer Ubuntu 20.04 en Gentoo

Oracle Cloud offre certaines ressources entièrement gratuites. En particulier, vous pouvez obtenir 2 machines virtuelles gratuitement. Lors de la création d'une machine, vous avez le choix entre centos, Ubuntu ou oracle linux. Compte tenu des ressources limitées de la machine vitrual, je me suis demandé si gentoo pouvait être utilisé sur cette machine?



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 .



All Articles