CentOS7 初始化脚本:[2020年5月8日 09:09:54]
#!/bin/bash
# @Desc:Centos7安装后初始化脚本
# @Author: WeiyiGeek
# @Time: 2020年5月6日 11:04:42
# @Version: 1.0
echo -e "\e[32m#########\n#网卡配置\n##########\e[0m"
sed -i 's/ONBOOT=no/ONBOOT=yes/g' /etc/sysconfig/network-scripts/ifcfg-ens192
sed -i 's/BOOTPROTO=dhcp/BOOTPROTO=static/g' /etc/sysconfig/network-scripts/ifcfg-ens192
sed -i 's/BOOTPROTO=\"dhcp\"/BOOTPROTO=\"static\"/g' /etc/sysconfig/network-scripts/ifcfg-ens192
cat >> /etc/sysconfig/network-scripts/ifcfg-ens192 <<EOF
IPADDR=10.10.107.192
NETMASK=255.255.255.0
GATEWAY=10.10.107.1
EOF
service network restart
echo nameserver 223.6.6.6 >> /etc/resolv.conf
echo -e"--[网卡配置结束]--"
echo -e "\e[32m#########\n#SSH服务配置\n#########\e[0m"
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
systemctl restart sshd
echo "--[SSH服务配置结束]--"
echo -e "\e[32m#########\n#Yum源设定\n#########\e[0m"
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/CentOS-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum update -y && yum upgrade -y && yum -y install epel*
echo "--[YUM替换更新应用软件完成]--"
echo -e "\e[32m#########\n#系统内核版本升级\n#########\e[0m"
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo=elrepo-kernel repolist
yum --disablerepo="*" --enablerepo=elrepo-kernel list kernel*
yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64
awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
sudo grub2-set-default 0
reboot
#yum -y --enablerepo=elrepo-kernel install kernel-ml-tools.x86_64
#sudo grub2-set-default 0
echo -e "\n############################\n#安装常用的运维软件\n####################################\n"
#编译依赖
yum install -y gcc gcc-c++ openssl-devel bzip2-devel
#常规软件
yum install -y nano vim net-tools tree wget dos2unix unzip htop ncdu bash-completion
echo "--[安装安装完成]--"
echo -e "\n############################\n#bash终端美化\n####################################\n"
yum install -y git
git clone --depth=1 \
https://github.com/Bash-it/bash-it.git \
~/.bash_it
cd !$ && ./install.sh -s
官方镜像列表状态地址:
建议使用阿里云的源其他发行版等同:http://mirrors.aliyun.com/help/centos
Aliyun下载最新的CentOS-Base.repo 到/etc/yum.repos.d/
#备份CentOS-Base.repo
$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载更新源
CentOS 5:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7:wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除源数据并生成镜像缓存
yum clean all
yum makecache
yum update
注意:不建议使用yum进行删除软件,因为他会删除多余得依赖程序,导致意外发生(运维必须注意)
系统环境:CentOS Linux release 7.6.1810 (Core) 升级原因:在使用 Docker 时发现其对 Linux 内核版本的最低要求是 3.10(这也刚好是 CentOS 7.6 的内核版本),但是在这个版本上有部分功能无法实现。 注:对于线上环境的内核版本还需要根据实际情况谨慎选择,越新的版本未来可能遇到的问题越多;
Linux 内核分两种:
CentOS和Fedora都是基于Redhat的常见Linux分支。
关于内核版本的定义: 版本性质:主分支版本ml(mainline),稳定版(stable),长期维护版lt(longterm-long term support),内核预发行版(内核预发行版本)
版本命名格式为 :A.B.C
A:是内核版本号:版本号只有在代码和内核的概念有重大改变的时候才会改变,历史上有两次变化:
第一次是1994年的 1.0 版,第二次是1996年的 2.0 版,第三次是2011年的 3.0 版发布,但这次在内核的概念上并没有发生大的变化
B:是内核主版本号:主版本号根据传统的奇-偶系统版本编号来分配:奇数为开发版,偶数为稳定版
C:是内核次版本号:次版本号是无论在内核增加安全补丁、修复bug、实现新的特性或者驱动时都会改变
Linux 发行版内核 一般来说只有从 kernel.org 下载并编译安装的内核才是官方内核;大多数 Linux 发行版提供自行维护的内核,可以通过 yum 或 rpm 等包管理系统升级(仓库升级内核);
各大 Linux 发行版(RedHat、Ubuntu、CentOS 等)在内核基础上集成了其他的一系列软件,按照各自的版本规则发布;使用 uname -r 区分你用的是官方内核还是 Linux 发行版内核,横线后面有任何东西都表示这不是官方内核; 例如: 3.10.0-514.26.2.el7.x86_64,表示对应的 Linux 内核版本是 3.10,后面514是代表发行版规则编号;
虚拟文件系统 内核空间和用户空间通过 /proc 虚拟文件系统可以通信; /proc 目录中包含一些目录和虚拟文件,这些虚拟文件可以向用户呈现内核信息或者从用户空间向内核发送信息。
[[email protected] ~]# cat /proc/version
Linux version 3.10.0-957.10.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019
cpuinfo:标识了处理器的类型和速度
pci:显示在 PCI 总线上找到的设备
modules:当前加载到内核中的模块
version:系统版本及内核版本
(1)小版本升级流程步骤:
#1.查看当前和可升级版本
yum list kernel
Installed Packages
kernel.x86_64 3.10.0-957.el7 @anaconda
Available Packages
kernel.x86_64 3.10.0-957.5.1.el7 updates
#2 升级
yum update kernel -y
#3.重启并检查
reboot
uname -r
(2)大版本升级流程步骤:
#1. 首先更新仓库
yum -y update
#2. 启用 ELRepo 仓库
#ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。
#ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等
##--enablerepo 选项开启 CentOS 系统上的指定仓库,默认开启的是 elrepo这里用 elrepo-kernel 替换
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
#rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm #Centos 6 YUM源
#3.载入elrepo-kernel元数据
yum --disablerepo="*" --enablerepo=elrepo-kernel repolist
#4.仓库启用后,你可以使用下面的命令列出可用的内核相关包
yum --disablerepo="*" --enablerepo=elrepo-kernel list kernel*
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#长期维护版本lt为4.4,最新主线稳定版ml为5.0
# elrepo-kernel | 2.9 kB 00:00
# elrepo-kernel/primary_db | 1.8 MB 00:05
# Available Packages
# kernel-lt.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-devel.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-doc.noarch 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-headers.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-tools.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-tools-libs.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-lt-tools-libs-devel.x86_64 4.4.179-1.el7.elrepo elrepo-kernel
# kernel-ml.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-devel.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-doc.noarch 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-headers.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-tools.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-tools-libs.x86_64
# 5.0.10-1.el7.elrepo elrepo-kernel
# kernel-ml-tools-libs-devel.x86_64
# 5.0.10-1.el7.elrepo elrepo-kernel
# perf.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
# python-perf.x86_64 5.0.10-1.el7.elrepo elrepo-kernel
#5.我们需要安装最新的主线稳定内核,使用如下命令:(以后这台机器升级内核直接运行这句就可升级为最新稳定版)
yum --disablerepo="*" --enablerepo=elrepo-kernel install kernel-ml.x86_64 -y
#6.删除旧与安装新版本工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64 -y
yum --disablerepo="*" --enablerepo=elrepo-kernel install kernel-ml-tools.x86_64 -y
# 删除旧内核(可选)内核有两种删除方式:通过 yum remove 命令或通过 yum-utils 工具。
# rpm -qa | grep kernel #删除旧内核的 RPM 包
#yum remove [上面查询出来得包]
#如果安装的内核不多于 3 个yum-utils 工具不会删除任何一个,只有在安装的内核大于 3 个时,才会自动删除旧内核。
# yum install yum-utils #安装工具
# package-cleanup --oldkernels #删除工具
#7.一步到位
yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64
内核升级完毕后,目前内核还是默认的版本,需要进行内核版本插入顺序修改:
#8.我们可以通过命令查看默认启动顺序,然后修改grub中默认的内核版本:
$ awk -F \' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-ca0f6fb3c5f24478abc0a2e275281d7a) 7 (Core)
#说明:
# - 默认新内核是从头插入,默认启动顺序也是从0开始(当前顺序还未生效)或者使用
# - 其中文件 /etc/grub2.cfg 和 /boot/grub2/grub.cfg 内容一致
$ grep "^menuentry" /boot/grub2/grub.cfg | cut -d "'" -f2
CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-ca0f6fb3c5f24478abc0a2e275281d7a) 7 (Core)
#9.查看当前实际启动顺序
$grub2-editenv list
saved_entry=CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)
#10.设置默认启动
sudo grub2-set-default 'CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)'#方式1
sudo grub2-set-default 0 #方式2
grub2-editenv list
saved_entry=CentOS Linux (4.20.12-1.el7.elrepo.x86_64) 7 (Core)
#由上面可以看出新内核(5.0.10)目前位置在0,原来的内核(3.10.0)目前位置在1,所以如果想生效最新的内核,还需要我们修改内核的启动顺序为0:
# vim /etc/default/grub
# GRUB_DEFAULT = 0
#注:Centos 6 更改的文件相同,使用命令确定新内核位置后,然后将参数default更改为0即可。
#接着运行grub2-mkconfig命令来重新创建内核配置,如下:
#grub2-mkconfig -o /boot/grub2/grub.cfg
#11.修改grub中默认的内核版本后重新启动
reboot
WeiyiGeek.grub
补充说明:
grub2-set-default 0
#传统启动方式
grub2-mkconfig -o /boot/grub2/grub.cfg
grubby --default-kernel
#UEFI启动方式
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
方法2:
#对于一些无法上网的服务器,或者需要安装指定版本内核的需求,我们可以把kernel image的rpm包下载下来安装,下载地址如下:
下载指定版本 kernel: http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=3&dl=40&search=kernel
下载指定版本 kernel-devel:http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=3&dl=40&search=kernel-devel
官方 Centos 6: http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
官方 Centos 7: http://elrepo.org/linux/kernel/el7/x86_64/RPMS/
历史版本:http://mirror.rc.usf.edu/elrepo/kernel/el7/x86_64/RPMS/
历史版本:http://ftp.osuosl.org/pub/elrepo/kernel/el7/x86_64/RPMS/
将rpm包下载上传到服务器上,使用下面的命令安装即可:
# yum -y install kernel-ml-devel-4.12.4-1.el7.elrepo.x86_64.rpm
# yum -y install kernel-ml-4.12.4-1.el7.elrepo.x86_64.rpm
#rpm -ivh kernel-ml-headers-5.2.4-1.el7.elrepo.x86_64.rpm
#rpm -ivh kernel-ml-devel-5.2.4-1.el7.elrepo.x86_64.rpm
方法3: 还可以通过源码包编译安装,这种方式可定制性强但也比较复杂,有需要的可自行查找资料安装,下面只给出各系统版本内核源码包的下载地址:https://www.kernel.org/pub/linux/kernel/
补充:
系统环境:CentOS Linux release 7.6.1810 (Core)
默认网卡信息:
[[email protected] network-scripts]# ip addr | grep "enp"
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:46:9b:14 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:36:63:b1 brd ff:ff:ff:ff:ff:ff
4: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:0b:01:7d brd ff:ff:ff:ff:ff:ff
目的:将上面得enp0s3/8/9 得网卡名称变成 eth0/1/2,以下是配置流程:
#网卡配置目录
cd /etc/sysconfig/network-scripts
#1. 更改网卡名称 (目录中自留下网卡名称得ifcfg-文件,将默认得要删除)
[[email protected] network-scripts]# ls ifcfg-*
ifcfg-eth0 ifcfg-eth1 ifcfg-eth2 ifcfg-lo
#2. 修改各个网卡得配置文件
sed -i 's/NAME=enp0s3/NAME=eth1/g' ifcfg-eth1
sed -i 's/DEVICE=enp0s3/DEVICE=eth1/g' ifcfg-eth1
sed -i 's/NAME=enp0s3/NAME=eth2/g' ifcfg-eth2
sed -i 's/DEVICE=enp0s3/DEVICE=eth2/g' ifcfg-eth2
#3. 关闭"一致性网络设备命名法”
cp /etc/sysconfig/grub /etc/sysconfig/grub.bak
在 GRUB_CMDLINE_LINUX 添加 net.ifnames=0 biosdevname=0
#修改后更新GRUB、内核配置
$ grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-a21bd1at 810ca4597ae7f6a7c26299389
Found initrd image: /boot/initramfs-0-rescue-a21bd1a810ca4597ae7f6a7c26299389.img
done
#4. 添加设备规则配置文件
#修改/etc/udev/rules.d/70-persistent-net.rules,没有该文件则新建文件
#注意MAC地址与NAME相匹配(可以用ip addr查看)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:46:9b:14", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:36:63:b1", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:0b:01:7d", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
#5. 配置完成后重启系统即可
$reboot #重启后ip addr 查看修改得网卡信息
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:46:9b:14 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:36:63:b1 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:0b:01:7d brd ff:ff:ff:ff:ff:ff
WeiyiGeek.grub修改
注意事项:
方式1:
LANG=zh_cn.UTF-8
“ 同行后面加上“init=/bin/sh
” Ctrl+X
进入“单用户模式”,并且挂载 / mount -o remount ,rw /
passwd root
重新设置Root密码touch /.autorelabel
WeiyiGeek.
方式2:
linux16 /vmlinuz-0-resuce
这一行在行末尾添加 rd.break
Ctrl+x
进入单用户shell模式mount -o remount, rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
WeiyiGeek.centos7密码重置
流程步骤:
追加"rd.break"参数
,然后按下Ctrl + X组合键
来运行修改过的内核程序,然后进入到系统的紧急救援模式; WeiyiGeek.
1.解决 error: the HTTP XSLT module requires the libxml2/libxslt 错误
yum -y install libxml2 libxml2-dev
yum -y install libxslt-devel
2.解决 error: the HTTP image filter module requires the GD library. 错误
yum -y install gd-devel
3.解决 error: the GeoIP module requires the GeoIP library. 错误
yum -y install GeoIP GeoIP-devel GeoIP-data
4.解决 error: the Google perftools module requires the Google perftools 错误
yum -y install gperftools
5.解决 error: libatomic_ops library was not found. 错误
yum -y install libuuid-devel libblkid-devel libudev-devel fuse-devel libedit-devel libatomic_ops-devel
6.解决 error trying to exec ‘cc1plus’: execvp: No such file or directory 错误
yum -y install gcc-c++
7.解决 error: [pool www] cannot get uid for user ‘www-data’ 错误
groupadd www-data
useradd -g www-data www-data
8.解决configure: error: mbed TLS libraries not found. 错误。需要安装mbedtls,教程:https://www.24kplus.com/linux/281.html
9.解决 error: Cannot find OpenSSL’s <evp.h> 错误
yum install openssl openssl-devel
ln -s /usr/lib64/libssl.so /usr/lib/
10.解决 error: Libtool library used but ‘LIBTOOL’ is undefined 错误
yum install libtool
11.解决 exec: g++: not found 错误
yum -y update gcc
yum -y install gcc+ gcc-c++
12.解决 configure: error: tss lib not found: libtspi.so 错误
yum install trousers-devel
13.解决 Can’t exec “autopoint”: No such file or directory 错误
yum install gettext gettext-devel gettext-common-devel
14.解决 configure: error: libcrypto not found. 错误
yum remove openssl-devel
yum -y install openssl-devel
15.解决 configure: error: Package requirements (libffi >= 3.0.0) were not met: No package ‘libffi’ found 错误
yum install libffi-devel
16.解决 fatal error: uuid.h: No such file or directory 错误
yum install e2fsprogs-devel uuid-devel libuuid-devel
17.解决 configure: error: openssl lib not found: libcrypto.so 错误
yum install openssl-devel
18.解决 tar (child): lbzip2: Cannot exec: No such file or directory 错误
yum -y install bzip2
19.解决 configure: error: C++ preprocessor “/lib/cpp” fails sanity check 错误
yum install gcc-c++
20.解决 configure: error: Please reinstall the BZip2 distribution 错误
yum install bzip2 bzip2-devel
21.解决 configure: error: cURL version 7.15.5 or later is required to compile php with cURL support 错误
yum install curl-devel
22.解决 configure: error: not found. Please provide a path to MagickWand-config or Wand-config program 错误
yum install ImageMagick-devel
21.解决 configure: error: no acceptable C compiler found in $PATH 错误
yum install gcc
22.解决 configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met: 错误
yum install libicu-devel
23.解决 configure: error: Package requirements (sqlite3 > 3.7.4) were not met: No package ‘sqlite3’ found 错误
yum install sqlite-devel
24.解决 configure: error: Package requirements (oniguruma) were not met: No package ‘oniguruma’ found 错误
yum install oniguruma oniguruma-devel