La documentación de gentoo describe cómo puede convertir cualquier Linux en gentoo sobre la marcha. Desafortunadamente, la instrucción se actualizó por última vez en 2014 y si la aplica directamente, lo más probable es que tenga problemas. Sin embargo, en github puedes encontrar un script que, según el autor, puede convertir automáticamente cualquier Linux en gentoo. La secuencia de comandos no se ha actualizado durante mucho tiempo, pero después de pequeños cambios funcionó como debería. El autor del guión original decidió no aplicar mi solicitud de extracción, pero modificó su guión según mis sugerencias. Mi versión del script se puede encontrar aquí .
Así que sigamos adelante y convierta ubuntu 20.04 en gentoo. Para hacer esto, cree una máquina virtual usando la imagen mínima de ubuntu 20.04 e inicie sesión como usuario de ubuntu. Después de eso, cambie al usuario root:
sudo -i
Cambiar al modo de usuario único:
systemctl rescue
En condiciones normales, la red se cae. Esto no sucede en Oracle Cloud, pero el proceso resuelto por systemd finaliza y, como resultado, dns deja de funcionar. Arreglemoslo:
rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
Ahora puede ejecutar el script de migración e ir a tomar el té, le llevará un tiempo:
wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
Cuando finalice el script, le pedirá que reinicie. Antes de hacer esto, debe asegurarse de no perder el acceso de root después de reiniciar. Para hacer esto, debe permitir el acceso de root a través de ssh:
sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
Y arregle el archivo /root/.ssh/authorized_keys:
sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
Ahora puede reiniciar, pero el comando de reinicio no ayudará, así que traigamos algo de artillería pesada:
sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
La máquina se reinicia y después de un par de minutos podrá iniciar sesión a través de ssh como root. Estás en un entorno gentoo, pero todavía estás usando el antiguo kernel y initrd. Arreglemos esto.
Habilitemos el intercambio, sin él no tendrá suficiente memoria para compilar un nuevo kernel.
fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
No planeo usar systemd en esta máquina, así que lo enmascare y udev:
echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
Después de eso, puede instalar los paquetes necesarios para compilar el kernel:
emerge gentoo-sources app-arch/lz4
Ahora puede ir al directorio con las fuentes del kernel,
cd /usr/src/linux
generar una nueva configuración de kernel usando la configuración de kernel cargada,
yes ""|make oldconfig
y deje en la configuración solo los módulos que se utilizan actualmente.
yes ""|make localmodconfig
Planeo no usar initrd en esta máquina, por lo que todos los módulos se compilarán en el kernel:
yes ""|make localyesconfig
Comenzamos a compilar e instalar el kernel:
make && make INSTALL_MOD_STRIP=1 modules_install && make install
Nuestra máquina es muy débil, por lo que este proceso llevará mucho tiempo. Cuando finaliza la compilación, debe actualizar la configuración del cargador de arranque. Agregué las opciones del kernel que se usaron en el ubuntu original.
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
Tiene sentido permitir el inicio de sesión en la consola serie si hay problemas de red:
sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
Dejó un poco. Después de reiniciar, la interfaz de red no se llamará ens3, sino eth0. Es necesario eliminar el script de inicialización de la interfaz anterior y agregar la inicialización de la nueva:
cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
Si necesita iniciar sesión a través de la consola serie, debe establecer una contraseña para el usuario root:
passwd
Todo está listo, puedes reiniciar.
Si después de reiniciar no puede iniciar sesión en la máquina a través de ssh, cree una conexión de consola y utilícela para depurar.
Ahora tiene una instalación básica de gentoo que se puede modificar para adaptarla a sus necesidades. Quedan artefactos en el sistema del ubuntu original. Ya no son necesarios y se pueden quitar. Los scripts con comandos de migración se pueden encontrar aquí .