Lite#1: สร้าง Ubuntu-Hardy ตรงตามใจ (LiveCD from Scratch) ตอนจบ


Posted in:
TrendyTeddy's picture

ความเดิมจากตอนที่แล้ว: ผมเขียนถึงการสร้าง LiveCD Ubuntu ให้มีแต่แก่นเพียวๆ
เพื่อเอาไปโมตามใจชอบได้ว่าจะยำใหญ่ใส่อะไรไปบ้างก็ได้กันไปแล้ว
ก็ได้ LiveCD ขนาด 180Mb (ถือว่าใหญ่มากกก Ubuntu Minimal+Standard+Xorg+Ubiquity)

และเอาไปแพครวมกับดิสโทรอื่นอีก 3 ตัว รวมเป็น Multi Distro 4 ตัวในแผ่น 1 CD
ทั้งสี่เป็น LiveCD ครับ ทำให้ Boot ได้เลย ไม่ได้เป็นแผ่นรวม ISO

-Ubuntu Standard 8.04 Alpha3 + Xorg + Ubiquity
-PC LinuxOS MiniME 2008
-Wolvix Cub Mini 1.10 (ตัดตกแต่งจาก Version เดิมอีก) : เจ้าตัวนี้ผมชอบเอาไปล้วงข้อมูลเครื่อง Win$
-R.I.P. Linux non X เป็น System Rescue ตัวหนึ่งที่ใช้ได้

**ว่าจะเอาไปแจกคนที่มาร่วมประชุมวันเสาร์นี้ขอรับ

มาว่าเรื่องการสร้าง LiveCD ต่อให้จบดีกว่าครับ
...

ครั้งที่แล้วเมื่อ apt-get หรือ aptitude Packages ที่ต้องการได้มาหมดแล้ว
ก็มาถึงขั้นตอนทำระบบที่เราสร้างขึ้นมาให้เป็น LiveCD และพร้อมที่จะทำเป็น ISO image ต่อไป

3. สร้างระบบ LiveCD

มีศัพท์ที่เกี่ยวข้องดังต่อไปนี้

-isolinux.bin และ isolinux.cfg
-kernel และ initrd
-casper
-squashfs
-ubiquity

อธิบาย: ก็ตามที่ผมเข้าใจนะครับ
เวลาเราบูตเครื่องไม่ว่าจะบูตจาก Harddisk หรือ Storage Media แบบอื่นๆ นั้น
BIOS จะมองหาส่วนของการบูตของมีเดียนั้นๆ

เช่น ถ้าจาก Harddisk จะมองจาก MBR
ซึ่งถ้าเราติดตั้ง grub มันก็จะบริหารงานรับช่วงต่อมาจาก MBR กล่าวคือเป็น Boot Manager
ถ้าบูตจาก Floppy, CD หรือ USB นั้น BIOS จะหาไฟล์ที่เป็น Boot Loader ประเภทอื่น ๆ

ซึ่งใน LiveCD ทั่วไปมักใช้ "isolinux.bin" ทำให้มีเดียพวกนี้บูตได้
และมันจะอ่านค่า config จาก isolinux.cfg
isolinux ไม่ได้มาจากระบบพื้นฐานปกติ แต่ต้องติดตั้ง package ที่ชื่อว่า syslinux ด้วยครับ

ไม่เชื่อลองเปิด LiveCD ของคุณลองหาไฟล์พวกนี้ดูครับ

isolinux.bin จะส่งค่าที่เราเลือกจากเมนู isolinux.cfg ให้กับการโหลด
kernel และ initrd ขึ้นมาทำงาน
ซึ่งถ้าสังเกตจากเมนู isolinux.cfg จะเห็นค่าสองค่านี้ ได้แก่
kernel=xyz และ initrd=xyz

ถ้าเป็น kernel ใน liveCD มักจะมีชื่อว่า vmlinuz และ initrd ก็มักมีชื่อไม่ต่างจากนี้นัก
จากนั้นก็ปล่อยให้มันทำงานของมัน

แพคเกจที่ชื่อว่า casper นั้นจะทำการ generate initrd เพื่อให้ทำงานแบบ liveCD
และโครงสร้าง Ubuntu LiveCD จะเห็น Folder หนึ่งที่ชื่อ casper และมี subfolder ต่างๆ
เพราะ casper script จะให้ kernel และ initrd อ่านค่าต่างๆ จาก folder เหล่านั้นก่อน

พอมาถึงขั้นตอน initrd นี่แหล่ะที่จะ mount filesystem ในแบบ liveCD
ซึ่งถ้าเราเปิดโครงสร้าง LiveCD จะเห็นไฟล์หนึ่งที่ใหญ่มากที่สุดกินเนื้อที่เกือบทั้งหมด
มักจะเป็นชื่อไฟล์ หรือตามด้วยนามสกุล sqfs, squashfs หรือตามวิธีบีบอัดขนาด

นั่นแหละไฟล์ระบบที่เราสร้างไว้ และถูกบีบอัดขนาด
ปัจจุบันเทคโนโลยีการบีบอัด LiveCD ที่ให้ขนาดเล็กที่สุดน่าจะเป็น squashfs-lzma ซึ่งใช้ใน (slax, wolvix, pud linux)

ไฟล์ระบบที่รันในโหมด LiveCD นี้ จะถูกติดตั้งกลับสู่ Harddisk ได้ แต่ถ้าโดย manual แล้วค่อนข้างยุ่งยาก
จึงมี packages ที่ช่วยจัดการเรื่องนี้อย่างเช่น ubiquity เป็นต้น

มาภาคปฏิบัติกันดีกว่า

3.1 ออกจากระบบ chroot ที่สร้างระบบพื้นฐาน liveCD ของเรา
แล้วถอยออกมา 1 ระดับ เพื่อสร้าง folder ที่เราจะเอาไปใช้ทำ liveCD

#exit (ออกจาก chroot-ในกรณีที่ยังไม่ออก)
$cd ../
* หมายเหตุ ออกจากโฟลเดอร์ที่เราทำ liveCD นะครับ ไม่งั้นจะมึนแน่ๆ

mkdir image image/casper image/casper/install image/install image/isolinux
(เอาไว้ใส่ระบบ liveCD ของเรา)

image
|-caspe
|-install
|-isolinux

3.2 ติดตั้งแพคเกจที่จำเป็นเพิ่ม ได้แก่
#apt-get syslinux squashfs-tools mkisofs

3.3 copy ไฟล์ที่จำเป็นมาใส่ในโฟลเดอร์

#cp /usr/lib/syslinux/isolinux.bin image/isolinux/
#cp /boot/memtest86+.bin image/install/memtest

* ส่วนข้างล่างนี้จะติดตั้งหรือไม่ก็ตามใจขอรับเป็นโปรแกรม
smart boot manager ในกรณีเครื่องเราเก่ากึ้มมาเกินกว่าจะบูตจาก CD Rom (จะมีไหมเนี่ย)

#wget http:/linux.simple.be/tools/floppy/sbm.img
#mv ./sbm.img image/install/

เป็น image ไฟล์ไว้สร้างแผ่นบูตเพื่อให้ส่งค่าให้ ฺBIOS บูตจาก CD ROM ได้

#cp live/boot/vmlinuz-2.6.24-3-generic image/casper/vmlinuz
#cp live/boot/initrd.img-2.6.24-3-generic image/casper/initrd.gz

3.4 สร้างไฟล์ที่จำเป็นต่อการบูตระบบ

สร้างไฟล์ isolinux.txt

#nano image/isolinux/isolinux.txt

เช่น

This is My Ubuntu Live CD Ha Ha Ha!!!

For the default live system, enter "live".
To verify the CD for errors, enter "check".
To run memtest86+, enter "memtest"

สร้างไฟล์ isolinux.cfg เพื่อเป็นค่าให้ isolinux.bin อ่าน

#nano image/isolinux/isolinux.cfg

เช่น

DEFAULT live
LABEL live
menu label ^Start or install Ubuntu
kernel /casper/vmlinuz
append file=/cdrom/preseed/ubuntu.seed boot=casper initrd=/casper/initrd.gz quiet splash --
LABEL check
menu label ^Check CD for defects
kernel /casper/vmlinuz
append boot=casper integrity-check initrd=/casper/initrd.gz quiet splash --
LABEL memtest
menu label ^Memory test
kernel /install/memtest
append -
LABEL hd
menu label ^Boot from first hard disk
localboot 0x80
append -
DISPLAY isolinux.txt
TIMEOUT 300
PROMPT 1

3.5 สร้างไฟล์สัพเพเหระ ได้แก่

-manifest

เข้า live ด้วย chroot อีกครั้ง เพื่อสร้าง manifest

#chroot live
dpkg-query -W --showformat='${Package} ${Version}\n' > ./filesystem.manifest
#exit

#mv live/filesystem.manifest image/casper/filesystem.manifest
#cp image/casper/filesystem.manifest image/casper/filesystem.manifest-desktop

*ถ้าติดตั้ง ubiquty (เพื่อใช้ติดตั้งระบบ) ก็สร้างไฟล์นี้ด้วย

#sed -ie '/ubiquity/d' image/casper/filesystem.manifest-desktop

-diskdefine

nano image/README.diskdefines

เช่น

#define DISKNAME Ubuntu 8.04 - Release i386 **Remix**
#define TYPE binary
#define TYPEbinary 1
#define ARCH i386
#define ARCHi386 1
#define DISKNUM 1
#define DISKNUM1 1
#define TOTALNUM 0
#define TOTALNUM0 1

3.6 บีบอัดไฟล์โฟลเดอร์ live เพื่อจะทำไฟล์ระบบ

#mksquashfs chroot image/casper/filesystem.squashfs

4. ต้มมาม่ารอ

ก็แล้วแต่ขนาดไฟล์ และความเร็วเครื่องน่ะนะ

ถ้าเสร็จแล้วก็ทำ md5sum เพื่อให้ดูอินเตอร์ด้วย

$sudo -s
#cd image && find . -type f -print0 | xargs -0 md5sum > md5sum.txt
#exit

5.ได้ LiveCD ที่อวดได้ว่า "ของข้าเว้ย"

ช้าก่อน แพค liveCD ก่อน

cd image
sudo mkisofs -r -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4

-boot-info-table -o ../ubuntu-remix.iso .

หรือจะตั้งชื่ออื่นแทน ubuntu-remix.iso ก็ได้

ไปล้างชามที่ทานมาม่าๆ ซะ
กลับมาก็ได้ liveCD "ของข้าเว้ย"

ก็จบด้วยประการฉะนี้แล เอวัง

*ปล. ผมทำดูแล้ว และลองติดตั้งด้วย Ubiquity ปรากฏว่ามันพยามจะหา repos และ update ตั้งร่วมชั่วโมง
ทั้งๆ ที่ผมไม่ได้ต่อ network อะไรเลย ใครช่วยแก้ได้ช่วยบอกหน่อยครับ ไม่ให้มัน update อัตโนมัติเวลาติดตั้ง

เกี่ยวกับ

เกี่ยวกับ ubiquity-hooks ไหมครับ

TrendyTeddy's picture

livecd-rootfs

มีเครื่องมือสร้าง livecd อย่างนี้แบบง่า่ยๆ ไม่ต้องเข้าใจเทคนิคเลย
แค่
sudo apt-get install livecd-rootfs
sudo livecd.sh

มันก็จะทำงานไปเรีื่อยจนจบที่ได้ระบบพื้นฐานก่อนจะทำ ISO image
no comments
...

T_T เอ่อ แล้วตูจะเมื่อยตุ้ม เขียนบทความนี้ทำไมฟะ

GreenApple's picture

อ่าวกำ

อ่าวกำ คุงพี่หมี ซะงั้นอ่า
แต่ก็ดีคับ รู้ไว้หลายๆทาง
ทางตรงทางอ้อม

ไปไม่ได้แน่ๆ เลย

ติดงานศพแม่เพื่อนเผาวันนี้ คงกลับมาไม่ทันน่ะครับ อยู่ จ.นน โน่น เขาพระราชทานเพลิงศพด้วย

ช่วยด้วยครับ !!! มันเป็นแบบนี้

ผมทำตามที่คุณ TrendyTeddy สอนวิธีทำ LiveCD แต่ผมดัดแปลงไปใส่ใน usb ครับ เมื่อบูตเข้ากราฟฟิคได้สักพัก ก็ขึ้นข้อความดังนี้ครับ

BusyBox v1.1.3 (Debian 1:1.1.3-5 ubuntu12) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs)
(initramfs)_

มันคืออะไรครับ แล้วควรจะแก้ไขอย่างไรดี ผมทำตามวิธีของคุณทุกอย่างครับ
อ้อ ขอเพิ่มอีกหน่อยนะครับ ขอเดิมที่คุณสอนคือ
#mksquashfs chroot image/casper/filesystem.squashfs
แต่ผมทำแล้วมันไม่ยอมเข้า chroot ครับ ผมเลยเปลี่ยนเป็น ดังนี้
#mksquashfs live image/casper/filesystem.squashfs
ไม่ทราบเป็นที่จุดนี้หรือเปล่าครับ ที่ทำให้การบูตมีปัญหาครับ

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
  • Allowed HTML tags: <i> <center> <span> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <br> <dt> <dd> <object> <embed> <hr> <img> <blockquote> <b> <u> <del> <div> <p> <table> <tr> <td> <font>

More information about formatting options