OSTree . पर आधारित पाइन, अल्पाइन लाइनक्स
क्या चुनना ओएस आपके सर्वर पर चलता है यह सुविधा और परिचित का विषय है। सुविधा का मतलब है कि आप कुछ ऐसा चाहते हैं जो आपको यथासंभव कम परेशानी दे, परिचित का मतलब है कि आप पसंद करेंगे नहीं यदि आपको नहीं करना है तो अतिरिक्त चीजें सीखने के लिए।
मेरे सर्वर हैं पालतू जानवरइसलिए मैं कुछ समय में मैन्युअल रूप से कुछ आदेश जारी कर रहा हूं, और पूर्ण स्वचालन की आवश्यकता नहीं है।
कोशिश करने के बाद कोरओएस एक साल के लिए मैंने अपने सरलीकृत पर स्विच किया डिस्ट्रो अल्पाइन और पर आधारित शुतुरमुर्ग.
अल्पाइन का यह संस्करण से संकेत लेता है ट्रक तथा परियोजना-परमाणु और इसे केवल-पढ़ने के लिए रूट फ़ाइल-सिस्टम के रूप में स्थापित किया जाना चाहिए, जिसमें अद्यतन परमाणु रूप से हो रहे हैं, यानी या तो वे सफल हो जाते हैं या सिस्टम पिछली स्थिति में वापस आ जाता है। इसके लिए सिस्टम को संभव होने के लिए कम से कम हमेशा होना चाहिए दो स्नैपशॉट जारी किए गए फ़ाइल-सिस्टम संस्करण का, भंडारण पर उपलब्ध है।
सिस्टम किस वातावरण में चलेगा? मैंने निशाना बनाया ओवीजेड और [केवीएम], लेकिन सामान्य तौर पर आप कह सकते हैं कंटेनरों तथा आभाषी दुनिया मुख्य अंतर यह है कि कंटेनर अपना कर्नेल नहीं चलाते हैं, विशेष रूप से उनके पास बूट प्रक्रिया नहीं है, वे सीधे कॉल करते हैं इस में प्रणाली (जो उदाहरण के लिए aDockerfile
द्वारा परिभाषित किया जाएगाCMD
याENTRYPOINT
स्टेटमेंट्स), जो उन प्रक्रियाओं के पेड़ को प्रबंधित करने के लिए ज़िम्मेदार है जो कंटेनर को चालू रखेंगे (एक सामान्य सत्र की तरह, यदि init प्रक्रिया मर जाती है, तो कंटेनर समाप्त हो जाता है)। इसके अलावा कंटेनर सिस्टम नॉब्स को कॉन्फ़िगर नहीं कर सकते हैं, और क्षमताओं पर अतिरिक्त प्रतिबंध हो सकते हैं।
छवि कैसे बनाई जाती है?
NSprepare.sh
स्क्रिप्ट निर्भरता को संभालती है, जिनमें से अधिकांश सामान्य क्ली टूल की पेशकश करने वाले पैकेज हैं जैसेcoreutils
, util-linux
, binutils
, ब्लॉक उपकरणों के साथ काम करने के लिए उपयोगिताओं जैसेblkid
, sfdisk
, multipath-tools
और फाइल सिस्टम के साथxfsprogs
तथाe2fsprogs
. NSsquashfs-tools
पैकेज का उपयोग अंत में निर्मित रूट फाइल सिस्टम को संपीड़ित करने के लिए किया जाता है। एglib
संगतता पैकेज भी डिफ़ॉल्ट रूप से स्थापित है क्योंकि अल्पाइन पर आधारित हैmusl
, संगतता पैकेज के विरुद्ध निर्मित कुछ पुस्तकालय प्रदान करके काम करता है।
VMs और कंटेनर दोनों के लिए फ़ाइल ट्री क्रमशः निर्मित होते हैंmake.sh
तथाmake_ovz.sh
. यह चरणों का एक सरलीकृत विवरण है
रिपोजिटरी टैग के अनुसार बनाए जाने वाले संस्करण को सेट करें
नए पेड़ के लिए एक निर्देशिका बनाएं और पर्यावरण को साफ करें
ओस्ट्री द्वारा आवश्यक आधार लक्ष्य निर्देशिकाएं और निर्देशिकाएं बनाएं, जैसेsysroot
अनुरूप करने के लिए सिम्लिंक बनाएं फाइलसिस्टम पदानुक्रम मानक
कस्टम सेवाओं और कस्टम कॉन्फ़िगरेशन की प्रतिलिपि बनाएँ
माउंटेड सिस्टम निर्देशिकाओं के साथ सेटअप क्रोट
आधार पैकेज के साथ अल्पाइन रूटफ को बूटस्ट्रैप करें
क्रेडेंशियल, टाइमज़ोन, होस्टनाम जैसे रूटफ़्स पर न्यूनतम कॉन्फ़िगरेशन लागू करें।
init . द्वारा शुरू की जाने वाली सेवाओं की प्रतिलिपि बनाएँ
निर्दिष्ट कर्नेल छवि के साथ बूट विन्यास सेटअप करें
वैकल्पिक रूप से कस्टम कर्नेल मॉड्यूल जोड़ें
सफाई करना
rootfs प्रतिबद्ध करें[1] शुतुरमुर्ग भंडार के लिए
कंटेनरों के लिए, अनुक्रम समान है, लेकिन कॉन्फ़िगरेशन बदल जाता है, क्योंकि सिस्टम के साथ a . से बूट नहीं होता है बूटलोडर ओस्ट्री को पर्यावरण को सत्यापित करने में परेशानी होती है, हमें कुछ लागू करना होगा समाधान और कुछ उपकरणों को सेटअप करें जिन्हें आमतौर पर द्वारा नियंत्रित किया जाता है initramfs कदम। यह कैसे है ओवीजेड या एलएक्ससी टेम्प्लेट कॉन्फ़िगर किए गए हैं।
एक बार हमारे पास हमारी ओस्ट्री प्रतिबद्ध फाइल ट्री हैbuild.sh
याbuild-update.sh
वितरित की जाने वाली कलाकृतियों के उत्पादन का ध्यान रखता है। लिपियों के बीच अंतर यह है कि अद्यतन संस्करण पिछले ओस्ट्री रिपॉजिटरी से शुरू होता है, और भी एक डेल्टा आर्टिफैक्ट उत्पन्न करता है जिसे एक रनिंग सिस्टम अपग्रेड करने के लिए अपने ओस्ट्री इंस्टेंस पर लागू कर सकता है। यह निर्माण चरणों का एक सरलीकृत विवरण है
अगर नया निर्माण
लूप डिवाइस के रूप में माउंट की गई नई छवि पर नए विभाजन बनाएं
अन्यथा
पिछले बिल्ड के सिसरूट और बूट विभाजन को माउंट करें
माउंटेड बिल्ड पर पिछले ओस्ट्री परिनियोजन (लिंक फ़ार्म) को साफ़ करें
माउंटेड बिल्ड पर नया निर्मित ट्री प्रतिबद्ध करें
अखंडता और चेकसम सत्यापित करें
उन्नयन के लिए नया डेल्टा बनाएं
बूट कॉन्फ़िगरेशन को पुन: उत्पन्न करने के लिए ओस्ट्री परिनियोजन निष्पादित करें
पुराने शुतुरमुर्ग को हटा दें
बूट विभाजन की अखंडता को सत्यापित करें
नई अपडेट की गई बिल्ड इमेज को अनमाउंट करें
छवि चेकसम उत्पन्न करें और इसे संपीड़ित करें (के साथsquashfs
कंटेनरों के लिए)
विभाजन विन्यास को fdisk के साथ लागू किया जाता हैlayout.cfg
फ़ाइल जो विभाजन आकार को परिभाषित करती है, हमारे पास रूटफ़्स के लिए एक विभाजन है (~430M
), बूट विभाजन (~40M
) और एक स्वैप विभाजन (~40M
) कंटेनरों के साथ पिछले बिल्ड को लूप डिवाइस पर माउंट करना छोड़ दें, और पुराने (निकाले गए) ओस्ट्री रिपॉजिटरी पर नए ओस्ट्री कमिट को खींचें।
मैं इस छवि में क्या बंडल कर रहा हूं (स्थापित पैकेज के अलावा)?
एक छोटा सा कामfunctions.sh
खोल के भीतर निष्पादित सामान्य कार्यों के लिए
केवी स्टोर पर आधारित लॉकिंग मैकेनिज्म के साथ ओस्ट्री आधारित अपग्रेड स्क्रिप्ट
आईओ दोनों के लिए स्क्रिप्ट की निगरानी स्थानीय (iomon
) और नेटवर्क (tcpmon
)
कंटेनर रनटाइम के अलावा अन्य के लिए स्क्रिप्ट सेटअप करेंbubblewrap
: podman
, toolbox
क्या हुआ करता था और अब नहीं है
sup
: सुड़कना ऑर्केस्ट्रेशन (कंटेनर तैनात) और मेजबान मशीन के विन्यास के लिए इस्तेमाल किया गया था, लेकिन फिर मैंने स्विच किया उत्तरदायी क्योंकि सुपर में लंबे समय से खड़े बग थे जिनमें एक फिक्स की कमी थी, मैंने शुरू से ही उत्तरदायी नहीं चुना क्योंकि मैं नहीं चाहता था कि प्रत्येक सर्वर पर एक पायथन निर्भरता स्थापित हो, अंततः मैं एक माध्यमिक अल्पाइन के साथ बस गया चुरोट में स्थित मेजबान मशीनों पर/opt/alp
क्या मैं अतिरिक्त कम महत्वपूर्ण सॉफ़्टवेयर स्थापित कर रहा था। आज, हालांकि, मैं फिर से ansible से . पर स्विच करूंगा पाइइन्फ्रा , चूंकि
यह बॉयलरप्लेट के बिना अजगर है (उत्तर में छद्म है)DSL
यह हल करने वालों की तुलना में अधिक सिरदर्द का कारण बनता है)
यह अपने व्यंजनों को सादे ssh कमांड के साथ निष्पादित करता है, इसलिए लक्ष्य मेजबानों पर एक अजगर निर्भरता की आवश्यकता नहीं है
containerpilot
: कंटेनर पायलट के लिए उपयोग का मामला शेल स्क्रिप्ट के बिना कंटेनरों के बीच जटिल निर्भरता का प्रबंधन करना है...इससे अपडेट मिलना बंद हो गया हर्षित और रखरखाव मोड में डाल दिया गया था, मुझे स्मृति आवश्यकताओं को भी पसंद नहीं आया और स्मृति उपयोग लगातार लंबे समय तक बढ़ने के लिए होगा। मैंने इसे सरल शेल स्क्रिप्ट के लिए स्विच किया है कौंसल , यदि शेल स्क्रिप्ट बहुत अधिक बढ़ने लगे तो मैं अधिक उचित विकल्पों पर गौर कर सकता हूं। भारी समाधान जैसे कुबेरनेट्स, झुंड या बंजारा जाने से हटा दिया गया था।
beegfs
: मैं इसके लिए आवश्यक कर्नेल मॉड्यूल को शिप करता था beegfs लेकिन कुछ समय बाद इसने अनुकूलता को तोड़ दिया, और यह तथ्य कि उचित रूप से समर्थित नहीं था फ्यूज मॉड्यूल ने इसे पूरी तरह से छोड़ दिया, मैं वर्तमान में अपने सर्वर पर [डीएफएस] नहीं चला रहा हूं, लेकिन नेटवर्क में प्लग करने के लिए फाइल-सिस्टम जाने के लिए तैयार होने की संभावना अभी भी आकर्षक है।
छवि को स्थापित करने के लिए आप या तो इसे होस्टिंग प्रदाता पर अपलोड कर सकते हैं और वर्चुअल मशीनों के मामले में वीएनसी से इंस्टॉल कर सकते हैं, लेकिन मैं आमतौर पर मौजूदा इंस्टॉलेशन को हाईजैक कर लेता हूं, क्योंकि यह हमेशा संभव है, साथ ही जब तक मैंने संस्करण के खिलाफ सेटअप स्क्रिप्ट का परीक्षण किया है लिनक्स वितरण, आम तौर पर मैं डेबियन -8 या उबंटू -14 का उपयोग करता हूं, अन्य लोगों का परीक्षण नहीं किया है क्योंकि इन्हें मैंने हमेशा उपलब्ध होने के लिए पाया है। सेटअप चरण इस प्रकार हैं
डाउनलोड के लिए https समर्थन सुनिश्चित करें
बिजीबॉक्स संस्करण डाउनलोड करें
बिजीबॉक्स लिंक-फार्म स्थापित करें
नेटवर्क कॉन्फ़िगरेशन के लिए ipv4/ipv6 पते निर्धारित करें
क्रोट क्षमताओं को सुनिश्चित करें
पाइन छवि डाउनलोड करें और इसे निकालें
अगर वीएम
लक्ष्य डिवाइस पर फ्लैश करें
लूप डिवाइस पर माउंट करें
पर स्थानीय नेटवर्क विन्यास लिखें चमकने के लिए रूटफ्स
अगर कंटेनर
मुख्य रूट आरोह बिंदु पर init सेवा (कंटेनरों के लिए) की प्रतिलिपि बनाएँ/sbin/init
अगर वीएम
मानक के साथ बचे हुए डिस्क को विभाजित करें (xfs
) विभाजन
अनमाउंट
विभाजन की अखंडता को सत्यापित करें
रीबूट
मैंने बनाया देवदार 5 years from time of writing and I am still using it, and I see no reasons to switch to anything else. Alpine as a linux distro is great, simple, and I have never experienced breakage. I can easily deploy on नैटेड सर्वर जो अति-निम्न संसाधनों की पेशकश करते हैं, वास्तव में मेरे पास बस के साथ चलने वाला एक बॉक्स है64M
RAM का, और अभी भी मेरे पास आवश्यक सभी सुविधाएँ हैं।
[1] | रूट फाइल सिस्टम |