首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Ubuntu22.04.3+QEMU+ubuntu-base-22.04.5-base-amd64

Ubuntu22.04.3+QEMU+ubuntu-base-22.04.5-base-amd64

原创
作者头像
tankaro
发布2025-09-08 10:15:36
发布2025-09-08 10:15:36
6810
举报
文章被收录于专栏:工具相关专栏工具相关专栏

一、宿主机环境准备

安装依赖工具

代码语言:txt
复制
# 更新系统并安装 QEMU 及配套工具
sudo apt update -y && sudo apt upgrade -y
sudo apt install -y qemu-system-x86 qemu-utils gcc make git \
                    linux-headers-6.2.0-26-generic parted e2fsprogs \
                    wget curl bash-completion

准备核心文件(内核 + 基础镜像)

代码语言:txt
复制
# 创建工作目录(统一管理文件)
mkdir -p ~/qemu-ubuntu22.04.5 && cd ~/qemu-ubuntu22.04.5

# 复制宿主机 6.2.0-26 内核(版本严格匹配,避免驱动问题)
cp /boot/vmlinuz-6.2.0-26-generic ./vmlinuz
cp /boot/initrd.img-6.2.0-26-generic ./initrd

# 下载 ubuntu-base 镜像(清华源,速度更快)
wget https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.5-base-amd64.tar.gz -O ubuntu-base.tar.gz

# 验证镜像完整性(防止解压失败)
mkdir -p test && tar -xzf ubuntu-base.tar.gz -C test
[ -f "test/bin/bash" ] && echo "镜像完整" || (echo "镜像损坏,重新下载" && exit 1)
rm -rf test

二、创建并初始化 40GB 根文件系统

生成镜像并格式化

代码语言:txt
复制
# 创建 40GB raw 格式镜像(足够日常使用)
qemu-img create -f raw rootfs.img 40G
# 格式化为 ext4 文件系统(输入 y 确认)
echo "y" | mkfs.ext4 rootfs.img

挂载镜像并配置基础环境

代码语言:txt
复制
# 挂载镜像到 ./mnt 目录
mkdir -p ./mnt && sudo mount -o loop rootfs.img ./mnt

# 解压 ubuntu-base 到镜像
sudo tar -xzf ubuntu-base.tar.gz -C ./mnt

# 配置 DNS(解决域名解析问题,复制宿主机配置)
sudo cp /etc/resolv.conf ./mnt/etc/resolv.conf

# 配置软件源(清华源 + 安全源,确保更新速度和安全性)
sudo tee ./mnt/etc/apt/sources.list << EOF
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
EOF

# 绑定系统目录(解决 chroot 权限和设备访问问题)
sudo mount --bind /dev ./mnt/dev
sudo mount --bind /dev/pts ./mnt/dev/pts  # 关键:支持 sudo 和终端交互
sudo mount --bind /proc ./mnt/proc
sudo mount --bind /sys ./mnt/sys

# 补全缺失目录(避免网络配置和 APT 报错)
sudo mkdir -p ./mnt/etc/network ./mnt/var/lib/apt/lists/partial
sudo chmod 755 ./mnt/etc/network ./mnt/var/lib/apt/lists

三、chroot 环境初始化(核心配置)

代码语言:txt
复制
# 进入 ubuntu-base 内部环境
sudo chroot ./mnt /bin/bash

# 1. 设置 root 密码(示例:root123,按提示输入两次)
passwd

# 2. 安装核心工具(bash 补全、串口驱动、SSH 等)
apt update  # 基于清华源更新,速度更快
apt install -y sudo openssh-server net-tools vim \
               ifupdown kmod bash-completion \
               linux-image-6.2.0-26-generic linux-headers-6.2.0-26-generic

# 3. 创建普通用户(qemu-user,密码:qemu123,赋予 sudo 权限)
useradd -m qemu
passwd qemu
usermod -aG sudo qemu

# 4. 配置 bash 为默认 Shell(替代功能有限的 sh)
chsh -s /bin/bash root
chsh -s /bin/bash qemu

# 5. 配置串口驱动(8250,解决 /dev/ttyS0 缺失问题)
modprobe 8250  # 加载驱动
echo "8250" > /etc/modules-load.d/8250.conf  # 开机自动加载
tee /etc/udev/rules.d/50-ttyS0.rules << EOF
KERNEL=="ttyS0", SUBSYSTEM=="tty", MODE="0660", OWNER="root", GROUP="dialout"
EOF

# 6. 配置网络(开机自动获取 IP,固定网卡名为 eth0)
tee /etc/network/interfaces << EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
EOF
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules  # 禁用网卡名自动重命名

# 7. 添加 /etc/readme.txt(记录系统配置信息)
tee /etc/readme.txt << EOF
QEMU ubuntu-base System Info
============================
- OS Version: Ubuntu 22.04.5 LTS (jammy)
- Kernel Version: 6.2.0-26-generic
- QEMU Version: 6.2.0
- Key Configurations:
  1. SSH Service: Enabled (port 22, host forwarded to 10022)
  2. Serial Port: /dev/ttyS0 (8250 driver loaded)
  3. Default Shell: bash (with bash-completion)
  4. Software Sources: Tsinghua Mirror + Ubuntu Security
EOF

# 8. 退出 chroot 环境
exit

# 9. 卸载所有挂载点(避免镜像损坏)
sudo umount ./mnt/dev/pts ./mnt/dev ./mnt/proc ./mnt/sys ./mnt

四、创建 QEMU 启动脚本并验证

编写启动脚本(适配 QEMU 6.2.0)

代码语言:txt
复制
tee ./start.sh << EOF
#!/bin/bash
# QEMU 启动参数说明:
# -enable-kvm:启用硬件加速
# -smp 2:分配 2 核 CPU
# -m 2G:分配 2GB 内存
# -kernel/initrd:指定内核和初始化镜像
# -drive:挂载根文件系统
# -chardev/device:绑定串口到终端
# -net:配置网络(端口转发 SSH 到宿主机 10022)
qemu-system-x86_64 -enable-kvm -cpu host -smp 2 -m 2G \
                   -kernel ./vmlinuz -initrd ./initrd \
                   -drive format=raw,file=./rootfs.img,if=virtio \
                   -chardev stdio,id=serial0 -device isa-serial,chardev=serial0,index=0 \
                   -append "root=/dev/vda rw console=ttyS0,115200n8 net.ifnames=0" \
                   -monitor none -display none \
                   -net nic,model=virtio -net user,hostfwd=tcp::10022-:22
EOF

# 赋予执行权限
chmod +x start.sh

启动并验证环境

代码语言:txt
复制
# 启动虚拟机
sudo ./start.sh

# 登录验证(出现 login 提示后)
# 用户名:qemu-user 或 root,密码:qemu123 或 root123

# 登录后执行以下命令确认系统正常
uname -r  # 输出 6.2.0-26-generic(内核版本匹配)
echo $SHELL  # 输出 /bin/bash(bash 为默认 Shell)
ls -l /etc/readme.txt  # 确认文件存在
cat /etc/readme.txt  # 查看系统信息
ping -c 3 baidu.com  # 网络通畅
sudo systemctl status ssh  # SSH 服务正常运行
lsmod | grep 8250  # 串口驱动已加载

五、常见问题解决

点击图片可查看完整电子表格

六、日常操作指南

  1. 启动虚拟机:cd ~/qemu-ubuntu && sudo ./start.sh
  2. SSH 远程连接(宿主机):ssh qemu-user@localhost -p 10022
  3. 修改 /etc/readme.txt:sudo vim /etc/readme.txt
  4. 扩展存储空间:
代码语言:txt
复制
# 宿主机执行:扩容 10GB
qemu-img resize rootfs.img +10G
# 虚拟机内执行:生效扩容
sudo resize2fs /dev/vda

七、总结

此环境通过严格的版本统一、完整的基础配置,可稳定支持串口通信、SSH 远程访问、bash 脚本开发等需求,适合嵌入式测试、轻量级服务部署等场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档