Jotbug เป็นซอฟต์แวร์สำหรับการบริการโครงการซอฟต์แวร์ผ่านเว็บซึ่งผู้พัฒนานำเอาความสามารถของ Trac และ Redmine เข้าไว้ด้วยกัน โครงการนี้พัฒนาโดยอาศัย ZendFramework เป็น framework ในการพัฒนา ซึ่งรองรับระบบ Issue Ticket System, Wiki, SCM, Roadmap (change set) และอื่นๆ อีกมากมาย Jotbug ยังเป็นโครงการที่กำลังอยู่ในระหว่างพัฒนา หากท่านใดสามารถช่วยเหลือในเรื่องการพัฒนาได้ สามารถติดต่อนักพัฒนาได้ที่ @robertcastley สำหรับท่านที่ต้องการทดสอบ Jotbug ผ่าน demo เว็บไซต์ เข้าไปทดสอบกันได้ที่เว็บไซต์ http://www.jotbug.org สำหรับ source code และซอฟต์แวร์ใช้ สัญญาอนุญาติแบบ BSD ใครอยากทดสอบทดลองเพื่อช่วยคุณ Robert พัฒนาก็ที่ google code ครับ
 

JotBug v0.1_1254370368943

 

สืบเนื่องมาจากโครงการพัฒนาลีนุกซ์ฉบับกระเป๋า เมื่อปีที่แล้ว เขียนโครงการไว้นานทำออกมาได้ 2 release แล้วเลิกทำครับ เพราะเข้าใจว่าการ remaster มาผิดทาง เอาเป็นว่าไม่ต้องพูดถึงมันก้อแล้วกันครับ หลายเดือนที่ผ่านมาได้ทดลองประกอบ Ubuntu จนพอเข้าใจบ้างแล้วว่าจะทำ ลีนุกซ์ในแบบฉบับของผมทำได้ยังไง เอาละมาถึงข้อใหญ่ในการทำ repository เพื่อการสนับสนุนซอฟต์แวร์ใหม่ๆ ใน โครงการพัฒนาลีนุกซ์ฉบับกระเป๋า กันครับ จากโครงร่างของ repositry ของ Advance Packaging Tool (APT) ทำให้ทราบว่าการแบ่ง รุ่นในแต่ละเวอร์ชั่นทำโดยการสร้างฐานข้อมูลของ Package ในไดเรคทอรี dists ซึ่งใน dists นี้ก้อจะมี ไดเรคทอรีที่เป็นชื่อแต่ละเวอร์ชั่นอยู่ ในนั้นก้อจะมีไฟล์ฐานข้อมูล Package อยู่ เอาล่ะ คราวนี้ผมก้อแก้ปัญหาในเรื่อง repository กลาง และ การซัพพอร์ทในแต่ละเวอร์ชั่นของโครงการพัฒนาลีนุกซ์ฉบับกระเป๋าได้แล้ว

แนวความคิดในการทำ repository แบบนี้สามารถประยุกต์ใช้ในองค์กรได้ เช่น ฝ่าย IT สามารถทำ repository เล็กๆ เก็ยไฟล์โปรแกรมใหม่ๆ ที่ผ่านการทดสอบแล้วว่าใช้ได้ดี หรือ จัดทำ แก้ไข ใหม่ แล้วเอาไปใส่ไว้ให้เพื่อนๆ พนักงานได้ apt-get ไปใช้กันได้ในสำนักงาน ขั้นตอนง่ายๆ ในการทำ repository มีไม่ยากครับ คือ เอา .deb ของเรานี่แหละไปใส่เอาไว้ที่ไดเรคทอรีที่เก็บไฟล์ deb เอาไว้ ยกตัวอย่างเช่น pool/main เป็นต้น แล้วสร้างฐานข้อมูล Package ออกมาให้เก็บไว้ในไดเรคทอรีในแต่ละเวอร์ชั่น

ขั้นตอนการทำ

สมมุติว่าติดตั้ง apache แล้วนะครับ :) ถ้าใครยังไม่ได้ติดตั้งก้อ apt-get apache2 ได้เลยครับ และในตอนนี้เว็บของเราก้อจะเก็บอยู่ที่ /var/www เอาเป็นว่าผมขอไม่เปลี่ยนไดเรคทอรีละกัน สำหรับใครจะสร้าง link โยงไปไดเรคทอรีอื่นก้อตามสะดวก ในไดเรคทอรี /var/www นี้เราจะใช้เก็บ repository ของเราครับ แต่ก่อนอื่น สร้างที่เก็บให้เป็นที่เป็นทางจะดีกว่าน่ะ เช่น packages เป็นยังไง

# mkdir /var/www/packages
# cd /var/www/package

ทีนี้เรามาสร้างที่เก็บไฟล์ .deb ของเรากัน (กำหนด pool binary ให้กับ hardy)

# mkdir -p pool/main
# mkdir -p dists/hardy/main/binary-i386
# mkdir .cache

จากนั้นสร้างไฟล์ config เพื่อเก็บข้อมูลของ repository ชื่อไฟล์คือ apt-release.conf

# gedit apt-release.conf

ใส่ข้อมูลดังรายละเอียดข้างล่าง

APT::FTPArchive::Release::Codename "hardy";
APT::FTPArchive::Release::Origin "office.redlinesoft.net";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "RedLineSoft Ubuntu Repository";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Suite "hardy";

ตรงตัวหนา เปลี่ยนไปตามควาต้องการของคุณเองนะครับ จากนั้นสร้างไฟล์ apt-ftparchive.conf เพื่อระบุ config ในการสร้างไฟล์ฐานข้อมูล Package

# gedit apt-ftparchive.conf

แล้วใส่ข้อมูลดังต่อไปนี้

Dir {
ArchiveDir ".";
CacheDir "./.cache";
};
Default {
Packages::Compress ". gzip bzip2";
Contents::Compress ". gzip bzip2";
};
TreeDefault {
BinCacheDB "packages-$(SECTION)-$(ARCH).db";
Directory "pool/$(SECTION)";
Packages "$(DIST)/$(SECTION)/binary-$(ARCH)/Packages";
Contents "$(DIST)/Contents-$(ARCH)";
};
Tree "dists/hardy" {
Sections "main";
Architectures "i386";
}

จากนั้นหาไฟล์ .deb มาใส่ใน pool/main แล้วสั่ง update repository ด้วยคำสั่ง

# cd /var/www/packages
# apt-ftparchive generate apt-ftparchive.conf
# apt-ftparchive -c apt-release.conf release dists/hardy > dists/hardy/Release

เรียกใช้งาน repository ของเราโดยตั้งค่า source.list

# gedit /ect/apt/sources.list

ใส่ข้อมูล repository ของเราลงไปต่อท้ายไฟล์ดังนี้

deb http://office.redlinesoft.net/packages hardy main

จากนั้นสั่ง update package ด้วยคำสั่ง

# apt-get update

ทีนี้ลอง apt-get install ไฟล์ .deb ที่คุณเอาไปใส่ใน pool/main ดูสิครับ

เอาล่ะมาว่าด้วยเรื่องการสนับสนุนหากว่าถึงเวลาในการเปลี่ยนไปเป็น inteprid ibex เราจะทำยังไงกับ repository ตัวนี้กันดี วิธีง่ายๆ ครับ เพิ่มข้อมูลข้างล่างลงในไฟล์ apt-ftparchive.conf

Tree "dists/intrepid" {
Sections "main";
Architectures "i386";
}

จากนั้นสร้างไฟล์ apt-release-intrepid.conf ขึ้นมาใหม่ดังนี้

APT::FTPArchive::Release::Codename "intrepid";
APT::FTPArchive::Release::Origin "office.redlinesoft.net";
APT::FTPArchive::Release::Components "main";
APT::FTPArchive::Release::Label "RedLineSoft Ubuntu Repository";
APT::FTPArchive::Release::Architectures "i386";
APT::FTPArchive::Release::Suite "intrepid";

จากนั้นก้อเอา .deb ไปใส่ที่ pool/main เหมือนเดิมครับ แล้วสั่ง update repo ด้วยไฟล์ config ตัวใหม่ดังนี้

# apt-ftparchive generate apt-ftparchive.conf
# apt-ftparchive -c apt-release-intrepid.conf release dists/hardy > dists/hardy/Release

เท่านี้ก้อแก้ปัญหามาแรมปีได้แล้ว เห่อๆ ลดทรัพยากร bandwidth ในการ download ต่อเครื่องไปได้อีกเยอะครับ เอาเป็นว่าคราวหน้ามาต่อเรื่องการ sign gpg ให้กับ repository ของเรากันครับ
 

หากท่านใดใช้ Windows XP อยู่ล่ะก้ออ่านคงชอบใช้แผ่น Hiren หรือแผ่น Reset Windows Password ซึ่งการทำงานของโปรแกรมเหล่านี้มีไม่มาก ก้อแค่เปลี่ยน passsword hash ในไฟล์ password เท่านั้น อ้าว Windows มีไฟล์ Password ด้วยหรือ? เหล่า Linux Geek อาจเคยชินกับ passwd และ shadow มาแล้ว ลองมาดูบน Windows บ้างจะเป็นไร ไฟล์ Password บน Windows มีชื่อว่า SAM (Security Account Manager) อยู่ในไดเรคทอรี Windows/System32/Config/SAM ไฟล์นี้จะเก็บข้อมูลชื่อผู้ใช้และรหัสผ่านซึ่งเข้ารหัสด้วย lanman encryption ซึ่งใช้ในการตรวจสอบในการ Login หรือการ Login ผ่าน Network โดย NetBios ซึ่งการเข้ารหัสแบบ lanman นี้เข้าข่ายไม่ปลอดภัยเนื่องจาก plain text ที่ใช้ในการเข้ารหัสมีเพียง 7 bytes หน้าและ 7 byte หลังเท่านั้น ทำให้ Cypher Textสามารถถูก hack ได้โดยใช้เครื่องมือ hack ที่ใช้เทคนิคง่ายๆ อย่าง brud force ก้อสามารถ hack ได้แล้ว สำหรับฐานข้อมูล password สามารถใช้จาก John the ripper หรือ L0phtCrack ได้ ทำให้การ Hack Windows XP เป็นเรื่องง่ายมากทีเดียว สำหรับการ Crack Lanman นักเขียนชื่อ Charles Gillman ได้เขียนบทความเอาไว้ใน นิตยสาร Infosec หัวข้อ Hitchhiker’s World Issue #9 <http://www.infosecwriters.com/hhworld/hh9/lmcrack.htm> อธิบายเกี่ยวกับ การ Crack Lanman ใน 60 วินาที เอาล่ะถ้าอยากทราบก้อติดตามอ่านกับเอาเองนะครับ มาดูวิธีผมกันบ้าง

หลายๆ คนอาจชอบใช้ Hiren Boot แล้วเลือกเปลี่ยน Password หรือ Reset Password อย่างนั้นง่ายดี แต่ "Hacker MUST play with Claverness" เรามาใช้วิธีการอ้อมๆ กัน เริ่มจากหาแผ่น Linux Live CD หรือ Linux USB ก้อได้ เอาไป Boot ไปยังเรื่องเป้าหมาย จากนั้น Browse ไปยัง Windows/System32/Config คัดลอกไฟล์ SAM ออกมา จากนั้นใช้โปรแกรม Lanman Crack ทำการ Crack ไฟล์ SAM อีกครั้งหนึ่ง เพื่อให้ได้รหัสผ่านในแต่ละ User มาซึ่งจใช้เวลามากน้อย 60วิ หรือ 60 วัน 60 เดือน ก้อแล้วแต่ความซับซ้อนของรหัสผ่านที่ตั้งเอาไว้ จากนั้นเราก้อเอา Plain Text ที่ได้เอาไปใช้เข้าเครื่องเป้าหมายได้ :) และไม่เกิดปัญหาเรื่องการอ่านไฟล์ที่ใช้ Windows Encrypted File System (WEFS) ด้วย

วิธีการป้องกันการ Crack รหัสผ่านง่ายๆ คือการใช้บอกให้ Windows ใช้ NTHash แทนการใช้ LmHash ที่มากับ Windows XP เป็น default โดยการแก้ไข registry ง่ายๆ ดังนี้ ใช้โปรแกรม regedit เปิดไปที่ HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa แก้ตรง key ที่ชื่อว่า nolmhash เปลี่ยนค่าจาก 0 เป็น 1 จากนั้นให้คุณเปลี่ยน password คุณก้อจะได้ไฟล์ SAM ที่เข้ารหัสโดย NTHash แทนการเข้ารหัสด้วย LmHash ในแบบเดิม ถือว่าเพิ่มความปลอดภัยขึ้นอีกขั้นหนึ่ง!

การป้องกันและระมัดระวังเรื่องความปลอดภัยเป็นเรื่องที่สำคัญมากในการใช้งานคอมพิวเตอร์ไม่ว่าจะเป็นเครื่องส่วนบุคคล เครื่องที่สำนักงาน และอื่นๆ การตั้งค่ารหัสผ่านที่ดูง่ายไปหน่อย เช่น god, moss, sex ฯลฯ หรือการใช้คำ ตัวเลข ที่เกี่ยวข้องกับข้อมูลส่วนตัวเช่น วันเกิดตัวเอง วันเกิดแฟน ปีที่สละโสด ก้ออาจเป็นรหัสผ่านที่สามารถคาดเดาได้ง่าย  ดังนั้นการตั้งรหัสผ่านควรตั้งให้มีความซับซ้อนเข้าไว้ ผสมกับตัวเลขและตัวอักษรได้เป็นดี เช่น 86I0tgvkvtwidyCyovuf(คุณจะเอาอะไรกันฉันอีก), CyoiydgTvot0Ut(ฉันรักเธอนะจ๊ะ) เป็นต้น นอกจากการผสมคำ ผสมตัวเลขแล้ว ยังต้องหมั่นเปลี่ยนรหัสผ่านบ่อยๆ อาจจะทุกๆ 3  เดือนหรือทุกๆ อาทิตย์ (ถ้าสามารถทำได้)

*อ้อลืมไป การ Hack เครื่องคนอื่นโดยไม่ได้รับอนุญาติ โดยเครื่องนั้นมีมาตรการป้องกันไว้ ระวังเจอคุก 6 เดือน หรือปรับไม่เกิน 10,000 บาท

 

ผมชอบเป็นครูพักลักจำด้วยความอยากรู้ว่าร้าน Format บน The Mall โคราชใช้โปรแกรม Illustrator ยังไง ผมเลยได้ไปลองใช้บริการดู จำได้นิดๆ หน่อยๆ เรื่องออกแบบนามบัตรนี่ต้องใช้ฝีมือกันพอสมควรแต่ที่ตกใจเขาใช้เวลาน้อยมากในการทำ ซึ่งเทียบได้กับใช้โปรแกรมพิมพ์นามบัตรทั่วๆไป ไปแอบดูเขาทำ ปรากฏว่ามีเทคนิคหนึ่งเรียกว่า Array Copy ประมาณว่าใส่ตัวเลขที่ต้องการจำนวนคัดลอกได้เลย ด้วยเหตุนี้เองมันถึงได้เร็วนักหนา เอาล่ะอันนั้นมันเป็นเรื่องของโปรแกรม Illustrator แต่เจ้า Inkscape ที่ผมพยายามใช้มาเกือบ 2 ปีนี่ก้อยังไม่ได้เรื่องเท่าไร

เวลาทำนามบัตรก้อปะติดปะต่อใช้เวลานาน แต่หลังจากพยายามติด Inkscpe ตัวใหม่ (ผมลง Inkscape ตั้งแต่แผ่นจันทราเวอร์ชันเขียวๆ) ก้อพบว่าภายใต้เมนู Edit มีเมนู Clone และ Create Tiled Clones เจ้านี่แหละคือเคล็ดลับที่จะมาทำนามบัตรให้เร็วเท่ากับร้าน Format ล่ะ เอ้ามาลองดูซิว่าทำอย่างไรกัน

เริ่มจากเปิด Inkscape ขึ้นมาหน้ากระดาษทำงานของคุณจะเป็นขนาด A4 โดยปกติ ให้คุณกำหนดขนาดกระดาษทำงานเสียใหม่เป็น 3.5×2.0 นิ้ว โดยคลิกที่ File > Document Properties… เพื่อใช้ทำต้นแบบนามบัตร


 

ออกแบบนามบัตรของคุณให้สวยงาม (อันนี้แล้วแต่ฝีมือนะครับ ช่วยไม่ได้จริงๆ) ตีกรอบด้วยเส้นประบางๆ เพื่อเป็นแนวเส้นสำหรับตัดในภายหลัง แล้วจัดกลุ่มวัตถุทั้งหมดให้เรียบร้อย และแล้วนามบัตรของผมก้อออกมาเป็นแบบนี้ครับ

หลังจากที่ได้นามบัตรอันสวยงามของเราแล้ว ให้คุณกำหนดขนาดกระดาษทำงานเสียใหม่เป็น A4 เพื่อทำเป็นเอกสารสำหรับพิมพ์ คลิกที่ File > Document Properties…

จัดนามบัตรให้ห่างจากขอบบนและขอบซ้ายประมาณ 0.5 นิ้ว

คลิกเลือกที่นามบัตรของเราไว้แล้วสั่ง Clone แบบ Tile โดยคลิกที่เมนู Edit > Clone > Create Tiled Clones… ตั้งค่าดังภาพ

กดปุ่ม Create คุณจะพบว่านามบัตรที่คุณเลือกใบเดียวจะถูก Clone ออกมาเป็น 10 ใบวางเรียงอย่างสวยงามดังภาพ


 

หากระดาษสีหอมๆ หรือกระดาษหนาๆ มาสั่ง print ได้เลย ใครจะใช้เทคนิคนี้เอาไปทำมาหากิน เปิดร้านรับทำนามบัตรโดยใช้ Inkscape ก้อไม่ว่ากันครับ :)

วันนี้มาเขียนเทคนิคการใช้ Mask ในการทำภาพ reflect แบบเว็บ 2.0 โดยใช้ Inkscape นึกภาพไม่ออกก้อเลื่อนไปดูภาพสุดท้ายเอาละกันนะครับ :) เทคนิคที่ใช้เป็นการ Mask ภาพ 2 ภาพโดยสร้างภาพ Gradient ไว้หนึ่งภาพแล้วใช้ภาพนี้เป็น Mask ของภาพตัวอักษร ขั้นตอนการทำมีดังนี้ 

 

1. เปิดเอกสารแล้วพิมพ์ข้อความลงไปดังภาพ

2. จากนั้น Clone ภาพ แล้วปรับให้เป็นภาพกลับหัว (Edit > Clone > Create Clone )

3. สร้างรูปสี่เหลี่ยมขึ้นมาซ้อนภาพตัวอักษรดังภาพ

4. จัด Gradient รูปสี่เหลี่ยมแบบไล่สี ขาว- ดำ บนลงล่าง

5. สร้าง Mask ของสี่เหลี่ยมลงบนตัวอักษร กด Tab เพื่อเลือกตัวอักษร (ด้านล่าง) ก่อน แล้วกด Shift เลือกสี่เหลี่ยมด้านบน จากนั้นคลิกเมนู Object > Mask > Set จะได้ดังภาพ

6. จัด Opacity สักประมาณ 20% จะได้ดังภาพ


 

7. ทาด้าาาาา เสร็จแล้ว

มาวาดภาพเวกเตอร์ด้วย Inkscape กันอีกรอบครับ คราวนี้มาหัดวาดมนุษย์หิมะกัน ด้วยเส้นตรงและเส้นโค้งง่ายๆ ครับ เทคนิคที่ใช้ในงานวาดครั้งนี้มีไม่มากครับ คือรูปสี่เหลี่ยม รูปวงรี รูปสี่เหลี่ยม รูปทรงกระบอก รูปทรงกรวย และการประยุกใช้รูปทรงพื้นฐานมาประกอบเป็นรูปทรงอื่นๆ

เริ่มต้นด้วยการวาดวงกลม 2 วงซ้อนกันโดยวงกลมที่เป็นส่วนหัว ซ้อนทับวงกลที่เป็นส่วนลำตัว ใส่ลูกตาวงรีสีดำ 2 ดวง ดังภาพ


จากนั้นวาดวงกลมเล็กๆ อีก 6 จุดเรียงเป็นรอยยิ้มดังภาพ


เพิ่มจมูกแครอทแหลมๆ เทคนิคให้วาดรูปสามเหลี่ยมจากนั้นกำหนดจุดโค้ง ปรับจุดโค้ดเราก้อจะได้รูปกรวยยาวๆดังภาพ


วาดส่วนปีกหมวก วงรีทับบนหัวดังภาพ


เปลี่ยนสีเป็นสีดำ แล้ววาดสี่เหลี่ยมเพื่อเป็นตัวหมวก แล้วปรับเอียงดังภาพ


เปลี่ยนเป็นสีพื้นหลังเป็นสีดำ แล้วใส่ริบบิ้นตรงหมวกสีแดงดังภาพ


จากนั้นวาดวงรีบนตัวหมวกเพื่อเน้นรูปทรงกระบอกของหมวกดังภาพ


จากนั้นเปลี่ยนโดยใช้ Gradients สีดำ-ขาว ดังภาพ


จากนั้นวาดผ้าพันคอโดยร่างโครงร่างด้วย Bezier curves and straight lines ดังภาพ


ดัดเส้นหยักๆ ให้โค้งได้รูป กำหนดขนาดเส้นขอบให้ดูหนา ดังภาพ


จากนั้นใส่ลายผ้าพันคอ โดยเปลี่ยนสีพื้นผ้าพันคอเป็นแถบสีแดงๆ แล้ววาดแถบสีดาวลงไปดังภาพ


วาดเส้นตรงแนวตั้ง เพื่อเป็นชายผ้าพันคอสีแดงแล้วใส่ลายแถบสีขาวเช่นเดิมวาดวงกลมเล็กๆ 3 อัน เป็นกระดุมเสื้อ ดังภาพ


จากนั้นเติมแขนโดยใช้โครงร่างด้วย Bezier curves and straight lines เช่นเดิม เปลี่ยนสีเป็นสีพื้นสีน้ำตาล ดังภาพ


แล้วเราก้อได้มนุษย์หิมะแล้วครับ


 

ค้างเรื่อง RAID 10 มาระยะนึงแล้วตั้งใจว่าจะเขียนตั้งนานละไม่ได้เขียน เรื่องของเรื่องคือ Ubuntu เวลาติดตั้ง RAID มักจะลงเอยด้วยการ boot ไม่ขึ้นและติดตั้งได้เพียง RAID 0,1 และ 5 เท่านั้น เรียกได้ว่าเป็นอาการหลักเลยล่ะ ลองไปค้นๆ พบคำตอบที่น่าสนใจเลยได้โอกาสมาเขียนเล่าสู่กันฟัง สักครั้ง ปัญหาที่เขาพบก้อคล้ายๆ กับปัญหาที่ผมพบเช่นกันคือ ติดตั้งไปแล้ว boot ไม่ได้แต่วิธีการแก้ไขมันมีครับ คือใช้ Live CD ช่วยอีกแรง อันดับแรกมาวางแผน partition กันก่อน ใช้โปรแกรมจัดการ partition ง่ายๆ อย่าง cfdisk (มันใช้ง่ายอ่ะนะ) สร้าง partition ขนาด 50 MB ก่อนใน ฮาร์ดดิสก์ลูกแรก (ลืมบอกไปว่ามี 4 ลูก) เป็น /boot จากนั้นสร้าง partition ที่เหลือเป็น RAID อ้ออย่าลืมใส่ swap ขนาด 1 GB ไว้ทุกๆ ฮาร์ดดิสก์ เพื่อความสามารถในการจัดการ SWAP เราจะได้โครงสร้าง partition ดังภาพ

จากนั้นติดตั้งโปรแกรมจัดการ RAID เพื่อตั้งค่า RAID อีกทีโดยใช้คำสั่ง

#apt-get install mdadm

จากนั้นสร้าง RAID device ขึ้นมากำหนดให้เป็น raid10 โดยใช้คำสั่ง

#mdadm -v –create /dev/md0 –level=raid10 –raid-devices=4 /dev/sda2 /dev/sdb1 /dev/sdc1 /dev/sdd1

จากนั้นสั่งสร้าง File System และ Format ก่อนเพราะตัวติดตั้งของ Ubuntu จะไม่เข้าใจว่ามันจพ Format Partition ยังไง ให้เราชิง Format มันก่อน และกำหนดให้เป็น XFS
สาเหตุที่ใช้ XFS เพราะว่า File System แบบนี้มีประสิทธิภาพในการจัดการไฟล์ได้ดีกว่า ext3 จากนั้นสร้าง link สำหรับ RAID Device เพื่อให้ Ubuntu เข้าใจ เพราะ device md0 ที่เราสร้าง
จะหาไม่เจอตอนที่เราติดตั้ง Ubuntu ก้อเปลี่ยนเป็น sde ซะ เริ่มจากสั่งสร้าง XFS กันก่อน

#mkfs.xfs /dev/md0

สร้าง link เพื่อบอกให้ตัวติดตั้งมองเห็น

#ln /dev/md0 /dev/sde

จากนั้นติดตั้ง Ubuntu ได้เลยครับ กำหนดให้ /boot (sda1) ของเราเป็น ext3 นะครับ และตั้งค่า swap ให้ทุกๆ partition ที่เป็น swap สำหรับ partition อื่นๆ อย่าเลือกให้ reformat นะครับเพราะเราชิง format มันเป็น XFS ไปแล้ว จากนั้นเริ่มติดตั้งกันได้เลย หลังจากติดตั้งเสร็จให้ใช้ Live CD ต่อครับ มาติดตั้งโปรแกรมจัดการ RAID ให้ partition ที่เราติดตั้งกันต่อ เพราะมันจะมองไม่เห็น RAID ที่เราสร้างหลังจากที่เรา reboot และนี่คือตัวปัญหาที่มักจะพบกันบ่อย วิธีการติดตั้งโปรแกรมจัดการ RAID ให้คุณ chroot เข้าไปครับ แล้วติดตั้ง mdadm ด้วยคำสั่ง

#mkdir /myraid
#mount /dev/md0 /myraid
#mount /dev/sda1 /myraid/boot
#mount –bind /dev /myraid/dev
#mount -t devpts devpts /myraid/dev/pts
#mount -t proc proc /myraid/proc
#mount -t sysfs sysfs /myraid/sys
#chroot /myraid
#apt-get install mdadm
#exit

ทีนี้เราก้อ reboot เครื่องกันได้แล้ว อ้อมีคำสั่งที่น่าสนใจ อยู่นิดนึงว่า partition ไหนอยู่ใน ฮาร์ดดิสก้อไหนคำสั่งที่ใช้คือ

#cat /proc/mdstat

นี่แหละครับ หากเกิดปัญหาแล้วต้องการ mount RAID จาก Live CD คุณต้องติดตั้ง mdadm ก่อนเพื่อจะสั่งให้ RAID ทำงาน ด้วยคำสั่งดังนี้

$sudo su
#apt-get install mdadm
#mdadm –assemble /dev/md0

จากนั้นเราก้อ mount RAID ได้แล้ว อ่านเพิ่มเติม หากไม่เข้าใจ

เคยมีคนถามเรื่องจะทำระบบให้บริการพื้นที่เว็บไซต์เล็กๆ โดยเก็บข้อมูลผู้ใช้ลงในฐานข้อมูล MySQL การอัพเดทโหลดให้ใช้ผ่าน FTP เท่านั้น ก้อเป็นแนวคิดดีๆ ซึ่งอาจจะเอามาประยุกต์ใช้ในโรงเรียนหรือวิทยาลัยที่บริการพื้นที่เว็บไซต์ให้นักเรียนได้สร้างบล็อกหรือเว็บส่วนตัวกันได้ การที่เราจะไปทำแบบ Hosting ขนาดใหญ่โต มีเครื่องแรงๆ ก้อคงจะเกินงบประมาณไปสักหน่อย เอาเครื่อง PC เล็กๆ ที่มี Harddisk ขนาดเหมาะสม และ Main Memory สัก 512MB-1GB กำลังดีครับ (ยุคประหยัด)

งานเขียนครั้งนี้จะมาอธิบายวิธีการสร้างระบบให้บริการพื้นที่เว็บไซต์ โดยใช้ PureFTPd และ MySQL กันทำไมถึงเลือก PureFTPd สาเหตุที่เลือก PureFTPd ก้อเพราะว่าเป็นโปแกรม FTP Server ที่สามารถเก็บข้อมูลผู้ใช้ลงในฐานข้อมูล MySQL หรือ Directory Service อย่าง LDAP ได้ นอกจากนี้ยังสามารถทำ Bandwidth Control ได้ด้วย อ้อและที่สำคัญเวลาย้ายเครื่อง,ย้ายข้อมูลเว็บ,ข้อมูลผู้ใช้ และการตั้งค่าต่างๆ ก้อไม่ยุ่งยากและวุ่นวายอีกต่อไป เอาล่ะลองมาดูวิธีการกันครับ

เครื่องเซิร์ฟเวอร์ที่เราจะมาทำกันวันนี้ผมใช้ IP Address เป็น 192.168.0.100 มี hostname เป็น server1.example.com ใครที่ใช้ต่างจากนี้ก้อตั้งค่าตามที่คุณต้องการได้ครับ เอาล่ะเพื่อไม่ให้งุนงง เรามาเริ่มต้นด้วยการเป็น root กันเลย โดยใช้คำสั่ง

$ sudo -s

ใส่รหัสผ่านของ root ให้ถูกต้องจากนั้นมาเริ่มติดตั้งโปรแกรมที่เราจำเป็นต้องใช้กัน เริ่มมาติดตั้งจาก MySQl และ phpMyAdmin กันก่อนเลยครับ ติดตั้งโดยใช้คำสั่ง

# apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

เมื่อติดตั้งเสร็จโปรแกรมติดตั้งจะให้คุณกำหนดรหัสผ่านสำหรับ root ให้ใส่รหัสผ่านที่คุณต้องการ จากนั้นมาติดตั้ง PureFTPd พร้อมกับ MySQL Support โดยใช้คำสั่ง

# apt-get install pure-ftpd-mysql

เมื่อติดตั้งเสร็จแล้วให้สร้าง user และ group เพื่อรองรับกับการทำ virtual user ใช้คำสั่งดังนี้

# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

จากนั้นสร้างฐานข้อมูลเพื่อเก็บรายชื่อผู้ใช้ เข้าใช้ฐานข้อมูล MySQL โดยใช้คำสั่ง

# mysql -u root -p

จากนั้นสร้างฐานข้อมูล pureftpd ขึ้นมาโดยใช้คำสั่งดังนี้

mysql> CREATE DATABASE pureftpd;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost’ IDENTIFIED BY ‘ftpdpass’;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost.localdomain’ IDENTIFIED BY ‘ftpdpass’;
mysql> FLUSH PRIVILEGES;

ในส่วน ftpdpass เป็นการกำหนดรหัสผ่านสำหรับฐานข้อมูล pureftpd ให้คุณเปลี่ยนตามที่คุณต้องการครับ จากนั้นมาสร้างตารางเก็บข้อมูลกันครับ โดยใช้คำสั่งดังนี้

mysql > USE pureftpd;
mysql > CREATE TABLE ftpd (
User varchar(16) NOT NULL default ”,
status enum(‘0′,’1’) NOT NULL default ‘0’,
Password varchar(64) NOT NULL default ”,
Uid varchar(11) NOT NULL default ‘-1’,
Gid varchar(11) NOT NULL default ‘-1’,
Dir varchar(128) NOT NULL default ”,
ULBandwidth smallint(5) NOT NULL default ‘0’,
DLBandwidth smallint(5) NOT NULL default ‘0’,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default ‘*’,
QuotaSize smallint(5) NOT NULL default ‘0’,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

ออกจาก MySQL โดยใช้คำสั่ง quit

mysql > quit

ทีนี้มาตั้งค่า PureFTPd กันต่อ จาก config default ของ PureFTPd ยังไม่ใช่ config ที่เรียกใช้ฐานข้อมูล pureftpd ดังนั้นเราต้องมาแก้ไข config กันก่อน

# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# cat /dev/null > /etc/pure-ftpd/db/mysql.conf
# vi /etc/pure-ftpd/db/mysql.conf

แก้ไขไฟล์ /etc/pure-ftpd/db/mysql.conf ใส่ config ดังนี้

MYSQLSocket      /var/run/mysqld/mysqld.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() – md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")

ใส่ ftpdpass ตรง MYSQLPassword  ให้ถูกต้องนะครับ เดี๋ยว PureFTPd จะไม่สามารถเชื่อมต่อกับฐานข้อมูลที่เราสร้างไว้ได้ ยังไม่เสร็จครับ มากำหนดให้ user แต่ละคนเห็นเฉพาะพื้นที่ของตัวเอง ไม่อนุญาติให้กระโดดไปไดเรคทอรีของคนอื่นได้ วิธีง่ายๆ คือสร้างไฟล์ /etc/pure-ftpd/conf/ChrootEveryone แล้วใส่คำว่า yes ในไฟล์

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

กำหนดให้ PureFTPd สร้าง Home Dir สำหรับ Virtual User ขึ้นมา หาก login แล้วไม่มี Home Dir ก้อให้สร้างขึ้นมาได้เลย

/etc/pure-ftpd/conf/CreateHomeDir

เมื่อตั้งค่ากันเสร็จแล้วก้อ restart service ของ PureFTPd ได้เลยครับ โดยใช้คำสั่ง

/etc/init.d/pure-ftpd-mysql restart

ติดตั้ง PureFTPd, Config PureFTPd และ ได้ตารางเก็บข้อมูลผู้ใช้กันแล้วมาลองใส่ข้อมูลผู้ใช้กันครับ ก่อนอื่นเข้าใช้ MySQL กันก่อนโดยใช้คำสั่ง

# mysql -u root -p

mysql > USE pureftpd;

มาลองสร้าง user ที่ชื่อ exampleuser กำหนดสถานะ status เป็น 1 (หมายถึง ftp account ให้ใช้งานได้) กำหนดรหัสผ่านเป็น secret กำหนด UID และ GID เป็น 2001 (คือใช้ userid และ groupid ที่เรากำหนดไว้ข้างต้น) กำหนด Home Directory เป็น /home/www.example.com และกำหนด bandwidth ของการ upload/download เป็น 100KB/Sec และขนาดพื้นที่ที่ใช้ได้เป็น 50MB

mysql > INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘exampleuser’, ‘1’, MD5(‘secret’), ‘2001’, ‘2001’, ‘/home/www.example.com’, ‘100’, ‘100’, ”, ‘*’, ’50’, ‘0’);

mysql > quit;

ให้ลองใช้โปรแกรม FTPClient ที่เครื่อง Client ของคุณ (อาจใช้ WS_FTP หรือ FileZilla ก้อได้) เชื่อมต่อไปยังเครื่องเซิร์ฟเวอร์ server1.example.com ด้วยชื่อผู้ใช้ exampleuser และรหัสผ่านคือ secret คุณจะสามารถเชื่อมต่อได้สำเร็จ (หากเชื่อมต่อไม่ได้ก้อเสียใจด้วยครับ) ลอง ls ดูใน /home จะพบได้เรคทอรี www.example.com ซึ่ง PureFTPd จะสร้างขึ้นให้อัตโนมัติ ;) เท่านี้คุณก้อสร้าง Hosting แบบง่ายๆ ใช้ในโรงเรียนหรือวิทยาลัยได้แล้ว สำหรับในส่วน DNS และ VirtaulHost สามารถดูรายละเอียดได้ที่บทความเก่า เรื่องประยุกต์ Wildcard DNS กับ Apache หรือ ตั้งค่า Record แบบ Wildcard ให้ DNS ได้ครับ
 

Redmine เป็นระบบบริการจัดการโครงการซอฟต์แวร์บนเว็บไซต์ คล้ายๆ กับ SourceForge.Net และ LaunchPad นั่นแหละครับ แต่ที่แน่ๆ เจ้าตัวนี้เขียนบน rails ดังนั้นตัวมันจึงเล็กเอามากๆ นอกจากจะเล็กกระทัดรัดแล้วยังมีคุณสมบัติที่รองรับการทำงานแบบ team colloration สนับสนุน file release system version control plug-in และคุณสมบัติอื่นๆ อีกมากมาย

วิธีติดตั้งแบบง่ายๆ และ รวดเร็ว

1. ติดตั้งโปรแกรมที่เราต้องใช้กันก่อน ด้วยคำสั่ง 

aptitude install rails libmysql-ruby ruby rake rubygems

2. ติดตั้ง MySQL Server เพื่อเก็บข้อมูลโครงการ

aptitude install mysql-server

3. ดาวน์โหลด RedMine มาจาก RubyForge แล้วคลี่ไฟล์ไปไว้ที่ไหนสักที่อาจเป็น /home/redmine ก้อได้ครับ

wget http://rubyforge.org/frs/download.php/39477/redmine-0.7.3.tar.gz

4. สร้าง Database อย่างรวดเร็ว ด้วยคำสั่ง (ตรงตัวเอียงๆ ก้อเปลี่ยนให้ตรงกับเที่ตั้งค่าไว้ตอนติด MySQL นะครับ)

mysql -u root -proot-password -e "create database redmine character set utf8"

5. แก้ไขไฟล์ config/database.yml

cd /home/redmine

cp config/database.yml.example to config/database.yml

6. แก้ไขข้อมูลการเชื่อมต่อ ที่ไฟล์ config/database.yml

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: bduser
  password: bdpasswd

7. สร้างตารางข้อมูล

rake db:migrate RAILSENV="production"

8. ตั้งค่าพื้นฐานให้กับตารางเก็บข้อมูล

rake redmine:loaddefaultdata RAILSENV="production"

9. ตั้งค่า permission สำหรับการเขียนไฟล์ และ log

useradd redmine
mkdir tmp
chown -R redmine:redmine files log tmp
chmod -R 755 files log tmp

10. ทดสอบ โดย run WEBrick ด้วยคำสั่ง

ruby script/server -e production

11. เข้าระบบเบราส์ไปที่ http://localhost:3000 ชื่อผู้ใช้ และรหัสผ่าน คือ admin

หลายคนอาจจะคุ้นเคยกับระบบควบคุมเวอร์ชั่นของซอร์สโค้ดอย่าง CVS หรือ SVN วันนี้ผมจะมาแนะนำ Bazaar ให้อีกตัวครับ Barzaar หรือเราเรียกกันจนชินว่า Bzr เป็นโครงการระบบควบคุมเวอร์ชั่นที่ fork มาจาก GNU Arch ในปี 2004 และในปี 2005 Bazaar ก้อได้เขียนขึ้นมาใหม่ทั้งหมดจนกลายมาเป็น Bazaar หรือ Bzr ที่เราใช้กันอยู่ในปัจจุบัน ใครที่ใช้ LaunchPad ก้อจะได้ใช้ Bazaar อย่างแน่นอนครับ เพราะเป็นระบบควบคุมเวอร์ชั่นที่ใช้ง่ายและมีการจัดการโค้ดได้รวดเร็วใน ครั้งนี้ผมจะมาแนะนำวิธีการติดตั้ง Bazaar Server เพื่อรองรับระบบควบคุมเวอร์ชั่นของโครงการซอฟต์แวร์กันครับ

อันดับแรกมาดูก่อนว่าเราติดตั้ง Bzr แล้วหรือยังลองใช้คำสั่ง

bzr –version

หากพบว่าโปรแกรมแสดงรุ่นมาแล้ว 1.4 หรือ 1.5 ก้อเป็นอันใช้ได้ครับ หากพบว่าโปรแกรมยังไม่ได้ติดตั้งให้ใช้ คำสั่ง

sudo apt-get install bzr

จากนั้นเรามาสร้างผู้ใช้ให้ใช้ run Bzr Server กันครับ โดยใช้คำสั่ง

sudo useradd -m bzruser

จาก นั้นให้เปลี่ยนเป็นผู้ใช้ชื่อ bzruser เพื่อสร้างไดเรคทอรีที่ใช้จัดการไฟล์ ลงใน /home/bzruser/repository/group/project/trunk โดยใช้คำสั่ง

sudo su bzruser
mkdir -p /home/bzruser/repository/group/project/trunk

จากนั้นสั่งให้ Bzr สร้างไฟล์ที่จำเป็นในการทำ branch ดังนี้

cd /home/bzruser/repository/group/project/trunk
bzr init

จากนั้นก้อสั่งเริ่มต้น Barzaar Server ได้เลยโดยใช้คำสั่ง

bzr server –directory=/home/bzruser/repository

พอ ร์ทการทำงานของ Barzaar คือ 4155 ถ้าคุณต้องการเปลี่ยนพอร์ทใหกำหนดโดยใช้ option –port ตอนสั่งเริ่มต้น Barzaar Server  ทีนี้ลองเปิด terminal ออกมาอีกอันแล้วใช้คำสั่ง

bzr check bzr://localhost/group/project/trunk/

โปรแกรมจะบอกว่า repository นี้เป็นเวอร์ชั่น 0 และไม่มีไฟล์เลย เราสามารถ check out ทั้งๆ ที่ไม่มีไฟล์ได้ โดยใช้คำสั่ง

bzr co bzr://localhost/group/project/trunk/

จากนั้นเราก้อเพิ่มไฟล์ของเราลงไปได้เลย และทำการ add, commit และ push เพื่ออัพเดทลงใน repo ที่เราสร้างไว้ได้เลย