Remove mkinitcpio-archiso files

archiso/initcpio/*:
Remove mkinitcpio-archiso scripts as they have been split out into a separate project.

docs/README.{altbootmethods,bootparams}:
Remove mkinitcpio-archiso specific documentation.
This commit is contained in:
David Runge 2021-07-31 16:58:57 +02:00
parent a4691b8ee4
commit 75d36d2124
No known key found for this signature in database
GPG Key ID: 7258734B41C31549
18 changed files with 0 additions and 1070 deletions

View File

@ -1,285 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
# args: source, newroot, mountpoint
_mnt_dmsnapshot() {
local img="${1}"
local newroot="${2}"
local mnt="${3}"
local img_fullname="${img##*/}";
local img_name="${img_fullname%%.*}"
local dm_snap_name="${dm_snap_prefix}_${img_name}"
local ro_dev ro_dev_size rw_dev
ro_dev="$(losetup --find --show --read-only -- "${img}")"
echo "${ro_dev}" >> /run/archiso/used_block_devices
ro_dev_size="$(blockdev --getsz "${ro_dev}")"
if [ "${cow_persistent}" = "P" ]; then
if [ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]; then
msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow', using as persistent."
else
msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as persistent."
truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
else
if [ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]; then
msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' but non-persistent requested, removing."
rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as non-persistent."
truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
rw_dev="$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow")"
echo "${rw_dev}" >> /run/archiso/used_block_devices
dmsetup create "${dm_snap_name}" --table \
"0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}"
if [ "${cow_persistent}" != "P" ]; then
rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi
_mnt_dev "/dev/mapper/${dm_snap_name}" "${newroot}${mnt}" "-w" "defaults"
readlink -f "/dev/mapper/${dm_snap_name}" >> /run/archiso/used_block_devices
}
# args: source, newroot, mountpoint
_mnt_overlayfs() {
local src="${1}"
local newroot="${2}"
local mnt="${3}"
mkdir -p "/run/archiso/cowspace/${cow_directory}/upperdir" "/run/archiso/cowspace/${cow_directory}/workdir"
mount -t overlay -o \
"lowerdir=${src},upperdir=/run/archiso/cowspace/${cow_directory}/upperdir,workdir=/run/archiso/cowspace/${cow_directory}/workdir" \
airootfs "${newroot}${mnt}"
}
# args: /path/to/image_file, mountpoint
_mnt_sfs() {
local img="${1}"
local mnt="${2}"
local img_fullname="${img##*/}"
local sfs_dev
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${copytoram}" = "y" ]; then
msg -n ":: Copying squashfs image to RAM..."
# in case we have pv use it to display copy progress feedback otherwise
# fallback to using plain cp
if command -v pv > /dev/null 2>&1; then
echo ""
(pv "${img}" > "/run/archiso/copytoram/${img_fullname}")
local rc=$?
else
(cp -- "${img}" "/run/archiso/copytoram/${img_fullname}")
local rc=$?
fi
if [ $rc != 0 ]; then
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
launch_interactive_shell
fi
img="/run/archiso/copytoram/${img_fullname}"
msg "done."
fi
sfs_dev="$(losetup --find --show --read-only -- "${img}")"
echo "${sfs_dev}" >> /run/archiso/used_block_devices
_mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults"
}
# args: /path/to/image_file, mountpoint
_mnt_erofs() {
local img="${1}"
local mnt="${2}"
local img_fullname="${img##*/}"
local erofs_dev
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${copytoram}" = "y" ]; then
msg -n ":: Copying EROFS image to RAM..."
if ! cp -- "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
launch_interactive_shell
fi
img="/run/archiso/copytoram/${img_fullname}"
msg "done."
fi
erofs_dev="$(losetup --find --show --read-only -- "${img}")"
echo "${erofs_dev}" >> /run/archiso/used_block_devices
_mnt_dev "${erofs_dev}" "${mnt}" "-r" "defaults" "erofs"
}
# args: device, mountpoint, flags, opts
_mnt_dev() {
local dev="${1}"
local mnt="${2}"
local flg="${3}"
local opts="${4}"
local fstype="${5:-auto}"
mkdir -p "${mnt}"
msg ":: Mounting '${dev}' to '${mnt}'"
while ! poll_device "${dev}" 30; do
echo "ERROR: '${dev}' device did not show up after 30 seconds..."
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
done
if mount -t "${fstype}" -o "${opts}" "${flg}" "${dev}" "${mnt}"; then
msg ":: Device '${dev}' mounted successfully."
else
echo "ERROR; Failed to mount '${dev}'"
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
}
_verify_checksum() {
local _status
cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" || exit 1
sha512sum -c airootfs.sha512 > /tmp/checksum.log 2>&1
_status=$?
cd -- "${OLDPWD}" || exit 1
return "${_status}"
}
_verify_signature() {
local _status
local sigfile="${1}"
cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" || exit 1
gpg --homedir /gpg --status-fd 1 --verify "${sigfile}" 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
_status=$?
cd -- "${OLDPWD}" || exit 1
return ${_status}
}
run_hook() {
[ -z "${arch}" ] && arch="$(uname -m)"
[ -z "${copytoram_size}" ] && copytoram_size="75%"
[ -z "${archisobasedir}" ] && archisobasedir="arch"
[ -z "${dm_snap_prefix}" ] && dm_snap_prefix="arch"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
[ -z "${archisodevice}" ] && archisodevice="/dev/disk/by-label/${archisolabel}"
[ -z "${cow_spacesize}" ] && cow_spacesize="256M"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${cow_label}" ]; then
cow_device="/dev/disk/by-label/${cow_label}"
[ -z "${cow_persistent}" ] && cow_persistent="P"
elif [ -n "${cow_device}" ]; then
[ -z "${cow_persistent}" ] && cow_persistent="P"
else
cow_persistent="N"
fi
[ -z "${cow_flags}" ] && cow_flags="defaults"
[ -z "${cow_directory}" ] && cow_directory="persistent_${archisolabel}/${arch}"
[ -z "${cow_chunksize}" ] && cow_chunksize="8"
# set mount handler for archiso
export mount_handler="archiso_mount_handler"
}
# This function is called normally from init script, but it can be called
# as chain from other mount handlers.
# args: /path/to/newroot
archiso_mount_handler() {
local newroot="${1}"
local sigfile
if ! mountpoint -q "/run/archiso/bootmnt"; then
_mnt_dev "${archisodevice}" "/run/archiso/bootmnt" "-r" "defaults"
if [ "${copytoram}" != "y" ]; then
readlink -f "${archisodevice}" >> /run/archiso/used_block_devices
fi
fi
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${checksum}" = "y" ]; then
if [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sha512" ]; then
msg -n ":: Self-test requested, please wait..."
if _verify_checksum; then
msg "done. Checksum is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
echo "see /tmp/checksum.log for details"
launch_interactive_shell
fi
else
echo "ERROR: checksum=y option specified but ${archisobasedir}/${arch}/airootfs.sha512 not found"
launch_interactive_shell
fi
fi
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${verify}" = "y" ]; then
if [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs.sig" ]; then
sigfile="airootfs.sfs.sig"
elif [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.erofs.sig" ]; then
sigfile="airootfs.erofs.sig"
fi
if [ -n "${sigfile}" ]; then
msg -n ":: Signature verification requested, please wait..."
if _verify_signature "${sigfile}"; then
msg "done. Signature is OK, continue booting."
else
echo "ERROR: one or more files are corrupted"
launch_interactive_shell
fi
else
echo "ERROR: verify=y option specified but GPG signature not found in ${archisobasedir}/${arch}/"
launch_interactive_shell
fi
fi
if [ "${copytoram}" = "y" ]; then
msg ":: Mounting /run/archiso/copytoram (tmpfs) filesystem, size=${copytoram_size}"
mkdir -p /run/archiso/copytoram
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/archiso/copytoram
fi
if [ -n "${cow_device}" ]; then
_mnt_dev "${cow_device}" "/run/archiso/cowspace" "-r" "${cow_flags}"
readlink -f "${cow_device}" >> /run/archiso/used_block_devices
mount -o remount,rw "/run/archiso/cowspace"
else
msg ":: Mounting /run/archiso/cowspace (tmpfs) filesystem, size=${cow_spacesize}..."
mkdir -p /run/archiso/cowspace
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/archiso/cowspace
fi
mkdir -p "/run/archiso/cowspace/${cow_directory}"
chmod 0700 "/run/archiso/cowspace/${cow_directory}"
if [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs" ]; then
_mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs" "/run/archiso/airootfs"
elif [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.erofs" ]; then
_mnt_erofs "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.erofs" "/run/archiso/airootfs"
fi
if [ -f "/run/archiso/airootfs/airootfs.img" ]; then
_mnt_dmsnapshot "/run/archiso/airootfs/airootfs.img" "${newroot}" "/"
else
_mnt_overlayfs "/run/archiso/airootfs" "${newroot}" "/"
fi
if [ "${copytoram}" = "y" ]; then
umount -d /run/archiso/bootmnt
rmdir /run/archiso/bootmnt
fi
}
# vim: set ft=sh:

View File

@ -1,45 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_hook () {
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
[ -n "${img_label}" ] && img_dev="/dev/disk/by-label/${img_label}"
[ -z "${img_flags}" ] && img_flags="defaults"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${img_dev}" ] && [ -n "${img_loop}" ]; then
export mount_handler="archiso_loop_mount_handler"
fi
}
archiso_loop_mount_handler () {
newroot="${1}"
local _dev_loop
msg ":: Setup a loop device from ${img_loop} located at device ${img_dev}"
_mnt_dev "${img_dev}" "/run/archiso/img_dev" "-r" "${img_flags}"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${copytoram}" != "y" ]; then
readlink -f "${img_dev}" >> /run/archiso/used_block_devices
fi
if _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then
export archisodevice="${_dev_loop}"
else
echo "ERROR: Setting loopback device for file '/run/archiso/img_dev/${img_loop}'"
launch_interactive_shell
fi
archiso_mount_handler "${newroot}"
if [ "${copytoram}" = "y" ]; then
losetup -d "${_dev_loop}" 2>/dev/null
umount /run/archiso/img_dev
fi
}
# vim: set ft=sh:

View File

@ -1,82 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_hook () {
# Do *not* declare 'bootif_dev' local! We need it in run_latehook().
local i net_mac bootif_mac
local DNSDOMAIN HOSTNAME IPV4DNS0 IPV4DNS1 ROOTSERVER
# These variables will be parsed from /tmp/net-*.conf generated by ipconfig
# shellcheck disable=SC2034
local DEVICE IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY NISDOMAIN ROOTPATH filename
if [ -n "${ip}" ]; then
if [ -n "${BOOTIF}" ]; then
bootif_mac="${BOOTIF#01-}"
# shellcheck disable=SC2169,SC3060
# ash supports bash-like string replacment
bootif_mac="${bootif_mac//-/:}"
for i in /sys/class/net/*/address; do
read -r net_mac < "${i}"
if [ "${bootif_mac}" = "${net_mac}" ]; then
bootif_dev=${i#/sys/class/net/}
bootif_dev=${bootif_dev%/address}
break
fi
done
if [ "${ip}" = "dhcp" ]; then
ip=":::::${bootif_dev}:dhcp"
else
ip="${ip}::${bootif_dev}"
fi
fi
# setup network and save some values
if ! ipconfig -t 20 "ip=${ip}"; then
echo "ERROR; Failed to configure network"
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
# shellcheck disable=SC1090
# ipconfig generates these files
. /tmp/net-*.conf
export pxeserver="${ROOTSERVER}"
# setup DNS resolver
if [ "${IPV4DNS0}" != "0.0.0.0" ]; then
echo "# added by archiso_pxe_common hook" > /etc/resolv.conf
echo "nameserver ${IPV4DNS0}" >> /etc/resolv.conf
fi
if [ "${IPV4DNS1}" != "0.0.0.0" ]; then
echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf
fi
if [ -n "${DNSDOMAIN}" ]; then
echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
echo "domain ${DNSDOMAIN}" >> /etc/resolv.conf
fi
fi
}
run_latehook () {
if [ -n "${ip}" ]; then
[ -z "${copy_resolvconf}" ] && copy_resolvconf="y"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${copytoram}" = "y" ]; then
for curif in /sys/class/net/*; do
netdev=${curif#/sys/class/net/}
ip addr flush dev "${netdev}"
ip link set "${netdev}" down
done
elif [ "${copy_resolvconf}" != "n" ] && [ -f /etc/resolv.conf ]; then
rm -f /new_root/etc/resolv.conf
cp /etc/resolv.conf /new_root/etc/resolv.conf
fi
fi
}
# vim: set ft=sh:

View File

@ -1,74 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_hook() {
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${ip}" ] && [ -n "${archiso_http_srv}" ]; then
# booting with http is always copy-to-ram, so set here to make sure
# addresses are flushed and interface is set down
export copytoram="y"
archiso_http_srv=$(eval echo "${archiso_http_srv}")
[ -z "${archiso_http_spc}" ] && archiso_http_spc="75%"
export 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}'"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
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}"
local img_type="sfs"
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"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if ! curl -L -f -o /dev/null -s -r 0-0 "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs"; then
if curl -L -f -o /dev/null -s -r 0-0 "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.erofs"; then
img_type="erofs"
fi
fi
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.${img_type}" "/${arch}"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${checksum}" = "y" ]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sha512" "/${arch}"
fi
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ "${verify}" = "y" ]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.${img_type}.sig" "/${arch}"
fi
mkdir -p "/run/archiso/bootmnt"
mount -o bind /run/archiso/httpspace /run/archiso/bootmnt
archiso_mount_handler "${newroot}"
}
# vim: set ft=sh:

View File

@ -1,53 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_earlyhook() {
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${ip}" ] && [ -n "${archiso_nbd_srv}" ]; then
# Module autoloading like with loop devices does not work, doing manually...
modprobe nbd 2> /dev/null
fi
}
run_hook() {
if [ -n "${ip}" ] && [ -n "${archiso_nbd_srv}" ]; then
archiso_nbd_srv=$(eval echo "${archiso_nbd_srv}")
[ -z "${archiso_nbd_name}" ] && archiso_nbd_name="archiso"
export mount_handler="archiso_pxe_nbd_mount_handler"
fi
}
archiso_pxe_nbd_mount_handler () {
newroot="${1}"
msg ":: Waiting for boot device..."
while ! poll_device /dev/nbd0 30; do
echo "ERROR: boot device didn't show up after 30 seconds..."
echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell
done
msg ":: Setup NBD from ${archiso_nbd_srv} at /dev/nbd0"
if [ "${copytoram}" != "n" ]; then
nbd-client "${archiso_nbd_srv}" -N "${archiso_nbd_name}" /dev/nbd0
copytoram="y"
else
nbd-client "${archiso_nbd_srv}" -N "${archiso_nbd_name}" -systemd-mark -persist /dev/nbd0
fi
export archisodevice=/dev/nbd0
archiso_mount_handler "${newroot}"
if [ "${copytoram}" = "y" ]; then
msg ":: Disconnect NBD from ${archiso_nbd_srv} at /dev/nbd0"
nbd-client -d /dev/nbd0
fi
}
# vim: set ft=sh:

View File

@ -1,44 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_hook() {
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${ip}" ] && [ -n "${archiso_nfs_srv}" ]; then
archiso_nfs_srv=$(eval echo "${archiso_nfs_srv}")
export mount_handler="archiso_nfs_mount_handler"
fi
}
archiso_nfs_mount_handler() {
local mount_status
newroot="${1}"
mkdir -p "/run/archiso/bootmnt"
msg ":: Mounting '${archiso_nfs_srv}'"
# shellcheck disable=SC2154
# defined via initcpio's parse_cmdline()
if [ -n "${archiso_nfs_opt}" ]; then
nfsmount -o "${archiso_nfs_opt}" "${archiso_nfs_srv}" "/run/archiso/bootmnt"
mount_status=$?
else
nfsmount "${archiso_nfs_srv}" "/run/archiso/bootmnt"
mount_status=$?
fi
if [ $mount_status -gt 0 ]; then
echo "ERROR: Mounting '${archiso_nfs_srv}'"
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
if [ "${copytoram}" != "n" ]; then
copytoram="y"
fi
archiso_mount_handler "${newroot}"
}
# vim: set ft=sh:

View File

@ -1,10 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
run_cleanuphook() {
rm -rf /usr/lib/modules
cp -ax / /run/initramfs
}
# vim: set ft=sh:

View File

@ -1,36 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_module "cdrom"
add_module "loop"
add_module "dm-snapshot"
add_module "overlay"
add_runscript
add_binary /usr/lib/udev/cdrom_id
add_binary blockdev
add_binary dmsetup
add_binary losetup
add_binary mountpoint
add_binary truncate
add_binary gpg
add_binary grep
if command -v pv > /dev/null 2>&1; then
add_binary pv
else
warning 'pv not found; falling back to cp for copy to RAM'
fi
add_file /usr/lib/udev/rules.d/60-cdrom_id.rules
add_file /usr/lib/udev/rules.d/10-dm.rules
add_file /usr/lib/udev/rules.d/95-dm-notify.rules
add_file /usr/lib/initcpio/udev/11-dm-initramfs.rules /usr/lib/udev/rules.d/11-dm-initramfs.rules
if [[ $ARCHISO_GNUPG_FD ]]; then
mkdir -m 0700 -- "$BUILDROOT/gpg"
gpg --homedir "$BUILDROOT/gpg" --import <& "$ARCHISO_GNUPG_FD"
fi
}

View File

@ -1,30 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_module "amdgpu"
add_module "radeon"
add_module "nouveau"
add_module "i915"
add_module "mgag200"
add_module "via-agp"
add_module "sis-agp"
add_module "intel-agp"
if [[ $(uname -m) == i686 ]]; then
add_module "amd64-agp"
add_module "ati-agp"
add_module "sworks-agp"
add_module "ali-agp"
add_module "amd-k7-agp"
add_module "nvidia-agp"
add_module "efficeon-agp"
fi
}
help() {
cat << HELPEOF
Adds all common KMS drivers to the initramfs image.
HELPEOF
}

View File

@ -1,13 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_runscript
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via loop device.
HELPEOF
}

View File

@ -1,26 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_checked_modules -f "(irda|phy|wimax|wireless|ppp_|plip|pppoe)" "/drivers/net/"
add_runscript
add_binary /usr/lib/initcpio/ipconfig /bin/ipconfig
# Add hosts support files+dns
add_symlink /usr/lib/libnss_files.so.2 "$(readlink /usr/lib/libnss_files.so.2)"
add_binary "$(readlink -f /usr/lib/libnss_files.so.2)"
add_symlink /usr/lib/libnss_dns.so.2 "$(readlink /usr/lib/libnss_dns.so.2)"
add_binary "$(readlink -f /usr/lib/libnss_dns.so.2)"
add_dir /etc
echo "hosts: files dns" > "$BUILDROOT/etc/nsswitch.conf"
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE.
HELPEOF
}

View File

@ -1,17 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_runscript
add_binary curl
add_file "$(readlink -f /etc/ssl/certs/ca-certificates.crt)" /etc/ssl/certs/ca-certificates.crt
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and HTTP.
HELPEOF
}

View File

@ -1,17 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_module "nbd"
add_runscript
add_binary nbd-client
}
help() {
cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and NBD.
HELPEOF
}

View File

@ -1,17 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_module "nfs"
add_runscript
add_binary /usr/lib/initcpio/nfsmount /bin/nfsmount
}
help() {
cat <<HELPEOF
This hook loads the necessary modules for boot via PXE and NFS.
HELPEOF
}

View File

@ -1,20 +0,0 @@
#!/usr/bin/env bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
build() {
add_binary cp
add_runscript
add_file /usr/lib/initcpio/archiso_shutdown /shutdown
}
help() {
cat <<HELPEOF
This hook will create a shutdown initramfs in /run/initramfs
that we can pivot to on shutdown in order to unmount / and
and other mount points, dm-snapshot and loopback devices.
Mostly useful for persistent dm-snapshot.
HELPEOF
}

View File

@ -1,41 +0,0 @@
#!/bin/ash
#
# SPDX-License-Identifier: GPL-3.0-or-later
# /oldroot depends on things inside /oldroot/run/archiso...
mkdir /oldrun
mount -n --move /oldroot/run /oldrun
# Unmount all mounts now.
umount "$(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)"
# Remove all dm-snapshot devices.
dmsetup remove_all
# Remove all loopback devices.
for _lup in $(grep ^/dev/loop /oldrun/archiso/used_block_devices | tac); do
if ! losetup -d -- "${_lup}" 2> /dev/null; then
umount -d -- "${_lup}"
fi
done
# Unmount the space used to store *.cow.
umount /oldrun/archiso/cowspace
# Unmount boot device if needed (no copytoram=y used)
if [ ! -d /oldrun/archiso/copytoram ]; then
if [ -d /oldrun/archiso/img_dev ]; then
umount /oldrun/archiso/img_dev
else
umount /oldrun/archiso/bootmnt
fi
fi
# reboot / poweroff / halt, depending on the argument passed by init
# if something invalid is passed, we halt
case "$1" in
reboot|poweroff|halt) "$1" -f ;;
*) halt -f;;
esac
# vim: set ft=sh:

View File

@ -1,111 +0,0 @@
INDEX
-----
* Alternative boot methods (configs/releng)
* ISO in loopback mode
* ISO in memdisk mode
* Network booting (PXE) [first stage]
* DHCP + TFTP
* DHCP + HTTP
* HTTP/NFS/NBD [second stage]
*** Alternative boot methods (configs/releng)
ISO images names consist of: archlinux-<YYYY>.<MM>.<DD>-x86_64.iso
Where:
<YYYY> Year
<MM> Month
<DD> Day
** ISO in loopback mode.
Note: Described method is for using with GRUB2.
GRUB2 is installed on target media and archlinux-<YYYY>.<MM>.<DD>-x86_64.iso
is at path <TARGET-PATH> on disk <D> and partition <P>,
where filesystem is labeled as <TARGET-FS-LABEL>.
menuentry "Arch Linux (x86_64)" {
set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-x86_64.iso"
loopback loop (hd<D>,<P>)$isofile
linux (loop)/arch/boot/x86_64/vmlinuz img_label=<TARGET-FS-LABEL> img_loop=$isofile
initrd (loop)/arch/boot/x86_64/archiso.img
}
** ISO in memdisk mode.
Note: Described method is for using with SYSLINUX. Anyway MEMDISK from SYSLINUX can work
with other bootloaders.
SYSLINUX is installed on target media and archlinux-<YYYY>.<MM>.<DD>-x86_64.iso
is at path <TARGET-PATH>.
LABEL arch_x64
LINUX memdisk
INITRD /<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-x86_64.iso
APPEND iso
** Network booting (PXE).
All ISOs are ready to act as PXE server, some manual steps are needed
to setup the desired PXE boot mode.
Alternatively it is possible to use an existing PXE server following the same logic.
Note: Setup network first, adjust IP adresses, and respect all slashes "/".
First stage is for loading kernel and initramfs via PXE, two methods described here:
* DHCP + TFTP
Note: All NIC firmwares should support this.
# dnsmasq --port=0 \
--enable-tftp \
--tftp-root=/run/archiso/bootmnt \
--dhcp-range=192.168.0.2,192.168.0.254,86400 \
--dhcp-boot=/arch/boot/syslinux/lpxelinux.0 \
--dhcp-option-force=209,boot/syslinux/archiso.cfg \
--dhcp-option-force=210,/arch/
* DHCP + HTTP
Note: Not all NIC firmware supports HTTP and DNS (if domain name is used).
At least this works with iPXE and gPXE.
# dnsmasq --port=0 \
--dhcp-range=192.168.0.2,192.168.0.254,86400 \
--dhcp-boot=http://192.168.0.7/arch/boot/syslinux/lpxelinux.0 \
--dhcp-option-force=209,boot/syslinux/archiso.cfg \
--dhcp-option-force=210,http://192.168.0.7/arch/
Once the kernel is started from PXE, SquashFS files and other misc files
inside "arch" directory must be loaded (second stage). One of the following
methods can be used to serve the rest of live-medium.
* HTTP
# darkhttpd /run/archiso/bootmnt
* NFS
# echo "/run/archiso/bootmnt 192.168.0.*(ro,no_subtree_check,no_root_squash)" >> /etc/exports
# systemctl start nfs-server.service
* NBD
Note: Adjust ARCH_201703 as needed.
# cat << EOF > /tmp/nbd-server.conf
[generic]
[archiso]
readonly = true
exportname = /dev/disk/by-label/ARCH_201703
EOF
# nbd-server -C /tmp/nbd-server.conf

View File

@ -1,149 +0,0 @@
INDEX
-----
* Boot parameters (initramfs stage)
* hooks/archiso
* hooks/archiso_pxe_common
* hooks/archiso_pxe_nbd
* hooks/archiso_pxe_http
* hooks/archiso_pxe_nfs
* hooks/archiso_loop_mnt
* Boot parameters (configs/releng)
* scripts/choose-mirror
*** Boot parameters (initramfs stage)
** hooks/archiso
* archisolabel= Set the filesystem label where archiso files reside.
Default: (unset)
* archisodevice= Set the device node where archiso medium is located.
Default: "/dev/disk/by-label/${archisolabel}"
* archisobasedir= Set the base directory where all files reside.
Default: "arch"
* copytoram= If set to "y" or just "copytoram" without arguments,
all SquashFS are copied to "RAM". If you add the package
"pv" to the packages.x86_64 it is used to display the copy
progress.
Default: (unset)
* checksum= If set to "y" or just "checksum" without arguments,
performs a self-test of all files inside ${install_dir},
and continue booting if ok.
Default: (unset)
* cow_label= Set the filesystem label where COW file (for dm-snapshot)
or upperdir/workdir files (for overlayfs) must be stored.
Default: (unset)
* cow_device= Like cow_label= but using device node.
Default: (unset) or "/dev/disk/by-label/${cow_label}"
* cow_flags= Set extra mount options, e.g. for btrfs subvolumes.
Default: defaults
* cow_directory= Set a directory inside ${cow_device}.
Default: "/persistent_${archisolabel}/${arch}"
* cow_persistent= Set if snapshot is persistent "P" or non-persistent "N".
Only used for dm-snapshot mode, ignored for overlayfs.
Default: "N" (if no ${cow_device} is used) otherwise "P".
* cow_spacesize= Set the size for COW space (tmpfs). Valid for both
dm-snapshot and overlayfs mode.
The argument is an integer and optional unit.
Units are M,G (powers of 1024).
Default: "256M"
* cow_chunksize= Set chunksize used for dm-snapshot. This is number
of 512 byte blocks to write at once.
Default: "8"
* copytoram_size= Set the size of tmpfs. This space is used for
airootfs.sfs image if copytoram=y.
Size is in bytes (suffix with "k", "m" and "g") or
in percentage of available RAM.
Default: "75%"
* dm_snap_prefix= Set a prefix for dm-snapshot node names.
Only used for dm-snapshot mode, ignored for overlayfs.
Default: "arch"
* arch= Force an architecture type (i686 | x86_64).
Do not set it for normal operations.
Default: (architecture of running kernel)
** hooks/archiso_pxe_common
* ip= This parameter is setup automatically by PXELINUX
when option "SYSAPPEND" is set to 1 or 2 in config.
ip=<client-ip>:<boot-server-ip>:<gw-ip>:<netmask>
Default: (set via PXE server)
* BOOTIF= This parameter is setup automatically by PXELINUX
when option "SYSAPPEND" is set to 2 or 3 in config.
BOOTIF=<hardware-address-of-boot-interface>
Default: (set via PXELINUX)
* copy_resolvconf= Copy /etc/resolv.conf from initramfs to live-enviroment.
Set to "n" to skip them.
Default: "y"
** hooks/archiso_pxe_nbd
* archiso_nbd_name= Set NBD export name used by the server.
Default: archiso
* archiso_nbd_srv= Set an IP address where NBD reside.
If ${pxeserver} is used, PXE IP will be used.
Default: (unset)
** hooks/archiso_pxe_http
* archiso_http_srv= Set an HTTP URL (must end with /) where ${archisobasedir}
is found with all *.sfs files.
In the IP/domain part if ${pxeserver} is used, use PXE IP.
Default: (unset)
* archiso_http_spc= Set the size of tmpfs where *.sfs files are downloaded.
Default: "75%"
** hooks/archiso_pxe_nfs
* archiso_nfs_srv= Set the NFS-IP:/path of the server
In the IP part if ${pxeserver} is used, PXE IP will be used.
Default: (unset)
* archiso_nfs_opt= Set NFS mount options separated by comma.
Default: (unset, see below)
These are the implicit options:
port = as given by server portmap daemon
rsize = 1024
wsize = 1024
timeo = 7
retrans = 3
acregmin = 3
acregmax = 60
acdirmin = 30
acdirmax = 60
flags = hard, nointr, noposix, cto, ac
** hooks/archiso_loop_mnt
* img_label= Set the filesystem label where archiso-image.iso.
Default: (unset)
* img_dev= Device where archiso-image.iso reside.
Default: (unset) or "/dev/disk/by-label/${img_label}"
* img_flags= Set extra mount options, e.g. for btrfs subvolumes.
Default: defaults
* img_loop= Full path where archiso-image.iso is located on ${img_dev}
Default: (unset)
*** Boot parameters (configs/releng)
** scripts/choose-mirror
* mirror= 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.
Default: (unset)
* script= Takes a local file path or a URL to a script file which is
executed from a temporary location after boot. If the
parameter points at a remote file (supported protocols are
http, https and ftp), it will be downloaded before execution.
Default: (unset)