कैसे निष्पादन योग्य स्थापित करने के लिए


13

मैं कभी-कभी ऐसे सॉफ़्टवेयर में चलता हूं जो केवल एक निष्पादन योग्य के रूप में .debया उसमें पेश नहीं .rpmकिया जाता है।
उदाहरण के लिए Visual Studio Code , WebStorm या Kerbal Space Programm

इस प्रश्न के लिए, मैं संदर्भ के बिंदु के रूप में विज़ुअल स्टूडियो कोड ले जाऊंगा।

सॉफ्टवेयर को ज़िप्ड पैकेज के रूप में पेश किया जाता है।
जब unzipping, मैं एक फ़ोल्डर के साथ छोड़ दिया जाता VSCode-linux-x64है जिसे एक निष्पादन योग्य नाम दिया गया है Code
मैं Codeअपने टर्मिनल के साथ इस पर क्लिक कर सकता हूं या उस /home/user/Downloads/VSCode-linux-x64/Codeपर अमल कर सकता हूं ।
हालांकि, मैं जानना चाहूंगा कि क्या इस एप्लिकेशन को इंस्टॉल करने का कोई उचित तरीका है।

मैं क्या हासिल करना चाहता हूं:

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

अतिरिक्त जानकारी:

  • डेस्कटॉप पर्यावरण: Gnome3
  • ओएस: डेबियन

EDIT:
मैंने @kba को जवाब देने का फैसला किया क्योंकि उसका दृष्टिकोण मेरे बैकअप समाधान और इसके अलावा बेहतर काम करता है। बायनेरिज़ को निष्पादित करने वाली स्क्रिप्ट होने से आपको तर्क जोड़ने की संभावना मिलती है।
लेकिन निष्पक्ष होने के लिए, @ जॉन डब्ल्यूएच दृष्टिकोण @ केबीए के रूप में अच्छा है।

जवाबों:


12

किसी प्रोग्राम को उसके नाम से पुकारने के लिए, गोले $PATHवातावरण चर में निर्देशिकाओं को खोजते हैं । डेबियन में, $PATHआपके उपयोगकर्ता के लिए डिफ़ॉल्ट में /home/YOUR-USER-NAME/bin(यानी ~/bin) शामिल होना चाहिए ।

पहले सुनिश्चित करें कि निर्देशिका ~/binमौजूद है या नहीं तो बनाएं:

mkdir -p ~/bin

आप उस निर्देशिका के लिए बायनेरिज़ को सीलिंक कर सकते हैं जो इसे शेल को उपलब्ध कराने के लिए है:

mkdir -p ~/bin
ln -s /home/user/Downloads/VSCode-linux-x64/Code ~/bin/vscode

जो आपको vscodeकमांड लाइन पर या कमांड लॉन्चर से चलने की अनुमति देगा ।

नोट: आप $PATHनिर्देशिकाओं के लिए बायनेरिज़ की प्रतिलिपि भी बना सकते हैं, लेकिन अगर वे सापेक्ष रास्तों पर निर्भर हैं तो समस्याएँ पैदा कर सकते हैं।

सामान्य तौर पर, हालांकि, OS (apt-get, deb package) या सॉफ्टवेयर प्रोजेक्ट के निर्माण टूल द्वारा प्रदान किए गए साधनों का उपयोग करके सॉफ़्टवेयर को ठीक से स्थापित करना हमेशा बेहतर होता है। यह सुनिश्चित करेगा कि आश्रित पथ (जैसे शुरुआत स्क्रिप्ट, मैन पेज, कॉन्फ़िगरेशन आदि) सही तरीके से सेट किए गए हों।

अद्यतन: इसके अलावा थॉमस डिक्की की टिप्पणियों और फहीम मीठा के उत्तर को दर्शाते हुए कि मैं आमतौर पर सॉफ्टवेयर के लिए क्या करता हूं जो एक शीर्ष स्तर के बाइनरी के साथ एक टारबॉल के रूप में आता है और वहां से चलाने की उम्मीद करता है:

(मानकों का पालन न के क्रम में एक समझदार स्थान में रख दें /opt, /usr/localया अपने घर निर्देशिका, जैसे में एक फ़ोल्डर ~/build) और एक में एक निष्पादन स्क्रिप्ट आवरण बनाने के $PATHस्थान (जैसे /usr/local/binया ~/bin) है कि उस स्थान में परिवर्तन और बाइनरी कार्यान्वित:

#/bin/sh
cd "$HOME/build/directory"
exec ./top-level-binary "$@"

चूंकि यह उस निर्देशिका में बदलने और मैन्युअल रूप से बाइनरी को निष्पादित करने का अनुकरण करता है, इसलिए गैर-मौजूदा सापेक्ष पथ जैसी समस्याओं को डीबग करना आसान बनाता है।


1
मुझे यह तरीका पसंद है। व्यक्तिगत रूप से मैं बस एक अन्य व्यक्ति को बैश प्रोफ़ाइल में फेंक दूंगा, हालांकि यदि आप इसके साथ बहुत सारे कार्यक्रम करते हैं तो यह तेजी से गड़बड़ हो जाएगा।
वॉर्ब्लक्स

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

8

टीएलडीपी के अनुसार , /optइस तरह के सॉफ्टवेयर के लिए एक अच्छी जगह हो सकती है। मैंने कुछ प्रिंटर-संबंधित टूल, और स्काइप के "डायनेमिक" संस्करण को संग्रहीत करने के लिए स्वयं इसका उपयोग किया है (जैसा कि केबीए ने कहा, "टर्मिनल सपोर्ट" तब PATHतदनुसार चर सेट करके प्राप्त किया जा सकता है )।

अधिक आम तौर पर, मैं /optएक निष्पादन योग्य के रूप में पैक किए गए मालिकाना सॉफ़्टवेयर को "इंस्टॉल" करने के लिए उपयोग करता हूं , लेकिन शायद यह सिर्फ मेरे लिए है। इसके अलावा, मैं केवल इस तरह के सॉफ़्टवेयर से बचने की प्रवृत्ति रखता हूं, क्योंकि मुझे आमतौर पर कोई निश्चितता नहीं है कि मैं इसे चलाने के बाद क्या करने जा रहा हूं।

एक और कारण मैंने चुना /optक्योंकि यह आमतौर पर तीसरे पक्ष, स्वतंत्र कोड के लिए होता है, जो अपनी /opt/'package'निर्देशिका (और अन्य optनिर्देशिका जैसे /etc/opt) के बाहर किसी भी फाइल पर भरोसा नहीं करता है ।

किसी भी परिस्थिति में अन्य पैकेज फाइलें / ऑप्ट, / var / ऑप्ट, और / etc / ऑप्ट पदानुक्रम के बाहर मौजूद नहीं हैं, उन पैकेज फ़ाइलों को छोड़कर जो ठीक से काम करने के लिए फाइल सिस्टम ट्री के भीतर विशिष्ट स्थानों पर रहते हैं। [...] आम तौर पर, एक सिस्टम पर एक पैकेज का समर्थन करने के लिए आवश्यक सभी डेटा / ऑप्ट / 'पैकेज' के भीतर मौजूद होना चाहिए, जिसमें फ़ाइलों को / etc / opt / 'package' और / var / opt / 'में कॉपी किया जाना है। पैकेज 'और साथ ही आरक्षित निर्देशिका / विकल्प में।

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

यहां स्थापित किए जाने वाले किसी भी पैकेज को अलग-अलग / ऑप्ट / 'पैकेज' या / ऑप्ट / 'प्रदाता' डायरेक्टरी ट्री में अपनी स्टैटिक फाइल्स (यानी अतिरिक्त फोंट, क्लिपआर्ट, डेटाबेस फाइल्स) का पता लगाना होगा (विंडोज जिस तरह से इंस्टॉल होगा, उसी तरह) अपने स्वयं के डायरेक्टरी ट्री C: \ Windows \ Progam Files \ "प्रोग्राम का नाम" के लिए नया सॉफ़्टवेयर, जहां 'पैकेज' एक ऐसा नाम है जो सॉफ़्टवेयर पैकेज का वर्णन करता है और 'प्रदाता' प्रदाता का LANANA पंजीकृत नाम है।

अधिक जानकारी के लिए मैं भी पढ़ने सुझाव है कि यह अन्य यू एंड एल सवाल , betwen अंतर के साथ जो सौदों /optऔर /usr/local। मैं व्यक्तिगत रूप से /usr/localइस मामले में बचना चाहूंगा , खासकर अगर मैं वह नहीं हूं जो मैंने स्थापित किए गए कार्यक्रम को बनाया है।


6

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

हां, लिनक्स वितरण बाइनरी पैकेज जैसे debएस और rpmएस कस्टम स्रोत से उत्पन्न होते हैं, लेकिन उन्हें होना जरूरी नहीं है। और यह अक्सर (हालांकि हमेशा नहीं होता है) चीजों को व्यवस्थित करने के लिए संभव है कि परिणामस्वरूप वितरण बाइनरी पैकेज वितरण नीति के अनुरूप "सही" स्थानों में चीजों को स्थापित करता है।

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


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

घोषणा: इस प्रश्न के लेखन के दौरान किसी भी याक का मुंडन नहीं किया गया था।
फहीम मिष्ठा

@FaheemMitha - आप एक याक को बिना दर्द के दाढ़ी बना सकते हैं fpm
हिरण हंटर

@DeerHunter मैंने उस एक के बारे में सुना है। क्या आपने इसका इस्तेमाल किया है?
फहीम मिष्ठा

1
@DeerHunter अच्छा बिंदु वास्तव में, मैंने कुछ साल पहले एक परियोजना के लिए क्रॉस-प्लेटफॉर्म बाइनरी पैकेज बनाने के लिए fpm का उपयोग किया है और यह वास्तव में एक हवा थी।
kba

3

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

सामान्य रूप से जहां डिस्ट्रो के पैकेज मैनेजर द्वारा प्रबंधित स्थानीय स्तर पर स्थापित बायनेरिज़ को नहीं रखा गया है /usr/local/bin। आप इसे वहां रख सकते हैं, और चूंकि निर्देशिका है (या होनी चाहिए) पहले से ही $PATHआप अपने नाम को कमांड लाइन पर टाइप करके सॉफ्टवेयर चला सकते हैं।

आम तौर पर सॉफ्टवेयर को भी एक मैनपेज (गैर-दस्तावेजी सॉफ्टवेयर बुरा, सही है?) जो में चला जाता है होना चाहिए /usr/local/manऔर इस तरह के अन्य भाषाओं और प्लग इन, जिसमें जा सकता में अनुवाद के रूप में कुछ समर्थन फ़ाइलों हो सकता है /usr/local/shareया /usr/local/lib, और इतने पर। इस कारण से, सॉफ़्टवेयर जो पैकेज के रूप में वितरित नहीं किया जाता है जैसे कि .debया .rpmआमतौर पर एक इंस्टॉलर के साथ आता है जो सब कुछ सही स्थानों पर रखता है। जब आप स्रोत से स्थापित कर रहे हैं, तो यह आमतौर पर होता है make install


विजुअल स्टूडियो कोड के मामले में , इसमें 77 LICENSE फाइलें निर्देशिका ट्री के माध्यम से बिखरी हुई हैं। शीर्ष-स्तर Codeसिर्फ शुरुआती बिंदु है। इसे चलाने पर लाइसेंस प्रदर्शित हो सकता है (64-बिट निष्पादन योग्य मशीन पर हाथ में नहीं चलता है, लेकिन किसी को ओपी के वास्तविक प्रश्न को संबोधित करने के लिए एक अच्छा जवाब प्रदान करने के लिए उस तरह की चीज को सत्यापित करना चाहिए ।
थॉमस डिकी

धन्यवाद @ThomasDickey स्पष्टीकरण के लिए। मेरा मानना ​​है कि मैंने ओपी की सटीक स्थिति को गलत समझा। मैंने सोचा था कि उन्हें केवल एक चीज मिली थी, जो एक अकेली ईएलएफ निष्पादन योग्य (तारकोल में लिपटी) थी
सेलाडा

नहीं - मैंने एक त्वरित रूप लिया (मेरी टू-डू सूची पर नहीं ...), और इसे ~ 1500 फाइलें मिली हैं। बस OSX के साथ एक नज़र रखना, कि भाग गया, और एक वेब ब्राउज़र पर एक ट्यूटोरियल में शुरू होता है। @ केबीए का जवाब आंशिक रूप से उपयोगी है, हालांकि एक नियम के रूप में, मैं /usr/localअपने होम डायरेक्टरी के बजाय इसे अनज़िप करने की कोशिश करूंगा। (सभी कार्यक्रम काम नहीं करेंगे - Eclipseउदाहरण के लिए लें)।
थॉमस डिकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.