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.
![[Note]](../images/note.png) 
          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.2.4/dhcpcd-10.2.4.tar.xz
Download MD5 sum: ce62bc6caf02421ac40135dbb92377b5
Download size: 272 KB
Estimated disk space required: 3.2 MB (with tests)
Estimated build time: less than 0.1 SBU (with tests)
LLVM-21.1.2 (with Clang), ntp-4.2.8p18, 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.
        
            To configure dhcpcd, you need to first
            install the network service script, /usr/lib/services/dhcpcd included in the
            blfs-bootscripts-20250225 package (as the
            root user):
          
make install-service-dhcpcd
![[Note]](../images/note.png) 
            
               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. 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.
            
             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 $HOSTNAME <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