[TOC]

0. CentOS镜像源

官方镜像列表状态地址:

建议使用阿里云的源其他发行版等同: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进行删除软件,因为他会删除多余得依赖程序,导致意外发生(运维必须注意)


1. CentOS7.x内核升级流程

系统环境:CentOS Linux release 7.6.1810 (Core)
升级原因:在使用 Docker 时发现其对 Linux 内核版本的最低要求是 3.10(这也刚好是 CentOS 7.6 的内核版本),但是在这个版本上有部分功能无法实现。
注:对于线上环境的内核版本还需要根据实际情况谨慎选择,越新的版本未来可能遇到的问题越多;

Linux 内核分两种:

  • 官方内核(通常是内核开发人员用)https://www.kernel.org/
  • 各大 Linux 发行版内核(一般用户常用)

CentOS和Fedora都是基于Redhat的常见Linux分支。

  • CentOS是目前企业级服务器的常用操作系统
  • Fedora则主要面向个人桌面用户

关于内核版本的定义:
版本性质:主分支ml(mainline),稳定版(stable),长期维护版lt(longterm),内核预发行版(内核预发行版本)

版本命名格式为 :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. 首先更新仓库
yum -y update

方法1:
#2. 启用 ELRepo 仓库
#ELRepo 仓库是基于社区的用于企业级 Linux 仓库,提供对 RedHat Enterprise (RHEL) 和 其他基于 RHEL的 Linux 发行版(CentOS、Scientific、Fedora 等)的支持。
#ELRepo 聚焦于和硬件相关的软件包,包括文件系统驱动、显卡驱动、网络驱动、声卡驱动和摄像头驱动等。
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
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源

#仓库启用后,你可以使用下面的命令列出可用的内核相关包,如下图:
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
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

#上图可以看出长期维护版本lt为4.4,最新主线稳定版ml为5.0,我们需要安装最新的主线稳定内核,使用如下命令:(以后这台机器升级内核直接运行这句就可升级为最新稳定版)
yum -y --enablerepo=elrepo-kernel install kernel-ml.x86_64 kernel-ml-devel.x86_64
#--enablerepo 选项开启 CentOS 系统上的指定仓库
#默认开启的是 elrepo,这里用 elrepo-kernel 替换。

方法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/

将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

方法3:
还可以通过源码包编译安装,这种方式可定制性强,但也比较复杂,有需要的可自行查找资料安装,下面只给出各系统版本内核源码包的下载地址:https://www.kernel.org/pub/linux/kernel/

#3. 修改grub中默认的内核版本:
#内核升级完毕后,目前内核还是默认的版本,如果此时直接执行reboot命令,重启后使用的内核版本还是默认的3.10,不会使用新的4.12.4,首先,我们可以通过命令查看默认启动顺序:

$ sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
CentOS Linux (5.0.10-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-a43cc2091b4557f1fd10a52ccffa5db2) 7 (Core)

#由上面可以看出新内核(5.0.10)目前位置在0,原来的内核(3.10.0)目前位置在1,所以如果想生效最新的内核,还需要我们修改内核的启动顺序为0:
vim /etc/default/grub #或者采用 sudo grub2-set-default 0 命令
GRUB_DEFAULT = 0

#注:Centos 6 更改的文件相同,使用命令确定新内核位置后,然后将参数default更改为0即可。
# 接着运行grub2-mkconfig命令来重新创建内核配置,如下:
grub2-mkconfig -o /boot/grub2/grub.cfg

# 4. 修改grub中默认的内核版本:
reboot

#5. 删除旧内核(可选)
内核有两种删除方式:通过 yum remove 命令或通过 yum-utils 工具。

# rpm -qa | grep kernel #删除旧内核的 RPM 包
yum remove [上面查询出来得包]

#如果安装的内核不多于 3 个,yum-utils 工具不会删除任何一个。只有在安装的内核大于 3 个时,才会自动删除旧内核。
yum install yum-utils #安装工具
package-cleanup --oldkernels #删除工具

WeiyiGeek.grub


2. CentOS7.x网卡名称更改

系统环境: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]ata1 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. 脚本更改
    #!/bin/bash
    #
    function RENMAE_NIC()
    {
    4local _NICNAME=$(ip addr | grep "^2"|awk -F ": " '{print $2}')
    4if [[ ${_NICNAME} != "eth0" ]];then
    44echo -e "\e[40;31m The nic name is [\e[40;31m${_NICNAME}\e[40;31m].\n\e[0m Rename nic name to 'eth0'.\e[0m"
    44sed -i 's/dhcp/static/g' /etc/sysconfig/network-scripts/ifcfg-${_NICNAME}
    44sed -i s/"^NAME=.*$"/"NAME=eth0"/g /etc/sysconfig/network-scripts/ifcfg-${_NICNAME}
    44sed -i s/"^DEVICE=.*$"/"DEVICE=eth0"/g /etc/sysconfig/network-scripts/ifcfg-${_NICNAME}
    44sed -i '/IPV6/d' /etc/sysconfig/network-scripts/ifcfg-${_NICNAME}
    44mv /etc/sysconfig/network-scripts/ifcfg-${_NICNAME} /etc/sysconfig/network-scripts/ifcfg-eth0
    44sed -i s/'rhgb quiet"$'/'net.ifnames=0 biosdevname=0 rhgb quiet"'/g /etc/default/grub
    44grub2-mkconfig -o /boot/grub2/grub.cfg
    44echo -e "\e[32m The nic name has renamed.\n Rstart Now.\e[0m"
    44reboot
    4fi
    4unset local _NICNAME
    }
    RENMAE_NIC

注意事项:

  • 如果没有”配置-4添加设备规则配置文件”这步,其他不变,系统重启后将使用eth0、eth1、eth2、…这样的网卡名,此时系统会尝试启动配置文件(eno16等)描述的网卡,但网卡不存在,这些网卡将启动失败,并且开机后无法重启网络,提示failed to start lsb:bring up/down巴拉巴拉~
  • /etc/sysconfig/network-scripts这里目录里的网卡配置文件不要有多余的,每个ifcfg-xxxx对应且仅对应一个网卡,否则容易造成重启网络失败,提示failed to start lsb:bring up/dow

3. CentOS7.x密码忘记更改

方式1:

  • Step1.在GURB界面按 e 键
  • Step2.拉到底部在 “LANG=zh_cn.UTF-8“ 同行后面加上“init=/bin/sh
  • Step3.按Ctrl+X进入“单用户模式”,并且挂载 / mount -o remount ,rw /
  • Step4.执行passwd root重新设置Root密码
  • Step5.创建文件标签.autorelabel:touch /.autorelabel
  • Step6.并退出执行exit or reboot;

WeiyiGeek.


方式2:

  • 1.开机后在选择菜单时按下e进入编辑模式
  • 2.选择 linux16 /vmlinuz-0-resuce 这一行在行末尾添加 rd.break
  • 3.执行 Ctrl+x 进入单用户shell模式
  • 4.重新设置root密码的shell命令
    • 重新挂载根目录为读写模式 mount -o remount, rw /sysroot
    • 切换到系统真正的根目录下 chroot /sysroot
    • 修改密码 passwd root
    • 创建文件标签.autorelabel:touch /.autorelabel
    • 退出编辑模式 exit(2次)
  • 5.然后系统自动重启,使用新密码重新登录;

WeiyiGeek.centos7密码重置