如何本地安装Alibaba Cloud Linux

如何本地安装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的方法。此方法适当修改也可用于各种版本的虚拟机。首先在Alibaba Cloud Linux 2 On-premise Image下载Alibaba Cloud Linux镜像选型为aliyun_2_1903_x64_20G_nocloud_alibase_20210726.qcow2也即阿里云长期支持版的基础镜像此文写作时为20210726。三、本地化安装Alibaba Cloud Linux的步骤1)安装在物理实体机思路说明将镜像打包至现成的linux live cd或者rescue cd在rescue模式下像ghost或win的WIM一样用dd做目的盘恢复。1、阿里云官方镜像qcow2格式转换可使用qemu-img我为Win工作台下载地址为qemu-img for WIndows - Cloudbase Solutions。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)该文件。我尝试过三种可能或失败或其它原因放弃提及这些供有意者参考①压缩再ddgzip -dv aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw.gz | dd of/dev/sda bs256Mgzip需要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.41Graw文件里系统实际只占用2.41G其余为用00或random填充的稀疏(sparse)空间系统和稀疏并非泾渭分明的连续存储而是碎片状态见下图而resize2fs会按命令行给定的参数无脑截断这无疑会导致系统数据丢失。若将系统和稀疏做碎片整理或许resize2fs截断后不会丢失数据。我未作验证。成功的方法①用某种磁盘工具调整分区。也即碎片整理使raw文件里的系统和稀疏分离的过程。我用的是Diskgenius。linux下可用GParted。红框可见系统实际只占用了2.41G。蓝框aliyun_2_1903_x64_20G_nocloud_alibase_20210726这个版本无损调整后的扇区极限是5058007。此数值后续有用。绿框分区前空间992K不要调整否则磁盘恢复后的系统将不可引导。注意此时raw文件仍然是20G。因为raw此时是挂载的虚拟磁盘做虚拟磁盘的参数修改扇区截止至5058007对文件本身大小无影响。②用truncate截断获得无损收缩后的raw文件。将调整分区后raw文件传至可用的linux系统执行截断truncate --size$[(50580071)*512] aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw1是因为扇区从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的工具很多随喜。3、用此安装盘安装系统是否刻录U盘、光盘随喜。以下我用虚拟机模拟物理实体机。真实环境操作雷同。①建立有空硬盘的虚拟机cd挂载CentOS-7-x86_64-NetInstall-2009-aliyun20210726.isoBIOS选择cd启动。②借用CentOS7安装盘功能从Troubleshooting进入Rescue模式。③选择硬盘没有挂载的shell即3④挂载安装盘恢复系统。依次执行mkdir /mnt/cdrommount /dev/cdrom /mnt/cdromdd if/mnt/cdrom/aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw of/dev/sda bs256M输出为sda而不是sda1因为raw是磁盘镜像而非分区镜像256M可根据主机内存大小调整我为2G。如图可见恢复速度和时间。⑤将系统所在的sda1分区扩展至主机硬盘实际可用的空间大小。否则sda1分区将是raw的2.4G。可用fdisk删建大法fdisk /dev/sda依次d、n、回车4次选择默认、w。我没有4T以上硬盘估计在GPT分区就是用gdisk或者通用的parted同理删建操作e2fsck -f /dev/sda1resize2fs /dev/sda1重启系统使如上修改生效。⑥选择硬盘挂载到目录的shell即1切换根chroot /mnt/sysimage在/boot下创建initramfs文件cd bootdracut -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系统本来设计为根据用户在阿里云平台购买ECS时提交的信息(如机器名、口令、cpu和内存)生成元数据通过cloud-init-local、dracut-initqueue初始化操作系统的环境。我们不需要这些元数据所以做如上操作手动创建initramfs文件、生成root口令且使其可登录。知其目的这些操作亦可随喜改变。如第⑤完成后可直接重启如下操作rw init/bin/bash crashkernelauto这样也可进入系统。4、优化系统进入系统后的操作与CentOS或Alibaba Cloud Linux相同配置网络vi /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO staticIPADDR GATEWAY NETMASK DNS1 systemctl restart networksystemctl restart sshd之后即可远程。我这里无软驱出现报错禁用即可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 --deleterm -rf /usr/local/share/assist-daemonwgethttp://update.aegis.aliyun.com/download/uninstall.shchmod x uninstall.sh./uninstall.shwgethttp://update.aegis.aliyun.com/download/quartz_uninstall.shchmod x quartz_uninstall.sh./quartz_uninstall.shpkill aliyun-servicerm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-servicerm -rf /usr/local/aegis*sudo systemctl stop aegis.servicesudo systemctl disable aegis.servicesudo rm /lib/systemd/system/aegis.servicesudo systemctl stop aliyun.servicesudo systemctl disable aliyun.servicesudo rm /lib/systemd/system/aliyun.servicesudo systemctl stop agentwatch.servicesudo systemctl disable agentwatch.servicesudo rm /lib/systemd/system/agentwatch.servicesudo systemctl stop accounts-daemon.servicesudo systemctl disable accounts-daemon.servicesudo rm /lib/systemd/system/accounts-daemon.servicesudo systemctl stop aliyun-util.servicesudo systemctl disable aliyun-util.servicesudo rm /etc/systemd/system/aliyun-util.servicesudo systemctl stop cloud-config.servicesudo systemctl disable cloud-config.servicesudo rm /lib/systemd/system/cloud-config.servicesudo systemctl stop cloud-final.servicesudo systemctl disable cloud-final.servicesudo rm /lib/systemd/system/cloud-final.servicesudo systemctl stop cloud-init-local.servicesudo systemctl disable cloud-init-local.servicesudo rm /lib/systemd/system/cloud-init-local.servicesudo systemctl stop cloud-init-upgrade.servicesudo systemctl disable cloud-init-upgrade.servicesudo rm /lib/systemd/system/cloud-init-upgrade.servicesudo systemctl stop cloud-init.servicesudo systemctl disable cloud-init.servicesudo rm /lib/systemd/system/cloud-init.servicesudo systemctl stop kdump.servicesudo systemctl disable kdump.servicesystemctl daemon-reloadsystemctl reset-failed重启后systemd-analyze blame看看效果。2)安装在虚拟机上面是用虚拟机模拟物理实体机现在也是虚拟机区别在于创建硬盘的模式。前者是空白硬盘、裸机启动安装盘后者是将阿里云镜像转换成虚拟机硬盘格式以此为系统硬盘的启机。1、vm workstationqemu-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,ifnametap0注意-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、ESXi4、ESXiqemu-img转换的vmdk在esxi启机并未成功在vm workstation启机正常的vmdk再转换兼容esxi启机也未成功。后来我找到了StarWind V2V Converter先按1、vm workstation将qcow2转换成的vmdk如上图Local file选定此vmdk按此软件操作向导即可向远程ESXi或Hyper-V直接部署生成虚拟机。此软件还支持Azure和AWS我未测试。5、virtualbox、parallels…未测试。虚拟机有很多选择每种虚拟机有很多版本支持的虚拟硬盘格式各不相同还有叫做growable或thin的模式这涉及远程部署时文件大小的传输耗时问题……总之都是把阿里云原始qcow2文件用适合的工具软件做格式转换的问题参考如上举一反三。BTW我的win平台下Hyper-V性能最好。6、生成虚拟机后操作步骤同三-1)-3-⑥和4略。