在 CentOS 8 上编译安装 ISC-DHCP-Server
这篇文章是又一位专业水平非常顶的朋友那里转的,有感兴趣的朋友可以去关注一下
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 relay
和 dhclient
,上面的 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相关推荐
- CentOS 7上编译安装PHP 8.1及Nginx 配置支持PHP
CentOS 7上编译安装PHP 8.1/及Nginx 配置支持PHP 编译安装 Php[端口:9000] 安装编译环境依赖包 yum -y install gcc gcc-c++ glibc aut ...
- centos安装python3.8.1_在CentOS 8上编译安装Python 3.8.1
CentOS 8包含Python 3.6版本,可以使用dnf工具安装或更新. 在撰写本文时,Python 3.8是Python语言的最新主要版本.它包括许多新特性,如赋值表达式.仅定位的参数.f-st ...
- 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 ...
- docker使用centos镜像,编译安装nginx,并上传镜像
docker使用centos镜像,编译安装nginx 1. 拉取镜像 2. 运行centos容器 3. 安装依赖包 4. 下载nginx的tar包 5. 解压nginx的tar包 6. 创建nginx ...
- 在PK体系下的CentOS上编译安装 MySQL 5.7
本文主要介绍如何在 PK 体系下的 CentOS 上编译安装 MySQL 5.7,本文使用的操作系统环境为: CentOS 版本: # cat /etc/redhat-release CentOS L ...
- linux gnuplot yum源,在CentOS上编译安装gnuplot绘图工具
gnuplot是一个命令行的交互式绘图工具.用户通过输入命令,可以逐步设置或修改绘图环境,并以图形描述数据或函数,使我们可以借由图形做更进一步的分析. gnuplot是由Colin Kelly和Tho ...
- 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 ...
- CentOS 7.0编译安装Nginx+MySQL+PHP
转自http://www.centoscn.com/CentosServer/www/2014/0904/3673.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www. ...
- 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 设 ...
最新文章
- 如何探测浏览器是否开启js功能
- 【数据挖掘笔记十二】离群点检测
- Lucky 7 in the Pocket
- [Java]中[this][super]用法总结
- 《Nodejs入门》一书中存在的问题分析[转]
- linux ubuntu20.04 problems
- 2016年大学计算机期末笔试题目,2017年计算机基础大一考试题「附答案」
- 使用长时间运行作业的警报监控SQL代理
- css3 文字高光划过,CSS3实现一束光划过图片、和文字特效
- SNF开发平台-SNF.CodeGenerator-升级生成BS页面代码-支持视图-数据库配置-快速开发者的利器...
- 图灵学院Java开发笔记
- 旷视科技 CVPR部分文章
- 拼多多校招-----六一儿童节(python)
- 一元函数积分学2_不定积分的分部积分法
- BZOJ1665 Usaco2006 Open The Climbing Wall
- 3.神经网络-深度学习入门
- 跨平台桌面应用的开发框架——Electron
- 哪些城市有PMP考试考点?PMP考试考场都在哪?
- 洛谷:三角函数,C语言
- Surface RT and Surface Pro
热门文章
- 肠道短链脂肪酸如何让人变胖或变瘦
- UI非常漂亮的数诚1对1直播/带收徒/带公会/运营版本
- Oracle数据库SQL查询结果去重——ROW_NUMBER() OVER
- 王叁寿被公安局带走调查、高管自曝公司资产多为空壳?九次方大数据集团回应来了:传言不实!...
- java then_Java 8新特性
- AR游戏Minecraft Earth马上将在德国开玩
- 通缩的魔咒 油价惊见二字头--今周刊「老谢开讲」
- windows server 2003怎么自动获取IP
- SUP-P300压力变送器SUP-P300
- Windows驱动程序从零开始好网址