[arch-releng] [archiso] [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/system/choose-mirror.service | 10 +++++++++ .../releng/root-image/root/customize_root_image.sh | 2 +- .../root-image/usr/local/bin/choose-mirror.sh | 26 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 configs/releng/root-image/etc/systemd/system/choose-mirror.service create mode 100755 configs/releng/root-image/usr/local/bin/choose-mirror.sh 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 0000000..daef1f2 --- /dev/null +++ b/configs/releng/root-image/etc/systemd/system/choose-mirror.service @@ -0,0 +1,10 @@ +[Unit] +Description=Choose mirror from the command line +ConditionKernelCommandLine=mirror + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/choose-mirror.sh + +[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 97e2874..a60f308 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 diff --git a/configs/releng/root-image/usr/local/bin/choose-mirror.sh b/configs/releng/root-image/usr/local/bin/choose-mirror.sh new file mode 100755 index 0000000..0ae0806 --- /dev/null +++ b/configs/releng/root-image/usr/local/bin/choose-mirror.sh @@ -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 -- 1.8.3
On 06/05/2013 03:32 PM, Thomas Bächler wrote:
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.
Cool :) PS: Oh! this was classified as spam by Yahoo!, grrr!
--- .../etc/systemd/system/choose-mirror.service | 10 +++++++++ .../releng/root-image/root/customize_root_image.sh | 2 +- .../root-image/usr/local/bin/choose-mirror.sh | 26 ++++++++++++++++++++++
Nice, I think a better place for /usr/local/bin/choose-mirror.sh is /etc/systemd/scripts/choose-mirror ;)
3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 configs/releng/root-image/etc/systemd/system/choose-mirror.service create mode 100755 configs/releng/root-image/usr/local/bin/choose-mirror.sh
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 0000000..daef1f2 --- /dev/null +++ b/configs/releng/root-image/etc/systemd/system/choose-mirror.service @@ -0,0 +1,10 @@ +[Unit] +Description=Choose mirror from the command line
...the kernel command... (looks better)
+ConditionKernelCommandLine=mirror + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/choose-mirror.sh + +[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 97e2874..a60f308 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 diff --git a/configs/releng/root-image/usr/local/bin/choose-mirror.sh b/configs/releng/root-image/usr/local/bin/choose-mirror.sh new file mode 100755 index 0000000..0ae0806 --- /dev/null +++ b/configs/releng/root-image/usr/local/bin/choose-mirror.sh @@ -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
PS: not much related to this, but I like at some point in the future, that systemd gets the possibility, in some way, manage kernel-command-line, to be easily usable from units, this will be really useful, if we want to migrate to full systemd in initramfs stage for example. -- Gerardo Exequiel Pozzi \cos^2\alpha + \sin^2\alpha = 1
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. --- .../root-image/etc/systemd/scripts/choose-mirror | 26 ++++++++++++++++++++++ .../etc/systemd/system/choose-mirror.service | 10 +++++++++ .../releng/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 0000000..0ae0806 --- /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 0000000..1e4d771 --- /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 97e2874..a60f308 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 -- 1.8.3.1
participants (2)
-
Gerardo Exequiel Pozzi
-
Thomas Bächler