流水賬-在Ubuntu 18.04中制作libfuse3 deb包

問題描述

Ubuntu 20.04在官方源中已經(jīng)提供了libfuse3的deb包杂瘸,然而在Ubuntu 18.04的官方源中僅有l(wèi)ibfuse2 (2.9.7)。為了讓部署起來更加方便伙菊,需要自己制作libfuse3的deb包败玉。

制作流程

deb包的制作本身需要經(jīng)歷幾個過程,可以參考教程 https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.en.pdf镜硕。其中大致包括創(chuàng)建源碼包(dh_make)->編譯與測試(debuild)运翼。其中最復(fù)雜的過程是dh_make->debuild之間對debian/下打包描述文件的編寫過程,例如包括

  • debian/control:deb包的元數(shù)據(jù)兴枯,例如依賴包血淌、版本等
  • debian/rules:制作本deb包的一些特殊的規(guī)則,例如描述對install, test等默認(rèn)過程的附加命令

1. 源碼下載

雖然libfuse社區(qū)沒在開源項目中給出deb的打包規(guī)則财剖,幸運的是deb社區(qū)給出了其打包libfuse3-3時所寫的deb規(guī)則以及l(fā)ibfuse-3.9.0-2相應(yīng)origin源碼悠夯。debian社區(qū)libfuse3-3的軟件包頁面在: https://packages.debian.org/sid/libfuse3-3

fuse3制作deb包源碼.png

debhelper提供了方便的一鍵下載腳本工具,只需要

dget http://deb.debian.org/debian/pool/main/f/fuse3/fuse3_3.9.0-2.dsc

就會將fuse3_3.9.0.origin.tar.xz以及fuse3_3.9.0-2.debian.tar.xz等下載到當(dāng)前路徑躺坟。因為只是自己用沦补,沒有簽名等需求,因此在本次自制deb包過程中有用的包有fuse3_3.9.0.origin.tar.xz以及fuse3_3.9.0-2.debian.tar.xz咪橙。其中前者是源碼包夕膀,后者描述打包過程栓袖。
解壓完成后,目錄結(jié)構(gòu)如下店诗,其中debian/解壓自于fuse3_3.9.0-2.debian.tar.xz

- fuse-3.9.0/
  `- debian/
  `- doc/
  `- example/
  `- meson.build
  `- ...

2. debuild一條龍

mk-build-deps是安裝編譯依賴所用到的工具裹刮,他會自動生成一個二進(jìn)制包,該二進(jìn)制包的依賴關(guān)系與最終目標(biāo)deb包編譯時依賴的其他包庞瘸,因此通過安裝該二進(jìn)制包即可一次性解決編譯時的依賴問題捧弃。相關(guān)命令為

mk-build-deps --install --remove

debuild是dpkg-buildpackage, lintian, fakeroot, debsign的一條龍命令工具,如果一切順利的話一句debuild就可以完成打包過程擦囊。然而問題是比較多的违霞。

a. Compatibility levels

debhelper打包的過程中報錯:dh: Compatibility levels before 5 are no longer supported (level 1 requested) ,造成該錯誤的主要原因是編譯平臺尚未安裝用于向后移植的包瞬场,所以兼容性不符合要求买鸽。結(jié)果方式是在ubuntu 18.04上安裝apt install bionic-backports
他們的向后移植設(shè)計很巧妙贯被,后續(xù)有時間了我一定仔細(xì)學(xué)習(xí)一下他們是如何做到向后可移植的原理眼五。

b. pytest測試報錯,包括pytest的版本問題以及l(fā)ibfuse test用例外部參數(shù)錯誤導(dǎo)致無法通過等問題

解決方案有兩個彤灶,最簡單暴力的方案就是通過設(shè)置臨時環(huán)境變量跳過測試過程:

DEB_BUILD_OPTIONS=nocheck debuild -us -uc

更加正確的解決辦法為看幼,逐個定位問題解決問題。

首先是pytest版本問題幌陕,因為使用apt install python3-pytest安裝的pytest版本較老導(dǎo)致的問題诵姜,可以通過使用pip重新安裝pytest來解決,pip3 install pytest搏熄。
其次是libfuse測試用戶無法通過的問題棚唆,可以看到debian的官方libfuse3-3給我們的debian/rule中使用了命令python3 -m pytest test/來執(zhí)行測試,而test/test_examples.py中有使用了相對路徑test/../examples/hello來調(diào)用可執(zhí)行文件心例,但是debuildninja build的過程中使用的builddirobj-x86_64-linux-gnu/宵凌,這就導(dǎo)致了pytest測試用例中實際用到的可執(zhí)行文件并不在他期望的位置。因此在debian/rules中的override_dh_auto_test項進(jìn)行如下修改:

override_dh_auto_test:
ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
#       python3 -m pytest test/
        python3 -m pytest obj-x86_64-linux-gnu/test/
endif

c. install usr/lib//.a契邀, File not found

在meson configure中摆寄,default_library的默認(rèn)項為shared,因此libfuse并沒有編譯出libfuse3.a等靜態(tài)鏈接庫坯门,這導(dǎo)致debhelper在根據(jù)debian/libfuse3-dev.install的過程中出錯微饥。這應(yīng)該是ubuntu特有的問題,需要手動注釋debian/libfuse3-dev.install中的usr/lib/*/*.a古戴。其實正常來說如果*.a不存在欠橘,應(yīng)該忽略這個錯誤而不應(yīng)該停止。

d. fusermount3.1, File Not Found

這個問題與上一個大同小異现恼,查看debian/tmp/usr/share/man/man1可以發(fā)現(xiàn)實際存在的是fusermount3.1.gz肃续,因此手動將debian/fuse3.manpages中的manpage路徑添加拓展名.gz即可黍檩。

3. 最終收尾

解決完上述問題以后,再次運行debuild -us -uc始锚,最終能在fuse-3.9.0的平級目錄得到一條龍制作完成的deb包刽酱,包括fuse3_3.9.0-2_amd64.deblibfuse3-3_3.9.0-2_amd64.deb等瞧捌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棵里,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姐呐,更是在濱河造成了極大的恐慌殿怜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曙砂,死亡現(xiàn)場離奇詭異头谜,居然都是意外死亡,警方通過查閱死者的電腦和手機鸠澈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門柱告,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人款侵,你說我怎么就攤上這事末荐。” “怎么了新锈?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眶熬。 經(jīng)常有香客問我妹笆,道長,這世上最難降的妖魔是什么娜氏? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任拳缠,我火速辦了婚禮,結(jié)果婚禮上贸弥,老公的妹妹穿的比我還像新娘窟坐。我一直安慰自己,他們只是感情好绵疲,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布哲鸳。 她就那樣靜靜地躺著,像睡著了一般盔憨。 火紅的嫁衣襯著肌膚如雪徙菠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天郁岩,我揣著相機與錄音婿奔,去河邊找鬼缺狠。 笑死,一個胖子當(dāng)著我的面吹牛萍摊,可吹牛的內(nèi)容都是我干的挤茄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼冰木,長吁一口氣:“原來是場噩夢啊……” “哼驮樊!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起片酝,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤囚衔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雕沿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體练湿,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年审轮,在試婚紗的時候發(fā)現(xiàn)自己被綠了肥哎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡疾渣,死狀恐怖篡诽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榴捡,我是刑警寧澤杈女,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吊圾,受9級特大地震影響达椰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜项乒,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一啰劲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧檀何,春花似錦蝇裤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至砚殿,卻和暖如春啃憎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背似炎。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工辛萍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悯姊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓贩毕,卻偏偏與公主長得像悯许,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辉阶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355