[arch-general] [patch] AIF, discover repos on iso.

Aaron Griffin aaronmgriffin at gmail.com
Fri Feb 19 17:12:40 EST 2010


On Fri, Feb 19, 2010 at 3:26 PM, Mark Pustjens <pustjens at dds.nl> wrote:
> Hi List,
>
> The attached patch fixes a TODO in lib-pacman of aif.
> Instead of hardcoding that `core' is always available locally and falling
> back to net for others, it now checks /src/ for repos.
>
> It assumes repos are stored at /src/$repo/pkg/. All these repos are added as
> cache dirs.
>
> While preparing pacman, a number of repo names are provided to be prepared.
>
> All those repos which were requested are added as actual repo. If this repo
> is available locally, the url points to disk. Otherwise it falls back to the
> mirrorlist.

CCing to the arch-releng list
-------------- next part --------------
diff -u -Naur aif-2009.08.07/src/core/libs/lib-pacman.sh aif-2009.08.07-new/src/core/libs/lib-pacman.sh
--- aif-2009.08.07/src/core/libs/lib-pacman.sh	2009-08-07 21:25:04.000000000 +0200
+++ aif-2009.08.07-new/src/core/libs/lib-pacman.sh	2010-02-19 22:12:33.000000000 +0100
@@ -62,25 +62,34 @@
 	[ "$var_PKG_SOURCE_TYPE" = "cd" ] && local serverurl="${var_FILE_URL}"
 	[ "$var_PKG_SOURCE_TYPE" = "net" ] && local serverurl="${var_SYNC_URL}"
 
-	[ -z "$1" ] && repos=core
-	[ -n "$1" ] && repos="$@"
-	# Setup a pacman.conf in /tmp
-	cat << EOF > /tmp/pacman.conf
-[options]
-CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg
-CacheDir = /src/core/pkg
-EOF
-
-for repo in $repos
-do
-	#TODO: this is a VERY, VERY dirty hack.  we fall back to net for any non-core repo because we only have core on the CD. also user maybe didn't pick a mirror yet
-	if [ "$repo" != core ]
-	then
-		add_pacman_repo target ${repo} "Include = $var_MIRRORLIST"
+	if [ -z "$1" ]; then
+		repos="core"
 	else
-		add_pacman_repo target ${repo} "Server = ${serverurl/\$repo/$repo}" # replace literal '$repo' in the serverurl string by "$repo" where $repo is our variable.
+		repos="$@"
 	fi
-done
+
+	# We make the assumption that /src/ contains a number of directories, each
+	# of which contains a package repository under subdir `pkg'.
+	# Eg: /src/core/pkg is a package repository.
+	local_repos=`ls /src/`
+
+	# Setup a pacman.conf in /tmp
+	echo "[options]" > /tmp/pacman.conf
+	echo "CacheDir = ${var_TARGET_DIR}/var/cache/pacman/pkg" >> /tmp/pacman.conf
+	for repo in ${local_repos}; do
+		echo "CacheDir = /src/${repo}/pkg" >> /tmp/pacman.conf
+	done
+
+	# Add each repo to the config file
+	# If the repo is available locally, add a local url, otherwise refer to the mirrorlist.
+	for repo in ${repos}; do
+		if echo "${local_repos}" | grep "^${repo}$" >/dev/null ;then
+			add_pacman_repo target ${repo} "Server = file:///src/${repo}/pkg"
+		else
+			add_pacman_repo target ${repo} "Include = ${var_MIRRORLIST}"
+		fi
+	done
+
 	# Set up the necessary directories for pacman use
 	[ ! -d "${var_TARGET_DIR}/var/cache/pacman/pkg" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/cache/pacman/pkg"
 	[ ! -d "${var_TARGET_DIR}/var/lib/pacman" ] && mkdir -m 755 -p "${var_TARGET_DIR}/var/lib/pacman"


More information about the arch-general mailing list