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.
To configure dhcpcd, you need to first install
the network service script,
/usr/lib/services/dhcpcd
included in the blfs-bootscripts-20230101 package
(as user root
):
make install-service-dhcpcd
the network service script /usr/lib/services/dhcpcd
contained in bootscripts up to blfs-bootscripts-20191204 is
not compatible with latest dhcpcd, as the location of the pidfile
changed.
To work around this, issue the following command:
sed -i "s;/run/dhcpcd-;/run/dhcpcd/;g" /lib/services/dhcpcd
The default for dhcpcd is to set the hostname
and mtu. It also overwrites /etc/resolv.conf
and /etc/ntp.conf
. These
modifications to system files are done by hooks which are stored in
/usr/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.
Finally, as the root
user
create the /etc/sysconfig/ifconfig.eth0
configuration file using the following commands. Adjust appropriately
for additional interfaces:
cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
ONBOOT="yes"
IFACE="eth0"
SERVICE="dhcpcd"
DHCP_START="-b -q -h ''<insert appropriate start options here>
"
DHCP_STOP="-k <insert additional stop options here>
"
EOF
For more information on the appropriate DHCP_START
and
DHCP_STOP
values, examine the man page for
dhcpcd.
Although not usual, it is possible that you need
to configure dhcpcd to use a fixed ip. Here,
we give an example. As the
root
user create the
/etc/sysconfig/ifconfig.eth0
configuration file
using the following commands. Adjust appropriately for additional
interfaces and for the actual ip and router you need:
cat > /etc/sysconfig/ifconfig.eth0 << "EOF"
ONBOOT="yes"
IFACE="eth0"
SERVICE="dhcpcd"
DHCP_START="-b -q -S ip_address=192.168.0.10/24 -S routers=192.168.0.1"
DHCP_STOP="-k"
EOF
You can either use DNS servers in
/etc/resolv.conf
from another system, your
preferred servers, or just the example
/etc/resolv.conf.head
file below as is:
cat > /etc/resolv.conf.head << "EOF"
# OpenDNS servers
nameserver 208.67.222.222
nameserver 208.67.220.220
EOF