先说明该文章内容是在Linux系统的Debian流派下进行的,也就是使用dpkg和apt来管理包。
命令都没考虑权限问题,提示权限不够,自己加sudo。

平时在Linux安装软件,如果不追求新版本,一般都直接apt-get install packagename来进行 安装。但有时需要对这个软件源码进行更改来实现某个特别的功能。这种时候一般情况,我会去官网下 载源码然后修改代码后编译安装。这段时间发现了另外一种的方法,用起来会更简单,缺点就是软件 版本只能使用源里面的版本。方法就是使用apt-get来下载源码包,下面说说这种方法。
apt-get除了直接安装软件,还可以下载源码包。 通过修改源码包再生成deb包,然后安装deb包就能 很轻松实现修改代码并安装的需求,而且安装依赖和编译还是一个命令搞的定那种,非常方便。
下面开始一步一步的说明过程,我以安装samba为例。

下载源码

要下载deb的源码包,首先要确保源列表中有deb-src的源列表项,这是下载deb源码包必须的, 要注意有些源为了更新列表快速,会把deb-src的项注释掉。下面是网易源Debian8的例子:

1
2
3
4
5
6
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian-archive/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian-archive/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

添加好源后需要执行apt-get update来更新源数据到本地。更新成功后,如果知道软件名,那直接 执行如下命令即可下载deb包:

1
apt-get source samba

如果不知道准确的包名,可以通过如下命令搜索源中都有哪些软件包,命令如下:

1
apt-cache search samba

这个命令可以列出所有包含samba字符串的软件包,配合grep做一下筛选效果更佳

安装依赖

apt的安装依赖这个是真的方便,以前我进行源码编译都是configure提示缺什么装什么,还要去找 对应的包名,或者到处找文档这个源码编译都依赖啥。而使用deb源码包,只需下面一句命令就可以 把需要的编译依赖全装上,命令如下:

1
apt-get build-dep samba

其实即使是直接下载官方源码进行编译,我觉得也可以先执行一下这个命令,依赖基本都能解决掉, 剩下不行的再慢慢再装上这样会更简单。

修改源码并制作补丁

如果只是想deb包源码编译而不修改源码,那可以直接看下一节。
创建补丁我用了一个命令quilt来帮助我完成,但这并不是唯一的方法,因为好明显这个命令也是 封装了一些diff之类的方法来实现的,所以按道理用其它命令也能弄出补丁。
如果没有quilt命令的话,先用如下命令安装:

1
apt-get install quilt

quilt默认会使用源码目录下的debian/patchs作为补丁目录,可以通过设置QUILT_PATCHES 环境变量来修改。
我们先使用命令把现有的补丁都打上,命令如下:

1
quilt push -a

现在可以创建输入自己的补丁,先创建一个补丁文件,命令如下:

1
quilt new 1_test.patch

创建补丁后,把需要修改的代码添加进quilt中:

1
quilt add xxx.c

然后对xxx.c进行需要的修改,刷新补丁记录:

1
quilt refresh

刷新后打开debian/patchs/1_test.patch文件就可以看到我们做的修改

编译并生成deb包

上面的都弄好后,生成deb就简单了,直接下面的命令就可以完成编译到生成deb包的整套工作:

1
dpkg-buildpackage -rfakeroot -uc -us -b

命令成功执行后,deb包会在源码包的上一级目录中

安装

转到deb包所在目录,使用下面命令全部安装即可:

1
dpkg -i *.deb

参考