1 poin oleh GN⁺ 2024-04-28 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-04-28
Opini Hacker News
  • Dari sudut pandang keamanan, sebagian besar binary Linux saat ini dikompilasi sebagai PIE
    Jika menjalankan checksec pada binary acak di Ubuntu, atribut seperti itu akan muncul, dan checksec bisa dipasang dengan pip install pwntools
    Di 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

    • Saya kurang paham mengapa “sistem yang kecil dan mudah dipahami” menjadi argumen yang menguntungkan glibc. Bukankah justru sebaliknya?
    • Di node Alpine, saya selalu menjalankan checksec pada 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 ini
      COMMAND PID RELRO STACK CANARY NX/PaX PIE
      init 1 Full RELRO Canary found NX enabled PIE enabled
      [snip...]
      crond 422838 Full RELRO Canary found NX enabled PIE enabled
    • OpenBSD libc juga layak diperiksa
    • Dari sudut pandang keamanan Linux, kalau seseorang bisa menjalankan kode sedikit saja di sistem, menurut saya semuanya sudah berakhir. Linux penuh lubang, dan alasan malware tidak sebanyak di Windows adalah karena pengguna Linux di desktop sedikit, sehingga pembuat malware tidak terlalu menjadikannya target
      Sejujurnya, 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 /bin dan /sbin tidak 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 Unix
    Untuk 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 eksplisit

    • Saya sudah memakai dan men-deploy FreeBSD selama lebih dari 20 tahun, dan terus terang saya enggan masuk ke box GNU/Linux. Terlalu banyak variasi dan ketidakkonsistenan sehingga sistemnya terasa berantakan. Sampai-sampai masuk ke server Windows justru terasa lebih “masuk akal”
      Namun 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
    • Saya penasaran sejauh apa Anda ingin ZFS “terpasang bawaan”. Alpine adalah salah satu dari sedikit distro yang menyediakan modul kernel ZFS binary, jadi hampir bisa dipasang hanya dengan satu perintah apk
      Wiki Alpine juga punya dokumentasi yang cukup bagus untuk memasang root filesystem di ZFS: https://wiki.alpinelinux.org/wiki/Root_on_ZFS_with_native_en...
    • ZFS berjalan sangat baik di Alpine. Alpine + ZFS sudah menjadi konfigurasi server default saya selama beberapa tahun
  • 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-src
    https://voidlinux.org/

    • Setelah memakai Arch, saya mencari alternatif non-SystemD yang terasa mirip Arch dan akhirnya menetap di Void. Alasan saya memilih Void alih-alih Alpine adalah dukungan glibc, sehingga saya bisa memakai driver NVidia. Tentu saja saya tahu soal “cemoohan untuk NVidia”
    • Saya sangat menyukai Void. Sistem utama saya tetap Arch karena pilihan paket yang besar dan kenyamanan systemd, tetapi saya pernah memasang Void di mesin kerabat dan tiga perangkat saya sendiri, dan hasilnya bagus
      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
    • Beberapa tahun lalu ada masalah saat memakai Rust di voidlinux+musl. Untungnya Void bisa dengan mudah diinstal ulang memakai glibc
    • Chimera juga mungkin bagus. User space untuk tool intinya sebagian besar berasal dari keluarga FreeBSD, jadi sepertinya cukup akrab bagi pengguna BSD
    • Ada juga CRUX. Itu distro yang bisa dibilang leluhurnya Archlinux
  • 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 -doc secara manual setiap kali?

    • Jika selalu menginginkan dokumentasi, pasang meta-package docs. Setelah itu ia akan menarik paket *-doc yang sesuai dengan item yang dipasang
    • Bagaimana dukungan hardware saat memakai OpenBSD di laptop?
  • Sejujurnya 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 pgrep pada 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 ini
    Pada akhirnya, hal-hal seperti ini juga sangat bergantung pada syslog, yang pada dasarnya teknologi era 80-an. Alat seperti multilog atau svlogd mungkin 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 aneh

    • Sebagai catatan, Alpine sudah bertahun-tahun mencoba mengganti OpenRC, tetapi belum menemukan alternatif yang cocok. Ada juga upaya untuk menjadi distro yang independen dari sistem init
      https://mastodon.social/@ariadne@treehouse.systems/112044942...
      https://mastodon.social/@ariadne@treehouse.systems/112214386...
    • Meski begitu, alternatif utamanya adalah systemd, dan itu dirancang dengan cara yang tidak aman sehingga terus membuka ruang bagi CVE baru yang menarik
      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/world dan menjalankan apk fix untuk menunjukkan cara melakukannya tanpa Nix

    • Biasanya pendekatan Gentoo lebih baik. Paket yang dipasang manual bisa berada di /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 fix adalah emerge -uDU @world && emerge -c, meski memang agak lebih merepotkan
      Alpine 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 sama
    • Dalam waktu yang dibutuhkan Nix untuk mengevaluasi flake sistem saya, saya sudah bisa memasang ulang Alpine dari nol
    • Memang keren, tetapi Nix/OS melakukan jauh lebih banyak hal daripada sekadar instalasi paket deklaratif
  • Dulu 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

    • Banyak keluhan spesifiknya setidaknya sudah terselesaikan. Seperti diakui di bagian paling bawah tautan pertama, sekarang sudah ada Python wheel yang kompatibel dengan Alpine, dan masalah DNS juga sudah diperbaiki cukup lama lalu
      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 PyTorch

    • Jika beban kerja yang sensitif terhadap performa bergantung pada glibc karena performa itu, rasanya aplikasi tersebut cukup “langsung” dijalankan di kontainer saja
      Dalam 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

    • Slackware mencoba bersaing sebagai distro desktop, tetapi kehilangan arah karena tidak benar-benar berkomitmen
      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
    • Saya menghormati orang yang memakai Slackware, tetapi ketiadaan manajemen dependensi tampaknya merepotkan
  • Ternyata Alpine Linux sebenarnya bukan GNU/Linux. Saya baru tahu
    Jadi apakah itu BusyBox/Linux?

    • Cukup sebut saja Alpine Linux. Setahu saya BusyBox tidak terkait dengan perilaku pamer diri yang sesekali bocor dari RMS, jadi tidak apa-apa