《OpenShift / RHEL / DevSecOps 汇总目录》
说明
-
本文介绍如何将一个 CentOS 6.0 的系统升级并转换迁移到 RHEL 7.9。
-
本文是《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》阶进篇。
-
所有被测软件的验证操作可参见上述前文中对应章节的说明。
准备 CentOS 6.0 及其他被验证软件
下载 CentOS 和 RHEL 的 ISO 介质
下载 CentOS 6.0 、RHEL 6.10、RHEL 7.9 的 ISO 文件。
准备 CentOS 6.0
- 在测试 VM 中使用 ISO 安装 CentOS 6.0。注意:需要安装 X Windows System,并将网卡配置为开机启动。在安装完后的初始启动时配置窗口中关闭防火墙。
- 由于在下载被验证软件时很多网站已不支持 CentOS 6.0 的 TLS1.0 和 TLS1.1 协议,因此需要先用 RHEL 6.10 的介质单独升级 openssl。
- 先将 RHEL 6.10 的 ISO 分配给 VM 的第一个 IDE 光驱设备,然后再执行命令挂载 RHEL 6.10 到指定目录,最后创建 RHEL 6 的 Yum Repo。
$ mkdir /mnt/rhel6
$ mount /dev/sr0 /mnt/rhel6
$ cat > /etc/yum.repos.d/rhel6-local.repo << EOF
[rhel6-local-repo]
name = rhel6 local repo
baseurl=file:///mnt/rhel6
enabled=1
gpgcheck=0
EOF
- 执行命令升级 openssl。
$ yum update -y openssl
- 将 CentOS 6.0 的 ISO 挂载到主机中,然后依此创建 CentOS 6 的 Yum Repo。
$ umount /mnt/rhel6
$ mkdir /mnt/centos6
$ mount /dev/sr0 /mnt/centos6
$ cat > /etc/yum.repos.d/centos6-local.repo << EOF
[centos6-local-repo]
name = centos6 local repo
baseurl=file:///mnt/centos6
enabled=1
gpgcheck=0
EOF
docker 1.7.1
注意:由于 CentOS 6.0 发布的时间在 2011 年,因此没有找到 CentOS 6.0 上可用的 docker 安装包。以下 Docker 1.7.1 可在稍晚的 CentOS 6.x 中作为验证环境。
执行以下命令,安装 Docker 环境。
wget https://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/6/Packages/docker-engine-1.7.1-1.el6.x86_64.rpm --no-check-certificate
rpm -ivh docker-engine-1.7.1-1.el6.x86_64.rpm
service docker start
service docker status
jdk 1.5.0_22 + tomcat 4.1.40
安装
- 从以下链接下载 JDK 和 Tomcat 的安装文件到用户的默认目录下。
https://download.oracle.com/otn/java/jdk/1.5.0_22/jdk-1_5_0_22-linux-amd64.bin
https://archive.apache.org/dist/tomcat/tomcat-4/v4.1.40/bin/apache-tomcat-4.1.40.tar.gz - 在用户默认目录下安装 JDK 和 Tomcat。
cd ~
./jdk-1_5_0_22-linux-amd64.bin
tar -xvf apache-tomcat-4.1.40.tar.gz
- 修改 apache-tomcat-4.1.40/bin/setclasspath.sh 文件,在最前方增加 export JAVA_HOME=/YOUR/PATH/jdk1.5.0_22 的内容。
验证
- 启动 Tomcat。
~/apache-tomcat-4.1.40/bin/startup.sh
- 打开以下链接访问 Tomcat,可以测试 Examples。
http://<HOST-IP>:8080/
jdk 1.6.0_45 + weblogic 10.3.6
安装
- 从以下链接下载 JDK 和 WebLogic 的安装文件到用户的默认目录下。
https://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
https://download.oracle.com/otn/nt/middleware/11g/wls/1036/wls1036_generic.jar - 在用户默认目录下安装 JDK 和 WebLogic (WebLogic 安装过程略)。
cd ~
./jdk-6u45-linux-x64.bin
~/jdk1.6.0_45 -jar wls1036_generic.jar
验证
- 运行命令,启动 WebLogic 测试 Domain 环境。该 Domain 的管理员/密码是:weblogic/welcome1。
~/Oracle/Middleware/wlserver_10.3/samples/domains/medrec/bin/startWebLogic.sh
- 打开以下链接访问 WebLogic 上的测试应用。
http://<HOST-IP>:7011/medrec
mysql 5.1.47
- 执行命令,安装 CentOS 6.0 内置的 mysql 5.1.47。
yum install mysql
chkconfig mysqld on
service mysqld start
service mysqld status
- 参照前文登录 mysql,然后创建数据库、表并添加数据。
postgresql 8.4.4
- 执行命令,安装 CentOS 6.0 内置的 postgresql 8.4.4。
yum -y install postgresql postgresql-libs postgresql-plperl postgresql-plpython postgresql-server
service postgresql initdb
chkconfig postgresql on
service postgresql start
service postgresql status
- 参照前文登录 postgresql,然后创建用户、数据库、表并添加数据。
mongodb 4.2.25
- 执行命令,创建安装 mongodb 用的 Repo。
$ cat > /etc/yum.repos.d/mongodb.repo << EOF
[mongodb-org-4.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.2/x86_64/
gpgcheck=0
enabled=1
EOF
- 安装 mongodb。
yum install -y mongodb-org
service mongod start
service mongod status
- 参照前文向 mongodb 添加数据。
redis 3.2.8
说明:采用编译源码方式安装 redis。
- 安装编译环境。
yum install make gcc tcl -y
- 下载 redis 源码,然后编译。
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
tar -xvzf redis-3.2.8.tar.gz
cd redis-3.2.8
make
make install
- 使用默认配置安装 redis。
cd utils
./install_server.sh
service redis_6379 status
redis-cli --version
- 参照前文向 redis 添加数据。
rabbitmq 3.7.10
- 下载并安装 rabbitmq 及其依赖包。
wget --content-disposition "https://packagecloud.io/rabbitmq/erlang/packages/el/6/erlang-21.3.8.18-1.el6.x86_64.rpm/download.rpm?distro_version_id=27"
rpm -ivh erlang-21.3.8.18-1.el6.x86_64
wget https://www.rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/socat-1.7.1.3-1.el6.rf.x86_64.rpm --no-check-certificate
rpm -ivh socat-1.7.1.3-1.el6.rf.x86_64.rpm
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.10/rabbitmq-server-3.7.10-1.el6.noarch.rpm --no-check-certificate -O rabbitmq-server-3.7.10-1.el6.noarch.rpm
rpm -ivh rabbitmq-server-3.7.10-1.el6.noarch.rpm
- 启动 rabbitmq。
service rabbitmq-server start
service rabbitmq-server status
- 安装 rabbitmq 的管理控制台,并初始化用户。
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl add_user admin password
rabbitmqctl set_user_tags admin administrator
- 参照前文访问 rabbitmq 控制台。
Oracle 12.1.0.2
- 安装必要的依赖环境。
yum install compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libgcc libstdc++ libstdc++-devel libaio libaio-devel libXext libXtst libXau libxcb libXi make sysstat unixODBC unixODBC-devel compat-libcap1 -y
- 准备必要的用户、目录并分配权限。
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
passwd oracle
mkdir /u01
mkdir /u02
chown -R oracle:oinstall /u01
chown -R oracle:oinstall /u02
chmod -R 775 /u01
chmod -R 775 /u02
chmod g+s /u01
chmod g+s /u02
- 如果不用 DNS 解析,执行以下命令将主机名和 IP 添加到 /etc/hosts 中。
ifconfig | grep eth -A 2|grep "inet addr" | cut -d: -f2 | awk '{ print $1 "\t" "'''$HOSTNAME'''"}' >> /etc/hosts
- 准备安装介质。
unzip ~/V46095-01_1of2.zip -d /stage/
unzip ~/V46095-01_2of2.zip -d /stage/
chown -R oracle:oinstall /stage/
- 安装数据库并创建实例。说明:具体安装步骤可参见《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》的相关章节。
$ su - oracle
$ export DISPLAY=<CLIENT-HOST-IP>:0.0
$ /stage/database/runInstaller
- 参照前文访问 Oracle 实例,并查询测试表数据。
CentOS 6.0 到 RHEL 6.10 升级转换
安装 conver2rhel
convert2rhel v0.18 支持直接将 CentOS 6.0 升级并转换为 RHEL 6.10。
- 下载并安装 convert2rhel 依赖包。由于部分依赖包不在 CentOS 6.0 中,因此可以从 https://access.redhat.com/downloads/content/69/ver=/rhel—6/6.10/x86_64/packages 网站下载以下离线包,然后安装。
rpm -ivh ~/conver2rhel/python-six-1.9.0-2.el6.noarch.rpm
rpm -ivh ~/conver2rhel/virt-what-1.11-1.3.el6.x86_64.rpm
rpm -ivh ~/conver2rhel/m2crypto-0.20.2-7.el6.x86_64.rpm
rpm -ivh ~/conver2rhel/pexpect-2.3-6.el6.noarch.rpm
rpm -ivh ~/conver2rhel/python-decorator-3.0.1-3.1.el6.noarch.rpm
rpm -ivh ~/conver2rhel/python-dmidecode-3.10.12-1.el6.x86_64.rpm
- 下载并安装 convert2rhel。注意:由于 CentOS 6 已经停更,因此较新版的 convert2rhel 已不支持 CentOS 6 迁移转换了,为此本文使用了较早版本的 convert2rhel。另外较早的 convert2rhel 还支持一步操作完成 CentOS 版本升级 + RHEL 迁移转换。
wget https://github.com/oamg/convert2rhel/releases/download/v0.18/convert2rhel-0.18-1.el6.noarch.rpm -O ~/conver2rhel/convert2rhel-0.18-1.el6.noarch.rpm --no-check-certificate
rpm -ivh ~/conver2rhel/convert2rhel-0.18-1.el6.noarch.rpm
CentOS 6.0 到 RHEL 6.10 升级转换
- 将 RHEL 6.10 的 ISO 分配给 VM 的第一个 IDE 光驱设备,然后将其挂载到 /mnt/rhel6。
umount /mnt/centos6
mount /dev/sr0 /mnt/rhel6
- 查看升级转换前系统中各软件包的供应商。注意:convert2rhel 只转换由 CentOS 供应的软件。
rpm -qa --queryformat '%{vendor}:%{name}\n' | sort
- 执行命令将 CentOS 6.0 升级并转换到 RHEL 6.10。
convert2rhel --disable-submgr --enablerepo=rhel6-local-repo --no-rpm-va -y
- 完成后重启系统。
- 查看升级转换后系统中各软件包的供应商,确认 CentOS 都已变为 Red Hat, Inc.
rpm -qa --queryformat '%{vendor}:%{name}\n' | sort
验证
根据《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》验证各软件是否可正常使用。
注意:由于在准备环境过程中 postgresql 和 mysql 使用的是 CentOS 自带的软件,因此它们也会在 CentOS 升级过程中随之升级(postgresql 升级至 8.4.20,mysql 升级到 5.1.73)。而其他软件使用的是非 CentOS 自带软件,因此它们的版本不受 Linux 升级的影响。
RHEL6.10 到 RHEL7.9 升级
安装原地升级程序
- 从 https://access.redhat.com/downloads/content/69/ver=/rhel—6/6.10/x86_64/packages 下载以下原地升级程序相关的软件包到 ~/rhel6-rhel7-preupgrade/ 目录中。
preupgrade-assistant
preupgrade-assistant-el6toel7
preupgrade-assistant-el6toel7-data
redhat-upgrade-tool
fakeroot
fakeroot-libs
openscap
openscap-engine-sce
openscap-scanner
openscap-utils
pykickstart
redhat-rpm-config
rpm-build
rpmdevtools
- 确保当前只有 RHEL 6.10 的 Repo 有效,然后安装以上软件包。
mount /dev/sr0 /mnt/rhel6
mv /etc/yum.repos.d/centos6-local.repo /etc/yum.repos.d/centos6-local.repo.bak
yum localinstall ~/rhel6-rhel7-preupgrade/*
RHEL 6.10 到 RHEL 7.9 升级
- 将 RHEL 7.9 的 ISO 分配给 VM 的第一个 IDE 光驱设备,然后将其挂载到 /mnt/rhel7,最后创建 rhel7 的 Yum Repo。
$ umount /mnt/rhel6
$ mv /etc/yum.repos.d/rhel6-local.repo /etc/yum.repos.d/rhel6-local.repo.bak
$ mkdir /mnt/rhel7
$ mount /dev/sr0 /mnt/rhel7
$ cat > /etc/yum.repos.d/rhel7-local.repo << EOF
[rhel7-local-repo]
name = rhel7 local repo
baseurl=file:///mnt/rhel7
enabled=1
gpgcheck=0
EOF
- 执行预升级。
preupg
- 完成后可在 ~/preupgrade 中查看执行评估生成的相关文件。
$ ll ~/preupgrade
total 2104
drwxr-xr-x. 5 root root 4096 May 15 08:54 cleanconf
drwxr-xr-x. 2 root root 4096 May 15 08:53 common
drwxr-xr-x. 5 root root 4096 May 15 08:59 dirtyconf
drwxr-xr-x. 3 root root 4096 May 15 08:55 etc
drwxr-xr-x. 2 root root 4096 May 15 08:53 hooks
drwxr-xr-x. 2 root root 4096 May 15 09:00 kickstart
drwxr-xr-x. 2 root root 4096 May 15 08:55 noauto_postupgrade.d
drwxr-xr-x. 2 root root 4096 May 15 08:55 pkgdowngrades
drwxr-xr-x. 2 root root 4096 May 15 08:53 postmigrate.d
drwxr-xr-x. 14 root root 4096 May 15 09:00 postupgrade.d
drwxr-xr-x. 2 root root 4096 May 15 09:00 preupgrade-scripts
-rw-r--r--. 1 root root 642236 May 15 09:00 preupg_results-240515090037.tar.gz
-rw-r--r--. 1 root root 6383 May 15 08:53 README
-rw-r--r--. 1 root root 742570 May 15 09:00 result.html
-rw-r--r--. 1 root root 706045 May 15 09:00 result.xml
drwxr-xr-x. 16 root root 4096 May 15 08:54 RHEL6_7
- 打开 result.html 文件,可查看评估报告详细内容。
- 执行强制升级。
$ redhat-upgrade-tool --device /mnt/rhel7 --cleanup-post -f
setting up repos...
upgradedevice | 2.8 kB 00:00 ...
upgradedevice/primary | 2.1 MB 00:00 ...
getting boot images...
vmlinuz-redhat-upgrade-tool | 6.5 MB 00:00 ...
initramfs-redhat-upgrade-tool.img | 54 MB 00:00 ...
setting up update...
upgradedevice/filelists | 3.1 MB 00:00 ...
upgradedevice/productid | 1.6 kB 00:00 ...
testing upgrade transaction
rpm transaction 100% [===========================================================================================================]
rpm install 100% [===============================================================================================================]
setting up system for upgrade
Finished. Reboot to start upgrade.
[root@c2r-demo ~]# reboot
Broadcast message from root@c2r-demo
(/dev/pts/0) at 8:11 ...
The system is going down for reboot NOW!
- 升级准备好后系统会自动重启进行升级操作,升级完成后还会重启一次。
验证
根据《在离线环境中将 CentOS 7.X 原地升级并迁移至 RHEL 7.9》验证各软件是否可正常使用。
注意:由于 postgresql 和 mysql 使用的是 CentOS 自带的软件,它们会在 CentOS 升级过程中版本随之升级,因此可能需要进行以下单独处理。而其他软件使用的是非 CentOS 自带软件,因此它们的版本不受 Linux 升级的影响。
mysql
注意:RHEL6.10 内置的 mysql 5.1.73 在升到 RHEL 6.10 后会被升级到社区版 mariadb 5.5.68。
- 启动 mariadb 服务。
systemctl status mariadb
systemctl start mariadb
- 参照前文 mysql 部分,先登录 mariadb 实例,然后查询测试表数据。
postgresql
注意:在从 RHEL 6.10 升级到 RHEL 7.9 后,postgresql 程序的版本会从 8.4.4 升级到 9.2.24。在升级后还需手动对数据库格式进行单独的升级。
- 下载 postgresql 9.2.24 的升级程序包。
wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/postgresql-upgrade-9.2.24-4.el7_8.x86_64.rpm
yum localinstall postgresql-upgrade-9.2.24-4.el7_8.x86_64.rpm
- 对 postgresql 数据库进行升级,然后启动 postgresql 即可。
postgresql-setup upgrade
systemctl start postgresql
systemctl status postgresql
- 参照前文 postgresql 部分,查询测试表数据。
问题处理
在从 CentOS 6.10 转换到 RHEL 7.9 的过程中,如果没做预检查,转换重启后用户登录可能会遇到以下错误:
grep: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
原因请参考 https://access.redhat.com/solutions/5565431。执行以下命令将 grep 的版本降到 2.20-3 即可解决该问题。
$ yum downgrade /mnt/rhel7/Packages/grep-2.20-3.el7.x86_64.rpm
参考
https://www.oracle.com/java/technologies/javase/products-doc-jdk8-jre8-certconfig.html
https://www.oracle.com/java/technologies/jdk-jre-7-cs-config.html
https://www.oracle.com/java/technologies/system-configurations.html
https://www.oracle.com/java/technologies/javase/system-configurations.html