Categories:
在 Azure 上部署 Ubuntu Server VM
一般而言,直接创建 VM 就可以了。
参考资料
但比如你想在 Azure 用 Gentoo / Mint ,就要参考以下几篇文章
-
[Create and upload a Linux VHD - Azure Virtual Machines Microsoft Docs](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-generic) -
[Create and upload an Ubuntu Linux VHD in Azure - Azure Virtual Machines Microsoft Docs](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-ubuntu)
由于有特殊需求,要对 Linux Kernel 源码修改一点东西。
所以想编译一个 generic kernel 到 Azure 上 (实际上不推荐,但因为某些特殊原因,Azure-tailored Linux Kernel 肯定是效率最高的)。
总结一下步骤
Step 1 - HyperV
推荐使用 HyperV 。因为 HyperV 的 Swicth 非常方便 Internel Network 直接用 SSH 调试。
具体方法是先登陆 VM , 系统会返回 IP 地址 (实际上是 Private IP address)
然后可以直接对这个地址链接 (估计是 NAT 技术)。
而且用 HyperV 创建虚拟机可以自动加载 HyperV Modules / Drivers
Step 2 - 替换源
Before editing /etc/apt/sources.list
, it is recommended to make a backup:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
Ubuntu 18.04 and Ubuntu 20.04:
sudo sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
sudo sed -i 's/http:\/\/[a-z][a-z]\.archive\.ubuntu\.com\/ubuntu\//http:\/\/azure\.archive\.ubuntu\.com\/ubuntu\//g' /etc/apt/sources.list
sudo apt-get update
Step 3 - Install Azure Linux Tools
由于没有 Azure Linux Kernel 的源码,这里就不装 Kernel 了。但工具还是要装的。
sudo apt install linux-tools-common linux-cloud-tools-common linux-tools-generic linux-cloud-tools-generic
Step 4 - 跟着教程
跟着 https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-upload-ubuntu
直到 第12步的 Deprovision 停下来。
此时需要先删除掉当前用户,用 root
登陆,再 Deprovsion
sudo passwd root
sudo su
deluser -r YOURNAME
可以 Deprovision 了
sudo waagent -force -deprovision+user
rm -f ~/.bash_history
export HISTSIZE=0
logout
继续跟着教程把 VHDX
转换即可。
关于编译内核
Linux Menu Config 有 3000 多个参数。我直接用 Linux Azure 的参数配置。
可以把 .config
复制过来,对比一下。
Azure & Grub
看 [用于 GRUB 和单用户模式的 Azure 串行 - Virtual Machines | Microsoft Docs](https://docs.microsoft.com/zh-cn/troubleshoot/azure/virtual-machines/serial-console-grub-single-user-mode) |
主要是 GRUB_TERMINAL="serial console"
才能正确输出到 Serial Console 上。
....
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=8
# GRUB_HIDDEN_TIMEOUT=1
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 rootdelay=300 quiet splash"
GRUB_TERMINAL="serial console"
....