- Seorang pengguna yang sering memakai desktop BSD,
chroot, dan jail mencoba Alpine Linux, dan menilai bahwa desainnya yang berfokus pada keamanan, kesederhanaan, dan efisiensi sumber daya terasa akrab bagi pengguna BSD
- Berkat ukurannya yang kecil dan dependensi yang terbatas, Alpine digunakan luas bukan hanya sebagai base image container, tetapi juga pada sistem embedded, router, perangkat seluler, server, hingga desktop
- Instalasi dilakukan dengan menjalankan
setup-alpine di lingkungan live, lalu mengatur konfigurasi dasar seperti keymap, jaringan, zona waktu, SSH, dan NTP secara berurutan
- Setelah boot pertama, kombinasi OpenRC,
musl, dan busybox langsung terlihat, dan elemen seperti /etc/rc.conf serta crond(8) terasa selaras dengan pengalaman rc ala BSD
- Setelah memeriksa manajemen paket
apk, pengaturan repositori, hingga kemungkinan memasang ZFS, penulis mendapat kesan yang cukup baik hingga serius mempertimbangkannya sebagai kandidat distro Linux utama untuk pengujian dan server
Karakter Alpine yang Akrab bagi Pengguna BSD
- Alpine Linux adalah distribusi Linux independen, nonkomersial, dan serbaguna untuk power user yang menekankan keamanan, kesederhanaan, dan efisiensi sumber daya
- Biner userland dikompilasi dengan PIE (Position Independent Executables) dan stack smashing protection, dengan fokus mengurangi eksploitasi zero-day tertentu dan penyalahgunaan kerentanan
- Alpine adalah proyek yang lebih lama dari perkiraan, sampai-sampai Natanael Copa sudah membahas asal-usul proyek ini pada 2005
- Seperti keluarga BSD, Alpine dipakai bukan hanya pada sistem embedded, router, dan perangkat seluler, tetapi juga pada server dan desktop umum
- Karena ukurannya kecil dan dependensinya terbatas, Alpine banyak dipakai sebagai base image untuk container Linux, dan ada juga alat seperti alpine-chroot-install untuk menjalankannya dengan mudah di
chroot(8)
- Ini menjadi poin yang sangat menarik bagi pengguna yang sering memakai NetBSD
chroot(8) dan FreeBSD jail untuk pengujian serta deployment
Pengalaman Instalasi
- Alpine menyediakan berbagai build seperti ARM, PPC64, x86, dan x86_64
- Penulis mem-boot image ISO Xen di VM, tetapi itu ternyata pilihan yang keliru karena Dom0 salah dibaca sebagai DomU
- Dom0 merujuk pada hypervisor Xen dan bukan guest
- Meski begitu, boot dan instalasi tetap berjalan seperti ISO standar
- Instalasi dilakukan dengan login sebagai
root dengan kata sandi kosong di lingkungan live, lalu menjalankan setup-alpine
- Selama instalasi, item dasar seperti keymap, jaringan, zona waktu, dan autentikasi root diatur satu per satu
- Kunci SSH bisa disuntikkan sejak tahap awal
- Ini berguna saat nantinya melakukan deployment kumpulan VM atau server dengan alat orkestrasi
- Ini juga membantu di lingkungan hosting yang tidak menyediakan konsol OOB
- Server SSH dan klien NTP bisa dipilih, sehingga OpenSSH dan openntpd dapat digunakan
- Proses instalasi dengan benar mendeteksi bahwa sistem sedang berjalan di Xen
- Konfigurasi LVM juga dimungkinkan, tetapi kali ini penulis memilih konfigurasi standar yang oleh Alpine disebut partisi
sys
- Konfigurasi ini menggunakan
ext4
Susunan Sistem yang Terlihat Setelah Boot Pertama
- Setelah boot pertama, melalui
dmesg(1) dapat dipastikan bahwa sistem menggunakan OpenRC
- OpenRC adalah sistem init yang portabel, kecil, cepat, efisien, transparan, dan aman
- Bagi pengguna yang terbiasa menulis skrip rc ala BSD, OpenRC terasa sangat familier
- Elemen seperti
/etc/rc.conf dan crond(8) selaras dengan pengalaman pengguna BSD
- Adanya distribusi Linux seperti Devuan, Gentoo, dan Alpine yang memakai OpenRC membuat Linux terasa menyenangkan lagi
- Bersama OpenRC, Alpine juga menyertakan musl dan menggunakan busybox
- musl dan busybox memang lebih terbatas dibanding GCC dan GNU coreutils, tetapi berkontribusi pada ukuran sistem dasar yang kecil dan pengurangan attack surface
- llvm juga tersedia
- MirBSD Korn shell juga tersedia sebagai paket, dan merupakan salah satu shell interaktif favorit penulis
Manajemen Paket dan Repositori
- Pengelola paket bawaan Alpine adalah apk
- Seperti lazimnya di Linux,
apk memperbarui sistem dasar dan paket bersama-sama tanpa memisahkannya
- Penulis belum memastikan apakah ini bisa dijalankan sebagai salinan tanpa hak istimewa seperti di BSD
- pkgsrc juga bisa digunakan, jadi masih ada alternatif
- Pengaturan repositori ada di
/etc/apk/repositories
- Dengan membuka komentar pada URL kedua yang diberikan installer, repositori community bisa diaktifkan
- Alpine juga memiliki repositori
testing, dan repositori sendiri pun bisa ditambahkan
- Penggunaannya sederhana, tetapi karena kebiasaan lama, penulis kadang salah mengetik
apt install alih-alih apk add
- Antarmuka web paket resminya tersedia di pkgs.alpinelinux.org
- Repositori Alpine juga bisa dilihat di pkgs.org
ZFS dan Penilaian sebagai Kandidat untuk Server
- Setelah memasang beberapa paket, penulis bisa menyiapkan konfigurasi “alat wajib” yang biasa dipakai di laptop khusus konsol
- Salah satu paket yang paling mengejutkan adalah ZFS
- Instalasi dan pemuatan modul kernel bisa dilakukan dengan dua perintah
# apk add zfs zfs-lts
# modprobe zfs
- Menjadikan ZFS sebagai filesystem root kemungkinan lebih rumit
- Penulis juga belum memeriksa bagaimana konfigurasi ZFS akan berjalan setelah upgrade
- Bahkan dari pengalaman sejauh ini saja, kesannya sudah cukup baik hingga serius mempertimbangkan beralih ke Alpine sebagai distribusi Linux utama untuk pengujian dan server
- Keunggulan yang disebutkan antara lain hanya sedikit proses yang terlihat di
htop(1) dan lsof(1), penggunaan OpenRC, manajemen paket yang tampak sederhana, dan konfigurasi yang mudah
- Jika ada “Occam’s Linux” yang modern dan fungsional, Alpine dinilai paling mendekati gambaran itu
- Jika membutuhkan lebih banyak fungsi daripada busybox, uutils mungkin bisa dicoba, tetapi untuk server tampaknya kebutuhannya kecil
1 komentar
Opini Hacker News
Dari sudut pandang keamanan, sebagian besar binary Linux saat ini dikompilasi sebagai PIE
Jika menjalankan
checksecpada binary acak di Ubuntu, atribut seperti itu akan muncul, danchecksecbisa dipasang denganpip install pwntoolsDi sisi lain, setahu saya GLIBC memiliki implementasi heap yang paling diperkuat, serta lebih banyak mitigasi terhadap double free dan serangan heap lainnya
Jadi dari sisi itu Alpine bisa dianggap kurang aman karena memakai musl, tetapi fakta bahwa sistemnya kecil dan mudah dipahami benar-benar merupakan keunggulan dari sisi keamanan
checksecpada semua hal, dan semua proses muncul seperti ini. Output lengkapnya panjang jadi saya hilangkan, tetapi saya belum pernah melihat build Alpine yang tidak menyertakan flag-flag iniCOMMAND PID RELRO STACK CANARY NX/PaX PIEinit 1 Full RELRO Canary found NX enabled PIE enabled[snip...]crond 422838 Full RELRO Canary found NX enabled PIE enabledSejujurnya, menurut saya Windows modern dan macOS sama-sama memiliki arsitektur keamanan yang lebih baik
Saya juga orang BSD, dan kebetulan minggu ini untuk pertama kalinya menjalankan Alpine sebagai VM di atas bhyve
Kuncinya adalah BusyBox. Jika utilitas
/bindan/sbintidak harus berupa binary terpisah masing-masing, user space menjadi sangat kecil dan booting juga cepat. Setelah memasang Tmux dan zsh, itu sudah cukup untuk sebagian besar penggunaan UnixUntuk sampai ke lingkungan akhir, saya memang cukup banyak memasang lewat
apk, tetapi secara keseluruhan ini adalah pengalaman Linux terbaik yang saya rasakan dalam waktu lama. Akan bagus kalau ZFS sudah masuk secara default, dan koneksi virtio yang disesuaikan untuk eksekusi berbasis ZFS di bhyve dibuat lebih eksplisitNamun senang juga mendengar mungkin ada distro Linux yang waras, dan kalau suatu saat saya membutuhkan box Linux, saya akan mencobanya. Hanya saja kejadian seperti itu cukup jarang
apkWiki Alpine juga punya dokumentasi yang cukup bagus untuk memasang root filesystem di ZFS: https://wiki.alpinelinux.org/wiki/Root_on_ZFS_with_native_en...
Kalau Anda pengguna BSD, Void Linux mungkin juga cocok. Ini distro yang dibuat oleh xtraeme, pengembang NetBSD, memiliki versi glibc dan musl, serta memakai runit sebagai sistem init
Paket juga bisa dibangun dari source dengan
xbps-srchttps://voidlinux.org/
Namun perlu dicatat bahwa saya hanya pernah memakai instalasi xfce dengan perubahan minimal. Konfigurasi multi-pengguna yang kompleks mungkin sedikit lebih merepotkan karena runit punya lebih sedikit fitur bawaan dibanding systemd
Saya sempat mengira akan ada yang menyebut bahwa halaman man yang dibanggakan BSD tidak disertakan secara default di Alpine. Itu salah satu alasan saya tidak memakai Alpine di laptop perjalanan, dan sekarang saya memakai OpenBSD
Apakah saya melewatkan opsi konfigurasi agar dokumentasi selalu terpasang saat mengambil paket di Alpine? Atau memang satu-satunya cara adalah memasang paket
-docsecara manual setiap kali?docs. Setelah itu ia akan menarik paket*-docyang sesuai dengan item yang dipasangSejujurnya saya sama sekali tidak mengerti kenapa orang menganggap hal seperti OpenRC menarik. Menurut saya, apa pun yang berbasis pengawasan lebih baik daripada cara yang menumpahkan PID, menyimpannya ke file PID, lalu berharap tiga minggu kemudian nilai itu masih menunjuk ke daemon yang dijalankan
Selain itu, dalam beberapa kasus, operasi manajemen layanan juga ditangani dengan melakukan
pgreppada nama proses tertentu. Saya cukup setuju dengan gagasan bahwa tidak semuanya boleh otomatis di-restart secara default, tetapi secara praktis hanya itu keunggulan yang bisa diklaim kubu seperti iniPada akhirnya, hal-hal seperti ini juga sangat bergantung pada syslog, yang pada dasarnya teknologi era 80-an. Alat seperti
multilogatausvlogdmungkin bisa diperbaiki agar lebih mudah menyediakan tampilan terpusat untuk melihat urutan kejadian dari berbagai alat sekaligus, tetapi fitur yang mengelompokkan log ke dalam kategori yang samar dan memungkinkan siapa pun mencatat log dengan nama apa pun di mana saja terasa anehhttps://mastodon.social/@ariadne@treehouse.systems/112044942...
https://mastodon.social/@ariadne@treehouse.systems/112214386...
Terlalu banyak hal dimasukkan ke dalam PID1, dan ditulis dalam bahasa yang tidak memory-safe. Saya tidak melihat alasan teknis mengapa itu tidak bisa dipecah menjadi PID1 minimal dan beberapa program setuid
Satu-satunya hal yang terpikir oleh saya adalah ini memungkinkan systemd berjalan di dalam kontainer Docker, tetapi Red Hat/IBM tampaknya lebih suka orang memakai alat kontainerisasi mereka sendiri seperti systemd-nspawn, jadi rasanya mereka tidak akan terlalu menginginkan itu. Dengan struktur saat ini, menurut saya ini tidak akan pernah benar-benar bisa dibenarkan dari sudut pandang keamanan
Alpine punya kelebihan yang menarik. Saat pengguna Nix memamerkan manajemen paket deklaratif, kita bisa langsung mengedit
/etc/apk/worlddan menjalankanapk fixuntuk menunjukkan cara melakukannya tanpa Nix/var/lib/portage/world, set yang dipilih di/var/lib/portage/world_sets, dan definisi set di/etc/portage/sets/Dengan begitu, paket bisa dibagi berdasarkan kategori, hanya sebagian dipasang di sistem yang membutuhkannya, dan komentar bisa ditambahkan ke file sesuka hati. Padanan
apk fixadalahemerge -uDU @world && emerge -c, meski memang agak lebih merepotkanAlpine juga bisa membuat sesuatu yang mirip set dengan
apk add -t setname pkg1 pkg2 pkg3, yang akan membuat paket dummy yang bergantung pada paket-paket pilihan tersebut. Saya biasanya membuat skrip shell di/etc/apk/sets/untuk meniru nuansa Gentoo, tetapi hasilnya tidak selalu samaDulu ada artikel-artikel soal performa saat menjalankan Alpine di Docker, dan saya ingat rekomendasinya adalah memakai Debian/Ubuntu
Artikel tentang Alpine yang lambat:
https://pythonspeed.com/articles/alpine-docker-python/
https://superuser.com/questions/1219609/why-is-the-alpine-do...
Artikel yang lebih mendukung Alpine:
https://nickjanetakis.com/blog/benchmarking-debian-vs-alpine...
Saya penasaran apakah pembahasan ini masih relevan sekarang
Namun dari sisi performa, akan menarik jika benchmark dijalankan untuk melihat angka nyata
Bukankah musl masih belum mendukung
pthread_attr_setaffinity_np? Kalau begitu ada perangkat lunak yang tidak bisa dijalankan, dan contoh terbesarnya adalah PyTorchDalam banyak situasi, kesederhanaan atau keamanan adalah perhatian yang lebih penting daripada performa
Titik tengah yang pas yang saya temukan antara BSD dan Linux adalah Slackware. Ia dengan percaya diri terasa Unix, tidak rumit, dan juga punya pohon ports sendiri yang kaya lewat Slackbuilds
Dulu saya menyukainya karena ia distro minimal yang tidak mengganggu, dan saya menganggapnya ditujukan untuk orang yang sedikit lebih teknis
Namun saat menyelidiki masalah, komunitasnya kadang bersikap bermusuhan hanya karena saya tidak melakukan instalasi penuh. Alasannya, instalasi penuh adalah cara yang direkomendasikan, dan jika tidak melakukannya akan muncul masalah dependensi konyol seperti mplayer tidak berfungsi karena tidak ada samba
Menurut saya Alpine adalah peningkatan dari Slackware dalam segala hal
Ternyata Alpine Linux sebenarnya bukan GNU/Linux. Saya baru tahu
Jadi apakah itu BusyBox/Linux?