dhcpcd is an implementation of the DHCP client specified in RFC2131. A DHCP client is useful for connecting your computer to a network which uses DHCP to assign network addresses. dhcpcd strives to be a fully featured, yet very lightweight DHCP client.
This package is known to build and work properly using an LFS 11.3 platform.
Download (HTTP): https://roy.marples.name/downloads/dhcpcd/dhcpcd-9.4.1.tar.xz
Download MD5 sum: 2b2f46648bc96979f96127f0e0e07d9b
Download size: 251 KB
Estimated disk space required: 3.6 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
LLVM-15.0.7 (with Clang), ntp-4.2.8p15, chronyd, and ypbind
User Notes: https://wiki.linuxfromscratch.org/blfs/wiki/dhcpcd
Recent releases of dhcpcd optionally support privilege separation. As the practical security benefits of this are unclear for a program like dhcpcd and the setup is more complicated, the book currently defaults to disable it.
If you however would like to use privilege separation, additional
installation steps are necessary to set up the proper environment.
Issue the following commands as the root
user:
install -v -m700 -d /var/lib/dhcpcd && groupadd -g 52 dhcpcd && useradd -c 'dhcpcd PrivSep' \ -d /var/lib/dhcpcd \ -g dhcpcd \ -s /bin/false \ -u 52 dhcpcd && chown -v dhcpcd:dhcpcd /var/lib/dhcpcd
Fix a runtime error caused by a change in glibc-2.36:
sed '/Deny everything else/i SECCOMP_ALLOW(__NR_getrandom),' \ -i src/privsep-linux.c
Build dhcpcd without privilege separation by running the following command:
./configure --prefix=/usr \ --sysconfdir=/etc \ --libexecdir=/usr/lib/dhcpcd \ --dbdir=/var/lib/dhcpcd \ --runstatedir=/run \ --disable-privsep && make
Build dhcpcd with privilege separation by running the following commands:
./configure --prefix=/usr \ --sysconfdir=/etc \ --libexecdir=/usr/lib/dhcpcd \ --dbdir=/var/lib/dhcpcd \ --runstatedir=/run \ --privsepuser=dhcpcd && make
To test the results, issue: make test.
Now, as the root
user:
make install
--libexecdir=/usr/lib/dhcpcd
: Set a
more proper location for dhcpcd internal libraries.
--dbdir=/var/lib/dhcpcd
:
The default /var/db
is not
FHS-compliant
--runstatedir=/run
: The
default /var/run
is a symbolic link
to /run
.
--with-hook=...
: You can optionally
install more hooks, for example to install some configuration files
such as ntp.conf
. The set of hooks is
in the dhcpcd-hooks
directory in the
build tree.
--disable-privsep
: Do not
use privilege separation, which is the default.
--privsepuser=dhcpcd
: Use
this unprivileged user in a privilege separation setup.
--with-hook=...
: You can optionally
install more hooks, for example to install some configuration files
such as ntp.conf
. The set of hooks is
in the dhcpcd-hooks
directory in the
build tree.
If you want to configure network interfaces at boot using
dhcpcd, you need to
install the systemd unit included in blfs-systemd-units-20220720 package by
running the following command as the root
user:
make install-dhcpcd
The default
behavior of dhcpcd is to set the hostname
and the mtu. It also overwrites /etc/resolv.conf
and /etc/ntp.conf
. These modifications to system
configuration files are done by hooks which are stored in
/lib/dhcpcd/dhcpcd-hooks
. Set up
dhcpcd by
removing or adding hooks from/to that directory. The execution
of hooks can be disabled by using the --nohook
(-C
)
command line option or by the nohook
option in the /etc/dhcpcd.conf
file.
Make sure that you disable the systemd-networkd service or configure it not to manage the interfaces you want to manage with dhcpcd.
At this point you can test if dhcpcd is behaving as expected
by running the following command as the root
user:
systemctl start dhcpcd@eth0
To start dhcpcd on
a specific interface at boot, enable the previously installed
systemd unit by running the following command as the root
user:
systemctl enable dhcpcd@eth0
Replace eth0
with the
actual interface name.