ผมพยายามหา package manager เจ๋งๆ มาใช้งานทั้งตัว package และตัวโปรแกรมที่ทำหน้าที่ sync และ update package บนเครื่อง server และเครื่อง desktop ได้ซึ่งตอนนี้ผมจับ 4 distro หลักคือ openSolaris, Debian, Ubuntu และ Fedora เอาเป็นว่ายุบรวมเหลือเพียง 2 package manager ละกันครับ ซึ่งลักษณะการ fetch package คล้ายคลึงกันคือ การสร้าง database repo (meta data ของ package ที่มีอยู่ใน repo server ที่เราเลือกเอาไว้) อยู่ในเครื่องเรา กับไม่ได้สร้าง database repo ในเครื่องเรา วิธีการสังเกตง่ายๆ คือ การค้นหาหรือติดตั้งโปรแกรมที่เคยติดตั้งไปแล้ว (กรณีที่เก็บ package เป็น archive ไว้) package manager จะติดตั้งหรือค้าหาได้ทันที ไม่จำเป็นต้องเชื่อมต่อ internet เพื่อเข้าไป fetch ของ database repository อีกรอบหนึ่ง

ซึ่ง aptitude เป็น package manager ที่ชอบเก็บ database repo ข้อดีก้อคือกรณีเกิดการ broken database บน repo server เราสามารถใช้ repo database ในเครื่องเราสืบค้นข้อมูล package ได้ ซึ่งแตกต่างจาก yum ซึ่งพบใน fedora และ delivered distro ของ fedora เจ้าโปรแกรม yum เป็นส่วนเสริมในการจัดการ package rpm ซึ่ง yum ไม่เก็บข้อมูล repo database ในเครื่องเรา เวลาติดตั้งหรือค้นหา package ต้อง fetch หาจาก repo server ซึ่งค่อนข้างจะมีน้อยและกระจัดกระจาย ด้วยการจัดการ repo database แบบนี้ทำให้ yum ก้อมีข้อดีอย่างหนึ่งคือเราจะได้ข้อมูล package ที่สดใหม่อยู่ตลอดเวลา และรู้ว่าอะไรควรจะอัพเดทหรือไม่อัพเดท แต่ข้อเสียคือมันต้องใช้ internet คลอดเวลาค้นหา package ที่เราจำชื่อไม่ค่อยจะได้ อันนี้ผมเป็นบ่อยเพราะผมชอบค้นใน repo มากกว่าการนั่งเดาชื่อ package หรือชื่อโปรแกรมที่ผมจะติดตั้ง ซึ่งกรณีเกิด broken repo database บน repo server ก้อเตรียมทำใจได้เลยครับ เพราะจะ fetch อะไรไม่ได้และก้อต้องจำใจใช้ โปรแกรมเก่าๆ ต่อไป

เอาล่ะแล้วจะมี package manager ที่ผมชอบบ้างมั๊ย เท่าที่ลองเล่น หลายๆ distro รวมถึง opemSolaris ด้วยแล้วก้อมีจุดดีจุดเด่นแตกต่างกัน ด้วยลักษณะการจัดการ repo server และข้อมูล meta data ที่เก็บด้วย แต่ผมมีโครงสร้าง meta data ที่น่าสนใจอยุ่ตัวหนึ่งลองมาดูกันมั๊ยครับ

<dict>
    <key>bundleIdentifier</key>
    <string>com.nullriver.iphone.Launcher</string>
    <key>name</key>
    <string>Launcher</string>
    <key>version</key>
    <string>0.2</string>
    <key>location</key>
    <string>http://iphone.nullriver.com/zips/Launcher-0.2.zip</string>
    <key>size</key>
    <string>14581</string>
    <key>description</key>
    <string>A simple third party application launcher.</string>
    <key>scripts</key>
    <dict>
        <key>preflight</key>
        <array>
            <array>
                <string>If</string>
                <array>
                    <array>
                        <string>InstalledPackage</string>
                        <string>com.kroo.mobilelauncher</string>
                    </array>
                </array>
                <array>
                    <array>
                        <string>AbortOperation</string>
                        <string>Please uninstall MobileLauncher first.</string>
                    </array>
                </array>
            </array>
        </array>
        <key>install</key>
        <array>
            <array>
                <string>CopyPath</string>
                <string>Launcher.app</string>
                <string>/Applications/Launcher.app</string>
            </array>
            <array>
                <string>CopyPath</string>
                <string>DisplayOrder.plist</string>
                <string>/System/Library/CoreServices/SpringBoard.app/DisplayOrder.plist</string>
            </array>
        </array>
        <key>uninstall</key>
        <array>
            <array>
                <string>RemovePath</string>
                <string>/Applications/Launcher.app</string>
            </array>
        </array>
    </dict>
</dict>

ข้างบนเป็นกรณีศึกษาของผมคือ plist ของ Nullriver Installer บน iPhone นะครับ เจ้า Nullriver Installer นี้ฮิตมากเพราะทำงานคล้ายๆ กับ synaptic คือติดโปรแกรมผ่านทาง internet ได้อ้อถ้ามีเครื่องใน office ก้อติดผ่าน wifi ได้ครับ เจ๋งมั๊ย และที่สำคัญไฟล์ package ที่เอามาติดตั้งไม่จำเป็นต้องอยู่ที่เครื่อง repository ก้อได้ (ตัวหนา) คือเครื่อง repo server ที่อยู่ใน office เป็นเพียง meta data (repo database) เท่านั้น จะติดตั้งก้อวิ่งไป download package เพื่อเอามาติดตั้งอีกที แต่ Nullriver Installer ไม่ได้ทำงานแค่นี้มันยังสามารถเก็บ repo database ในเครื่อง iPhone ด้วย นั่นหมายความว่าคุณสามารถ browse repo ได้โดยไม่ต้องเชื่อมต่อ internet อันนี้สิครับเจ๋งจริง แต่ด้วยความที่โครงสร้างของตัว repo server และ package list (plist) สามารถสร้างและแก้ไขได้ง่าย ทำให้เกิดธุรกิจทำ repo ของ iPhone โดยใช้โครงสร้าง repo ของ Nullriver เยอะมาก ปัญหาที่ตามมาคือ package ซ้ำซ้อนกันไงครับ เอาล่ะปัญหานี้กำลังถูกแก้ไขโดยโครงการ AppTapp ของ Nullriver นั่นแหละครับ ซึ่งอาจแฝงการตลาดเข้าไปด้วยก้อได้อันนี้ผมไม่ทราบนะครับ :) ว่าจะมีหรือเปล่า แต่ที่แน่นอนคือ Nullriver Installer หรือ AppTpp ในอนาคตเป็นที่น่าจับตามองครับ สำหรับ package manager บน android ผมยังไม่ได้ดูเลยครับว่าเป็นยังไง ใครพอจะทราบก้อบอกเล่าแลกเปลี่ยนความรู้กันได้ครับ :)

 

Comments are closed.