Red Hat Enterprise Linux(RHEL)是一个由Red Hat开发的商业市场导向的Linux发行版,Red Hat Enterprise Linux 常被简称为 RHEL. 据IDC统计,到2018年,服务器操作系统市场份额达到33.4%. 目前,在中国大陆市场,RHEL主要为跨国企业或者外资在使用,其他很多企业都始终把CentOS (Community Enterprise Operating System) Linux为红帽系主要操作系统,但红帽于2020年12月8号突然调整商业策略,将CentOS Linux切换为CentOS Stream ,这直接导致CentOS与RHEL上下游关系发生调换,同时由于CentOS Stream不会有固定大版本发布, 虽然后续有Rocky Linux等迅速创建,但是大家应该都知道这里面的影响在哪里,是不是新创建一个版本就能很快解决的,这里我也不再赘叙。
基于以上背景,本文将仅从技术角度讲述如何通过自定义镜像方法将RHEL7.9和RHEL8.2/8.3导入腾讯公有云平台,同时在此声明本篇文章将不涉及任何商业考虑,同时也非官方手册,仅作为自己研究和学习参考。
1.一台带有KVM(Kernel-based Virtual Machine)的Linux环境 (我使用的Mac安装VMware Fushion 再虚拟Fedora 33环境)或者任何可以x86虚拟机都行, 这个不重要,不嫌麻烦的话,理论上 可用任何虚拟机,最后转换格式就行,我怕麻烦,直接用了KVM
2.一个有效的腾讯云账号,激活了腾讯云对象存储并且已经创建了存储桶,不然你无法创建实例做测试。
3.一个有效的红帽ID和有效的订阅 - 最少应该包含RHEL Standard订阅,不管是NFR还是Self supported或者花真金白银买的订阅。
1.不管用什么办法,搞到一个虚拟环境最好带有KVM的,因为本文以KVM为例
2.创建虚拟机,使用下载好的RHEL镜像,存储为qcow2 单文件,RHEL7 分配5G,RHEL8 分配10G (少于10安装失败),不要跟自己过不去,搞太大,上传会浪费时间,存储会浪费money,当然虽然qcow2,vhd,vmdk,raw其实都可以得到支持,但我更喜欢qcow2。
3.安装使用minimal,不需要搞GUI(RHEL8默认会选择GUI,RHEL7默认就是minimal)
4.进入系统开始常规性检查,具体步骤见 https://cloud.tencent.com/document/product/213/17814 ,虽然有官方文档,但我还是要重复一次.
1)检查 OS 分区和启动方式
# parted -l /dev/sda | grep 'Partition Table'
2)执行以下命令,检查操作系统是否以 EFI 方式启动
#ls /sys/firmware/efi
主要为以下文件(默认情况下,RHEL7和RHEL8基本不会有什么问题),确保没有使用磁盘名(如/dev/sda1)挂载的
卸载会产生冲突的驱动和软件(包括 VMware tools,Xen tools,Virtualbox GuestAdditions 以及一些自带底层驱动的软件),如果使用KVM,基本可以忽略这些。
5)检查 virtio 驱动
Step 1: 检查内核是否支持:
#grep -i virtio /boot/config-$(uname -r)
#lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
在RHEL7.9上,会符合条件,返回如下:
很不幸,在RHEL 8.2/8.3上,默认情况,你看不到跟RHEL7.9 一样的情况,需要手动添加,新建/etc/dracut.conf.d/virtio.conf,添加如下内容:
add_drivers+="virtio_scsi virtio_blk virtio_net virtio_console"
然后执行如下命令:
# dracut -f
以上命令会创建新的initramfs(不要被官网那些什么编译内核的步骤吓唬到,没那么恐怖)
在这里,我跟官方文档有一些不同意见,当然这仅代表我个人观点, 如果使用源码包或者所谓绿色软件方法安装, 我想最少会存在以下两个问题:
所以在这里,我的观点是使用RHEL标准仓库自带的cloud-init,而不是什么源码的办法,至于具体安装办法很简单,使用订阅,注册到红帽CDN,直接使用yum install -y cloud-init安装最新的cloud-init,安装完成后,创建以下用户
# useradd syslog
然后可以再使用官网提供的cloud.cfg去替换初始文件,并且运行一下命令,激活开机启动:
#systemctl enable cloud-init-local.service
#systemctl enable cloud-init.service
#systemctl enable cloud-config.service
#systemctl enable cloud-final.service
7)更改网络端口到eth0
Step 1: 打开/etc/default/grub, 在GRUB_CMDLINE_LINUX行尾添加:
net.ifnames=0 biosdevname=0
注意:黑石服务器2.0 可能需要更改以下配置:
GRUB_CMDLINE_LINUX=“console=ttyS0,115200 net.ifnames=0 biosdevname=0”
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
Step 2: 重新编译grub启动配置
# grub2-mkconfig -o /boot/grub2/grub.cfg
Step 3: 打开/etc/sysconfig/network-scripts/ifcfg-xxx,修改如下:
NAME="eth0"
DEVICE="eth0"
保存,同时修改/etc/sysconfig/network-scripts/ifcfg-xxx到/etc/sysconfig/network-scripts/ifcfg-eth0,到此,系统基本修改完毕,关机.
8)上传镜像到对象存储cos
上传之前,确保你已经激活cos和创建一个桶,直接找到/var/lib/libvirt/images/xxx.qcow2文件然后上传到桶内,上传完毕后,直接获取URL
9) 导入镜像
云服务器->镜像->导入镜像
注意:
点击下一步后,稍等片刻,会提示是否导入成功,如导入失败,可以参看这里,进行对照
https://cloud.tencent.com/document/product/213/4945
10) 创建实例验证,导入完成后,可以直接创建实例验证
总结:整体来说,使用自定义镜像导入镜像到腾讯云较为简单,实现方法也很多种,本文仅仅提供一些基础的步骤,供大家在无聊之余,导入RHEL镜像到腾讯云平台进行尝试.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。