कार्यक्रमों का ध्यान रखना


33

जब मैं एक साधारण प्रोग्राम स्थापित करता हूं तो यह अक्सर उपयोग करता है make && make installऔर अक्सर एक स्थापना रद्द लक्ष्य भी नहीं होता है ।

अगर मैं किसी प्रोग्राम को अपग्रेड करना चाहता हूं, तो क्या यह मान लेना प्रोटोकॉल है कि पुराने प्रोग्राम पर इसे मूल रूप से लिखा जाए?

मैं इन कार्यक्रमों का ट्रैक कैसे रखूं; क्या ज्यादातर लोग सिर्फ 'आग और भूल जाते हैं' और अगर कोई अनइंस्टॉल टारगेट नहीं दिया जाता है, तो क्या मुझे मैन्युअल रूप से सबकुछ डिलीट करना होगा?


6
क्या जीएनयू स्टो यहाँ एक विकल्प है? "GNU स्टोव सॉफ्टवेयर पैकेजों की स्थापना के प्रबंधन के लिए एक कार्यक्रम है, उन्हें अलग-अलग रखते हुए (/ usr / local / stow / emacs बनाम / usr / local / stow / perl, उदाहरण के लिए) जबकि उन्हें उसी में इंस्टॉल किया जाना है। जगह (/ usr / स्थानीय)। "
माइक रेनफ्रो जू

@ यह बहुत आशाजनक लग रहा है; मुझे कार्यक्रमों के संस्करणों को मूल रूप से सक्षम और अक्षम करने का विचार पसंद है। सबसे पहले कार्यक्रम कितना सक्रिय और स्थिर है और कितनी बार एक कार्यक्रम उपसर्ग प्रोटोकॉल को तोड़ता है?
Will03uk

1
हास्यास्पद रूप से स्थिर ( 1996 से 1.3.2 तारीखें, और 1.3.3 से 2002 ), और लगभग पूरी तरह से निष्क्रिय । यह सिर्फ एक पर्ल स्क्रिप्ट है जो सहानुभूति का प्रबंधन करती है। दिन में वापस, यह कंपाइलर और स्टोव में बूटस्ट्रैप्ड होने के लिए एक दर्द था, लेकिन एंड-यूज़र एप्लिकेशन के लिए, यह ठीक रहा। मैंने इसे किसी भी एप्लिकेशन के लिए उपयोग किया है जिसे मैं नए डेबियन रिलीज से आसानी से बैकपोर्ट नहीं कर सकता, या सोलारिस पैकेज रिपॉजिटरी में से एक से प्राप्त कर सकता हूं।
माइक रेनफ्रो जूल

जवाबों:


20

प्रत्येक प्रोग्राम को एक समर्पित निर्देशिका ट्री में स्थापित करें, और सभी कार्यक्रमों को एक सामान्य पदानुक्रम में प्रकट करने के लिए Stow या XStow का उपयोग करें । स्टोव कार्यक्रम-विशिष्ट निर्देशिका से एक सामान्य पेड़ से प्रतीकात्मक लिंक बनाता है।

उदाहरण के लिए, अधिक विस्तार से, एक विस्तृत निर्देशिका चुनें /usr/local/stow। के तहत प्रत्येक कार्यक्रम स्थापित करें /usr/local/stow/PROGRAM_NAME। उदाहरण के लिए, इसके निष्पादनयोग्य को /usr/local/stow/PROGRAM_NAME/binइसके मैन पेज आदि में स्थापित करने की व्यवस्था /usr/local/stow/man/man1करें। यदि प्रोग्राम ऑटोकॉन्फ़ का उपयोग करता है, तो चलाएं ./configure --prefix /usr/local/stow/PROGRAM_NAME। दौड़ने के बाद make install, दौड़ें stow:

./configure --prefix /usr/local/stow/PROGRAM_NAME
make
sudo make install
cd /usr/local/stow
sudo stow PROGRAM_NAME

और अब आपके पास इन जैसे प्रतीकात्मक लिंक होंगे:

/usr/local/bin/foo -> ../stow/PROGRAM_NAME/bin/foo
/usr/local/man/man1/foo.1 -> ../../stow/PROGRAM_NAME/man/man1/foo.1
/usr/local/lib/foo -> ../stow/PROGRAM_NAME/lib/foo

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

यदि आप एक ही प्रोग्राम के विभिन्न संस्करणों के बीच जल्दी से स्विच करने में सक्षम होना चाहते हैं, /usr/local/stow/PROGRAM_NAME-VERSIONतो प्रोग्राम डायरेक्टरी के रूप में उपयोग करें । संस्करण 3 से संस्करण 4 में अपग्रेड करने के लिए, संस्करण 4 स्थापित करें, फिर चलाएं stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4

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

यदि आपके पास रूट एक्सेस का उपयोग नहीं करना है या नहीं करना है, तो आप अपने होम डायरेक्टरी के तहत एक निर्देशिका चुन सकते हैं, जैसे ~/software/stow। इस मामले में, ~/software/binअपने में जोड़ें PATH। यदि manस्वचालित रूप से मैन पेज नहीं मिलते हैं, तो ~/software/manअपने में जोड़ें MANPATH। जोड़े ~/software/infoअपने को INFOPATH, ~/software/lib/pythonअपने को PYTHONPATHइतने पर भी लागू हो, और।


4
मेरा मानना ​​है कि जब यह उत्तर पोस्ट किया गया था तब से चीजें थोड़ी बदल गई हैं। तो बस एक अद्यतन के रूप में: जीएनयू स्टो वर्तमान में अनदेखी सूचियों, एकाधिक स्टोव निर्देशिकाओं, संघर्ष पूर्व का पता लगाने, आदि का समर्थन करता है। मुझे यह भी लगता है कि स्टोव सक्रिय विकास के अधीन है जबकि Xstow ~ 3 वर्षों से अद्यतन नहीं किया गया है।
एमिलियो वाज़क्वेज़-रीना

18

आप पैकेज बनाने के लिए चेक-इन का उपयोग कर सकते हैं (RPM, Deb या Slackware संगत पैकेज) इस तरह, आप एप्लिकेशन को जोड़ने / हटाने के लिए अपने डिस्ट्रोस पैकेज मैनेजर का उपयोग कर सकते हैं (लेकिन अपडेट नहीं)

आप कमांड के checkinstallस्थान पर make installउपयोग करते हैं (डीब के लिए -D पैरामीटर का उपयोग करते हैं; -R RPM है और -S स्लैकवेयर है):

root@nowhere# ./configure
root@nowhere# make
root@nowhere# checkinstall -D

चेक स्थापना डिफ़ॉल्ट रूप से पैकेज का निर्माण और स्थापित करेगी, या आपके पास यह स्थापित किए बिना केवल पैकेज का निर्माण कर सकता है।

अधिकांश डिस्ट्रोस रिपॉजिटरी में चेक-इंस्टॉलेशन उपलब्ध है।


यह अच्छा है, लेकिन मैं मुख्य रूप से बहुत सक्रिय कार्यक्रमों के लिए टैरोबॉल का उपयोग कर रहा हूं, जो अक्सर पैक किए जाते हैं और स्टोव में टूटे हुए और नहीं संस्करणों के बीच स्विच करने की क्षमता महान है
Will03uk

दुर्भाग्य से, checkinstallऐसा नहीं लगता है कि सक्रिय रूप से बनाए रखा गया है (?) :-(
निकोस एलेक्जेंड्रिस

@ निकोसलेक्सैंड्रिस मैं उत्सुक हूं, अगर यह अपने इच्छित उद्देश्य के लिए काम करता है और यह अच्छी तरह से करता है - जो, एक मौजूदा गैर-उपयोगकर्ता के रूप में, मैं यह मान रहा हूं - यह क्यों आवश्यक है कि इसे सक्रिय रूप से बनाए रखा जाए?
हाशिम

@ हाशिम मैं आपकी बात देखता हूं। "आदतन सोच" में से, हालाँकि, संकलन संकलन से संबंधित सॉफ़्टवेयर का एक टुकड़ा होगा, जिसे रखरखाव की आवश्यकता नहीं है, जब संकलक विकसित होते हैं?
निकोस एलेक्जेंड्रिस

6

अधिकांश भाग के लिए इस प्रकार की चीज़ों को होने से रोकने के लिए पैकेज, पोर्ट और अन्य प्रकार के प्रबंधकों के पीछे यही कारण था।

मैं कहूंगा कि मैन्युअल हटाने के लिए एक मैनुअल इंस्टाल का एकमात्र तरीका है, जब तक कि किसी और के पास उस बिंदु का बेहतर जवाब न हो, जिसके बारे में मुझे जानकारी नहीं होगी।


6

लिनक्स से एक और विकल्प स्क्रैच संकेत से है :

पैकेज उपयोगकर्ताओं का उपयोग करके अधिक नियंत्रण और पैकेज प्रबंधन

3 पैकेज उपयोगकर्ता
3.1 परिचय

इस योजना के मूल विचार को आसानी से समझाया गया है। हर पैकेज एक निश्चित "पैकेज उपयोगकर्ता" के अंतर्गत आता है। जब आप एक पैकेज स्थापित करते हैं, तो आप पैकेज को इस पैकेज उपयोगकर्ता के रूप में बनाते हैं और स्थापित करते हैं, जिससे पैकेज उपयोगकर्ता के स्वामित्व वाली सभी फाइलें स्थापित हो जाती हैं। परिणामस्वरूप सभी सामान्य पैकेज प्रबंधन कार्यों को मानक कमांड लाइन उपयोगिताओं के उपयोग के माध्यम से आराम से प्राप्त किया जा सकता है। एक साधारण ls -l <file>आपको बता देंगे उदाहरण के लिए, क्या पैकेज <file>के अंतर्गत आता है और एक find -user ...आदेश आप सभी एक निश्चित पैकेज से संबंधित फाइलें, जैसे पैकेज की स्थापना रद्द करने उन्हें हटा दें पर कार्रवाई करने के लिए अनुमति देता है।

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

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

इस पहले कच्चे सुझाव के बाद, मुझे एक विकसित संस्करण मिला:

crablfs - उपयोगकर्ता आधारित पैकेज प्रबंधन प्रणाली

यह crablfsपैकेज प्रबंधन के लिए अद्वितीय uids और gids का उपयोग करके पैकेज प्रबंधन का नवीनतम नमूना है, लेकिन sourceforge पर यह फिर से ulfs में विकसित हो रहा है:

uLFS: स्क्रैच से आपका प्रबंधनीय और पुन: प्रयोज्य लिनक्स

स्थापित पैकेज के कारण उपयोगकर्ताओं के लिए मुझे लगता है कि "पैकेज उपयोगकर्ता" LFS समाधान एक हल्का, कम आक्रामक और सुरुचिपूर्ण है। संक्षेप में, आप प्रत्येक पैकेज के लिए अद्वितीय uids और gids का उपयोग करके फ़ाइलों को ट्रैक /usr/localया /home/user/localट्रैक करते हैं, लेकिन सभी फ़ाइलों को पारंपरिक स्थानों, सामान्य निर्देशिकाओं में रखते हैं /usr/local/bin, /usr/local/libजैसे कि यह सभी मुख्यधारा के लिनक्स वितरणों में है ... फ़ाइल रोड़ा और अवांछित फ़ाइल ओवरराइटिंग या हटा रहा है मैथियस एस। बेनकमन द्वारा अधिक_कंट्रोल_एंड्रॉल_पग_मन.टेक्स्ट द्वारा समझाया गया एक साफ-सुथरा लिनक्स ट्रिक से बचा जाता है जिसे केवल सामान्य फ़ाइल और निर्देशिका अनुमति हेरफेर की आवश्यकता होती है, उदाहरण के लिए अवांछित फ़ाइल ओवरराइट से बचने के लिए निर्देशिकाओं के लिए चिपचिपा बिट अनुमति:

३.३ समूह

प्रत्येक पैकेज उपयोगकर्ता कम से कम 2 समूहों से संबंधित है। इन समूहों में से एक "इंस्टॉल" समूह है, जो सभी पैकेज उपयोगकर्ता (और केवल पैकेज उपयोगकर्ता) संबंधित हैं। सभी निर्देशिकाएं जो संकुल को संस्थापित समूह के सामान को स्थापित करने की अनुमति देती हैं। इसमें निर्देशिका जैसे / बिन और / usr / बिन शामिल हैं, लेकिन / जड़ या / जैसी निर्देशिकाओं को शामिल नहीं करता है। इंस्टॉल समूह के स्वामित्व वाली निर्देशिकाएं हमेशा समूह-लेखन योग्य होती हैं। यह पैकेज प्रबंधन पहलुओं के लिए पर्याप्त होगा, लेकिन आगे की तैयारी के बिना यह अतिरिक्त सुरक्षा या नियंत्रण नहीं देगा क्योंकि प्रत्येक पैकेज एक अलग पैकेज से फाइलों को बदल सकता है (उत्पादन में बदलाव दिखाई देगा।ls -l, हालांकि)। इस कारण से सभी इंस्टॉल निर्देशिकाओं को चिपचिपा विशेषता मिलती है। इससे उपयोगकर्ता नई फ़ाइलों को बना सकते हैं और निर्देशिका में अपनी फ़ाइलों को हटा या संशोधित कर सकते हैं, लेकिन अन्य उपयोगकर्ताओं की फ़ाइलों को संशोधित या हटाया नहीं जा सकता है। इस संकेत के बाकी हिस्सों में, जब भी "इंस्टॉल डायरेक्टरी" शब्द का उपयोग किया जाता है, तो यह एक ऐसी निर्देशिका को संदर्भित करता है जो समूह इंस्टॉल के अंतर्गत आता है, समूह-लेखन योग्य और चिपचिपा है। IOW, <dir>एक इंस्टॉलेशन डायरेक्टरी को चालू करने के लिए जो आप करेंगे

chgrp install && chmod g + w, o + t

मेरे लिए यह एक सरल और चतुर समाधान की तरह दिखता है! मैंने अपने LFS बिल्ड में इस योजना का उपयोग किया है और यह एक कार्यशील समाधान है ...


3
  1. आप एक खाली RPM को अनुस्मारक के रूप में बना सकते हैं।
  2. आप एक RPM में सॉफ्टवेयर को ठीक से लपेटने में देख सकते हैं।
  3. आप आपको याद दिलाने के tarलिए इंस्टॉल से फ़ाइलों की एक प्रति छोड़ सकते /usr/src/non-rpmsहैं (यह वही है जो मैं आमतौर पर करता हूं)।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.