Apt-get aracılığıyla yüklenen paketlerin kaynak kodunu nasıl alır ve değiştiririm?


163

Yüklenen tüm uygulamaların apt-getaçık kaynak olduğunu varsayıyorum ; Ancak bu şekilde mevcut olanlar için bu uygulamaların kaynak kodunu nereden güncelleyebilirim?

Düzenli olarak kullandığım ve artık aktif olarak geliştirilmeyen birkaç özellik var ve özellik eklemek istiyorum. Bu uygulamaları güncelleme haklarını nereden alabilirim?

Bu durumda özellikle, hellanzb paketine atıfta bulunuyorum


7
apt-getkapalı kaynaklı programları da desteklediğinden ilk varsayımınız yanlıştır.
Flimm

Yanıtlar:


183

apt-get source <package>Bir paketin kaynağını indirmek için komutu kullanın (sudo kullanmayın).

Kimden 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.

Kaynaktan bir paket oluşturmak için, öncelikle yapı bağımlılıklarını kurun:

sudo apt-get build-dep <package>  

Sonra dpkg-buildpackagebir .debdosya oluşturmak için kullanın . Gönderen APT ve dpkg Hızlı Başvuru Formu :

dpkg-buildpackage Debian kaynak ağacından bir Debian paketi oluşturur. Bunun çalışması için kaynak ağacın ana dizininde olmalısınız. Örnek kullanım:

 dpkg-buildpackage -rfakeroot -uc -b

Nerede -rfakeroot(sahiplik amaçlı) kök ayrıcalıkları simüle etmek fakeroot programı kullanmak için talimatını, -uc"kriptografik changelog imzalamayın" anlamına gelir ve -b"sadece ikili paket kurmak" anlamına gelir

Bir terminalde, cdpaket kaynağını (örneğin ~/code/hellanzb-0.13) içeren dizine girin ve aşağıdaki komutu çalıştırın:

dpkg-buildpackage -rfakeroot -uc -b

Derleme başarılı olursa, .debüst
dizinde (ör. ~/code/hellanzb_0.13-6.1_all.deb) Bulunan bir dosya olacaktır .


değiştirilmiş kaynaktan nasıl kurulum yapabilirim. yanı sıra diğer kullanıcıların kullanması için geri taahhüt. Teşekkürler!
myusuf3

1
@dustyprogrammer .debKaynak kodundan bir paket oluşturma talimatlarıyla cevabımı güncelledi . Değiştirilmiş paketinizi depolara sokmakla ilgili olarak, bir MOTU ile bunun hakkında konuşmalısınız .
İşaya

@DoR, özel bir dizine varsayılan olarak yüklenen bir deb oluşturmanın bir yolu var mı? configure işlemi sırasında --prefix komutunu kullanarak kurabileceğimiz yol aynı mı? aslında bir kütüphanenin kaynağının tarball'larını bulamıyorum, bu yüzden - crefix'i ayarlayamıyorum ve onu make install. .
ashishsony

2
Apt-get source kullanmak istemiyorsanız (örneğin, diğer dağıtımlardan alınan bir paket oluştururken) 3 kaynak dosyayı indirin ve dosyaları çıkartmak ve 'uygulamak için' dpkg-source -x [fine] .dsc 'komutunu kullanın. dpkg-buildpackage'dan önce farklılık gösterir. ( ftp.debian.org/debian/doc/source-unpack.txt )
Shlomi Loubaton

Does sudo apt-get build-dep <package>ikili olarak bağımlılıkları yüklemek? Eğer öyleyse, bu kaynaktan tam bir yapı değil. Bir kişi derleme kurulum bağımlılıklarını kaynaktan nasıl yapar?
Merhaba Dünya

21

Genel olarak, bu prosedürü izleyerek kurulu bir paketin kaynağını alabilirsiniz:

  1. Kaynak depolarını etkinleştirin. Kontrol panelini açın (sol üst düğme) ve arayın sources. Bu Software & Updatesprogramı açmalı, çalıştırmalı ve "Kaynak kodu" seçeneğinin seçili olduğundan emin olmalısınız:

    görüntü tanımını buraya girin

  2. Bir terminal açın ve şu komutu çalıştırın:

    apt-get source vlc
    

Bu, vlc'nin kaynaklarını mevcut dizininize indirir ve bunları istediğiniz zaman görüntüleyebilirsiniz.

Tabii ki, vlconları doğrudan videolan.org web sitesinden de indirebilirsiniz: https://www.videolan.org/vlc/download-sources.html


1
'Apt-get source' ile sudo kullanmanıza gerek yok
Squidly

@ MrBones argh! Hayır, elbette bilmiyorsun, alışkanlık gücü. Gösterdiğin için teşekkürler.
terdon

terminalde: software-properties-gtk <--- "Software & Updates" GUI panelini başlatacak. (
Kontrol

17

apt-get source --compileDoğrudan kullanabilirsiniz :

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

Benim için çalıştı. .Deb komutunu çalıştırdığınız dizine doğru rüzgarlar.


9
Benim için de çalıştı, teşekkürler. Ekstra bir ayrıntı: .deb ile yükleyebilirsinizsudo dpkg -i <package>.deb
waldyrious

Bu apt haricindeki en iyi çözüm, "dch -i" ile değişiklik belgesini belgelemeyi unuttuğunuz için depo sürümüne geri dönecektir.
Futal


2

helloPaket ile minimal örnek

Bunların tümü ve daha fazlası şu adreste açıklanmıştır: https://www.debian.org/doc/manuals/maint-guide/build.en.html

Öncelikle kaynağını değiştirmek için örnek bir paket alalım:

sudo apt-get install hello
hello

çıktılar:

Hello, world!

Şimdi hackleyelim. Kaynak al:

apt-get source hello
cd hello-*

ve aç:

vim src/hello.c

ve mesajı şu şekilde değiştir:

Hello, world hacked!

Ardından testte aynısını yapın, aksi halde rahatsız edici test başarısız olmaya başlar:

vim tests/greeting-1

Sonra şununla yeniden oluştur:

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

Çıktının sonuna doğru şöyle der:

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

bu yüzden üst dizinde .deb 'ı yarattı. Sonunda değiştirilen paketi kurup test ettik:

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

ve işte orada, yeni mesajı çıktı olarak veriyor:

Hello, world hacked!

Ubuntu 18.04'te test edilmiştir.

Eski bzrcevap

TODO: Bu, Ubuntu 16.04 Xenial ile çalışmayı bıraktı ve: ile başarısız oldu bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/hello/".. bzr branch lp:ubuntu/wily/helloçalışır ve bzr branch lp:ubuntu/xenial/hellotekrar başarısız olur. Nedense https://code.launchpad.net/ubuntu/+source/hello Xenial'ı göstermiyor: https://web.archive.org/save/https://code.launchpad.net/ubuntu/+source /Merhaba

Https://askubuntu.com/a/81889/52975 adresinde belirtildiği gibi Ubuntu'ya özgü bir yaklaşım da var bzr.

Son çıkan versiyonunu alın:

bzr branch lp:ubuntu/hello

Belirli bir sürüm:

bzr branch lp:ubuntu/trusty/hello

Ayrıca şunları da kullanabilirsiniz pull-lp-source:

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

O zaman düzenleyebilirsiniz:

cd hello
vim some_file

Yeniden oluştur:

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

Ve kurun:

sudo dpkg -i ../hello.deb

Ubuntu ambalaj kılavuz iyi bir bilgi kaynağıdır.


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 paketleme kılavuzu , özellikle 4.2. Kaynak almak diyor ki: bzr branch ubuntu:lightdm lightdm.quickswitch bzr: ERROR: Not a branch: "bzr+ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/". Ne dağınıklık. :-(
Stéphane Gourichon 15:16

Kullanılmış pull-lp-sourceyerine, ama ardından, bir bzr depo alamadım. bzr bd -- -b -us -ucdiyor ki bzr: ERROR: Not a branch: "/org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3/".: - / Herhangi bir ipucu için teşekkürler.
Stéphane Gourichon

@ StéphaneGourichon hummm, seni Ubuntu 16.04 Xenial'da yeniden üretiyorum. Belirli sürümün eklenmesi işe yarar:, bzr lp:ubuntu/wily/helloancak bazı nedenlerden dolayı xenialsürüm yok mu? Ve hiçbiri şovda bulunmuyor : code.launchpad.net/ubuntu/+source/hello Go rakamı.
Ciro Santilli,

1
Çoğaltmaya özen gösterdiğiniz için teşekkür ederiz. O zaman yanlış kartı seçtim. Açılan hatalar.launchpad.net/ubuntu/+source/bzr/+bug/1614053 bu sayfadan bahsediyor.
Stéphane Gourichon 17:16

1
Diğer bazı yaklaşımlardan daha uygun. Ve diğer içeriden ipuçları için teşekkürler :)
nealmcb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.