46 lines
1.2 KiB
Bash
Executable File
46 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
: "${ISCSIADM_HOST_STRATEGY:=chroot}"
|
|
: "${ISCSIADM_HOST_PATH:=iscsiadm}"
|
|
|
|
echoerr() { printf "%s\n" "$*" >&2; }
|
|
|
|
P="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/run/current-system/sw/bin"
|
|
|
|
case ${ISCSIADM_HOST_STRATEGY} in
|
|
chroot)
|
|
# https://www.docker.com/blog/road-to-containing-iscsi/
|
|
|
|
if [[ "${ISCSIADM_HOST_PATH}" =~ ^\/ && -f "/host${ISCSIADM_HOST_PATH}" ]]; then
|
|
chroot /host "${ISCSIADM_HOST_PATH}" "${@:1}"
|
|
exit $?
|
|
fi
|
|
|
|
for p in $(echo $P | cut -d ":" -f 1- --output-delimiter=" "); do
|
|
if [[ -f "/host${p}/iscsiadm" ]]; then
|
|
chroot /host "${p}/iscsiadm" "${@:1}"
|
|
exit $?
|
|
fi
|
|
done
|
|
|
|
chroot /host /usr/bin/env -i PATH="${P}" ${ISCSIADM_HOST_PATH} "${@:1}"
|
|
exit $?
|
|
;;
|
|
|
|
nsenter)
|
|
# https://github.com/siderolabs/extensions/issues/38#issuecomment-1125403043
|
|
iscsid_pid=$(pgrep --exact --oldest iscsid)
|
|
if [[ "${iscsid_pid}x" == "x" ]]; then
|
|
echoerr "failed to find iscsid pid for nsenter"
|
|
exit 1
|
|
fi
|
|
nsenter --mount="/proc/${iscsid_pid}/ns/mnt" --net="/proc/${iscsid_pid}/ns/net" -- ${ISCSIADM_HOST_PATH} "${@:1}"
|
|
exit $?
|
|
;;
|
|
|
|
*)
|
|
echoerr "invalid ISCSIADM_HOST_STRATEGY: ${ISCSIADM_HOST_STRATEGY}"
|
|
exit 1
|
|
;;
|
|
esac
|