Oracleクラウド:ubuntu20.04をgentooに変える

Oracleクラウドは完全に無料でいくつかのリソースを提供します 特に、2台の仮想マシンを無料で入手できます。マシンを作成するときは、centos、Ubuntu、またはoraclelinuxから選択できます。仮想マシンのリソースが限られていることを考えると、このマシンでgentooを使用できるかどうか疑問に思いました。



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からシステムにアーティファクトが残っています。それらは不要になり、削除できます。移行コマンドを含むスクリプトは、 ここにあります



All Articles