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


相关文章
|
2月前
|
Ubuntu Linux
任何Ubuntu用户都应安装的四大Linux应用程序
当然,这款程序不需要太多介绍。我们面对的是网上最庞大最完整的多媒体中心,由于丰富的插件,我们能够高度细化地定制其每一项功能。这是我们的Linux发行版不可或缺的必备软件。 我们可以通过运行以下命令来轻松安装Kodi:sudo apt install kodi。
|
2月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
2月前
|
弹性计算 安全 Linux
阿里云服务器ECS安装宝塔Linux面板、安装网站(新手图文教程)
本教程详解如何在阿里云服务器上安装宝塔Linux面板,涵盖ECS服务器手动安装步骤,包括系统准备、远程连接、安装命令执行、端口开放及LNMP环境部署,手把手引导用户快速搭建网站环境。
|
2月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
2月前
|
Ubuntu Linux 数据安全/隐私保护
Win10安装Linux子系统教程!如何在Win10系统中安装Ubuntu!
登录系统后,输入cd /返回上一级,然后再输入“ls”查看一下系统文件目录,看看对不对!
|
2月前
|
Ubuntu Linux Shell
手把手教你安装适用于Linux的Windows子系统——Ubuntu
重启完成,你看看重新打开Ubuntu是不是发生了变化,等待几分钟,系统配置完成,根据提示设置用户名和密码即可
|
2月前
|
存储 Ubuntu Linux
安卓手机免root安装各种Linux系统:Ubuntu, Centos,Kali等
此外还可以安装Slackware、Archstrike等系统,还可以通过github查找方法安装更多有趣的东西。 昨日小编就是通过Termux安装的Kali Linux工具包。
|
Cloud Native 安全 大数据
阿里云新品发布会周刊第97期 丨 Alibaba Cloud Linux 3 正式发布
在Alibaba Cloud Linux 3 正式上线之际, 我们和大家一起近距离看下这一新产品。我们将从Alibaba Cloud Linux的历史介绍开始,沿着新产品的新功能、性能优势、安全、稳定性以及服务等方面,对Alibaba Cloud Linux 3 进行一次全方位的探索。
1745 0
阿里云新品发布会周刊第97期 丨  Alibaba Cloud Linux 3 正式发布
|
22天前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
96 16
|
14天前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。