Booting Linux dari Google Drive
(ersei.net)- Ini adalah eksperimen untuk mem-boot Arch Linux dengan Google Drive sebagai filesystem root, alih-alih disk lokal atau NFS
- Pada tahap initramfs, penulis me-mount filesystem FUSE dan membuat image EFI kustom dengan Dracut yang menyertakan jaringan serta binary yang diperlukan
- Setelah terlebih dahulu memvalidasi konsep dengan S3 dan
s3fs, kegagalanswitch_rootdanpivot_rootdiakali dengan menjalankanchrootsebagai PID 1 - Dalam proses penerapan ke Google Drive, digunakan
google-drive-ocamlfuse, tetapi karena keterbatasan symbolic link, hardlink, permission, atribut, dan kecepatan, diperlukan koreksi manual serta penyesuaian timeout - Pada akhirnya, laptop tanpa media penyimpanan pun berhasil boot menggunakan file EFI terpadu di USB dan driver jaringan kabel; meski kurang praktis, eksperimen ini menunjukkan kemungkinan variasi seperti root berbasis SSHFS atau Git
Menggunakan Google Drive sebagai filesystem root
- Setelah melihat contoh boot Linux dari NFS, penulis mencoba target yang lebih sulit: boot root dari Google Drive
- Karena menginginkan struktur yang mandiri tanpa mesin helper terpisah, penulis memilih FUSE, yang bekerja seperti driver filesystem di ruang pengguna
- Syarat utamanya adalah memasukkan program FUSE dan konfigurasi jaringan ke dalam initramfs, me-mount filesystem root jarak jauh, lalu melanjutkan ke proses boot normal
Titik intervensi dalam proses boot Linux
- Alur boot Linux secara garis besar terbagi ke tahap berikut
- Firmware BIOS/UEFI memulai bootloader
- Bootloader memuat kernel
- Kernel mengekstrak initramfs, filesystem sementara di RAM, lalu menggunakan alat untuk me-mount filesystem sesungguhnya
- Kernel beralih ke filesystem sesungguhnya dan menjalankan sistem init dari filesystem baru tersebut
- Jika filesystem FUSE di-mount pada tahap ketiga, proses boot dapat dilanjutkan sambil memakai storage jarak jauh seolah-olah sebagai root
Proof of concept S3 yang dibuat dengan Dracut
- Untuk membuat initramfs kustom, digunakan Dracut
- Distro dasar yang dipilih adalah Arch Linux, karena relatif ringan dan familier
- Modul Dracut menyertakan binary terkait FUSE seperti
fusermount,fuseiso, danmkisofs - Image EFI dibuat dengan
dracut.shdan dijalankan di QEMU; setelah peringatan bahwa argumenroot=tidak ada, sistem masuk ke shell debug - Di shell debug, penulis menjalankan sendiri pekerjaan yang diperlukan untuk boot
- Memuat driver dengan
modprobe fusedanmodprobe e1000 - Mengonfigurasi jaringan dengan
dhclient eth0dan pengaturan routing - Me-mount bucket S3 lokal ke
/sysrootdengans3fs
- Memuat driver dengan
Kegagalan switch_root dan workaround chroot
- Root Arch Linux terlihat di
/sysroot, tetapiswitch_root /sysroot /sbin/initgagal denganInput/output error pivot_rootjuga tidak dapat digunakan pada rootfs initramfs, sehingga memunculkanInvalid argument- Menurut jawaban Stack Exchange yang dirujuk, pada rootfs initramfs,
pivot_rootmaupun unmount tidak memungkinkan; karena itu root baru harus di-mount menimpa root lama, lalu init dijalankan setelahchroot - Jika hanya menjalankan
chroot /sysroot /sbin/initdari shell, systemd tidak menjadi PID 1 sehingga tidak dapat mulai dengan normal - Penulis mengubah
init.shmilik Dracut agar memasukkan konfigurasi jaringan, mounts3fs, bind mount/sys,/dev, dan/proc, lalu pada akhirnya menjalankanexec chroot /sysroot /sbin/init, sehingga boot root S3 berhasil
Masalah DNS yang muncul pada root S3
- Setelah boot, hasil
mountmenunjukkan bahwa/di-mount sebagai tipes3fs - Saat menjalankan
pacman -Sy fastfetch, proses gagal karena tidak dapat me-resolve host mirror paket sepertigeo.mirror.pkgbuild.com - Karena filesystem root berada di S3, root tersebut bisa di-mount dari mesin lain dan alat bisa dipasang lewat
chroot systemd-resolvedtidak berjalan karena masalah permission koneksi stdout ke socket journal, sehingga DNS diakali dengan memasukkannameserver 1.1.1.1ke/etc/resolv.conf
Memindahkannya ke Google Drive
- Untuk implementasi FUSE bagi Google Drive, digunakan google-drive-ocamlfuse
- Setelah membuat secret OAuth2 di akun Google dan mengaktifkan API, paket AUR dipasang di VM Arch Linux
- Setelah Google Drive di-mount, file-file Arch Linux disalin ke Drive melalui proses
rsyncyang panjang - Pada root berbasis Google Drive, perbedaan perilaku filesystem terus menjadi masalah
- Symbolic link yang menunjuk ke symbolic link tidak bekerja, sehingga menimbulkan masalah pada item terkait
/usr/lib - Hardlink tidak bekerja
- Symbolic link relatif tidak bekerja
- Symbolic link yang putus tidak diizinkan
- Symbolic link yang menunjuk ke luar Google Drive tidak bekerja
- Permission dan atribut tidak bekerja
- Kecepatannya sangat lambat
- Symbolic link yang menunjuk ke symbolic link tidak bekerja, sehingga menimbulkan masalah pada item terkait
- Untuk tetap mempertahankan syarat tidak memodifikasi driver FUSE maupun kernel, penulis menanganinya dengan membuat symbolic link manual berdasarkan log
rsyncyang gagal
Modifikasi initramfs untuk Google Drive
- Initramfs menyertakan file token yang dibuat di laptop, binary FUSE Google Drive, dan sertifikat SSL
- File terkait
/.gdfuse/default/config,/.gdfuse/default/state,/etc/ssl, dan/etc/ca-certificatesdimasukkan ke image Dracut - Saat boot dengan root Google Drive, muncul error
chroot: /sbin/init: File not found - Di Linux, meski file sebenarnya ada, jika library dependensi atau path dynamic linker tidak ada, sistem dapat mengembalikan
File not found - Karena masalah symbolic link relatif, kernel mencari kembali
/sysroot/sysrootdari dalam/sysroot; ini diselesaikan dengan membuat/sysroot/sysrootlalu melakukan bind mount/sysrootke dalamnya - Setelah itu pun boot masih sangat lambat
- Regenerasi cache dynamic linker memakan waktu sekitar 5 menit
- Setiap unit systemd memakan waktu sekitar 1 menit
- Boot berhenti karena timeout saat menunggu
/dev/ttyS0
- Penulis mengatur
JobTimeoutSec=infinitydi/etc/systemd/system/dev-ttyS0.device, dan mengubahLOGIN_TIMEOUTmenjadi0di/etc/login.defsuntuk menghindari timeout login - Setelah cache terkumpul, pembacaan file menjadi tidak selambat awalnya
Menjalankan di laptop tanpa media penyimpanan
- Penulis mencoba boot pada hardware sungguhan menggunakan laptop cadangan tanpa media penyimpanan
- Dari konfigurasi untuk QEMU, beberapa item diubah agar sesuai dengan hardware
- Menggunakan driver
r8169untuk port Ethernet laptop, bukan defaulte1000 - Tidak menggunakan display serial
- Mengubah konfigurasi jaringan agar sesuai dengan topologi jaringan rumah
- Menggunakan driver
- Powerline digunakan sebagai pengganti kabel Ethernet yang panjang
- File EFI terpadu dibangun, ditempatkan di path boot EFI pada USB drive, lalu laptop di-boot darinya
- Penulis tidak menemukan instruksi
modprobeuntuk keyboard bawaan, sehingga memuathid_usbdan mengonfigurasi jaringan dengan keyboard eksternal - Hasil akhirnya adalah “Cloud Native Computer” yang berjalan dengan root berbasis Google Drive tanpa media penyimpanan
Variasi yang memungkinkan dan batasannya
- Proyek ini sendiri lebih bersifat main-main, tetapi dengan metode yang sama Linux dapat di-boot di atas SSHFS
- Jika menggunakan gitfs, juga memungkinkan untuk mem-boot Linux dari repository Git dan melacak perubahan melalui Git
- Kemungkinannya banyak, tetapi kepraktisannya terbatas
- Nix installation terpikir sebagai kandidat eksperimen berikutnya
Belum ada komentar.