diff --git a/grml_build/package_config/SIPWISE b/grml_build/package_config/SIPWISE index 60d866c..cfed7bb 100644 --- a/grml_build/package_config/SIPWISE +++ b/grml_build/package_config/SIPWISE @@ -34,6 +34,7 @@ iputils-ping isc-dhcp-client isomd5sum iw +jq ldnsutils libnss-myhostname linux-image-amd64 diff --git a/templates/scripts/includes/deployment.sh b/templates/scripts/includes/deployment.sh index 5f3ba77..3b9ce7e 100755 --- a/templates/scripts/includes/deployment.sh +++ b/templates/scripts/includes/deployment.sh @@ -1540,7 +1540,7 @@ set_deploy_status "checkBootParam" declare -a PARAMS=() CMD_LINE=$(cat /proc/cmdline) -PARAMS+=(${CMD_LINE}) +IFS=" " read -r -a PARAMS <<< "${CMD_LINE}" PARAMS+=("$@") for param in "${PARAMS[@]}" ; do @@ -1892,17 +1892,18 @@ if [[ -n "${IP_LINE}" ]]; then fi fi -# Get current IP +# Get current IP information, programmatically with jq(1) +ensure_packages_installed 'jq' ## try ipv4 -INSTALL_DEV=$(ip -4 r | awk '/default/ {print $5; exit}') +INSTALL_DEV=$(ip -4 -j route show | jq -r '.[] | select(.dst == "default") | .dev') if [[ -z "${INSTALL_DEV}" ]]; then ## try ipv6 - INSTALL_DEV=$(ip -6 r | awk '/default/ {print $3; exit}') - INSTALL_IP=$(ip -6 addr show "${INSTALL_DEV}" | sed -rn 's/^[ ]+inet6 ([a-fA-F0-9:]+)\/.*$/\1/p') + INSTALL_DEV=$(ip -6 -j route show | jq -r '.[] | select(.dst == "default") | .gateway') + INSTALL_IP=$(ip -6 -j addr show dev "${INSTALL_DEV}" | jq -r '.[0].addr_info[0].local') else - external_ip_data=( $( ip -4 addr show "${INSTALL_DEV}" | sed -rn 's/^[ ]+inet ([0-9]+(\.[0-9]+){3})\/([0-9]+).*$/\1 \3/p' ) ) - INSTALL_IP="${external_ip_data[0]}" - current_netmask="$( cdr2mask "${external_ip_data[1]}" )" + INSTALL_IP=$(ip -4 -j addr show dev "${INSTALL_DEV}" | jq -r '.[0].addr_info[0].local') + install_ip_netmask=$(ip -4 -j addr show "${INSTALL_DEV}" | jq -r '.[0].addr_info[0].prefixlen') + current_netmask="$( cdr2mask "${install_ip_netmask}" )" EXTERNAL_NETMASK="${EXTERNAL_NETMASK:-${current_netmask}}" unset external_ip_data current_netmask GW="$(ip route show dev "${INSTALL_DEV}" | awk '/^default via/ {print $3; exit}')" @@ -2272,7 +2273,7 @@ grml-chroot "${TARGET}" apt-get --purge -y autoremove # it's necessary to use chroot instead of grml-chroot in variable=$() calls # as grml-chroot also prints "Writing /etc/debian_chroot ..." line # which breaks output -removed_packages=( $(chroot "${TARGET}" dpkg --list | awk '/^rc/ {print $2}') ) +mapfile -t removed_packages < <(chroot "${TARGET}" dpkg --list | awk '/^rc/ {print $2}') if [ ${#removed_packages[@]} -ne 0 ]; then grml-chroot "${TARGET}" dpkg --purge "${removed_packages[@]}" fi @@ -2483,6 +2484,7 @@ EOF if [ -f "${TARGET}/etc/profile.d/puppet-agent.sh" ] ; then echo "Exporting Puppet 4 new PATH (otherwise /opt/puppetlabs/bin/puppet is not found)" + # shellcheck disable=SC1091 source "${TARGET}/etc/profile.d/puppet-agent.sh" fi