Ulasan: Alpine Linux dibuat untuk Docker

Alpine Linux adalah sebaran Linux minimum, yang pada asalnya dibina dengan Gentoo, tetapi kini bebas dan hosting sendiri. Dalam beberapa aspek, Alpine Linux secara konseptual serupa dengan NanoBSD, di mana pengguna teknikal boleh memulakan dengan Alpine Linux untuk membina sistem Linux dengan hanya apa yang diperlukan untuk menyelesaikan misi, dan tidak lebih dari itu.

Biasanya dilihat tertanam dalam peranti atau perkakas, Alpine Linux mendapat dorongan besar ketika dipilih untuk menggantikan Ubuntu sebagai gambar dasar untuk Docker. Keselamatan, kebolehpercayaan, dan amalan pembangunan yang kukuh adalah sebab utama.

Alpine Linux tidak seperti pengedaran Linux yang mungkin dihadapi oleh pengguna desktop Linux biasa. Mari mulakan dengan melihat direktori / bin, di mana utiliti sistem disimpan: 

Perhatikan bahawa hampir semua binari adalah pautan ke / bin / busybox. Busybox adalah sekumpulan utiliti pengguna dan sistem biasa yang dibungkus ke dalam satu perduaan untuk permulaan yang lebih pantas, keperluan ruang yang lebih rendah, dan keselamatan yang umumnya lebih baik, dengan kos fungsi yang dikurangkan. Sebilangan besar pilihan yang jarang digunakan untuk utiliti telah dikeluarkan, tetapi semua pilihan yang biasa digunakan tetap ada.

Sebagai tambahan kepada ini, Alpine menggunakan musl libc, pelaksanaan minimum perpustakaan dan sambungan C / POSIX standard, yang direka untuk pautan statik dan aplikasi yang disematkan dalam masa nyata, mengelakkan GNU-bloat of glibc. Pautan statik bermaksud permulaan yang lebih pantas, tetapi memerlukan lebih banyak ruang, jadi sangat sesuai untuk sistem yang lebih kecil. Dengan menggabungkan semua binari sistem menjadi satu yang dapat dieksekusi dan dihubungkan dengan musl, Alpine mendapat sekumpulan binari sistem yang kecil dan cepat, yang diperlukan dalam sistem tertanam.

Akhirnya, ada fokus pada keselamatan. Sistem ini merangkumi patch kernel Grsec / PaX, yang menyediakan koleksi fitur keselamatan ke kernel Linux termasuk perlindungan ruang alamat, pengauditan yang ditingkatkan, dan akses dan pengendalian proses berdasarkan peranan. Dengan sebaran Linux yang biasa, pengguna harus menyusun dan menjalankan kernel mereka sendiri untuk mendapatkan tambalan ini, sesuatu yang mungkin akan dielakkan oleh pengguna yang paling maju.

Pemasangan dan konfigurasi Linux Alpine

Terdapat banyak perkara yang tidak biasa mengenai pemasangan Alpine Linux. Ini sebagian besar berakar pada penggunaan semula yang dimaksudkan dalam sistem tertanam, seperti penghala. Oleh itu, Alpine dirancang untuk boot dan dijalankan dari RAM, walaupun terdapat pilihan hibrid. Sesuai dengan asal usul ini, Alpine Linux menggunakan extlinux, varian Syslinux, sebagai pemuat bootnya. Syslinux biasanya tidak digunakan untuk boot pemasangan Linux penuh kerana Linux biasanya tidak dipasang pada sistem fail FAT. Sebaliknya, Syslinux sering digunakan untuk boot atau menyelamatkan cakera liut, USB langsung, dan sistem but ringan lain. Alpine menggunakan bahagian projek Syslinux untuk membolehkan boot dari CD-ROM, dan menggunakan extlinux untuk boot dari sistem fail Linux atau sistem fail FAT untuk peranti USB. Sistem fail FAT mempunyai beberapa batasan, seperti ukuran fail dan panjang nama fail.

Alpine menyokong tiga mod pemasangan: tanpa cakera, "data," dan "sys." Dalam pemasangan data, OS dimuat ke dalam RAM dari media hanya-baca, tetapi memasang partisi baca / tulis untuk menyimpan data. Ini mungkin digunakan, misalnya, jika penghala berdasarkan Alpine menyimpan pencerobohan atau mengakses log pada disk. Menyalin log ke RAM akan membazirkan sumber yang berharga. Mod tanpa cakera serupa, tetapi partisi baca / tulis biasanya lebih kecil, dan digunakan untuk menyimpan perincian konfigurasi OS. Sys adalah mod pemasangan berasaskan cakera tradisional.

Semasa memasang dalam mod tanpa cakera atau data, sistem Sandaran Tempatan Alpine digunakan untuk menyimpan fail konfigurasi. Ini dilakukan dengan lbu (utiliti sandaran tempatan), yang melacak fail yang telah berubah di direktori / etc dan menyimpan perubahan tersebut dalam fail "overlay" .apkovl (arkib tar-gzip). Dengan lbu, pentadbir dapat, misalnya, membandingkan, menggabungkan, atau kembali ke konfigurasi sebelumnya.

Saya bermula dengan mencuba pemasangan tanpa cakera kerana saya mahu menjalankan Alpine seperti yang dimaksudkan pada mulanya, sebagai OS untuk peralatan. Malangnya, saya menemui bug lama (2015) dalam pemasangan VMware yang belum diperbaiki, dan juga dokumentasinya tidak diperbaharui. Nampaknya imej disket maya tidak dipasang pada waktu boot. Ini bermaksud bahawa perubahan konfigurasi hilang pada setiap but semula.

Saya akhirnya menggunakan pemasangan sys, yang berjalan lancar. Perkara pertama yang perlu diperhatikan adalah bahawa tidak ada , bahkan SSH, dipasang secara lalai. Sekiranya membina sistem tertanam, ini mungkin perkara baik. Pemula Linux harus bersedia untuk keluk pembelajaran yang curam. Setelah membaca sedikit mengenai Alpine Package Manager (APK), saya memasang sekumpulan alat minimum untuk memulakan: Sudo, SSH, dan alat pengurusan sistem grafik berasaskan web, ACF.

Pentadbiran sistem Linux Alpine

Walaupun kebanyakan sistem Linux mempunyai alat pentadbiran sistem grafik, Alpine menggunakan skrip shell untuk persediaan. Saya menggunakan skrip payung, setup-alpine, untuk mengkonfigurasi semua asas seperti rangkaian, nama host, cakera, zon waktu, dan lain-lain. Walaupun setup-alpine cukup untuk mendapatkan sistem yang dapat dilaksanakan, apa-apa yang lebih maju akan memerlukan penyuntingan fail konfigurasi sistem secara langsung dan menggunakan lbuuntuk menyimpannya ke media yang boleh ditulis. Perhatikan bahawa setup-alpine juga merupakan pemasang, jadi nama cakera dapat diberikan dan ia akan menulis OS ke media, meminta partisi yang dapat ditulis untuk direktori / etc dan / var.

Membangun dan menyebarkan perisian juga berbeza di Alpine. Sebagian ini karena penggunaannya yang dimaksudkan dalam sistem tertanam, atau sebagai gambar dasar untuk kontena, tetapi juga kerana penulis merasakan bahawa sistem pengurusan pakej yang ada tidak akan berfungsi dengan baik dalam sistem yang biasanya dijalankan dari RAM. Pengurus Pakej Alpine (APK) memenuhi semua syarat ini, dengan overhead rendah dan masa pemasangan yang cepat. Namun, saya berharap mereka menggunakan API yang lebih standard. Kami sudah mempunyai cukup API pengurusan pakej, dan ada yang boleh dikatakan untuk keserasian. APK digunakan untuk mengkonfigurasi kontena atau sistem yang berdiri sendiri.

Menghantar pakej dilakukan melalui pohon port yang mengingatkan saya tentang koleksi port FreeBSD. Namun, alih-alih didorong oleh sistem makefile yang canggih, ia menggunakan ciptaan Alpine Linux yang lain. Repositori aports menggambarkan pokok pelabuhan di seluruh dunia, dan apk add …pastinya jauh lebih pantas daripada sistem pengurusan pakej lain.

Perkara lain yang perlu diperhatikan mengenai Alpine adalah penggunaan OpenRC untuk sistem init. Satu daripada selusin sistem init untuk Linux sekarang, OpenRC bermula di Gentoo (seperti yang dilakukan oleh Alpine). Tidak ada yang kurang berfungsi, tetapi bersiaplah untuk mempelajari sistem baru tahap berjalan dan perintah init.

Nasib baik sebahagian besar pentadbiran sehari-hari dapat dilakukan melalui Kerangka Konfigurasi Alpine (ACF) berasaskan web, walaupun bekerja dengan ACF tidak begitu lancar. adduserContohnya, ia tidak mengesan pengguna biasa yang saya tambahkan untuk diri saya sendiri . GUI ACF mirip dengan antara muka web penghala berasaskan Linux khas anda:

ACF juga memerlukan penggalian untuk mencari dan memasang. Pengguna biasa tidak akan menemui sistem kecuali mendapat perhatian, dan walaupun tidak ada arahan pemasangan.

Storan dan rangkaian Alpine Linux

Alpine menyokong beberapa pilihan penyimpanan di luar RAM sahaja, dengan konfigurasi yang disimpan pada medium, dan kad flash. Walau bagaimanapun, dokumentasi, atau lebih tepatnya, menyukarkan pemahaman penyimpanan. Sebagai contoh, saya ingin membakar ISO khusus dengan aplikasi yang tidak tersedia di aports, kemungkinan kejadiannya cukup biasa. Dokumentasi untuk melakukannya adalah jalan buntu:

Empat setengah tahun nampaknya lama menunggu. Untuk bersikap adil, penyimpanan tidak pernah menjadi sebahagian besar dari persamaan Alpine, dengan fokus pada aplikasi tertanam, jadi tidak menghairankan bahawa ini harus menjadi kawasan yang lemah. Terdapat banyak pekerjaan yang sedang dilakukan di kebanyakan kawasan yang diharapkan dari distro Linux, seperti LVM, iSCSI, dan RAID, tetapi bersiaplah untuk menghabiskan sedikit masa untuk memahami dokumentasi , atau membaca kod sumber, untuk mengetahui semua keluar. 

Rangkaian dengan Alpine adalah kisah yang sangat berbeza daripada penyimpanan. Dokumentasi untuk rangkaian ditulis dengan lebih baik dan lebih lengkap, dan sering kali merangkumi amalan terbaik untuk menubuhkan rangkaian yang cekap. IP4, IP6, bonding, VLAN, bridging, dan hampir semua penyediaan rangkaian yang diinginkan disokong. Anda bahkan akan menemui arahan untuk mengatur sambungan internet satelit!

Konfigurasi boleh dilakukan dengan alat tradisional seperti ifconfig dan route, atau beberapa pakej baru seperti iproute2. Perlu diberi perhatian ialah subproyek menarik yang disebut Alpine Wall, alat konfigurasi firewall Linux. Malah PPP melalui saluran bersiri disokong, yang agak mengejutkan pada zaman ini.

Saya banyak belajar membaca dokumentasi ini, menemui beberapa petunjuk konfigurasi yang tidak saya ketahui sebelumnya, serta beberapa utiliti rangkaian yang belum diketahui. Bahagian dokumentasi ini bernilai penanda buku sebagai rujukan cepat untuk cara membuat rangkaian, walaupun anda tidak menggunakan Alpine Linux.

Peningkatan dan penurunan versi Alpine Linux

Kejuruteraan pelepasan Alpine Linux tidak sekuat atau formal seperti sistem matang seperti FreeBSD, tetapi merangkumi asas-asasnya. Dan sangat sesuai untuk kes penggunaan utama Alpine untuk hosting dan peralatan Docker.

Pada dasarnya terdapat dua aliran, tepi dan stabil. Edge adalah cabang peluncuran bergulir, gambaran dari mana sahaja pembangunan berlaku setiap enam bulan. Pakej bergerak melalui tepi dan, apabila siap, dipromosikan ke stabil / komuniti di mana ia disokong selama enam bulan oleh komuniti. Pakej yang bertahan dan terus berkembang akhirnya menjadikannya stabil / utama, di mana ia disokong selama dua tahun.

Sedikit penjagaan perlu dilakukan semasa menaik taraf dari cawangan 2.x hingga 3.x kerana perubahan perpustakaan C (dari uClibc ke musl). Sekiranya anda tidak berhati-hati, sistem akan gagal di pertengahan jalan. Menaik taraf pakej di sepanjang garis 3.x lebih mudah, walaupun masih merupakan proses manual yang digerakkan oleh skrip. Caranya untuk memahami proses peningkatan adalah dengan mendapatkan repositori APK yang betul (komuniti, tepi, atau utama), kosongkan cache, dan kemudian biarkan APK meningkatkan semua pakej dengan apk upgrade.

Menaik taraf kernel juga mudah, dan menggunakan skrip boot-setup untuk menulis kernel dan busybox baru ke media boot.

Secara keseluruhan, tidak banyak bahagian yang bergerak ke sistem Alpine, jadi setelah seni bina difahami, memikirkan peningkatan tidak sukar.

Sepintas lalu Linux Alpine

Alpine Linux adalah pilihan terbaik untuk sistem yang berorientasikan rangkaian dan satu tujuan. Pengesanan pencerobohan, pemantauan rangkaian, dan teleponi IP adalah contoh aplikasi yang baik untuk Alpine Linux. Dan ini adalah pilihan semula jadi untuk bekas. Aplikasi yang banyak menggunakan cakera harus diuji dengan teliti. Pengguna harus bersiap untuk meluangkan masa untuk terlibat dalam komuniti, dan menggulung lengan baju mereka agar tangan mereka kotor. Percubaan dan kesilapan akan diperlukan.