起因
写这篇文章的起因是要安装Swoole,而它又依赖php_sockets扩展,因为我是通过apt安装的php7.2,没办法直接重新编译,所以就找到了方法,这里记录一下。
依赖
- Ubuntu/Debian的打包工具
sudo apt install devscripts
- 重新打包PHP7.2需要的依赖
sudo apt build-dep php7.2
- 下载源码
sudo apt source php7.2
这里要注意一点,Ubuntu默认不打开
deb-src
段,也就是默认情况下你在apt-get source
下是找不到任何东西的。所以需要在/etc/apt/sources.list
中删除相应的deb-src
的注释。然后执行sudo apt update
更新本地缓存。
更改配置
今天终于知道为什么很多流行的项目源码目录下总是有一个debian
目录了,原来是给Debian打包用的配置。所以给PHP打包也不例外,这里就不说具体怎么修改了,因为如果自己编译过PHP,很容易就能找到需要修改哪里。
更新版本号
这个步骤是可选的,简单说就是你更新了这个包,如果你要发布它,那它肯定不能和当前已经发布的包同名。
做法是执行dch -i
,这样就会把版本号的最后一位加1。例如当前版本是7.2.5-0ubuntu0.18.04.1
, 执行之后就是7.2.5-0ubuntu0.18.04.2
,当然这时会打开一个交互界面让你填一些类似git commit时的Message。
重新打包
这一步很简单,就是执行一下debuild
。我试了一下在源码根目录或者在debian目录下都是没问题的。应该是脚本做了容错处理。
值得注意的是,不能用sudo执行debuild
,该命令默认使用fakeroot执行。而且你可以指定DEB_BUILD_OPTIONS=nocheck
来跳过编译选项的检查,我觉得还是稳妥一些好,所以就不加任何选项的执行了。
打包完成
打包完成之后会生成*.deb
包。看到它你一定知道下一步怎么做了。
安装新包
其实我从执行debuild
开始写这篇记录,到现在它还没有执行完。
sudo dpkg -i 7.2.5-0ubuntu0.18.04.2.deb
后记
这篇记录看起来是为了重新打包预编译的包,以自定义一些编译选项,其实本质上就是一个包的maintainer的工作过程,只不过这里少了发布过程。这里是处理PHP的包,读者们也可以举一反三,根据自己的需求定制一些别的包。