- BSD masaüstü,
chroot ve jail'i sık kullanan bir kullanıcı, Alpine Linux'u denerken güvenlik, sadelik ve kaynak verimliliği odaklı tasarımının BSD kullanıcılarına tanıdık geldiğini düşünüyor
- Küçük boyutu ve sınırlı bağımlılıkları sayesinde Alpine, yalnızca container base image olarak değil; gömülü sistemler, yönlendiriciler, mobil cihazlar, sunucular ve masaüstlerinde de geniş kullanım alanı buluyor
- Kurulum, canlı ortamda
setup-alpine komutunu çalıştırıp keymap, ağ, saat dilimi, SSH ve NTP gibi temel ayarları sırayla yapılandırma şeklinde ilerliyor
- İlk açılıştan sonra OpenRC,
musl ve busybox birleşimi öne çıkıyor; /etc/rc.conf ve crond(8) gibi bileşenler BSD tarzı rc deneyimiyle örtüşüyor
apk paket yönetimi, depo yapılandırması ve ZFS kurulum olasılığı incelendikten sonra, test ve sunucu kullanımı için ana Linux dağıtımı adayı olarak ciddi biçimde değerlendirilecek kadar iyi bir izlenim bırakıyor
BSD kullanıcılarına tanıdık gelen Alpine karakteri
- Alpine Linux; güvenlik, sadelik ve kaynak verimliliğini önemseyen ileri düzey kullanıcılar için bağımsız, ticari olmayan, genel amaçlı bir Linux dağıtımı
- Kullanıcı alanı ikilileri, PIE (Position Independent Executables) ve stack smashing protection ile derleniyor; böylece belirli zero-day durumları ve güvenlik açığı istismarlarını azaltmaya odaklanıyor
- Natanael Copa'nın 2005'te projenin kökenlerinden söz etmiş olması, Alpine'ın beklenenden daha eski bir proje olduğunu gösteriyor
- BSD ailesinde olduğu gibi, gömülü sistemler, yönlendiriciler ve mobil cihazların yanı sıra genel amaçlı sunucu ve masaüstlerinde de kullanılıyor
- Küçük boyutu ve sınırlı bağımlılıkları nedeniyle Linux container'ları için base image olarak yaygın biçimde kullanılıyor; ayrıca
chroot(8) içinde kolayca çalıştırmak için alpine-chroot-install gibi araçlar da bulunuyor
- NetBSD
chroot(8) ve FreeBSD jail'i test ve dağıtım için sık kullanan kullanıcılar açısından özellikle ilgi çekici bir nokta
Kurulum deneyimi
- Alpine; ARM, PPC64, x86 ve x86_64 dahil çeşitli derlemeler sunuyor
- Xen ISO imajı bir VM'de önyüklendi, ancak Dom0'ı DomU sanmak hatalı bir seçimdi
- Dom0, Xen hypervisor ortamını ifade ediyor; misafir sistem değil
- Yine de standart ISO gibi açılıp kurulumu sürdürebildi
- Kurulum, canlı ortamda
root ve boş parola ile oturum açtıktan sonra setup-alpine komutunu çalıştırma şeklinde yapılıyor
- Kurulum sırasında keymap, ağ, saat dilimi ve root kimlik doğrulaması gibi temel başlıklar sırayla ayarlanıyor
- Başlangıç aşamasında SSH anahtarı enjekte edilebiliyor
- Bu, daha sonra orkestrasyon araçlarıyla VM veya sunucu kümeleri dağıtırken faydalı oluyor
- OOB konsol sunmayan barındırma ortamlarında da işe yarıyor
- SSH sunucusu ve NTP istemcisi seçilebiliyor; OpenSSH ve openntpd tercih edilebiliyor
- Kurulum süreci, Xen üzerinde çalıştığını doğru biçimde algılıyor
- LVM yapılandırması da mümkün, ancak bu denemede Alpine'ın
sys bölümü dediği standart düzen seçilmiş
İlk açılıştan sonra görülen sistem yapısı
- İlk açılıştan sonra
dmesg(1) çıktısında sistemin OpenRC kullandığı doğrulanabiliyor
- OpenRC, taşınabilir, küçük, hızlı, verimli, şeffaf ve güvenli bir init sistemi
- BSD tarzı rc betikleri yazmaya alışkın kullanıcılar için OpenRC son derece tanıdık geliyor
/etc/rc.conf ve crond(8) gibi unsurlar BSD kullanıcı deneyimiyle kesişiyor
- Devuan, Gentoo ve Alpine gibi OpenRC kullanan Linux dağıtımlarının bulunması, Linux'u yeniden eğlenceli hissettiriyor
- Alpine, OpenRC ile birlikte musl içeriyor ve busybox kullanıyor
- musl ve busybox, GCC ve GNU coreutils'e göre daha sınırlı olsa da taban sistemin küçük kalmasına ve saldırı yüzeyinin azalmasına katkı sağlıyor
- llvm da kullanılabiliyor
- MirBSD Korn shell de paket olarak sunuluyor ve tercih edilen etkileşimli kabuklardan biri olarak anılıyor
Paket yönetimi ve depolar
- Alpine'ın varsayılan paket yöneticisi apk
- Linux'ta yaygın olduğu gibi
apk, taban sistem ile paketleri ayırmadan birlikte güncelliyor
- BSD'deki gibi yetkisiz bir kopya olarak çalıştırılıp çalıştırılamadığı henüz kontrol edilmemiş
- pkgsrc da kullanılabildiği için alternatif mevcut
- Depo yapılandırması
/etc/apk/repositories içinde yer alıyor
- Kurulum aracının verdiği ikinci URL'deki yorum kaldırılırsa community deposu etkinleştirilebiliyor
- Alpine'da bir
testing deposu da bulunuyor ve özel depolar eklemek de mümkün
- Kullanımı basit olsa da eski alışkanlıklar nedeniyle bazen
apk add yerine yanlışlıkla apt install yazılabiliyor
- Resmî paket web arayüzü pkgs.alpinelinux.org adresinde
- Alpine depoları pkgs.org üzerinden de incelenebiliyor
ZFS ve sunucu adayı olarak değerlendirme
- Birkaç paket kurulduktan sonra, yalnızca konsol kullanan bir dizüstünde kullanılan “olmazsa olmaz araçlar” düzenine ulaşılabildi
- En şaşırtıcı paketlerden biri ZFS oldu
- Kurulum ve kernel modülünü yükleme iki komutla yapılabildi
# apk add zfs zfs-lts
# modprobe zfs
- Root filesystem'i ZFS olarak yapılandırmak daha karmaşık olabilir
- Yükseltme sonrasında ZFS yapılandırmasının nasıl davranacağı henüz doğrulanmış değil
- Şimdiye kadarki deneyim bile, test ve sunucu kullanımı için ana Linux dağıtımı olarak geçişi ciddi biçimde düşünmeye yetecek kadar olumlu bir izlenim bırakmış durumda
htop(1) ve lsof(1) içinde tanınabilen az sayıdaki süreç, OpenRC kullanımı, sade görünen paket yönetimi ve kolay yapılandırma öne çıkan artılar arasında
- Modern ve işlevsel bir “Occam’s Linux” varsa, Alpine'ın buna oldukça yakın olduğu düşünülüyor
- busybox'tan daha fazla özelliğe ihtiyaç duyulursa uutils denenebilir, ancak sunucu tarafında buna ihtiyaç az görünüyor
1 yorum
Hacker News yorumları
Güvenlik açısından bakarsak, günümüzde Linux ikilileri çoğunlukla PIE olarak derleniyor
Ubuntu’daki rastgele bir ikili üzerinde
checksecçalıştırırsanız bu özellik görünüyor;checksecipip install pwntoolsile kurabilirsinizÖte yandan GLIBC, bildiğim kadarıyla en güçlendirilmiş heap uygulamasına sahip; double free ve diğer heap saldırılarına karşı daha fazla hafifletme önlemi de var
Bu yüzden bu açıdan Alpine’in musl kullandığı için daha az güvenli olduğu söylenebilir; ancak küçük ve anlaşılması kolay bir sistem olması güvenlikte gerçekten bir avantaj
checksecçalıştırıyorum; süreçlerin hepsi böyle görünüyor. Tam çıktı uzun olduğu için atlıyorum ama Alpine’in derlediği şeylerde bu bayrakların eksik olduğunu hiç görmedimCOMMAND 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 enabledAçıkçası modern Windows ve macOS’un ikisinin de daha iyi bir güvenlik mimarisine sahip olduğunu düşünüyorum
Ben de BSD tarafındayım ve tesadüfen bu hafta ilk kez bhyve üzerinde bir VM’de Alpine çalıştırdım
Kilit nokta BusyBox.
/binve/sbinyardımcı araçlarının her birinin bağımsız ikili olması gerekmiyorsa kullanıcı alanı çok küçük oluyor ve sistem de hızlı açılıyor. Tmux, zsh gibi birkaç şey kurunca çoğu Unix kullanımı için yeterliydiSon ortama ulaşmak için epey
apkkurulumu yapmam gerekti ama genel olarak uzun zamandır yaşadığım en iyi Linux deneyimiydi. ZFS’in varsayılan olarak gelmesi ve bhyve’in ZFS tabanlı çalışmasına yönelik virtio bağlantısının daha açık olması güzel olurduYine de aklı başında bir Linux dağıtımı olabileceğini duymak sevindirici; bir Linux kutusuna ihtiyaç duyarsam deneyeceğim. Gerçi bu oldukça nadir oluyor
apkkomutuyla neredeyse kuruluyorAlpine wiki’de kök dosya sistemini ZFS olarak kurmak için de oldukça iyi bir belge var: https://wiki.alpinelinux.org/wiki/Root_on_ZFS_with_native_en...
BSD kullanıcısıysanız Void Linux da hoşunuza gidebilir. NetBSD geliştiricisi xtraeme tarafından oluşturulmuş bir dağıtım; glibc ve musl sürümleri var ve init sistemi olarak runit kullanıyor
xbps-srcile paketleri kaynaktan da derleyebilirsinizhttps://voidlinux.org/
Yalnız şunu belirtmek gerekir: yalnızca çok az değiştirilmiş xfce kurulumları kullandım. Karmaşık çok kullanıcılı yapılandırmalar, runit’in systemd’ye göre varsayılan olarak daha az işlev içermesi nedeniyle biraz daha zahmetli olabilir
BSD’lerin övündüğü man sayfalarının Alpine’de varsayılan olarak gelmediği konusunun açılacağını sanmıştım. Seyahat dizüstü bilgisayarımda Alpine kullanmamamın nedenlerinden biri buydu; şu anda OpenBSD kullanıyorum
Alpine’de paket alırken belgelerin her zaman kurulmasını sağlayan bir ayar seçeneğini mi kaçırdım? Yoksa her seferinde
-docpaketlerini elle kurmaktan başka yol yok mu?docsmeta paketini kurmanız yeterli. Daha sonra kurduğunuz şeylere uygun*-docpaketlerini çekerİnsanların OpenRC gibi şeyleri neden çekici bulduğunu açıkçası hiç anlamıyorum. İzlemeye dayalı herhangi bir yaklaşımın, PID’leri sağa sola saçıp bunları bir PID dosyasına kaydettikten sonra 3 hafta sonra bile o değerin hâlâ başlatılan daemon’ı işaret etmesini ummaktan daha iyi olduğunu düşünüyorum
Üstelik bazı durumlarda belirli bir süreç adını
pgrepederek servis yönetimi işlerini hallediyorlar. Her şeyi varsayılan olarak otomatik yeniden başlatmamak gerektiği fikrine bir ölçüde katılıyorum, ama bu kesimin öne sürebileceği avantaj fiilen bundan ibaretAyrıca sonuçta bunlar syslog’a büyük ölçüde bağımlı; bu da 80’ler teknolojisinin ta kendisi.
multilogveyasvlogdgibi araçlar, birden fazla aracın olay sırasını tek bakışta gösteren merkezi bir görünümü daha kolay sunacak şekilde geliştirilebilir; ama günlükleri belirsiz kategorilerde toplamak ve herkesin herhangi bir adla herhangi bir yere log bırakabilmesini sağlamak tuhaf geliyorhttps://mastodon.social/@ariadne@treehouse.systems/112044942...
https://mastodon.social/@ariadne@treehouse.systems/112214386...
PID1’in içinde çok fazla iş var ve bellek güvenli olmayan bir dille yazılmış. Bunun minimal bir PID1 ve birkaç setuid programa bölünememesi için teknik bir neden göremiyorum
Aklıma yalnızca Docker konteyneri içinde systemd çalıştırabilmek geliyor; ama Red Hat/IBM systemd-nspawn gibi kendi konteynerleştirme araçlarını kullanmanızı tercih ettiğinden bunu çok istemez gibi. Mevcut yapısıyla güvenlik açısından asla makul hâle gelmesinin zor olduğunu düşünüyorum
Alpine’ın ilginç bir avantajı var. Nix kullanıcıları bildirimsel paket yönetimiyle övündüğünde
/etc/apk/worlddosyasını doğrudan düzenleyipapk fixçalıştırarak bunun Nix olmadan nasıl yapılabildiğini gösterebilirsiniz/var/lib/portage/world, seçilen kümeler/var/lib/portage/world_sets, küme tanımları da/etc/portage/sets/altında tutulabilirBöylece paketleri kategorilere ayırabilir, yalnızca gereken sistemlere bazılarını kurabilir ve dosyalara istediğiniz gibi yorum ekleyebilirsiniz.
apk fixkarşılığıemerge -uDU @world && emerge -c; biraz daha hantal gerçiAlpine’da da
apk add -t setname pkg1 pkg2 pkg3ile küme benzeri bir şey oluşturabilirsiniz; bu, seçilen paketlere bağımlı sahte bir paket oluşturur. Ben genelde Gentoo hissini taklit etmek için/etc/apk/sets/altında shell betikleri oluşturuyorum ama her zaman aynı olmuyorEskiden Docker’da Alpine çalıştırırken performansla ilgili yazılar vardı ve Debian/Ubuntu kullanılması önerilirdi diye hatırlıyorum
Yavaş Alpine ile ilgili yazı:
https://pythonspeed.com/articles/alpine-docker-python/
https://superuser.com/questions/1219609/why-is-the-alpine-do...
Alpine’a olumlu bakan yazı:
https://nickjanetakis.com/blog/benchmarking-debian-vs-alpine...
Bu konunun hâlâ geçerli olup olmadığını merak ediyorum
Yine de performans açısından benchmark çalıştırıp gerçek sayıları görmek ilginç olurdu
musl hâlâ
pthread_attr_setaffinity_npdesteklemiyor değil mi? O zaman bazı yazılımlar çalıştırılamaz; bunun en büyük örneği PyTorchBirçok durumda sadelik veya güvenlik performanstan daha önemli bir kaygı
BSD ile Linux arasında bulduğum uygun orta nokta Slackware. Gururla Unix vari, karmaşık değil ve Slackbuilds üzerinden zengin bir kendi ports ağacı da var
Eskiden araya girmeyen minimal bir dağıtım olduğu için severdim ve biraz daha teknik kişileri hedeflediğini düşünürdüm
Ama bir sorunu kurcalarken tam kurulum yapmadığınız için topluluk bazen düşmanca davranıyordu. Gerekçe, tam kurulumun önerilen yöntem olmasıydı; böyle yapmayınca samba olmadığı için mplayer’ın çalışmaması gibi aptalca bağımlılık sorunları da çıkıyordu
Alpine’ın her açıdan Slackware’e göre bir iyileştirme olduğunu düşünüyorum
Alpine Linux aslında GNU/Linux değilmiş. Bilmiyordum
O zaman BusyBox/Linux mu?