Skip to content Skip to main navigation Skip to footer

Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux

Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux
Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux

最近我在看《KVM 虚拟化技术–实战与原理解析》这本书,学到了不少虚拟机的玩法。 不由得感叹自己以前对虚拟机的功能认识还停留在非常简单的程度。有时间我会在另一篇文章里介绍一下我认为比较有意思的虚拟机折腾玩法。这里专门记录我为了能让15年前红帽出品的6.2发行版能跑在 QEMU 上所折腾的事情。

为啥要跑 Red Hat 6.2

某个夜深人静的夜晚,没有约妹子,我在网上乱逛,在 tldp 站点上看到一篇介绍如何构造最小 Linux 系统的HOWTO文章(http://users.cecs.anu.edu.au/~okeefe/p2b/buildMin/buildMin.html)。文章很老了,2000年的,而且里面所用的系统是Red Hat Linux 6.1版本的。我一直觉得 LFS 还是太复杂了,而这篇文章所涉及的组件最少,于是我就想找个6.1版的系统安装到qemu虚拟机上再照着做一个最小系统出来。在这个kernel archive可以找到很多古董发行版。我只找到了6.2版的iso镜像而文章里所用的6.1版没有提供镜像。所以我下载了redhat-6.2-i386.iso安装盘。

安装系统

我的host用的是 Ubuntu 14.10。系统安装有 QEMU 最新版本,启用kvm模块。

1. 创建一个硬盘镜像

qemu-img create -f qcow2 redhat.img 2G

这样创建了一个2G大小的镜像

2. 启动虚拟机&安装系统

qemu-system-x86_64 redhat.img -cdrom redhat-6.2-i386.iso -net nic,model=rtl8139 -m 128M

安装系统提供了字符菜单,至于中文就别指望了。不过安装过程倒很简单。

遇到的问题

1. 启动失败和对策

安装好系统以后,重启虚拟机,机器会提示如此错误:

Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux
Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux

这里找到了线索。做法是在 LILO 提示符出来时按 Tab 键 ,出现两个启动选项,输入 linux-up 回车即可。此时系统就能无误启动成功了。

2. 网卡问题

从启动 QEMU 的命令行可以看出,QEMU 模拟了 rtl8139 这款较老的网卡。在6.2系统中内核已经认出了这个设备。但是用 ifconfig 可以看出网卡接收不到任何数据:

Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux
Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux

我怀疑可能是宿主机的桥接网络设置有问题,于是用相同的配置启动了ezgo 的虚拟机,发现网卡工作正常。那么可以确定是6.2自己的内核网卡驱动和 QEMU 的网卡配合起来出问题了。

试试看,用宿主机的内核来启动

QEMU 提供-kernel 和-initrd 选项用来指定启动虚拟机 Linux 的内核。我们来试试看用3.16的内核替代6.2红帽的2.4.7内核看看!

步骤一:

将geust的fstab文件中所有hdaX改为sdaX。在老内核中ide设备的命名形式是hda1,hdb2等等,sda是专门命名scsi设备的。现在的内核硬盘都使用了scsi设备驱动,统一都以scsi设备的形式命名。

步骤二:

新建/sys目录,下次启动就可以挂载sysfs文件系统,这个是2.4内核没有的功能。

步骤三:

qemu-system-x86_64 redhat.img -net nic,model=rtl8139 -sdl -net tap -enable-kvm -kernel /boot/vmlinuz-3.16.0-25-generic -append 'root=/dev/sda5' -initrd /boot/initrd.img-3.16.0-25-generic

注意在上面的选项中,用-append制定了向内核指定的参数,我们指定了root设备参数。当然推荐再加个vga参数,让一屏显示更多字符。

开机

哇塞!新内核可以顺利启动了!真是有点惊喜,经测试,网卡也终于允许正常了,甚至还能获取到 ipv6 地址。

Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux
Linux:跨越15年的相逢,用 3.16 内核跑 RedHat 6.2古董 Linux

简单测试一下,GCC 什么的工具都能运行,但是和内核打交道的工具肯定会有问题。例如ps会 core dump。guest中的ps期望读到的/proc目录里面的文件格式是2.4内核生成的文件格式。我们这个3.16内核生成的文件肯定不一样了。

更改了X配置文件中鼠标设备路径,从/dev/mouse 改成/dev/input/mouse0,X也可以启动了!不过分辨率还是有问题。应该深入一下可以解决的。

来源:http://www.linuxstory.org/meet-after-15-years-red-hat-linux-6-1-zoot-run-on-kernel-3-16/

0 Comments

There are no comments yet

Leave a comment

Your email address will not be published.