From d4e16fda3f2382ba90281f97cf3629938148caec Mon Sep 17 00:00:00 2001
From: Xiao Pan <xyz@flylightning.xyz>
Date: Mon, 16 Sep 2024 17:45:35 -0700
Subject: pacman v7 use alpm user to download, edit mpra so alpm user can read
 my repo

---
 sh/mpra | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

(limited to 'sh')

diff --git a/sh/mpra b/sh/mpra
index 38e605f..abf0884 100755
--- a/sh/mpra
+++ b/sh/mpra
@@ -23,6 +23,7 @@ fn () {
 
 ext=zst
 copy_any=
+copy=
 
 while getopts ac opt; do
 	case $opt in
@@ -30,6 +31,19 @@ while getopts ac opt; do
 		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
@@ -45,3 +59,17 @@ else
 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
-- 
cgit v1.2.3-70-g09d2