[Kea-users] kea-lfc not using KEA_LOCKFILE_DIR

Razvan Becheriu razvan at isc.org
Tue Jun 11 12:56:40 UTC 2024


 
Hi, 
  
thank you for your effort on this. you might be right: 
  
in memfile_lease_mgr.cc: 
  
    process_.reset(new ProcessSpawn(ProcessSpawn::ASYNC, executable, args)); 
  
in process_spawn.h: 
  
 
    ProcessSpawn(const SpawnMode mode, 
                 const std::string& executable, 
                 const ProcessArgs& args = ProcessArgs(), 
                 const ProcessEnvVars& vars = ProcessEnvVars(), 
                 const bool inherit_env = false); 
  
so by default the lfc is spawned with empty environment, so unless called explicitly by the service, kea spawns it with empty environment. 
  
this is indeed an issue. 
  
opened issue: 
  
https://gitlab.isc.org/isc-projects/kea/-/issues/3450 
  
Regards, 
Razvan 
   
  
 
 
 
 

-----Original Message-----

From: Martijn <kea-users at lists.isc.org>
To: Kea <kea-users at lists.isc.org>
Cc: Martijn <martijnremmen at icloud.com>
Date: Tuesday, 11 June 2024 2:54 PM EEST
Subject: Re: [Kea-users] kea-lfc not using KEA_LOCKFILE_DIR

Thanks for your replies

@Darren, documentation seems quite sparse regarding this, which is why 
I opted to read through the source code (by searching for the error 
string). This indicated that kea-lfc uses the environment variable, if 
it is set. There seems to be no other way to define this configuration 
for kea-lfc.

@Razvan, this indeed seems to be the issue. Upon reading man sudoers:
> By default, the env_reset flag is enabled. This causes commands to 
be executed with a new, minimal environment.

I did check this before writing, but I might have made a syntax error, 
causing bash to interpret the command in the current context instead of 
inside a forked process.
$ export FOO=bar
$ echo $FOO
bar
$ sudo -u _kea echo $FOO
bar

For the record, the correct command seems to be:
$ sudo -u _kea bash -c 'echo $FOO'

I confirmed kea-lfc to be using the specified location for the logger 
lock like this:

$ sudo -u _kea bash
_kea$ export KEA_LOCKFILE_DIR=/run/lock/kea-VRF039
_kea$ echo $KEA_LOCKFILE_DIR
/run/lock/kea-VRF039
_kea$ kea-lfc ...
(no output, it seems to direct logs to /dev/log)
_kea$ strace !!
...
openat(AT_FDCWD, "/run/lock/kea-VRF039/logger_lockfile", 
O_RDWR|O_CREAT, 0660)
...

Anyways, it is still not clear to me why the environment variable set 
in the systemd unit file isn't coming through to the forked kea-lfc 
process. kea-dhcp4 uses it just fine. And I can confirm the variable 
exists in the context of the process by `cat /proc/{kea PID}/environ`, 
which lists KEA_LOCKFILE_DIR with the correct value.

I guess this could either have to do with similar env_reset behaviour 
for forked processes by systemd managed services or the way kea-dhcp4 
spawns kea-lfc.

I will investigate further. Thank you for your assistance.


Regards,
Martijn


On ma, jun 10 2024 at 20:07:14 +00:00:00, Razvan Becheriu 
<razvan at isc.org> wrote:
> Hi,
> 
> some clarifications:
> the -p command line parameter in lfc executable is referring to the 
> pid file used for lease file operations, while the KEA_LOCKFILE_DIR 
> is used for the lockfile used for logging.
> 
> I have tested your scenario and it seems to be working. I guess the 
> problem on your side is that the exported environment variable is not 
> inherited by the root environment when doing sudo -u ...
> 
> the easiest way to pass the environment variable is to add it just 
> before the executable:
> 
> sudo -u ... KEA_LOCKFILE_DIR=/var/lib/kea-VRF039/ /usr/sbin/kea-lfc 
> -4 ...
> 
> to achieve this using services, please consult the man for options 
> regarding environment variables in the service file.
> 
> I hope this helps.
> 
> Razvan
> 
> 
> 
> 
>> From:Darren <darren.ankney at gmail.com>
>> To:Kea <kea-users at lists.isc.org>
>> Date:Monday, 10 June 2024 10:01 PM EEST
>> Subject:Re: [Kea-users] kea-lfc not using KEA_LOCKFILE_DIR
>> 
>> Hi Martijn,
>> 
>> Looking in the ARM, I only find KEA_LOCKFILE_DIR mentioned here:
>> https://kea.readthedocs.io/en/kea-2.4.1/arm/logging.html#logging-during-kea-startup
>> which pertains only to controlling destination of logging while Kea 
>> is
>> starting up (before it has read the configuration file completely).
>> These environment variables don't seem to have anything to do with
>> `kea-lfc`. Can you point to where you saw that `kea-lfc` should
>> respect these environment variables?
>> 
>> Thank you,
>> Darren Ankney
>> 
>> On Tue, Jun 4, 2024 at 10:43 AM Martijn via Kea-users
>> <kea-users at lists.isc.org> wrote:
>> >
>> > Hi,
>> >
>> > We are currently implementing Kea for a multi tenant/VRF scenario. 
>> We do this by running multiple instances of kea-dhcp4 with a systemd 
>> unit template. Because we have multiple Kea instances running, we 
>> need separate folders for storing PIDs, lock files and configs. So 
>> far, this is working fine. The Kea service is running, establishing 
>> HA session and serving requests.
>> >
>> > We just have a problem with the periodic lease file cleaning 
>> performed by kea-lfc, while the lease file cleanup seems to be 
>> successful. It is logging errors relating to using a lock file for 
>> the logger.
>> >
>> > Jun 04 15:49:27 dhcp-01 kea-dhcp4-VRF039[1395]: INFO 
>> DHCPSRV_MEMFILE_LFC_START starting Lease File Cleanup
>> > Jun 04 15:49:27 dhcp-01 kea-dhcp4-VRF039[1395]: INFO 
>> DHCPSRV_MEMFILE_LFC_EXECUTE executing Lease File Cleanup using: 
>> /usr/sbin/kea-lfc -4 -x /var/lib/kea-VRF039/dhcp4.leases.2 -i 
>> /var/lib/kea-VRF039/dhcp4.leases.1 -o 
>> /var/lib/kea-VRF039/dhcp4.leases.output -f 
>> /var/lib/kea-VRF039/dhcp4.leases.completed -p 
>> /var/lib/kea-VRF039/dhcp4.leases.pid -c ignored-path
>> > Jun 04 15:49:28 dhcp-01 kea-dhcp4-VRF039[2571]: Unable to use 
>> interprocess sync lockfile (No such file or directory): 
>> /var/run/kea/logger_lockfile
>> > Jun 04 15:49:28 dhcp-01 kea-dhcp4-VRF039[2571]: Unable to use 
>> interprocess sync lockfile (No such file or directory): 
>> /var/run/kea/logger_lockfile
>> > ---- 6 more identical messages ----
>> >
>> > I have tried manually running the process with the specified 
>> arguments from the log message and setting the KEA_LOCKFILE_DIR 
>> environment variable. However, kea-lfc still doesn’t seem to use 
>> the environment variable.
>> >
>> > $ export KEA_LOCKFILE_DIR=/run/lock/kea-VRF039
>> > $ echo $KEA_LOCKFILE_DIR
>> > /run/lock/kea-VRF039
>> >
>> > $ sudo -u _kea -g _kea \
>> > /usr/sbin/kea-lfc -4 \
>> > -x /var/lib/kea-VRF039/dhcp4.leases.2 \
>> > -i /var/lib/kea-VRF039/dhcp4.leases.1 \
>> > -o /var/lib/kea-VRF039/dhcp4.leases.output \
>> > -f /var/lib/kea-VRF039/dhcp4.leases.completed \
>> > -p /var/lib/kea-VRF039/dhcp4.leases.pid \
>> > -c ignored-path
>> >
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> > Unable to use interprocess sync lockfile (No such file or 
>> directory): /var/run/kea/logger_lockfile
>> >
>> >
>> > I have read through the code and it seems like the environment 
>> variable should be used. So I am not sure what’s going wrong. I 
>> have found an issue on the nixpkgs GitHub which seems to describe 
>> the same issue (kea-lfc not using KEA_LOCKFILE_DIR) 
>> https://github.com/NixOS/nixpkgs/issues/265826
>> >
>> > Is this a known issue or am I doing something wrong?
>> >
>> > Some additional info:
>> > Distro: Ubuntu 24.04 LTS
>> > Using the package from ubuntu APT sources:
>> > Package: kea-dhcp4-server
>> > Version: 2.4.1-3build3
>> >
>> >
>> > Regards,
>> >
>> > Martijn
>> > --
>> > ISC funds the development of this software with paid support 
>> subscriptions. Contact us at https://www.isc.org/contact/ for more 
>> information.
>> >
>> > To unsubscribe visit 
>> https://lists.isc.org/mailman/listinfo/kea-users.
>> >
>> > Kea-users mailing list
>> > Kea-users at lists.isc.org
>> > https://lists.isc.org/mailman/listinfo/kea-users
>> --
>> ISC funds the development of this software with paid support 
>> subscriptions. Contact us at https://www.isc.org/contact/ for more 
>> information.
>> 
>> To unsubscribe visit 
>> https://lists.isc.org/mailman/listinfo/kea-users.
>> 
>> Kea-users mailing list
>> Kea-users at lists.isc.org
>> https://lists.isc.org/mailman/listinfo/kea-users


-- 
ISC funds the development of this software with paid support subscriptions. Contact us at https://www.isc.org/contact/ for more information.

To unsubscribe visit https://lists.isc.org/mailman/listinfo/kea-users.

Kea-users mailing list
Kea-users at lists.isc.org
https://lists.isc.org/mailman/listinfo/kea-users   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.isc.org/pipermail/kea-users/attachments/20240611/8589d156/attachment-0001.htm>


More information about the Kea-users mailing list