天殺的OS作業: 製作Linux USB
live開機隨身碟這個作業,是要將Linux的Kernel塞到USB裡面Live開機,因為實在太麻煩了,我不得不記錄步驟,否則連我自己都會忘記
使用VirtualBox模擬Debian來編譯Linux kernel
我一直不知道Linux要怎樣編譯,想說在Windows下編出來的是.exe,不是很奇怪嗎? 應該不可能,看了一些文件後才知道是用Linux來編Linux
老樣子,特地灌一個Linux OS然後用它來編譯Linux kernel,那我的其它事情就不用做了,當然還是使用Virtual Box最方便,我使用VirtualBox之前灌好的Debian,來進行編譯Linux kernel的工作
話說編譯核心的教學還真不少,可是很多都已經過時,不然就是好像不盡相同的感覺,最後我按照
http://www.cyberciti.biz/tips/compiling-linux-kernel-26.html
步驟進行
下載Kernel 花了我不少時間,接著解壓縮,真不愧是一個OS,光解壓縮就解了好久,還真不少檔案,光是解壓縮也是很麻煩的事,我老是記不是tar後面要接什麼鬼參數,每次都要上網查
缺了重要的角色 : gcc
接著,要compile發現沒有gcc,我以為那麼常用,一開始就有安裝好,但是不幸的是Debian並沒有一開始就安裝gcc,因此開始安裝gcc的艱難旅途
首先使用apt-get install gcc指令想安裝gcc可是卻失敗,它顯示我沒有權限,改用sudo apt-get install gcc 它又說 “victor is not in the sudoers file”,原來我還得用visudo去把我的帳號加進sudoer file才給我用sudo指,但是看起來很麻煩就放棄了,還好後來後來發現可以用su進入root
使用這些東西時永遠都有驚喜
當我用su root成功執行apt-get install gcc之後… 它居然要我插入Debian的CD,歐! shit! 從我開始想compile Linux的kernel以來每一個步驟都有驚喜,我不明白為什麼apt-get不是從網路下載gcc而是要我插入光碟
後來想想,算了,它要插就給它插個爽吧,反正是模擬出來的 ISO送進去就好,終於,耶~ gcc裝好了 終於到了開始compile的時候
事情永遠沒有你想的這麼簡單
make指令一下… 出現一堆錯誤 它居然說stderr未定義,這就表示c的函式庫根本沒有被安裝 囧
http://www.wretch.cc/blog/griffey/8316907
此時發現了救星 原來c的函式庫還要另外安裝,要安裝build-essential才有c的函式庫~ 老天阿 鬼知道要裝這個,囧,make能跑天已經黑一半了!
開始make
我試了各種xxxconfig,都失敗,它們似乎都要另外裝一堆東西才能執行,最後我發現make menuconfig需要裝ncurses就可以執行,於是就裝了ncurses,我完全沒有興趣知道那是什麼鬼東西
終於,make menuconfig完成了,妖獸! 好多選項 我也不知道我要怎樣的linux 就隨便吧,預設值先跑跑看,後來感謝doomleika說要勾ext2後來才能boot,我就勾了ext2重編了一次
以下是我make的指令:
make menuconfig
make bzImage
make modules
make modules_install
接著還需要initrd.img,好像是載入驅動用的影像檔,使用mkinitrd來產生那個影像檔,mkinitrd也要另外安裝,原本我沒有執行make modules_install就去跑mkintrd,mkinitrd某個特定版本時就說找不到那些版本的東西,因此該版本的modules要install完成才能正確地執行mkinitrd
apt-get install initrd-tools
mkinitrd -o initrd.img 2.6.22.2
格式化USB
還好VirtualBox提供了將USB裝置虛擬到OS的功能,所以我在虛擬OS裡就可以格式化USB,還有執行grub等等的動作
首先用fdisk指令將USB清掉,接著用mkfm.ext2格式話成ext2的檔案格式,然後,用指令
grub-install –no-floppy –root-directory=/mnt /dev/sda
將grub裝到usb中,接著建立一個檔案放在/boost/grub/menu.lst,內容為
default 0
timeout 10title Victor’s USB Live Linux
root (hd0,0)
kernel /boot/linux.img-2.6.22.2
initrd /boot/initrd.img-2.6.22.2
接著用
grub>
device (hd0) /dev/sda
root (hd0,0)
setup (hd0)
quit
將grub燒入到USB的MBR中
在這之中我一直弄錯,問題出在全部用/dev/sda來下指令,包括mkfs.ext2之類的,沒注意到/dev/sda1後面要加一才是磁區1,因為一直破壞到檔案系統,接下來的步驟當然也全部都失敗
終於! 成功地開機,載入了linux,但在開機的過程中說找不到/dev/console,搞了半天,原來還要建一些設備
http://tw.msnusers.com/Linuxstepbystep/floppy.msnw
參考這裡,接著開機的錯誤只剩找不到/sbin/init,似乎是開機完會執行那個玩意兒
好像busybox就有那樣的東西,因此我就來編譯busybox,可是編譯失敗,它說沒有inotify_init,我也不知道為什麼,最後用make menuconfig把它diable掉就編譯成功了
把busybox接著把_install下的所有東西copy到USB上
cp -r * /mnt
接著再開機試試
qemu /dev/sda
很神奇對吧,qemu也是一款模擬器,所以這就是模擬器中的模擬器!
終於! 可以開機了…但是它不停跟我抱怨找不到tty2, tty3…
看來好像是tty之前建的不夠,tty到底是什麼鬼我也不知道= = 他想要就給他吧
參照
http://www.faqs.org/docs/pocket_linux/x1252.html
http://www.xs4all.nl/~lennartb/rescuedisk/node7.html
一口氣建好其它tty給他,最後! 吃飽喝足的Linux終於成功地開機起來了
Windows的VirtualBox模擬出來的Debian中的Linux,模擬器中的模擬器,有趣吧!
結論
從頭到尾,我不知道查了多少文件,半夜弄到了幾點,其中每個步驟都有驚喜,每個步驟都不是你想像中的那樣簡單,查文件次數/步驟 應該到了一個驚人的數字,WTF Per Minutes更是不用說已經破表了,我只能說
陽壽不足,請勿在家嘗試,Victor關心您
網路上能找到的文章,大多不是已經過時,不然就缺掉很多重要的步驟,不然就是用的工具或手法不大相同,大多數都是將ISO或是現成的Live CD或USB工具塞到USB中的教學,要從頭到尾由Kernel編譯起來到塞到USB中,會嘔出幾兩血是正常的,總結以上的心得,有幾大步驟
- 準備編譯環境
- 編譯核心以及模組,並且放置到boot中
- 格式化
- 設置boot loader,寫入MBR
- 建置資料夾、以及設備,以及放置核心影像檔
- 安裝BusyBox等工具
事實上每個大步驟都可以拆成一篇文章來講,還有很多東西事實上我還是搞不懂它在幹麻的,像tty到底是什麼鬼設備我現在還是搞不清楚,不過,至少開機成功了,有閒的話,我重新製作一次,然後把每個大步驟獨立成一篇文章來講好了:P
還是 BSD 比較簡單
make buildworld
make buildkernel
make installkernel
make installworld
reboot
Done !
你應該是沒設定 source.list,所以才沒去網路上下載 packages
Debian 算是很好上手的 distribution 了,不過還是要稍微設定一下就是了
好東西跟您分享:http://www.pendrivelinux.com/
上面有好多live CD/USB的實作文章 😀
其實有個很懶的方法可以做出來….
tty就是console terminal….
路過