साइमन! मैं जानता हूं कि तुम कैसा महसूस करते हो; मैं लिनक्स सीखने के इस हिस्से से भी जूझता रहा। अपने स्वयं के अनुभवों के आधार पर, मैंने कुछ ऐसी वस्तुओं के बारे में एक ट्यूटोरियल लिखा है जिन्हें आप संबोधित करते हैं (ज्यादातर अपने लिए एक संदर्भ के रूप में!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html । मुझे लगता है कि आप मेरे नोट के बारे में सराहना करेंगे कि पायथन एप्लिकेशन का निर्माण / स्थापित करने के लिए कितने सरल हैं। :)
आशा है कि यह मदद करता है! और खुश संकलन।
टिम जोन्स
उबंटू लिनक्स में स्रोत से एक आवेदन का निर्माण / स्थापना
जबकि उबंटू रिपॉजिटरी बहुत सारे अनुप्रयोगों से भरी होती हैं, एक समय या किसी अन्य पर आप उस "मस्ट-है" टूल के लिए बाध्य होते हैं जो रिपॉजिटरी में नहीं है (या एक डेबियन पैकेज नहीं है) या आपको एक की आवश्यकता है रिपॉजिटरी की तुलना में नया संस्करण। आप क्या करते हैं? खैर, आपको स्रोत से एप्लिकेशन का निर्माण करना होगा! चिंता मत करो, यह वास्तव में उतना जटिल नहीं है जितना लगता है। यहाँ कुछ सुझाव दिए गए हैं, जो एक रैंक शौकिया होने से मेरे अनुभवों पर आधारित है! (जब मैं इस उदाहरण के लिए उबंटू का उपयोग कर रहा हूं, तो सामान्य अवधारणाएं किसी भी यूनिक्स / लिनक्स वितरण पर लागू होनी चाहिए, जैसे कि फेडोरा, और यहां तक कि विंडोज पर सिग्विन मंच।)
स्रोत से अधिकांश अनुप्रयोगों के निर्माण (संकलन) की मूल प्रक्रिया इस क्रम का अनुसरण करती है: कॉन्फ़िगर -> संकलन -> स्थापित करें। इन चीजों को करने के लिए विशिष्ट यूनिक्स / लिनक्स कमांड हैं: config
-> make
->> make install
। कुछ मामलों में, आपको ऐसे वेब पेज भी मिलेंगे जो बताते हैं कि इन सभी को एक ही कमांड में जोड़ा जा सकता है:
$ config && make && make install
बेशक, यह आदेश मानता है कि इनमें से किसी भी चरण में कोई समस्या नहीं है। यह वह जगह है जहाँ मज़ा आता है!
शुरू करना
यदि आपने पहले अपने सिस्टम पर स्रोत से किसी एप्लिकेशन को संकलित नहीं किया है, तो आपको संभवतः इसे कुछ सामान्य विकास टूल, जैसे कि gcc
कंपाइलर सूट, कुछ सामान्य हेडर फ़ाइलों के साथ सेट करना होगा (इसे इस कोड के रूप में सोचें जो पहले ही लिखा जा चुका है। किसी और द्वारा उपयोग किए जा रहे प्रोग्राम द्वारा), और मेक टूल। सौभाग्य से, उबंटू में, एक रूपक है जिसे कहा जाता है build-essential
कि यह स्थापित होगा। इसे स्थापित करने के लिए (या बस यह सुनिश्चित करें कि आपके पास पहले से ही है!), टर्मिनल में इस कमांड को चलाएं:
$ sudo apt-get install build-essential
अब जब आपके पास मूल सेटअप है, तो एप्लिकेशन स्रोत फ़ाइलों को डाउनलोड करें और उन्हें एक निर्देशिका में सहेजें, जिसके लिए आपने पठन / लेखन अनुमतियाँ, जैसे कि आपकी "होम" निर्देशिका। आमतौर पर, ये .tar.gz
या तो फ़ाइल एक्सटेंशन के साथ एक आर्काइव फ़ाइल में होंगे या .tar.bz2
। .tar
का अर्थ है कि यह एक "टेप संग्रह" है, जो फ़ाइलों है कि उनके रिश्तेदार निर्देशिका संरचना को बरकरार रखता है का एक समूह है। .gz
Gzip (जीएनयू ज़िप) है, जो एक लोकप्रिय यूनिक्स / लिनक्स संपीड़न प्रारूप है के लिए खड़ा है। इसी तरह, .bz2
bzip2 के लिए खड़ा है, जो एक नया संपीड़न प्रारूप है जो gzip की तुलना में उच्च संपीड़न (छोटे संपीड़ित फ़ाइल आकार) प्रदान करता है।
स्रोत फ़ाइल डाउनलोड करने के बाद, एक टर्मिनल विंडो खोलें (उबंटू मेनू से सिस्टम टर्मिनल) और उस निर्देशिका में बदलें जहां आपने अपनी फ़ाइल सहेजी थी। (मैं ~/download
इस उदाहरण में उपयोग करूंगा । यहां, '~' आपकी "होम" निर्देशिका का एक शॉर्टकट है।) डाउनलोड की गई आर्काइव फ़ाइल से फाइल निकालने के लिए टार कमांड का उपयोग करें:
यदि आपकी फ़ाइल एक gzip संग्रह है (उदाहरण के साथ समाप्त होता है .tar.gz
), कमांड का उपयोग करें:
$ tar -zxvf filename.tar.gz
यदि आपकी फ़ाइल bzip2 संग्रह है (जैसे, समाप्त होता है .tar.bz2
), कमांड का उपयोग करें:
$ tar -jxvf filename.tar.gz
युक्ति: यदि आप अभिलेखागार निकालने के लिए सभी कमांड लाइन स्विच को याद नहीं रखना चाहते हैं, तो मैं इन उपयोगिताओं में से एक (या दोनों) प्राप्त करने की सलाह देता हूं: dtrx (मेरा पसंदीदा!) या डेको (अधिक लोकप्रिय)। इन उपयोगिताओं में से किसी के साथ, आप बस उपयोगिता (dtrx या डेको) और फ़ाइल नाम का नाम दर्ज करते हैं, यह बाकी के सभी करता है। इन दोनों को "पता" है कि किसी भी संग्रह प्रारूप को कैसे संभालना है जिसे आप भर में चलाने की संभावना रखते हैं और उनके पास बड़ी त्रुटि हैंडलिंग है।
स्रोत से निर्माण करते समय, दो सामान्य प्रकार की त्रुटियां हैं जिनका सामना करने की संभावना है:
- कॉन्फ़िगरेशन त्रुटि तब होती है जब आप एक कॉन्फ़िगरेशन बनाते हैं (आमतौर पर कॉन्फ़िगर या कॉन्फ़िगर नाम) एक मेकफाइल बनाने के लिए जो आपके सेटअप के लिए विशिष्ट है।
- कंपाइलर एरर तब होता है जब आप मेक कमांड चलाते हैं (मेकफाइल जेनरेट होने के बाद) और कंपाइलर को कुछ कोड की जरूरत नहीं होती है।
हम इनमें से प्रत्येक को देखेंगे और चर्चा करेंगे कि उन्हें कैसे हल किया जाए।
कॉन्फ़िगरेशन और कॉन्फ़िगरेशन त्रुटियाँ
आपके द्वारा स्रोत कोड संग्रह फ़ाइल को निकालने के बाद, टर्मिनल में, आपको उस निर्देशिका को बदलना चाहिए जिसमें निकाली गई फ़ाइलें हैं। आमतौर पर, यह निर्देशिका नाम फ़ाइल के नाम ( .tar.gz
या .tar.bz2
एक्सटेंशन के बिना ) के समान होगा। हालांकि, कभी-कभी निर्देशिका नाम केवल आवेदन का नाम है, बिना किसी संस्करण की जानकारी के।
स्रोत निर्देशिका में README
फ़ाइल और / या INSTALL
फ़ाइल (या समान नामों वाली कोई चीज़) की तलाश करें। इन फ़ाइलों में आम तौर पर आवेदन को बनाने / संकलित करने और निर्भरता के बारे में जानकारी सहित इसे स्थापित करने के बारे में उपयोगी जानकारी होती है। "निर्भरता" अन्य घटकों या पुस्तकालयों के लिए सिर्फ एक फैंसी नाम है जिसे सफलतापूर्वक संकलित करने की आवश्यकता है।
आपके द्वारा README
और / या INSTALL
फ़ाइल पढ़ने के बाद (और, उम्मीद है कि आवेदन के लिए किसी भी प्रासंगिक ऑनलाइन दस्तावेज़ को देखा गया हो), एक निष्पादन योग्य के लिए देखें (फ़ाइल में "x" अनुमति सेट) फ़ाइल नाम config
या configure
। कभी-कभी फ़ाइल में एक एक्सटेंशन हो सकता है, जैसे कि .sh
(जैसे, config.sh
)। यह आमतौर पर एक शेल स्क्रिप्ट है जो यह पुष्टि करने के लिए कुछ अन्य उपयोगिताओं को चलाता है कि आपके पास संकलन के लिए "समझदार" वातावरण है। दूसरे शब्दों में, यह सुनिश्चित करने के लिए जाँच करेगा कि आपके पास वह सब कुछ स्थापित है जिसकी आपको आवश्यकता है।
युक्ति: यदि यह एक पाइथन-आधारित अनुप्रयोग है, तो एक कॉन्फिगर फ़ाइल के बजाय, आपको एक फ़ाइल नाम मिलनी चाहिए setup.py
। पायथन एप्लिकेशन आमतौर पर स्थापित करने के लिए बहुत सरल हैं। इस एप्लिकेशन को स्थापित करने के लिए, रूट के रूप में (उदाहरण के लिए, Ubuntu के तहत निम्नलिखित कमांड के सामने sudo डालें), इस कमांड को चलाएँ:
$ python setup.py install
वह सब होना चाहिए जो आपको करने की आवश्यकता है। आप इस ट्यूटोरियल के शेष को छोड़ सकते हैं और अपने एप्लिकेशन का उपयोग और आनंद लेने के लिए सीधे आगे बढ़ सकते हैं।
टर्मिनल में कॉन्फ़िगरेशन स्क्रिप्ट चलाएँ। आमतौर पर, आप अपने नियमित उपयोगकर्ता खाते के साथ अपनी कॉन्फ़िगरेशन स्क्रिप्ट चला सकते हैं (और चाहिए!)।
$ ./config
स्क्रिप्ट आपको क्या कर रही है, इसका अंदाजा लगाने के लिए कुछ संदेश प्रदर्शित करेगी। अक्सर, स्क्रिप्ट आपको इस बात का संकेत देगी कि क्या यह सफल हुआ या असफल और, यदि यह विफल रहा, तो विफलता के कारण के बारे में कुछ जानकारी। यदि आपको कोई त्रुटि संदेश नहीं मिलता है, तो आप आमतौर पर मान सकते हैं कि सब कुछ ठीक हो गया।
यदि आपको कोई स्क्रिप्ट नहीं मिलती है जो कॉन्फ़िगरेशन स्क्रिप्ट की तरह दिखती है, तो इसका आमतौर पर मतलब है कि एप्लिकेशन बहुत सरल है और यह प्लेटफ़ॉर्म स्वतंत्र है। इसका मतलब है कि आप बस नीचे दिए गए बिल्ड / कंपाइल स्टेप को छोड़ सकते हैं, क्योंकि बशर्ते Makefile
किसी सिस्टम पर काम करना चाहिए।
एक उदाहरण
इस ट्यूटोरियल में, मैं टेक्स्ट-आधारित आरएसएस रीडर का उपयोग करने जा रहा हूं, जिसे न्यूज़बीटर कहा जाता है, यह उन त्रुटियों के प्रकारों के लिए एक उदाहरण के रूप में है, जिन्हें आप अपने एप्लिकेशन का निर्माण करते समय सामना कर सकते हैं। Newsbeuter के लिए, कॉन्फ़िगरेशन स्क्रिप्ट का नाम है config.sh
। मेरे सिस्टम पर, जब मैं चलता हूं config.sh
, तो निम्न त्रुटियां होती हैं:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
कुछ शोध करने पर, मैंने पाया कि, वास्तव में, sqlite3
एप्लिकेशन इंस्टॉल किया गया था। हालांकि, जब से मैं स्रोत से निर्माण करने की कोशिश कर रहा हूं, यह एक टिप है कि config.sh
वास्तव में क्या देख रहे हैं विकास पुस्तकालयों (हेडर) के लिए sqlite3
। उबंटू में, अधिकांश पैकेजों में एक संबद्ध विकास समकक्ष पैकेज होता है जो समाप्त होता है -dev
। (अन्य प्लेटफॉर्म, जैसे फेडोरा, अक्सर -devel
विकास पैकेज के लिए पैकेज प्रत्यय का उपयोग करते हैं।)
sqlite3
विकास पैकेज के लिए उपयुक्त पैकेज खोजने के लिए , हम apt-cache
उबंटू में उपयोगिता का उपयोग कर सकते हैं (और, इसी तरह, yum
फेडोरा में उपयोगिता):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
यह आदेश परिणामों की एक बड़ी सूची देता है, इसलिए हमें यह निर्धारित करने के लिए थोड़ा जासूसी कार्य करना होगा कि कौन सा उपयुक्त पैकेज है। इस मामले में, उपयुक्त पैकेज निकला libsqlite3-dev
। ध्यान दें कि कभी-कभी हम जिस पैकेज की तलाश कर रहे हैं lib
, उसमें केवल एक ही पैकेज नाम प्लस के बजाय उपसर्ग होगा -dev
। ऐसा इसलिए है क्योंकि कभी-कभी हम एक साझा पुस्तकालय की तलाश में होते हैं जिसका उपयोग कई अलग-अलग अनुप्रयोगों द्वारा किया जा सकता है। स्थापित करने के लिए libsqlite3-dev
, टर्मिनल में ठेठ एप्ट-गेट स्थापित कमांड चलाएं:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
अब, हमें config.sh
यह सुनिश्चित करने के लिए फिर से दौड़ना होगा कि हमने इस निर्भरता की समस्या को हल कर दिया है और हमें और अधिक निर्भरता की समस्या नहीं है। (जबकि मैं इसे यहाँ नहीं दिखाया जाएगा, Newsbeuter के मामले में, मैं भी स्थापित करने के लिए किया था libcurl4-openssl-dev
, तो आप एक विकास पैकेज (जैसे स्थापित करता है, तो पैकेज, साथ ही।) यह भी libsqlite3-dev
) और संबद्ध आवेदन पैकेज (जैसे, sqlite3
) नहीं है पहले से ही स्थापित, अधिकांश सिस्टम स्वचालित रूप से एक ही समय में संबंधित एप्लिकेशन पैकेज स्थापित करेगा।
जब कॉन्फ़िगरेशन सफलतापूर्वक चलता है, तो परिणाम यह होगा कि यह एक या एक से अधिक फ़ाइलें बनाएगा। इन फ़ाइलों को आम तौर पर नामित किया जाता है Makefile
(याद रखें कि फ़ाइल का नाम केस यूनिक्स / लिनक्स में मायने रखता है!)। यदि बिल्ड पैकेज में उप-निर्देशिकाएं शामिल हैं, जैसे कि src
, आदि, तो इन उप-निर्देशिकाओं में से प्रत्येक में ए Makefile
, साथ ही शामिल होगा ।
भवन और संकलन त्रुटियाँ
अब, हम वास्तव में एप्लिकेशन को संकलित करने के लिए तैयार हैं। इसे अक्सर इमारत कहा जाता है और नाम कुछ निर्माण की वास्तविक दुनिया की प्रक्रिया से उधार लिया जाता है। आवेदन के विभिन्न "टुकड़े", जो आम तौर पर कई स्रोत कोड फाइलें हैं, को समग्र अनुप्रयोग बनाने के लिए एक साथ जोड़ा जाता है। मेक यूटिलिटी बिल्ड प्रक्रिया का प्रबंधन करती है और अन्य अनुप्रयोगों, जैसे संकलक और लिंकर को कॉल करती है, वास्तव में काम करने के लिए। ज्यादातर मामलों में, आप केवल उस निर्देशिका से अपने (अपने नियमित उपयोगकर्ता खाते के साथ) बनाते हैं जहां आपने कॉन्फ़िगरेशन चलाया था। (कुछ मामलों में, जैसे कि क्यूटी पुस्तकालय के साथ लिखे गए अनुप्रयोगों को संकलित करने के लिए, आपको इसके बजाय क्यूमेक जैसे एक और "आवरण" एप्लिकेशन को चलाने की आवश्यकता होगी। फिर, हमेशा विवरण के लिए README
और / या INSTALL
दस्तावेजों की जांच करें।)
टर्मिनल में ऊपर दिए गए कॉन्फ़िगरेशन स्क्रिप्ट की तरह, जब आप टर्मिनल में मेक (या समान उपयोगिता) चलाते हैं, तो यह कुछ संदेशों को प्रदर्शित करता है जो निष्पादित कर रहा है और कोई चेतावनी और त्रुटियां। आप आम तौर पर चेतावनियों को नजरअंदाज कर सकते हैं, क्योंकि वे मुख्य रूप से एप्लिकेशन के डेवलपर्स के लिए हैं और उन्हें बता रहे हैं कि कुछ मानक अभ्यास हैं जिनका उल्लंघन किया जा रहा है। आमतौर पर, ये चेतावनी एप्लिकेशन फ़ंक्शन को प्रभावित नहीं करती है। दूसरी ओर, संकलक त्रुटियों से निपटा जाना चाहिए। न्यूज़बीटर के साथ, जब मैं भाग गया, तो कुछ समय के लिए चीजें ठीक हो गईं, लेकिन फिर मुझे एक त्रुटि मिली:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
पहली त्रुटि सामने आते ही मेक प्रोसेस बंद हो जाएगा। संकलक त्रुटियों को संभालना कभी-कभी मुश्किल व्यवसाय हो सकता है। आपको समस्या के बारे में कुछ सुरागों के लिए त्रुटियों को देखना होगा। आमतौर पर, समस्या यह है कि कुछ हेडर फाइलें, जो आम तौर पर की एक्सटेंशन है .h
या .hpp
, याद कर रहे हैं। उपरोक्त त्रुटि के मामले में, यह है (या होना चाहिए!) स्पष्ट है कि समस्या यह है कि stfl.h
हेडर फ़ाइल नहीं मिल सकती है। जैसा कि इस उदाहरण से पता चलता है, आप त्रुटि संदेश की पहली पंक्तियों को देखना चाहते हैं और समस्या के अंतर्निहित कारण का पता लगाने के लिए अपना काम करना चाहते हैं।
न्यूज़बीटर डॉक्यूमेंटेशन को देखने के बाद (जो मुझे शुरू करने से पहले करना चाहिए था, लेकिन तब ट्यूटोरियल का यह हिस्सा बहुत सार्थक नहीं होगा!), मैंने पाया कि इसमें एसटीएफएल नामक 3-पार्टी लाइब्रेरी की आवश्यकता है। तो हम इस मामले में क्या करते हैं? ठीक है, हम अनिवार्य रूप से उस आवश्यक पुस्तकालय के लिए इस सटीक प्रक्रिया को दोहराते हैं: पुस्तकालय प्राप्त करते हैं और इसके लिए कॉन्फ़िगर-बिल्ड-इंस्टॉल प्रक्रिया को निष्पादित करते हैं और फिर, वांछित एप्लिकेशन का निर्माण फिर से शुरू करते हैं। उदाहरण के लिए, एसटीएफएल के मामले में, मुझे libncursesw5-dev
ठीक से निर्माण करने के लिए पैकेज स्थापित करना था । (आमतौर पर, किसी अन्य आवश्यक एप्लिकेशन को स्थापित करने के बाद हमारे मूल एप्लिकेशन पर कॉन्फ़िगरेशन चरण को फिर से करना आवश्यक नहीं है, लेकिन यह कभी भी दर्द नहीं करता है।)
STFL टूलकिट को सफलतापूर्वक स्थापित करने के बाद, न्यूज़बीटर के लिए मेक प्रोसेस सफलतापूर्वक चला। बनाने की प्रक्रिया आम तौर पर जहां यह बंद हो जाता है (त्रुटि के बिंदु पर) उठाता है। इस प्रकार, पहले से ही सफलतापूर्वक संकलित की गई किसी भी फाइल को दोबारा नहीं बनाया जाएगा। यदि आप सब कुछ recompile करना चाहते हैं, तो आप किसी भी संकलित ऑब्जेक्ट को हटाने के लिए सभी को साफ कर सकते हैं और फिर से बना सकते हैं।
स्थापित कर रहा है
बिल्ड प्रक्रिया सफलतापूर्वक पूरी होने के बाद, आप एप्लिकेशन इंस्टॉल करने के लिए तैयार हैं। ज्यादातर मामलों में, एप्लिकेशन को फ़ाइल सिस्टम (जैसे, /usr/bin
या /usr/share/bin
, आदि) के सामान्य क्षेत्रों में स्थापित करने के लिए , आपको स्थापना को रूट पर चलाने की आवश्यकता होगी। पूरी प्रक्रिया में इंस्टॉल करना वास्तव में सबसे सरल चरण है। स्थापित करने के लिए, टर्मिनल रन में:
$ make install
किसी भी त्रुटि के लिए इस प्रक्रिया के आउटपुट की जाँच करें। यदि सब कुछ सफल रहा, तो आपको टर्मिनल में कमांड नाम चलाने में सक्षम होना चाहिए और यह लॉन्च होगा। (कमांड लाइन के अंत में संलग्न करें, यदि यह GUI अनुप्रयोग है, या आप टर्मिनल सत्र का उपयोग तब तक नहीं कर पाएंगे, जब तक कि आवेदन समाप्त न हो जाए।)
जब आप स्रोत से कोई एप्लिकेशन बनाते हैं, तो यह आमतौर पर Ubuntu में GUI मेनू में एक आइकन या शॉर्टकट नहीं जोड़ेगा। आपको इसे मैन्युअल रूप से जोड़ना होगा।
और यह मूल रूप से प्रक्रिया है, उबंटू में स्रोत से एक आवेदन के निर्माण और स्थापित करने के लिए, संभावित रूप से पुनरावृत्त होने के बावजूद। आपके द्वारा ऐसा करने के बाद, यह आपके लिए दूसरा स्वभाव बन जाएगा!