折騰靠的是任性:跨越15年的相逢,用 3.16 內核跑 Red Hat 6.2古董 Linux (不是 RHEL 6.2)
最近我在看《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. 啟動失敗和對策
安裝好系統以後,重啟虛擬機,機器會提示如此錯誤:
在這裡找到了線索。做法是在 LILO 提示符出來時按 Tab 鍵 ,出現兩個啟動選項,輸入 linux-up 回車即可。此時系統就能無誤啟動成功了。
2. 網卡問題
從啟動 QEMU 的命令行可以看出,QEMU 模擬了 rtl8139 這款較老的網卡。在6.2系統中內核已經認出了這個設備。但是用 ifconfig 可以看出網卡接收不到任何數據:
我懷疑可能是宿主機的橋接網路設置有問題,於是用相同的配置啟動了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 地址。
簡單測試一下,GCC 什麼的工具都能運行,但是和內核打交道的工具肯定會有問題。例如ps會 core dump。guest中的ps期望讀到的/proc目錄裡面的文件格式是2.4內核生成的文件格式。我們這個3.16內核生成的文件肯定不一樣了。
更改了X配置文件中滑鼠設備路徑,從/dev/mouse 改成/dev/input/mouse0,X也可以啟動了!不過解析度還是有問題。應該深入一下可以解決的。
更新,可以體驗傳說中的 FVWM2 了
折騰了一晚上,還是沒辦法把 guest 上的X server正常工作, QEMU 的 cirrus 顯卡始終不能在老的X server下工作。於是決定用宿主機開啟一個X server,將 guest 作為X client。上圖!
LILO 引導,新來的 Linux 小朋友可能還沒見過...%>_<%
熟悉的 Red Hat 小紅帽 Logo
!!!在這裡說一下,gdm和xdm現在還沒法正常啟動一個完整的gnome環境。gnome-session 會core dump。
但是FVMW2,也沒有讓我失望:
最後看看悲劇的 Netscape 瀏覽器,緬懷一下,當年 Red Hat 6.2 是帶這款瀏覽器的,可惜後來被微軟在 Windows 里綁定 IE 乾死了,但是卻誕生了偉大的 Mozilla 和 火狐 Firefox,生得光榮,死得偉大,敬禮...
具體做法是:
1. 在宿主機下載Xnest軟體,在/etc/下添加一個配置文件X1.hosts,此文件允許guest連接本地 :1 伺服器
inet 172.18.18.62 #此ip為guest的ip
2. 宿主機啟動一個新的X server
Xnest :1
或者
xinit -- :1
3. guest 設置 DISPLAY 環境變數,輸入 fvwm2
然後就可以體驗了!!此外我為了體驗一下xdm還將guest上的xdm配置成不啟動本地 X server,只等待外部連接的設置。
尾聲
古董系統是跌跌撞撞勉勉強強啟動起來了。終於可以好好看那個howto繼續做最小系統了。其實還有一些可以折騰的地方,比方說把procps源碼包下載來調試調試,改改ps的源碼讓它在新內核上工作正常。
另一方面,3.16 內核還能帶動15年前的發行版這個事實倒說明了內核對外的介面是非常穩定的。折騰完畢,打完收工。
一起折騰
有小夥伴看完這篇文章也想折騰,不折騰不爽的,我把我處理好的虛擬機文件上傳到了網盤中提供下載歡迎一起折騰,下載地址:http://pan.baidu.com/s/1mg41b9u;文件名是:redhat-6.2-linuxstory.img
;下載到本地在終端中直接執行如下命令即可奇蹟發生(熱淚盈眶),(用戶名 root 密碼 zhu)當然你得先安裝 QEMU ,最新版本是 2.2.0。不謝。guest網卡設置了靜態ip。看官記得根據自己需要修改。
最後總結一下我的啟動命令:
qemu-system-x86_64 redhat-6.2-linuxstory.img -net nic,model=rtl8139 -sdl -net tap -enable-kvm -kernel /boot/vmlinuz-3.16.0-25-generic -append 'root=/dev/sda5 rhgb vga=792' -initrd /boot/initrd.img-3.16.0-25-generic -m 1G
有關於linux橋接網路的設置可以自行搜索~原創折騰,轉載請註明本文地址:http://www.linuxstory.org/meet-after-15-years-red-hat-linux-6-1-zoot-run-on-kernel-3-16/
當年連邦軟體買的Red Hat 6光碟應該還在
wow!看來是老前輩,前輩好!我覺得這個可以珍藏了^_^
[…] 原文:http://www.linuxstory.org/meet-after-15-years-red-hat-linux-6-1-zoot-run-on-kernel-3-16/ 作者: LINGYU […]