summaryrefslogtreecommitdiffstats
path: root/build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http
diff options
context:
space:
mode:
Diffstat (limited to 'build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http')
-rw-r--r--build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http47
1 files changed, 47 insertions, 0 deletions
diff --git a/build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http b/build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http
new file mode 100644
index 0000000..e36fa21
--- /dev/null
+++ b/build_tools/archiso-19/archiso/initcpio/hooks/archiso_pxe_http
@@ -0,0 +1,47 @@
+# vim: set ft=sh:
+
+run_hook() {
+ if [[ -n "${ip}" && -n "${archiso_http_srv}" ]]; then
+
+ archiso_http_srv=$(eval echo ${archiso_http_srv})
+ [[ -z "${archiso_http_spc}" ]] && archiso_http_spc="75%"
+
+ mount_handler="archiso_pxe_http_mount_handler"
+ fi
+}
+
+# Fetch a file with CURL
+#
+# $1 URL
+# $2 Destination directory inside httpspace/${archisobasedir}
+_curl_get() {
+ local _url="${1}"
+ local _dst="${2}"
+
+ msg ":: Downloading '${_url}'"
+ if ! curl -L -f -o "/run/archiso/httpspace/${archisobasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
+ echo "ERROR: Downloading '${_url}'"
+ echo " Falling back to interactive prompt"
+ echo " You can try to fix the problem manually, log out when you are finished"
+ launch_interactive_shell
+ fi
+}
+
+archiso_pxe_http_mount_handler () {
+ newroot="${1}"
+
+ msg ":: Mounting /run/archiso/httpspace (tmpfs) filesystem, size='${archiso_http_spc}'"
+ mkdir -p "/run/archiso/httpspace"
+ mount -t tmpfs -o size="${archiso_http_spc}",mode=0755 httpspace "/run/archiso/httpspace"
+
+ _curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs" "/${arch}"
+
+ if [[ "${checksum}" == "y" ]]; then
+ _curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.md5" "/${arch}"
+ fi
+
+ mkdir -p "/run/archiso/bootmnt"
+ mount -o bind /run/archiso/httpspace /run/archiso/bootmnt
+
+ archiso_mount_handler ${newroot}
+}