debian 簡易套件打包

在 debian 中簡單打包二進位安裝包的作法, 就是用 checkinstall 或 dpkg --build ; 讀 debian 文件讀半天,繞了一圈才回來找到這個最簡單的做法。 以前都只能當伸手牌,現在可以編譯完作善事, 把編譯結果上傳給其它使用者安裝了。 我編譯的一些軟體包放在 google drive 上。

debian source

一開始我從 debian wiki 開始找, 讀了幾篇都是從 tarball 打包的, 而且多是半自動從原始碼編譯到執行檔再打包。 就我的理解是這套流程是打包成 deb-src , 也就是一個包裡面有 tarball 和可以自動編譯的腳本; 然後可以再在 deb-src 的基礎上自動建構出 deb, 也就是不含原始碼只含執行檔的包。

雖然常說編譯就是 make && make install , 但還是有多眉角,要完全自動化就多少會撞一點牆。 大部份是依賴 debian 一些自動化工具, 像引入魔改的 makefile header 再引用原始的, 就能辦到很多神奇的事。 一般流程就是直接自動 build 一次,看哪裡出錯就調, 再 re-build 再改到成功為止。

全自動好處是,下次有新版本發布時, 腳本可以繼續用,只要更新 tarball 就可以了。 而且從 deb-src 建構 deb 也是全自動的。 但流程較複雜,我試了好幾次都失敗。 另外就是很多教學都是教 更新現有包的 tarball 或是 打包 tarball ; 但我想打包的專案 scrcpy 是用 git, 而且用的 build system 是 meson。

debian binary

隔一天又繼續試,無意間換了關鍵字, 結果就出了 超好懂的文章 , 才發現昨天看得都是打包原始碼, 如果只打包編譯結果的執行檔就超簡單的。 只要把要包的檔案按目錄結構放好, 然後寫一下套件的資訊就好了, 如果要指定此套件依賴其它套件也可以。

check install

另外一個很方便的程式是 checkinstall, 可以把 make install 過程中做過的事, 打包成一個 deb 包。 內部怎麼實作我不太清楚, 大概就是在會監視 make install 的指令中, 把哪些檔案複製到系統內,然後做出一個一樣的 deb 包。 之後要移除時,可以直接移除該個包,就回到乾淨的系統。 因為一些軟體發行時,makefile 裡沒有提供 uninstall 的目標可以用, 要移除比較麻煩,所以就生出了 checkinstall 這個軟體。

而且 checkinstall 不只支援 makefile, 任意的安裝程式都可以;只是你要把指令傳進去。 像 meson 就是 checkinstall meson install , 而 sudo 加在 checkinstall 或 meson 上都可以。 如果你只傳安裝命令,checkinstall 會自動檢查系統種類, 然後可以互動更改,看要做成 rpm deb 還是 slackware 的包。

自己包的軟體

總之自己用 checkinstall 包了幾個以前編譯的軟體, 丟到 google 雲端放 ,如果有需要就拿吧。 建議裝 deb 的裝法是 sudo apt install ./*.deb 之類, 不要用 dpkg -i ./*.deb 裝, 用 apt 裝會幫你處理相依性問題, 如果 deb 包裡有相依其它包會一併幫你裝好。

scrcpy

一個在電腦上顯示、操作 android 手機的軟體, 透過 adb 無需 root。

libccid

在 linux 上如果要用晶片讀卡機, 就之前的經驗 ,如果是支援 ccid 規格, debian 的套件庫太舊,要自己 compile libccid。

cconv

簡單的繁簡轉換程式,用 iconv 實現的。 apt 的版本有 bug,如果輸入帶換行會自己退出。