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.
Development versions of BLFS may not build or run some packages properly if LFS or dependencies have been updated since the most recent stable versions of the books.
Download (HTTP): https://github.com/NetworkConfiguration/dhcpcd/releases/download/v10.0.5/dhcpcd-10.0.5.tar.xz
Download MD5 sum: 7dfc470037a59fc48e4de2d65ebdf52a
Download size: 264 KB
Estimated disk space required: 3.0 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
LLVM-17.0.1 (with Clang), ntp-4.2.8p17, chronyd, and ypbind
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
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
Alternatively, 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
: This switch sets a
better location for the dhcpcd internal libraries.
--dbdir=/var/lib/dhcpcd
: This switch adjusts the
database directory because the default directory,
/var/db
, is not FHS-compliant.
--runstatedir=/run
: This switch sets the runtime
state directory because the default
/var/run
is a symbolic
link to /run
, and using
/var/run
is deprecated.
--disable-privsep
: This switch disables privilege
separation, which is the default in dhcpcd. This switch is not used in
the build configuration where privilege separation is used.
--privsepuser=dhcpcd
: This switch sets the
privilege separation user in the build configuration where privilege
escalation is used.
--with-hook=...
: You can optionally install more hooks,
for example to install some configuration files such as
ntp.conf
. A set of hooks can be found 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-20230816
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
/usr/lib/dhcpcd/dhcpcd-hooks
. You can change this behavior
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.