前言
由于我司产品的特殊性,每次都需要针对客户的离线服务器进行应用部署,但是使用二进制文件部署的话后期的升级与维护会很麻烦,所以我司选择了使用rpm包进行离线安装部署
制作yum安装包
找一台和现场一模一样版本的Centos机器,最好是最小安装
找一台和现场一模一样版本的Centos机器,最好是最小安装
找一台和现场一模一样版本的Centos机器,最好是最小安装
这里最好是找一台最小安装的Centos,否则安装后会出现意想不到的BUG
yum install yum-utils -y # 下载安装工具
接下来我们使用ntp
这个包来进行讲解
使用 yumdownloader 进行下载
这种方式我不推荐,只会下载你需要的包,但是不会下载你需要包的依赖,这种方式会导致你安装的包不完整,会出现一些奇奇怪怪的BUG。
yumdownloader --resolve --destdir ./ntp ntp ntpdate
(1/2): ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm | 549 kB 00:00:02
(2/2): ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
这样下载下来的包只会有两个,你安装的时候就会缺少一个依赖包,不推荐
使用 downloadonly 进行下载
推荐使用这个
使用这个的前提就是你从来没有用这台机器安装过这个组件,这样下载下来的包才是最全的。
这个东西就会根据你当前的环境下载所需要的包,还有所需包的缺少依赖(所以最好使用最小安装的服务器)
这玩意的缺点也很明显
- 需要从未安装过这个组件(所以最好使用最小安装的服务器),小技巧你可以使用Docker直接启动一个Centos
- 只会下载本机所需的依赖包,如果曾经安装过这个组件了,下载的时候就没有包了
- 中标麒麟与Centos7下载的包不通用(无法解决)
yum install --downloadonly ntp ntpdate --downloaddir=./ntp
(1/3): ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm | 549 kB 00:00:02
(2/3): ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm
(3/3): autogen-libopts-5.18-5.el7.x86_64.rpm
使用 repotrack 进行下载
这玩意是一把双刃剑,不推荐
不推荐的原因是一旦你不懂,就会玩瞎服务器,导致整个服务器需要重装
这玩意是三种中最牛逼的,他会将所有的组件的所有依赖全部下载下来
repotrack --download_path=./ntp ntp ntpdate
慎用,慎用,这玩意会将所依赖的gcc包也下下来,你一旦用这个提供的包去新服务器上装就很可能搞崩服务器,具体表现就是运行一段时候后服务器卡出翔来,然后CPU起飞,命令执行卡的要死,基本服务器就废了
制作安装包
压缩安装包
记得这玩意在linux下进行打包压缩,除非你很熟悉你在干嘛,不然可能会出现你想不到的问题。
先将刚刚下载的包压缩为.tar.gz
tar -czvf ntp.tar.gz ./ntp #压缩
tar -zxvf docker.tar.gz #解压
构建配置文件
vi install.sh
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ${NTP_SERVER} iburst
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor
编写安装脚本
vi ntp.conf
#! /bin/bash
conf_path="/etc/ntp.conf"
type=$1
server=$2
install() {
cat /proc/version | grep NeoKylin >/dev/null 2>&1
if [ $? -eq 0 ]; then
tar xzvf ntp-ns7.tar.gz
rpm -ivh ./ntp-ns7/*.rpm --force --nodeps
else
tar xzvf ntp.tar.gz
rpm -ivh ./ntp/*.rpm --force --nodeps
fi
}
conf_server() {
echo "$(sed "s/\${NTP_SERVER}/127.127.1.0/" ./ntp.conf)" >${conf_path}
systemctl start ntpd
systemctl enable ntpd
}
conf_client() {
echo "$(sed "s/\${NTP_SERVER}/${server}/" ./ntp.conf)" >${conf_path}
ntpdate -u ${server} # 首先同步时间
systemctl start ntpd
systemctl enable ntpd
}
main() {
ntpd --help >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "ntpd 已经安装无须再次安装"
else
install
if [ ${type} == "server" ]; then
conf_server
elif [ ${type} == "client" ]; then
if [ -z ${server} ]; then
echo '请输入NTP服务地址,如果没有NTP服务请执行如下命令进行安装!'
echo 'sh ./install.sh server'
exit 1
fi
conf_client
fi
fi
}
main
安装NtpServer与NtpClient
安装包制作完成后应该如下图所示拥有这些东西
sh ./install.sh server # 安装ntp服务端
sh ./open-firewall.sh open # 开放防火墙端口
sh ./install.sh client 192.168.1.1 # 安装ntp客户端
yum remove -y ntp ntpdate # 卸载