-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tails isn't PXE-booting; missing net modules #31
Comments
follow these steps to create a
#!/usr/bin/bash
# ... break=premount
# ... break=init
# ... debug
#
# sudo unsquashfs -d /tmp/test -f /srv/nfs/tails-x64/live/filesystem.squashfs
# $ ls /tmp/test/bin/live-*
# $ ls -r /tmp/test/lib/live/*
# 2024-02-27 for tails 6.0, renamed to all-net-blocklist.conf
# 2024-02-27 for tails 6.0, updated path from /lib/modules/ to /usr/lib/modules/
# 2023-09-11 skip network de-init on boot option "break=init" to keep network alive for debugging
# 2021-11-07 /conf/net_drivers.tar.xz, /conf/conf.d/zzzz-hotfix-pxe, /etc/live/boot/zzzz-hotfix-pxe
# requires:
# squashfs-tools (unsquashfs)
# initramfs-tools (cpio)
# xz-utils (xz)
# location, where to store temporary files
TMP=/tmp/tails-net
# full filename of the filesystem.squashfs from tails ISO
SRC=/srv/nfs/tails-x64/live/filesystem.squashfs
# full filename of the hotfix-pxe image
DST=/srv/nfs/tails-x64-hotfix-pxe.cpio.xz
if [[ -z "${TMP}" ]] || [[ -z "${SRC}" ]] || [[ -z "${DST}" ]]; then
echo "ERROR: undefined variable"
return -1
fi
if ! [[ -d "$(dirname ${TMP:?})" ]] && ! [[ -r "${SRC:?}" ]] && ! [[ -d "$(dirname ${DST:?})" ]]; then
echo "ERROR: wrong file or folder"
return -2
fi
# kernel version of tails
KVER=$(basename $(unsquashfs -l "${SRC:?}" -e /usr/lib/modules/ | grep /usr/lib/modules/ | head -n 1))
(( $? != 0 )) && return -4
# test if kernel version is correct
if [[ -n "${KVER}" ]]; then
echo "INFO: KVER='${KVER:?}'"
else
echo "ERROR: unknown kernel version"
return -3
fi
do_modules() {
# extract missing network kernel drivers modules from tails
sudo unsquashfs \
-d "${TMP:?}" \
-f "${SRC:?}" \
-e "/usr/lib/modules/${KVER:?}/kernel/drivers/net/phy" \
-e "/usr/lib/modules/${KVER:?}/kernel/drivers/net/ethernet" \
;
(( $? != 0 )) && exit -4
# compress missing network kernel drivers modules to file
[[ -e "${TMP:?}/conf/" ]] || sudo mkdir -p "${TMP:?}/conf/"
sudo tar -ravf "${TMP:?}/conf/net_drivers.tar.xz" -C "${TMP:?}" "usr/lib"
sudo rm -rf "${TMP:?}/usr/lib"
}
do_patch_top() {
# add hotfix for pxe boot to initrd image
[[ -e "${TMP:?}/conf/conf.d/" ]] || sudo mkdir -p "${TMP:?}/conf/conf.d/"
cat << EOF | sudo tee "${TMP:?}/conf/conf.d/zzzz-hotfix-pxe" &>/dev/null
#!/usr/bin/sh
# check if we dealing with same kernel version
if [ "\$(uname -r)" != "${KVER:?}" ]; then
. /scripts/functions
log_failure_msg "wrong kernel version. '\$(uname -r)'!='${KVER:?}'"
panic "please visit: https://github.com/beta-tester/RPi-PXE-Server/issues/31"
fi
# comment out all blacklist entries
sed "s/^install/# install/g" -i /etc/modprobe.d/all-net-blocklist.conf
# replace wget script by busybox, for normal behavior
mv /usr/bin/wget /usr/bin/wget.bak
ln -sf /usr/bin/busybox /usr/bin/wget
# replace depmod, for normal behavior
mv /usr/sbin/depmod /usr/sbin/depmod.bak
ln -sf /usr/bin/kmod /usr/sbin/depmod
# excract the compressed drivers in place
tar -xf "/conf/net_drivers.tar.xz" -C /
# rebulid dependencies for added network kernel drivers modules
depmod -b /usr
#
echo '/scripts/init-bottom/zzzz-hotfix-pxe' | tee -a /scripts/init-bottom/ORDER
EOF
(( $? != 0 )) && return -4
sudo chmod +x "${TMP:?}/conf/conf.d/zzzz-hotfix-pxe"
(( $? != 0 )) && return -4
}
do_patch_bottom() {
[[ -e "${TMP:?}/scripts/init-bottom/" ]] || sudo mkdir -p "${TMP:?}/scripts/init-bottom/"
cat << EOF | sudo tee "${TMP:?}/scripts/init-bottom/zzzz-hotfix-pxe" &>/dev/null
#!/usr/bin/sh
patch_bottom()
{
if ! [ -n "\$break" ]; then
# hotfix-pxe for issue with network initialisation in tails
local path_device
for path_device in /sys/class/net/*; do
local name_device
name_device=\$(basename \$path_device)
if [ "\$name_device" != "lo" ]; then
# set network devices down
ip link set \$name_device down
local path_module
path_module=\$(readlink \$path_device/device/driver/module)
if [ -n "\$path_module" ]; then
# remove used network drivers
local name_module
name_module=\$(basename \$path_module)
modprobe -r \$name_module
fi
fi
done
fi
}
patch_bottom
EOF
(( $? != 0 )) && return -4
sudo chmod +x "${TMP:?}/scripts/init-bottom/zzzz-hotfix-pxe"
(( $? != 0 )) && return -4
}
do_initrd() {
# create an initrd image to overlay at boot time
sudo rm "${DST:?}"
cd "${TMP:?}"
(( $? != 0 )) && return -4
find . -type f -print0 | cpio --null --create --verbose --format=newc \
| xz --compress --extreme --check=crc32 | sudo tee "${DST:?}" &>/dev/null
(( $? != 0 )) && return -4
cd -
}
do_cleanup() {
# clean up temporary files
sudo rm -rf "${TMP:?}"
(( $? != 0 )) && return -4
}
do_modules
do_patch_top
do_patch_bottom
do_initrd
do_cleanup
echo done. |
procedure not working for tails 4.8. |
with tails 4.9, same issue as with tails 4.8. |
masking a tails service did the trick. tested with tails 4.15.1 |
tails 4.24doesn't pxe boot anymore. shows same behavior as booting without net driver patch. |
fix for tails 4.24: |
This patch stopped working starting I think was Tails 6.10. |
for me it is working.
the kernel version of Tails 5.16.1 is 6.1.0-11-amd64 |
i changed the script to keep network alive for debugging, if any " |
script stopped working with tails 6.0 |
fix for tails 6.0:
fixed the script above |
Tails 4.5 isn't PXE booting, because of missing network modules.
/lib/modules/5.4.0-4-amd64/kernel/net/ folder is missing ethernet and phy modules.
The text was updated successfully, but these errors were encountered: