วันจันทร์ที่ 12 กันยายน พ.ศ. 2554

BOINC on Ubuntu

เรื่องมีอยู่ว่าผมมี Desktop PC เครื่องเก่าอายุกว่า 7 ปีมาแล้วที่ตอนนี้จะเอามาเล่นเกมส์อะไรก็ไม่ได้ (ซื้อคอมพ์มาไว้เล่นเกมส์จริงๆนะเนี่ย) สเปคเครื่องก็แค่ Pentium4 2.66GHz, Ram 1 GB, HDD 40 GB ถ้าลง Microsoft Windows ก็คงเปลืองพื้นที่โดยใช้เหตุ แถมแพงอีกต่างหาก ราคาเกือบๆ 5 พันบาท จะทิ้งก็เสียดายเพราะมันยังทำงานได้อยู่ จึงเป็นที่มาของการลองลง OS ฟรีที่ตั้งใจจะลองเล่นนานแล้ว นั่นคือ Linux และเอาไว้ให้มันคำนวนงานทางวิทยาศาสตร์ของ BOINC


เริ่มแรกก็โมเครื่องให้เหลือแค่ที่จำเป็นด้วยการดึงการ์ดจอออก เพราะมี on-board อยู่แล้ว จากนั้นก็เปลี่ยนถ่าน BIOS แล้วก็ใช้อีกเครื่องหนึ่งโหลด Ubuntu มา เข้าไปในเวบจะมี 2 แบบให้เลือกคือ Desktop กับ Server ผมเลือกที่จะใช้ตัว Server เผื่อว่าจะลองเล่นอย่างอื่นเช่น Mail server หรือ Database 


หลังจาก Download ไฟล์ Ubuntu ที่มาเป็น .ISO เสร็จเป็นที่เรียบร้อยแล้วก็ทำการไรท์ลงแผ่น CD สำหรับนำไปติดตั้ง โดยเลือกให้เครื่องทำการบูทจากแผ่น CD ขั้นตอนการติดตั้งไม่ได้ยากอะไร แทบไม่ต่างจากวินโดวส์ ไม่นานนัก เจ้าเครื่องเก่า Pentium4 ตัวนี้ก็มี OS พร้อมใช้งาน ยอมรับเลยว่าติดตั้งได้เร็วมาก ไม่ต้องคอยจนเบื่อเหมือนวินโดวส์


แต่หลังจากนี้จะเป็นอะไรที่ยากแล้ว เพราะครั้งสุดท้ายที่เล่น Command Line OS ก็ตอนเป็น MS-DOS สมัย... 16 ปีก่อน แถมคำสั่งยังไม่เหมือนกันอีก ไม่รู้คำสั่งอะไรเกี่ยวกับ UNIX เลย เป้าหมายของเราคือติดตั้ง BOINC ดังนั้นเจ้าเครื่องนี้ต้องติดต่อกับ Server ของ BOINC ได้ผ่าน Internet ในตอนติดตั้งเราสามารถเซ็ตค่าเน็ตเวิร์คได้ตั้งแต่ต้น แต่พอดีผมดันข้ามขั้นตอนนี้ไปก็เลยต้องมาตามเซ็ตทีหลัง โชคดีได้คุณเพื่อนที่แสนดีช่วยหา link วิธีเซตให้ http://www.ubuntugeek.com/ubuntu-networking-configuration-using-command-line.html เราก็ทำตามอย่างว่าง่าย พิมพ์คำสั่งตามที่ในเวบบอก

sudo vi /etc/network/interfaces

*(sudo ที่นำหน้า คือคำสั่งที่แสดงว่าเรามีสิทธิ์ใช้ระบบ ย่อมาจาก "substitute user do")
หน้าจอก็เปลี่ยนไปแสดงข้อมูลในไฟล์ เราต้องการให้ router แจก IP Address เองก็สั่ง Auto ไปเลย


auto eth0
iface eth0 inet dhcp



หรือถ้าจะกำหนดเองก็ไม่ยาก


auto eth0
iface eth0 inet static
address 192.168.1.4
gateway 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255



ตัวอย่างข้างบนกำหนดให้ IP address เป็น 192.168.1.4 ไม่ยากเท่าไหร่


แต่ที่ยากคือ เจ้าโปรแกรม VI ที่เราใช้แก้ไขข้อความเนี่ย เราจะออก จะเซฟไงเนี่ย ก็เลยต้องเปิดเวบหาอีก http://www.washington.edu/computing/unix/vi.html สรุปที่ใช้เลยก็คือ 3 คำสั่งนี้

ZZ บันทึกไฟล์และออกจากโปรแกรม
:w บันทึกไฟล์ :q! ออกจากโปรแกรมโดยไม่บันทึก

แล้วเราก็ต้องสั่งให้ Ubuntu เริ่มใช้ค่าใหม่ที่เราเพิ่งเขียนไปด้วยคำสั่งนี้

sudo /etc/init.d/networking restart


ตอนนี้ Ubuntu ก็เข้าอินเตอร์เน็ตได้แล้ว ต่อไปคือการติดตั้งโปรแกรม BOINC ผมก็ไปใฃ้อีกเครื่องทำการ Download ไฟล์ติดตั้งซึ่งนามสกุลเป็น .sh แล้วก็ก๊อปปี้ใส่ USB Flash Drive แต่เมื่อเสียบ USB Flash Drive ไปแล้ว Ubuntu จะยังใช้งานไดรฟ์ไม่ได้ทันที ต้องมีคำสั่งใช้ไดร์ฟก่อน นั่นคือการ mount
https://help.ubuntu.com/community/Mount/USB

sudo mkdir /media/external

sudo mount -t vfat /dev/sdb1 /media/external

ก่อนอื่นเราต้องสร้าง Directory ขึ้นมาใหม่ก่อนเพื่อเวลาเราทำการ mount แล้ว USB Flash Drive ก็จะเสมือนเป็น Directory นึงในเครื่อง ตัว /dev/sdb1 คือ USB Flash Drive ที่เราเพิ่งเสียบเข้าไปนั่นเอง อยากรู้ว่ามี Drive อะไรในเครื่องบ้าง ก็ใช้คำสั่งนี้ครับ

sudo fdisk -l

มาถึงตรงนี้ถึงนึกได้ว่า คำสั่งพื้นฐาน Unix มีอะไรบ้างเนี่ย http://mally.stanford.edu/~sr/computing/basic-unix.html ที่นี่รวมไว้ให้หมดล่ะ

ที่ใช้อยู่หลักๆก็คงเป็น
 ls -l                       ดูรายชื่อไฟล์ (เหมือน dir ของ MS-DOS)
mkdir dirname      สร้างไดเรคทอรี่ใหม่
cd dirname           เข้าไดเรคทอรี่
cp file1 file2         คัดลอกไฟล์1 ไปยังไฟล์2 (เหมือน copy ของ MS-DOS)

หลังจากก๊อบไฟล์นามสกุล .sh ของ BOINC มาแล้วก็ทำการติดตั้ง โดยใช้คำสั่ง sh ตามด้วยชื่อไฟล์

sudo sh boincx86.sh

แค่นี้เป็นอันเสร็จ... หรือเปล่า อ้าว ผมรันโปรแกรม BOINC ไม่ขึ้น แต่เห็นไดเรคทอรี่ของ BOINC แล้วนะ ลองเข้าไปดูในเวบเห็นมีคำสั่งแปลกๆ เกี่ยวกับ install เลยลองดู

http://boinc.berkeley.edu/wiki/Installing_BOINC_on_Ubuntu

sudo aptitude install boinc-client

โดนฟ้องว่าหาไม่เจอ แล้วพอลองสั่ง sudo run_client start ก็โดนฟ้องว่าขาด library สุดท้ายเพิ่งมาฉลาดว่า จริงๆแล้วไม่ต้องไป Download ไฟล์ .sh มาตั้งแต่ต้น ไม่ต้อง copy ใส่ Flash Drive มา mount ให้ยุ่งยาก แค่เพียงสั่งให้ Ubuntu ติดตั้งผ่าน internet ได้เลย

sudo apt-get install boinc-client

Ubuntu ก็จะทำการ Download มาติดตั้งเอง เรียบร้อย ง่ายดาย
เมื่อมี BOINC Client พร้อมที่จะทำงานแล้ว เราก็ต้องเรียกให้โปรแกรมขึ้นมาทำงาน

sudo /BOINC/run_client start

อ้าว แล้วจะเลือกโปรเจคกับเข้า account เรายังไงล่ะเนี่ย ลองเปิดค้นดูเจอหน้านี้เข้า
http://boinc.berkeley.edu/wiki/Boinccmd_tool พารามิเตอร์เยอะเหมือนกันนะเนี่ย

boinccmd --lookup_account URL email password 

เราจะได้ account key ออกมาเพื่อนำไป attach กับโปรเจค

boinccmd --project_attach URL account_key

เป็นอันเสร็จสิ้น BOINC ก็จะโหลดไฟล์คำนวนของโปรเจคกับไฟล์งานมาทำงานของมันเอง ลองตรวจดูความคืบหน้าได้โดย

boinccmd --get_state

และแล้วเครื่องเก่าของผมก็ได้ใช้เพื่อคำนวณงานด้านวิทยาศาสตร์ ไม่ได้เป็นแค่กองเศษเหล็กอีกต่อไป