Skip to content

上传到AUR (Arch用户仓库) #13

@JimmyWang0417

Description

@JimmyWang0417

Problem (Optional)

在Arch Linux中,使用AUR而不是在浏览器下载安装包文件安装软件是一种更方便快捷安装软件的方式。借助AUR就可以在命令行中完成软件的安装,故请求软件包同步AUR仓库,方便Arch用户。

AUR 即 Arch 用户仓库(Arch User Repository)。它包含名为 PKGBUILD 的包描述,它可让用户使用 makepkg 从源代码编译软件包,然后通过 pacman 安装。
创建 AUR 的目的是组织和共享社区中的新软件包,并帮助加速将流行的软件包纳入社区仓库。进入官方仓库的大量新软件包都从 AUR 开始。在 AUR 中,用户可以贡献自己的软件包构建(PKGBUILD 和相关文件)。AUR 社区可以对 AUR 中的软件包进行投票。如果一个软件包变得足够流行(且具有兼容的许可证和良好的打包技术),那么可以将其加入 pacman 直接访问的社区仓库中。

Solution

按照博客中提供的步骤,我构建了PKGBUILD

pkgname=xjtutoolbox
pkgver=1.0.0
pkgrel=1
pkgdesc="XJTUToolBox with bundled Python library for Manjaro"
arch=('x86_64')
url="https://github.com/yan-xiaoo/XJTUToolBox"
license=('MIT')
depends=('python' 'gtk3' 'webkit2gtk' 'libnotify')
makedepends=('git' 'python' 'python-virtualenv' 'python-pillow')
source=("$pkgname-$pkgver.tar.gz::$url/archive/refs/tags/v$pkgver.tar.gz")
sha256sums=('23abdda1d7f2d85defe7b8b3b56a34cf05f1ae623a6a5532203f4e4ebc0abe27')

prepare() {
    cd "$srcdir/XJTUToolBox-$pkgver"
    python -m venv .venv
    source .venv/bin/activate
    pip install --upgrade pip
    pip install -r requirements.txt
    pip install pyinstaller
}

build() {
    cd "$srcdir/XJTUToolBox-$pkgver"
    source .venv/bin/activate

    # 获取系统 Python 共享库路径
    libpython=$(python3 -c "import sysconfig; print(sysconfig.get_config_var('LIBDIR') + '/libpython' + sysconfig.get_config_var('VERSION') + '.so.1.0')")
    echo "Using libpython: $libpython"

    # 打包主程序(单文件)
    pyinstaller --clean --onefile \
        --name XJTUToolbox \
        --add-binary "$libpython:." \
        --collect-datas=fake_useragent \
        --add-data "assets:assets" \
        --add-data "ehall/templates:ehall/templates" \
        --icon "assets/icons/main_icon.ico" \
        --hidden-import plyer.platforms.linux.notification \
        app.py

    # 打包 Updater(可选)
    pyinstaller --clean --onefile \
        --name "XJTUToolbox Updater" \
        --add-binary "$libpython:." \
        --icon "assets/icons/updater_icon.ico" \
        updater.py
}

package() {
    echo $srcdir
    # 安装主程序
    install -Dm755 "$srcdir/XJTUToolBox-$pkgver/dist/XJTUToolbox" "$pkgdir/usr/bin/xjtutoolbox"

    # 安装 Updater
    install -Dm755 "$srcdir/XJTUToolBox-$pkgver/dist/XJTUToolbox Updater" "$pkgdir/usr/bin/xjtutoolbox-updater"

    # 安装图标、文档和桌面文件
    install -Dm644 "$srcdir/XJTUToolBox-$pkgver/assets/icons/main_icon.ico" "$pkgdir/usr/share/pixmaps/xjtutoolbox.ico"
    install -Dm644 "$srcdir/XJTUToolBox-$pkgver/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
    install -Dm644 "$srcdir/XJTUToolBox-$pkgver/README.md" "$pkgdir/usr/share/doc/$pkgname/README.md"
    install -Dm644 /dev/stdin "$pkgdir/usr/share/applications/xjtutoolbox.desktop" <<EOF
[Desktop Entry]
Name=XJTUToolBox
Exec=xjtutoolbox
Icon=xjtutoolbox
Type=Application
Categories=Utility;Education;
EOF
}

我并非作者,希望用Arch系的伙伴能试验一下我的pkgbuild是否能正常使用。

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions