%general-entities; ]> dhcpcd-&dhcpcd-version; dhcpcd Introduction to dhcpcd 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. &lfs121_checked; Package Information Download (HTTP): Download (FTP): Download MD5 sum: &dhcpcd-md5sum; Download size: &dhcpcd-size; Estimated disk space required: &dhcpcd-buildsize; Estimated build time: &dhcpcd-time; dhcpcd Dependencies Optional (with Clang), , chronyd, and ypbind Privilege separation 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 Installation of 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 Command Explanations --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. : 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. Configuring dhcpcd Config Files /etc/dhcpcd.conf /etc/dhcpcd/dhcpcd.conf General Configuration Information To configure dhcpcd, you need to first install the network service script, /usr/lib/services/dhcpcd included in the package (as user root): dhcpcd (service script) make install-service-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. You can change this behavior by removing or adding hooks from/to that directory. The execution of hooks can be disabled by using the () command line option or by the 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: /etc/sysconfig/ifconfig.eth0 (dhcpcd) 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. /etc/resolv.conf Configuration Information: fixed ip 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: /etc/sysconfig/ifconfig.eth0 (dhcpcd) 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 General Configuration Information If you want to configure network interfaces at boot using dhcpcd, you need to install the systemd unit included in package by running the following command as the root user: make install-dhcpcd 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 () command line option or by the option in the /etc/dhcpcd.conf file. /etc/resolv.conf 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. Contents Installed Program Installed Library Installed Directory dhcpcd /usr/lib/dhcpcd/dev/udev.so /{usr,var}/lib/dhcpcd and /usr/share/dhcpcd Short Descriptions dhcpcd is an implementation of the DHCP client specified in RFC2131 dhcpcd udev.so adds udev support for interface arrival and departure; this is because udev likes to rename the interface, which it can't do if dhcpcd grabs it first udev.so