आप एक बड़े वातावरण में FreeBSD के बंदरगाहों को कैसे प्रबंधित और तैनात करते हैं?


19

मैं उत्सुक हूं कि लोग अपने वातावरण में FreeBSD के बंदरगाहों को कैसे तैनात कर रहे हैं। मुझे लगता है कि FreeBSD का उपयोग करने वाले अधिकांश लोग वास्तव में पोर्ट्स का उपयोग कर रहे हैं (और अक्सर बायनेरिज़ के साथ अपग्रेड करने के लिए पोर्टअपग्रेड)। लेकिन मुझे इस बात में दिलचस्पी है कि आपके पास यह सेटअप कैसे है, क्योंकि मैं इस बात से संतुष्ट नहीं हूं कि हाल के संस्करणों में चीजें कैसे काम करती हैं। अब मैं FreeBSD 9.0 चला रहा हूं और इसमें समस्याएं आ रही हैं।

मैंने चीजों को इस प्रकार सेट किया है:

  • / usr / बंदरगाहों को NFS के माध्यम से एक नोड से साझा किया जाता है (रात के समय 'portnap fetch update' के साथ)।
  • प्रत्येक नोड में पठन-लेखन के साथ / usr / पोर्ट होते हैं
  • मैंने सभी डायोड पर "WRKDIRPREFIX = / usr / tmp" को /etc/make.conf में सेट किया है
  • मैंने निम्नलिखित /usr/local/etc/pkgtools.conf को जोड़कर एक स्थानीय सूचकांक का उपयोग करने के लिए पोर्ट्सनाप को कॉन्फ़िगर किया है:

ENV['LOCALINDICES'] ||= '/var/db'

ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'

मैं सफलतापूर्वक portupgrade -p packageएक पैकेज बनाने और फिर portupgrade -P packageदूसरे नोड्स पर बाइनरी स्थापित करने के लिए चला सकता हूं ।

फिर भी, कभी-कभी मुझे निम्नलिखित समस्या प्राप्त होती है: /var/db/INDEX.local:23265:dbm_store failed

मैं किसी भी अन्य अनुकूलन के बारे में नहीं सोच सकता, जो मैं सिस्टम में कर सकता हूं, क्योंकि सूचकांक अब स्थानीय रूप से रहता है, और केवल एक चीज जो वास्तव में निर्यात की जाती है, वह पोर्ट-ट्री है और कुछ भी वहां नोड्स से कभी नहीं लिखा जाता है।


एक विकल्प होगा कि हर नोड पर एक पूर्ण स्थानीय पोर्ट-ट्री हो (और शायद सिर्फ 'डिस्टिफ़ाइल्स' और 'पैकेज') को माउंट करें, लेकिन यह अंतरिक्ष के बड़े पैमाने पर कचरे की तरह लगता है (और बहुत सारे अनावश्यक अपडेट का उल्लेख नहीं करना है)।
21

vpeterson: यह एक ऐसा सवाल है, जिसे पूछना चाहिए (मैं अभी इस पर अवरुद्ध हूं। और +5 वोट और 3 सितारों से पता चलता है कि हम अकेले नहीं हैं)। शायद इस सवाल को साफ करें और कुछ विशिष्ट समस्याओं को हल करने की कोशिश कर रहे हैं। (एफडब्ल्यूआईडब्ल्यू, किसी ने आपके प्रश्न को बंद करने के लिए मतदान किया। व्यक्तिगत रूप से मैं यह देखना बहुत पसंद करूंगा, या इसी तरह का, सवाल बच गया)।
स्टीफन लासिवस्की

मुझे यकीन नहीं है कि सवाल को और अधिक स्पष्ट कैसे किया जाए। मैं यह भी नहीं सोचता कि @ voretaq7 वास्तव में सवालों के जवाब देता है, बल्कि एक वैकल्पिक तरीका सुझाता है। यह सवाल वास्तव में है कि विषय क्या बताता है - लोग मल्टी-नोड वातावरण में फ्रीबीएसडी के बंदरगाहों को कैसे तैनात कर रहे हैं।
vpetersson

जवाबों:


13

मैं एक बड़े वातावरण में बंदरगाहों की प्रणाली से पूरी तरह से कभी संतुष्ट नहीं हुआ - यह हमेशा ऐसा लगता है कि आपको इसे अच्छी तरह से काम करने के लिए कुछ बाहरी प्रबंधन को लागू करने की आवश्यकता है।

मेरी सबसे अच्छी युक्तियाँ (आरोही वरीयता के क्रम में, "सबसे अच्छा" सबसे अच्छा "समाधान"):


यदि आप प्रत्येक मेजबान पर निर्माण कर रहे हैं, तो नहीं
यदि आपको ऐसा करना हो, तो एनएफएस के साथ ऐसा न करें, जैसा कि आप लिखते हैं, जैसे आप लिखते हैं: आप आमतौर पर पोर्ट पर भरोसा कर सकते हैं कि राइट थिंग करें और पोर्ट ट्री पर स्टॉम्प न डालें यदि आप वैकल्पिक कार्य निर्देशिका प्रदान करते हैं, लेकिन यह हमेशा बेहतर होता है क्षमा से सुरक्षित रहें: उस बॉक्स से अपने सभी होस्ट को एक स्थानीय CVS / csup दर्पण और csup चलाएं, फिर स्थानीय स्तर पर निर्माण करें जैसे कि आप व्यक्तिगत मशीन थे।
हां, मुझे पता है कि मेजबानों पर डिस्क की जगह और एक अतिरिक्त कदम है। यह भी समस्या-मुक्त होने की गारंटी है।
चेतावनी: आप शायद प्रत्येक मशीन पर स्थिरता सुनिश्चित करने के लिए एक निर्दिष्ट "कॉन्फ़िगरेशन होस्ट" से पैकेज कॉन्फ़िगरेशन फ़ाइलों (rsync या समान) को सिंक करना चाहते हैं (यदि आप प्रत्येक नोड पर csup का उपयोग करने के बजाय पूरे पोर्ट ट्री को rsync कर सकते हैं)।


एक बिल्ड होस्ट का उपयोग करें, पैकेज बनाएं और उन्हें स्थापित करें।
प्रत्येक व्यक्तिगत मशीन पर निर्माण करने से बेहतर समाधान: पैकेज बनाने के लिए एक बिल्ड होस्ट का उपयोग करें, और उन पैकेजों पर अपने टूल को इंगित करें।
इसका मतलब है कि आपके द्वारा चलाए जाने वाले प्रत्येक आर्किटेक्चर (या क्रॉस-कंपाइलिंग) के लिए बिल्ड होस्ट रखने के लिए, लेकिन यह अंततः आपके लक्ष्य मशीनों के लिए अच्छा है (कोई बड़ी संकलित नौकरियां, स्थिरता की गारंटी)


कॉन्फ़िगरेशन / सिस्टम प्रबंधन उपकरण का उपयोग करें।
यह वह समाधान है जिसके साथ मैं घाव करता हूं - मैं एक मानक सर्वर छवि बनाता हूं और इसका उपयोग करके अपने वातावरण के चारों ओर तैनात करता हूं radmind। आप पपेट या शेफ के साथ भी ऐसी ही बातें कर सकते हैं । इसमें बिल्ड होस्ट (व्यक्तिगत सर्वर पर कम लोड) का उपयोग करने के सभी फायदे हैं, और कॉन्फ़िगरेशन प्रबंधन का लाभ जोड़ता है।

कैविएट: यह केवल वास्तव में अच्छी तरह से काम करता है यदि आपकी मशीनें "समान" हैं - यही है कि आप उन सभी पर समान सेट पोर्ट स्थापित कर सकते हैं। यह कर सकते हैं अगर आप बंदरगाहों के सेट अलग है काम करते हैं, लेकिन यह है कि काफी हद तक व्यवस्थापक ओवरहेड बढ़ जाती है।

डिस्क्लेमर: मैं पोर्ट मेंटेनर हूं sysutils/radmind। हाँ, मुझे यह पसंद है कि मैंने इसे अपनाया।


यह सब मेरे अनुभव के आधार पर विभिन्न आकार के FreeBSD वातावरण (1-2 मशीनों से 100 से अधिक) को प्रबंधित करने पर आधारित है। कॉन्फ़िगरेशन / सिस्टम प्रबंधन उपकरण जो एक मानकीकृत छवि को धक्का देते हैं और बनाए रखते हैं, वास्तव में मेरे अनुभव में इसे संभालने का सबसे अच्छा तरीका है।


अच्छा संकेत। मैं अतीत में कठपुतली के साथ थोड़ा खेल चुका हूं, और इसे उबंटू पर पसंद करता हूं। फिर भी, मुझे यकीन नहीं है कि यह FreeBSD के साथ कितना अच्छा खेलता है। मैं अभी तक कोशिश कर रहा हूँ कि बाहर। भले ही, कठपुतली के साथ, मुझे लगता है कि यह पोर्टुपग्रेड पर कॉल करता है, जो हमें वापस एक वर्ग में ले जाता है। मुझे ऐसा कोई अन्य तरीका नहीं दिख रहा है, जो काम कर सके, क्योंकि इसके बाद pkg_delete / pkg_add या 'pkg_add -f' करने की आवश्यकता होगी, जो एक अच्छा विचार नहीं होगा। जहां तक ​​हार्डवेयर जाता है - वे सभी समान हैं क्योंकि वे एक सार्वजनिक क्लाउड (KVM / Qemu) में चलते हैं।
vpetersson

यदि आपके हार्डवेयर और बेसलाइन सॉफ़्टवेयर कॉन्फ़िगरेशन समान हैं, तो मैं पूरे सिस्टम की छवि को प्रबंधित करते हुए रेडमाइंड जैसा कुछ सुझाऊंगा। कठपुतली और बावर्ची महान उपकरण हैं, हालांकि जैसा कि आपने बताया कि वे अंतर्निहित ओएस बायनेरिज़ कहते हैं, जो आपको बिल्ड होस्ट का उपयोग करने और पैकेज वितरित करने पर वापस छोड़ देता है। radmind फाइल सिस्टम स्तर पर प्रबंधन को संभालने से बचता है ("यदि यह यहां नहीं होना चाहिए, तो इसे बदलें या हटा दें") एक सरोगेट sysadmin बनने की कोशिश करने के बजाय ("इन कमांड को चलाएँ / मुझे कॉन्फ़िगर करने के लिए इन फ़ाइलों को बदल दें" डिब्बा")।
voretaq7

ठीक है, सिस्टम में समान हार्डवेयर हैं, लेकिन समान कॉन्फ़िगरेशन नहीं। मुझे रेडमाइंड पर ध्यान देना होगा लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है। अंतर्निहित टूल का उपयोग करके IMHO को काम करना चाहिए , यही कारण है कि मैं समुदाय के लिए यह देखने के लिए पहुंच रहा हूं कि क्या मैंने कुछ भी याद नहीं किया है। मैं शायद ही ऐसा करने की कोशिश कर रहा हूँ।
vpetersson

अंतर्निहित उपकरण निश्चित रूप से काम करते हैं, उन्हें बस बहुत अधिक सहायता की आवश्यकता होती है (सर्वरों का निर्माण, पैकेजों का स्थानीय वितरण, आदि) - वे वास्तव में एक मशीन के प्रबंधन की दिशा में सक्षम होते हैं, और वे जितना हो सके उतना पैमाने पर नहीं करते हैं। ध्यान दें कि मैंने आपके स्वयं के फ्रीबीडी-अपडेट सर्वर को रोल करने का विकल्प छोड़ दिया है - मैंने इसे केवल आधार प्रणाली से अधिक के लिए कभी नहीं आज़माया है, लेकिन यह सैद्धांतिक रूप से संभव है। मैं सिर्फ उन सामानों से
जुड़ा हुआ

हाँ, यह वास्तव में एक दिलचस्प विचार है। मुझे यकीन नहीं है कि यह बहुत संशोधनों के बिना पोर्ट-पैकेज वितरित करने के साथ काम करेगा। मैं वास्तव में उत्सुक हूं कि बड़े सिस्टम के sadadmins इसे कैसे प्रबंधित करते हैं, क्योंकि FreeBSD के बहुत सारे तैनाती हैं। क्या वे सभी अपना समाधान खुद करते हैं? यदि ऐसा है, तो यह बहुत अजीब लगता है और बहुत खुला स्रोत-ईश नहीं है।
vpetersson 21

6

अजीब बात है कि किसी ने बंदरगाहों-एमजीएमटी / टिंडरबॉक्स का उल्लेख नहीं किया है :

टिंडरबॉक्स FreeBSD बंदरगाहों के लिए एक पैकेज बिल्डिंग सिस्टम है, जो कि पॉइंटहाइंट बिल्डिंग क्लस्टर पर उपयोग की जाने वाली आधिकारिक पोर्टबिलिटी स्क्रिप्ट पर आधारित है। टिंडरबॉक्स जो मार्कस क्लार्क द्वारा लिखा गया था।

आप कई जेल (बेस सिस्टम वर्जन) और कई पोर्टस्ट्री को परिभाषित कर सकते हैं। जेल और पोर्टस्ट्री के संयोजन को एक निर्माण कहा जाता है। एक Tinderbox जेल जिसे FreeBSD में जेल के रूप में नहीं समझा जाता है, वह वास्तव में एक दी हुई दुनिया है। टिंडरबॉक्स निर्भरता के स्वचालित ट्रैकिंग का समर्थन करता है और केवल पिछले रन के बाद बदले गए पैकेजों को फिर से बनाता है। Tinderbox में विफल बिल्ड की ईमेल सूचना का समर्थन है। टिंडरबॉक्स भी ccache के साथ अच्छी तरह से एकीकृत होता है।

टिंडरबॉक्स को आपकी ज़रूरत के बंदरगाहों के पैकेज सेट को आसानी से प्रदान करने के लिए डिज़ाइन किया गया है, आपके लिए आवश्यक प्लेटफ़ॉर्म और आर्किटेक्चर के लिए। टिंडरबॉक्स नए पोर्ट और पोर्ट अपग्रेड के परीक्षण के लिए भी उत्कृष्ट उपकरण है, विशेष रूप से परीक्षण निर्भरता और पैकिंग सूची के लिए। यह FreeBSD के विभिन्न रिलीज पर बंदरगाहों के परीक्षण के लिए भी उपयोगी है, क्योंकि आप FreeBSD 6.X दुनिया को FreeBSD 7.X / 8.X होस्ट पर जेल के रूप में चला सकते हैं।

इसके अलावा pkgng पर स्विच करना पैकेज परिनियोजन को बहुत सरल करता है।
इसे github पर देखें : https://github.com/pkgng/pkgng


1
हालांकि यह निश्चित रूप से एक विविध वातावरण (कई संस्करणों, आर्किटेक्चर आदि) में वास्तविक संकुल के निर्माण के लिए उपयोगी हो सकता है, यह वास्तव में संकुल को तैनात करने के मुद्दे को हल नहीं करता है।
vpetersson

टिंडरबॉक्स HTTP पर उपलब्ध पैकेज बनाता है, इसलिए आप इसे अपनी तैनाती समाधान (जैसे सेट PACKAGEROOT/ / PACKAGESITEऔर radmind या कठपुतली / रसोइया का उपयोग करने के लिए) के उत्तर पर voretaq7 के टिप्पणियों के साथ जोड़ सकते हैं ।
जेम्स ओ'गॉर्मन

हां, लेकिन पैकेजों का निर्माण और वितरण समस्या नहीं है। मैं पैकेज बनाने और उन्हें एनएफएस (पोर्ट्स-ट्री के साथ या बिना) के माध्यम से वितरित करने के लिए पोर्टअपग्रेड (-पी) का उपयोग कर सकता हूं। समस्या यह है कि इस मॉडल को अभी भी स्थानीय रूप से एक पूर्ण पोर्ट-ट्री की आवश्यकता है, या बी) एनएफएस के माध्यम से निर्यात किए गए एक पोर्ट-ट्री, जो हमें समस्या को वापस लाता है।
vpetersson

2
यदि आप स्रोत से निर्माण कर रहे हैं या बाइनरी पैकेजों का उपयोग कर रहे हैं - तो पोर्टुपग्रेड आपको वही pkg_deleteकरना होगा जो पहले चलाया जाना चाहिए और फिर नया संस्करण स्थापित करना चाहिए। ओपनबीएसडी ने एक अपग्रेड ऑप्शन को शामिल करके इसे बेहतर तरीके से संभाला है pkg_add। पोर्टअपग्रेड के बारे में निश्चित नहीं है, लेकिन पोर्टमास्टर केवल INDEX का उपयोग करके काम कर सकता है, न कि पूर्ण पोर्ट ट्री।
जेम्स ओ'गॉर्मन

1
सही, लेकिन pkg_delete शायद ही एक उचित दृष्टिकोण है। मान लें कि आप रूबी, पायथन या किसी अन्य पैकेज को अपग्रेड करना चाहते हैं जो बड़ी संख्या में अन्य पैकेजों के लिए एक शर्त है। pkg_delete को तब आपको उन सभी निर्भरताओं को हटाने की आवश्यकता होगी, जो शायद ही किसी उत्पादन प्रणाली के लिए एक विकल्प है। पोर्टअपग्रेड इसके साथ बहुत बेहतर काम करता है , लेकिन फिर से, यह पैमाने पर नहीं लगता है।

3

मैंने 100+ फ्रीबीएसडी सर्वरों को केवल साझा / यूआरआर पढ़-लिखकर केवल अच्छी तरह से ट्यून किए गए एनएफएस से प्रबंधित किया है, पैकेज डेटाबेस को / var / usr से आगे बढ़ाते हुए और उनके लिए सहानुभूति रखते हुए (कड़ाई से आवश्यक नहीं है लेकिन pkg_info और ऐसे सक्षम करता है)। एक या दो अन्य फाइलें हो सकती हैं, जिन्हें एक दिशा या दूसरी दिशा में ले जाने की आवश्यकता होती है और सिम्लिंक की जाती है, लेकिन पूरे सेटअप को पता लगाने में मुझे लगभग एक घंटा लग गया। इसने बहुत अच्छा काम किया। अगर मैं स्केलिंग के मुद्दों में भाग लेता तो मैं अतिरिक्त NFS सर्वर जोड़ देता और काम का बोझ अलग कर देता, लेकिन यह कभी नहीं हुआ। प्रदर्शन मेरे लिए कभी भी एक मुद्दा नहीं था (वास्तव में यह बहुत अच्छा था) लेकिन मुझे लगता है कि आप एक md पर NFS सर्वर के / usr (या उसकी प्रति) लगा सकते हैं।


NFS पर निर्मित पैकेज फ़ाइलों को साझा करना (जो कि आपके बारे में बात कर रहा है, ऐसा लगता है?) निश्चित रूप से एक और उचित दृष्टिकोण है - आप संकुल को स्थापित करने / अपग्रेड करने के लिए कठपुतली (या समरूप SSH-और-शेल स्क्रिप्ट) जैसी किसी चीज़ का उपयोग कर सकते हैं। NFS शेयर से।
voretaq7

1

ऐसा प्रतीत होता है कि किसी को भी दुर्भाग्य से इसका अच्छा समाधान नहीं मिला। सबसे अधिक संभावना यह अंडरलेइंग टूल में सीमाओं के कारण है।

यहाँ मैं क्या लेकर आया हूँ: मैंने पूरे बंदरगाहों-वृक्षों के निर्यात के विचार को कुरेद दिया। इसके बजाय, मैंने प्रत्येक नोड पर एक पूर्ण पोर्ट-ट्री दिया और दिया। मैंने तब NFS के ऊपर 'पैकेज' माउंट किए (पैकेजों के वितरण को सक्षम करने के लिए)।

मैं पोर्टिंग प्रक्रिया को तेज करने के लिए कैशिंग प्रॉक्सी (शायद स्क्विड) का उपयोग करने का भी इरादा कर रहा हूं। मैंने अपने ब्लॉग पर इसे कैसे सेटअप किया जाए, इसके बारे में एक छोटी पोस्ट लिखी थी ।

संदर्भ:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.