Review: Alpine Linux dibuat untuk Docker

Alpine Linux adalah distribusi Linux minimal, awalnya dibuat dengan Gentoo, tapi sekarang sudah independen dan di-hosting sendiri. Dalam beberapa hal Alpine Linux secara konseptual mirip dengan NanoBSD, di mana pengguna teknis dapat memulai dengan Alpine Linux untuk membangun sistem Linux hanya dengan apa yang dibutuhkan untuk menyelesaikan misi, dan tidak lebih.

Biasanya terlihat tertanam di perangkat atau peralatan, Alpine Linux mendapat dorongan besar ketika dipilih untuk menggantikan Ubuntu sebagai gambar dasar untuk Docker. Keamanan, keandalan, dan praktik pengembangan yang solid adalah alasan utamanya.

Alpine Linux tidak seperti distribusi Linux lainnya yang akan ditemui oleh pengguna desktop Linux pada umumnya. Mari kita mulai dengan melihat direktori / bin, di mana utilitas sistem disimpan: 

Perhatikan bahwa hampir semua binari adalah link ke / bin / busybox. Busybox adalah sekumpulan pengguna umum dan utilitas sistem yang dikemas ke dalam satu biner untuk pengaktifan yang lebih cepat, persyaratan ruang yang lebih rendah, dan keamanan yang umumnya lebih baik, dengan biaya fungsionalitas yang lebih rendah. Banyak opsi yang jarang digunakan untuk utilitas telah dihapus, tetapi semua opsi yang umum digunakan tetap ada.

Selain itu, Alpine menggunakan musl libc, implementasi minimal dari pustaka dan ekstensi C / POSIX standar, yang dirancang untuk tautan statis dan aplikasi tersemat real-time, menghindari GNU-bloat of glibc. Penautan statis berarti memulai lebih cepat, tetapi membutuhkan lebih banyak ruang, jadi paling cocok untuk sistem yang lebih kecil. Dengan menggabungkan semua sistem biner menjadi satu yang dapat dieksekusi dan terhubung dengan musl, Alpine mendapatkan sekumpulan kecil dan cepat binari sistem, yang dibutuhkan dalam sistem tertanam.

Terakhir, ada fokus pada keamanan. Sistem ini menyertakan tambalan kernel Grsec / PaX, yang menyediakan sekumpulan fitur keamanan ke kernel Linux termasuk perlindungan ruang alamat, audit yang ditingkatkan, dan akses berbasis peran dan kontrol proses. Dengan distribusi Linux yang khas, pengguna harus mengkompilasi dan menjalankan kernel mereka sendiri untuk mendapatkan tambalan ini, sesuatu yang bahkan mungkin dihindari oleh sebagian besar pengguna tingkat lanjut.

Instalasi dan konfigurasi Alpine Linux

Ada banyak hal yang tidak biasa dalam menginstal Alpine Linux. Ini sebagian besar berakar pada penggunaan aslinya yang dimaksudkan dalam sistem tertanam, seperti router. Karena itu Alpine dirancang untuk boot dan dijalankan dari RAM, meskipun opsi hybrid tersedia. Sesuai dengan asal ini, Alpine Linux menggunakan extlinux, varian Syslinux, sebagai bootloadernya. Syslinux biasanya tidak digunakan untuk mem-boot instalasi Linux lengkap karena Linux biasanya tidak diinstal pada sistem file FAT. Sebaliknya, Syslinux sering digunakan untuk boot atau penyelamatan disket, USB live, dan sistem boot ringan lainnya. Alpine menggunakan bagian dari proyek Syslinux untuk memungkinkan booting dari CD-ROM, dan menggunakan extlinux untuk boot dari sistem berkas Linux atau sistem berkas FAT untuk perangkat USB. Sistem berkas FAT memiliki beberapa batasan, seperti ukuran berkas dan panjang nama berkas.

Alpine mendukung tiga mode penginstalan: diskless, "data", dan "sys". Dalam instalasi data, OS dimuat ke dalam RAM dari media hanya-baca, tetapi memasang partisi baca / tulis untuk menyimpan data. Ini dapat digunakan, misalnya, jika router yang berbasis Alpine menyimpan intrusi atau log akses pada disk. Menyalin log ke dalam RAM akan membuang-buang sumber daya yang berharga. Mode tanpa disk serupa, tetapi partisi baca / tulis biasanya lebih kecil, dan digunakan untuk menyimpan detail konfigurasi OS. Sys adalah mode penginstalan berbasis disk tradisional.

Saat menginstal dalam mode diskless atau data, sistem Alpine Local Backup digunakan untuk menyimpan file konfigurasi. Hal ini dilakukan dengan lbu (utilitas cadangan lokal), yang melacak file yang telah diubah di direktori / etc dan menyimpan perubahan tersebut dalam file "overlay" .apkovl (arsip tar-gzip). Dengan lbu, administrator dapat, misalnya, membandingkan, menggabungkan, atau kembali ke konfigurasi sebelumnya.

Saya mulai dengan mencoba menginstal tanpa disk karena saya ingin menjalankan Alpine seperti yang dimaksudkan semula, sebagai OS untuk peralatan. Sayangnya, saya menemukan bug yang sudah berlangsung lama (2015) di instalasi VMware yang belum diperbaiki, dan dokumentasinya juga belum diperbarui. Tampaknya gambar floppy virtual tidak dipasang pada saat boot. Ini berarti bahwa perubahan konfigurasi hilang setiap kali reboot.

Saya akhirnya menggunakan instalasi sys, yang berjalan dengan baik. Hal pertama yang harus diperhatikan adalah tidak ada , bahkan SSH, yang diinstal secara default. Jika membangun sistem tertanam, ini mungkin hal yang baik. Pemula Linux harus mempersiapkan kurva belajar yang curam. Setelah membaca sedikit tentang Alpine Package Manager (APK), saya menginstal seperangkat alat minimal untuk memulai: Sudo, SSH, dan alat manajemen sistem grafis berbasis web, ACF.

Administrasi sistem Linux Alpine

Sementara sebagian besar sistem Linux memiliki alat administrasi sistem grafis, Alpine menggunakan skrip shell untuk pengaturannya. Saya menggunakan skrip payung, setup-alpine, untuk mengkonfigurasi semua dasar seperti jaringan, nama host, disk, zona waktu, dll. Meskipun setup-alpine cukup untuk mendapatkan sistem yang dapat diterapkan, hal yang lebih canggih akan memerlukan pengeditan file konfigurasi sistem secara langsung dan digunakan lbuuntuk menyimpannya ke media yang dapat ditulisi. Perhatikan bahwa setup-alpine juga merupakan penginstal, sehingga nama disk dapat diberikan dan akan menulis OS ke media, meminta partisi yang dapat ditulis untuk direktori / etc dan / var.

Mengembangkan dan mendistribusikan perangkat lunak juga berbeda di Alpine. Hal ini sebagian karena tujuannya untuk digunakan dalam sistem tertanam, atau sebagai gambar dasar untuk container, tetapi juga karena penulis merasa bahwa sistem manajemen paket yang ada tidak akan berfungsi dengan baik dalam sistem yang biasanya dijalankan dari RAM. Alpine Package Manager (APK) memenuhi semua persyaratan ini, dengan overhead rendah dan waktu pemasangan yang cepat. Namun, saya berharap mereka telah melapisi API yang lebih standar. Kami sudah memiliki cukup API manajemen paket, dan ada sesuatu yang bisa dikatakan untuk kompatibilitas. APK digunakan untuk mengonfigurasi container atau sistem mandiri.

Mengirim paket dilakukan melalui struktur port yang mengingatkan saya pada koleksi port FreeBSD. Namun, alih-alih didorong oleh sistem makefile yang canggih, ia menggunakan penemuan Alpine Linux lainnya, abuild. Repositori aports mencerminkan pohon port di seluruh dunia, dan apk add …jelas jauh lebih cepat daripada sistem manajemen paket lainnya.

Hal lain yang perlu diperhatikan tentang Alpine adalah penggunaan OpenRC untuk sistem init. Salah satu dari selusin sistem init untuk Linux sekarang, OpenRC dimulai di Gentoo (seperti yang dilakukan Alpine). Tidak ada yang kurang secara fungsional, tetapi bersiaplah untuk mempelajari sistem baru level run dan perintah init.

Untungnya banyak dari administrasi sehari-hari dapat dilakukan melalui Alpine Configuration Framework (ACF) berbasis web, meskipun bekerja dengan ACF tidak sepenuhnya mulus. Itu tidak mendeteksi pengguna biasa yang saya tambahkan untuk diri saya sendiri adduser, misalnya. ACF GUI sangat mirip dengan antarmuka web dari router berbasis Linux pada umumnya:

ACF juga perlu menggali untuk menemukan dan menginstal. Pengguna biasa tidak akan menemukan sistem ini kecuali jika perhatiannya penuh, dan bahkan tidak ada instruksi instalasi.

Penyimpanan dan jaringan Alpine Linux

Alpine mendukung beberapa opsi penyimpanan di luar hanya RAM, dengan konfigurasi yang disimpan pada media, dan kartu flash. Namun, dokumentasi, atau lebih tepatnya kurangnya itu, membuat penyimpanan pemahaman menjadi sulit. Misalnya, saya ingin membakar ISO kustom dengan aplikasi yang tidak tersedia di aports, kemungkinan kejadian yang cukup umum. Dokumentasi untuk melakukannya adalah jalan buntu:

Empat setengah tahun sepertinya waktu yang lama untuk menunggu. Agar adil, penyimpanan tidak pernah menjadi bagian besar dari persamaan Alpine, dengan fokusnya pada aplikasi yang disematkan, jadi tidak mengherankan jika ini adalah area yang lemah. Ada pekerjaan yang sedang berlangsung di sebagian besar area yang diharapkan dari distro Linux, seperti LVM, iSCSI, dan RAID, tetapi bersiaplah untuk meluangkan sedikit waktu untuk mencoba memahami dokumentasi , atau membaca kode sumber, untuk mengetahuinya Segalanya. 

Berjejaring dengan Alpine adalah cerita yang sangat berbeda dari penyimpanan. Dokumentasi untuk jaringan ditulis dengan lebih baik dan lebih lengkap, dan sering kali menyertakan praktik terbaik untuk menyiapkan jaringan yang efisien. IP4, IP6, bonding, VLAN, bridging, dan hampir semua pengaturan jaringan yang diinginkan didukung. Anda bahkan akan menemukan petunjuk untuk mengatur koneksi internet satelit!

Konfigurasi dapat dilakukan dengan alat tradisional seperti ifconfig dan rute, atau beberapa paket yang lebih baru seperti iproute2. Layak disebutkan adalah subproyek menarik bernama Alpine Wall, alat konfigurasi firewall Linux. Bahkan PPP melalui jalur serial didukung, yang agak mengejutkan di zaman sekarang ini.

Saya belajar banyak dengan membaca dokumentasi ini, menemukan beberapa petunjuk konfigurasi yang tidak saya ketahui sebelumnya, serta beberapa utilitas jaringan yang sampai sekarang tidak dikenal. Bagian dari dokumentasi ini layak untuk ditandai sebagai referensi cepat untuk cara-cara jaringan, bahkan jika Anda tidak menggunakan Alpine Linux.

Upgrade dan downgrade Alpine Linux

Rekayasa rilis Alpine Linux hampir tidak seketat atau seformal sistem dewasa seperti FreeBSD, tetapi mencakup dasar-dasarnya. Dan itu sangat cocok untuk kasus penggunaan utama Alpine untuk hosting dan peralatan Docker.

Pada dasarnya ada dua aliran, edge dan stable. Edge adalah cabang rilis bergulir, cuplikan di mana pun perkembangan terjadi setiap enam bulan. Paket bergerak melewati batas dan, ketika siap, dipromosikan ke kandang / komunitas di mana mereka didukung selama enam bulan oleh komunitas. Paket yang bertahan itu dan terus berkembang akhirnya membuatnya menjadi stable / main, dimana mereka didukung selama dua tahun.

Sedikit kehati-hatian perlu dilakukan saat memutakhirkan dari cabang 2.x ke 3.x karena perubahan di perpustakaan C (dari uClibc ke musl). Jika Anda tidak berhati-hati, sistem dapat gagal di tengah proses peningkatan. Mengupgrade paket sepanjang garis 3.x lebih sederhana, meskipun masih merupakan proses manual yang sebagian besar didorong oleh skrip. Trik untuk memahami proses pemutakhiran adalah dengan mendapatkan repositori APK yang benar (komunitas, edge, atau utama), menghapus cache, lalu mengizinkan APK memutakhirkan semua paket dengan apk upgrade.

Mengupgrade kernel juga sangat mudah, dan menggunakan skrip setup-bootable untuk menulis kernel baru dan busybox ke media boot.

Secara keseluruhan, tidak terlalu banyak bagian yang dipindahkan ke sistem Alpine, jadi setelah arsitekturnya dipahami, mencari tahu tentang peningkatan tidak sulit.

Sekilas tentang Alpine Linux

Alpine Linux adalah pilihan tepat untuk sistem apa pun yang berorientasi jaringan dan tujuan tunggal. Deteksi intrusi, pemantauan jaringan, dan telepon IP adalah contoh aplikasi yang bagus untuk Alpine Linux. Dan itu pilihan alami untuk wadah. Aplikasi yang banyak menggunakan disk harus diuji dengan cermat. Pengguna harus bersiap untuk meluangkan waktu untuk terlibat dalam komunitas, dan menyingsingkan lengan baju agar tangan mereka kotor. Percobaan dan kesalahan akan dibutuhkan.