静看光阴荏苒
不管不顾不问不说也不念

Debian10使用fpm从源头打包

这个fpm我大概一年前用过几次,当时觉得这东西是个神器,这两天又重新学习了下,发现只能说是各取所长。。

fpm能打包需要make install的程序,并且不需要像dh-make那样去编写rules等脚本,打包难度降低了许多。

但同时也有一个致命的缺点是不能自动处理依赖关系,而dh-make可以做到这一点。要知道Linux那错综复杂的依赖关系很多时候是让人生不如死的。

fpm不仅仅能打包deb,像rpm/python等包都可以使用它,但就如我上面所说的,它不能自动处理依赖关系,因此只适合打一些简单的包,如果是用来制作简单的安装包并且不打算提交到官方存储库,用fpm确实要方便很多。

安装fpm很简单,首先安装需要用到的依赖/软件(devscripts可选,里面包含了大量dev依赖包):

apt -y install ruby ruby-dev rubygems build-essential devscripts

然后使用gem即可安装:

gem install fpm

本文还是以qBittorrent-Enhanced-Edition这个软件为例,首先安装编译需要用到的依赖:

apt -y install pkg-config libtool git libtorrent-rasterbar-dev \
libboost-dev libboost-system-dev libboost-chrono-dev \
libboost-random-dev libssl-dev libgeoip-dev zlib1g-dev \
qtbase5-dev qttools5-dev-tools libqt5svg5-dev

从上游拉取源码:

git clone https://github.com/c0re100/qBittorrent-Enhanced-Edition.git
cd qBittorrent-Enhanced-Edition

如果你安装了devscripts,可以使用dpkg-depcheck辅助检测一下软件包可能需要用到的依赖:

dpkg-depcheck -d ./configure --prefix=/usr --disable-gui CXXFLAGS=-std=c++11

检测的结果很准,但往往会有很多多余的依赖包列出(得自己筛选):

或者还是按常规方法去配置:

./configure --prefix=/usr --disable-gui CXXFLAGS=-std=c++11

之后和往常一样编译:

make -j$(nproc)

创建临时安装目录:

mkdir -p /tmp/qbittorrent

将qbittorrent安装到临时目录,注意qbittorrent编译是使用的qmake,qmake不认DESTDIR,后来我上网查了下可以用INSTALL_ROOT:

make install INSTALL_ROOT=/tmp/qbittorrent

可以发现从开始到现在,我们都和往常一样去编译,只是最后将软件安装在临时目录而已,没有去编写rules等等文件。所以,这就是fpm相对于dh-make的优势。

现在就可以使用fpm打包了:

fpm -s dir -t deb \
-C /tmp/qbittorrent \
-m "imlala <1062951199@qq.com>" \
--url "https://www.lala.im" \
--description "bittorrent client based on libtorrent-rasterbar (without X support)" \
-n qbittorrent-nox \
-v 4.1.7.1 \
-p qbittorrent-nox_4.1.7.1_amd64.deb \
-d "libtorrent-rasterbar9 >= 1.1.11" \
-d "zlib1g-dev >= 1:1.2.0" \
-d "libboost-system-dev >= 1.67.0.1" \
-d "qtbase5-dev >= 5.11.3" \
usr/bin

这样就构建好了一个deb包,但相对于dh-make来说缺点也很明显,-d参数后面的依赖全部都得我们自己手动指定,而dh-make可是全自动的。。

所以从某种角度来说fpm方便的同时也带来了麻烦。。

如果dpkg-depcheck这种找依赖的方式不够用,下面还有几个笨办法:

1.用ldd去看这个二进制文件加载了哪些.so,然后借助Google搜索。

2.如果这个软件本身就在官方存储库里面存在,可以借助apt depends参考。

3.一般自己编译的软件,大部分依赖其实就是自己编译时安装的各种dev包。

赞(1)
未经允许不得转载:荒岛 » Debian10使用fpm从源头打包
分享到: 更多 (0)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    这么麻烦,我选择docker

    谁知道呢4周前 (08-25) Google Chrome 76.0.3809.100 Google Chrome 76.0.3809.100 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿