发布 AUR 软件包 (ArchLinux)

首发日期 2024-03-09, 以下为原文内容:


理论上来说, 我们应该平等的对待每一个 GNU/Linux 发行版本. 但是, 因为窝日常使用 ArchLinux, 所以对 ArchLinux 有一些特别的优待, 比如自己做的软件优先为 ArchLinux 打包发布.

本文以软件包 librush-bin 为例, 介绍发布 AUR 软件包的过程.

目录

  • 1 AUR 简介
  • 2 编写 PKGBUILD
  • 3 本地打包测试
  • 4 上传到 AUR
  • 5 总结与展望

1 AUR 简介

相关链接: https://aur.archlinux.org/

AUR (Arch User Repository, Arch 用户仓库) 是一个允许 ArchLinux 用户上传软件包打包文件 (PKGBUILD) 的地方. 这区别于 ArchLinux 官方维护的软件包仓库.

只要注册一个账号, 就能上传 AUR 软件包, 所以 AUR 软件包的数量很多 (目前有 8.5 万个), 这也是 ArchLinux 的一大优点 (软件包数量多).

使用 AUR 软件包时, 用户下载 PKGBUILD 文件, 在本地生成 (构建) 软件包, 然后使用 pacman 安装. 相比手动编译打包软件, AUR 将这个过程自动化了 (软件包维护者已经做好了), 所以使用起来还是相对比较方便的.

由于 AUR 软件包不是官方维护的, 软件包的质量是没有保证的, 使用起来也是有一定风险的. 但总的来说, AUR 还是一个好东西.

2 编写 PKGBUILD

在开始之前, 请首先阅读下列文档:

  • https://wiki.archlinux.org/title/AUR_submission_guidelines
  • https://wiki.archlinux.org/title/Arch_package_guidelines
  • https://wiki.archlinux.org/title/Arch_User_Repository
  • https://wiki.archlinux.org/title/Package_Maintainer_guidelines
  • https://wiki.archlinux.org/title/PKGBUILD

不符合要求的软件包可能会被直接删除.

文件 librush-bin/PKGBUILD:

# Maintainer: secext2022 <secext2022 at outlook dot com>
pkgname=librush-bin
pkgver=0.1.0a2
pkgrel=1
# https://github.com/fm-elpac/pmim-ibus
pkgdesc="ibus module for pmim (a Chinese pinyin input method)"
arch=('x86_64')
url="https://github.com/fm-elpac/librush"
license=('LGPL-2.1-or-later OR GPL-3.0-or-later')
depends=('ibus>=1.5.29')
source=('librush_release_x86_64-unknown-linux-gnu.tar.zst::https://github.com/fm-elpac/librush/releases/download/v0.1.0-a2/librush_release_x86_64-unknown-linux-gnu.tar.zst''pmim_ibrus.xml')
sha256sums=('1d0a1d257d6d2d4daac56a926c7a40b6215964bd27251e6c4da3e7acfc1b81cf''1ee458d6dc9ad97a4afe9939076675b43f236196eb3bd6e9a5a9e7e41ee1ded6')build() {cd "$srcdir"
}package() {cd "$srcdir"install -Dm755 -t "$pkgdir/usr/lib/pmim" target/release/ibrusinstall -Dm644 -t "$pkgdir/usr/share/ibus/component" pmim_ibrus.xml
}

解释:

  • # Maintainer: 文件的开头必须添加软件包维护者的信息.

  • pkgname=librush-bin: 软件包的名称. 预编译的软件包必须使用 -bin 后缀.

  • pkgver=0.1.0a2: 软件包的版本, 和上游发布的版本号保持一致. 注意不能含有 - 字符.

  • pkgrel=1: ArchLinux 软件包的版本, 从 1 开始. 每次 pkgver 更新后, 重置为 1.

  • pkgdesc=: 软件包的描述, 长度不超过 80 字符.

  • arch=('x86_64'): 这个软件包只支持 x86_64 架构的 CPU.

  • url=: 软件项目的网址.

  • license=: 软件包发布使用的许可协议.

  • depends=('ibus>=1.5.29'): 软件包运行所需的依赖. 在安装这个软件包之前, 所有依赖的软件包也会被安装.

  • source=: 构建软件包所需的文件列表 (以及下载网址).

  • sha256sums=: 上述文件的校验值 (hash). 这个不需要手动填写, 运行命令 updpkgsums 自动更新.

  • build(): 编译这个软件需要运行的命令. 因为这个软件已经编译过了, 所以这里没有.

  • package(): 打包这个软件需要运行的命令. 此处只是把两个文件安装 (复制) 到相应的路径.

3 本地打包测试

  • (1) 打包, 执行命令:

    > makepkg
    

    成功之后就能获得 ArchLinux 格式的软件包:

    > ls -l librush-bin-0.1.0a2-1-x86_64.pkg.tar.zst 
    -rw-r--r-- 1 s2 s2 1503158  38日 09:08 librush-bin-0.1.0a2-1-x86_64.pkg.tar.zst
    
  • (2) 安装软件包:

    > sudo pacman -U librush-bin-0.1.0a2-1-x86_64.pkg.tar.zst
    
  • (3) 安装之后可以查看这个软件包都有哪些文件:

    > pacman -Ql librush-bin
    librush-bin /usr/
    librush-bin /usr/lib/
    librush-bin /usr/lib/pmim/
    librush-bin /usr/lib/pmim/ibrus
    librush-bin /usr/share/
    librush-bin /usr/share/ibus/
    librush-bin /usr/share/ibus/component/
    librush-bin /usr/share/ibus/component/pmim_ibrus.xml
    

    这个软件包很简单, 只有两个文件.

    /usr/lib/pmim/ibrus艾刷 (librush) 模块, 处理与 ibus 输入法框架的接口.

    /usr/share/ibus/component/pmim_ibrus.xml 是 ibus 配置文件, 用于启动运行艾刷模块.


相关文章: 《ibus 源代码阅读 (1)》 https://blog.csdn.net/secext2022/article/details/136099328

4 上传到 AUR

相关链接:

  • https://aur.archlinux.org/
  • https://wiki.archlinux.org/title/AUR_submission_guidelines

  • (1) 注册账号并登录. 需要使用电子邮箱 (email).

  • (2) 创建 SSH 密钥对, 比如:

    > ssh-keygen -t ed25519 -C aur-test -f ~/.ssh/id_ed25519-aur-test
    

    其中 -t ed25519 指定密钥使用的算法. -C aur-test 指定注释. -f ~/.ssh/id_ed25519-aur-test 指定密钥文件的路径.

    注意 ~/.ssh/id_ed25519-aur-test 文件是 私钥, 千万不要泄露 ! 如果一旦泄露, 请尽快重新生成密钥, 并注销之前使用的密钥 (在 AUR 账户界面设置新的公钥).

  • (3) 在 AUR 账户界面设置自己的 SSH 公钥, 比如:

    > cat ~/.ssh/id_ed25519-aur-test.pub
    ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPza3zpjo/RuKSRk6Kvr5kP9RtfNZ7crujvPqHUM9nfw aur-test
    

    注意 .pub 结尾的文件是 公钥, 把公钥复制粘贴到设置页面中的文本框.

  • (4) 配置 SSH, 比如:

    > cat ~/.ssh/configHost aur.archlinux.orgIdentityFile ~/.ssh/id_ed25519-aur-testUser aur
    
  • (5) 测试 SSH 配置:

    > ssh -T aur@aur.archlinux.org
    Welcome to AUR, secext2022! Interactive shell is disabled.
    Try `ssh aur@aur.archlinux.org help` for a list of commands.
    

    如果一切正常, 会显示类似的信息.

  • (6) 克隆 git 仓库:

    > git -c init.defaultbranch=master clone aur@aur.archlinux.org:librush-bin.git
    

    因为这个软件包名称之前没有用过, 所以会是一个空仓库.

  • (7) 添加 PKGBUILD 等文件 (git add).

    更新源文件校验值:

    > updpkgsums
    

    生成 .SRCINFO 文件:

    > makepkg --printsrcinfo > .SRCINFO
    
  • (8) 提交 (git commit), 然后推送:

    > git push
    

然后就可以在 AUR 看到发布的软件包啦 ~

在这里插入图片描述

不久后就可以搜索到这个软件包:

> yay -Ss librush
aur/librush-bin 0.1.0a2-1 (+1 1.00) (已安装)ibus module for pmim (a Chinese pinyin input method)

5 总结与展望

发布 AUR 软件包比发布 flathub 应用, 要简单容易快速很多.

相关文章: 《发布 flatpak 应用 (flathub)》 https://blog.csdn.net/secext2022/article/details/136526447

所以目前 AUR 有 8.5 万个软件包, 而 flathub 只有 2512 个软件.


由于 ibus 输入法框架的限制, 目前只从 flatpak 安装应用是不够的. 在 flatpak 应用安装之后, 用户需要手动配置 ibus (安装 艾刷 ibrus 模块), 才能让整个拼音输入法正常工作.

ArchLinux 用户只需要从 AUR 安装 librush-bin 软件包即可, 这比手动配置容易一点.

未来如果 ibus 做出改变, 能够更好的支持第三方输入法, 可能就不用这么麻烦了.


本文使用 CC-BY-SA 4.0 许可发布.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/763352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IC设计】Verilog线性序列机点灯案例(四)(小梅哥课程)

文章目录 该系列目录&#xff1a;设计环境设计目标设计思路RTL及Testbench代码RTL代码Testbenchxdc约束 仿真结果 声明&#xff1a;案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔记&#xff0c;如有学习需要请支持官方正版。 该系列目录&#xff1a; Verilog线性…

力扣热门算法题 52. N 皇后 II,53. 最大子数组和,54. 螺旋矩阵

52. N 皇后 II&#xff0c;53. 最大子数组和&#xff0c;54. 螺旋矩阵&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.20 可通过leetcode所有测试用例。 目录 52. N 皇后 II 解题思路 完整代码 Python Java 53. 最大子数组…

长安链开源社区发布2023年度长安链优秀应用案例

1月27日结束的“长安链发布三周年庆暨生态年会”上&#xff0c;在国家区块链技术创新中心的指导下&#xff0c;长安链开源社区联合长安链生态联盟正式发布2023年度长安链行业示范案例、领域精品案例及特色创新案例。 本次评选面向2023年度应用长安链上线并取得应用成效的案例&…

Matlab在高光谱遥感中的作用:从数据处理到决策支持

光谱和图像是人们观察世界的两种方式&#xff0c;高光谱遥感通过“图谱合一”的技术创新将两者结合起来&#xff0c;大大提高了人们对客观世界的认知能力&#xff0c;本来在宽波段遥感中不可探测的物质&#xff0c;在高光谱遥感中能被探测。以高光谱遥感为核心&#xff0c;构建…

vue中如何实现子组件相互切换,而且数据不会丢失

项目场景&#xff1a; 今天的项目场景: 项目为数据报表,但是一个父页面中有很多的子页面,而且子页面中不是相互关联,但是数据又有联系. 问题描述 子页面相互切换的时候之前填写好的数据会丢失,无法保存.这样想提交所有的子页面的数据就出现问题. 原因分析&#xff1a; 分析原因…

外包干了20天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入杭州某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了2年的功能测试…

SpringCloud详解,图文码笔记

注意&#xff1a; SpringCloud并 不等于 微服务 1.微服务技术线 2.认识微服务 分布式架构 分布式架构: 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&#xff0c;称为一个服务。 优点&#xff1a; 降低服务耦合有利于服务升级拓展 服务治理 分布式…

基于Java的绩效考核系统的设计与实现

今天要和大家聊的是一款基于Java的绩效考核系统的设计与实现 &#xff01;&#xff01;&#xff01; 有需要的小伙伴可以通过文章末尾名片咨询我哦&#xff01;&#xff01;&#xff01; &#x1f495;&#x1f495;作者&#xff1a;李同学 &#x1f495;&#x1f495;个人简介…

AcWing 3224. 画图 (BFS,Flood Fill,坐标变换)

用 ASCII 字符来画图是一件有趣的事情&#xff0c;并形成了一门被称为 ASCII Art 的艺术。 例如&#xff0c;下图是用 ASCII 字符画出来的 CSPRO 字样。 ..____.____..____..____...___.../.___/.___||.._.\|.._.\./._.\.|.|...\___.\|.|_).|.|_).|.|.|.||.|___.___).|..__/|.…

从先序与中序遍历序列构造二叉树

从先序与中序遍历序列构造二叉树 描述&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 递归法 解题思路&#xff1a; 通过先序遍历我…

手势识别模块PAJ7620的简单应用

文章目录 一、PAJ76201.介绍2.模块特性3.模块原理4.原理图5.内部框图 二、软件1.手势识别1.1 初始化ATK-MS7620模块1.2 配置ATK-MS7620模块为手势检测模式1.3 获取手势 2.接近检测1.1 初始化ATK-MS7620模块1.2 配置ATK-MS7620模块为接近检测模式1.3 获取物体亮度和大小 三、总结…

HQYJ 2024-3-19 作业

TCP通信三次握手和四次挥手&#xff1a; 并行和并发的区别&#xff1a;并发是单核处理器处理多个线程任务&#xff0c;并行是多核处理器同时处理多个线程任务。并发过程中会抢占CPU资源&#xff0c;轮流使用&#xff1b;并行过程不会抢占CPU资源。 阻塞IO和非阻塞IO&#xff…

迈入C++编程之路(一)

目录 一、什么是C 二、关键字&#xff1a; 三、命名空间 &#xff1a; 1. C语言存在的问题&#xff1a; 2. namespace关键字&#xff1a; 3. 注意点&#xff1a; 4.使用命名空间分为三种&#xff1a; 四、输入输出&#xff1a; 五、缺省函数&#xff1a; 1. 什么是缺省…

Xinstall让App推广变得高效而简单

随着移动互联网的迅猛发展&#xff0c;App已成为人们生活中不可或缺的一部分。然而&#xff0c;对于众多开发者和广告主来说&#xff0c;如何高效地推广自己的App&#xff0c;却一直是一个令人头疼的问题。今天&#xff0c;我们要为大家介绍的&#xff0c;正是国内专业的App全渠…

《妈妈是什么》笔记(四) 找到自己的兴趣,是童年最重要的工作

经典摘录 一个孩子的童年&#xff0c;本来就会自然地孕育创意。妈妈没有识别创意的能力&#xff0c;不代表孩子没有创意。 【我们要给孩子准备简单、可塑性强的创意材料&#xff0c;比如充足的纸和笔。】 【童年的权利&#xff0c;就是玩&#xff1b;童年的执行力&#xff0…

【CPP】C++11多线程

thread类 在C11之前&#xff0c;涉及到多线程问题&#xff0c;都是和平台相关的&#xff0c;比如windows和linux下各有自己的接口&#xff0c;这使得代码的可移植性比较差。C11中最重要的特性就是对线程进行支持了&#xff0c;使得C在并行编程时不需要依赖第三方库&#xff0c…

Docker卷原理

“在此刻要沉醉忘我” 当我们想从宿主机外&#xff0c;控制容器内文件时时行不通的&#xff0c;因为存在Cgroupe、命名空间等虚拟化技术使得容器内的文件对外不可见。所以&#xff0c;引入了卷机制&#xff0c;使得可以从宿主机外访问到容器内的文件内容。 那么&#xff0c;Doc…

哨兵位及用哨兵位实现链表的链接

哨兵位&#xff1a; 通俗的话讲就是额外开辟一块空间&#xff0c;指向链表的头部。 合并两个有序链表 已解答 简单 相关标签 相关企业 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#…

比堆垛机方案省电65% 实施快50% 四向车系统柔性化建设进程异军突起

对物流企业来说&#xff0c;供应链的数智化升级并非“赶时髦”&#xff0c;它需要找到一个既懂物流行业&#xff0c;又有数字化技术作基础的仓储方案提供商。而河北沃克基于AI底层技术、软硬一体化产品体系和技术创新行业经验双轮驱动的业务团队等“技术产品人才”三位一体优势…

C++多线程都可以对同一个全局变量读写,不设置锁应该没关系吧?

C多线程都可以对同一个全局变量读写&#xff0c;不设置锁应该没关系吧&#xff1f; 是这个意思吗&#xff1a;某个线程只操作一个二进制位&#xff0c;不会有其他线程和它抢着操作同一个二制进位&#xff0c;这种情况下&#xff0c;是否需要锁&#xff1f; 在开始前我有一些资…