天天看點

如何本地安裝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盤而是刻錄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)空間,系統和稀疏并非泾渭分明的連續存儲,而是碎片狀态,見下圖:

如何本地安裝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光牒,随喜。以下我用虛拟機模拟實體實體機。真實環境操作雷同。

①建立有空硬碟的虛拟機,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