dhcpcd は、RFC2131 にて定義されている DHCP クライアントの実装です。 DHCP クライアントは、DHCP を利用してネットワークアドレスが割り当てられたネットワークへのアクセスに用いられます。 dhcpcd は十分な機能を有すると同時に、大変軽量な DHCP クライアントです。
LFS や依存パッケージが本ブックに示す最新安定バージョンでなかった場合には、BLFS 開発版においては、パッケージのビルドや処理実行が適切に行われないことがあります。
ダウンロード (HTTP): https://github.com/NetworkConfiguration/dhcpcd/releases/download/v10.0.6/dhcpcd-10.0.6.tar.xz
ダウンロード MD5 sum: ef8356d711b17701928ead7206d15234
ダウンロードサイズ: 264 KB
必要ディスク容量: 3.0 MB (with tests)
概算ビルド時間: 0.1 SBU 以下 (テスト込み)
LLVM-17.0.6 (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
ビルド結果をテストする場合は make test を実行します。
root
ユーザーになって以下を実行します。
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-20231119 package (as user
root
):
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
--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