一、為何需要本地安裝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的步驟
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盤而是刻錄CD光牒,CD光牒容量不夠,即便容量不是問題,也不利分發,是以應該無損收縮(shrink)該檔案。
我嘗試過三種可能,或失敗或其它原因放棄(提及這些,供有意者參考):
①壓縮再dd:
gzip -dv aliyun_2_1903_x64_20G_nocloud_alibase_20210726.raw.gz | dd of=/dev/sda bs=256M
gzip需要20G空間才能完整解壓縮,而安裝盤無論U盤還是CD光牒還是挂載.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)空間,系統和稀疏并非泾渭分明的連續存儲,而是碎片狀态,見下圖:
而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=$[(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的工具很多,随喜。
3、用此安裝盤安裝系統
是否刻錄U盤、CD光牒,随喜。以下我用虛拟機模拟實體實體機。真實環境操作雷同。
①建立有空硬碟的虛拟機,cd挂載CentOS-7-x86_64-NetInstall-2009-aliyun20210726.iso,BIOS選擇cd啟動。
②借用CentOS7安裝盤功能,從Troubleshooting進入Rescue模式。
③選擇硬碟沒有挂載的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
輸出為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/sda1
resize2fs /dev/sda1
重新開機系統使如上修改生效。
⑥選擇硬碟挂載到目錄的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系統本來設計為根據使用者在阿裡雲平台購買ECS時送出的資訊(如機器名、密碼、cpu和記憶體)生成中繼資料,通過cloud-init-local、dracut-initqueue初始化作業系統的環境。我們不需要這些中繼資料,是以做如上操作,手動建立initramfs檔案、生成root密碼且使其可登入。知其目的,這些操作亦可随喜改變。
如第⑤完成後可直接重新開機,如下操作,
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
之後即可遠端。
我這裡無軟驅出現報錯,禁用即可:
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先按"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,略。
四、完
糾正排錯和更優化合理的方案請發arkue@qq