क्या पैकेज प्रबंधक को आपकी .bashrc फ़ाइल को संशोधित करना चाहिए?


9

मैं एक ऐसी चीज के लिए एक पैकेज लिख रहा हूं, जिसे ठीक से निष्पादित करने के लिए एक पर्यावरण चर की आवश्यकता होती है। क्या पैकेज प्रबंधक का स्थापित चरण उपयोगकर्ता के वातावरण को संशोधित करता है, या उपयोगकर्ता को केवल ऐसा करने के लिए संकेत देता है? मेरा अंतर्ज्ञान बाद में होगा, लेकिन मैं पूर्व के लिए तर्क देख सकता हूं।


7
क्या आप पर्यावरण चर पर निर्भरता को हटाते हुए कुछ बेहतर व्यवहार कर सकते हैं (जैसे, इसके बजाय एक विन्यास फाइल का उपयोग करके)? .bashrcमुझे लगता है कि हैकिंग या मैकिंग की पैकेजिंग करना बेहतर होगा ।

ज़रूर, लेकिन आइए इस प्रश्न के उद्देश्य के लिए कहें कि आवेदन को संशोधित करना एक विकल्प नहीं है।
डेविड काउडन

1
यदि उपयोगकर्ता नहीं चल रहा है तो क्या होगा bash? कई वैकल्पिक स्टार्टअप फ़ाइलों की एक विस्तृत विविधता के साथ उपलब्ध हैं। मैं गंभीरता से यहां कोई वैकल्पिक समाधान खोजने का सुझाव देता हूं।
जूल्स

10
इसलिए इसके चारों ओर एक आवरण लिखें। उदाहरण के लिए, tomcatसही ढंग से कार्य करने के लिए कई पर्यावरण चर की आवश्यकता होती है; वे सभी एक स्टार्टअप स्क्रिप्ट द्वारा सेट होते हैं जो सीधे बाइनरी को चलाने के बजाय चलाया जाता है।
जूलस

1
@ मैं जानता हूं। जूल्स का प्रस्ताव पहले ही सुझाया जा चुका है। मैं मुखर हो रहा हूं - पहले से जुड़े परिपत्र तर्क का मजाक उड़ा रहा हूं कि मेरे पास एक शेल अज्ञेय समाधान होना चाहिए फिर मुझे सुझाव देना चाहिए कि मैं समाधान के रूप में एक शेल स्क्रिप्ट का उपयोग करूं। यह एक चुटकुला है (
डेविड काउडेन

जवाबों:


18

क्या पैकेज प्रबंधक का स्थापित चरण उपयोगकर्ता के वातावरण को संशोधित करता है, या उपयोगकर्ता को केवल ऐसा करने के लिए संकेत देता है?

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

यूनिक्स वातावरण में कॉन्फ़िगरेशन फ़ाइलों को रखने के लिए एक जगह है जो जब भी उपयोगकर्ता लॉगिन शेल शुरू करता है तो पढ़ा जाता है। बॉर्न और सी गोले के लिए, आप अपने कॉन्फ़िगरेशन को क्रमशः /etc/profileऔर सम्मिलित कर सकते /etc/csh.cshrcहैं। (स्थापना रद्द करने पर इसे निकालना न भूलें।)

कई सिस्टम व्यक्तिगत फ़ाइलों का उपयोग करके ऐसा करने का समर्थन भी करते हैं, जिससे एक फ़ाइल में कुछ मनमाने स्थान पर पाठ को छोड़ने के बिना कॉन्फ़िगरेशन को जोड़ने और हटाने में आसानी होती है। (यह आपको पैकेज मैनेजर से मिलने वाले सभी नियंत्रण और जवाबदेही लाभ भी देता है।) कुछ वितरण /etc/profileसभी फाइलों के मिलान को पढ़ने के लिए कॉन्फ़िगर करेंगे /etc/profile.d/*.sh


1
ऐतिहासिक रूप से, rcएक स्क्रिप्ट में नाम CTSSruncom (रन कमांड्स) से निकला है , लेकिन इसके बाद से अन्य अर्थों को शामिल करने की गुंजाइश बढ़ गई है।
जेफरी हेन्टिन

1
@ जेफ्रीहैंटिन: टचे। हटा दिया।
ब्लरफ्ल

1
उठा रखने के लिए नफरत है, लेकिन profile.dइसे मार-काट में नहीं बनाया गया है, यह आमतौर पर (आमतौर पर डिस्ट्रो के आधार) से प्रदान किया गया एक हुक है/etc/profile । ;)
जेफरी हेंटिन

1
@ जेफ्रीहैंटिन: यह सच है, हालांकि "यूनिक्स" शब्द के मेरे उपयोग की कोई आलोचना नहीं होगी। :-)
ब्लरफ्ल

14

यह पैकेज प्रबंधक से उपयोगकर्ता की संरचना को संशोधित करने के लिए कभी भी स्वीकार्य नहीं है /homeजब तक कि संशोधन पूरे बिंदु न हो।

इसके लिए मुख्य दृष्टिकोण हैं:

  • उस उपयोगकर्ता को सूचित करें जिसे उन्हें इसे कॉन्फ़िगर करने की आवश्यकता है।
  • आपूर्ति की चूक इसलिए इसकी जरूरत नहीं है
  • एक लॉन्चर स्क्रिप्ट को पैकेज करें जो मूल्यों को उचित रूप से सेट करता है
  • (यदि डिस्ट्रो इसका समर्थन करता है) तो पर्यावरण चर के अंदर निर्यात करने वाली फ़ाइल को ड्रॉप करें /etc/profile.d। कुछ लिनक्स सिस्टम पर, इस निर्देशिका की सभी स्क्रिप्ट डिफ़ॉल्ट शेल सेटअप द्वारा सॉर्ट की जाती हैं, ताकि आप सुरक्षित रूप से चर को वहां सेट कर सकें।

7

प्रश्न क्या संकुल प्रबंधक के संस्थापन चरण को उपयोगकर्ता के पर्यावरण को संशोधित करना चाहिए?

उत्तर नहीं। इस मामले में .bashrc फ़ाइल में उपयोगकर्ता के डेटा को संशोधित करना एक बुरा विचार है। उपयोगकर्ता के डेटा को पैकेज प्रबंधक द्वारा पवित्र माना जाना चाहिए?

प्रश्न क्या पैकेज प्रबंधक का स्थापित कदम उपयोगकर्ता को ऐसा करने के लिए प्रेरित करेगा?

उत्तर यह एक बहुत अधिक उपयोगी समाधान है लेकिन फिर भी आदर्श नहीं है।

मुझे लगता है कि आपको एक आवरण खोल स्क्रिप्ट बनानी चाहिए जहां आप आवश्यक पर्यावरण चर सेट कर सकते हैं और वे उसके बाद निष्पादन योग्य चलाते हैं।


मैंने इस विचार को भी माना है। परियोजना युवा है और उस बिंदु पर पहुंच जाएगी जहां यह आवश्यक नहीं होना चाहिए।
डेविड काउडन

@ GlenH7 मैंने अपनी प्रतिक्रिया अपडेट की। उम्मीद है कि अद्यतन प्रतिक्रिया का जवाब आप के लिए देख रहे हैं की अधिक है।
आर साहू २ R

@ GlenH7: यह प्रश्न मूल रूप से एक XY समस्या है: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , जहां पर्यावरण चर की आवश्यकता को हल करने के लिए सही समस्या है।
whatsisname

इसके अलावा, एक आवरण स्क्रिप्ट बनाने के लिए इस उत्तर का सुझाव एकमात्र उत्तर है जो सभी गोले के लिए काम करेगा।
whatsisname

1
@MattThomason कि प्रतीति ने मुझे वास्तव में सवाल पूछने के लिए प्रेरित किया (;
डेविड काउडन

5

आप पेड़ों के लिए जंगल याद कर रहे हैं। जाहिर है कि उपयोगकर्ता के लिए पर्यावरण परिवर्तन करना अधिक सुविधाजनक है, लेकिन यह अधिक जोखिम भरा और कुछ हद तक आक्रामक भी है। आपको उपयोगकर्ता से यह पूछकर दोनों दुनिया के सर्वश्रेष्ठ को जोड़ना चाहिए कि क्या इंस्टॉलर को संशोधित करना चाहिए .bashrc, और अन्यथा निर्देश दें कि उन्हें यह कैसे करना चाहिए।


सलाह के लिए धन्यवाद। मैंने पहले कभी सार्वजनिक पैकेज नहीं लिखा है और मैं यह सुनिश्चित करना चाहता हूं कि मैं कुछ वर्जित न करूं।
डेविड काउडन

इस तरह से आज गूगल क्लाउड एसडीके इसे संभालता है। यह पूछता है कि क्या आप अपनी स्टार्टअप फ़ाइलों को संशोधित करना चाहते हैं।
jmq

1

आप मान रहे हैं कि "उपयोगकर्ता" एकवचन है। यदि इस प्रणाली पर मेरे हजारों उपयोगकर्ता हैं तो क्या होगा?

आप मान रहे हैं कि आप उपयोगकर्ता की होम डायरेक्टरी भी पा सकते हैं। यदि उपयोगकर्ताओं को एलडीएपी के माध्यम से प्रबंधित किया जाता है, तो आपको सभी वैध उपयोगकर्ताओं की सूची प्राप्त करने की अनुमति भी नहीं दी जा सकती है। घर निर्देशिकाएं / घर में नहीं हो सकती हैं; वे गतिशील रूप से नेटवर्क से घुड़सवार हो सकते हैं। उपयोगकर्ता की होम निर्देशिका को एन्क्रिप्ट किया जा सकता है और जब वे लॉग इन नहीं होते हैं तो कुंजी दुर्गम हो सकती है।

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


0

एक पैकेज में एक वैश्विक चर सेट करना स्वीकार्य है यदि यह आपकी अपनी परियोजना द्वारा परिभाषित है (और इसका मतलब है कि परियोजना का नाम चर के नाम का हिस्सा है!)। फिर भी, आपको उपयोगकर्ता की .bashrcफ़ाइल को नहीं छूना चाहिए - इसके बजाय आपको /etc/profile.d पर स्क्रिप्ट जोड़ना चाहिए ।

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