In der Gentoo-Dokumentation wird beschrieben, wie Sie jedes Linux im laufenden Betrieb in Gentoo verwandeln können. Leider wurde die Anweisung zuletzt im Jahr 2014 aktualisiert. Wenn Sie sie direkt anwenden, treten höchstwahrscheinlich Probleme auf. Auf dem Github finden Sie jedoch ein Skript , das laut Autor jedes Linux automatisch in Gentoo verwandeln kann. Das Skript wurde lange nicht aktualisiert, aber nach geringfügigen Änderungen funktionierte es wie es sollte. Der Autor des ursprünglichen Skripts hat beschlossen, meine Pull-Anfrage nicht anzuwenden, sondern sein Skript basierend auf meinen Vorschlägen geändert. Meine Version des Skripts finden Sie hier .
Also lasst uns Ubuntu 20.04 in Gentoo verwandeln. Erstellen Sie dazu eine virtuelle Maschine mit dem minimalen Image von Ubuntu 20.04 und melden Sie sich als Ubuntu-Benutzer an. Wechseln Sie danach zum Root-Benutzer:
sudo -i
Wechseln Sie in den Einzelbenutzermodus:
systemctl rescue
Unter normalen Bedingungen fällt das Netzwerk ab. Dies geschieht nicht in der Oracle Cloud, aber der vom System aufgelöste Prozess endet und infolgedessen funktioniert DNS nicht mehr. Lassen Sie es uns beheben:
rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
Jetzt können Sie das Migrationsskript ausführen und Tee trinken. Es wird eine Weile dauern:
wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
Wenn das Skript fertig ist, werden Sie zum Neustart aufgefordert. Bevor Sie dies tun, müssen Sie sicherstellen, dass Sie nach einem Neustart nicht den Root-Zugriff verlieren. Dazu müssen Sie den Root-Zugriff über ssh zulassen:
sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
Und korrigieren Sie die Datei /root/.ssh/authorized_keys:
sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
Jetzt können Sie neu starten, aber der Befehl zum Neustart hilft nicht weiter. Lassen Sie uns also schwere Artillerie einsetzen:
sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
Der Computer wird neu gestartet und nach einigen Minuten können Sie sich über ssh als root bei ihm anmelden. Sie befinden sich in einer Gentoo-Umgebung, verwenden jedoch immer noch den alten Kernel und initrd. Lassen Sie uns das beheben.
Lassen Sie uns Swap aktivieren, ohne es haben Sie nicht genug Speicher, um einen neuen Kernel zu kompilieren.
fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
Ich habe nicht vor, systemd auf diesem Computer zu verwenden, also maskiere ich es und udev:
echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
Danach können Sie die zum Kompilieren des Kernels erforderlichen Pakete installieren:
emerge gentoo-sources app-arch/lz4
Jetzt können Sie in das Verzeichnis mit den Kernelquellen gehen.
cd /usr/src/linux
Generieren Sie eine neue Kernel-Konfiguration mit der geladenen Kernel-Konfiguration.
yes ""|make oldconfig
und lassen Sie in der Konfiguration nur die Module, die derzeit verwendet werden.
yes ""|make localmodconfig
Ich habe vor, initrd auf diesem Computer nicht zu verwenden, daher werden alle Module in den Kernel kompiliert:
yes ""|make localyesconfig
Wir beginnen mit dem Kompilieren und Installieren des Kernels:
make && make INSTALL_MOD_STRIP=1 modules_install && make install
Unsere Maschine ist sehr schwach, daher wird dieser Vorgang lange dauern. Wenn die Kompilierung beendet ist, müssen Sie die Bootloader-Konfiguration aktualisieren. Ich habe die Kernel-Optionen hinzugefügt, die im ursprünglichen Ubuntu verwendet wurden.
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
Es ist sinnvoll, die Anmeldung an der seriellen Konsole zuzulassen, wenn Netzwerkprobleme auftreten:
sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
Ein wenig verlassen. Nach dem Neustart wird die Netzwerkschnittstelle nicht ens3, sondern eth0 genannt. Es ist erforderlich, das Initialisierungsskript der alten Schnittstelle zu entfernen und die Initialisierung der neuen hinzuzufügen:
cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
Wenn Sie sich über die serielle Konsole anmelden müssen, müssen Sie ein Kennwort für den Root-Benutzer festlegen:
passwd
Alles ist fertig, Sie können neu starten.
Wenn Sie sich nach dem Neustart nicht über ssh am Computer anmelden können, erstellen Sie eine Konsolenverbindung und verwenden Sie diese zum Debuggen.
Sie haben jetzt eine grundlegende Gentoo-Installation, die an Ihre Bedürfnisse angepasst werden kann. Das ursprüngliche Ubuntu enthält noch Artefakte im System. Sie werden nicht mehr benötigt und können entfernt werden. Die Skripte mit Migrationsbefehlen finden Sie hier .