summaryrefslogtreecommitdiff
path: root/sh/mpra
blob: db648cbd4aef4da1bf3e9287161dbb3e1db6440d (plain)
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 acC 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