我假设通过apt-get安装的所有应用程序都是开源的;但是对于以这种方式可用的那些,我在哪里可以获取这些应用程序的源代码并进行更新?

我有一些经常使用的应用程序,这些应用程序已经不再积极开发,我想添加功能。我在哪里可以获得更新这些应用程序的权利?

在这种情况下,我指的是hellanzb软件包

评论

apt-get也支持封闭源程序,因此您最初的假设是错误的。

#1 楼

使用命令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)。

评论


如何从修改后的源安装。并将其提交回供其他用户使用。谢谢!

–myusuf3
2011-2-28在5:32

@dustyprogrammer更新了我的答案,其中包含有关从源代码创建.deb包的说明。至于将修改后的软件包放入存储库中,您应该与MOTU讨论。

–以赛亚书
2011-2-28在6:48

@DoR是否可以创建默认情况下安装在自定义目录中的deb?在配置过程中使用--prefix进行安装的方式是否相同?实际上我找不到库源的tarball,这就是为什么我无法配置--prefix并进行安装..但是该pakages源可通过apt获得,所以我在考虑将源软件包安装在所需的前缀中。

–ashashsony
13年1月16日在8:06



如果您不想使用apt-get源代码(例如,在构建从其他发行版获取的软件包时),请下载3个源文件并使用'dpkg-source -x [fine] .dsc'提取文件并应用dpkg-buildpackage之前的差异。 (ftp.debian.org/debian/doc/source-unpack.txt)

– Shlomi Loubaton
2014年3月23日10:33

sudo apt-get build-dep 是否将依赖项安装为二进制文件?如果是这样,则这不是完整的源代码。如何使build-dep从源代码安装依赖项?

– Hello World
2014年10月1日13:47

#2 楼

通常,您可以按照以下过程获取已安装程序包的源:


启用源存储库。打开仪表板(左上方按钮)并搜索sources。那应该调出Software & Updates程序,运行该程序并确保已选择“源代码”选项:



打开终端并运行以下命令:
 apt-get source vlc



这会将vlc的源代码下载到当前目录,您可以随时查看它们。
当然,对于vlc,您也可以下载直接从videolan.org网站获取它们:https://www.videolan.org/vlc/download-sources.html

评论


您不需要将sudo与'apt-get source'一起使用


2015年2月3日,15:01

@MrBones啊!不,你当然不习惯。感谢您指出。

– terdon
15年2月4日在12:11

在终端中:software-properties-gtk <---将启动“软件和更新” GUI面板。 (无论出于什么原因,它都没有出现在我的仪表板搜索中。)

– Pestophagous
17年4月15日在2:10

#3 楼

您可以直接使用apt-get source --compile

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


为我工作。 .deb在运行命令的目录中结束。

评论


也为我工作,谢谢。只是一个额外的细节:您可以使用sudo dpkg -i .deb安装.deb

–waldyrious
13年11月23日在18:00

最佳解决方案是apt将还原到存储库版本,因为您忘记使用“ dch -i”记录变更日志。

–终极
16年8月24日在13:44

#4 楼

带有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答案

待办事项:这已在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 / hello

如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分支lp:ubuntu / hello bzr:错误:不是分支:“ bzr + ssh://bazaar.launchpad.net/+branch/ubuntu/hello/”。 bzr分支lp:ubuntu / xenial / lightdm bzr:错误:不是分支:“ bzr + ssh://bazaar.launchpad.net/+branch/ubuntu/xenial/lightdm/”。 Ubuntu打包指南,特别是4.2。获取源代码说:bzr分支ubuntu:lightdm lightdm.quickswitch bzr:错误:不是分支:“ bzr + ssh://bazaar.launchpad.net/+branch/ubuntu/lightdm/”。真是一团糟。 :-(

–StéphaneGourichon
16年8月15日在16:58

取而代之的是使用pull-lp-source,但随后我们没有得到bzr存储库。 bzr bd--b -us -uc说bzr:错误:不是分支:“ /org/gourichon/localdata/SG/projects/sysadmin/sysadmin_ergozel/2016/2016-08-15/blouarp/lightdm-1.18.3 /”。 :-/谢谢您的提示。

–StéphaneGourichon
16年8月15日在17:03

@StéphaneGourichon嗯,我在Ubuntu 16.04 Xenial上重现了您。添加特定版本有效:bzr lp:ubuntu / wily / hello,但是由于某种原因,没有xenial版本?而且没有显示在:code.launchpad.net/ubuntu/+source/hello上图。

– Ciro Santilli郝海东冠状病六四事件法轮功
16年8月17日在7:01

感谢您照顾复制。然后,选择了一种错误的卡。打开提及此页面的bugs.launchpad.net/ubuntu/+source/bzr/+bug/1614053。

–StéphaneGourichon
16年8月17日在10:53

比其他方法更方便。并感谢其他内幕技巧:)

–nealmcb
18年5月3日在18:57

#5 楼

要获取有关软件包的更多信息,包括上游URL和项目/程序联系人,您可以查看版权文件(从packages.debian.org引用)。

包含和安装软件包时您的系统上,也可以直接在/usr/share/doc/$package_or_program_name/copyright上阅读版权文件。

查看如何下载Debian软件包的源代码?。