Page MenuHomeVyOS Platform

Upgrade Kea to 2.4.x
Closed, ResolvedPublicFEATURE REQUEST

Description

Currently, Kea 2.2.x is installed from Debian bookworm repo.

As we work through refining Kea installation in Circinus, we can switch to the latest stable Kea 2.4.x from Debian trixie repo instead to take benefit of bug fixes and improvements in Kea 2.4.x.

Details

Difficulty level
Normal (likely a few hours)
Version
1.5
Why the issue appeared?
Will be filled on close
Is it a breaking change?
Perfectly compatible
Issue type
Package upgrade

Related Objects

StatusSubtypeAssignedTask
ResolvedBUGc-po
OpenBUGNone
ResolvedFEATURE REQUESTsarthurdev
ResolvedFEATURE REQUESTindrajitr

Event Timeline

indrajitr changed Difficulty level from Unknown (require assessment) to Normal (likely a few hours).
indrajitr changed Version from - to 1.5.
indrajitr changed Is it a breaking change? from Unspecified (possibly destroys the router) to Perfectly compatible.
indrajitr changed Issue type from Unspecified (please specify) to Package upgrade.

After update it cannot pass the smoketest

vyos@r4:~$ /usr/libexec/vyos/tests/smoke/cli/test_service_dhcp-server.py
test_dhcp_exclude_in_range (__main__.TestServiceDHCPServer.test_dhcp_exclude_in_range) ... ok
test_dhcp_exclude_not_in_range (__main__.TestServiceDHCPServer.test_dhcp_exclude_not_in_range) ... ok
test_dhcp_failover (__main__.TestServiceDHCPServer.test_dhcp_failover) ... FAIL
test_dhcp_multiple_pools (__main__.TestServiceDHCPServer.test_dhcp_multiple_pools) ... ok
test_dhcp_relay_server (__main__.TestServiceDHCPServer.test_dhcp_relay_server) ... ok
test_dhcp_single_pool_options (__main__.TestServiceDHCPServer.test_dhcp_single_pool_options) ... ok
test_dhcp_single_pool_range (__main__.TestServiceDHCPServer.test_dhcp_single_pool_range) ... ok
test_dhcp_single_pool_static_mapping (__main__.TestServiceDHCPServer.test_dhcp_single_pool_static_mapping) ... ok

======================================================================
FAIL: test_dhcp_failover (__main__.TestServiceDHCPServer.test_dhcp_failover)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/libexec/vyos/tests/smoke/cli/test_service_dhcp-server.py", line 623, in test_dhcp_failover
    self.assertTrue(process_named_running(CTRL_PROCESS_NAME))
AssertionError: None is not true

----------------------------------------------------------------------
Ran 8 tests in 34.208s

FAILED (failures=1)
vyos@r4:~$ sudo nano -c +623 /usr/libexec/vyos/tests/smoke/cli/test_service_dhcp-server.py
vyos@r4:~$ 
vyos@r4:~$ ps ax | grep dhcp
  22293 pts/1    S+     0:00 grep dhcp
vyos@r4:~$ 
vyos@r4:~$ show version all | match dhcp
ii  isc-dhcp-client                      4.4.3-P1-2                       amd64        DHCP client for automatically obtaining an IP address
ii  isc-dhcp-relay                       4.4.3-P1-2                       amd64        ISC DHCP relay daemon
ii  kea-dhcp-ddns-server                 2.4.1-1                          amd64        DHCP Dynamic DNS service
ii  kea-dhcp4-server                     2.4.1-1                          amd64        IPv4 DHCP server
ii  kea-dhcp6-server                     2.4.1-1                          amd64        IPv6 DHCP server
ii  wide-dhcpv6-client                   20080615-23                      amd64        DHCPv6 client for automatic IPv6 hosts configuration
vyos@r4:~$

It binds port 647

set interfaces dummy dum8765 address '192.0.2.1/24'

set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 default-router '192.0.2.1'
set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 domain-name 'vyos.net'
set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 name-server '192.0.2.2'
set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 name-server '192.0.2.3'
set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 range 0 start '192.0.2.10'
set service dhcp-server shared-network-name SMOKE-1 subnet 192.0.2.0/24 range 0 stop '192.0.2.20'

set service dhcp-server failover name 'FLSRV'
set service dhcp-server failover remote '192.0.2.5'
set service dhcp-server failover source-address '192.0.2.1'
set service dhcp-server failover status 'primary'

Check process, as I understand, there also an expected CTRL_PROCESS_NAME = 'kea-ctrl-agent'

vyos@r4# ps ax | grep -i kea | egrep -v grep
  24368 ?        Ssl    0:00 /usr/sbin/kea-dhcp4 -c /run/kea/kea-dhcp4.conf
[edit]

But this process could be started. As 647 already is used. bind: Address already in use

vyos@r4# sudo /usr/sbin/kea-ctrl-agent -c /run/kea/kea-ctrl-agent.conf 
2023-12-22 15:49:52.198 INFO  [kea-ctrl-agent.dctl/24991.140552911800192] DCTL_STARTING Control-agent starting, pid: 24991, version: 2.4.1 (stable)
2023-12-22 15:49:52.198 ERROR [kea-ctrl-agent.dctl/24991.140552911800192] DCTL_PARSER_FAIL : unable to setup TCP acceptor for listening to the incoming HTTP requests: bind: Address already in use
2023-12-22 15:49:52.199 FATAL [kea-ctrl-agent.dctl/24991.140552911800192] DCTL_CONFIG_FILE_LOAD_FAIL Control-agent reason: unable to setup TCP acceptor for listening to the incoming HTTP requests: bind: Address already in use
Service failed: Could Not load configuration file: unable to setup TCP acceptor for listening to the incoming HTTP requests: bind: Address already in use
[edit]
vyos@r4#

config

vyos@r4# sudo cat /run/kea/kea-ctrl-agent.conf 
{
    "Control-agent": {
        "http-host": "192.0.2.1",
        "http-port": 647,
        "control-sockets": {
            "dhcp4": {
                "socket-type": "unix",
                "socket-name": "/run/kea/dhcp4-ctrl-socket"
            }
        }
    }
}[edit]
vyos@r4# 
[edit]
vyos@r4# 
[edit]
vyos@r4# sudo netstat -rulpn | grep 647
[edit]
vyos@r4# sudo netstat -tulpn | grep 647
tcp        0      0 192.0.2.1:647           0.0.0.0:*               LISTEN      24899/kea-dhcp4     
[edit]
vyos@r4#

In the previous version

vyos@r4# ps ax | grep -i kea
   5922 ?        Ssl    0:00 /usr/sbin/kea-ctrl-agent -c /run/kea/kea-ctrl-agent.conf
   5930 ?        Ssl    0:00 /usr/sbin/kea-dhcp4 -c /run/kea/kea-dhcp4.conf
   5988 pts/1    S+     0:00 grep -i kea
[edit]
vyos@r4# run show version all | match kea
ii  kea                                  2.2.0-6                          all          DHCP server [meta]
ii  kea-admin                            2.2.0-6                          amd64        Administration utilities for Kea DHCP server
ii  kea-common                           2.2.0-6                          amd64        Common libraries for the Kea DHCP server
ii  kea-ctrl-agent                       2.2.0-6                          amd64        REST API service for Kea DHCP server
ii  kea-dhcp-ddns-server                 2.2.0-6                          amd64        DHCP Dynamic DNS service
ii  kea-dhcp4-server                     2.2.0-6                          amd64        IPv4 DHCP server
ii  kea-dhcp6-server                     2.2.0-6                          amd64        IPv6 DHCP server
ii  python3-kea-connector                2.2.0-6                          all          Python3 management connector for Kea DHCP server
[edit]
vyos@r4# 


vyos@r4# ls -la /run/kea
total 16
drwxr-xr-x  2 _kea _kea  180 Dec 22 16:40 .
drwxr-xr-x 40 root root 1260 Dec 22 16:35 ..
srwxr-xr-x  1 _kea _kea    0 Dec 22 16:39 dhcp4-ctrl-socket
-rw-------  1 _kea _kea    0 Dec 22 16:39 dhcp4-ctrl-socket.lock
-rw-r--r--  1 _kea _kea  267 Dec 22 16:39 kea-ctrl-agent.conf
-rw-r--r--  1 _kea _kea    5 Dec 22 16:39 kea-ctrl-agent.kea-ctrl-agent.pid
-rw-r--r--  1 root root 2997 Dec 22 16:39 kea-dhcp4.conf
-rw-r--r--  1 _kea _kea    5 Dec 22 16:39 kea-dhcp4.kea-dhcp4.pid
-rw-rw----  1 root root    0 Dec 22 16:40 logger_lockfile
[edit]
vyos@r4#

Also I found this log

Dec 22 16:50:32 r4 systemd[1]: kea-ctrl-agent.service - Kea Control Agent was skipped because of an unmet condition check (ConditionFileNotEmpty=/etc/kea/kea-api-password).