You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arch与Manjaro等Arch系发行版软件包命名规范问询

区分Arch/Manjaro包命名的可行方案

针对用makepkg打包自研软件,需要区分Arch和Manjaro版本且不破坏pacman兼容性的需求,有以下几种实用方法:

1. 修改pkgrel字段添加发行版标识

这是最符合pacman版本规范的方式,pkgrel允许包含字母、点号或加号等符号,不会影响包管理器识别。

  • 动态设置pkgrel:在PKGBUILD中加入发行版判断逻辑,自动适配:
    # 根据发行版设置pkgrel
    if grep -q "ID=manjaro" /etc/os-release; then
        pkgrel=1.manjaro
    else
        pkgrel=1
    fi
    
  • 生成的包名示例:
    • Arch版:doas-keepenv-1.0-1-any.pkg.tar.zst
    • Manjaro版:doas-keepenv-1.0-1.manjaro-any.pkg.tar.zst
  • 优势:pacman能正确识别版本优先级,后续升级时可正常处理版本对比。

2. 构建后重命名包文件

如果不想改动PKGBUILD的版本字段,可在makepkg完成后手动/脚本重命名,仅修改文件名不影响包内部的版本信息:

  • 示例脚本:
    # 构建包
    makepkg -s
    # 识别当前发行版并重命名
    if grep -q "ID=manjaro" /etc/os-release; then
        mv doas-keepenv-1.0-1-any.pkg.tar.zst doas-keepenv-1.0-1-manjaro-any.pkg.tar.zst
    else
        mv doas-keepenv-1.0-1-any.pkg.tar.zst doas-keepenv-1.0-1-arch-any.pkg.tar.zst
    fi
    
  • 注意:安装后pacman显示的版本仍为1.0-1,但文件名可明确区分发行版,适合分发场景。

3. 自定义pkgbase(适合独立软件)

若软件无复杂依赖,可通过修改pkgbase添加发行版标识,直接改变包的基础名称:

  • PKGBUILD配置示例:
    if grep -q "ID=manjaro" /etc/os-release; then
        pkgbase=doas-keepenv-manjaro
    else
        pkgbase=doas-keepenv
    fi
    pkgname=("$pkgbase")
    
  • 生成的包名示例:doas-keepenv-manjaro-1.0-1-any.pkg.tar.zst
  • 注意:此方式会改变包的名称,若软件有依赖关系需同步调整依赖配置,仅推荐无依赖的自研软件使用。

关键注意事项

  • 不要修改pkgver字段:pkgver对应软件本身的版本号,修改会混淆软件版本与发行版适配版本。
  • 版本优先级:若针对Manjaro做了专属补丁,可将pkgrel设为1.1.manjaro,确保Manjaro版本的优先级高于同软件版本的Arch版。
  • 兼容性测试:打包后务必用pacman -U <包文件>测试安装,确认无报错或兼容性问题。

内容的提问来源于stack exchange,提问作者Stas Badzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:51:08