Answers:
使用命令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
指示其使用fakeroot程序模拟root特权(出于所有权目的),-uc
代表“不要对更改日志进行密码签名”,-b
代表“仅构建二进制包”
在终端中,cd
进入包含包源的目录(例如~/code/hellanzb-0.13
),然后运行以下命令:
dpkg-buildpackage -rfakeroot -uc -b
如果构建成功,则.deb
在父
目录(例如~/code/hellanzb_0.13-6.1_all.deb
)中将有一个文件。
sudo apt-get build-dep <package>
将依赖项安装为二进制文件?如果是这样,则这不是完整的源代码。如何使build-dep从源代码安装依赖项?
通常,您可以按照以下步骤获取已安装软件包的来源:
启用源存储库。打开仪表板(左上方按钮)并搜索sources
。那应该启动Software & Updates
程序,运行它并确保您选择了“源代码”选项:
打开一个终端并运行以下命令:
apt-get source vlc
这样会将vlc的源下载到当前目录,您可以在闲暇时查看它们。
当然,对于vlc
,您还可以直接从videolan.org网站下载它们:https ://www.videolan.org/vlc/download-sources.html
您可以apt-get source --compile
直接使用:
sudo apt-get build-dep <package>
sudo apt-get source --compile <package>
为我工作。.deb在运行命令的目录中结束。
sudo dpkg -i <package>.deb
要获得有关软件包的更多信息,包括上游URL和项目/程序联系人,您可以查看版权文件(从packages.debian.org引用)。
当包含该软件包并将其安装在您的系统上时,您也可以直接在上阅读版权文件/usr/share/doc/$package_or_program_name/copyright
。
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/".
:-/谢谢你的提示。
bzr lp:ubuntu/wily/hello
,但是由于某种原因,没有xenial
版本?而且没有显示在:code.launchpad.net/ubuntu/+source/hello上图。
apt-get
确实也支持封闭源程序,因此您最初的假设是不正确的。