मैं apt-get के माध्यम से स्थापित संकुल के स्रोत कोड को कैसे प्राप्त और संशोधित कर सकता हूँ?


162

मैं यह मान रहा हूँ कि सभी अनुप्रयोग apt-getखुले स्रोत के माध्यम से स्थापित हैं; लेकिन उन लोगों के लिए जो उस तरीके से उपलब्ध हैं, मैं इन अनुप्रयोगों के लिए स्रोत कोड कहां प्राप्त कर सकता हूं और साथ ही उन्हें अपडेट भी कर सकता हूं?

मेरे पास कुछ ऐसे एप्लिकेशन हैं जिनका मैं नियमित रूप से उपयोग करता हूं जो किसी भी लंबे समय तक सक्रिय रूप से विकसित नहीं हो रहे हैं और मैं सुविधाओं को जोड़ना चाहूंगा। इन एप्लिकेशन को अपडेट करने के अधिकार मुझे कहां से मिलेंगे?

इस मामले में विशेष रूप से, मैं नरक के पैकेज की बात कर रहा हूं


7
apt-getबंद-स्रोत कार्यक्रमों का भी समर्थन करता है, इसलिए आपकी प्रारंभिक धारणा गलत है।
फ्लिम

जवाबों:


182

apt-get source <package>पैकेज के स्रोत को डाउनलोड करने के लिए कमांड (इसके साथ sudo का उपयोग न करें) का उपयोग करें।

से man apt-get:

   source
       source causes apt-get to fetch source packages. APT will examine the
       available packages to decide which source package to fetch. It will then
       find and download into the current directory the newest available version of
       that source package while respect the default release, set with the option
       APT::Default-Release, the -t option or per package with the pkg/release
       syntax, if possible.

       Source packages are tracked separately from binary packages via deb-src type
       lines in the sources.list(5) file. This means that you will need to add such
       a line for each repository you want to get sources from. If you don't do
       this you will properly get another (newer, older or none) source version
       than the one you have installed or could install.

       If the --compile option is specified then the package will be compiled to a
       binary .deb using dpkg-buildpackage, if --download-only is specified then
       the source package will not be unpacked.

       A specific source version can be retrieved by postfixing the source name
       with an equals and then the version to fetch, similar to the mechanism used
       for the package files. This enables exact matching of the source package
       name and version, implicitly enabling the APT::Get::Only-Source option.

       Note that source packages are not tracked like binary packages, they exist
       only in the current directory and are similar to downloading source tar
       balls.

स्रोत से पैकेज बनाने के लिए, पहले बिल्ड निर्भरताएँ स्थापित करें:

sudo apt-get build-dep <package>  

फिर dpkg-buildpackageएक .debफ़ाइल बनाने के लिए उपयोग करें । से अपार्ट और dpkg त्वरित संदर्भ शीट :

dpkg-buildpackage एक डेबियन स्रोत ट्री से डेबियन पैकेज बनाता है। यह काम करने के लिए आपको स्रोत वृक्ष की मुख्य निर्देशिका में होना चाहिए। नमूना उपयोग:

 dpkg-buildpackage -rfakeroot -uc -b

जहां -rfakerootयह निर्देश देता है कि रूट विशेषाधिकारों (स्वामित्व उद्देश्यों के लिए) का अनुकरण करने के लिए फ़ेकरूट कार्यक्रम का उपयोग करें, -uc"क्रिप्टोग्राफी पर हस्ताक्षर न करें" -bके लिए खड़ा है , और "केवल द्विआधारी पैकेज बनाएँ" के लिए खड़ा है

एक टर्मिनल में, cdपैकेज स्रोत युक्त निर्देशिका में (उदाहरण के लिए ~/code/hellanzb-0.13) और निम्नलिखित कमांड चलाएँ:

dpkg-buildpackage -rfakeroot -uc -b

यदि बिल्ड सफल होता है, तो .debमूल
निर्देशिका (उदाहरण ~/code/hellanzb_0.13-6.1_all.deb) में स्थित एक फ़ाइल होगी ।


मैं संशोधित स्रोत से कैसे स्थापित कर सकता हूं। साथ ही इसे वापस उपयोग करने के लिए अन्य उपयोगकर्ताओं के लिए प्रतिबद्ध है। धन्यवाद!
myusuf3

1
@dustyprogrammer .debस्रोत कोड से एक पैकेज बनाने के निर्देशों के साथ मेरे उत्तर को अपडेट करें । रिपॉजिटरी में अपना संशोधित पैकेज प्राप्त करने के लिए, आपको उस बारे में एक मोटू से बात करनी चाहिए ।
यशायाह

@DoR एक डिबेट बनाने का एक तरीका है जो डिफ़ॉल्ट रूप से कस्टम निर्देशिका में स्थापित होता है? उसी तरह हम कॉन्फ़िगर प्रक्रिया के दौरान --prefix का उपयोग करके स्थापित कर सकते हैं? वास्तव में मैं एक पुस्तकालय के स्रोत के लिए टारबॉल ढूंढ नहीं सकता, इसलिए, मैं क्यों नहीं कर सकता - कॉन्फ़िगर करें, और इसे स्थापित करें .. लेकिन यह कि pakages स्रोत उपयुक्त माध्यम से उपलब्ध है, इसलिए मैं वांछित उपसर्ग में स्रोत पैकेज स्थापित करने के लिए सोच रहा था ।
आशीषोनी

2
यदि आप apt-get source (उदाहरण के लिए, अन्य डिस्ट्रो से लिया गया पैकेज बनाते समय) का उपयोग नहीं करना चाहते हैं, तो 3 स्रोत फ़ाइलों को डाउनलोड करें और फ़ाइलों को निकालने के लिए 'dpkg-source -x [फाइन] .dsc' का उपयोग करें। dpkg-buildpackage से पहले अलग है। ( ftp.debian.org/debian/doc/source-unpack.txt )
श्लोमी लॉबटन

क्या sudo apt-get build-dep <package>निर्भरता को बायनेरिज़ के रूप में स्थापित करता है ? यदि हां, तो यह स्रोत से पूर्ण निर्माण नहीं है। स्रोत से बिल्ड-डिप स्थापित निर्भरता कैसे करता है?
नमस्ते वर्ल्ड

21

सामान्य तौर पर, आप इस प्रक्रिया का पालन करके एक स्थापित पैकेज का स्रोत प्राप्त कर सकते हैं:

  1. स्रोत रिपॉजिटरी सक्षम करें। डैशबोर्ड (ऊपरी बाएँ बटन) खोलें और खोजें sources। उस Software & Updatesकार्यक्रम को लाना चाहिए , उसे चलाएं और सुनिश्चित करें कि आपके पास "स्रोत कोड" विकल्प चयनित है:

    यहां छवि विवरण दर्ज करें

  2. एक टर्मिनल खोलें और इस कमांड को चलाएं:

    apt-get source vlc
    

यह vlc के स्रोतों को आपकी वर्तमान निर्देशिका में डाउनलोड करेगा और आप उन्हें अपने अवकाश पर देख सकते हैं।

बेशक, के मामले में vlc, आप उन्हें सीधे videolan.org वेबसाइट से भी डाउनलोड कर सकते हैं: https://www.videolan.org/vlc/download-sources.html


1
आपको
pt

@MBBones argh! नहीं, बेशक आप आदत के बल नहीं है। इस पर ध्यान दिलाने के लिए धन्यवाद।
terdon

टर्मिनल में: सॉफ़्टवेयर-गुण-gtk <--- जो "सॉफ़्टवेयर और अपडेट" GUI पैनल लॉन्च करेगा। (यह जो भी कारण के लिए मेरे लिए डैशबोर्ड खोज में नहीं दिखा था।)
पीस्टोफैगस

17

आप apt-get source --compileसीधे उपयोग कर सकते हैं :

sudo apt-get build-dep <package>
sudo apt-get source --compile <package>

मेरे लिए काम किया। .Deb निर्देशिका उस निर्देशिका में चलती है जिसे आपने कमांड से चलाया था।


9
मेरे लिए भी काम किया, धन्यवाद। बस एक अतिरिक्त विस्तार: आप के साथ .deb स्थापित कर सकते हैंsudo dpkg -i <package>.deb
waldyrious

उस समाधान को छोड़कर सर्वश्रेष्ठ समाधान रिपॉजिटरी संस्करण में वापस आ जाएगा क्योंकि आप "dch -i" के साथ चैंज को दस्तावेज करना भूल गए थे।
फ्यूटल

3

नदी के ऊपर यूआरएल और परियोजना / कार्यक्रम संपर्कों आप पर एक नज़र हो सकता है सहित एक पैकेज के बारे में अधिक जानकारी प्राप्त करने कॉपीराइट फ़ाइल (से संदर्भित packages.debian.org )।

जब पैकेज आपके सिस्टम में शामिल और इंस्टॉल किया जाता है, तो आप सीधे कॉपीराइट फ़ाइल भी पढ़ सकते हैं /usr/share/doc/$package_or_program_name/copyright

देखें कि डेबियन पैकेज का सोर्स कोड कैसे डाउनलोड करें?


2

helloपैकेज के साथ न्यूनतम उदाहरण

: इस और अधिक सब के सब में वर्णन किया गया है https://www.debian.org/doc/manuals/maint-guide/build.en.html

सबसे पहले आइये एक नमूना पैकेज प्राप्त करते हैं:

sudo apt-get install hello
hello

आउटपुट:

Hello, world!

अब इसे हैक करते हैं। स्रोत प्राप्त करें:

apt-get source hello
cd hello-*

और खुला:

vim src/hello.c

और संदेश को संशोधित करें:

Hello, world hacked!

फिर परीक्षण पर ही करें अन्यथा कष्टप्रद परीक्षण विफल होने लगेगा:

vim tests/greeting-1

फिर के साथ पुनर्निर्माण:

sudo apt-get install devscripts
sudo apt-get build-dep hello
debuild -b -uc -us

आउटपुट के अंत के पास, यह कहता है:

dpkg-deb: building package 'hello' in '../hello_2.10-1build1_amd64.deb'.

तो यह मूल निर्देशिका पर .deb बनाया, यह कैसे की हिम्मत। तो अंत में हम संशोधित पैकेज को स्थापित और परीक्षण करते हैं:

sudo dpkg -i ../hello_2.10-1build1_amd64.deb
hello

और तुम वहाँ जाओ, यह नया संदेश देता है:

Hello, world hacked!

उबंटू 18.04 पर परीक्षण किया गया।

पुराना bzrउत्तर

TODO: इसने Ubuntu 16.04 पर काम करना बंद कर दिया, Xenial, के साथ विफल bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".:। bzr branch lp:ubuntu/wily/helloकाम करता है और bzr branch lp:ubuntu/xenial/helloफिर से विफल रहता है। किसी कारण से https://code.launchpad.net/ubuntu/+source/hello Xenial नहीं दिखाता है: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source /नमस्ते

जैसा कि https://askubuntu.com/a/81889/52975 में बताया गया है, इसके साथ एक उबंटू-विशिष्ट दृष्टिकोण भी है bzr

नवीनतम संस्करण प्राप्त करें:

bzr branch lp:ubuntu/hello

विशिष्ट संस्करण:

bzr branch lp:ubuntu/trusty/hello

आप यह भी उपयोग कर सकते हैं pull-lp-source:

sudo apt-get install ubuntu-dev-tools
pull-lp-source hello

तब आप इसे संपादित कर सकेंगे:

cd hello
vim some_file

इसका पुनर्निर्माण करें:

dch -i 
debcommit
bzr bd -- -b -us -uc

और इसे स्थापित करें:

sudo dpkg -i ../hello.deb

उबंटू पैकेजिंग गाइड जानकारी का एक अच्छा स्रोत है।


bzr branch lp:ubuntu/hello bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/". bzr branch lp:ubuntu/xenial/lightdm bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/xenial/lightdm/". Ubuntu पैकेजिंग गाइड , विशेष रूप से 4.2। स्रोत प्राप्त करना कहता है: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/". क्या गड़बड़ है। :-(
स्टीफन गौरीचॉन

pull-lp-sourceइसके बजाय उपयोग किया जाता है, लेकिन तब हमें bzr रिपॉजिटरी नहीं मिलती है। bzr bd -- -b -us -ucकहते हैं bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/".: - / किसी भी संकेत के लिए धन्यवाद।
स्टीफन गौरीचॉन 17

@ स्टेफ़ेनगॉरिचॉन हम्म, मैं आपको उबंटू 16.04 एक्सनियल पर पुन: पेश करता हूं। विशिष्ट संस्करण को जोड़ना कार्य करता है: bzr lp:ubuntu/wily/helloलेकिन किसी कारण से कोई xenialसंस्करण नहीं है ? और कोई नहीं दिखाता है: code.launchpad.net/ubuntu/+source/hello गो आकृति।
Ciro Santilli 新疆 改造 iro 六四 事件 '

1
प्रजनन की देखभाल के लिए धन्यवाद। गलत कार्ड उठाया की तरह, फिर। इस पृष्ठ का उल्लेख करते हुए खोले गए बग्सलांचपडॉट.नेट /ubuntu/+ource/bzr/+bug/1614053
स्टीफन गौरिचोन

1
अन्य दृष्टिकोणों की तुलना में अधिक सुविधाजनक। और अन्य अंदरूनी टिप्स के लिए धन्यवाद :)
nealmcb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.