Oracle Cloud: Ubuntu 20.04 in Gentoo verwandeln

Die Oracle Cloud bietet einige Ressourcen völlig kostenlos an. Insbesondere können Sie 2 virtuelle Maschinen kostenlos erhalten. Beim Erstellen einer Maschine haben Sie die Wahl zwischen Centos, Ubuntu oder Oracle Linux. Angesichts der begrenzten Ressourcen der Vitrual-Maschine fragte ich mich, ob Gentoo auf dieser Maschine verwendet werden könnte.



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 .



All Articles