Re: Dynamic hostname in rc.conf (for bhyve VMs)

From: Guido Falsi <mad_at_madpilot.net>
Date: Sat, 17 Sep 2022 16:35:26 UTC
On 10/09/22 19:22, Tomoaki AOKI wrote:
> On Sat, 10 Sep 2022 10:52:01 +0200
> Guido Falsi <mad@madpilot.net> wrote:
> 
>> Hi,
>>
>> Since rc.conf is just a shell script I'd like to be able to set hostname
>> dynamically.
>>
>> This is bhyve related because what I'd like to do is pass an hostname to
>> VMs via the -e option to bhyveload(8), and then read it in rc.conf,
>> maybe via sysctl to set the hostname accordingly.
>>
>> By the way I'm using vm-bhyve [1] to manage my VMs. its configuration
>> files are also shell scripts, so I was planning to hack some simple
>> logic there, host side, to derive the hostname from filesystem (useful
>> for cloned VMs).
>>
>> Could not find any example or documentation about any step of this.
>>
>> Is this even possible with current tools? I'm open to hacky solutions to
>> start with, then maybe refine them.
>>
>>
>> I'm trying to do this because I'm using a local dnsmasq that exposes DNS
>> with the hostnames provided by VMs, but clones get the same naem as the
>> machien they're cloned from and mask those in this small internal DNS.
>> If each clone could provide it's different name it would be much better.
>>
>>
>> Thanks in advance for any help/suggestions.
>>
>>
>> [1] https://github.com/churchers/vm-bhyve
>>
>> -- 
>> Guido Falsi <mad@madpilot.net>
>>
> 
> IIUC, and if you obtain IP addresses of each VMs via DHCP,
> just keeping hostname on rc.conf would be suffice.
> 
> /etc/rc.d/hostname has a functionality to get hostname by
> hostname=`/bin/kenv dhcp.host-name`, meaning hostname is set using
> what DHCP server supplied, if NOT in a jail.
> 
> See the script for details.
> 

Hi!

Sorry for the delay in replying.

Thanks for your suggestion of using kenv, I completely overlooked that! 
It was the missing piece for me.

In fact my basic idea almost works perfectly once I use kenv to read 
variables passed by bhyveload.

Only problem is that the vm configuration file used bu vm-bhyve is not a 
shell script but treated as a key pair. So i can't do logic in there.

I ended up creating a very simple local patch to vm-bhyve here that does 
what I need:

https://github.com/madpilot78/vm-bhyve/tree/bhyveload_pass_vm_hostname

I think I will propose the patch upstream too, maybe with some cleanup.

So thanks again!

-- 
Guido Falsi <mad@madpilot.net>