ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

虚拟机安装Ubuntu 9.10完整指南:老系统镜像、换源与避坑

虚拟机安装Ubuntu 9.10完整指南:老系统镜像、换源与避坑

简介:内容围绕在Windows主机上使用VMware Workstation 7.0安装Ubuntu 9.10 Linux的完整流程展开,面向嵌入式开发初学者、Linux入门者及需要在Windows下搭建Linux实验环境的用户。文档从新建虚拟机、硬件与网络配置、分区安装系统,到apt更新软件包、安装vim、build-essential、bison、flex等开发工具,再到ARM交叉编译工具链部署、tslib编译依赖安装和双网卡桥接网络配置均有详细讲解,并附有常见操作提示。资源为单个docx文件,大小3.21MB,图文步骤与命令说明结合,适合边看边做。当前已有286人学习,对于希望保留Windows系统并安全探索嵌入式Linux开发的读者,是一份具体且可落地的操作参考。

1. 为什么 2025 年还要装一个 2009 年的 Ubuntu 9.10

你可能觉得奇怪:Ubuntu 都出到 24.04 LTS 了,谁还回头折腾 9.10?但现实中这个需求一直没断过。很多高校的《Linux 操作系统》课程、老教材的实验指导书、甚至部分嵌入式开发环境的搭建文档,写的还是 9.10 时代的命令和界面。教材里截的是 GNOME 2 的橙褐色桌面,apt 源还是 archive.ubuntu.com 的老路径,你拿 Ubuntu 24.04 去对步骤,光一个网卡命名规则就能卡半天——新版叫 ens33,老教程里写 eth0,对不上就以为自己做错了。

虚拟机上安装 Linux 操作系统 ubuntu9.10,本质上是解决两件事:第一,用 VMware Workstation 或 VirtualBox 这类虚拟机软件,把一台物理电脑虚拟出独立硬件环境,在 Windows 宿主系统里跑一个完整的 Linux 系统;第二,针对 Ubuntu 9.10 这个已经停止维护的老版本,解决镜像去哪找、源怎么换、老内核怎么兼容现代虚拟机硬件这些具体问题。适合谁?一个是按教材做实验的在校学生,一个是公司里维护老项目需要复现旧环境的工程师。这篇文章就把完整流程、参数、踩坑点一次讲透。

2. 环境准备与版本选型:为什么是 9.10,以及镜像和虚拟机软件怎么选

2.1 版本选型:Ubuntu 9.10 的特殊之处,不是越老越省事

Ubuntu 9.10,开发代号 Karmic Koala,2009 年 10 月发布。它用 Linux 内核 2.6.31,默认桌面环境是 GNOME 2.28,ext4 文件系统在这个版本里成为默认选项。如果你纯粹想学 Linux 命令,装 22.04 甚至 Debian 都行,没必要跟自己过不去。但如果你是照着某本 2010 年前后出版的教材做实验,那版本不匹配的代价比想象中大:老教材里用sudo ifconfig eth0 192.168.1.100配置 IP,新版系统根本没有 eth0 这个名字;教材里讲的apt-get源格式还是deb http://archive.ubuntu.com/ubuntu/ karmic main restricted,新版源结构完全不同。

装 Ubuntu 9.10 的前提是你需要复现那个年代的软件环境,而不是因为它有多好用。还有一层现实原因:如果你的实验环境是学校机房统一发放的虚拟机镜像,老师那边用的就是 9.10,那你没有太多选型余地。这种情况下,虚拟机软件版本和镜像来源就是决定成败的关键。

2.2 虚拟机软件选型:VMware Workstation 还是 VirtualBox,参数差异在哪

主流的方案就两个:VMware Workstation Pro 和 Oracle VirtualBox。我的建议是优先用 VMware Workstation,原因在于它对老系统的硬件兼容层做得更完善,尤其是 IDE 硬盘控制器和旧的 Intel ICH7 芯片组模拟,VMware 的兼容列表里明确保留了这些老设备类型,VirtualBox 在模拟 2009 年时代的硬件时偶尔会出现 ACPI 识别异常。

VMware Workstation 创建虚拟机时,有几步选择直接影响后续安装成败:

  1. 固件类型选 BIOS,不要选 UEFI。Ubuntu 9.10 的内核和 GRUB 版本对 UEFI 支持极差,选 UEFI 大概率卡在引导阶段。
  2. 硬盘接口选 IDE,不要选 NVMe 或 SCSI。9.10 的内核 2.6.31 没有现代 NVMe 驱动,默认也没有加载 VMware 的 PVSCSI 驱动。
  3. 网络类型选 NAT。桥接模式需要物理网卡驱动配合,老内核在 VMware 的 e1000 虚拟网卡上可能起不来。
  4. 内存分配 1GB 到 2GB。9.10 的 GNOME 2 桌面很轻量,512MB 也能跑,但编译软件时会吃力。
  5. CPU 分配 1 到 2 核。老内核不支持多核调度优化,给多了反而出乱子。

提示:如果你手头只有 VirtualBox,也不是不能装,但要手动关闭 EFI,关闭嵌套分页,存储控制器改成 IDE,并且安装完系统后要安装 VirtualBox Guest Additions 的旧版本,否则屏幕分辨率只能固定在 800x600。

2.3 镜像下载与校验:老版本镜像的获取方式和文件校验

Ubuntu 9.10 的官方镜像早已停止在主动镜像站分发,这是第一个坑。常见的做法是从 Ubuntu 的旧版本归档服务器上下载,文件名一般是ubuntu-9.10-desktop-i386.iso,大约 700MB。注意 i386 和 amd64 的选择:如果你的教材实验全是基础命令和 shell 编程,i386 兼容性更稳;如果要跑 64 位特有的软件,选 amd64。但老教材的软件包很多是 i386 架构的,在 amd64 系统上装 32 位包还要开 multiarch,平白多一套麻烦。所以我的默认选择是 i386。

下载完镜像别急着装,先做校验。老归档站点的 MD5 校验值在页面里能找到,Linux 和 Windows 下各有校验命令:

# Windows PowerShell 下计算 MD5 Get-FileHash .\ubuntu-9.10-desktop-i386.iso -Algorithm MD5 # Linux 或 macOS 终端下计算 MD5 md5sum ubuntu-9.10-desktop-i386.iso

校验的目的是排除下载过程中镜像损坏的情况。我遇到过镜像没下完整、虚拟机安装到 67% 时报"无法读取光盘"的问题,重新下载校验后才通过。这一步很机械,但别跳。

3. 新建虚拟机与安装 Ubuntu 9.10 的完整流程,照着做就行

3.1 VMware 新建虚拟机的 5 个关键配置参数,默认值必须改

用 VMware Workstation 新建虚拟机时,选"自定义"而不是"典型",因为典型向导会默认给 NVMe 硬盘和 UEFI 固件,这两个默认值恰恰是 Ubuntu 9.10 的克星。到关键配置界面时,按下面这张表填:

配置项推荐值说明
固件类型BIOS老内核 + GRUB 1.x 不支持 UEFI 引导
硬盘接口IDE内核 2.6.31 无现代磁盘控制器驱动
网络类型NATe1000 网卡在 NAT 模式下最稳
内存1024 MB桌面体验顺滑,编译不会 OOM
CPU1 核给多核反而可能引起 ACPI 中断异常
虚拟化引擎不勾选 VT-x老系统不依赖硬件虚拟化,勾了反而卡

这些参数里最容易翻车的是硬盘接口。VMware 新版默认推荐 NVMe,如果你没改,安装到引导阶段就会黑屏。另一个隐性问题:如果你在较新的 VMware Workstation 17 里创建虚拟机,虚拟机的硬件兼容性版本默认是 Workstation 17.x,Ubuntu 9.10 不认识这个硬件抽象层。解决办法是在创建时把硬件兼容性改成 Workstation 10.x 或 12.x,这个选项在创建向导第一步就能选。

3.2 挂载 ISO 并启动安装:镜像引导、语言选择和分区步骤

配置好虚拟机后,在 CD/DVD 设置里挂载下载好的ubuntu-9.10-desktop-i386.iso,勾选"启动时连接",然后开机。看到紫红色启动菜单后按回车进入图形安装界面。Ubuntu 9.10 的 installer 是旧版 Ubiquity,过程和新版差别很大:

  • 第一步选语言,中文界面在 9.10 里存在翻译不完整的现象,建议选 English,装完系统后再补中文语言包。
  • 键盘布局选 USA 或 China,取决于你物理键盘。这里选错后面输密码会乱,因为键盘映射不对。
  • 分区是关键。推荐手动分区,而不是默认的"使用整个磁盘"。9.10 时代默认分区方案是 swap + 一个 ext4 根分区,没有单独的 /home。如果你计划后续做内核编译实验,我建议分成三个区:/boot200MB、/10GB、/home剩余空间、swap 1GB。

分区完后设置用户名密码,接下来就是等待复制文件。这里有个 9.10 特有的问题:安装到 90% 左右时,进度条长时间不动,这是它在运行update-grub,老机器上可能要等 5-10 分钟,别以为死机了。判断是否卡死的办法是看硬盘指示灯,VMware 虚拟机里看右下角磁盘活动图标是否在闪。

3.3 首次启动后的基础调整:分辨率、网络和第一轮 apt-get update

装完系统自动重启,进入 GRUB 引导菜单。Ubuntu 9.10 的默认 GRUB 是 1.97 版本,引导菜单只有三秒等待时间,手慢了就进系统了。登录进 GNOME 桌面后,第一件事不是装软件,而是确认网络通不通:

# 查看网卡信息,确认 eth0 是否存在 ifconfig -a # 测试外网连通性,这里 ping 的是一个公共 DNS 服务器 ping -c 4 8.8.8.8 # 查看当前源列表 cat /etc/apt/sources.list

我的经验是,NAT 模式下eth0默认用 DHCP 获取 IP,ifconfig -a能看到 192.168.x.x 段地址,说明 VMware 的虚拟网卡驱动 vmxnet 或 e1000 被正确加载了。如果eth0不存在,大概率是网卡硬件地址和驱动不匹配,这个放到第 5 章的避坑清单里细说。

4. 换源、装驱动、配置系统的正确姿势:Ubuntu 9.10 与新版最大的不同

4.1 更换为可用软件源:老版本为什么必须手动改源

Ubuntu 9.10 的官方源早就停止更新了,你执行apt-get update会得到一堆 404 错误。这不是你的网络问题,而是archive.ubuntu.com的当前版本目录里只剩下仍在维护的版本,9.10 被移到了old-releases.ubuntu.com。常见做法是直接把源列表里的域名替换成 old-releases。

# 先备份原文件,出问题可以随时恢复 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 用 sed 把 archive.ubuntu.com 换为 old-releases.ubuntu.com sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list # 同样处理 security 源 sudo sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list # 再执行更新 sudo apt-get update

这段命令的逻辑是:-i参数让 sed 直接修改文件,不用手动编辑。把archive和security两个域名都换成old-releases,是因为 9.10 的软件安全更新也在老归档里。如果你手动用 vi 编辑,注意不要改掉deb-src行,除非你确定需要源码包。apt-get update正常完成后,输出末尾会显示"Reading package lists... Done",没有任何 404 提示。

4.2 安装 VMware Tools:剪贴板共享、屏幕分辨率和拖拽文件

Ubuntu 9.10 不自带 VMware Tools,但 VirtualBox 的增强功能也面临同样的问题——旧版虚拟机的增强工具包和 9.10 的内核头文件能否匹配,是另一个常见报错点。VMware 场景下我一般通过菜单"虚拟机 -> 安装 VMware Tools"挂载虚拟光驱,但这里有一个特别容易踩的坑:9.10 默认没有安装build-essential,而 VMware Tools 的编译需要 gcc 和 make。所以顺序必须是先换源、先装编译工具链,再装 VMware Tools。

# 更新源之后先装基础编译工具,这是装 VMware Tools 的前提 sudo apt-get install build-essential linux-headers-$(uname -r) # 挂载 VMware Tools 光驱后,复制安装包到 /tmp 解压 cd /tmp tar zxvf /media/cdrom/VMwareTools-*.tar.gz cd vmware-tools-distrib # 运行安装脚本,一路默认即可 sudo ./vmware-install.pl -d

这里的linux-headers-$(uname -r)是动态获取当前内核版本,9.10 的内核是 2.6.31-14,uname -r命令会输出这个版本号,确保装的头文件版本匹配。-d参数让安装脚本用默认配置自动执行,免去十几步交互式提问。安装完成后重启虚拟机,屏幕分辨率能调到 1920x1080,剪贴板可以双向共享。

4.3 中文支持与输入法:老版本安装中文语言包的特殊步骤

Ubuntu 9.10 的安装盘里带了中文字体和语言包,但默认不启用。如果你第 2 章里选了英文界面,装完系统后需要手动安装中文支持。9.10 的语言支持逻辑和新版区别很大,不是简单跑一个apt-get install language-pack-zh-hans就完事。

# 安装中文语言包 sudo apt-get install language-pack-zh-hans language-pack-gnome-zh-hans # 安装中文输入法框架,9.10 时代默认是 scim,不要装 ibus 的新版本 sudo apt-get install scim scim-pinyin # 配置输入法环境变量 echo 'export XMODIFIERS=@im=SCIM' >> ~/.bashrc echo 'export GTK_IM_MODULE=scim' >> ~/.bashrc echo 'export QT_IM_MODULE=scim' >> ~/.bashrc source ~/.bashrc

装完语言包后在"系统 -> 系统管理 -> 语言支持"里把默认语言改成中文,注销重新登录,整个菜单就变中文了。这个版本不要装 fcitx,9.10 的 GTK 2 和 QT3 环境下 fcitx 的兼容性比较差,scim 是当年 Ubuntu 官方默认方案,虽然笨重但稳定。GTK_IM_MODULE和QT_IM_MODULE这两个变量分别告诉 GTK 程序(如 Firefox)和 QT 程序(如一些老版 Qt 应用)在输入框里调用 SCIM。

5. Ubuntu 9.10 虚拟机安装避坑指南:5 个高频报错逐一排查

5.1 现象一:虚拟机开机黑屏,光标在屏幕左下角闪动

安装完成后重启虚拟机,屏幕全黑,只有一个白色光标在闪,没有进入 GRUB 菜单。原因是 VMware 默认的固件类型和硬盘控制器不匹配,9.10 的 GRUB 装在了 IDE 硬盘的 MBR 上,但虚拟机设置里硬盘被识别成 SCSI 或者虚拟机固件调到了 UEFI。

解决:关掉虚拟机,编辑虚拟机设置,把硬盘接口从 SCSI 或 NVMe 改成 IDE,固件类型改成 BIOS。如果已经装完系统不想重建虚拟机,在 VMware 的.vmx文件里添加一行firmware = "bios",保存并重启虚拟机。这个踩坑很典型,我见过不少人装三遍系统才发现是设置问题。

5.2 现象二:sudo apt-get update返回大量 404 Not Found

这个错误在第 4 章已经提到,但遇到的频率实在太高,值得单独列出来。404 的报错格式是Failed to fetch http://security.ubuntu.com/... 404 Not Found。原因就是源列表指向的域名不再托管 9.10 的软件包。另一个隐蔽坑:当你把security.ubuntu.com替换成old-releases.ubuntu.com后,如果原本的源里已经有注释掉的deb-src行,apt-get update还会尝试访问源码包并报 404。

解决:把sources.list里的deb-src行全部注释掉,或者确认old-releases.ubuntu.com上对应的源码包路径存在。我一般直接用sudo sed -i 's/^deb-src/# deb-src/' /etc/apt/sources.list把所有源码源注释,省去逐个排查的时间。

5.3 现象三:安装 VMware Tools 时报错找不到内核头文件

vmware-install.pl执行到编译 vmhgfs 模块时报错,提示/lib/modules/2.6.31-14-generic/build/include/generated/autoconf.h不存在。因为 9.10 默认安装没有包含linux-headers包,只有运行内核,没有配套的源码和头文件。

解决:先执行sudo apt-get install linux-headers-$(uname -r),等头文件装完后再跑 VMware Tools 安装脚本。注意:如果apt-get update换源后还是装不上,先把源换成old-releases.ubuntu.com并确认 update 没有报错。头文件装完,/lib/modules/$(uname -r)/build这个符号链接会指向真实头文件目录,VMware Tools 的编译脚本就是靠它找编译依赖的。

5.4 现象四:虚拟机网络不通,ping外网时提示connect: Network is unreachable

ifconfig能看到eth0但没有 IP 地址,或者根本没有eth0。前者是 DHCP 客户端没跑起来,后者是网卡驱动没加载。Ubuntu 9.10 的网络管理工具是network-manager,在我遇到的情况里,它对新创建的 VMware NAT 网络识别有时会迟钝。

解决:手动配置网络,编辑/etc/network/interfaces文件:

# 手动配置 eth0 为 DHCP auto eth0 iface eth0 inet dhcp # 重启网络服务生效 sudo /etc/init.d/networking restart

如果是连eth0都没有,用dmesg | grep eth查看内核日志,看是驱动加载失败还是硬件地址没分配。VMware 的 e1000 网卡对应内核模块是e1000,手动加载一下sudo modprobe e1000,然后再看ifconfig -a是否有网卡出现。

5.5 现象五:安装软件包时提示Package xxx has no installation candidate

比如sudo apt-get install vim时报这个错。这个报错信息意味着 apt 源里没有这个包,两种情况:源换错了,或者包名在 9.10 里不存在。Ubuntu 9.10 的软件仓库里没有vim-gtk3(这是 16.04 之后才有的),只有vim-gtk。nginx在 9.10 里是 0.7.x 版本,包名一样,但依赖的libpcre3版本较老。

解决:先用apt-cache search <关键词>搜索实际包名:

# 搜索 vim 相关的包 apt-cache search vim | grep -i editor # 搜索 nginx 相关包 apt-cache search nginx

确认包名后安装。如果apt-cache search返回为空,说明源还没有真正切换成功,回到第 5.2 节的检查流程。这个排查思路同样适用于直接安装build-essential之外的常用工具时所遇到的各种"候选包不存在"问题。

6. 进阶用法与验证:快照管理、虚拟机迁移和网络配置实验

6.1 用快照做后悔药:十分钟还原到干净系统

Ubuntu 9.10 装好并做完基础配置后,第一件事是拍一个快照。VMware 里右键虚拟机标签 -> 快照 -> 拍摄快照。这个动作的价值在实践中会越来越明显:你后续要做内核实验或修改环境变量,一个失误就可能导致系统无法启动,这时候快照就是后悔药。

快照不是备份,它的原理是记录虚拟机磁盘的差异层。拍摄快照后,所有写操作落在快照文件里,原始磁盘文件不变。所以我建议拍两个快照:第一个是"刚装完系统、未换源",第二个是"换源并装完 VMware Tools"。两个快照之间的差异,正好可以让你快速切换对比,排查问题是自己改错还是系统本身就有问题。

# 在虚拟机内验证当前系统版本和内核信息 lsb_release -a uname -r

这两个命令的输出应当显示Ubuntu 9.10和2.6.31-14-generic。始终以此为基准确认你的运行环境没有被后续操作污染。

6.2 将 VMware 虚拟机迁移到其他主机:虚拟机文件和 U 盘启动的边界

这个环节要特别提醒:不要试图用dd把虚拟磁盘写到 U 盘再物理机启动。9.10 的内核没有现代物理机所需的 AHCI 驱动和 USB 3.0 支持,直接物理启动会 kernel panic。虚拟机的意义是在虚拟硬件抽象层上运行,脱离这个抽象层老系统基本没法工作。我在网上看到一些思路是把虚拟磁盘转成物理硬盘启动格式,然后再扩展到 U 盘启动场景,但如果你动手尝试,要准备好对 GRUB 安装位置和驱动模块做大量适配,不要指望开箱即用。

VMware 虚拟机跨主机迁移的常规操作是:拷贝.vmx和.vmdk文件到另一台装了 VMware Workstation 的电脑,打开.vmx文件。如果另一台电脑的 VMware 硬件版本比原来新,提示升级硬件时选"以后再说",9.10 不需要新版硬件功能。迁移后可能出现 5.4 节的网络不通问题,因为 VM 的 MAC 地址变了,/etc/udev/rules.d/70-persistent-net.rules里还记录着旧网卡,删掉这个文件重启即可。

6.3 网络实验与 iptables:老版本里特别适合练手的防火墙配置

很多框架和教材在讲 Linux 网络时会以老版本为参考,因为 9.10 的 iptables 还是 1.4.x 时代语法,-A和-D参数明白直接,不像新版nftables抽象层次多。在虚拟机里做网络实验的一个常见练习是配置 NAT 转发:

# 开启 IP 转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 设置 SNAT 规则,把内网流量伪装成宿主机 IP 出去 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 查看规则是否生效 sudo iptables -t nat -L -n

MASQUERADE适合动态 IP 场景,它会自动获取 eth0 当前 IP 作为伪装地址。在 9.10 上练习这些规则,效果比新版直观,因为 iptables 的日志格式和计数器输出在旧版里更容易读。做完实验用sudo iptables -t nat -F清空规则,恢复原状。

最后说一个我的习惯:凡是装老版本 Linux 虚拟机,我都会建一个install-notes.txt放在/root/下,记录装了什么包、改了哪些配置、路径在哪里。9.10 的软件环境一旦损坏,修复成本远高于新版,这份笔记往往比重新装一遍系统快得多。第一次装 9.10 时我没做记录,后来源列表改崩了只能重新建虚拟机;第二次开始记录,后续遇到问题基本十分钟定位。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进