BV1AL 之無所不記

2017-06-18

雨天裡公園的滑水道

這幾天的預報,下雨機率都是百分之百,也使得入夜後氣溫涼到只有廿三、廿四度,
端午之後這麼涼的天氣也很難得。

下午路過附近公園,因為下著雨,除了涼亭有少數下棋的人以外,整個公園只有
我一個行人,以及雨滴打在傘上的聲音,連鳥都去躲雨了。

走過遊戲區,有一套架高起來的溜滑梯以及攀爬平台,滑道分成有蓋式的、無蓋式
的,塑膠(或塑鋼、FRP ?)製大紅大綠的那種。

忽然聽到小孩的叫喊聲,轉頭看見一個大概幼稚園的小弟。

正在滑著雨水遍佈的滑道,像水上樂園的滑水道一樣,小弟從滑道的洞口出來,
然後站起身。

頭、衣服、褲子都是濕的。

溜下來,接著又爬上梯架,換到另外一個滑道,再滑下來。整個公園沒有人跟他
搶遊樂設施。

小孩的媽媽撐著傘,站在遊樂組合的旁邊,靜靜看著小弟一趟又一趟的滑著、
叫著。

生為這個媽媽的小孩,長大後一定有很多快樂的童年回憶。

我們的這一代、上一代,制式反應是『下雨天不要出去亂玩,淋雨會感冒、
會生病』。

標籤: ,

2017-06-10

空機執行CentOS Live(有關iPXE)

原本都是用CentOS Live放在USB,最近因為有需求用PXE執行CentOS,但是傳統上
PXE的tftp傳輸很慢,於是改用iPXE,因為iPXE可以使用像是http, iSCSI, AoE等等的
protocol,相較快很多,http又可以跨越local LAN。

網路上大多數談到PXE是以安裝Linux系統為主要,但是這裡的目的,不是要install
,而是直接跑live system在一台空機上面, 因此需要把整個live image傳送到clicnet端,
如果採用iPXE加上http會比tftp好太多!

不論PXE(或iPXE)基本上只能傳送kernel及initrd兩個檔給client,可是我們有
kernel(vmlinuz), initrd.img, squashfs.img三個檔案,沒辦法全都傳!
而三個檔中的squashfs.img很大,根本不適合用tftp傳送!

網路上有人寫了一個把CentOS Live ISO轉給PXE用的script
https://github.com/livecd-tools/livecd-tools/blob/master/tools/livecd-iso-to-pxeboot.sh

它主要就是把原生CentOS Live的ISO拆開,再重新打包成兩個檔(一個kernel
及一個initrd.img),雖然我已經customized的CentOS Live當然可以再反組裝
回去ISO,但那是多費力氣,並不需要。

只要把squashfs.img打包成ISO檔,塞進拆開的initrd裡面,就構成PXE必要的
兩個檔之一,加上kernel就能透過iPXE快速的傳送到client端執行了。

squashfs.img的customize在這裡只簡單說明,它裡面有一個LiveOS的目錄,
裡面塞了一個ext4的單一檔案,這個檔案可以用dd if=/dev/zero來打底,改變
大小,將整個system tree搬進去,修改後再重新打包回squashfs.img裡面,
就是customize完成。

將squashfs.img打包成ISO的方法如下:
genisoimage -J -joliet-long -r -T -o CentOS.iso --root LiveOS /PATH/squashfs.img
再挖一個坑,例如 myISO/,把產出的CentOS.iso丟進去,myISO/下面你也可以
放任何你要放的檔案。
cd myISO/
find . -print|cpio -H newc -L -o|gzip -9 |cat /PATH/initrd.img - > ../init4PXE.img
產出的init4PXE.img會在 myISO/的上一層。
請注意!上面的"- >" 「減號」跟「大於」之間有一個「空白」

新的init4PXE.img會是幾百MB或超過1GB,看你做了什麼而定。

最後的重點就是bootloader的menu要怎麼寫,原本CentOS Live的bootloader
menu有一個參數
"root=live:CDLABEL=LIVEUSB" 這時候要改成
"root=live:/CentOS.iso" ←這個CentOS.iso是根據上面我們製作ISO給的
名字,然後boot option至少要保留"rd.live.image"這一個。
附註: 要拆解原生CentOS的initrd.img需要用到
CentOS自己的/usr/lib/dracut/skipcpio
這個工具。
(customize CentOS Live可能也要拆解initrd.img並且重新打包。
重新打包就是用上面的指令及參數
find . -print|cpio -H newc -L -o|gzip -c > initnew.img)

標籤: ,