天天看点

如何本地安装Alibaba Cloud Linux

一、为何需要本地安装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 2

Alibaba 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。

如何本地安装Alibaba Cloud Linux

三、本地化安装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)空间,系统和稀疏并非泾渭分明的连续存储,而是碎片状态,见下图:

如何本地安装Alibaba Cloud Linux

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

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

成功的方法:

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

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

如何本地安装Alibaba Cloud Linux

红框:可见系统实际只占用了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的工具很多,随喜。

如何本地安装Alibaba Cloud Linux

3、用此安装盘安装系统

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

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

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

如何本地安装Alibaba Cloud Linux

③选择硬盘没有挂载的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

如何本地安装Alibaba Cloud Linux

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

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

可用fdisk删建大法:

fdisk /dev/sda

,依次

d

n

、回车4次选择默认、

w

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

如何本地安装Alibaba Cloud Linux

e2fsck -f /dev/sda1

resize2fs /dev/sda1

如何本地安装Alibaba Cloud Linux

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

⑥选择硬盘挂载到目录的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

重启,用本地硬盘引导。

如何本地安装Alibaba Cloud Linux

说明:

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

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

如何本地安装Alibaba Cloud Linux

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

之后即可远程。

如何本地安装Alibaba Cloud Linux

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

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
如何本地安装Alibaba Cloud Linux

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

如何本地安装Alibaba Cloud Linux

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

5、virtualbox、parallels…

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

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

6、生成虚拟机后

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

四、完

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