- BSD डेस्कटॉप और
chroot, jail का अक्सर उपयोग करने वाला एक उपयोगकर्ता Alpine Linux को आज़माते हुए पाता है कि इसकी security, simplicity और resource efficiency-केंद्रित डिज़ाइन BSD उपयोगकर्ताओं को परिचित लगती है
- छोटे आकार और सीमित dependencies की वजह से Alpine का उपयोग सिर्फ container base image के रूप में ही नहीं, बल्कि embedded systems, routers, mobile devices, servers और desktops तक व्यापक रूप से होता है
- इंस्टॉलेशन live environment में
setup-alpine चलाकर keymap, network, timezone, SSH, NTP जैसी बुनियादी settings को क्रम से सेट करने के तरीके से होता है
- पहली boot के बाद OpenRC,
musl, और busybox का संयोजन दिखाई देता है, और /etc/rc.conf व crond(8) जैसे तत्व BSD-style rc अनुभव से मेल खाते हैं
apk package management, repository settings, और ZFS install की संभावना तक देखने के बाद इसे testing और servers के लिए मुख्य Linux distribution के उम्मीदवार के रूप में गंभीरता से विचार करने लायक अच्छा प्रभाव मिला
BSD उपयोगकर्ताओं को परिचित लगने वाला Alpine का स्वभाव
- Alpine Linux security, simplicity और resource efficiency को महत्व देने वाले power users के लिए एक independent, non-commercial, general-purpose Linux distribution है
- user-space binaries को PIE(Position Independent Executables) और stack smashing protection के साथ compile किया जाता है, ताकि कुछ zero-day और vulnerability exploits के असर को कम किया जा सके
- Natanael Copa ने 2005 में इस project की उत्पत्ति पर चर्चा की थी, यानी Alpine अपेक्षा से पुराना project है
- BSD परिवार की तरह यह embedded systems, routers, mobile devices के अलावा सामान्य servers और desktops पर भी उपयोग होता है
- छोटे आकार और सीमित dependencies की वजह से यह Linux containers की base image के रूप में व्यापक रूप से इस्तेमाल होता है, और
chroot(8) में आसानी से चलाने के लिए alpine-chroot-install जैसे tools भी मौजूद हैं
- NetBSD
chroot(8) और FreeBSD jail को testing और deployment में बहुत उपयोग करने वाले उपयोगकर्ताओं के लिए यह विशेष रूप से दिलचस्प बिंदु है
इंस्टॉलेशन अनुभव
- Alpine ARM, PPC64, x86, x86_64 सहित कई builds उपलब्ध कराता है
- Xen ISO image को VM में boot किया गया, लेकिन Dom0 को DomU समझ लेना गलत चुनाव था
- Dom0 का अर्थ Xen hypervisor है, guest नहीं
- फिर भी boot और installation सामान्य ISO की तरह आगे बढ़ गए
- इंस्टॉलेशन live environment में
root और खाली password से login करने के बाद setup-alpine चलाकर किया जाता है
- इंस्टॉलेशन के दौरान keymap, networking, timezone, root authentication जैसे बुनियादी items क्रम से configure किए जाते हैं
- शुरुआत में SSH keys inject की जा सकती हैं
- बाद में orchestration tools से VM या servers के समूह deploy करते समय यह उपयोगी होता है
- OOB console न देने वाले hosting environments में भी यह मददगार है
- SSH server और NTP client चुने जा सकते हैं, इसलिए OpenSSH और openntpd चुनना संभव था
- इंस्टॉलेशन प्रक्रिया ने सही तरह से पहचान लिया कि यह Xen पर चल रहा है
- LVM configuration भी संभव है, लेकिन इस बार Alpine के अनुसार
sys partition वाली standard configuration चुनी गई
- यह configuration
ext4 का उपयोग करती है
पहली boot के बाद दिखने वाली system configuration
- पहली boot के बाद
dmesg(1) में यह पुष्टि की जा सकती है कि system OpenRC का उपयोग कर रहा है
- OpenRC एक init system है जो portability, छोटे आकार, speed, efficiency, transparency और security प्रदान करता है
- BSD-style rc scripts लिखने के अभ्यस्त उपयोगकर्ताओं को OpenRC बहुत परिचित लगेगा
/etc/rc.conf और crond(8) जैसे तत्व BSD उपयोगकर्ता अनुभव से मेल खाते हैं
- Devuan, Gentoo और Alpine जैसी Linux distributions के OpenRC उपयोग करने से Linux फिर से रोचक महसूस होता है
- Alpine, OpenRC के साथ musl शामिल करता है और busybox का उपयोग करता है
- musl और busybox, GCC और GNU coreutils की तुलना में अधिक सीमित हैं, लेकिन base system के छोटे आकार और कम attack surface में योगदान देते हैं
- llvm भी उपलब्ध है
- MirBSD Korn shell भी package के रूप में उपलब्ध है, और यह पसंदीदा interactive shells में से एक है
पैकेज प्रबंधन और repositories
- Alpine का डिफ़ॉल्ट package manager apk है
- Linux में आम तरीके की तरह
apk base system और packages को अलग नहीं मानता, बल्कि साथ में update करता है
- BSD की तरह इसे unprivileged copy के रूप में चलाया जा सकता है या नहीं, यह अभी तक जांचा नहीं गया है
- pkgsrc भी उपयोग किया जा सकता है, इसलिए एक विकल्प मौजूद है
- repository settings
/etc/apk/repositories में होती हैं
- installer द्वारा दिए गए दूसरे URL की comment हटाने पर community repository सक्रिय की जा सकती है
- Alpine में
testing repository भी है, और अपनी repository भी जोड़ी जा सकती है
- उपयोग सरल है, लेकिन पुरानी आदतों की वजह से कभी-कभी
apk add की जगह गलती से apt install टाइप हो जाता है
- आधिकारिक package web interface pkgs.alpinelinux.org पर है
- Alpine repositories को pkgs.org पर भी देखा जा सकता है
ZFS और server उम्मीदवार के रूप में मूल्यांकन
- कुछ packages install करने के बाद console-only laptop पर उपयोग होने वाली “ज़रूरी tools” configuration बनाई जा सकी
- सबसे चौंकाने वाले packages में से एक ZFS था
- install और kernel module load करना दो commands से संभव था
# apk add zfs zfs-lts
# modprobe zfs
- root filesystem को ZFS पर बनाना अधिक जटिल हो सकता है
- upgrade के बाद ZFS configuration कैसे काम करेगी, यह अभी तक जांचा नहीं गया है
- अब तक के अनुभव के आधार पर ही इसे testing और servers के लिए मुख्य Linux distribution के रूप में अपनाने पर गंभीरता से विचार किया जा सकता है
htop(1) और lsof(1) में पहचाने जा सकने वाले बहुत कम processes दिखना, OpenRC का उपयोग, सरल लगने वाला package management, और आसान configuration इसके फायदे हैं
- अगर कोई आधुनिक और functional “Occam’s Linux” है, तो Alpine उसकी छवि के काफ़ी करीब माना गया है
- busybox से अधिक सुविधाओं की ज़रूरत होने पर uutils आज़माया जा सकता है, लेकिन server पर इसकी ज़रूरत कम लगती है
1 टिप्पणियां
Hacker News की राय
सुरक्षा के नज़रिए से देखें तो आजकल ज़्यादातर Linux binaries PIE के साथ compile की जाती हैं
Ubuntu की किसी भी random binary पर
checksecचलाकर यह देखा जा सकता है, औरpip install pwntoolsसेchecksecinstall किया जा सकता हैदूसरी ओर, मेरी जानकारी में GLIBC के पास सबसे hardened heap implementations में से एक है, और double-free व दूसरे heap attacks के खिलाफ ज़्यादा mitigations भी हैं
इसलिए उस नज़रिए से Alpine, musl इस्तेमाल करने की वजह से कम सुरक्षित लग सकता है, लेकिन इसका छोटा और आसानी से समझ आने वाला system होना सुरक्षा के लिहाज़ से सच में एक बड़ा फ़ायदा है
checksecचलाता हूँ, और processes हमेशा ऐसे ही दिखते हैं। पूरा output लंबा है इसलिए छोड़ा गया है, लेकिन Alpine के build किए हुए किसी भी चीज़ में मैंने ये flags गायब नहीं देखेCOMMAND 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 enabledईमानदारी से कहूँ तो modern Windows और macOS — दोनों के पास बेहतर security architecture है
मैं भी BSD पक्ष का ही आदमी हूँ, और संयोग से इसी हफ़्ते मैंने bhyve पर VM में पहली बार Alpine चलाया
असली बात BusyBox है। अगर
/binऔर/sbinutilities को अलग-अलग binaries होने की ज़रूरत न हो, तो user space बहुत छोटा हो जाता है और boot भी तेज़ होता है। Tmux और zsh जैसा थोड़ा-बहुत install करने के बाद यह ज़्यादातर Unix उपयोगों के लिए काफ़ी थाअंतिम setup तक पहुँचने के लिए मुझे
apkसे काफ़ी कुछ install करना पड़ा, लेकिन कुल मिलाकर यह लंबे समय में मिला सबसे अच्छा Linux अनुभव था। ZFS का built-in होना अच्छा है, और bhyve के ZFS-based operation के हिसाब से virtio connection अगर थोड़ा ज़्यादा स्पष्ट होता तो और अच्छा रहताफिर भी यह सुनकर अच्छा लगा कि शायद कोई sane Linux distribution है, तो जब कभी Linux box की ज़रूरत पड़ेगी, इसे आज़माऊँगा। हालांकि ऐसा बहुत कम होता है
apkcommand से काम लगभग हो जाता हैAlpine wiki पर root filesystem को ZFS पर install करने का दस्तावेज़ भी काफ़ी अच्छा है: https://wiki.alpinelinux.org/wiki/Root_on_ZFS_with_native_en...
अगर आप BSD user हैं, तो Void Linux भी पसंद आ सकता है। यह NetBSD developer xtraeme द्वारा बनाई गई distribution है, इसमें glibc और musl दोनों versions हैं, और init system के रूप में runit का इस्तेमाल होता है
xbps-srcसे source से packages build भी किए जा सकते हैंhttps://voidlinux.org/
बस इतना ध्यान रहे कि मैंने केवल हल्के बदलावों वाला xfce install ही इस्तेमाल किया है। complex multi-user setup में runit, systemd की तुलना में कम built-in features देता है, इसलिए थोड़ा ज़्यादा झंझट हो सकता है
मुझे लगा था कोई यह ज़रूर कहेगा कि BSD की शान माने जाने वाले man pages Alpine में default रूप से शामिल नहीं होते। यही उन वजहों में से एक थी जिनके कारण मैंने travel laptop पर Alpine इस्तेमाल नहीं किया, और अब OpenBSD इस्तेमाल करता हूँ
क्या Alpine में ऐसा कोई configuration option है जो packages लेते समय documentation को हमेशा install कर दे? या फिर हर बार
-docpackages manually install करने पड़ते हैं?docsmeta package install कर लें। उसके बाद यह install की जाने वाली चीज़ों के अनुसार*-docpackages खींच लाएगामुझे ईमानदारी से बिल्कुल समझ नहीं आता कि लोगों को OpenRC जैसी चीज़ें आकर्षक क्यों लगती हैं। अगर तरीका निगरानी-आधारित है, तो मेरे हिसाब से वह उस तरीके से बेहतर ही है जिसमें PID इधर-उधर छूट जाते हैं, उन्हें PID फ़ाइल में सहेज दिया जाता है, और फिर उम्मीद की जाती है कि 3 हफ्ते बाद भी वही मान अब भी चल रहे daemon की ओर इशारा करेगा
ऊपर से कुछ मामलों में किसी खास process name को
pgrepकरके service management का काम किया जाता है। मैं इस बात से कुछ हद तक सहमत हूँ कि हर चीज़ को default रूप से auto-restart नहीं होना चाहिए, लेकिन इस तरह की सोच वाले लोग असल में यही एक फायदा गिना सकते हैंऔर आखिर में ये चीज़ें syslog पर बहुत ज़्यादा निर्भर करती हैं, जो अपने आप में 80 के दशक की तकनीक है।
multilogयाsvlogdजैसे टूल बेहतर बनाए जा सकते हैं ताकि कई टूलों की घटनाओं का क्रम एक नज़र में दिखाने वाला central view आसान हो, लेकिन logs को धुंधली श्रेणियों में बाँधना और किसी को भी किसी भी नाम से कहीं भी log लिखने देना अजीब लगता हैhttps://mastodon.social/@ariadne@treehouse.systems/112044942...
https://mastodon.social/@ariadne@treehouse.systems/112214386...
PID1 के अंदर बहुत ज़्यादा चीज़ें ठूँस दी गई हैं, और यह memory-safe नहीं होने वाली भाषा में लिखा गया है। मुझे कोई तकनीकी वजह नहीं दिखती कि इसे एक minimal PID1 और कुछ setuid programs में बाँटा न जा सके
Docker container के अंदर systemd चला पाना एक बात हो सकती है, लेकिन Red Hat/IBM शायद अपने containerization टूल जैसे systemd-nspawn का उपयोग करवाना ज़्यादा पसंद करेगा, इसलिए मुझे नहीं लगता कि वे इसे बहुत ज़ोर से चाहेंगे। मौजूदा संरचना में यह सुरक्षा के नज़रिए से कभी भी सही नहीं ठहर सकता
Alpine के कुछ दिलचस्प फायदे हैं। जब Nix उपयोगकर्ता declarative package management का दिखावा करते हैं, तो आप सीधे
/etc/apk/worldसंपादित करके औरapk fixचलाकर दिखा सकते हैं कि यह Nix के बिना भी कैसे किया जा सकता है/var/lib/portage/worldमें, चुने हुए sets/var/lib/portage/world_setsमें, और set definitions/etc/portage/sets/में रखे जा सकते हैंइससे packages को श्रेणियों के हिसाब से बाँटना, ज़रूरत वाले सिस्टम पर केवल कुछ ही install करना, और फ़ाइलों में मनचाहे comments जोड़ना संभव होता है।
apk fixके बराबरemerge -uDU @world && emerge -cहै, हालाँकि यह थोड़ा ज़्यादा बोझिल हैAlpine में
apk add -t setname pkg1 pkg2 pkg3से set जैसी चीज़ बनाई जा सकती है, और इससे चुने हुए packages पर निर्भर एक dummy package बनता है। मैं आम तौर पर Gentoo जैसा अहसास लाने के लिए/etc/apk/sets/में shell scripts बनाता हूँ, लेकिन यह हमेशा एक जैसा नहीं होतापहले Docker में Alpine चलाने को लेकर performance संबंधी पोस्टें थीं, और मुझे याद है कि लोग Debian/Ubuntu इस्तेमाल करने की सलाह देते थे
Alpine के धीमे होने पर लेख:
https://pythonspeed.com/articles/alpine-docker-python/
https://superuser.com/questions/1219609/why-is-the-alpine-do...
Alpine के पक्ष में लेख:
https://nickjanetakis.com/blog/benchmarking-debian-vs-alpine...
जानना दिलचस्प होगा कि क्या यह बात आज भी लागू होती है
फिर भी performance के लिहाज़ से benchmark चलाकर वास्तविक आँकड़े देखना दिलचस्प होगा
क्या musl अब भी
pthread_attr_setaffinity_npको support नहीं करता? अगर हाँ, तो कुछ software चल ही नहीं सकते, और सबसे बड़ा उदाहरण PyTorch हैकई स्थितियों में performance से ज़्यादा सरलता या सुरक्षा अधिक महत्वपूर्ण चिंता होती है
BSD और Linux के बीच मुझे जो ठीक-ठाक मध्य बिंदु मिला, वह Slackware है। खुलकर Unix-जैसा, जटिल नहीं, और Slackbuilds के ज़रिए इसका अपना समृद्ध ports tree भी है
पहले मुझे यह इसलिए पसंद था क्योंकि यह बिना दखल देने वाली minimal distribution थी, और मुझे लगता था कि यह थोड़ा अधिक technical लोगों के लिए है
लेकिन जब भी आप किसी समस्या में गहराई से जाते, community कभी-कभी इस वजह से hostile हो जाती कि आपने full install नहीं किया। full install इसलिए recommended था, और अगर आप ऐसा न करें तो samba न होने की वजह से mplayer न चलने जैसी बेवकूफ़ाना dependency समस्याएँ भी आती थीं
मेरे हिसाब से Alpine हर मायने में Slackware से बेहतर है
तो Alpine Linux असल में GNU/Linux नहीं निकला। यह मुझे पता नहीं था
तो क्या इसे BusyBox/Linux कहना चाहिए?