用 debootstrap 安裝系統

用 debootstrap 安裝系統

用 debootstrap 安裝系統

裝好的系統要可以用 Qemu 開啟,更是準備用來當作 AoE 分享的硬碟作為網路開機使用。

主要是整個過程簡單說明

用 dd 產生約 512M 大小硬碟

dd if=/dev/zero of=etch.img count=\$((1040*16*63))

關於 1040*16*63 的意思

C = cylinders = 1040 //看硬碟大小而定

H = heads =16 //通常是16 或是 255

S = sectors per track =63 // 通常是 63

這通常是應碟的規格,不同場賠硬碟或記憶卡會有不同的 CHS 會影響你的分割區

因此我通常是這樣產生虛擬硬碟的

dd if=/dev/zero of=your_disk count=\$((\$C*\$H*\$S))

\$C * \$H * \$S 是算出硬碟的 sector 總數,而一個 sector 通常是 512 byte,

因此硬碟大小是 512M 的話 就是 \$C * 16 * 63 * 512 /1024 /1024 = 512 , \$C = 1040.25...

接著用 fdisk 切割硬碟

\$ fdisk etch.img

x // Extra functionality

c 1040 // 1040 cylinders

h 16 // 16 heads

s 63 // 63 sectors per track

r // Return to main menu

n // Create a new partition

p // Primary

1 // Partition #1

1 // First cylinder

1040 // Last cylinder

a // Set bootable flag

1 // Partition number

w // Write partition to disk

完成硬碟切割!

把檔案當作 loop device

把etch.img 當作/dev/loop0 使用,我的硬碟只有一個 Partition

\$ fdisk -lu etch.img //可以知道第一個 partition 從哪裡開始

所以需要 offset 512*63 是因為要跳過前面的切割區資料

\$ sudo losetup --offset \$((63*512)) /dev/loop0 etch.img

格式化磁碟 /dev/loop0

\$ sudo mkfs.reiserfs /dev/loop0

掛載起來

\$ sudo mount /dev/loop0 /mnt

用 debootstrap 安裝debian etch

\$ sudo debootstrap etch /mnt/ http://opensource.nchc.org.tw/debian/

修改一些基本的檔案

\$ cd /mnt

\$ vi etc/fstab

proc /proc proc defaults 0 0

/dev/hda1 / reiserfs defaults 0 0

借用目前系統中的 proc 與 dev

\$ sudo mount -t proc proc /mnt/proc/

\$ sudo mount -o bind /dev /mnt/dev

chroot 到 /mnt

\$ sudo chroot /mnt/

修改網路相關設定

(chroot)\$ vi /etc/networks

(chroot)\$ vi /etc/network/interfaces

(chroot)\$ vi /etc/resolv.conf

(chroot)\$ vi /etc/hostname

修改其他相關設定

(chroot)\$ /etc/default/rcS //設定成no UTC

(chroot)\$ tzconfig //設定時區

(chroot)\$ vi /etc/apt/sources.list //修改 apt 資源

(chroot)\$ apt-get update; apt-get install locale console-data

修改 kernel 安裝選項

(chroot)\$ vi /etc/kernel-img.conf

# Kernel image management overrides

# See kernel-img.conf(5) for details

do_symlinks = yes

relative_links = yes

do_bootloader = yes

do_bootfloppy = no

do_initrd = yes

link_in_boot = no

安裝 kernel 與 kernel source

(chroot)\$ apt-cache search linux-source

(chroot)\$ apt-cache search linux-image

(chroot)\$ apt-get install kernel-image-2.6-386

安裝 boot loader - GRUB

(chroot)\$ apt-get install grub

(chroot)\$ mkdir /boot/grub

借用系統的 GRUB 影像檔( 需要暫時離開chroot )

\$ cp /boot/grub/*stage* /mnt/boot/grub/

更新GRUB (需要回到 chroot)

(chroot)\$ update-grub

離開 chroot

\$ exit

卸載 /mnt

sudo umount /mnt

不使用 loop device

sudo losetup -d /dev/loop0

開始設定 GRUB 前需確認沒有被 loop 或是 mount

\$ grub --device-map=/dev/null

(grub) device (hd0) etch.img

(grub) geometry (hd0) 1040 16 63

(grub) root(hd0,0)

(grub) setup (hd0)

(grub) quit

用 QEMU 測試

qemu etch.img

convert from Thomas blog post id 157 old convert log: ./023158/tag%3E2007%2009%20linux)

@2007 @09 @linux

Comments