Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Oct 27, 2013

ทำ Debian Package ขึ้น Launchpad PPA

การทำ software package นั้นก็เปรียบเสมือนพ่อค้าคนกลาง หลักการทั่วๆ ไปคือ
  1. สืบเสาะว่าในตลาด (package source) ตอนนี้ สินค้าชนิดไหนที่ลูกค้า (user) ต้องการแต่ยังไม่มี (หรือมีแต่ก็ยังไม่ดีพอ)
  2. ตระเวณหาผู้ผลิตสินค้า (upstream) ชนิดนั้นๆ เจรจาต่อรองราคาซื้อสินค้า (app) มาตุนไว้
  3. ปรับแต่งสินค้า (config) ให้เหมาะกับลูกค้า แล้วบรรจุหีบห่อ (packaging) ส่งขายหน้าร้านของตัวเอง (PPA)
หน้าที่ของคนออก software package จึงไม่ใช่การเขียน code สำหรับ software ตัวนั้นๆ ซักเท่าไหร่ แต่เป็นการ config และทดสอบ dependency ให้ทำงานได้บนระบบนั้นซะมากกว่า

อย่างไรก็ตาม บางครั้ง software ที่ต้องการทำ package ก็ไม่มี upstream เพราะอาจจะผูกติดกับ platform นั้นๆ (native package) อย่างเช่น theme หรือโปรแกรมเฉพาะสำหรับ platform

บังเอิญว่าอยากทำ theme package พอดี แต่ tutorial ที่เจอดันสอนแต่แบบที่ต้องพึ่ง upstream (และเน้นหนักด้าน config) แถมยังเอา bzr มาปนซะเยอะ (แน่นอนว่าผมพยายามใช้แต่ git ถ้าเป็นไปได้) สุดท้ายเลยไล่โหลด code ชาวบ้านมาดูถึงทำเป็น

วิธีการทำ native package สำหรับ Debian โดยคร่าวๆ ก็คือ
mkdir proj-package/proj-0.9.0
cd proj-package/proj-0.9.0
dh_make --native
หมายเหตุว่าตอนนี้จำเป็นที่จะต้องห้อยเลข version ไว้ที่ชื่อ directory ด้วย ส่วน proj-package จะมีหรือไม่มีก็ได้ แต่พอเราทำ package แล้วไฟล์ต่างๆ จะมาอยู่ทำระดับเดียวกันกับ proj-0.9.0 ดังนั้นถ้าไม่อยากให้ไฟล์อื่นๆ ปนกันมั่วก็สร้างไว้ด้วย

พอสั่งคำสั่งสุดท้ายเสร็จก็ตอบคำถามอีก 1-2 ข้อ จะมี directory ชื่อ debian โผล่มา ถึงตอนนี้ถ้าอยากแก้ proj-0.9.0 เอา version ออกให้เหลือแค่ proj หรือกระทั่งเปลี่ยนเป็นชื่อใดๆ ก็ทำได้เลย

เรียบร้อยแล้วเข้าไปแก้ไฟล์ต่างๆ ใน debian ดังนี้
  • ลบทุกไฟล์ที่ลงท้ายด้วย .ex, .EX
  • ลบไฟล์ที่เกี่ยวกับ README และ directory source
  • แก้ไฟล์ copyright เพิ่มชื่อเจ้าของผลงานการทำ package ลงไป
  • แก้ไฟล์ control เพิ่มรายละเอียด อันนี้ยากหน่อย แนะนำให้ดูตัวอย่าง package ที่คล้ายๆ กันแล้วลอกมา

แก้เสร็จแล้วลอง build package ดู โดยกลับไปอยู่ที่ระดับเดียวกับ directory debian แล้วสั่ง
debuild -us -uc
จะได้ไฟล์ proj_0.9.0.deb (Debian installer ที่สามารถ double click เพื่อติดตั้งได้) ที่ระดับ directory proj-0.9.0 (กลับออกไป 1 ระดับ)

แต่ว่า package ตอนนี้มันยังเป็น package เปล่าๆ ไม่มีอะไร ถ้าต้องการระบุว่า package นี้จะติดตั้งไฟล์ไปที่ใดบ้าง ก็เอาไฟล์นั้นๆ ไปไว้ในระดับเดียวกันกับ debian เช่น
proj-0.9.0
├── bin
│   ├── goodbye.sh      # install => /usr/bin/goodbye.sh
│   └── hello.sh        # install => /usr/bin/hello.sh
├── conf
│   └── greeting.conf   # install => /etc/greeting.conf
└── debian
แล้วก็เขียนไฟล์ debian/install เช่นนี้
bin/* /usr/bin/
conf/* /etc/
หมายเหตุว่าไฟล์พวกนี้จะไปทับไฟล์ของ package อื่นๆ ไม่ได้ (ต้องเพิ่ม Conflict/Replace ใน debian/control -- จะยังไม่พูดถึงตอนนี้) อันที่จริง มันไม่ควรจะไปทับไฟล์ใดเลย เพราะตอน remove ไฟล์พวกนี้จะหายไปอัตโนมัติ ไม่ใช่ revert กลับไปเป็นของเดิม

ส่วน action ต่างๆ ที่จะทำตอนก่อนหรือหลังการ install / remove (เช่น install เสร็จแล้วก็ auto config เล็กน้อย) ก็เขียนเป็น shell script ใส่ preinst, postinst, prerm, postrm ไว้ใน directory debian นั่นแหละ

เมื่อ test build ที่เครื่อง local จนมั่นใจแล้ว ก็แก้ไฟล์ debian/changelog เปลี่ยน unstable เป็น codename ของระบบที่ใช้อยู่ (ดูได้ที่ /etc/lsb-release) และแก้ข้อมูลอื่นๆ ตามสมควร

เรียบร้อยแล้วกลับมาอยู่ที่ระดับเดียวกับ proj-0.9.0 แล้วสั่ง
tar -zcvf proj_0.9.0.orig.tar.gz proj-0.9.0/

cd proj-0.9.0
debuild -S -k$PGPKey

cd ..
dput ppa:user/repo proj_0.9.0_source.changes
เพื่ออัพ package นี้ขึ้น PPA ที่ Launcpad ต่อไป (รอมัน build ประมาณครึ่งชั่วโมง)

ทีนี้ ถ้าเพื่อนเราที่ใช้ Debian/Ubuntu รุ่นที่เรา build package ตัวนี้ไว้ อยากจะ install package นี้ ก็บอกเพื่อนว่าทำแค่
add-apt-repository ppa:user/repo
apt-get update
apt-get install proj
เท่ปะล่า :P

Oct 15, 2013

Taskbar 2 ข้าง

ผมชอบแนวคิดของ Unity พอสมควร คือในเมื่อพื้นที่แนวตั้งมันเหลือน้อย แล้วทำไมเราไม่ย้ายพวก taskbar ต่างๆ ไปไว้ด้านข้างซะหละ? (รักษาพื้นที่แนวตั้งให้ได้มากที่สุด) แต่ที่รับไม่ค่อยได้คือมันเล่นบังคับให้อยู่แค่ด้านซ้ายอย่างเดียวเลย (เผด็จการ) แถมขนาดที่ใหญ่เวอร์ของมันก็ทำให้หน้าจอดูไม่สมดุลอีก

ทางออกง่ายๆ คือทำให้ taskbar มีทั้ง 2 ข้างซะ ข้างนึงอาจจะเป็น taskbar (โปรแกรมที่เรียกบ่อย / โปรแกรมที่เปิดอยู่) แล้วอีกข้างเป็น status bar (วันที่, เวลา, ภาษา, ไวไฟ ฯลฯ) ก็ดูดีไม่ใช่น้อย

ผมลอง XFCE แล้วพบว่า build-in taskbar ก็พอใช้ได้ (ลูกเล่นน้อยกว่า Unity) แต่ที่รับไม่ค่อยได้คือ status bar มันกากๆ ยังไงไม่รู้ ปัญหาที่เจอคือถ้าวาด icon พวกไวไฟ, แบตฯ ใหญ่ๆ แล้วภาพแตก แต่ถ้าวาดรูปเล็กไปก็ไม่มีพื้นที่พอให้แสดงเวลาอีก

เล่นไปเล่นมาก็เพิ่งนึกได้ว่า ไอ้ status bar เนี่ยไม่จำเป็นต้องเอาไว้ด้านข้างก็ได้ ยังไงซะถ้าเปิด app เต็มจอ ก็โดน menu bar แย่งพื้นที่อยู่ดี ซึ่งตรงนี้ Unity มันเอา status bar ไปรวมกับ menu bar ให้อยู่แล้ว ปล่อยไว้อย่างนั้นแหละ

ตอนนี้เลยเล่นท่าง่าย ซ่อน taskbar ของ Unity ไว้ซะ แล้วใช้ Docky ทั้งสองข้างแทน ได้ผลออกมาดังนี้


ใช้ไปใช้มาแล้วพบว่ายังติดปัญหาอยู่เล็กน้อย เช่น
  1. ก็ยังตั้งค่าให้กด icon เพื่อเรียก Unity Dash ไม่ได้ ต้องกดปุ่ม super อย่างเดียว (ปัญหาเดิมเหมือนตอนซ่อน taskbar แล้วใช้ Docky ข้างล่าง)
  2. ถ้าใช้โปรแกรมแบบเต็มหน้าจอ จะเลื่อนเมาส์ไปลาก scrollbar ต้องใช้สมาธิเพิ่มขึ้นมากๆ ไม่งั้นจะไปโดน taskbar ด้านขวามือแทน (แล้วมันก็จะขยายมาบังอีก) ซึ่งแก้ได้ด้วยการไม่เปิดโปรแกรมเต็มหน้าจอบ่อยๆ + ใช้ keyboard แทนในหลายๆ กรณี (home, ctrl+down, mouse wheel)
  3. ตัวหนังสือ default ของ Ubuntu มันไซส์ใหญ่ไปหน่อย เปิด 2 terminal ข้างๆ กันแล้วไม่ได้จอละ 80 ตัวอักษรแล้ว
  4. ใช้ Touchpad / TrackPoint จิ้มเรียกโปรแกรมจะไม่ค่อยรู้สึกแปลก (เพราะมันใช้ได้ทั้ง 2 มือ) แต่ถ้าใช้เมาส์มือขวาจะรู้สึกว่ามันจิ้ม taskbar ด้านซ้ายยากมาก ... อันนี้คงคิดไปเอง :P

แต่โดยรวมก็ถือว่า happy กว่าเก่าเยอะ

Aug 26, 2013

Google Maps Linux เล่น 3D ได้แล้ว \(;w ;)/

เรื่องกราฟฟิกและเกม Linux ถือว่าเป็นลูกเมียน้อยมาตลอด จนกระทั่งต้นปีที่ผ่านมา Steam for Linux ได้ถือกำเนิด บวกกับระบบมือถือยอดนิยมอย่าง Android ที่ผู้ใช้ไม่น้อยซื้อไปเพื่อเล่นเกม สถานการณ์ก็เริ่มดูดีขึ้นมาบ้าง

ตอนนี้ก็มีอีกบริการหนึ่งที่รองรับการใช้กราฟฟิกบน Linux แล้ว ซึ่งก็คือ Google Maps ตัวใหม่นั่นเอง (ไม่แน่ใจว่ารองรับตั้งแต่เมื่อไหร่ เพราะจำได้ว่าช่วงแรกๆ ที่ปล่อยพรีวิว เวลาพยายามดูให้เป็น 3D มันจะฟ้องหา Google Earth Plugin ซึ่งไม่รองรับบน Linux) อันนี้ดูผ่าน Chromium รุ่นล่าสุด เข้าใจว่าพี่แกคงปลุกปล้ำกับ WebGL จนสำเร็จ


ซูมออกไกลสุด เห็นหมู่ดาวและแสงไฟในเมืองด้วย


โลกโค้งๆ กับปุยเมฆบนท้องฟ้า (ไม่แน่ใจว่าภาพเมฆเป็นแบบ live หรือเปล่า)


ซูมภูเขาเห็นเป็นภูเขาแล้ว


ส่วนตึกต้องเป็นเมืองที่รองรับ ตอนนี้ยังมีไม่มากเท่าไหร่ ส่วนใหญ่ก็เมกากับแถบยุโรป



ซูมใกล้สุด รายละเอียดไม่ได้ชัดเวอร์ขนาด backpack เที่ยวผ่านหน้าจอได้แฮะ (แต่ก็ดีกว่าไม่มีหละน่า)