这篇文章是又一位专业水平非常顶的朋友那里转的,有感兴趣的朋友可以去关注一下
https://www.ddupan.top

在 CentOS 8 上编译安装 ISC-DHCP-Server

应要求,我需要在 Red Hat Enterprise Linux 8 上编译安装 ISC-DHCP,但我当时手头只有 CentOS 8 的镜像,根据 CentOS 8 = RHEL 8 的传统,我在 CentOS 8 上写了这篇文,大约在 RHEL 上也完全适用。

Red Hat 给的 dhcpd 包版本是 4.3.6,而最新的源码包是 4.4.2,但实际上是由 Red Hat 负责 Backport 的,而且这东西也不会像 Kubernetes 这种东西几天一小更,几周一大更,版本号刷的贼快,所以完全没必要自己编译,我只是被有这个需求罢了。

姑且还是记录在这里。

编译

首先配置编译环境

dnf install gcc make automake

不需要别的东西

解压源码包,进入目录,正常编译

tar -xvf dhcp-4.4.2.tar.gz
cd dhcp-4.4.2/
./configure
make
make -C server install

最后一个 make install 只安装了 ISC-DHCP-Server,实际上这个包内还有 DHCP relaydhclient,上面的 make 已经将所有三者全部编译了.

这个 makefile 会把编译好的 dhcpd 二进制文件安装到 /usr/local/sbin/dhcpd,如果你想,也可以把它拷贝到 /usr/sbin/ 或者 /sbin,但我就不打算拷贝了。

现在直接在 Shell 里执行 dhcpd 应该就已经能运行了,但是由于没有找到配置文件,以及没有保存租约的数据库文件,服务依然启动不起来,而且需要通过 Shell 来运行 dhcpd 也非常不优雅,因此我们还有两个工作要做,一个是准备配置文件,准备租约数据库文件,以及准备 dhcpd.servive 以便可以使用 systemd 来管理 dhcpd 守护进程

准备配置文件与租约数据库

dhcpd 源码包中确实给了示例,但是给的却是 DHCPv6 的,我对 DHCPv6 现在可没什么兴趣,所以我从别处扒了一个,直接贴下面了

$ cat > /etc/dhcpd.conf << EOF
# Begin /etc/dhcpd.conf
#
# Example dhcpd.conf(5)
# Use this to enable / disable dynamic dns updates globally.
ddns-update-style none;
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# End /etc/dhcpd.conf
EOF

如果没有额外指定,那么默认编译选项的 dhcpd 会将 /etc/dhcpd.conf 作为配置文件,如果想修改,如修改为 /etc/dhcpd/dhcpd.conf,则需要编译时添加参数选项后重新编译

租约数据库文件默认为 /var/db/dhcpd.leases,同样也可以在编译时通过参数修改

install -v -dm 755 /var/db
touch > /var/db/dhcpd.leases
chmod 644 /var/db/dhcpd.leases

准备 systemd service

为了最大程度贴近 CentOS 发行时的样子,我从 rpm 包里扒出来了这个文件

# /usr/lib/systemd/system/dhcpd.service
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/dhcpd
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid $DHCPDARGS
StandardError=null[Install]
WantedBy=multi-user.target

默认配置编译时不支持 -user-group 选项,因此这个文件依然需要一些修改才能工作

根据这个文件,我们需要做下面几件事:

  • 修改这个 service 文件使其匹配现有环境
  • 因这个配置文件的历史遗留原因需创建 /etc/sysconfig/dhcpd
touch /etc/sysconfig/dhcpd

这个 /etc/sysconfig/dhcpd 是过去用来修改参数的方式,但当前版本已经不需要自行修改监听网卡,因此这个文件也没用了,原文件中只有注释罢了。

修改后的 dhcpd.service 如下

# /usr/lib/systemd/system/dhcpd.service
[Unit]
Description=DHCPv4 Server Daemon
Documentation=man:dhcpd(8) man:dhcpd.conf(5)
Wants=network-online.target
After=network-online.target
After=time-sync.target[Service]
EnvironmentFile=-/etc/sysconfig/dhcpd
ExecStart=/usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -no-pid $DHCPDARGS
StandardError=null[Install]
WantedBy=multi-user.target

由于没有配置 SELinux 安全上下文导致 dhcpd 可能无法读写 dhcpd.leases,关闭 SELinux 能解决一些奇怪的权限问题

现在只要正常修改 /etc/dhcpd.conf 应该就可以正常启动服务了

尽量贴近发行版配置

CentOS 的 dhcpd 编译选项我会尽量猜测后放在下面,可以对照使用

( export CFLAGS="${CFLAGS:--g -O2} -Wall -fno-strict-aliasing                 \-D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"' "             && ./configure --prefix=/usr                                           \--sysconfdir=/etc/dhcp                                  \--localstatedir=/var                                    \--with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases       \--enable-paranoia                                       \--with-srv6-lease-file=/var/lib/dhcpd/dhcpd6.leases     \--with-systemd                                          \--disable-static                                        \--enable-log-pid
) &&
make -j1
make -C server install
install -v -dm 755 /var/lib/dhcpd
touch /var/lib/dhcpd/dhcpd.leases
touch /etc/sysconfig/dhcpd
useradd dhcpd -r -s /sbin/nologin

Red Hat 对源码做了大改,对源码打了几十个补丁,并且实现了支持 systemd-notify 的功能,理论上可以从 CentOS 的源码包中提取出 Patch34 即 dhcp-sd_notify.patch 并打上,再编译应出现 --with-systemd 选项

参考:

Beyond Linux® From Scratch (systemd Edition) - Version 10.1 - Chapter 14. Connecting to a Network - DHCP 4.4.2

dhcp-4.3.6-41.el8.src.rpm

在 CentOS 8 上编译安装 ISC-DHCP-Server相关推荐

  1. CentOS 7上编译安装PHP 8.1及Nginx 配置支持PHP

    CentOS 7上编译安装PHP 8.1/及Nginx 配置支持PHP 编译安装 Php[端口:9000] 安装编译环境依赖包 yum -y install gcc gcc-c++ glibc aut ...

  2. centos安装python3.8.1_在CentOS 8上编译安装Python 3.8.1

    CentOS 8包含Python 3.6版本,可以使用dnf工具安装或更新. 在撰写本文时,Python 3.8是Python语言的最新主要版本.它包括许多新特性,如赋值表达式.仅定位的参数.f-st ...

  3. centos llvm安装_在CentOS上编译安装llvm-3.8.1详细教程

    在CentOS上编译安装llvm-3.8.1详细教程 2020/1/11  18:12 1682次 注:CentOS版本是6.8,6.x版本的操作类似 安装需求: [list] [*]Cmake: 3 ...

  4. docker使用centos镜像,编译安装nginx,并上传镜像

    docker使用centos镜像,编译安装nginx 1. 拉取镜像 2. 运行centos容器 3. 安装依赖包 4. 下载nginx的tar包 5. 解压nginx的tar包 6. 创建nginx ...

  5. 在PK体系下的CentOS上编译安装 MySQL 5.7

    本文主要介绍如何在 PK 体系下的 CentOS 上编译安装 MySQL 5.7,本文使用的操作系统环境为: CentOS 版本: # cat /etc/redhat-release CentOS L ...

  6. linux gnuplot yum源,在CentOS上编译安装gnuplot绘图工具

    gnuplot是一个命令行的交互式绘图工具.用户通过输入命令,可以逐步设置或修改绘图环境,并以图形描述数据或函数,使我们可以借由图形做更进一步的分析. gnuplot是由Colin Kelly和Tho ...

  7. mysql+1.6安装,CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法

    这篇文章主要介绍了CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享,需要的朋友可以参考下准备篇: 一.配置防火墙,开启80端口.3306端口 Cen ...

  8. CentOS 7.0编译安装Nginx+MySQL+PHP

    转自http://www.centoscn.com/CentosServer/www/2014/0904/3673.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www. ...

  9. CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5

    CentOS 6.3编译安装Nginx1.2.2+MySQL5.5.25a+PHP5.4.5 准备篇: 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接服务器       CentOS 设 ...

最新文章

  1. 如何探测浏览器是否开启js功能
  2. 【数据挖掘笔记十二】离群点检测
  3. Lucky 7 in the Pocket
  4. [Java]中[this][super]用法总结
  5. 《Nodejs入门》一书中存在的问题分析[转]
  6. linux ubuntu20.04 problems
  7. 2016年大学计算机期末笔试题目,2017年计算机基础大一考试题「附答案」
  8. 使用长时间运行作业的警报监控SQL代理
  9. css3 文字高光划过,CSS3实现一束光划过图片、和文字特效
  10. SNF开发平台-SNF.CodeGenerator-升级生成BS页面代码-支持视图-数据库配置-快速开发者的利器...
  11. 图灵学院Java开发笔记
  12. 旷视科技 CVPR部分文章
  13. 拼多多校招-----六一儿童节(python)
  14. 一元函数积分学2_不定积分的分部积分法
  15. BZOJ1665 Usaco2006 Open The Climbing Wall
  16. 3.神经网络-深度学习入门
  17. 跨平台桌面应用的开发框架——Electron
  18. 哪些城市有PMP考试考点?PMP考试考场都在哪?
  19. 洛谷:三角函数,C语言
  20. Surface RT and Surface Pro

热门文章

  1. 肠道短链脂肪酸如何让人变胖或变瘦
  2. UI非常漂亮的数诚1对1直播/带收徒/带公会/运营版本
  3. Oracle数据库SQL查询结果去重——ROW_NUMBER() OVER
  4. 王叁寿被公安局带走调查、高管自曝公司资产多为空壳?九次方大数据集团回应来了:传言不实!...
  5. java then_Java 8新特性
  6. AR游戏Minecraft Earth马上将在德国开玩
  7. 通缩的魔咒 油价惊见二字头--今周刊「老谢开讲」
  8. windows server 2003怎么自动获取IP
  9. SUP-P300压力变送器SUP-P300
  10. Windows驱动程序从零开始好网址