有自己的 AUR 仓库了,好耶

由于嫌弃aur包编译看起来不爽,就搭建了一个自己的aur仓库,用来一些放编译好的包。此处记录一下。

搭建

makepkg

打包就拿 oh-my-zsh-git 举例

1
2
3
4
5
6
7
8
9
10
11
12
sudo pacman -S git pacman-contrib namcap pacman gnupg rsync curl
# 克隆项目到本地
mkdir aur_project && cd aur_project
git clone https://aur.archlinux.org/packages/oh-my-zsh-git.git
# 更新 PKGBUILD 的 md5sum
updpkgsums
# 检查PKGBUILD
namcap PKGBUILD
# 更新 .SRCINFO
makepkg --printsrcinfo > .SRCINFO
# 测试、编译pkg包
makepkg

makepkg 常用的两个选项:
makepkg –syncdeps -f
–syncdeps: 同步依赖
-f: 覆盖存在的文件

现在本地应该会有 oh-my-zsh-git-*-any.pkg.tar.xz,这个就是我们要放在服务器上的包,你也可以直接 pacman -U 安装。

签名

要放在服务器上,你还需要用GPG 密钥签名这个文件,还要把你的公钥一起放服务器上,或者其他能让用户拿到的地方。

1
gpg --detach-sign oh-my-zsh-git-*-any.pkg.tar.xz

如果没有GPG key, (?怎么会没有呢) 可以生成一个新密钥。不会的话,看我的这篇文章 用GPG 给Github Commit 上一把锁

建立文件目录数据库

在/etc/pacman.conf我设置的仓库名是[example],那么建立索引的时候,就要写 example.db.tar.gz

1
repo-add example.db.tar.gz oh-my-zsh-git-*-any.pkg.tar.xz

每个文件都需要建一遍索引,有点麻烦。

文件目录

html_path 别忘了改成你的, 我的http服务根目录为pkg 文件夹

1
2
3
4
5
6
7
8
9
10
11
12
/html_path/pkg/
└── archlinux
└── x86_64
├── oh-my-zsh-git-*-any.pkg.tar.xz
├── oh-my-zsh-git-*-any.pkg.tar.xz.sig
├── example.db
├── example.db.tar.gz
├── example.files
├── example.files.tar.gz
└── z.build.sh

2 directories, 15 files

同步

Update 2019-07-20 22:19:09 CST: 家宽申请了公网IP, 用之前笔记本打包。
Update 2019-07-19 17:47:54 CST: 把vps dd了arch, 可以在vps上打包了, 好耶。

服务器不是用的Arch, 包又都不算大,干脆就本地编译好,手动rsync 推上去了。后续应该会换到Arch, 但是估计性能很烂(

1
rsync -r -I -L pkg [USER@]HOST:/html_path/

-r: 同步文件夹
-I: 哪怕时间戳和文件大小相同,也要检查数据的一致性
-L: 同步软链接的实体文件 (软链接可以用 -l)

可以用 -n 选项来测试

Nginx

这是我的nginx 配置文件可以抄一下, 别忘了改成你的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# /etc/nginx/conf.d/example.conf
server {

listen 80;
server_name example.com;

# 开启nginx 文件目录
autoindex on;
autoindex_localtime on;
autoindex_exact_size off;
charset utf-8,gbk;

location / {

root /html_path;
index index.html index.htm index.php;
}
}

使用

上边说,你要把GPG 公钥放在用户能拿到的地方,我直接给放在同一个文件服务器上了

1
curl https://example.com/archlinux/GPG.key | sudo pacman-key -a -

然后在 /etc/pacman.conf 添加仓库

1
2
3
[example]
SigLevel = Never
Server = https://example.com/archlinux/$arch

$arch 是指的你的操作系统, i686 或者 x86_64, 上边有我的文件目录。

然后sudo pacman -Ss | example 就能看到你自己仓库里的包了
example 别忘了换成你自己的

现在 -Si 包名应该是没打包者的信息
Packager : Unknown Packager

在 /etc/makepkg.conf 里可以写入

PACKAGER=”Foo Bar <foo.bar@archlinux.org>”

再看就有了
Packager : Foo Bar <foo.bar@archlinux.org>

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×