CentOS离线环境解决安装与依赖方案

先前提要

内网无外网需要安装环境

整理准备

下载 CentOS 光盘完整版镜像
以 CentOS 6.x 为例,因为低版本 CentOS 的 nginx 是 epel,并且缺少 everything
下载地址:https://vault.centos.org/6.5/isos/x86_64/https://mirrors.aliyun.com/centos-vault/6.9/isos/x86_64/(6.x 都行)
以 CentOS 7 为例,目前是国内环境,我们使用国内 163 源的镜像 http://mirrors.163.com/centos/7/isos/x86_64/ ,当然阿里云、华中科大的源都行。
下载地址:http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso
然后将这个 iso 文件上传到服务器 /root 目录下:
cd /root && wget http://mirrors.163.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-2009.iso

挂载 yum 本地库

于 CentOS 6.x

1.1 查看光驱

cd /home

1.2 挂载 iso 文件
mkdir /mnt/dvd && mount -o loop CentOS-6.5-x86_64-bin-DVD1.iso /mnt/dvd
mount iso 镜像文件,关键参数为-o loop,CentOS 6 之类的版本,可以 mkdir /mnt/dvd2,再参考前面的命令将第二张挂载到 /mnt/dvd2 上,更多请查看https://www.cnblogs.com/pumpkinhlk/p/14981770.html

这样就将光盘挂载 /mnt/dvd 目录了。
当然这个挂载命令只是一次性的,系统重启或者自己 umount 后就没了,需要使用本地源 yum 安装时需要线执行这个挂载命令。

1.3 修改安装源

将/etc/yum.repos.d 目录下,将里面存在的所有 repo 文件重新命名或者备份到其他目录下
cd /etc/yum.repos.d/ && rename .repo .repo.backup *.repo

1.4 修改配置文件

在/etc/yum.repos.d 目录下新建一个配置文件来设置本地源。
名称取为 local.repo 文件内容以及命令解释如下

1
2
3
4
5
6
7
[local-media]
name=CentOS-$releasever-Media
baseurl=file:///mnt/dvd/ #(yum源目录,源地址)
enabled=1 #(是否启用该yum源,0为禁用)
gpgcheck=1 #(检查GPG-KEY,0为不检查,1为检查)
#gpgkey=file:///mnt/dvd/RPM-GPG-KEY-CentOS-6 #(gpgcheck=0时无需配置,或可后期赋权)
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

1.5 私钥权限赋值

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

1.6 清理 yum 缓存

yum clean all
同时将服务器上的软件包信息先在本地缓存,以提高搜索安装软件的速度
yum makecache

1.7 测试 yum 源

yum list

于 CentOS 7.x

2.1 挂载

将 iso 文件拷贝到机器的某个目录下,比如  /home 目录下
cd /home
使用 mount 命令将 iso 文件挂载到某个目录下
mount -t auto /home/CentOS-7-x86_64-DVD-1611.iso /mnt

  • 这个时候使用命令 df -lh 可以看到挂载的目录。
  • 在实验环境中,命令执行完毕之后可以看到如下内容:

/dev/loop0 4.1G 4.1G 0 100% /mnt

2.2 修改安装源的配置文件

1
2
3
4
5
[centos7-local]
name=CentOS-7-x86_64
baseurl=file:///mnt/
enabled=1
gpgcheck=1

2.3 私钥权限赋值

sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

2.4 清除 yum 缓存

yum clean all

2.5 测试 yum 源

yum list

恢复 yum 网络源

倘若希望恢复网络源,可以将备份的 yum 源配置文件覆盖掉刚才生成的本地源配置文件
cd /etc/yum.repos.d/ && rename .repo.backup .repo *.repo.backup

keepalived 安装

所需前置
Keepalived_2.0.20
注意太高版本在 CentOS 无法编译安装

安装依赖

yum install -y openssl openssl-devel gcc-c++
如之前没有挂在本地 yum 库,可以参考如何离线安装 openssl-devel等方法

解压编译安装

1
2
3
4
5
tar -zxvf keepalived-2.0.20.tar.gz
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
make
make install

注册服务

1
2
3
4
5
6
7
8
9
mkdir /etc/keepalived
cp /usr/local/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

# 最后把配置文件和执行文件移到指定文件夹中
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

修改配置文件

于/etc/keepalived/文件夹内

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
! Configuration File for keepalived

global_defs {
router_id bhz006
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
interval 2 #检测时间间隔
weight -20 #权重
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
state MASTER #来决定主从
  interface eth0 # 绑定虚拟 IP 的网络接口,根据自己的机器填写,可通过ifconfig查询
virtual_router_id 222 # 虚拟路由的 ID 号
mcast_src_ip 68.174.25.208 #填写本机ip
priority 100 # 节点优先级,主要比从节点优先级高
nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
authentication {
auth_type PASS
auth_pass 111
}
# 将 track_script 块加入 instance 配置块
track_script {
chk_nginx #执行 Nginx 监控的服务
}

virtual_ipaddress {
68.174.25.4 # 主从要一致,虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。
}
}

其中 nginx_check 脚本

1
2
3
4
5
6
7
8
9
#!/bin/bash
A=`ps -C nginx 每no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

成功后键入
启动服务:service keepalived start
停止服务:service keepalived stop

如无法启动,请确定service iptables status是否停止运行
正常情况下,tailf /var/log/messages可以成功查看 Sending gratuitous ARP 至虚拟 IP

注册开机启动

chkconfig keepalived on

测试 ip 漂移

关闭其中一个节点的服务器测试 ip 漂移,ip a | grep ip bash 会 return init ip scope global eth0

Nginx 安装

所需前置如下:
nginx-1.20.1
pcre-8.44
zlib-1.2.11
openssl-1.1.1l

安装 zlib

nginx 使用 zlib 对 http 包的内容进行 gzip

1
2
3
4
5
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install

安装 pcre

nginx 的 http 模块使用 pcre 来解析正则表达式

1
2
3
4
5
tar -zxvf pcre-8.44.tar.gz
cd pcre-8.44
./configure
make
make install

安装 openssl

OpenSSL 是一个强大的安全套接字层密码库,包含主要的密码算法,常用的密钥证书封装管理功能和 SSL 协议。Nginx 不仅支持 http 协议,还支持 https

1
2
3
4
5
tar -zxvf openssl-1.1.1l.tar.gz
cd openssl-1.1.1l
./config
make
make install

编译 Nginx

1
2
3
4
5
6
7
8
9
10
tar -zxvf nginx-1.20.1.tar.gz
./configure --sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre=/home/pcre-8.44 \
--with-zlib=/home/zlib-1.2.11 \
--with-openssl=/home/openssl-1.1.1l
make
sudo make install

开启 nginx 进程,进入目录cd /usr/local/nginx/后,./nginx即启动,观察是否有[error]错误信息,启动后键入ps -ef | gref nginx查看是否有该进程,最后访问成功即启动完毕,最后可以输入./nginx -v可以浏览版本是否正确,最后带参数再启动./nginx -s reload -c nginx.conf

注意 nginx.conf 相关配置符合预期生产环境,如 keepalive_timout 等

注册服务

因为 CentOS6.x 使用的是 sysinit,CentOS7 使用的是 systemd,以下以 CentOS6.5 为例子。
于 CentOS 6.x
vim /etc/init.d/nginx
输入以下内容注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# this script create it by caffreyxin at 2007.10.15.
# it is v.0.0.1 version.
# if you find any errors on this scripts, please contact caffreyxin.
# and send mail to xinyflove at sina dot com.
#
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
# It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf

nginxd=/usr/local/nginx/nginx
nginx_config=/usr/local/nginx/nginx.conf

nginx_pid=/var/run/nginx.pid

RETVAL=0
prog="nginx"

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x $nginxd ] || exit 0


# Start nginx daemons functions.
start() {

if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi

echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}


# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}


# reload nginx service functions.
reload() {

echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo

}

# See how we were called.
case "$1" in
start)
start
;;

stop)
stop
;;

reload)
reload
;;

restart)
stop
start
;;

status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac

exit $RETVAL

主要对应变量 nginxd 以及 nginx_config 根据自己实际填写,最后键入chmod 755 /etc/init.d/nginx即可享用
启动服务:service nginx start
停止服务:service nginx stop
重启服务:service nginx reload

注册开机启动

JDK 安装

所需前置
jdk1.8

准备 jdk

创建 java 文件夹
mkdir /usr/local/java
将安装包转移到 java 文件夹中
mv jdk-8u202-linux-x64.tar.gz /usr/local/java/
解压安装包
tar zxvf jdk-8u202-linux-x64.tar.gz

配置 jdk

进入文件夹键入
vim /etc/profile
在末尾加上 JAVA_HOME 和 JRE_HOME,路径如下

1
2
3
4
5
JAVA_HOME=/usr/local/java/jdk1.8.0_66
JRE_HOME=/usr/local/java/jdk1.8.0_66/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH

保存并退出,重新加载环境变量 source /etc/profile
校验是否安装成功
java -version
出现版本号即可成功

Tomcat 安装

解压即安装

Redis 安装

所需前置
Redis-service

解压编译安装

1
2
3
4
tar -zxvf redis-6.2.5.tar.gz
cd redis-6.2.5
make #当前目录下执行
make install --prefix=/usr/local/reids

安装成功后进入进入 src 目录启动./redis-serve看到 redis 的 logo 证明启动成功。

后台方式启动

根目录下vi redis.conf修改其中 daemonize no 为 daemonize yes
最后再次以配置文件启动即可 ./redis-server redis.conf

Q&A

在配置编译 pcre 时出现的问题 ivalid c++ compiler or c++ compiler flags

返回到根目录输入 yum install -y gcc gcc-c++即可

cannot open shared object file: No such fileordirectory

查看缺少哪些依赖包,补充编译

关于一键部署环境

可以前往https://lnmp.org/download.html(LNMP)或者https://oneinstack.com/auto/(LNMT)一键部署

简单调优最大进程数和最大文件打开数

查看ulimit -n默认 1024
临时修改的话ulimit -HSn 16384即可,重启后失效
永久修改可以前往vim /etc/security/limits.conf 修改,最后reboot即可

1
2
3
4
5
*    soft    nofile    65536
* hard nofile 65536
* soft noproc 10240
* hard noproc 10240
# End of file

参数详解:
bash: ulimit
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.可以使用该命令查看进程占用资源的情况。
-c size:设置 core 文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置 CPU 使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes 5

  • 代表针对所有用户
    soft hard 软硬
    noproc 是代表最大进程数
    nofile 是代表最大文件打开数

configure: error: C compiler cannot create executables

gcc 没有安装好

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Making all in lib
make[1]: Entering directory `/usr/local/src/keepalived-1.2.24/lib'
make all-am
make[2]: Entering directory `/usr/local/src/keepalived-1.2.24/lib'
make[2]: Leaving directory `/usr/local/src/keepalived-1.2.24/lib'
make[1]: Leaving directory `/usr/local/src/keepalived-1.2.24/lib'
Making all in keepalived
make[1]: Entering directory `/usr/local/src/keepalived-1.2.24/keepalived'
Making all in core
make[2]: Entering directory `/usr/local/src/keepalived-1.2.24/keepalived/core'
CC namespaces.o
namespaces.c: In function ‘setns’:
namespaces.c:184: error: ‘__NR_setns’ undeclared (first use in this function)
namespaces.c:184: error: (Each undeclared identifier is reported only once
namespaces.c:184: error: for each function it appears in.)
make[2]: *** [namespaces.o] Error 1
make[2]: Leaving directory `/usr/local/src/keepalived-1.2.24/keepalived/core'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/keepalived-1.2.24/keepalived'
make: *** [all-recursive] Error 1

yum update glib*

离线更新 glib

http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm > http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm > http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm > http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm

rpm -Uvh xx.rpm 升级指定包
rpm -e xx.rpm 卸载由 rpm -qa | grep xxx 指定的包

作者

Catooilg

发布于

2020-09-02

更新于

2023-02-05

许可协议

评论