Arch Linux makepkg构建tractor包遇依赖缺失、路径报错等问题
问题原因与修正方案
你原有PKGBUILD和构建流程存在多处违反Arch Linux打包规范的错误,直接导致各类构建、安装异常,具体问题点如下:
- 打包流程中滥用
sudo:makepkg全程要求以普通用户身份运行,通过内置fakeroot机制完成包内文件权限配置,禁止在PKGBUILD函数内调用sudo直接操作宿主机系统路径。你之前不加sudo报权限错误,是因为之前误用sudo生成了属主为root的src//pkg/目录,导致普通用户无写入权限。 - 函数职责划分错误:
prepare()函数仅用于源码修改、补丁应用,编译构建操作应该放在独立的build()段中。 - 系统文件操作违规:最早版本中直接把gschema文件复制到宿主机
/usr/share路径、直接在宿主机执行glib-compile-schemas,属于直接修改宿主系统的错误操作,这也是你后来安装python-stem时出现文件冲突的核心原因——之前的错误打包操作已经污染了系统目录。另外glib schema编译不需要在打包阶段执行,pacman自带的glib2钩子会在用户安装包时自动完成schema更新,不需要手动调用。 - 路径未预创建:往
$pkgdir下复制文件前,需要先创建目标父目录,否则会报路径不存在错误。 - 字段配置不规范:
license字段Arch官方规范使用GPL3标识,而非GPLv3;直接拉取git主分支源码会和写死的pkgver版本不匹配;Python包安装时未指定安装前缀、字节码优化参数,不符合打包规范。 - 依赖安装异常:之前因为系统目录被污染,导致
python-stem安装时文件冲突,先执行sudo pacman -S python-stem python-fire python-pysocks --overwrite '/usr/bin/tor-prompt'即可覆盖异常冲突文件,完成依赖安装。
符合Arch打包规范的PKGBUILD
# Maintainer: Danial Behzadi <dani.behzi@ubuntu.com> pkgname='tractor' pkgver=3.13 pkgrel=1 pkgdesc="Setup an onion routing proxy" arch=('any') url="https://framagit.org/tractor/tractor" license=('GPL3') depends=( 'python' 'tor' 'python-gobject' 'python-psutil' 'python-requests' 'python-stem' 'python-fire' 'python-pysocks' ) makedepends=('python-setuptools') source=("${pkgname}-${pkgver}.tar.gz::${url}/-/archive/${pkgver}/${pkgname}-${pkgver}.tar.gz") sha256sums=('SKIP') build() { cd "${pkgname}-${pkgver}" python setup.py build } package() { cd "${pkgname}-${pkgver}" python setup.py install \ --root="${pkgdir}" \ --optimize=1 \ --prefix=/usr # 自动创建目录、设置权限后复制gschema配置 install -Dm644 tractor/tractor.gschema.xml \ "${pkgdir}/usr/share/glib-2.0/schemas/tractor.gschema.xml" }
构建操作步骤
- 先清理之前错误打包生成的残留文件:
rm -rf ./src ./pkg *.pkg.tar.zst - 修复当前工作目录权限:
sudo chown -R $USER:$USER . - 安装全部构建和运行依赖:
sudo pacman -S --needed base-devel python tor python-gobject python-psutil python-requests python-stem python-fire python-pysocks python-setuptools - 以普通用户身份执行构建安装:
makepkg -si
注意:全程不要给makepkg加sudo,否则会再次出现权限混乱问题。
内容的提问来源于stack exchange,提问作者mohammad javad
相关产品推荐
相关产品推荐

