Adding linting for initcpio scripts

archiso/initcpio/install/*:
Setting bash shebang for all scripts and making them comform with shellcheck.

archiso/initcpio/{hooks,script}/*:
Setting ash shebang for all scripts and making them comform with shellcheck (for dash, as shellcheck has no ash specific
ruleset). Essentially the ash based scripts should be POSIX compliant as much as possible to have an easier time
writing, debugging and maintaining them.
Ensuring that variables are not treated as options and introducing variable quoting.

.gitlab-ci.yml:
Integrating shellcheck for initcpio scripts.

Closes #32
This commit is contained in:
David Runge 2020-07-11 18:13:20 +02:00
parent 550aca7124
commit e2032db4e7
No known key found for this signature in database
GPG Key ID: 7258734B41C31549
17 changed files with 188 additions and 156 deletions

View File

@ -15,3 +15,7 @@ lint:
configs/releng/airootfs/root/.automated_script.sh configs/releng/airootfs/root/.automated_script.sh
configs/releng/airootfs/usr/local/bin/choose-mirror configs/releng/airootfs/usr/local/bin/choose-mirror
scripts/run_archiso.sh scripts/run_archiso.sh
archiso/initcpio/install/*
- shellcheck -s dash
archiso/initcpio/hooks/*
archiso/initcpio/script/*

View File

@ -1,3 +1,5 @@
#!/bin/ash
# args: source, newroot, mountpoint # args: source, newroot, mountpoint
_mnt_dmsnapshot() { _mnt_dmsnapshot() {
local img="${1}" local img="${1}"
@ -8,19 +10,19 @@ _mnt_dmsnapshot() {
local dm_snap_name="${dm_snap_prefix}_${img_name}" local dm_snap_name="${dm_snap_prefix}_${img_name}"
local ro_dev ro_dev_size rw_dev local ro_dev ro_dev_size rw_dev
ro_dev=$(losetup --find --show --read-only "${img}") ro_dev="$(losetup --find --show --read-only -- "${img}")"
echo ${ro_dev} >> /run/archiso/used_block_devices echo "${ro_dev}" >> /run/archiso/used_block_devices
ro_dev_size=$(blockdev --getsz ${ro_dev}) ro_dev_size="$(blockdev --getsz -- "${ro_dev}")"
if [[ "${cow_persistent}" == "P" ]]; then if [ "${cow_persistent}" = "P" ]; then
if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; 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." msg ":: Found '/run/archiso/cowspace/${cow_directory}/${img_name}.cow', using as persistent."
else else
msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as persistent." msg ":: Creating '/run/archiso/cowspace/${cow_directory}/${img_name}.cow' as persistent."
truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi fi
else else
if [[ -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" ]]; then 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." 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" rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi fi
@ -28,17 +30,18 @@ _mnt_dmsnapshot() {
truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" truncate -s "${cow_spacesize}" "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi fi
rw_dev=$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow") rw_dev="$(losetup --find --show "/run/archiso/cowspace/${cow_directory}/${img_name}.cow")"
echo ${rw_dev} >> /run/archiso/used_block_devices 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}" dmsetup create "${dm_snap_name}" --table \
"0 ${ro_dev_size} snapshot ${ro_dev} ${rw_dev} ${cow_persistent} ${cow_chunksize}"
if [[ "${cow_persistent}" != "P" ]]; then if [ "${cow_persistent}" != "P" ]; then
rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow" rm -f "/run/archiso/cowspace/${cow_directory}/${img_name}.cow"
fi fi
_mnt_dev "/dev/mapper/${dm_snap_name}" "${newroot}${mnt}" "-w" "defaults" _mnt_dev "/dev/mapper/${dm_snap_name}" "${newroot}${mnt}" "-w" "defaults"
echo $(readlink -f /dev/mapper/${dm_snap_name}) >> /run/archiso/used_block_devices readlink -f "/dev/mapper/${dm_snap_name}" >> /run/archiso/used_block_devices
} }
# args: source, newroot, mountpoint # args: source, newroot, mountpoint
@ -46,8 +49,10 @@ _mnt_overlayfs() {
local src="${1}" local src="${1}"
local newroot="${2}" local newroot="${2}"
local mnt="${3}" local mnt="${3}"
mkdir -p /run/archiso/cowspace/${cow_directory}/upperdir /run/archiso/cowspace/${cow_directory}/workdir 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}" mount -t overlay -o \
"lowerdir=${src},upperdir=/run/archiso/cowspace/${cow_directory}/upperdir,workdir=/run/archiso/cowspace/${cow_directory}/workdir" \
airootfs "${newroot}${mnt}"
} }
@ -58,17 +63,18 @@ _mnt_sfs() {
local img_fullname="${img##*/}" local img_fullname="${img##*/}"
local sfs_dev local sfs_dev
if [[ "${copytoram}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [ "${copytoram}" = "y" ]; then
msg -n ":: Copying squashfs image to RAM..." msg -n ":: Copying squashfs image to RAM..."
if ! cp "${img}" "/run/archiso/copytoram/${img_fullname}" ; then if ! cp -- "${img}" "/run/archiso/copytoram/${img_fullname}" ; then
echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'" echo "ERROR: while copy '${img}' to '/run/archiso/copytoram/${img_fullname}'"
launch_interactive_shell launch_interactive_shell
fi fi
img="/run/archiso/copytoram/${img_fullname}" img="/run/archiso/copytoram/${img_fullname}"
msg "done." msg "done."
fi fi
sfs_dev=$(losetup --find --show --read-only "${img}") sfs_dev="$(losetup --find --show --read-only -- "${img}")"
echo ${sfs_dev} >> /run/archiso/used_block_devices echo "${sfs_dev}" >> /run/archiso/used_block_devices
_mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults" _mnt_dev "${sfs_dev}" "${mnt}" "-r" "defaults"
} }
@ -102,45 +108,46 @@ _mnt_dev() {
_verify_checksum() { _verify_checksum() {
local _status local _status
cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" || exit 1
sha512sum -c airootfs.sha512 > /tmp/checksum.log 2>&1 sha512sum -c airootfs.sha512 > /tmp/checksum.log 2>&1
_status=$? _status=$?
cd "${OLDPWD}" cd -- "${OLDPWD}" || exit 1
return ${_status} return "${_status}"
} }
_verify_signature() { _verify_signature() {
local _status local _status
cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" cd "/run/archiso/bootmnt/${archisobasedir}/${arch}" || exit 1
gpg --homedir /gpg --status-fd 1 --verify airootfs.sfs.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG' gpg --homedir /gpg --status-fd 1 --verify airootfs.sfs.sig 2>/dev/null | grep -qE '^\[GNUPG:\] GOODSIG'
_status=$? _status=$?
cd "${OLDPWD}" cd -- "${OLDPWD}" || exit 1
return ${_status} return ${_status}
} }
run_hook() { run_hook() {
[[ -z "${arch}" ]] && arch="$(uname -m)" [ -z "${arch}" ] && arch="$(uname -m)"
[[ -z "${copytoram_size}" ]] && copytoram_size="75%" [ -z "${copytoram_size}" ] && copytoram_size="75%"
[[ -z "${archisobasedir}" ]] && archisobasedir="arch" [ -z "${archisobasedir}" ] && archisobasedir="arch"
[[ -z "${dm_snap_prefix}" ]] && dm_snap_prefix="arch" [ -z "${dm_snap_prefix}" ] && dm_snap_prefix="arch"
[[ -z "${archisodevice}" ]] && archisodevice="/dev/disk/by-label/${archisolabel}" # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
[[ -z "${cow_spacesize}" ]] && cow_spacesize="256M" [ -z "${archisodevice}" ] && archisodevice="/dev/disk/by-label/${archisolabel}"
[ -z "${cow_spacesize}" ] && cow_spacesize="256M"
if [[ -n "${cow_label}" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [ -n "${cow_label}" ]; then
cow_device="/dev/disk/by-label/${cow_label}" cow_device="/dev/disk/by-label/${cow_label}"
[[ -z "${cow_persistent}" ]] && cow_persistent="P" [ -z "${cow_persistent}" ] && cow_persistent="P"
elif [[ -n "${cow_device}" ]]; then elif [ -n "${cow_device}" ]; then
[[ -z "${cow_persistent}" ]] && cow_persistent="P" [ -z "${cow_persistent}" ] && cow_persistent="P"
else else
cow_persistent="N" cow_persistent="N"
fi fi
[[ -z "${cow_flags}" ]] && cow_flags="defaults" [ -z "${cow_flags}" ] && cow_flags="defaults"
[[ -z "${cow_directory}" ]] && cow_directory="persistent_${archisolabel}/${arch}" [ -z "${cow_directory}" ] && cow_directory="persistent_${archisolabel}/${arch}"
[[ -z "${cow_chunksize}" ]] && cow_chunksize="8" [ -z "${cow_chunksize}" ] && cow_chunksize="8"
# set mount handler for archiso # set mount handler for archiso
mount_handler="archiso_mount_handler" export mount_handler="archiso_mount_handler"
} }
# This function is called normally from init script, but it can be called # This function is called normally from init script, but it can be called
@ -151,13 +158,14 @@ archiso_mount_handler() {
if ! mountpoint -q "/run/archiso/bootmnt"; then if ! mountpoint -q "/run/archiso/bootmnt"; then
_mnt_dev "${archisodevice}" "/run/archiso/bootmnt" "-r" "defaults" _mnt_dev "${archisodevice}" "/run/archiso/bootmnt" "-r" "defaults"
if [[ "${copytoram}" != "y" ]]; then if [ "${copytoram}" != "y" ]; then
echo $(readlink -f ${archisodevice}) >> /run/archiso/used_block_devices readlink -f "${archisodevice}" >> /run/archiso/used_block_devices
fi fi
fi fi
if [[ "${checksum}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [[ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sha512" ]]; then if [ "${checksum}" = "y" ]; then
if [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sha512" ]; then
msg -n ":: Self-test requested, please wait..." msg -n ":: Self-test requested, please wait..."
if _verify_checksum; then if _verify_checksum; then
msg "done. Checksum is OK, continue booting." msg "done. Checksum is OK, continue booting."
@ -172,8 +180,9 @@ archiso_mount_handler() {
fi fi
fi fi
if [[ "${verify}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [[ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs.sig" ]]; then if [ "${verify}" = "y" ]; then
if [ -f "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs.sig" ]; then
msg -n ":: Signature verification requested, please wait..." msg -n ":: Signature verification requested, please wait..."
if _verify_signature; then if _verify_signature; then
msg "done. Signature is OK, continue booting." msg "done. Signature is OK, continue booting."
@ -187,33 +196,34 @@ archiso_mount_handler() {
fi fi
fi fi
if [[ "${copytoram}" == "y" ]]; then if [ "${copytoram}" = "y" ]; then
msg ":: Mounting /run/archiso/copytoram (tmpfs) filesystem, size=${copytoram_size}" msg ":: Mounting /run/archiso/copytoram (tmpfs) filesystem, size=${copytoram_size}"
mkdir -p /run/archiso/copytoram mkdir -p /run/archiso/copytoram
mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/archiso/copytoram mount -t tmpfs -o "size=${copytoram_size}",mode=0755 copytoram /run/archiso/copytoram
fi fi
if [[ -n "${cow_device}" ]]; then if [ -n "${cow_device}" ]; then
_mnt_dev "${cow_device}" "/run/archiso/cowspace" "-r" "${cow_flags}" _mnt_dev "${cow_device}" "/run/archiso/cowspace" "-r" "${cow_flags}"
echo $(readlink -f ${cow_device}) >> /run/archiso/used_block_devices readlink -f "${cow_device}" >> /run/archiso/used_block_devices
mount -o remount,rw "/run/archiso/cowspace" mount -o remount,rw "/run/archiso/cowspace"
else else
msg ":: Mounting /run/archiso/cowspace (tmpfs) filesystem, size=${cow_spacesize}..." msg ":: Mounting /run/archiso/cowspace (tmpfs) filesystem, size=${cow_spacesize}..."
mkdir -p /run/archiso/cowspace mkdir -p /run/archiso/cowspace
mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/archiso/cowspace mount -t tmpfs -o "size=${cow_spacesize}",mode=0755 cowspace /run/archiso/cowspace
fi fi
mkdir -p -m 0700 "/run/archiso/cowspace/${cow_directory}" mkdir -p "/run/archiso/cowspace/${cow_directory}"
chmod 0700 "/run/archiso/cowspace/${cow_directory}"
_mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs" "/run/archiso/sfs/airootfs" _mnt_sfs "/run/archiso/bootmnt/${archisobasedir}/${arch}/airootfs.sfs" "/run/archiso/sfs/airootfs"
if [[ -f "/run/archiso/sfs/airootfs/airootfs.img" ]]; then if [ -f "/run/archiso/sfs/airootfs/airootfs.img" ]; then
_mnt_dmsnapshot "/run/archiso/sfs/airootfs/airootfs.img" "${newroot}" "/" _mnt_dmsnapshot "/run/archiso/sfs/airootfs/airootfs.img" "${newroot}" "/"
else else
_mnt_overlayfs "/run/archiso/sfs/airootfs" "${newroot}" "/" _mnt_overlayfs "/run/archiso/sfs/airootfs" "${newroot}" "/"
fi fi
if [[ "${copytoram}" == "y" ]]; then if [ "${copytoram}" = "y" ]; then
umount -d /run/archiso/bootmnt umount -d /run/archiso/bootmnt
fi fi
} }
# vim:ft=sh:ts=4:sw=4:et: # vim: set ft=sh:

View File

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

View File

@ -1,55 +1,55 @@
# vim: set ft=sh: #!/bin/ash
run_hook () { run_hook () {
# Do *not* declare 'bootif_dev' local! We need it in run_latehook(). # Do *not* declare 'bootif_dev' local! We need it in run_latehook().
local i net_mac bootif_mac local i net_mac bootif_mac
local DNSDOMAIN HOSTNAME IPV4DNS0 IPV4DNS1 ROOTSERVER
# These variables will be parsed from /tmp/net-*.conf generated by ipconfig # These variables will be parsed from /tmp/net-*.conf generated by ipconfig
local DEVICE # shellcheck disable=SC2034
local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1 local DEVICE IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY NISDOMAIN ROOTPATH filename
local HOSTNAME DNSDOMAIN NISDOMAIN ROOTSERVER ROOTPATH
local filename
# /tmp/net-*.conf
if [[ -n "${ip}" ]]; then if [ -n "${ip}" ]; then
if [[ -n "${BOOTIF}" ]]; then if [ -n "${BOOTIF}" ]; then
bootif_mac=${BOOTIF#01-} bootif_mac="${BOOTIF#01-}"
bootif_mac=${bootif_mac//-/:} # shellcheck disable=SC2169 # ash supports bash-like string replacment
bootif_mac="${bootif_mac//-/:}"
for i in /sys/class/net/*/address; do for i in /sys/class/net/*/address; do
read net_mac < ${i} read -r net_mac < "${i}"
if [[ "${bootif_mac}" == "${net_mac}" ]]; then if [ "${bootif_mac}" = "${net_mac}" ]; then
bootif_dev=${i#/sys/class/net/} bootif_dev=${i#/sys/class/net/}
bootif_dev=${bootif_dev%/address} bootif_dev=${bootif_dev%/address}
break break
fi fi
done done
if [[ "${ip}" == "dhcp" ]]; then if [ "${ip}" = "dhcp" ]; then
ip=":::::${bootif_dev}:dhcp" ip=":::::${bootif_dev}:dhcp"
else else
ip="${ip}::${bootif_dev}" ip="${ip}::${bootif_dev}"
fi fi
fi fi
# setup network and save some values # setup network and save some values
if ! ipconfig -t 20 "ip=${ip}"; then if ! ipconfig -t 20 "ip=${ip}"; then
echo "ERROR; Failed to configure network" echo "ERROR; Failed to configure network"
echo " Falling back to interactive prompt" echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished" echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell launch_interactive_shell
fi fi
# shellcheck disable=SC1090 # ipconfig generates these files
. /tmp/net-*.conf . /tmp/net-*.conf
pxeserver=${ROOTSERVER} export pxeserver="${ROOTSERVER}"
# setup DNS resolver # setup DNS resolver
if [[ "${IPV4DNS0}" != "0.0.0.0" ]]; then if [ "${IPV4DNS0}" != "0.0.0.0" ]; then
echo "# added by archiso_pxe_common hook" > /etc/resolv.conf echo "# added by archiso_pxe_common hook" > /etc/resolv.conf
echo "nameserver ${IPV4DNS0}" >> /etc/resolv.conf echo "nameserver ${IPV4DNS0}" >> /etc/resolv.conf
fi fi
if [[ "${IPV4DNS1}" != "0.0.0.0" ]]; then if [ "${IPV4DNS1}" != "0.0.0.0" ]; then
echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf echo "nameserver ${IPV4DNS1}" >> /etc/resolv.conf
fi fi
if [[ -n "${DNSDOMAIN}" ]]; then if [ -n "${DNSDOMAIN}" ]; then
echo "search ${DNSDOMAIN}" >> /etc/resolv.conf echo "search ${DNSDOMAIN}" >> /etc/resolv.conf
echo "domain ${DNSDOMAIN}" >> /etc/resolv.conf echo "domain ${DNSDOMAIN}" >> /etc/resolv.conf
fi fi
@ -57,16 +57,19 @@ run_hook () {
} }
run_latehook () { run_latehook () {
if [[ -n "${ip}" ]]; then if [ -n "${ip}" ]; then
[[ -z "${copy_resolvconf}" ]] && copy_resolvconf="y" [ -z "${copy_resolvconf}" ] && copy_resolvconf="y"
if [[ "${copytoram}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [[ -n "${bootif_dev}" ]]; then if [ "${copytoram}" = "y" ]; then
if [ -n "${bootif_dev}" ]; then
ip addr flush dev "${bootif_dev}" ip addr flush dev "${bootif_dev}"
ip link set "${bootif_dev}" down ip link set "${bootif_dev}" down
fi fi
elif [[ "${copy_resolvconf}" != "n" && -f /etc/resolv.conf ]]; then elif [ "${copy_resolvconf}" != "n" ] && [ -f /etc/resolv.conf ]; then
cp /etc/resolv.conf /new_root/etc/resolv.conf cp /etc/resolv.conf /new_root/etc/resolv.conf
fi fi
fi fi
} }
# vim: set ft=sh:

View File

@ -1,16 +1,17 @@
# vim: set ft=sh: #!/bin/ash
run_hook() { run_hook() {
if [[ -n "${ip}" && -n "${archiso_http_srv}" ]]; then # 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 # booting with http is always copy-to-ram, so set here to make sure
# addresses are flushed and interface is set down # addresses are flushed and interface is set down
copytoram="y" export copytoram="y"
archiso_http_srv=$(eval echo ${archiso_http_srv}) archiso_http_srv=$(eval echo "${archiso_http_srv}")
[[ -z "${archiso_http_spc}" ]] && archiso_http_spc="75%" [ -z "${archiso_http_spc}" ] && archiso_http_spc="75%"
mount_handler="archiso_pxe_http_mount_handler" export mount_handler="archiso_pxe_http_mount_handler"
fi fi
} }
@ -23,6 +24,7 @@ _curl_get() {
local _dst="${2}" local _dst="${2}"
msg ":: Downloading '${_url}'" 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 if ! curl -L -f -o "/run/archiso/httpspace/${archisobasedir}${_dst}/${_url##*/}" --create-dirs "${_url}"; then
echo "ERROR: Downloading '${_url}'" echo "ERROR: Downloading '${_url}'"
echo " Falling back to interactive prompt" echo " Falling back to interactive prompt"
@ -38,17 +40,22 @@ archiso_pxe_http_mount_handler () {
mkdir -p "/run/archiso/httpspace" mkdir -p "/run/archiso/httpspace"
mount -t tmpfs -o size="${archiso_http_spc}",mode=0755 httpspace "/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()
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs" "/${arch}" _curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs" "/${arch}"
if [[ "${checksum}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [ "${checksum}" = "y" ]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sha512" "/${arch}" _curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sha512" "/${arch}"
fi fi
if [[ "${verify}" == "y" ]]; then # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if [ "${verify}" = "y" ]; then
_curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs.sig" "/${arch}" _curl_get "${archiso_http_srv}${archisobasedir}/${arch}/airootfs.sfs.sig" "/${arch}"
fi fi
mkdir -p "/run/archiso/bootmnt" mkdir -p "/run/archiso/bootmnt"
mount -o bind /run/archiso/httpspace /run/archiso/bootmnt mount -o bind /run/archiso/httpspace /run/archiso/bootmnt
archiso_mount_handler ${newroot} archiso_mount_handler "${newroot}"
} }
# vim: set ft=sh:

View File

@ -1,19 +1,20 @@
# vim: set ft=sh: #!/bin/ash
run_earlyhook() { run_earlyhook() {
if [[ -n "${ip}" && -n "${archiso_nbd_srv}" ]]; then # 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... # Module autoloading like with loop devices does not work, doing manually...
modprobe nbd 2> /dev/null modprobe nbd 2> /dev/null
fi fi
} }
run_hook() { run_hook() {
if [[ -n "${ip}" && -n "${archiso_nbd_srv}" ]]; then if [ -n "${ip}" ] && [ -n "${archiso_nbd_srv}" ]; then
archiso_nbd_srv=$(eval echo ${archiso_nbd_srv}) archiso_nbd_srv=$(eval echo "${archiso_nbd_srv}")
[[ -z "${archiso_nbd_name}" ]] && archiso_nbd_name="archiso" [ -z "${archiso_nbd_name}" ] && archiso_nbd_name="archiso"
mount_handler="archiso_pxe_nbd_mount_handler" export mount_handler="archiso_pxe_nbd_mount_handler"
fi fi
} }
@ -29,19 +30,21 @@ archiso_pxe_nbd_mount_handler () {
done done
msg ":: Setup NBD from ${archiso_nbd_srv} at /dev/nbd0" msg ":: Setup NBD from ${archiso_nbd_srv} at /dev/nbd0"
if [[ "${copytoram}" != "n" ]]; then if [ "${copytoram}" != "n" ]; then
nbd-client ${archiso_nbd_srv} -N ${archiso_nbd_name} /dev/nbd0 nbd-client "${archiso_nbd_srv}" -N "${archiso_nbd_name}" /dev/nbd0
copytoram="y" copytoram="y"
else else
nbd-client ${archiso_nbd_srv} -N ${archiso_nbd_name} -systemd-mark -persist /dev/nbd0 nbd-client "${archiso_nbd_srv}" -N "${archiso_nbd_name}" -systemd-mark -persist /dev/nbd0
fi fi
archisodevice=/dev/nbd0 export archisodevice=/dev/nbd0
archiso_mount_handler ${newroot} archiso_mount_handler "${newroot}"
if [[ "${copytoram}" == "y" ]]; then if [ "${copytoram}" = "y" ]; then
msg ":: Disconnect NBD from ${archiso_nbd_srv} at /dev/nbd0" msg ":: Disconnect NBD from ${archiso_nbd_srv} at /dev/nbd0"
nbd-client -d /dev/nbd0 nbd-client -d /dev/nbd0
fi fi
} }
# vim: set ft=sh:

View File

@ -1,30 +1,40 @@
# vim: set ft=sh: #!/bin/ash
run_hook() { run_hook() {
if [[ -n "${ip}" && -n "${archiso_nfs_srv}" ]]; then # 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}) archiso_nfs_srv=$(eval echo "${archiso_nfs_srv}")
[[ -n "${archiso_nfs_opt}" ]] && archiso_nfs_opt="-o ${archiso_nfs_opt}"
mount_handler="archiso_nfs_mount_handler" export mount_handler="archiso_nfs_mount_handler"
fi fi
} }
archiso_nfs_mount_handler() { archiso_nfs_mount_handler() {
local mount_status
newroot="${1}" newroot="${1}"
mkdir -p "/run/archiso/bootmnt" mkdir -p "/run/archiso/bootmnt"
msg ":: Mounting '${archiso_nfs_srv}'" msg ":: Mounting '${archiso_nfs_srv}'"
# Do not put "${archiso_nfs_opt}" nfsmount fails! # shellcheck disable=SC2154 # defined via initcpio's parse_cmdline()
if ! nfsmount ${archiso_nfs_opt} "${archiso_nfs_srv}" "/run/archiso/bootmnt"; then 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 "ERROR: Mounting '${archiso_nfs_srv}'"
echo " Falling back to interactive prompt" echo " Falling back to interactive prompt"
echo " You can try to fix the problem manually, log out when you are finished" echo " You can try to fix the problem manually, log out when you are finished"
launch_interactive_shell launch_interactive_shell
fi fi
if [[ "${copytoram}" != "n" ]]; then if [ "${copytoram}" != "n" ]; then
copytoram="y" copytoram="y"
fi fi
archiso_mount_handler ${newroot} archiso_mount_handler "${newroot}"
} }
# vim: set ft=sh:

View File

@ -1,6 +1,8 @@
#!/bin/ash
run_cleanuphook() { run_cleanuphook() {
rm -rf /usr/lib/modules rm -rf /usr/lib/modules
cp -ax / /run/initramfs cp -ax / /run/initramfs
} }
# vim: set ft=sh ts=4 sw=4 et: # vim: set ft=sh:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_module "cdrom" add_module "cdrom"
@ -22,9 +22,7 @@ build() {
add_file /usr/lib/udev/rules.d/95-dm-notify.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 add_file /usr/lib/initcpio/udev/11-dm-initramfs.rules /usr/lib/udev/rules.d/11-dm-initramfs.rules
if [[ $ARCHISO_GNUPG_FD ]]; then if [[ $ARCHISO_GNUPG_FD ]]; then
mkdir -p "$BUILDROOT$dest"/gpg mkdir -p "$BUILDROOT/gpg"
gpg --homedir "$BUILDROOT$dest"/gpg --import <&$ARCHISO_GNUPG_FD gpg --homedir "$BUILDROOT/gpg" --import <& "$ARCHISO_GNUPG_FD"
fi fi
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_module "amdgpu" add_module "amdgpu"

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_runscript add_runscript
@ -9,5 +9,3 @@ cat<<HELPEOF
This hook loads the necessary modules for boot via loop device. This hook loads the necessary modules for boot via loop device.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_checked_modules -f "(irda|phy|wimax|wireless|ppp_|plip|pppoe)" "/drivers/net/" add_checked_modules -f "(irda|phy|wimax|wireless|ppp_|plip|pppoe)" "/drivers/net/"
@ -8,13 +8,13 @@ build() {
add_binary /usr/lib/initcpio/ipconfig /bin/ipconfig add_binary /usr/lib/initcpio/ipconfig /bin/ipconfig
# Add hosts support files+dns # Add hosts support files+dns
add_symlink /usr/lib/libnss_files.so.2 $(readlink /usr/lib/libnss_files.so.2) 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_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_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_binary "$(readlink -f /usr/lib/libnss_dns.so.2)"
add_dir /etc add_dir /etc
echo "hosts: files dns" > $BUILDROOT/etc/nsswitch.conf echo "hosts: files dns" > "$BUILDROOT/etc/nsswitch.conf"
} }
help() { help() {
@ -22,5 +22,3 @@ cat<<HELPEOF
This hook loads the necessary modules for boot via PXE. This hook loads the necessary modules for boot via PXE.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,11 +1,11 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_runscript add_runscript
add_binary curl add_binary curl
add_file $(readlink -f /etc/ssl/certs/ca-certificates.crt) /etc/ssl/certs/ca-certificates.crt add_file "$(readlink -f /etc/ssl/certs/ca-certificates.crt)" /etc/ssl/certs/ca-certificates.crt
} }
help() { help() {
@ -13,5 +13,3 @@ cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and HTTP. This hook loads the necessary modules for boot via PXE and HTTP.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_module "nbd" add_module "nbd"
@ -13,5 +13,3 @@ cat<<HELPEOF
This hook loads the necessary modules for boot via PXE and NBD. This hook loads the necessary modules for boot via PXE and NBD.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_module "nfs" add_module "nfs"
@ -13,5 +13,3 @@ help() {
This hook loads the necessary modules for boot via PXE and NFS. This hook loads the necessary modules for boot via PXE and NFS.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/usr/bin/env bash
build() { build() {
add_binary cp add_binary cp
@ -12,9 +12,7 @@ help() {
cat <<HELPEOF cat <<HELPEOF
This hook will create a shutdown initramfs in /run/initramfs This hook will create a shutdown initramfs in /run/initramfs
that we can pivot to on shutdown in order to unmount / and that we can pivot to on shutdown in order to unmount / and
and others mount points, dm-snapshot devices and loopback devices. and other mount points, dm-snapshot and loopback devices.
Mostly usefull for dm-snapshot persistent. Mostly useful for persistent dm-snapshot.
HELPEOF HELPEOF
} }
# vim: set ft=sh ts=4 sw=4 et:

View File

@ -5,15 +5,15 @@ mkdir /oldrun
mount -n --move /oldroot/run /oldrun mount -n --move /oldroot/run /oldrun
# Unmount all mounts now. # Unmount all mounts now.
umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r) umount "$(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)"
# Remove all dm-snapshot devices. # Remove all dm-snapshot devices.
dmsetup remove_all dmsetup remove_all
# Remove all loopback devices. # Remove all loopback devices.
for _lup in $(grep ^/dev/loop /oldrun/archiso/used_block_devices | tac); do for _lup in $(grep ^/dev/loop /oldrun/archiso/used_block_devices | tac); do
if ! losetup -d ${_lup} 2> /dev/null; then if ! losetup -d -- "${_lup}" 2> /dev/null; then
umount -d ${_lup} umount -d -- "${_lup}"
fi fi
done done
@ -21,8 +21,8 @@ done
umount /oldrun/archiso/cowspace umount /oldrun/archiso/cowspace
# Unmount boot device if needed (no copytoram=y used) # Unmount boot device if needed (no copytoram=y used)
if [[ ! -d /oldrun/archiso/copytoram ]]; then if [ ! -d /oldrun/archiso/copytoram ]; then
if [[ -d /oldrun/archiso/img_dev ]]; then if [ -d /oldrun/archiso/img_dev ]; then
umount /oldrun/archiso/img_dev umount /oldrun/archiso/img_dev
else else
umount /oldrun/archiso/bootmnt umount /oldrun/archiso/bootmnt
@ -35,3 +35,5 @@ case "$1" in
reboot|poweroff|halt) "$1" -f ;; reboot|poweroff|halt) "$1" -f ;;
*) halt -f;; *) halt -f;;
esac esac
# vim: set ft=sh: