apt-getを介してインストールされたパッケージのソースコードを取得および変更するにはどうすればよいですか?


163

私は、インストールされるすべてのアプリケーションapt-getがオープンソースであると仮定しています。しかし、その方法で利用可能なものについては、これらのアプリケーションのソースコードを入手して更新することはできますか?

定期的に使用しているアプリケーションのうち、現在積極的に開発されていないものがいくつかあり、機能を追加したいと考えています。これらのアプリケーションを更新する権利はどこで取得できますか?

この場合、具体的には、hellanzbパッケージを参照してます。


7
apt-getクローズドソースプログラムもサポートしているため、最初の仮定は正しくありません。
フリム

回答:


183

コマンドを使用して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ファイルを作成します。APTとdpkgクイックリファレンスシート

dpkg-buildpackage DebianソースツリーからDebianパッケージをビルドします。これを機能させるには、ソースツリーのメインディレクトリにいる必要があります。サンプル使用法:

 dpkg-buildpackage -rfakeroot -uc -b

どこに-rfakeroot(所有権の目的で)root権限をシミュレートするためのfakerootプログラムを使用するように指示し、-uc「暗号技術のchangelogに署名しないでください」の略で、-b「唯一のバイナリパッケージの構築」の略

ターミナルでcd、パッケージソースを含むディレクトリ(例~/code/hellanzb-0.13:)に移動し、次のコマンドを実行します。

dpkg-buildpackage -rfakeroot -uc -b

ビルドが成功.debすると、親
ディレクトリにファイルが配置されます(例:)~/code/hellanzb_0.13-6.1_all.deb


変更したソースからどのようにインストールできますか。他のユーザーが使用できるようにコミットします。ありがとう!
myusuf3

1
@dustyprogrammer .debソースコードからパッケージを作成する手順についての回答を更新しました。変更したパッケージをリポジトリーに入れる方法については、MOTUに相談してください。
イザヤ

@DoRは、デフォルトでカスタムディレクトリにインストールするdebを作成する方法がありますか?configureプロセス中に--prefixを使用してインストールできるのと同じ方法ですか?実際にライブラリのソースのtarballを見つけることができないため、-prefixを構成してインストールすることはできません。しかし、そのパッケージソースはaptを介して利用できるため、目的のプレフィックスにソースパッケージをインストールすることを考えていました。
アシシソニー

2
apt-getソースを使用したくない場合(たとえば、他のディストリビューションから取得したパッケージをビルドする場合)、3つのソースファイルをダウンロードし、「dpkg-source -x [fine] .dsc」を使用してファイルを抽出し、 dpkg-buildpackageの前の差分。(ftp.debian.org/debian/doc/source-unpack.txt
Shlomi Loubaton

sudo apt-get build-dep <package>バイナリとして依存関係をインストール?その場合、これはソースからの完全なビルドではありません。build-depをソースから依存関係にインストールする方法は?
ハローワールド14年

21

一般に、次の手順に従ってインストール済みパッケージのソースを取得できます。

  1. ソースリポジトリを有効にします。ダッシュボード(左上のボタン)を開き、を検索しsourcesます。これは、起動する必要がありSoftware & Updates、プログラムのことを実行し、あなたが選択した「ソースコード」オプションを持っていることを確認してください。

    ここに画像の説明を入力してください

  2. ターミナルを開き、次のコマンドを実行します。

    apt-get source vlc
    

これにより、vlcのソースが現在のディレクトリにダウンロードされ、いつでも表示できます。

もちろん、の場合はvlc、videolan.org Webサイトから直接ダウンロードすることもできます:https ://www.videolan.org/vlc/download-sources.html


1
'apt-get source'でsudoを使用する必要はないはずです
-Squidly

@mrbones argh!いいえ、もちろんそうではありません、習慣の力。それを指摘してくれてありがとう。
テルドン

ターミナルで:software-properties-gtk <--- [ソフトウェアと更新] GUIパネルを起動します。(
なんらかの

17

apt-get source --compile直接使用できます:

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

私のために働いた。.debは、コマンドを実行したディレクトリに配置されます。


9
私のためにも働いてくれてありがとう。ほんの1つの追加の詳細:.debをインストールできますsudo dpkg -i <package>.deb
-waldyrious

「dch -i」で変更ログを文書化するのを忘れたため、aptがリポジトリバージョンに戻ることを除いて、最適なソリューションです。
致命的

3

アップストリームURLやプロジェクト/プログラムの連絡先など、パッケージに関する詳細情報を入手するには、著作権ファイルpackages.debian.orgから参照)をご覧ください。

パッケージがシステムに含まれてインストールされている場合は、著作権ファイルをで直接読むこともできます/usr/share/doc/$package_or_program_name/copyright

Debianパッケージのソースコードをダウンロードする方法をご覧ください


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!

Ubuntu 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で述べたように、Ubuntu固有のアプローチもあり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

Ubuntuのパッケージングガイドは、良い情報源です。


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/".: -任意のヒントについて/ありがとう。
ステファンゴーリチョン

@StéphaneGourichonうーん、Ubuntu 16.04 Xenialであなたを再現します。特定のバージョンを追加すると機能します:bzr lp:ubuntu/wily/hello、何らかの理由でxenialバージョンがありませんか?そして、何も表示されません:code.launchpad.net/ubuntu/+source/hello Go figure。
Ciro Santilli新疆改造中心法轮功六四事件

1
再生の世話をしていただきありがとうございます。種類は間違ったカードを選んだ。オープンbugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053このページに言及。
ステファンゴーリチョン

1
他のアプローチのいくつかよりも便利です。そして、他のインサイダーのヒントをありがとう:)
nealmcb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.