build deb package on archlinux

2023-08-28 update:

时过境迁,我不再需要打 deb 包,也不再使用 archlinux,故仓库已失效。

我曾在文章写下后不久向 archlinuxcn 发起 PR addpkg dh-make,挂了很久没人管。很符合我对archcn的想象

包的依赖关系可能发生了变化,需要你自行改动,此文章意义已经不大,仅流水帐记录曾经 work 的过程。

目标: 以下功能可以正常使用:

devscripts(dget)

安装

因为debian 系统使用apt 作为包管理器,Archlinux 使用pacman,混用包管理器是非常危险的,所以我们应当在pbuilder 环境中进行编译等操作,以下将简单介绍工作流程

在Arch 上编译 devscripts,缺少依赖 debianutils, debhelpergit, sensible-utils,缺少编译依赖perl-git-wrapper, perl-list-compare, perl-parse-debcontrol,缺少可选依赖 dh-make,以上全部自己编译,推荐使用devtools 编译或者添加我的仓库(已失效)

[peeweep]
Server = https://repo.example.org/archlinux/$arch

sensible-utils 无法编译

AUR中的 sensible-utils 0.0.12-2 的已经无法编译,debian 已经解决这个BUG 并且推了0.0.13 (#963424),我flag 了一下 out-of-dated,以下是我用的 0.0.13 PKGBUILD

“` diff diff –git a/.SRCINFO b/.SRCINFO index b7dfd1f..7f47dd4 100644 — a/.SRCINFO +++ b/.SRCINFO @@ -1,15 +1,15 @@ pkgbase = sensible-utils pkgdesc = Utilities for sensible alternative selection – pkgver = 0.0.12 – pkgrel = 2 + pkgver = 0.0.13 + pkgrel = 1 url = http://packages.debian.org/source/sid/sensible-utils arch = any license = GPL checkdepends = ed makedepends = po4a depends = bash – source = http://ftp.de.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.12.tar.xz – sha256sums = 99ba2ebf8c57447c69d426b99b84ff9dc817be0bc4988ec6890a14558c529e2e + source = http://ftp.de.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.tar.xz + sha256sums = 8627a530e48066282aa81384dddfb38cf53c8470ae7e633c14d2341418fa6298 pkgname = sensible-utils diff –git a/PKGBUILD b/PKGBUILD index 4d310ba..148c3f5 100644 — a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Pierre Carrier pkgname=sensible-utils -pkgver=0.0.12 -pkgrel=2 +pkgver=0.0.13 +pkgrel=1 pkgdesc=”Utilities for sensible alternative selection” arch=(‘any’) url=”http://packages.debian.org/source/sid/sensible-utils” @@ -10,23 +10,23 @@ depends=(‘bash’) makedepends=(‘po4a’) checkdepends=(‘ed’) source=(http://ftp.de.debian.org/debian/pool/main/s/$pkgname/${pkgname}_$pkgver.tar.xz) -sha256sums=(’99ba2ebf8c57447c69d426b99b84ff9dc817be0bc4988ec6890a14558c529e2e’) +sha256sums=(‘8627a530e48066282aa81384dddfb38cf53c8470ae7e633c14d2341418fa6298’) build() { – cd $pkgname.git + cd $pkgname-$pkgver export -n EDITOR VISUAL ./configure –prefix=/usr make } check() { – cd $pkgname.git + cd $pkgname-$pkgver export -n EDITOR VISUAL make -k check } package() { – cd $pkgname.git + cd $pkgname-$pkgver export -n EDITOR VISUAL make DESTDIR=”$pkgdir/” install } “`

使用

dget http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc

报错: dpkg-vendor: error: vendor default doesn’t exist in /etc/dpkg/origins

报错信息

“` shell [/tmp]$ dget http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc dget: retrieving http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1688 100 1688 0 0 3480 0 –:–:– –:–:– –:–:– 3480 dget: using existing sensible-utils_0.0.13.tar.xz dpkg-vendor: error: vendor default doesn’t exist in /etc/dpkg/origins dscverify: can’t find any system keyrings “`

dpkg-vendor 找不到vendor信息,是因为Archlinux 上的dpkg 包没有把vendor预置到 /etc/dpkg/origins目录里,我们可以自己写一个archlinux

“` text Vendor: ArchLinux Vendor-URL: https://www.archlinux.org/ Bugs: https://bugs.archlinux.org/ “`
sudo install -Dm644 archlinux /etc/dpkg/origins/archlinux -v
sudo ln -sf /etc/dpkg/origins/archlinux /etc/dpkg/origins/default -v

报错: Can’t locate File/HomeDir.pm

报错信息

“` shell [/tmp]$ dget http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils _0.0.13.dsc dget: retrieving http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1688 100 1688 0 0 4077 0 –:–:– –:–:– –:–:– 4077 dget: retrieving http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.tar.xz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 62020 100 62020 0 0 150k 0 –:–:– –:–:– –:–:– 150k Can’t locate File/HomeDir.pm in @INC (you may need to install the File::HomeDir module) (@INC contains: /usr/lib/perl5/5.32/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/5.32/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/5.32/core_perl /usr/share/perl5/core_perl) at /usr/bin/dscverify line 31. BEGIN failed–compilation aborted at /usr/bin/dscverify line 31. “`

perl-file-homedir 在aur 上只是makedepnds,手动安装一下,已经报告给了维护者,让他加到depends里

报错: dscverify: can’t find any system keyrings

“` shell [/tmp]$ dget http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc dget: retrieving http://deb.debian.org/debian/pool/main/s/sensible-utils/sensible-utils_0.0.13.dsc % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1688 100 1688 0 0 4251 0 –:–:– –:–:– –:–:– 4251 dget: using existing sensible-utils_0.0.13.tar.xz dscverify: can’t find any system keyrings “`

安装debian-keyring ,已经报告给了维护者,让他加到optdepends里。或者你可以用dpkg-source -x 手动解压

“` shell [/tmp]$ dpkg-source -x –skip-patches ./sensible-utils_0.0.13.dsc dpkg-source: warning: –skip-patches is not a valid option for Dpkg::Source::Package::V3::Native gpgv: unknown type of key resource ‘trustedkeys.kbx’ gpgv: keyblock resource ‘/tmp/dpkg-verify-sig.KzVhNokQ/trustedkeys.kbx’: General error gpgv: Signature made Wed 08 Jul 2020 07:10:38 AM CST gpgv: using RSA key 7C56ACFE947897D8 gpgv: Can’t check signature: No public key dpkg-source: warning: failed to verify signature on ./sensible-utils_0.0.13.dsc dpkg-source: info: extracting sensible-utils in sensible-utils-0.0.13 dpkg-source: info: unpacking sensible-utils_0.0.13.tar.xz “`

pbuilder

安装

pbuilder-ubuntu

使用

修改/etc/pbuilderrc

“` diff — /usr/share/pbuilder/pbuilderrc 2020-10-13 11:23:36.000000000 +0800 +++ /etc/pbuilderrc 2020-10-13 13:01:06.991275977 +0800 @@ -24,7 +24,7 @@ # Debian buildds too. You can set it to $BUILDDIR to get a working HOME, if # you need to. BUILD_HOME=/nonexistent -MIRRORSITE=http://archive.ubuntu.com/ubuntu +MIRRORSITE=https://mirrors.sjtug.sjtu.edu.cn/debian #OTHERMIRROR=”deb http://www.home.com/updates/ ./” #export http_proxy=http://your-proxy:8080/ USESHM=yes @@ -118,7 +118,7 @@ # Set the debootstrap variant to ‘buildd’ type. DEBOOTSTRAPOPTS=( ‘–variant=buildd’ – ‘–force-check-gpg’ + ‘–no-check-gpg’ ) # or unset it to make it not a buildd type. # unset DEBOOTSTRAPOPTS @@ -147,7 +147,7 @@ AUTOCLEANAPTCACHE=”” #default COMPRESSPROG -COMPRESSPROG=”gzip” +COMPRESSPROG=”pigz” # pbuilder copies some configuration files (like /etc/hosts or /etc/hostname) # from the host system into the chroot. If the directory specified here “`
  • MIRRORSITE 指定仓库地址
  • DEBOOTSTRAPOPTS 指定debootstrap 的参数
  • COMPRESSPROG 使用pigz 来使用所有核心, 需要安装pigz 软件包

创建一个debian experimental的base.tgz

sudo pbuilder --create --distribution experimental --basetgz exp.tgz
报错: No such script:

没有当前dist对应的 deboostrap 脚本

报错信息:

E: No such script: /usr/share/debootstrap/scripts/experimental
“` shell [/tmp]$ sudo pbuilder –create –distribution experimental –basetgz exp.tgz W: /root/.pbuilderrc does not exist W: cgroups are not available on the host, not using them. I: Distribution is experimental. I: Current time: Tue Oct 13 14:24:21 CST 2020 I: pbuilder-time-stamp: 1602570261 I: Building the build environment I: running debootstrap /usr/sbin/debootstrap E: No such script: /usr/share/debootstrap/scripts/experimental E: debootstrap failed E: debootstrap.log not present W: Aborting with an error “`

解决方案: 添加dist对应的 deboostrap 脚本

dist=experimental; if [ ! -f /usr/share/debootstrap/scripts/$dist ]; then sudo install -Dm644 -v usr/share/debootstrap/scripts/buster /usr/share/debootstrap/scripts/$dist; fi

使用pbuilder 编译软件包

pbuilder 编译软件包有两种方式,通过软件包的dsc 编译,也可以使用pbuilder –login 当作chroot 进入

通过dsc编译

dsc 可以通过dpkg-source -b .生成

sudo pbuilder --build --basetgz exp.tgz sensible-utils_0.0.13.dsc
当作chroot
sudo pbuilder --login --basetgz exp.tgz

base环境里做的操作退出时会销毁,如果想保留,可以后边加–save-after-login 参数

sudo pbuilder --login --basetgz exp.tgz --save-after-login

Leave a Reply

Your email address will not be published. Required fields are marked *