最新消息

欢迎来到 DH Hub!

我们是 南信大 DH 互联网技术社团

在这里收集当下火热的技术文章,并且分到对应板块内,作为社团的技术积累,供历届社友学习

本站不开放注册,访客可以正常浏览

  • 由于一些解析原因,建议先在本地编辑器写完以后再上传
  • 由于服务器原因,在编辑主题 / 回复时会有一定卡顿,请谅解。

展示 在AUR (Archlinux User Repository) 提交你的软件包

主题 作者
成员
管理成员
09
3
4
文章类型
完全原创 —— 转载请标注作者
0x00 啥是AUR

Arch 用户软件仓库(Arch User Repository,AUR)是为用户而建、由用户主导的 Arch 软件仓库。AUR 中的软件包以软件包生成脚本(PKGBUILD)的形式提供,用户自己通过 makepkg 生成包,再由 pacman 安装。创建 AUR 的初衷是方便用户维护和分享新软件包,并由官方定期从中挑选软件包进入 community 仓库。本文介绍用户访问和使用 AUR 的方法。(从Arch Wiki - Arch 用户软件仓库 (AUR)抄的)

简单来说, AUR就是Arch User在互联网上分享自己制作的软件包的地方。如果你很感兴趣,你应该去Wiki看一看,里面东西挺多的。

0x01 创建账号&配置提交环境

你可以去这里注册你的AUR账户。

如果你注册好了,那么恭喜你,你注册好了。不过,你要配置一下SSH Public Key,让AUR的服务器知道这是你。你最好生成一个新的SSH 密钥对,因为Arch Wiki让我这么做。 这会让你的电脑被我偷走的时候,阻止我在你的AUR仓库造反。 下面我将会告诉你该怎么做。当然,你也可以去上面提到的Wiki中索取更多细节。

要创建新的密钥对,你可以这么做:

Bash:
 $ ssh-keygen -f ~/.ssh/aur # 这会在~/.ssh下创建aur(私钥)和aur.pub(公钥)

然后,你可以去你账户的配置页面 (https://aur.archlinux.org/account/<你的用户名>/edit) 添加~/.ssh/aur.pub内的内容。你应该把他们放在 SSH Public Key: 后的文本框里面,然后在页面底部填写你的密码,更新一下就可以了。

你还需要告诉你的git在连接aur.archlinux.org的时候使用这对密钥,可以在.ssh/config里添加这些:

代码:
Host aur.archlinux.org
  IdentityFile ~/.ssh/aur
  User aur

这样,你应该就可以提交你的包了。

0x02 创建仓库

这很简单,你只要找一个你觉得合适的存储位置,然后执行:

Bash:
 $ git -c init.defaultbranch=master clone ssh://aur@aur.archlinux.org/<pkgbase>.git # 此处的<pkgbase>应该改成你的包名。

你应该会看到warning: You appear to have cloned an empty repository.。这是在告诉你,你拉取了一个不存在的仓库。如果它真的不存在,那么它马上就要存在了。你甚至可以开一瓶可乐来祝贺它的诞生。

0x03 创建一个PKGBUILD

PKGBUILD就是一个告诉makepkg怎么造一个软件包的文件。你可以先看一下我的:

代码:
# Maintainer: TurboHsu <hsuturbo@outlook.com>
pkgname=munager-git
_pkgname=munager
pkgrel=1
pkgver=0.1.1.r0.gcc90098
pkgdesc="Music managing utils which can fetch lyrics and do sync."
arch=('any')
url="https://github.com/TurboHsu/munager"
license=('Apache')
makedepends=('git' 'go')
provides=('munager')
source=("git+${url}.git#branch=main")
pkgver() {
    cd "${srcdir}"/"${_pkgname}"/
    git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g'
}
build() {
    cd "${srcdir}"/"${_pkgname}"/
    go build -ldflags="-s -w -linkmode external -extldflags \"${LDFLAGS}\"" \
         -trimpath \
         -buildmode=pie \
         -mod=readonly \
         -modcacherw \
         .
}
package() {
    cd "${srcdir}"/"${_pkgname}"/
    install -Dm 755 munager -t "${pkgdir}"/usr/bin
}
sha256sums=('SKIP')

如果你不想抄我的,你可以去这里。当然,你也可以让man男人告诉你,只要执行man PKGBUILDman就会告诉你更多细节。

对于各种变量的解释,你可以去上述的man page里面查找,里面有详细的定义。这里我就说几个。

_pkgname是我自己定义的一个变量,你可以看到我在build()中引入了它。在克隆仓库之后,我需要进入源码的目录。当然,你如果想要直接写死,也是可以的。

pkgver()会自动更新pkgver的版本号。如果你尝试写一个从最新源码编译的软件包,这会很有用。而且,如果你在构建从VCS编译的软件包,你最好看看这个

build()中编译go的参数来自这里,主要是为了让程序不包含构建时的目录,以免产生一些问题。要不然,makepkg会告诉你:WARNING: Package contains reference to $srcdir

package()中的install来自coreutils,它在这里做的事情实际上就是复制一些文件,并且给他们加上你设置的权限。这样会比较规范,我猜。

在做完了一切之后,你最好makepkg一下,看看有没有什么问题。

0x04 提交你的包

造好了PKGBUILD之后,你还需要生成一下.SRCINFO。你可以这么做:

Bash:
 $ makepkg --printsrcinfo > .SRCINFO

然后你就可以提交了:

Bash:
 $ git add PKGBUILD .SRCINFO # 添加你的PKGBUILD和.SRCINFO
 $ git commit -m "Blah blah" # Commit
 $ git push                  # Push

之后,你应该能在你的AUR上看见你的包了。别人应该也就可以用yay之类的来装它们。
 
最后编辑:
顶部