2014年5月8日 星期四

建立 deb_mirror.img

目的:將 deb_mirror.img 建立成一個小型的 debian repository


思維模式:

PXE Server 負責提供一個可以讓同網域網段之電腦利用網路開機、取得 IP 以及安裝 Debian Linux 的功能,其中 deb_mirror.img 負責存放網路安裝 (net install) 時必須使用的套件 (package),也就是安裝時所必要的 .deb 檔案。因此我們建立 deb_mirror.img,將其分割、格式化,並掛載至 /mnt 目錄以利下載套件用。

建立 deb_mirror.img 流程:

a. dd if=/dev/zero of=deb_mirror.img bs=1G count=2
b. # fdisk deb_mirror.img
   將其建立一個分割區。
c. 將 deb_mirror.img 格式化
   # losetup /dev/loop0 deb_mirror.img
   # losetup -o $[2048*512] /dev/loop1 /dev/loop0
   # mkfs.ext4 /dev/loop1
d. 將 /dev/loop1 掛載至 /mnt 目錄
   mount /dev/loop1 /mnt
   掛載完畢後可以執行
   df -h /mnt 來觀察是否有正確掛載,其輸出如下所示:
   檔案系統        容量  已用  可用 已用% 掛載點
   /dev/loop1      2.0G  3.0M  1.9G    1% /mnt



複製 deb_mirror.img 流程:

一開始我們的想法很單純,將 Debian 安裝光碟第一片複製到 deb_mirror.img 中「理論上」即可提供安裝流程所需要的檔案。因此我們需要將 debian 第一片安裝光碟中之檔案複製到 /mnt (目前已掛載 deb_mirror.img) 目錄下,首先要下載第一片安裝光碟,並掛載至 /cdrom 目錄,其操作如下:

1. 下載 debian 第一片安裝光碟

wget ftp://ftp.twaren.net/pub/Debian/debian-cd/current/amd64/iso-cd/debian-7.5.0-amd64-CD-1.iso

(校內請至 120.117.72.71 之 iso 目錄下載)

2. 掛載 debian-7.5.0-amd64-CD-1.iso 至 /cdrom 目錄

首先檢查是否有 /cdrom 目錄,若沒有的話請執行:

# mkdir /cdrom

建立完此目錄後將 debian-7.5.0-amd64-CD-1.iso 掛載至此目錄,指令如:

mount -o loop debian-7.5.0-amd64-CD-1.iso /cdrom

3. 檢視 /cdrom 目錄之內容:

請切換至 /crom 目錄,指令如下:

cd /cdrom

接著執行 ls -l,其輸出如下:

-r--r--r-- 1 root root     27  4月 26 21:38 autorun.inf
dr-xr-xr-x 1 root root   2048  4月 26 21:38 boot
dr-xr-xr-x 1 root root   2048  4月 26 21:38 css
lr-xr-xr-x 1 root root      1  4月 26 21:37 debian -> .
dr-xr-xr-x 1 root root   2048  4月 26 21:38 dists
dr-xr-xr-x 1 root root   4096  4月 26 21:37 doc
dr-xr-xr-x 1 root root   2048  4月 26 21:38 efi
dr-xr-xr-x 1 root root   2048  4月 26 21:38 firmware
-r--r--r-- 1 root root 159629  4月 24 15:42 g2ldr
-r--r--r-- 1 root root   8192  4月 24 15:42 g2ldr.mbr
dr-xr-xr-x 1 root root   2048  4月 26 21:37 install
dr-xr-xr-x 1 root root   2048  4月 26 21:38 install.amd
dr-xr-xr-x 1 root root   4096  4月 26 21:38 isolinux
-r--r--r-- 1 root root 212666  4月 26 21:51 md5sum.txt
dr-xr-xr-x 1 root root   2048  4月 26 21:38 pics
dr-xr-xr-x 1 root root   2048  4月 26 21:38 pool
-r--r--r-- 1 root root   9262  4月 26 21:51 README.html
-r--r--r-- 1 root root 176551  4月 11 09:52 README.mirrors.html
-r--r--r-- 1 root root  87800  4月 11 09:52 README.mirrors.txt
-r--r--r-- 1 root root    425  4月 26 21:38 README.source
-r--r--r-- 1 root root   5827  4月 26 21:51 README.txt
-r--r--r-- 1 root root 366350  4月 24 15:42 setup.exe
dr-xr-xr-x 1 root root   2048  4月 26 21:38 tools
-r--r--r-- 1 root root    256  4月 26 21:38 win32-loader.ini

/cdrom 目錄有許多目錄及檔案,我們可以執行 du -sh * 來觀看每個檔案/目錄的容量,如底下所示:

512     autorun.inf
1.9M    boot
8.0K    css
0       debian
3.3M    dists
33M     doc
416K    efi
2.0K    firmware
156K    g2ldr
8.0K    g2ldr.mbr
2.0K    install
33M     install.amd
303K    isolinux
208K    md5sum.txt
29K     pics
562M    pool
9.5K    README.html
173K    README.mirrors.html
86K     README.mirrors.txt
512     README.source
6.0K    README.txt
358K    setup.exe
76K     tools
512     win32-loader.ini

其中 pool 目錄所佔容量最大,共有 562 MB,這個目錄相當「可疑」,很有可能是我們在安裝時所會用到的 .deb 檔案,因此值得切換進去觀察裡面內容。經過一番觀察,此目錄的確存放 .deb 檔案,因此可以將此目錄複製到 /mnt 目錄,指令如下:

cp -av /cdrom/pool /mnt

執行 buildlinux.sh 之鏡像站選擇/下載套件 出錯時之處理流程:

請在 buildlinux 之虛擬機器按 Ctrl+Alt+F 切換至全螢幕,然後按 Alt+F4 至第四個虛端終端機來看錯誤訊息,此時我們會看到系統是因為少了那些檔案而導致安裝流程出錯。根據其錯誤訊息,我們要建立

/mnt/dists/jessie
/mnt/dists/sid
/mnt/dists/squeeze
/mnt/dists/wheezy

四個目錄,再建立底下連結:

root@wyvern:/mnt/dists# ln -s wheezy stable
root@wyvern:/mnt/dists# ln -s jessie testing
root@wyvern:/mnt/dists# ln -s squeeze oldstable
root@wyvern:/mnt/dists# ln -s sid unstable

然後再複製每個目錄所缺少的檔案,目前缺少 Release 檔案。

複製完畢後請至 PXE 伺服器重新掛載 /var/www/debian 目錄

mount -o ro,remount /var/www/debian


並檢查 /var/www 底下是否有 dists 目錄以及剛剛複製的檔案。

然後請再回到 buildlinux 底下,切換至全營幕並重新執行安裝流程,此時我們會發現出現新的錯誤訊息,這表示剛剛 buildlinux 已經有抓到我們複製的檔案,並前往下一步,由於檔案仍然有缺,因此出現新的錯誤訊息。

因此我們繼續複製缺少的檔案:

/mnt/dists# mkdir -p wheezy/main/binary-amd64/
cd wheezy/main/binary-amd64/
wget ftp://ftp.debian.org/debian/dists/wheezy/main/binary-amd64/Release


複製完畢後請再回到 PXE 伺服器,重新掛載 /var/www/debian 目錄。掛載完畢後請再檢查 /var/www/debian/dists/wheezy/main/binary-amd64/Release 這個檔案是否存在,然後切換至 buildlinux 繼續安裝流程。

現在出現的錯訊息是

dists/wheezy/Release is unsigned.

這表示 Release 這個檔案沒有數位簽章,也就是說我們沒有複製 Release.gpg 這個檔案,請複製

ftp://ftp.debian.org/debian/dists/wheezy/Release.gpg

指令如下:

/mnt/dists/wheezy# wget ftp://ftp.debian.org/debian/dists/wheezy/Release.gpg

另一個錯誤訊息是

relolver (libc6-udeb): package doesn't exist (ignored)

這表示 libc6-udeb 這個套件找不到,請至 packages.debian.org 來找

我們可以找到此套件的位置是:

http://ftp.debian.org/debian/pool/main/e/eglibc/libc6-udeb_2.13-38+deb7u1_amd64.udeb

因此我們要在自己的鏡像站的同一個目錄存這個檔案,請切換至

/mnt/pool/main/e/eglibc 目錄,如果沒有此目錄的話,請自己建一個

接著下載此檔:


/mnt/pool/main/e/eglibc# wget http://ftp.debian.org/debian/pool/main/e/eglibc/libc6-udeb_2.13-38+deb7u1_amd64.udeb


作完後請記得至 PXE 伺服器重新掛載 /var/www/debian

之後再切換至 buildlinux 來繼續安裝流程


----------------------------------------------------------------------------
PXE 伺服器設定:

此時我們可以啟動 PXE 伺服器,並將 /dev/sdb1 以 ro 的權限來掛載至
/var/www/debian 目錄,指令如下:

# mount -o ro /dev/sdb1 /var/www/debian

(請注意上述指令在 PXE 伺服器中執行)

掛載完畢後可以執行 df -h /var/www/debian 來觀看其輸出,如底下所示:

檔案系統        容量  已用  可用 已用% 掛載點
/dev/sdb1       2.0G  600M  1.3G   32% /var/www/debian

我們可以看到 /var/www/debian 目前已用 600M 的空間,正好是之前複製光碟片的容量。

----------------------------------------------------------------------------
建立 linux client 主機:

請執行 buildlinux.sh 看看能否進入安裝畫面,並正常安裝。我們在輸入鏡像站時以自定鏡像站 192.168.10.254 來作為安裝鏡像站,結果發現出錯。因此要回到 /mnt 檔案複製處繼續修改。

沒有留言:

張貼留言