1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#!/bin/sh
# MakePkg Repo-Add
fn () {
if ! { [ -f PKGBUILD ] || [ -h PKGBUILD ];}; then
exit 1
fi
find . -maxdepth 1 -type f -name "*.pkg.tar.$ext*" -delete
# Maybe failed to sign because I forget to input gpg password for a long time, maybe also because terminal window too small cause gpg tui that ask password can't show?
# May cause invalid database signature which cause invalid signature error when trying to download from repo
# If this happened, maybe can be fixed by `mpra -c ~/programs/repos/fly/any/fsh-git; sudo pacman -Syy`
# Maybe also need some more commands before: `cd ~/programs/repos/fly/any/repo || exit; rm fly-any* && repo-add -s -v fly-any.db.tar.gz *.zst; mpra -c ~/programs/repos/fly/any/fsh-git; sudo pacman -Syy`
# So I choose to exit 1 if failed
makepkg --sign -sf || exit 1
newpkg="$(find . -maxdepth 1 -type f -name "*.pkg.tar.$ext")"
[ -d ../repo ] || mkdir ../repo
mv "$newpkg" "$newpkg.sig" ../repo
# need manually repo-add new database for first time initialization
repo-add -s -v -R "$(find ../repo -maxdepth 1 -type f -name '*.db.tar.gz')" "../repo/$newpkg"
# seems no need to delete *.old and *.old.sig, see https://mirror.fcix.net/archlinux/core/os/x86_64/ it do include *.old
#find ../repo -maxdepth 1 -type f \( -name '*.old' -o -name '*.old.sig' \) -delete
}
ext=zst
copy_any=
copy=
while getopts ac opt; do
case $opt in
# arch linux arm still using .xz instead of .zst as package compression format
a) ext=xz;;
# copy arch linux fly-any repo
c) copy_any=1;;
# Copy arch linux fly repo, needed because of pacman 7.0's
# `DownloadUser = alpm` new feature in /etc/pacman.conf, else this
# error: "error: failed retrieving file 'fly.db' from disk : Couldn't
# open file /home/xyz/programs/repos/fly/x86_64/repo/fly.db". More see
# https://archlinux.org/news/manual-intervention-for-pacman-700-and-local-repositories-required/.
# I think it is due to now pacman try download as alpm:alpm user, but
# my old repo is inside /home/xyz. The url's solution is not enough
# because /home/xyz is 700, so I choose to mkdir a new dir in /var/lib.
# I'm currently using fly repo for xyzinsp computer only, which has
# native optimizations enabled in /etc/makepkg.conf. for backward
# compatibility, I keep -c, but it maybe better if I make copying to
# other directories the default behavior, or other ways.
C) copy=1;;
\?) exit 1;;
esac
done
shift $((OPTIND-1))
if [ $# -eq 0 ]; then
fn
else
for dir; do
cd -- "$(realpath -- "$dir")" || exit
fn
done
fi
[ "$copy_any" ] && sudo rsync -vPrlu --delete ../repo/ /srv/http/mirrors/archlinux/fly/os/any
if [ "$copy" ]; then
if ! [ -d /var/lib/mpra ]; then
# If then `sudo chown xyz:wheel /var/lib/mpra`, no need sudo to copy to
# that dir, but not sure if this is safe. Because /var/cache/pacman is
# root:root 755 permission, I choose to follow its permission and leave
# it as default.
sudo mkdir /var/lib/mpra
fi
# now only xyzinsp computer need this, but in the future maybe consider
# following fly/os/any like naming conventions for different repo and
# architecture.
sudo rsync -vPrlu --delete ../repo/ /var/lib/mpra
fi
|