簡體   English   中英

我將如何在Fakeroot Deb軟件包構建器中使用postinst腳本

[英]How would I use postinst script with fakeroot deb package builder

下午好,

我能夠使用以下命令將項目構建到一個deb包中:

fakeroot dpkg-deb --build mypackage

接下來,我可以使用

dpkg -i mypackage.deb

這樣做時,所有內容均已正確安裝並復制,但是在安裝軟件包后,我想運行一些bash命令。

我知道需要使用mypackage / DEBIAN目錄中的postinst文件來完成此操作

我在線上已經看到了該腳本的一些示例,但是沒有清楚說明如何編寫腳本以及如何將其包括在構建中。

  1. 如何確定fakeroot dpkg-deb包含此腳本,並將其放置在DEBIAN目錄中足夠?

  2. postinst腳本中有一個case結構,這是做什么用的,我將bash命令放在該腳本中執行的位置

  3. 如果我使用dpkg安裝軟件包-我的mypackage.deb是否足以運行該腳本?

我想制作的示例腳本如下所示。

  1. 配置,中止升級,中止刪除和中止取消配置 ”代表什么。

  2. update-alternatives ”行是做什么的。

謝謝您的幫助,

下面的postinst文件。

#!/bin/sh

set -e

case "$1" in
    configure)
        # EXECUTE MY BASH COMMAND
        echo /usr/local/lib > /etc/ld.so.conf && ldconfig
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
        exit 0
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

update-alternatives --install /usr/bin/fakeroot fakeroot /usr/bin/fakeroot-ng 5 \
        --slave /usr/share/man/man1/fakeroot.1.gz \
            fakeroot.1.gz /usr/share/man/man1/fakeroot-ng.1.gz

exit 0

首先,這里可能是最相關的文檔: Debian策略手冊:軟件包維護者腳本和安裝過程

其次,在編寫或處理維護者腳本時要記住的最重要的事情是它們必須是冪等的。 假設腳本將連續運行多次,並確保腳本不會中斷。

要直接回答您的問題,

  1. 使用dpkg-deb構建時,將其放入DEBIAN目錄是正確的。 如果改為使用Debhelper進行更安全或更方便的構建設置,則可以將postinst放在debian/$packagename.postinst

  2. 可以在許多不同情況下調用postinst腳本。 您可以在許多(大多數?)后插入語句中找到“ case”語句,用於檢查它的情況。 一般來說,在所有可能的情況下采取大多數后期操作都是有道理的,這就是為什么將它們組合在一個腳本中的原因。 但有時最好區分。 我將在#4下解釋不同的情況。

  3. 是。 成功安裝deb軟件包(無論是dpkg -iapt-get install還是其他方法), 必須成功運行其preinst和postinst腳本(如果存在)。 可以在不運行任何維護程序腳本的情況下對Deb進行“解壓縮”,但這不被視為“正在安裝”。

  4. 這些“動作”名稱對應於可以運行postinst的不同情況。

    • configure :正在安裝或升級軟件包。 如果該軟件包之前未安裝,則$2將為空。 否則, $2將包含該軟件包的舊版本號; 您要升級的版本。

    • abort-upgrade :升級操作已中止。 例如,我安裝了版本1的mypkg,然后嘗試將其升級到版本2。 但是V1的preinst或postinst無法成功運行,或者存在文件沖突。 dpkg停止嘗試安裝V2,並從V1重新運行postinst(帶有“ abort-upgrade ”操作),以防萬一需要恢復任何狀態。

    • abort-remove :刪除操作已中止。 例如,如果我運行了“ dpkg -P mypkg”,但是mypkg的prerm腳本無法運行,或者發生了其他事情,使dpkg認為無法刪除mypkg。 因此,如果需要恢復任何狀態,它將再次運行mypkg的postinst(帶有“ abort-remove ”操作)。

    • abort-deconfigure :您可能會猜到,取消配置操作已中止。 當正在安裝的軟件包與已經安裝的其他軟件包沖突時,“取消配置”是一種半刪除操作。 為了使說明簡短,如果正在運行abort-deconfigure操作,則預期postinst可以還原由prerm腳本使用deconfigure操作撤消的所有狀態。

    有關許多其他細節的信息,請參見https://people.debian.org/~srivasta/MaintainerScripts.html上的圖表和說明。

  5. “ update-alternatives”命令更新Debian“ alternatives”系統中的條目。 請參見手冊頁。 在這種特定情況下,該命令告訴Debian,“ /usr/bin/fakeroot-ng ”是fakeroot命令的替代方法。 根據此替代方案的優先級和其他已注冊替代方案的優先級以及用戶的偏好,當有人運行“ fakeroot ”時,現在可能會調用fakeroot-ng

只需考慮一下這一行:

echo /usr/local/lib > /etc/ld.so.conf && ldconfig

根據Debian政策, 您不應修改ld.so.conf

一個簡單的替代方法是做這樣的事情:

在您的postinst腳本中:

/usr/local/lib > /etc/ld.so.conf.d/EXAMPLE.conf && ldconfig

並在您的postrm腳本中:

rm /etc/ld.so.conf.d/EXAMPLE.conf && ldconfig

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM