เหอะๆๆ เอาอีกแล้วครับผม ได้รับหน้าที่ให้ลง Linux Slackware บนเครื่อง HP ProLiant BL20p G2 server บอกได้เลยว่าลงได้ยากสุดตีน (ก็กูไม่เคยลงนี่หว่า….สาด) เอ้า อย่าเพิ่งบ่นมาก…เพราะเดี๋ยวเราจะทำการ ลงไป บ่นไป แน่นอน… มาว่ากับปัญหากันก่อนครับ
![]() |
ปัญหาที่พบ
แนวทางการแก้ปัญหา
|
ขั้นตอนการแก้ปัญหา (อย่างละเอียดสุดตีน)
- Compile Kernel ใหม่ให้ Support อุปกรณ์เหล่านั้น
- ไป Download Kernel ใหม่ที่ ftp://ftp2.kernel.org/pub/linux/kernel/ ล่าสุด ณ 20070308 ก็จะเป็น Kernel 2.6.20.1 ครับ
- นำ Kernel ใหม่ที่ได้มาแตกออก
#sudo gunzip < linux-2.6.20.1.tar.gz | tar xvf –
#ls -l
drwxr-xr-x 19 little-cow little-cow 4096 2007-02-20 13:34 linux-2.6.20.1
-rw-r–r– 1 root src 54550468 2007-03-07 16:30 linux-2.6.20.1.tar.gz - ใช้คำสั่ง make mrproper และ make clean ตามลำดับ(สำหรับ 2 command นี้ถ้าเป็นครั้งแรกไม่จำเป็นต้องใช้ เราจะใช้ก็ต่อเมื่อเรา Compile ซ้ำหลายๆครั้ง แฮะๆ ของผม Compile เกือบ 20 ครั้งได้มั่ง 🙂 ) หลังจากนั้นก็ตามด้วย make menuconfig คำสั่งนี้จะเป็นคำสั่งที่จะนำเราเข้าไปสู่หน้า Config Driver ต่างๆให้เข้ากับอุปกรณ์ที่เรามี อันนี้คงต้องเข้าไปใน web site ของ Server แต่ละเจ้าดูว่าแต่ละรุ่นแต่ละยี่ห้อมันใ้ช้ อุปกรณ์ต่างๆของค่ายไหน
#make mrproper
#make clean
#make menuconfig - เมื่อเลือก Driver ต่างๆ สมใจเราแล้วก็ทำการออกมา…พอออกมาเสร็จก็ใช้ Command make อีกครั้ง อันนี้มีข้อแนะนำว่า อย่า make install เป็นอันขาด เพราะจุดประสงค์ของเราก็คือ การ Compile ให้ได้ Kernel ตัวใหม่เท่านั้นเอง ไม่ได้ใช้เองซ่ะหน่อย(ตอนสุดท้ายเราจะ Copy ไอ้อันใหม่นี้ไปเขียนลงในแผ่นต่อไป)
#make
** สำหรับ เรื่องการ Compile Kernel นี่ผมได้เขียนรายละเอียดและขั้นตอนไปบางแล้วนะครับ สามารถอ่านได้ที่ การ Compile Kernel 2.6.20
- นำ Kernel ใหม่ที่ได้มา Build ใหม่ลงแผ่น
- อันดับแรกเราก็ไป copy ไฟล์ข้อมูลทั้งหมดจากแผ่นที่ 1 มาเก็บไว้ที่เครื่องของเรา(อันนี้คงไม่ต้อง สาธยาย กันมาก เอาเป็นว่าทำยังไงก็ได้ไปเอาข้อมูลที่อยู่ใน CD แผ่นที่ 1 ของ Slackware 11 มาลงไว้ที่เครื่อง)
# pwd
/slackware_11_new/slackware_11
# ls -l
total 1064
-rw-r–r– 1 root root 9735 2007-03-07 17:47 ANNOUNCE.11_0
-rw-r–r– 1 root root 20933 2007-03-07 17:47 BOOTING.TXT
:
: - หลังจาก Copy Source ไฟล์มาแล้ว ก็ทำการสร้าง Directory ใน directory kernel อีกอัน(เพื่อใช้เก็บ Kernel อันใหม่ที่เราได้ Compile ไปในตอนแรก)
# mkdir cslox.s
# ls -l
total 228
:
drwxr-xr-x 2 root root 4096 2007-03-08 16:21 cslox.s
: - แล้วก็ไป Copy File 3 ไฟล์ จาก Path ของ Kernel ตัวใหม่ เอามาวางไว้ที่ Directory ที่เราได้ Create ไว้ (directory cslox.s) โดยไฟล์ทั้ง 3 ไฟล์มีดังนี้
- .config ไฟล์นี้จะเอามาจาก Path : /linux-2.6.20.1/.config แต่เวลาเราเอามาให้เปลี่ยนชื่อไฟล์เป็น config เฉยๆ ไม่ต้องมีจุด
- bzImage ไฟล์นี้จะเอามาจาก Path : /linux-2.6.20.1/arch/i386/boot/ (path kernel ตัวใหม่ที่เราได้ Compile แล้ว)
- System.map ไฟล์นี้เอามาจาก Path : /linux-2.6.20.1/ พอเอามาแล้วต้องทำการ gzip ไฟล์ด้วยนะครับจะกลายเป็น System.map.gz
- คราวนี้เราก็จำเป็นตั้งไป Config เพื่อให้เวลา Boot เครื่องจากแผ่น เราก็จะสามารถเลือก kernel ตัวใหม่ที่เราได้ทำไป ก็ไม่มีอะไรมาก ให้เข้าไปที่ directory /slackware_11_new/slackware_11/isolinux/ แล้วก็เข้าไปแก้ไขในไฟล์ 2 ไฟล์ดังนี้
- f3.txt อันนี้เอาไว้ Show ตอนทีี่เรากด F3 แล้วมันจะ Show Description ของแต่ละ Kernel ให้เราดูว่ามีอะไรบ้าง ใช้กับอะไร (อันนี้จะไม่เขียนก็ได้นะ..แต่ไหนๆก็ทำมาตั้งเยอะ ก็ประกาศเอาไว้ซ่ะหน่อยเผื่อวันหน้า กลับมาใช้งานใหม่จะได้ไม่ต้อง นั่งนึกมากมาย) อันนี้ผมจะไม่ขอ Show ให้เห็นละกันมันเป็นแค่ ไฟล์ Text ธรรมดาคุณอยากบอกอะไรเกี่ยวกับ Kernel ตัวใหม่ก็เข้าไปบอกในนี้เท่านั้น
- isolinux.cfg อันนี้สำคัญสุด จำเป็นต้อง Config เป็นอย่างยิ่งเพราะถ้าไม่ Config เราก็จะไม่สามารถเลือก Kernel ที่เราตั้งหน้าตั้งตาทำมาตั้งนมนาน ได้…!!! โดยเวลาเรา Config ก็ไป Copy ของชาวบ้านเขามาก็ได้..ก็อยู่ในไฟล์นี้นั่นแหละ อย่างของผมก็ Copy มาแล้วก็เอาไปต่อไว้ในบรรทัดสุดท้ายดังนี้..
# tail isolinux.cfg
append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SLACK_KERNEL=speakup.s
label test26.s
kernel /kernels/test26.s/bzImage
append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SLACK_KERNEL=test26.s
label xfs.s
kernel /kernels/xfs.s/bzImage
append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SLACK_KERNEL=xfs.s
label cslox.s #ตั้งแต่บรรทัดนี้ลงไปผม Copy จากข้างบนมาครับ ตั้งแต่บรรทัดที่ 6 ถึง 8
kernel /kernels/cslox.s/bzImage
append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=6464 rw root=/dev/ram SLACK_KERNEL=cslox.s** มีข้อแนะนำที่สำคัญว่า เวลาตั้งชื่อ label ต้องตั้งให้ตรงกับชื่อ Directory ที่เก็บ Kernel ตัวใหม่ และที่สำคัญกว่านั้นก็คือ เวลาตั้งชื่ออย่างให้เกิน 8 ตัวอักษร (ไม่รวม จุดเอส) บอกตรงๆว่าติดตรงนี้ตั้งนาน…(แม่ง..เชี้ย ใครมันจะรู้หว่ะ…) คือต้องเข้าใจก่อนว่าเวลาเครื่อง มัน Boot เนี้ย ในขั้นต้นมันจะ Boot จาก Bios ซึ่งแน่นอนว่า Software ที่ Build มากับ Bios ก็แล้วแต่ว่าแต่ละยี่ห้อเค้าจะทำมายังไง พอ Boot Bios เสร็จ ก็จะมาสู่กระบวนการ Boot ที่จะมีหน้าที่ทำให้ Kernel Connect กับ Hardware ซึ่งตรงนี้มันก็จะมี Software อยู่ตัวหนึ่งที่ชื่อว่า Busybox พอผ่านตรงนี้ไปได้แล้ว..ก็จะเป็นหน้าที่ของ Kernel ทีจะติดต่อกับ Hardware ทั้งหมดต่อไป พูดง่ายๆ ก็คือทำหน้าที่เป็น พ่อสื่อ ว่างั้นเหอะ จบ…
# pwd
/slackware_11_new/slackware_11/kernels/cslox.s
# ls -l
total 3116
-rw-r–r– 1 root root 2841056 2007-03-08 16:18 bzImage
-rw-r–r– 1 root root 33795 2007-03-08 16:18 config
-rw-r–r– 1 root root 301317 2007-03-08 16:18 System.map.gz - อันดับแรกเราก็ไป copy ไฟล์ข้อมูลทั้งหมดจากแผ่นที่ 1 มาเก็บไว้ที่เครื่องของเรา(อันนี้คงไม่ต้อง สาธยาย กันมาก เอาเป็นว่าทำยังไงก็ได้ไปเอาข้อมูลที่อยู่ใน CD แผ่นที่ 1 ของ Slackware 11 มาลงไว้ที่เครื่อง)
- นำแผ่นที่ Build ใหม่มา ทดสอบการ Boot&Install
มาถึงขั้นตอนสุดท้ายแล้วครับ คือการนำข้อมูลทั้งหมดที่เราได้ทำมากันตั้งแต่แรก นำมายัดลงแผ่นนั่นเอง…เริ่มกันเลยครับ- ถอยออกมาจาก Directory ที่เราใช้เก็บไฟล์ทั้งหมด แล้วก็สร้าง Script เพื่อใช้ในการ build แผ่นดังนี้ครับ
# pwd
/slackware_11_new
# cat make_cd_iso.sh
#!/bin/bash
cd slackware_11/
mkisofs -R -J -A “Slackware Install 1” \
-hide-rr-moved -v -d -N -no-emul-boot \
-boot-load-size 32 -boot-info-table -sort isolinux/iso.sort \
-b isolinux/isolinux.bin -c isolinux/isolinux.boot -V “SlackCD1” . \
| cdrecord -v dev=0,0,0 speed=10 fs=8m -eject -data – - ใส่แผ่นเปล่า…แล้วก็ Run Script ได้เลยครับ เป็นอันเสร็จพิธีอย่างสมบูรณ์
- ถอยออกมาจาก Directory ที่เราใช้เก็บไฟล์ทั้งหมด แล้วก็สร้าง Script เพื่อใช้ในการ build แผ่นดังนี้ครับ