सबसे पहले, एक अप-फ्रंट संघर्ष-ऑफ-डिस्क्लेमर डिस्क्लेमर: मैं एक लंबे समय का गोबोलिनक्स डेवलपर हूं।
दूसरा, डोमेन विशेषज्ञता का एक अप-फ्रंट दावा: मैं एक लंबे समय तक GoboLinux डेवलपर हूं।
वर्तमान उपयोग में कुछ अलग संरचनाएं हैं। GoboLinux में एक है, और GNU Stow , Homebrew , आदि जैसे उपकरण , कुछ इसी तरह का उपयोग करते हैं (मुख्य रूप से उपयोगकर्ता कार्यक्रमों के लिए)। NixOS कार्यक्रमों और जीवन के दर्शन के लिए एक गैर-मानक पदानुक्रम का उपयोग करता है। यह एक सामान्य रूप से सामान्य LFS प्रयोग भी है।
मैं उन सभी का वर्णन करने जा रहा हूं, और फिर अनुभव से टिप्पणी करता हूं कि व्यवहार में कैसे काम करता है ("व्यवहार्यता")। संक्षिप्त उत्तर यह है कि हां, यह संभव है, लेकिन आपको वास्तव में यह चाहिए ।
GoboLinux
GoboLinux में आपके द्वारा वर्णित एक संरचना के समान है। सॉफ़्टवेयर स्थापित है /Programs
: /Programs/ZSH/5.0.8
इसमें सामान्य bin
/ lib
/ ... निर्देशिका में ZSH 5.0.8 से संबंधित सभी फाइलें हैं । सिस्टम उपकरण एक /System/Links
पदानुक्रम के तहत उन फ़ाइलों के लिए सहानुभूति बनाते हैं, जो /usr
¹ पर मैप करते हैं । PATH
चर केवल एक एकीकृत निष्पादन निर्देशिका शामिल है, और LD_LIBRARY_PATH
अप्रयुक्त है। सॉफ़्टवेयर के कई संस्करण एक बार में सह-अस्तित्व में आ सकते हैं, लेकिन दिए गए नाम ( bin/zsh
) द्वारा केवल एक फ़ाइल को एक बार में सक्रिय रूप से जोड़ा जाएगा। आप अपने पूरे रास्तों से दूसरों तक पहुँच सकते हैं।
संगतता सीलिंक्स का एक सेट भी मौजूद है, इसलिए /bin
और /usr/bin
एकीकृत निष्पादन योग्य निर्देशिका के लिए मैप, और इसी तरह। इससे रन टाइम में सॉफ्टवेयर के लिए जीवन आसान हो जाता है। एक कर्नेल पैच, GoboHide, फ़ाइल संगतता (लेकिन अभी भी ट्रैवर्सेबल) से छिपी हुई उन संगतता सीलिंक को अनुमति देता है।
एक अन्य उत्तर में, आपको कर्नेल कोड को संशोधित करने की आवश्यकता नहीं है: गोबाहाइड विशुद्ध रूप से कॉस्मेटिक है, और कर्नेल सामान्य रूप से उपयोगकर्ता-अंतरिक्ष पथों पर निर्भर नहीं करता है। GoboLinux में एक bespoke init प्रणाली है, लेकिन ऐसा करने के लिए भी आवश्यक नहीं है।
टैगलाइन हमेशा "फ़ाइल सिस्टम पैकेज मैनेजर है", लेकिन सिस्टम में यथोचित साधारण पैकेज-प्रबंधन उपकरण हैं। आप का उपयोग कर सब कुछ कर सकते हैं cp
, rm
और ln
हालांकि,।
यदि आप GoboLinux का उपयोग करना चाहते हैं, तो आपका बहुत स्वागत है। मैं नोट करूंगा, हालांकि, यह एक छोटी सी विकास टीम है, और आपको यह पता लगने की संभावना है कि कुछ सॉफ़्टवेयर जो आप चाहते हैं वह पैक नहीं किया गया है यदि कोई पहले इसका उपयोग नहीं करना चाहता है। अच्छी खबर यह है कि सिस्टम के लिए एक कार्यक्रम बनाने के लिए आम तौर पर यह काफी आसान है (एक मानक "नुस्खा" लगभग तीन लाइनों लंबा है); बुरी खबर यह है कि कभी-कभी यह अप्रिय रूप से जटिल होता है, जिसे मैं और नीचे कवर करूंगा।
प्रकाशन
कुछ "प्रकाशन" हैं। मैंने linux.conf.au 2010 में सिस्टम पर एक पूरी प्रस्तुति दी जिसमें आम तौर पर सब कुछ शामिल है, जो वीडियो में उपलब्ध है: ogv mp4 (आपके स्थानीय लिनक्स ऑस्ट्रेलिया दर्पण पर भी); मैंने गद्य में अपने नोट्स भी लिखे । कुछ पुराने दस्तावेज़ भी हैं, जिनमें प्रसिद्ध " I am clueless " शामिल नहीं है , GoboLinux वेबसाइट पर , जो कुछ आपत्तियों और मुद्दों को संबोधित करता है। मुझे लगता है कि हम इन दिनों थोड़ा कम गूँज-हो रहे हैं, और मुझे शक है कि भविष्य में रिलीज़ /usr
होने वाली सिम्बिंक के लिए बेस लोकेशन के रूप में अपनाया जाएगा ।
NixOS
निक्सोस प्रत्येक इंस्टाल्ड प्रोग्राम को अपनी खुद की डायरेक्टरी के अंतर्गत रखता है /nix/store
। उन निर्देशिकाओं को कुछ इस तरह नामित किया जाता है /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/
- एक क्रिप्टोग्राफ़िक हैश उस कार्यक्रम के लिए निर्भरता और कॉन्फ़िगरेशन के पूरे सेट का प्रतिनिधित्व करता है। उस निर्देशिका के अंदर स्थानीय रूप से अधिक-या-कम सामान्य स्थानों के साथ सभी संबद्ध फाइलें हैं।
यह आपको एक ही बार में कई संस्करण रखने और उनमें से किसी का भी उपयोग करने की अनुमति देता है। निक्सोस के पास एक संपूर्ण दर्शन है जो इसे प्रतिलिपि प्रस्तुत करने योग्य कॉन्फ़िगरेशन से जुड़ा हुआ है: यह अनिवार्य रूप से एक कॉन्फ़िगरेशन प्रबंधन प्रणाली है जिसे शुरू से इसमें बेक किया गया है। यह उपयोगकर्ता को स्थापित कार्यक्रमों की सही दुनिया को पेश करने के लिए कुछ पर्यावरणीय हेरफेर पर निर्भर करता है।
LFS
लिनक्स से स्क्रैच के माध्यम से जाना और आप जो पदानुक्रम चाहते हैं, उसे पूरी तरह से सेट करना बिल्कुल सरल है : बस निर्देशिकाएं बनाएं और सही जगह पर स्थापित करने के लिए सब कुछ कॉन्फ़िगर करें। मैंने इसे GoboLinux प्रयोगों के निर्माण में कुछ बार किया है, और यह सादे LFS की तुलना में बहुत कठिन नहीं है। आपको उस स्थिति में अनुकूलता को सहानुभूति बनाने की आवश्यकता है; अन्यथा यह काफी कठिन है, लेकिन यूनियन माउंट का सावधानीपूर्वक उपयोग शायद इससे बच सकता है यदि आप वास्तव में चाहते थे।
मुझे लगता है कि एक बिंदु पर ठीक उसी के बारे में एक एलएफएस संकेत था , लेकिन मैं अब इसे ढूंढ नहीं पा रहा हूं।
व्यवहार्यता पर
एफएचएस के बारे में बात यह है कि यह एक मानक है, यह बहुत सामान्य है, और यह उस समय व्यापक रूप से मौजूदा उपयोग को दर्शाता है जब यह लिखा गया था। अधिकांश उपयोगकर्ता कभी भी उस सिस्टम पर नहीं होंगे जो सार में उस लेआउट का पालन नहीं करता है। उसी का नतीजा है कि बहुत सारे सॉफ्टवेयर में इस पर अव्यक्त निर्भरता है कि किसी को एहसास नहीं होता है, अक्सर पूरी तरह से अनजाने में।
उन सभी लिपियों के साथ #!/bin/bash
? यदि आपके पास बैश नहीं है तो अच्छा नहीं है। यही कारण है कि GoboLinux उन सभी संगतता symlinks है; यह सिर्फ व्यावहारिक है। बहुत सारे सॉफ्टवेयर या तो निर्माण के समय या गैर-मानक लेआउट के तहत रन टाइम पर कार्य करने में विफल होते हैं, और फिर इसे सही करने के लिए पैचिंग की आवश्यकता होती है, अक्सर काफी घुसपैठ के साथ।
आपका मूल ऑटोकॉन्फ़ प्रोग्राम आमतौर पर ख़ुशी से स्वयं को स्थापित करेगा जहाँ भी आप इसे बताते हैं, और सही में पास होने की प्रक्रिया को स्वचालित करना काफी आसान है --prefix
। अन्य बिल्ड सिस्टम हमेशा इतने अच्छे नहीं होते हैं, या तो जानबूझकर पदानुक्रम में पकाना, या प्रमुख लेखकों द्वारा गैर-पोर्टेबल कॉन्फ़िगरेशन लिखने के लिए। सीएमके बाद की श्रेणी में एक प्रमुख अपराधी है। इसका मतलब है कि यदि आप इस दुनिया में रहना चाहते हैं, तो आपको अन्य लोगों की बिल्ड सिस्टम में बहुत अधिक काम करने के लिए तैयार रहना होगा। संकलन के दौरान गतिशील रूप से उत्पन्न फ़ाइलों को पैच करना एक वास्तविक परेशानी है।
रनटाइम फिर से एक और मामला है। कई कार्यक्रमों के बारे में धारणा है कि उनकी अपनी फाइलें, या किसी और की फाइलें, या तो उनके सापेक्ष पाई जाती हैं या बिल्कुल। जब आप एक सुसंगत दृश्य को प्रस्तुत करने के लिए सीमलिंक का उपयोग करना शुरू करते हैं, तो बहुत सारे कार्यक्रमों में उन्हें (या कभी-कभी, यकीनन सही व्यवहार होता है जो आपके लिए अयोग्य होता है)। उदाहरण के लिए, एक उपकरण foobar
इसके baz
आगे, या में निष्पादन योग्य को खोजने की उम्मीद कर सकता है ../sbin
। यह निर्भर करता है कि वह अपना सिम्लिंक पढ़ता है या नहीं, वे दो अलग-अलग जगह हो सकते हैं, और उनमें से कोई भी सही नहीं हो सकता है।
एक संयुक्त समस्या /usr/share
निर्देशिका है। यह साझा फ़ाइलों के लिए है, निश्चित रूप से, लेकिन जब आप हर कार्यक्रम को अपने उपसर्ग में रखते हैं तो वे अब वास्तव में साझा नहीं होते हैं। यह मानक आइकन और पसंद को खोजने में असमर्थ कार्यक्रमों की ओर जाता है। GoboLinux ने इसे बहुत ही बदसूरत तरीके से निपटाया: निर्माण के समय, लिंक $prefix/share
करने के लिए एक सहानुभूति थी $prefix/Shared
और निर्माण के बाद लिंक को वैश्विक share
निर्देशिका में इंगित किया गया था । यह अब share
(और अन्य निर्देशिकाओं) से निपटने के लिए संकलन-समय सैंडबॉक्सिंग और फ़ाइल आंदोलन का उपयोग करता है , लेकिन लिंक पढ़ने से रनटाइम त्रुटियां अभी भी एक मुद्दा हो सकती हैं।
कई कार्यक्रमों के सूट एक और समस्या है। GoboLinux ने GNOME को पूरी तरह से काम करते हुए कभी नहीं देखा है, और मेरा मानना है कि NixOS के पास भी नहीं है, क्योंकि लेआउट अन्योन्याश्रय इतने बेक किए गए हैं कि यह उन सभी को ठीक करने के लिए असाध्य है।
तो, हाँ, यह संभव है , लेकिन:
- सिर्फ काम करने के काम में काफी काम शामिल है।
- कुछ सॉफ्टवेयर बस कभी काम नहीं कर सकते हैं।
- लोग आपको मजाकिया लगेंगे।
उन सभी को आप के लिए एक समस्या हो सकती है या नहीं हो सकती है।
14 संस्करण 14.01 का उपयोग करता है /System/Index
, जो सीधे मैप करता है /usr
। मुझे संदेह है कि भविष्य का संस्करण लिंक / इंडेक्स पदानुक्रम को छोड़ सकता है और /usr
पूरे बोर्ड में उपयोग कर सकता है।
² यह /bin/sh
डिफ़ॉल्ट रूप से मौजूद होना चाहिए।