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
安装
使用
修改/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