奋斗
努力

如何在云服务器中手动安装Ubuntu系统(非镜像方式)?

云计算

在云服务器中手动安装 Ubuntu 系统(非镜像方式),本质上是一个具有挑战性、通常不推荐且多数主流云平台(如阿里云、腾讯云、AWS、Azure、华为云)不支持的操作。原因如下:

云服务器的典型交付模式是基于预构建镜像(Image)的快速部署,底层使用虚拟化技术(KVM/QEMU、Xen、Hyper-V)或裸金属,其启动流程由云平台控制(如通过 iPXE、cloud-init、UEFI Secure Boot 链式加载),用户无法直接访问 BIOS/UEFI 设置、无法挂载 ISO、无法进入传统安装界面(如 Ubuntu Live Installer)

⚠️ 但如果你有特殊需求(例如:定制内核、完全离线环境、合规审计要求、或在自建私有云/KVM 环境中管理云服务器),且你拥有宿主机/物理服务器的 root 权限和完整虚拟化控制权(如在 OpenStack、Proxmox VE、或自建 KVM 环境中),那么可以实现“类云服务器”的手动安装。下面分两种场景详细说明:


✅ 场景一:你在 自建 KVM/OpenStack/Proxmox 私有云环境 中(有完全控制权)

这是唯一真正可行的“手动安装”场景。

步骤概览:

  1. 准备 Ubuntu Server 安装介质

    • 下载官方 netboot ISO 或 mini.iso(最小网络安装镜像)
      🔗 https://cdimage.ubuntu.com/ubuntu-server/jammy/daily-live/current/
      (以 Ubuntu 22.04 LTS 为例,推荐 ubuntu-22.04-live-server-amd64.iso
  2. 创建虚拟机(不分配磁盘,仅挂载 ISO)

    # 示例:使用 virt-install 创建 VM(无磁盘,仅光驱)
    virt-install 
     --name ubuntu-manual 
     --ram 2048 
     --vcpus 2 
     --disk none 
     --cdrom /path/to/ubuntu-22.04-live-server-amd64.iso 
     --os-variant ubuntu22.04 
     --graphics vnc,listen=0.0.0.0 
     --network network=default 
     --noautoconsole
  3. VNC 连接并手动安装

    • 使用 virt-viewer 或 VNC 客户端连接(如 remote-viewer vnc://localhost:5900
    • 启动后进入 Ubuntu Live Server 安装向导(text-based installer)
    • 手动分区(如 /, /boot, swap, LVM, 加密等)
    • 配置网络、用户、SSH、时区等
    • 关键:勾选 “Install OpenSSH server” 并启用 “Install third-party software”(含驱动/firmware)
  4. 安装完成后清理

    • 安装完毕重启前,务必弹出 ISO(在 virt-manager 中右键光驱 → “Eject”;或用命令)
      virsh change-media ubuntu-manual hda --eject --config
    • 重启进入新系统。
  5. (可选)启用 cloud-init(适配云环境)
    即使手动安装,也建议保留 cloud-init 支持以便后续云平台集成(如元数据服务、SSH 密钥注入):

    sudo apt update && sudo apt install -y cloud-init
    sudo cloud-init clean --logs
    sudo reboot

    ✅ 验证:sudo cloud-init status 应为 donels /var/lib/cloud/instances/ 应有实例ID目录。


❌ 场景二:在公有云(阿里云/AWS/腾讯云等)上强行“手动安装”

技术上几乎不可行,且违反平台规范,原因包括:

限制项 说明
无 ISO 挂载能力 控制台不提供挂载本地 ISO 或自定义光驱选项
无 VNC/图形控制台 仅提供串口(Serial Console)或受限 Web terminal,无法运行图形/文本安装器
启动固件锁定 UEFI/BIOS 由云厂商控制,禁止修改启动顺序或加载外部 bootloader
磁盘为只读镜像层 实例磁盘是快照克隆,底层为 qcow2/raw 镜像,无法从 ISO 引导覆盖安装
安全策略阻止 如 AWS 的 Nitro、阿里云的神龙架构均禁用客户自定义引导

⚠️ 尝试绕过(如 iPXE + 自定义内核)需满足:

  • 平台明确支持 iPXE(仅少数企业级裸金属服务如 AWS EC2 Bare Metal、阿里云神龙裸金属支持)
  • 你拥有物理网络控制权(如接入自定义 DHCP/PXE 服务器)
  • 极高运维成本,且失去所有云原生特性(自动伸缩、监控、快照、弹性IP绑定等)

➡️ 结论:在公有云上,请始终使用官方 Ubuntu 镜像。如需定制:

  • ✅ 方法1:基于官方镜像启动 → apt upgrade + 部署脚本 + cloud-init 配置
  • ✅ 方法2:使用 Packer 构建自定义 AMI/镜像(packer.io)
  • ✅ 方法3:使用 Ansible/Chef/Puppet 在实例启动后自动化配置

✅ 替代方案:用 debootstrap 在已有 Linux 系统中“手动构建” Ubuntu 根文件系统(高级用途)

适用于容器、chroot、或嵌入式/离线环境,不适用于云服务器重装系统,但体现“纯手动”思想:

# 前提:当前系统为 Debian/Ubuntu,已安装 debootstrap
sudo apt install debootstrap

# 创建目标目录
sudo mkdir /mnt/ubuntu-jammy

# 手动安装基础系统(amd64)
sudo debootstrap --arch amd64 jammy /mnt/ubuntu-jammy http://archive.ubuntu.com/ubuntu/

# 挂载必要虚拟文件系统
sudo mount --bind /dev /mnt/ubuntu-jammy/dev
sudo mount --bind /proc /mnt/ubuntu-jammy/proc
sudo mount --bind /sys /mnt/ubuntu-jammy/sys

# chroot 配置
sudo chroot /mnt/ubuntu-jammy /bin/bash
# 在 chroot 中:
#   apt update && apt install linux-image-generic grub-pc ssh openssh-server
#   dpkg-reconfigure grub-pc  # 指定 /dev/vda
#   exit

# 卸载
sudo umount -R /mnt/ubuntu-jammy/{dev,proc,sys}

⚠️ 注意:此方法生成的系统无法直接在云服务器上启动(缺少 initramfs、firmware、cloud-init、正确内核参数),仅适合研究或作为容器基础。


✅ 最佳实践建议(云环境)

需求 推荐方案
安全合规/审计要求 使用官方 Ubuntu LTS 镜像 + CIS Benchmark 脚本加固(如 dev-sec/ansible-collection-hardening)
内核定制 编译自定义内核 deb 包 → 在标准 Ubuntu 实例中 dpkg -i *.deb 安装
全盘加密 使用 cryptsetup + LUKS(注意:云平台不管理密钥,需自行处理解锁)
完全离线部署 制作离线 apt 源镜像 + apt-offline 工具链

总结

场景 是否可行 关键条件
公有云(AWS/阿里云等) ❌ 不可行 平台强制镜像启动,无底层控制权
私有云(KVM/OpenStack/Proxmox) ✅ 完全可行 你掌控宿主机、可挂 ISO、可 VNC 访问
物理服务器/裸金属 ✅ 推荐方式 直接 PXE 或 USB 安装 Ubuntu Server

如你正在使用某特定云平台(请告知名称),我可以为你提供该平台下最接近“手动”的合规定制方案(如阿里云自定义镜像制作、AWS AMI 构建流程等)。

是否需要我为你生成一份完整的 cloud-init 配置模板,或一个基于 Packer 的 Ubuntu 自定义镜像构建脚本?欢迎补充需求 😊

未经允许不得转载:云服务器 » 如何在云服务器中手动安装Ubuntu系统(非镜像方式)?