You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While following the instructions on this page to create workload images, I observe that, after I create cb_nullworkload image, if I run vmattach tinyvm twice, the two vms created have the same IP addresses from DHCP server, because:
Ubuntu 22.04 system uses systemd-networkd service to get IP address from DHCP server. It sends machine id (/etc/machine-id) by default.
cb_nullworkload image has /etc/machine-id. Since there isn't a mechanism to remove or recreate the machine id when creating new vms, all vms created from the image have the same machine id and hence the same IP addresses.
I considered a few approaches:
Use cloud-init to recreate machine-id on vm first start-up. Unfortuantely it's impossible. See the discussion here
Use cloud-init to change the default behavior of systemd-networkd. cloud-init (netplan actually) has a dhcp-identifier directive. If its value is 'mac', cloud-init adds "ClientIdentifier=mac" line to systemd-networkd config file and changes its defualt behavior. So I used this approach to create initial image and thought systemd-networkd config should persist. Unfortunately that's not the case. As cbtool also uses cloud-init when creating vm and doesn't provide network-config file, it looks like that's considered a config change by cloud-init and new systemd-networkd config file is generated which doesn't include the "ClientIdentifier=mac" line.
So I ended up removing machine-id manually after running vmcapture:
It turns out that install script has this support already. See its --cleanupimageid option. Below is the code in lib/auxiliary/dependencies.py which implements the option:
I'm reopening the issue to request a small change. When user runs "vmattach check:<base_image>::" command, CBTOOL should add "--cleanupimageid" option to the generated command. Example:
While following the instructions on this page to create workload images, I observe that, after I create cb_nullworkload image, if I run
vmattach tinyvm
twice, the two vms created have the same IP addresses from DHCP server, because:Ubuntu 22.04 system uses systemd-networkd service to get IP address from DHCP server. It sends machine id (/etc/machine-id) by default.
cb_nullworkload image has /etc/machine-id. Since there isn't a mechanism to remove or recreate the machine id when creating new vms, all vms created from the image have the same machine id and hence the same IP addresses.
I considered a few approaches:
Use cloud-init to recreate machine-id on vm first start-up. Unfortuantely it's impossible. See the discussion here
Use cloud-init to change the default behavior of systemd-networkd. cloud-init (netplan actually) has a
dhcp-identifier
directive. If its value is 'mac', cloud-init adds "ClientIdentifier=mac" line to systemd-networkd config file and changes its defualt behavior. So I used this approach to create initial image and thought systemd-networkd config should persist. Unfortunately that's not the case. As cbtool also uses cloud-init when creating vm and doesn't provide network-config file, it looks like that's considered a config change by cloud-init and new systemd-networkd config file is generated which doesn't include the "ClientIdentifier=mac" line.So I ended up removing machine-id manually after running vmcapture:
# guestmount -a cb_nullworkload -i --rw /mnt
# truncate -s 0 /mnt/etc/machine-id /mnt/var/lib/dbus/machine-id
# guestunmount /mnt
(The command suggested here perhpas works too).
I wonder if it's possible to run the "truncate -s0 ..." command (or perhaps just "echo -n >...") in CBTOOL before it captures vm image?
The text was updated successfully, but these errors were encountered: