Ubuntu 下重新打包预编译安装的 PHP

本贴最后更新于 2320 天前,其中的信息可能已经时异事殊

起因

写这篇文章的起因是要安装 Swoole,而它又依赖 php_sockets 扩展,因为我是通过 apt 安装的 php7.2,没办法直接重新编译,所以就找到了方法,这里记录一下。

依赖

  1. Ubuntu/Debian 的打包工具

sudo apt install devscripts

  1. 重新打包 PHP7.2 需要的依赖

sudo apt build-dep php7.2

  1. 下载源码

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 的包,读者们也可以举一反三,根据自己的需求定制一些别的包。

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3453 回帖 • 201 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 489 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    124 引用 • 169 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    939 引用 • 940 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...