บทความที่แล้วเราได้รู้จักและติดตั้ง Jenkinsกันไปแล้ว ส่วนบทความนี้ผมขอพูดถึงการเชื่อมจาก My repository มายัง Jenkins ก็แล้วกัน โดยมา repository ที่ว่ามันจาก 3 ที่คือ

  • Local repository
  • Gitlab repository
  • Github repository

ทั้งหมดนี้ใช้ Source Code Management (SCM) ตัวเดียวคือ git เมื่อ Jenkins จะ code ทำการ build ตาม job ที่เขียนไว้ใน Jenkins คุณยังสามารถสั่งให้มันอะไรได้ต่อได้อีกมากมาย ยกตัวอย่างเช่น ต้องการ push ใช้ git server แล้วให้ Jenkins ทำการสั่ง test ( เช่น mvn test ) ทุกๆ ครั้งของการ push หรืออาจจะมองไปไกลกว่านั้นคือ เมื่อ test pass แล้ว ให้ทำการไป deploy ลงบน UAT ได้เลยเป็นต้น


Continue reading

แหมกลับมาใช้ Fedora ทั้งทีก็คงไม่เขียนถึง YUM repository คงจะไม่ได้ YUM จะว่าเป็นของใหม่ ก็คงไม่ใช่ YUM เป็นโปรแกรมช่วยจัดการแพคเกจที่มีอยู่ใน Fedora มานานหลายเวอร์ชันแล้วครับ แต่ผมเองไม่ได้ทดสอบหรือทดลองอะไรแหวกแนวมากนัก แต่ที่แน่ๆ YUM ใน Fedora 11 เปลี่ยนไป! ผมสังเกต Fedora หันมาใช้ XML มากขึ้นหลังจาก Fedora 9 และ Fedora 10 และที่ผ่านมาส่วนใหญ่จะถูกแทรกลงในส่วนที่ไม่กระทบกับผู้ใช้มากนัก สำหรับท่านที่ใช้ YUM ใน Fedora 11 จะพบว่ามันเปลี่ยนไป ไม่สามารถเรียกใช้ Repository เก่าได้ ก็เนื่องมาจาก repo data ของ YUM เปลี่ยนไปนั่นเอง เอาล่ะเกริ่นมามากเดี๋ยวจะเริ่มงง เรามาสร้าง YUM repository เอาไว้ใช้ในสำนักงาน/องค์กรกันดีกว่า ก่อนจะเริ่มต้นมาอ่านข้อตกลงกันก่อน เครื่องที่ผมใช้ มี IP address เป็น 192.168.0.100 นะครับ เอ้ามาเริ่มกันเลย

แปลงร่างเป็น root กันก่อนเพื่อความสะดวกครับ

su –

จากนั้นติดตั้ง Apache

yum httpd

ตั้งค่าให้ Apache เริ่มต้นตอนบูท

chkconfig –levels 235 httpd on

จากนั้น start Apache ได้เลย

/etc/init.d/httpd start

จากนั้นมาสร้างที่เก็บ repo กัน Fedora วางโครงสร้างของ repository ได้ดีมาก และสร้าง repo แบ่งออกเป็นเวอร์ชันได้ ทำให้ง่ายในการจัดการ โครงสร้างของ repo ที่เราจะสร้างกันหน้าตาเป็นแบบนี้ครับ

fedora/releases/เลขเวอร์ชัน/Everything/i386/os/Packages

สมมุติว่าเราสร้าง repo ของ Fedora 11 เราก็จะได้โครงสร้างแบบนี้ครับ

fedora/releases/11/Everything/i386/os/Packages

มาสร้างไดเรคทอรีใน /var/www กันเลยครับ

mkdir -p /var/www/fedora/releases/11/Everything/i386/os/Packages

จากนั้นให้คุณคัดลอกไฟล์ .rpm ไปไว้ที่ไดเรคทอรี Packages แล้วสั่งสร้าง repo data ดังนี้

createrepo /var/www/fedora/releases/11/Everything/i386/os/

เท่านี้ก็เรียบร้อยแล้วครับ จากนั้นให้เครื่อง client ตั้งค่า repo มาทดสอบได้เลย วิธีการตั้งค่า repo เข้าใช้งาน repo ในสำนักงานเราก็ง่ายๆ ครับ สร้างไฟล์ชื่อ officerepo.repo ลงใน /etc/yum.repo.d

nano /etc/yum.repo.d/officerepo.repo

ใส่ข้อมูลลงไปดังนี้ครับ

[office-repo]
name=Office Repo for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://192.168.0.100/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

แหมหลังจากอัพเกรดเซิร์ฟเวอร์ขนานใหญ่ ทั้ง RAM และ Storage ตอนนี้ Mirror แห่งชาติของเพราะมีพื้นที่รวมกว่า 30TB ตอนี้ก็ได้เปิดให้ใช้บริการอย่างปกติแล้วครับ วันนี้เลยได้แวะเวียนไปใช้บริการเล็กน้อยในส่วนของ Fedora 11  เรื่องของเรื่องคือ Fedora 11 พยายาม rotate mirror server ที่อยู่ในรายการ mirror แต่ที่น่าเสียดาย mirror.in.th ไม่อยู่ใน list ซะงั้น ก็คงต้องเพิ่มกันเอาเองล่ะครับ วิธีการเพิ่ม repo เพื่อใช้ mirror.in.th ก็ง่ายนิดเดียว วิธีการทำมีดังนี้ครับ

สร้างไฟล์ thai-national-mirror.repo ลงใน /etc/yum.repo.d

su -c ‘nano /etc/yum.repo.d/thai-national-mirror.repo’

จากนั้นใส่ข้อมูลลงไปดังนี้

[thai-national-mirror]
name=TMOSS for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://mirror.in.th/osarchive/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

เอ้าใช้ให้คุ้มค่ากันหน่อยครับ ลงทุนไปหลายกะตังค์ เห่อๆ

เหมือนเป็นธรรมเนียมปฏิบัติเวลาผมใช้ Linux ตระกลูไหนต้องทำ custom repository ได้นั่นหมายถึงการ distribute และการ contribute แพคเกจใหม่ๆ ให้กับ Linux distro นั้นๆ ทางอ้อม ซึ่งผมเองทำประจำอยู่แล้ว แต่ไม่ได้เอาแพคเกจตัวเองเข้าต้นน้ำสักที เอาเป็นว่าอยู่อย่างพอเพียง build แจกกันเล่นไปเรื่อยๆ นี่แหละครับสนุกกว่า ใช้ได้บ้าง ไม่ได้บ้างก็อย่างว่ากันนะครับ วันนี้ก็เลยมาแนะนำ ThaiOpenSource for Fedora repository กันครับ ผมเพิ่มทำเสร็จเมื่อเช้ามีแพคเกจอยู่ 4 ตัวครับ ให้ลองค้นหากันดูเอาเองว่าแพคเกจชื่ออะไร ;) เอาละมา config YUM repo กันเลย ให้สร้างไฟล์ที่ชื่อ thaiopensource.repo ลงใน /etc/yum.repo.d

su -c ‘nano /etc/yum.repo.d/thaiopensource.repo’

จากนั้นใส่ข้อมูลลงไปดังนี้

[thaiopensource]
name=ThaiOpenSource.Org for Fedora $releasever – $basearch
failovermethod=priority
baseurl=http://thaiopensource.org/fedora/releases/$releasever/Everything/$basearch/os/
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
gpgcheck=0

แลัว update repo data ในเครื่องได้เลยครับ โดยใช้คำสั่ง

su -c ‘yum update’

คลังซอฟต์แวร์ของ Suriyan เตรียมแพคเกจที่เกี่ยวข้องกับภาษาไทยบางส่วนเรียบร้อยแล้ว ไม่ว่าจะเป็นฟอนต์ภาษาไทย ดิกชันนารีภาษาไทย และแพคเกจอื่นๆ ที่เกี่ยวข้อง เพื่อรองรับผู้ใช้งาน Ubuntu 10.10 Maverick Meerkat และ Suriyan 53.10 Demon Child สำหรับการตั้งค่า Repo สามารถตั้งค่าได้โดยการติดตั้งแพคเกจ suriyan-repository เช่นเดิม หากท่านที่อัพเกรดจาก Ubuntu 10.04 ไปเป็น Ubuntu 10.10 สามารถอัพเดทแพคเกจใหม่จากคลังซอฟต์แวร์ได้เช่นกัน คลังซอฟต์แวร์ยังเป็นสถาปัตยกรรม x86 อยู่หากท่านใดที่ต้องการช่วยเหลือพัฒนาคลังในส่วนสถาปัตยกรรม x64 ทางจะทีมงานยินดีเป็นอย่างยิ่งครับ คลังซอฟต์แวร์ของ Suriyan ไม่ได้เป็นเพียงแค่คลังซอฟต์แวร์ที่อยู่ในรูป binary เพียงอย่างเดียว คุณสามารถดาวน์โหลดซอร์สโค้ดจากคลังซอฟต์แวร์ได้ โดยใช้เครื่องมือจัดการแพคเกจอย่าง APT และ Synaptic มาช่วยกันสร้างคลังซอฟต์แวร์เชิงสร้างสรรค์กันครับ สำหรับท่านที่ต้องการเพิ่มซอฟต์แวร์ในคลังขอความกรุณาติดต่อ @anoochit และ @gumara ครับ

จากตอนที่แล้วเราได้ repo เพื่อเตรียมเอาไว้ใช้บริการผู้ที่ต้องการติดตั้งโปรแกรมจาก repo เราไปแล้ว ในตอนที่ 2 นี้จะเกี่ยวกับเรื่องของการจัดการ package โดยที่นักพัฒนาหรือผู้ดูแล package ต้องการอัพโหลดขึ้น repo server ด้วยตัวเอง ไม่ต้องสั่ง include package เป็นครั้งๆ ไป Debian มีเครื่องมือให้เราใช้เช่นกันครับ เราจะมาใช้เครื่องมือที่ชื่อ dupload

dupload เป็นเครื่องมือที่ออกแบบมาเพื่อใช้ในการอัพโหลด package ไปยัง repo ต่างกันได้ ซึ่งจะทำให้ง่ายในการ contribute package ของนักพัฒนาและผู้ดูแล apckage นั้นๆ เอาล่ะเรามาเริ่มติดตั้งและ config เจ้า dupload กันดีกว่าครับ เริ่มแรก ติดตั้งกันก่อน ใช้คำสั่ง

$ sudo apt-get install dupload

จากนั้นเราต้องไป config ค่า repo ให้กับ dupload กันก่อน ที่ ~/.dupload.conf หรือที่ /etc/dupload.conf ก็ได้ การ config นั้เราจะกำหนด repo server ปลายทางที่เราต้องการจะ upload package ขึ้นไป เช่น

$cfg{‘example’} = {
fqdn => "example.com",
login => "steve",
method => "scpb",
incoming => "/incoming/",
# The dinstall on ftp-master sends emails itself
dinstall_runs => 1,
};

อธิบายกันก่อน config ข้างบนเป็นการบอกว่าเรามี repo server ชื่อเล่นว่า example โดยมี domain ชื่อเต็มๆ ว่า example.com ใช้ login ว่า steve ใช้ scpd เป็น protocal ในการ upload ไฟล์ มีไดเรคทอรี /incoming เป็นไดเรอทอรีปลายทางของ package ที่เร upload ขึ้นไป

หากต้องการปรับปรุงให้เข้ากับความต้องการของคุณก็เพียงแค่แก้ไข hostname, login, incoming dir แค่นี้ก็ได้แล้วครับ อ้อ หากคุณต้องการให้ upload package โดยใช้ anonymous FTP ก็สามารถแก้ไขได้ครับ เอาล่ะ วิธีการ upload ก็ง่ายๆ ครับ ใช้คำสั่ง dupload แบบนี้

$ dupload –to <reponame> <.change file>

ตัวอย่างเช่น

$ dupload –to example suriyan-wallpaper1.0i386.change

เท่านี้ก็ upload package ขึ้นไปยัง repo ได้แล้ว แต่ว่า dupload ทำหน้าที่ upload package ไปกองไว้ที่ incoming dir เท่านั้นครับ ไม่ได้ build และบรรจุลงใน repo ของเราจริงๆ ดังนั้นต้องเขียน script เพิ่มอีกหน่อยเพื่อให้ reprepro ทำงานต่อให้เรา อ่ะดาวน์โหลด script ไปละกันนะครับ เมื่อได้ script กันแล้ว บันทึกลงในที่น่าจะจำได้ แล้วก็ใส่ลงใน crontab ครับแบบนี้

*/5 * * * * /usr/local/import-new-packages.sh

มีเรื่องให้ได้จัดการในอีกโครงการหนึ่งคือ Suriyan ซึ่งเป็นโครงการ Linux ที่อยู่ดีๆ ก็ฟื้นขึ้นมาแบบงงๆ จนกลายเป็นหน้าที่ที่ได้รับในส่วนการพัฒนาเพิ่มเติมของ Suriyan นั่นคือส่วนที่ไม่มีอยู่ในดิสทริบิวชันต้นน้ำ (Ubuntu) ซึ่งก็ติดปัญหาเดิมคือการบริหารจัดการ repository นั่นเอง แหม หาทาง build deb source ได้แต่การจัดการ repo แทบกระอักเลือด หากจำกันได้ผมเขียนเขียนวิธีการจัดการ repo ไว้ 2 แบบ คือ

  1. trivial archive
  2. official archive

ซึ่งวิธีการจัดการ repo 2 แบบนี้คล้ายกัน ต่างกันเพียงส่วนของ apt-pinning และเครื่องมือในการจัดการเท่านั้น หากนึกไม่ออกลองไปหาอ่านที่ blog เก่าๆ ได้ครับ ซึ่งปัญหาในการจัดการ repo และ package ที่ต้องการโดยแบ่ง version ออกเป็นส่วนๆ เพื่อการ maintain นั้นยุ่งยากมากกว่ากันหลายเท่า เพราะนอกจาก maintain เวอร์ชั่นปัจจุบันยังต้องเตรียมในรุ่นก่อนหน้าก็ถือว่ายุ่งพอสมควร แต่การสร้างและจัดการ repo มีหลายวิธีด้วยกัน วันนี้จะมาแนะนำการสร้าง repo แบบ official archive แต่ใช้เครื่องมือชื่อ reprepro กันครับ

ก่อน การทำ repo เรามาวางแผนสักสักนิด ผมตั้งใจจะให้ apt ใช้ url ประมาณนี้ครับ http://suriyan.in.th/repo นั่นหมายความว่าผมจะต้องสร้าง repo ภายใต้ document root (หรือไม่ก็ได้ หากสร้างใน directory อื่นสามารถใช้ aliase ชี้ได้) สมมุติว่าผมสร้างที่ /var/www/repo ก็แล้วกันะครับ

ก่อนอื่นติดตั้ง reprepro กันก่อน

# aptitude install reprepro

จากนั้นสร้าง dir repo ขึ้นมา

# mkdir -p /var/www/repo/conf

ให้สร้างไฟล์ ที่กำหนด distribution ขึ้นมาชื่อ distributions ใน /var/www/repo/conf ใส่ข้อมูลลงไปดังนี้

Origin: Your Name
Label: Your own label
Suite: ubuntu
Codename: karmic
Version: 9.10
Architectures: i386 source
Components: main restricted
Description: Your description
SignWith: yes

เท่านี้ก็เรียบร้อยครับ เอา deb source มาใส่ใน repo ของเราได้เลย โดยใช้คำสั่ง

# reprepro -Vb . include <codename> <.change file>

หรือ

# reprepro -Vb . includedeb <codename> <.deb file>

ตัวอย่าง เช่น

# reprepro -Vb . include karmic suriyan-wallpaper1.0i386.change

reprepro ก็จะค้นหาไฟล์ dsc, source และ deb ที่ build เสร็จแล้วให้เรา พร้อมสร้าง dir ใน pool จากนั้นก็ใส่ dsc, source และ deb ลงใน pool ให้อัตโนมัติ แถม sign repo ให้เราด้วย สำหรับการเอา package ออกก็ไม่ได้ยากอะไร เพียงแค่ใช้คำสั่ง reprepro ดังนี้

# reprepro -Vb . remove <codename> <package name>

เท่านี้คุณก็จัดการ repo ได้ง่ายๆ แล้ว

หลังจากที่ปล่อยไปหลายเวอร์ชันแล้วแต่ยังไม่เปิด repository สีกที ตอนนี้ทีมงานได้ปลุกปล้ำ repository เสร็จแล้วครับ สำหรับท่านที่สนใจร่วมพัฒนา Suriyan หรือต้องการทำ package เพิ่มเติมให้กับ Suriyan สามารถจัดทำเพิ่มเติมและบรรจุลงใน repository ได้ สำหรับ repository ที่เปิดให้บริการสำหรับนักพัฒนา ได้แก่ Subversion ที่ให้บริการบนเว็บสำหรับนักพัฒนา และ APT repository ที่ใช้เป็นคลังซอฟต์แวร์ ซึ่งสามารถติดตั้งซอฟต์แวร์โดยใช้ APT หรือ Synaptic ได้ สำหรับ package ที่มีให้บริการตอนนี้ เป็น package สำหรับ Suriyan Desktop สำหรับ Suriyan Enterprise Platform Package จะทะยอยอัพโหลดขึ้นเร็วๆ นี้ครับ หากท่านใช้งาน Ubuntu Server หรือ เป็นผู้ให้บริการติดตั้งระบบเซิร์ฟเวอร์ ห้ามพลาด Suriyan Enterprise Platform Package เด็ดขาด! ลืมไปนิด สำหรับท่านที่ต้องการ sync repository สามารถ sync ได้ที่ dp.thaiopensource.org::suriyan-repo สำหรับนักพัฒนาที่ต้องการ contribute package สามารถติดต่อ @anoochit หรือ @gumara ผ่านทาง dm ได้โดยตรงครับ

ไม่แน่ใจว่าจะมีใครตั้ง Repository ไว้หลายที่อย่างผมบ้างรึเปล่า ไม่รู้ปกติเขาตั้งกันมากสักแค่ไหน แต่ของผมเท่าที่กวาดๆตาดูก็ตกประมาณ 20 repo ได้ ที่ตั้งไว้ แน่นอนว่าข้อดีของมันคือมีซอฟต์แวร์ให้เลือกมาก แต่ปัญหาที่เจอเลยคือ ทุกครั้งที่เปิดโปรแกรมจัดการแพคเกจ มันจะเปิดช้ามาก เพราะมัวแต่เสียเวลาไปอัพเดทแต่ละ Repo ในทุกๆครั้งที่เรียกโปรแกรม ดังนั้นวิธีแก้ง่ายๆ คือ ไปตั้งค่าให้มันไม่ต้องอัพเดทอัตโนมัติ แล้วนานๆทีเราค่อยสั่งอัพเดทเองตามต้องการ

วิธีการ

  1. แน่นอนครับ เรียก YaST เลย
  2. ไปที่ Software Repositories
    autoupdate-repo-1
  3. จะปรากฏหน้าต่าง คลังแพคเกจ ขึ้นมาซึ่งจะมีรายการคลังแพคเกจมราเราตั้งไว้อยู่
  4. คลิกเลือกคลังแพคเกจสักรายการ สังเกตุด้านล่าง จะมีช่องที่เขียนว่า เรียกการปรับปรุงใหม่โดยอัตโนมัติ ให้เอาเครื่องหมายถูกออกครับ
    autoupdate-repo-2
  5. ไล่ทำไปให้ครบทุกรายการคลังแพคเกจก็เป็นอันเรียบร้อยครับ

ทีนี้ เราก็ไม่ต้องเสียเวลาในการอัพเดท Repo ในทุกๆครั้งที่จะเรียกโปรแกรมจัดการแพคเกจแล้วครับ

ที่มา: http://suseclub.com/node/60

จากตอนที่ผมได้ติดตั้ง openSUSE และใช้งานใหม่ๆนั้น พบว่า Application ที่มีให้ติดเพิ่มได้ใน Repo ที่มีมาให้อยู่แล้วนั้นมันน้อยมาก (ส่วนหนึ่งเพราะเป็น PPC ด้วย แล้วก็คงเพราะผมโลภด้วย) ก็เลยพยายามหา Repo อื่นๆ มาใส่เพิ่ม แต่ปัญหาคือ มันหายากมาก

ซึ่งสุดท้ายแล้ว ผมมารู้ว่า เขามีลิสท์ไว้แล้ว ที่ http://en.opensuse.org/Package_Repositories แล้วก็ สามารถ add ได้ง่ายๆ โดยใช้ zypper

แต่ตามหลักของ SUSE แล้ว แน่นอนว่า มันต้องวิธีที่ง่ายกว่านั้น ผมเชื่ออย่างแน่นอนว่า YaST ต้องทำไอ้แบบที่ผมต้องการนี้ได้แน่ๆ แต่ด้วยวิธีไหน และยังไงนั่นแหล่ะ

และผมก็รู้วิธีแล้ว จึงได้นำมาแนะนำกันครับ ก็เป็นวิธีเพิ่ม Repo เจ๋งๆ ให้ openSUSE ของเรา อย่างง่ายๆเลย

ขั้นตอน

  1. ผมเขียนสคริปตัวเว็บให้ข้อ 1 เป็น ให้เรียก YaST ตลอดเลยได้ไม๊เนี่ย
  2. ครับ ก็ พอขึ้นหน้าต่าง YaST มาแล้ว ให้ไปที่ Software Repositories
    yast-add-repo-1
  3. เราจะพบหน้าต่าง รายการ Repository ตามภาพครับ ให้กด เพิ่ม โลด
    yast-add-repo-2
  4. มันจะปรากฏหน้ารายการให้เลือก ผมเกลียดจริงๆ มันเยอะมาก นั่งคิดนานกว่าจะเลือกได้ถูก ก็ ให้เลือกที่คลังแพคเกจของชุมชน แล้วกด ถัดไป
    yast-add-repo-3
  5. จะปรากฏรายการ Repo ที่ให้เราสามาระเลือกได้ขึ้นมามากมายครับ (จริงๆเยอะกว่าในภาพ แต่ผม เพิ่ม มันเข้าไปหมดแล้ว เหลืออยู่แค่นี้)
    yast-add-repo-4
  6. ต้องการอันไหนบ้างก็ติ๊กๆไปครับ เสร็จแล้วก็คลิกตกลง
  7. พอกลับไปหน้ารายการ Repository เราก็จะเห็นรายชื่อขึ้นมามากมาย เป็นอันเสร็จสิ้นพิธีการครับ

ก็ ทั้งหมดก็มีเพียงเท่านี้ครับ ครั้งหน้าเมื่อคุณจะเพิ่มโปรแกรม คุณจะพบกับรายการโปรแกรมที่มีมากจนอาจจะต๊กกะจาย