From 0696e888012f89da0b67d6999f14dfe422497914 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas@archlinux.org>
Date: Sun, 16 Jun 2013 11:27:58 +0200
Subject: [PATCH] releng: Allow specifying a mirror on the kernel command line.

The new mirror= option takes a mirror URL and creates a new mirrorlist.
When setting mirror=auto, the mirror is taken from archiso_http_srv in
order to keep using the mirror selected in the netboot menu.
---
 .../etc/systemd/scripts/choose-mirror         | 26 +++++++++++++++++++
 .../etc/systemd/system/choose-mirror.service  | 10 +++++++
 .../root-image/root/customize_root_image.sh   |  2 +-
 3 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100755 configs/releng/root-image/etc/systemd/scripts/choose-mirror
 create mode 100644 configs/releng/root-image/etc/systemd/system/choose-mirror.service

diff --git a/configs/releng/root-image/etc/systemd/scripts/choose-mirror b/configs/releng/root-image/etc/systemd/scripts/choose-mirror
new file mode 100755
index 00000000..0ae08067
--- /dev/null
+++ b/configs/releng/root-image/etc/systemd/scripts/choose-mirror
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+get_cmdline() {
+    local param
+    for param in $(< /proc/cmdline); do
+        case "${param}" in
+            $1=*) echo "${param##*=}";
+            return 0
+            ;;
+        esac
+    done
+}
+
+mirror=$(get_cmdline mirror)
+[[ $mirror = auto ]] && mirror=$(get_cmdline archiso_http_srv)
+[[ $mirror ]] || exit 0
+
+mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.orig
+cat >/etc/pacman.d/mirrorlist << EOF
+#
+# Arch Linux repository mirrorlist
+# Generated by archiso
+#
+
+Server = ${mirror%%/}/\$repo/os/\$arch
+EOF
diff --git a/configs/releng/root-image/etc/systemd/system/choose-mirror.service b/configs/releng/root-image/etc/systemd/system/choose-mirror.service
new file mode 100644
index 00000000..1e4d771d
--- /dev/null
+++ b/configs/releng/root-image/etc/systemd/system/choose-mirror.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Choose mirror from the kernel command line
+ConditionKernelCommandLine=mirror
+
+[Service]
+Type=oneshot
+ExecStart=/etc/systemd/scripts/choose-mirror
+
+[Install]
+WantedBy=multi-user.target
diff --git a/configs/releng/root-image/root/customize_root_image.sh b/configs/releng/root-image/root/customize_root_image.sh
index 97e28747..a60f3080 100755
--- a/configs/releng/root-image/root/customize_root_image.sh
+++ b/configs/releng/root-image/root/customize_root_image.sh
@@ -17,4 +17,4 @@ chmod 440 /etc/sudoers.d/g_wheel
 
 sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist
 
-systemctl enable multi-user.target pacman-init.service
+systemctl enable multi-user.target pacman-init.service choose-mirror.service
-- 
GitLab