起因
写这篇文章的起因是要安装 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 的包,读者们也可以举一反三,根据自己的需求定制一些别的包。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于