e2032db4e7
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
76 lines
2.6 KiB
Bash
76 lines
2.6 KiB
Bash
#!/bin/ash
|
|
|
|
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 # 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
|
|
if [ -n "${bootif_dev}" ]; then
|
|
ip addr flush dev "${bootif_dev}"
|
|
ip link set "${bootif_dev}" down
|
|
fi
|
|
elif [ "${copy_resolvconf}" != "n" ] && [ -f /etc/resolv.conf ]; then
|
|
cp /etc/resolv.conf /new_root/etc/resolv.conf
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# vim: set ft=sh:
|