systemrescue-zfs/patches/archiso-v43-03-fix-pxeboot-multiple-interfaces.patch

61 lines
2.3 KiB
Diff

diff --git a/archiso/initcpio/hooks/archiso_pxe_common b/archiso/initcpio/hooks/archiso_pxe_common
index 2380ca3..fa2a6a0 100644
--- a/archiso/initcpio/hooks/archiso_pxe_common
+++ b/archiso/initcpio/hooks/archiso_pxe_common
@@ -3,6 +3,8 @@
run_hook () {
# Do *not* declare 'bootif_dev' local! We need it in run_latehook().
local i net_mac bootif_mac
+ local ifdevlist
+ local ipcfgres
# These variables will be parsed from /tmp/net-*.conf generated by ipconfig
local DEVICE
local IPV4ADDR IPV4BROADCAST IPV4NETMASK IPV4GATEWAY IPV4DNS0 IPV4DNS1
@@ -19,18 +21,40 @@ run_hook () {
if [[ "${bootif_mac}" == "${net_mac}" ]]; then
bootif_dev=${i#/sys/class/net/}
bootif_dev=${bootif_dev%/address}
+ ifdevlist="${bootif_dev}"
break
fi
done
- if [[ "${ip}" == "dhcp" ]]; then
- ip=":::::${bootif_dev}:dhcp"
- else
- ip="${ip}::${bootif_dev}"
- fi
+ else
+ for i in /sys/class/net/*; do
+ bootif_dev=${i#/sys/class/net/}
+ if [[ "${bootif_dev}" != 'lo' ]]; then
+ ifdevlist="${ifdevlist} ${bootif_dev}"
+ fi
+ done
fi
+ for bootif_dev in ${ifdevlist}
+ do
+ if [[ "${ip}" == "dhcp" ]]; then
+ ipopt=":::::${bootif_dev}:dhcp"
+ else
+ ipopt="${ip}::${bootif_dev}"
+ fi
+
+ # setup network and save some values
+ echo "Attempting to configure network interface ${bootif_dev} ..."
+ ipconfig -t 20 "ip=${ipopt}"
+ ipcfgres=$?
+ if [[ ${ipcfgres} -eq 0 ]]; then
+ echo "SUCCESS: Network interface ${bootif_dev} has been successfully configured"
+ sleep 1
+ break
+ fi
+ done
+
# setup network and save some values
- if ! ipconfig -t 20 "ip=${ip}"; then
+ if [[ ${ipcfgres} -ne 0 ]]; 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"