Skip to main content

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 --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 <pierre@gcarrier.fr>
 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

报错信息

[/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

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

报错信息

[/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.

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

[/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 手动解压

[/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

--- /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
[/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