Paul Sutor
2019-Jul-17 21:51 UTC
[Pkg-xen-devel] Bug#932338: xen-utils-common: vif-nat fails to find backend/vif/x/x/domain
Package: xen-utils-common Version: 4.11.1+92-g6c33308a8d-2 Severity: normal Dear Maintainer, This started when I upgraded from Debian 9 (Xen 4.8, Kernel 4.9) to Debian 10 (Xen 4.11, Kernel 4.19). It still occurred after attempting a boot with the old Xen 4.8/Kernel 4.9. Line 88 of vif-nat attempts to assign a "hostname" variable using xenstore_read. This key "backend/vif/x/x/domain" does not exist in xenstore, so the script errors out, aborting the domU creation. Upon further inspection, this "hostname" is only used when DHCP is enabled, so I commented out line 88 for my personal use. The script still errored after that, but I believe that is a separate issue and I am submitting a separate bug for it. I believe I even saw these "unable to read backend/vif/x/x/domain" messages on the console while shutting down the dom0 for the first reboot after installing Debian 10. I looked into various things that might cause access restrictions, but it seems the real cause is just that key "backend/vif/x/x/domain" not existing (I don't know what's supposed to put those keys into that part of the xenstore), and the script trying to read it. Thanks for your attention, Paul -- System Information: Debian Release: 10.0 APT prefers stable APT policy: (500, 'stable') Architecture: amd64 (x86_64) Kernel: Linux 4.19.0-5-amd64 (SMP w/32 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages xen-utils-common depends on: ii libc6 2.28-10 ii libxenstore3.0 4.11.1+92-g6c33308a8d-2 ii lsb-base 10.2019051400 ii python 2.7.16-1 ii ucf 3.0038+nmu1 ii udev 241-5 ii xenstore-utils 4.11.1+92-g6c33308a8d-2 xen-utils-common recommends no packages. Versions of packages xen-utils-common suggests: pn xen-doc <none> -- Configuration Files: /etc/default/xendomains changed: XENDOMAINS_RESTORE=false XENDOMAINS_AUTO=/etc/xen/auto XENDOMAINS_STOP_MAXWAIT=300 /etc/xen/scripts/vif-nat changed: dir=$(dirname "$0") . "$dir/vif-common.sh" if [ -f /etc/dhcpd.conf ] then dhcp=${dhcp:-yes} else dhcp=${dhcp:-no} fi if [ "$dhcp" != 'no' ] then dhcpd_conf_file=$(find_dhcpd_conf_file) dhcpd_init_file=$(find_dhcpd_init_file) dhcpd_arg_file=$(find_dhcpd_arg_file) if [ -z "$dhcpd_conf_file" ] || [ -z "$dhcpd_init_file" ] || [ -z "$dhcpd_arg_file" ] then echo 'Failed to find dhcpd configuration or init or args file.' >&2 exit 1 fi fi domid=$(xenstore_read "$XENBUS_PATH/frontend-id") vifid=$(xenstore_read "$XENBUS_PATH/handle") vifid=$(( $vifid + 1 )) ip_from_dom() { local domid1=$(( $domid / 256 )) local domid2=$(( $domid % 256 )) echo "10.$domid1.$domid2.$vifid/16" } routing_ip() { echo $(echo $1 | awk -F. '{print $1"."$2"."$3"."$4 + 127}') } dotted_quad() { echo\ $(( ($1 & 0xFF000000) >> 24))\ .$(( ($1 & 0x00FF0000) >> 16))\ .$(( ($1 & 0x0000FF00) >> 8 ))\ .$(( $1 & 0x000000FF )) } if [ "$ip" = "" ] then ip=$(ip_from_dom) fi router_ip=$(routing_ip "$ip") vif_ip=`echo ${ip} | awk -F/ '{print $1}'` if [ "$vifid" != "1" ] then hostname="$hostname-$vifid" fi dhcparg_remove_entry() { local tmpfile=$(mktemp) sed -e "s/${dev} //" "$dhcpd_arg_file" >"$tmpfile" if diff "$tmpfile" "$dhcpd_arg_file" >/dev/null then rm "$tmpfile" else mv "$tmpfile" "$dhcpd_arg_file" fi } dhcparg_add_entry() { dhcparg_remove_entry local tmpfile=$(mktemp) # handle Red Hat, SUSE, and Debian styles, with or without quotes sed -e 's/^DHCPDARGS="*\([^"]*\)"*/DHCPDARGS="\1'"${dev} "'"/' \ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file" sed -e 's/^DHCPD_INTERFACE="*\([^"]*\)"*/DHCPD_INTERFACE="\1'"${dev} "'"/' \ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file" sed -e 's/^INTERFACES="*\([^"]*\)"*/INTERFACES="\1'"${dev} "'"/' \ "$dhcpd_arg_file" >"$tmpfile" && mv "$tmpfile" "$dhcpd_arg_file" rm -f "$tmpfile" } dhcp_remove_entry() { local tmpfile=$(mktemp) grep -v "host $hostname" "$dhcpd_conf_file" >"$tmpfile" if diff "$tmpfile" "$dhcpd_conf_file" >/dev/null then rm "$tmpfile" else mv "$tmpfile" "$dhcpd_conf_file" fi dhcparg_remove_entry } dhcp_up() { claim_lock "vif-nat-dhcp" dhcp_remove_entry mac=$(xenstore_read "$XENBUS_PATH/mac") echo >>"$dhcpd_conf_file" \ "host $hostname { hardware ethernet $mac; fixed-address $vif_ip; option routers $router_ip; option host-name \"$hostname\"; }" dhcparg_add_entry release_lock "vif-nat-dhcp" "$dhcpd_init_file" restart || true } dhcp_down() { claim_lock "vif-nat-dhcp" dhcp_remove_entry release_lock "vif-nat-dhcp" "$dhcpd_init_file" restart || true # We need to ignore failure because # ISC dhcpd 3 borks if there is nothing # for it to do, which is the case if # the outgoing interface is not # configured to offer leases and there # are no vifs. } case "$command" in online) if ip route | grep -q "dev ${dev}" then log debug "${dev} already up" exit 0 fi do_or_die ip link set dev "${dev}" up arp on do_or_die ip addr add "$router_ip" dev "${dev}" do_or_die ip route add "$vif_ip" dev "${dev}" src "$router_ip" echo 1 >/proc/sys/net/ipv4/conf/${dev}/proxy_arp [ "$dhcp" != 'no' ] && dhcp_up ;; offline) [ "$dhcp" != 'no' ] && dhcp_down do_without_error ifconfig "${dev}" down ;; esac echo hi handle_iptable call_hooks vif post log debug "Successful vif-nat $command for ${dev}." if [ "$command" = "online" ] then success fi /etc/xen/xend-config.sxp changed: (dom0-min-mem 640) (enable-dom0-ballooning yes) (total_available_memory 0) (dom0-cpus 0) (vncpasswd '') /etc/xen/xl.conf changed: vif.default.script="vif-nat" -- no debconf information