gentooのドキュメントで は、Linuxをその場でgentooに変える方法について説明しています。残念ながら、この手順は2014年に最後に更新されたため、直接適用すると問題が発生する可能性があります。ただし、githubには、作成者によると、任意のLinuxを自動的にgentooに変換できるスクリプトがあります 。スクリプトは長い間更新されていませんが、小さな変更を加えた後、正常に機能しました。元のスクリプトの作成者は、私のプルリクエストを適用しないことを決定しましたが、私の提案に基づいてスクリプトを変更しました。私のバージョンのスクリプトは ここにあります。
それでは、ubuntu20.04をgentooに変換してみましょう。これを行うには、ubuntu 20.04最小イメージを使用して仮想マシンを作成し、ubuntuユーザーとしてそれにログインします。その後、rootユーザーに切り替えます。
sudo -i
シングルユーザーモードに切り替えます。
systemctl rescue
通常の状態では、ネットワークは切断されます。これはオラクルクラウドでは発生しませんが、systemdで解決されたプロセスが終了し、その結果、dnsが機能しなくなります。それを修正しましょう:
rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
これで、移行スクリプトを実行してお茶を飲むことができます。しばらく時間がかかります。
wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
スクリプトが終了すると、再起動するように求められます。これを行う前に、再起動後にルートアクセスが失われないことを確認する必要があります。これを行うには、sshを介したルートアクセスを許可する必要があります。
sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
そして、ファイル/root/.ssh/authorized_keysを修正します。
sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
これで再起動できますが、rebootコマンドは役に立たないので、重い砲兵を持ち込みましょう。
sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
マシンが再起動し、数分後、rootとしてsshを介してマシンにログインできるようになります。あなたはgentoo環境にいますが、まだ古いカーネルとinitrdを使用しています。これを修正しましょう。
スワップを有効にしましょう。スワップがないと、新しいカーネルをコンパイルするのに十分なメモリがありません。
fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
このマシンでsystemdを使用する予定はないので、マスクしてudevを実行します。
echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
その後、カーネルのコンパイルに必要なパッケージをインストールできます。
emerge gentoo-sources app-arch/lz4
これで、カーネルソースのあるディレクトリに移動できます。
cd /usr/src/linux
ロードされたカーネル構成を使用して新しいカーネル構成を生成し、
yes ""|make oldconfig
現在使用されているモジュールのみを構成に残します。
yes ""|make localmodconfig
このマシンではinitrdを使用しない予定なので、すべてのモジュールがカーネルにコンパイルされます。
yes ""|make localyesconfig
カーネルのコンパイルとインストールを開始します。
make && make INSTALL_MOD_STRIP=1 modules_install && make install
私たちのマシンは非常に弱いので、このプロセスには長い時間がかかります。コンパイルが終了したら、ブートローダー構成を更新する必要があります。元のubuntuで使用されていたカーネルオプションを追加しました。
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
ネットワークに問題がある場合は、シリアルコンソールでのログインを許可するのが理にかなっています。
sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
少し残しました。再起動後、ネットワークインターフェイスの名前はens3ではなく、eth0になります。古いインターフェースの初期化スクリプトを削除し、新しいインターフェースの初期化を追加する必要があります。
cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
シリアルコンソールからログインする必要がある場合は、rootユーザーのパスワードを設定する必要があります。
passwd
すべての準備ができたら、再起動できます。
再起動後にssh経由でマシンにログインできない場合は、コンソール接続を作成し、それをデバッグに使用します。
これで、ニーズに合わせて変更できる基本的なgentooインストールができました。元のubuntuからシステムにアーティファクトが残っています。それらは不要になり、削除できます。移行コマンドを含むスクリプトは、 ここにあります。