如何本地安装Alibaba Cloud Linux

简介: 阿里云镜像 本地化 物理机 虚拟机 优化 qemu-img

一、为何需要本地安装Alibaba Cloud Linux?

据说:CentOS 官网正式宣布,将停止维护 CentOS Linux,并将更多资金和人力投入到 CentOS Stream 中。CentOS Linux 8 将在 2021 年底停止维护,CentOS Linux 7 将在 2024 年 6 月底停止维护(https://access.redhat.com/announcements/5634831)。


很多在本地CentOS系统中测试的项目,最终会上线到阿里云。虽然阿里云镜像有CentOS的若干版本、有具有性能优势且兼容前者的Alibaba Cloud Linux的若干版本,但线上线下两端操作系统的细微差异、源差异,还是会给运维多少带来一些混乱。随着CentOS未来可能不靠谱,将有阿里官方长期支持维护的Alibaba Cloud Linux本地化安装,是个不错的选择。


二、Alibaba Cloud Linux资源

Alibaba Cloud Linux产品页Alibaba Cloud Linux 2Alibaba Cloud Linux 3,这些丰富的官方文档,介绍了其产品优势和功能、应用场景、产品动态、文档与工具,但官方只给出了KVM虚拟机的本地化步骤:在本地使用Alibaba Cloud Linux 2镜像在本地使用Alibaba Cloud Linux 3镜像。下面给出在本地物理实体机安装Alibaba Cloud Linux的方法。此方法适当修改也可用于各种版本的虚拟机。


首先在https://mirrors.aliyun.com/alinux/image/下载Alibaba Cloud Linux镜像,选型为aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2,也即阿里云长期支持版的基础镜像,此文写作时为20210726。

image.png


三、本地化安装Alibaba Cloud Linux的步骤


1)安装在物理实体机

思路说明,将镜像打包至现成的linux live cd或者rescue cd,在rescue模式下像ghost或win的WIM一样,用dd做目的盘恢复。


1、阿里云官方镜像qcow2格式转换

可使用qemu-img,我为Win工作台,下载地址为https://cloudbase.it/qemu-img-windows/。Linux或macOS环境可在线安装。转换命令:

qemu-img convert -f qcow2 aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -O raw aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw

此格式即dd if/of的格式。


2、制作安装盘

aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw有20G。将20G文件打包到安装盘,若不用U盘而是刻录光盘,光盘容量不够,即便容量不是问题,也不利分发,所以应该无损收缩(shrink)该文件。


我尝试过三种可能,或失败或其它原因放弃(提及这些,供有意者参考):

压缩再dd:

gzip -dv aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw.gz | dd of=/dev/sda bs=256M

gzip需要20G空间才能完整解压缩,而安装盘无论U盘还是光盘还是挂载.iso都为模拟CDROM,引导后tmpfs只有2G


安装盘集成qemu-img后转换镜像和写盘:

qemu-img convert aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -O raw /dev/sda

现成的linux live或rescue环境一般都缺乏qemu-img及其运行库,集成过程繁琐,放弃。


resize2fs aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw 2.41G

raw文件里,系统实际只占用2.41G,其余为用00或random填充的稀疏(sparse)空间,系统和稀疏并非泾渭分明的连续存储,而是碎片状态,见下图:

01.png

resize2fs会按命令行给定的参数无脑截断,这无疑会导致系统数据丢失。

若将系统和稀疏碎片整理,或许resize2fs截断后不会丢失数据。我未作验证。


成功的方法

用某种磁盘工具调整分区。

也即碎片整理使raw文件里的系统和稀疏分离的过程。我用的是Diskgenius。linux下可用GParted。

2.png

红框:可见系统实际只占用了2.41G。

蓝框:aliyun_2_1903_x64_20G_nocloud_alibase_20210726这个版本,无损调整后的扇区极限是5058007。此数值后续有用。

绿框:分区前空间992K调整,否则磁盘恢复后的系统将不可引导。

注意:此时raw文件仍然是20G。因为raw此时是挂载的虚拟磁盘,做虚拟磁盘的参数修改,扇区截止至5058007,对文件本身大小无影响。


用truncate截断获得无损收缩后的raw文件。

将调整分区后raw文件传至可用的linux系统,执行截断:

truncate --size=$[(5058007+1)*512] aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw

+1是因为扇区从0开始计数;512是因为每扇区512字节。

据说win系统api有fileapi.h的SetEndOfFile功能也可截断,我未尝试。


无损收缩后的raw文件(2.41G)打包至linux live或rescue cd。

我选用CentOS-7-x86_64-NetInstall-2009.iso因为CentOS7同Alibaba Cloud Linux兼容性最好。打包后最终安装盘文件为3.03G。打包.iso的工具很多,随喜。

03.png


3、用此安装盘安装系统

是否刻录U盘、光盘,随喜。以下我用虚拟机模拟物理实体机。真实环境操作雷同。


建立有空硬盘的虚拟机,cd挂载CentOS-7-x86_64-NetInstall-2009-aliyun20210726.iso,BIOS选择cd启动。


借用CentOS7安装盘功能,从Troubleshooting进入Rescue模式。

04.png

选择硬盘没有挂载的shell,即3


挂载安装盘,恢复系统。依次执行

mkdir /mnt/cdrom

mount /dev/cdrom /mnt/cdrom

dd if=/mnt/cdrom/aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw of=/dev/sda bs=256M

05.png

输出为sda而不是sda1,因为raw是磁盘镜像而非分区镜像;256M可根据主机内存大小调整,我为2G。如图可见恢复速度和时间。


将系统所在的sda1分区,扩展至主机硬盘实际可用的空间大小。否则,sda1分区将是raw的2.4G。

可用fdisk删建大法:

fdisk /dev/sda,依次dn、回车4次选择默认、w

(我没有4T以上硬盘,估计在GPT分区就是用gdisk,或者通用的parted,同理删建操作

06.png

e2fsck -f /dev/sda1

resize2fs /dev/sda1

07.png

重启系统使如上修改生效。


选择硬盘挂载到目录的shell,1

切换根:chroot /mnt/sysimage

在/boot下创建initramfs文件:

cd boot

dracut -f initramfs-4.19.91-24.1.al7.x86_64.img 4.19.91-24.1.al7.x86_64

修改root登录口令:passwd root,两次输入无回显口令;

使用户可以口令登录:sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config

重启,用本地硬盘引导。

8.png

说明:

Alibaba Cloud Linux系统本来设计为根据用户在阿里云平台购买ECS时提交的信息(如机器名、口令、cpu和内存)生成元数据,通过cloud-init-local、dracut-initqueue初始化操作系统的环境。我们不需要这些元数据,所以做如上操作,手动创建initramfs文件、生成root口令且使其可登录。知其目的,这些操作亦可随喜改变。

如第⑤完成后可直接重启,如下操作,

09.png

rw init=/bin/bash crashkernel=auto

这样也可进入系统。


4、优化系统

进入系统后的操作与CentOS或Alibaba Cloud Linux相同,配置网络

vi /etc/sysconfig/network-scripts/ifcfg-eth0

BOOTPROTO = static

IPADDR =

GATEWAY =

NETMASK =

DNS1 =

systemctl restart network

systemctl restart sshd 之后即可远程。

10.png

我这里无软驱出现报错,禁用即可:

echo "blacklist floppy" | tee /etc/modprobe.d/blacklist-floppy.conf

除此,网上搜来停用和删除云上才有有关服务:

/usr/local/share/assist-daemon/assist_daemon --stop

/usr/local/share/assist-daemon/assist_daemon --delete

rm -rf /usr/local/share/assist-daemon

wget http://update.aegis.aliyun.com/download/uninstall.sh

chmod +x uninstall.sh

./uninstall.sh

wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh

chmod +x quartz_uninstall.sh

./quartz_uninstall.sh

pkill aliyun-service

rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service

rm -rf /usr/local/aegis*

sudo systemctl stop aegis.service

sudo systemctl disable aegis.service

sudo rm /lib/systemd/system/aegis.service

sudo systemctl stop aliyun.service

sudo systemctl disable aliyun.service

sudo rm /lib/systemd/system/aliyun.service

sudo systemctl stop agentwatch.service

sudo systemctl disable agentwatch.service

sudo rm /lib/systemd/system/agentwatch.service

sudo systemctl stop accounts-daemon.service

sudo systemctl disable accounts-daemon.service

sudo rm /lib/systemd/system/accounts-daemon.service

sudo systemctl stop aliyun-util.service

sudo systemctl disable aliyun-util.service

sudo rm /etc/systemd/system/aliyun-util.service

sudo systemctl stop cloud-config.service

sudo systemctl disable cloud-config.service

sudo rm /lib/systemd/system/cloud-config.service

sudo systemctl stop cloud-final.service

sudo systemctl disable cloud-final.service

sudo rm /lib/systemd/system/cloud-final.service

sudo systemctl stop cloud-init-local.service

sudo systemctl disable cloud-init-local.service

sudo rm /lib/systemd/system/cloud-init-local.service

sudo systemctl stop cloud-init-upgrade.service

sudo systemctl disable cloud-init-upgrade.service

sudo rm /lib/systemd/system/cloud-init-upgrade.service

sudo systemctl stop cloud-init.service

sudo systemctl disable cloud-init.service

sudo rm /lib/systemd/system/cloud-init.service

sudo systemctl stop kdump.service

sudo systemctl disable kdump.service

systemctl daemon-reload

systemctl reset-failed

重启后,systemd-analyze blame看看效果。


2)安装在虚拟

上面是用虚拟机模拟物理实体机,现在也是虚拟机,区别在于创建硬盘的模式。前者是空白硬盘、裸机启动安装盘;后者是将阿里云镜像转换成虚拟机硬盘格式,以此为系统硬盘的启机。


1、vm workstation

qemu-img.exe convert -f qcow2 aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -O vmdk aliyun_2_1903_x64_20G_nocloud_alibase_20210726.vmdk

创建虚拟机时使用这个文件作为现成硬盘启机即可


2、qemu-kvm

阿里云镜像发布即为qemu-kvm格式,直接启机即可。

qemu-system-x86_64 -accel hax -name alinux -m 2048M -smp 1 -hda aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -cdrom CentOS-7-x86_64-NetInstall-2009.iso -boot c -vga std -net nic -nic tap,ifname=tap0

注意:-accel hax是win平台对qemu的加速器,可参考https://github.com/intel/haxm 其他系统无此参数。


3、Hyper-V

按理应该qemu-img convert -f qcow2 aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -O vhdx aliyun_2_1903_x64_20G_nocloud_alibase_20210726.vhdx

或者

qemu-img convert -f qcow2 aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2 -O vpc aliyun_2_1903_x64_20G_nocloud_alibase_20210726.vhd

转换成功后创建虚拟机时使用这个文件作为现成硬盘启机,并没有成功,解决方法见下面4、ESXi


4、ESXi

qemu-img转换的vmdk在esxi启机并未成功,在vm workstation启机正常的vmdk再转换兼容esxi,启机也未成功。后来我找到了StarWind V2V Converter

11.png

先按"1、vm workstation"将qcow2转换成的vmdk,如上图"Local file"选定此vmdk,按此软件操作向导即可向远程ESXi或Hyper-V直接部署生成虚拟机。

image.png

此软件还支持Azure和AWS,我未测试。


5、virtualbox、parallels…

未测试。虚拟机有很多选择,每种虚拟机有很多版本,支持的虚拟硬盘格式各不相同,还有叫做growable或thin的模式,这涉及远程部署时文件大小的传输耗时问题……总之都是把阿里云原始qcow2文件用适合的工具软件做格式转换的问题,参考如上举一反三。


BTW,我的win平台下,Hyper-V性能最好。


6、生成虚拟机后

操作步骤同三-1)-3-⑥和4,略。


四、完

纠正排错和更优化合理的方案请发arkue@qq


相关文章
|
16天前
|
Linux 测试技术 网络安全
Linux系统之安装OneNav个人书签管理器
【10月更文挑战第19天】Linux系统之安装OneNav个人书签管理器
37 5
Linux系统之安装OneNav个人书签管理器
|
18天前
|
监控 Java Linux
Linux系统之安装Ward服务器监控工具
【10月更文挑战第17天】Linux系统之安装Ward服务器监控工具
41 5
Linux系统之安装Ward服务器监控工具
|
20天前
|
JSON JavaScript Linux
Linux系统之安装cook菜谱工具
【10月更文挑战第15天】Linux系统之安装cook菜谱工具
33 2
Linux系统之安装cook菜谱工具
|
13天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
35 2
|
14天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
24 3
|
3天前
|
关系型数据库 MySQL Linux
Linux-安装Mariadb
本文介绍了在 Alibaba Cloud Linux 系统上安装和配置 MariaDB 10.5 的步骤。包括下载安装、初始化数据库、启动服务、处理启动失败的常见问题(如权限问题),以及如何连接数据库、设置密码和允许外部连接。通过这些步骤,您可以顺利完成 MariaDB 的安装和基本配置。
12 0
|
16天前
|
Linux 网络安全 虚拟化
适用于Linux的Windows子系统(WSL1)的安装与使用记录
并放到启动文件夹,就可以开机自动启动了。
20 0
|
5月前
|
NoSQL Java Linux
linux 安装 neo4j简介
Neo4j是高性能NoSQL图形数据库,利用图结构存储数据。推荐使用JDK 11配合Neo4j 3.x版本。下载3.5.9版,通过`curl`命令在Linux上获取tar.gz文件,然后解压。配置`neo4j.conf`,调整内存设置,开启远程访问。执行`./bin/neo4j start`启动,通过`http://服务器IP:7474`访问,默认凭据是username: neo4j, password: neo4j,登录后应更改密码。
475 1
|
存储 缓存 Ubuntu
【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介(二)
【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介(二)
209 0
|
Ubuntu 安全 Unix
【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介(一)
【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介(一)
257 0
下一篇
无影云桌面