Oracle cloud: mengubah ubuntu 20.04 menjadi gentoo

Cloud Oracle menawarkan beberapa sumber daya yang sepenuhnya gratis. Secara khusus, Anda bisa mendapatkan 2 mesin virtual secara gratis. Saat membuat mesin, Anda memiliki pilihan centos, Ubuntu, atau oracle linux. Mengingat sumber daya mesin vitrual yang terbatas, saya bertanya-tanya apakah gentoo dapat digunakan pada mesin ini?



Dokumentasi gentoo menjelaskan bagaimana Anda dapat mengubah Linux menjadi gentoo dengan cepat. Sayangnya, instruksi tersebut terakhir diperbarui pada tahun 2014 dan jika Anda menerapkannya secara langsung, kemungkinan besar Anda akan mengalami masalah. Akan tetapi, di github Anda dapat menemukan sebuah skrip yang, menurut pembuatnya, dapat secara otomatis mengubah Linux apapun menjadi gentoo. Skrip belum diperbarui untuk waktu yang lama, tetapi setelah perubahan kecil itu berfungsi sebagaimana mestinya. Penulis skrip asli memutuskan untuk tidak menerapkan permintaan penarikan saya, tetapi memodifikasi skripnya berdasarkan saran saya. Versi skrip saya dapat ditemukan di sini .



Jadi mari kita lanjutkan dan ubah ubuntu 20.04 menjadi gentoo. Untuk melakukan ini, buat mesin virtual menggunakan gambar minimal ubuntu 20.04 dan masuk sebagai pengguna ubuntu. Setelah itu, alihkan ke pengguna root:



sudo -i
      
      





Beralih ke mode pengguna tunggal:



systemctl rescue
      
      





Dalam kondisi normal, jaringan terputus. Ini tidak terjadi di cloud oracle, tetapi proses yang diselesaikan systemd berakhir dan, akibatnya, dns berhenti bekerja. Mari kita perbaiki:



rm /etc/resolv.conf && echo 'nameserver 8.8.8.8' >/etc/resolv.conf
      
      





Sekarang Anda dapat menjalankan skrip migrasi dan minum teh, ini akan memakan waktu cukup lama:



wget -qO- https://raw.githubusercontent.com/kt97679/to-gentoo/master/to-gentoo|bash
      
      





Saat skrip selesai, Anda akan diminta untuk melakukan boot ulang. Sebelum melakukan ini, Anda perlu memastikan bahwa Anda tidak kehilangan akses root setelah reboot. Untuk melakukan ini, Anda perlu mengizinkan akses root melalui ssh:



sed -i -e '/^PermitRootLogin.*/d' /etc/ssh/sshd_config && echo -e "\nPermitRootLogin without-password" >>/etc/ssh/sshd_config
      
      





Dan perbaiki file /root/.ssh/authorized_keys:



sed -i -e 's/.*\(ssh-rsa.*\)/\1/' /root/.ssh/authorized_keys
      
      





Sekarang Anda bisa reboot, tetapi perintah reboot tidak membantu, jadi mari kita bawa beberapa artileri berat:



sync && echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger
      
      





Mesin akan melakukan reboot dan setelah beberapa menit Anda akan dapat masuk melalui ssh sebagai root. Anda berada di lingkungan gentoo, tetapi Anda masih menggunakan kernel lama dan initrd. Mari perbaiki ini.



Mari aktifkan swap, tanpanya Anda tidak akan memiliki cukup memori untuk mengkompilasi kernel baru.



fallocate -l2G /var/tmp/swap && chmod 0600 /var/tmp/swap && mkswap /var/tmp/swap && swapon /var/tmp/swap
      
      





Saya tidak berencana menggunakan systemd pada mesin ini, jadi saya menutupinya dan udev:



echo -e 'sys-apps/systemd\nsys-fs/udev'> /etc/portage/package.mask/systemd
      
      





Setelah itu, Anda dapat menginstal paket yang diperlukan untuk mengompilasi kernel:



emerge gentoo-sources app-arch/lz4
      
      





Sekarang Anda bisa masuk ke direktori dengan sumber kernel,



cd /usr/src/linux
      
      





buat konfigurasi kernel baru menggunakan konfigurasi kernel yang dimuat,



yes ""|make oldconfig
      
      





dan biarkan dalam konfigurasi hanya modul-modul yang saat ini digunakan.



yes ""|make localmodconfig
      
      





Saya berencana untuk tidak menggunakan initrd pada mesin ini, jadi semua modul akan dikompilasi ke dalam kernel:



yes ""|make localyesconfig
      
      





Kami mulai mengkompilasi dan menginstal kernel:



make && make INSTALL_MOD_STRIP=1 modules_install && make install
      
      





Mesin kami sangat lemah, sehingga proses ini akan memakan waktu lama. Saat kompilasi selesai, Anda perlu memperbarui konfigurasi bootloader. Saya menambahkan opsi kernel yang digunakan di ubuntu asli.



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
      
      





Masuk akal untuk mengizinkan login di konsol serial jika ada masalah jaringan:



sed -i -e 's/^#\(.*ttyS0.*\)/\1/' /etc/inittab
      
      





Sedikit tertinggal. Setelah reboot, antarmuka jaringan tidak akan bernama ens3, tetapi eth0. Anda perlu menghapus skrip inisialisasi dari antarmuka lama dan menambahkan inisialisasi yang baru:



cd /etc/init.d && rm net.ens3 && ln -s net.lo net.eth0
      
      





Jika Anda perlu masuk melalui konsol serial, Anda perlu menyetel kata sandi untuk pengguna root:



passwd
      
      





Semuanya sudah siap, Anda bisa reboot.



Jika setelah reboot Anda tidak dapat masuk ke mesin melalui ssh, buat koneksi konsol dan gunakan untuk debugging.



Anda sekarang memiliki instalasi gentoo dasar yang dapat dimodifikasi sesuai kebutuhan Anda. Ada artefak yang tersisa di sistem dari ubuntu asli. Mereka tidak lagi dibutuhkan dan dapat dihapus. Skrip dengan perintah migrasi dapat ditemukan di sini .



All Articles