Ubuntu

以非特權使用者身份安裝 Debian 軟體包

  • June 13, 2017

我有一個軟體,我想在$HOME/localUbuntu 16.04 機器上安裝在一個單獨的層次結構中。

該軟體作為 Debian 軟體包分發,原始碼不可用(如果有的話,我很樂意下載並自己編譯它)。

我沒有(也不應該)sudo訪問我正在嘗試此操作的機器。該軟體不安裝在系統範圍內,僅供我個人使用。

我試過了

$ dpkg --root="$HOME/local" -i package_x.y.z_x86_64.deb

但我明白了

dpkg: error: requested operation requires superuser privilege

在嘗試並創建了滿足(,帶有子目錄,和,以及中的空文件)--force-all所需的所有必要文件和目錄之後,我陷入了困境dpkg``local/usr/bin``local/var/dpkg``info``triggers``updates``status``local/var/dpkg

$ dpkg --root=$HOME/local -i --force-all package-x.y.z_x86_64.deb
dpkg: could not open log '/var/log/dpkg.log': Permission denied
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack package_x.y.z_x86_64.deb ...
Unpacking package (1:x.y.z) ...
dpkg: error processing archive package_x.y.z_x86_64.deb (--install):
error setting ownership of './usr/bin/application': Operation not permitted
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
package_x.y.z_x86_64.deb

chown顯然,根據包規範將文件發送給正確的使用者是失敗的。

對我來說,下一步可能是與這台機器上的系統管理員交談,看看他們是否可以為我安裝這個軟體,但我想知道是否有什麼我錯過的東西可以讓我擁有自己的本地包安裝根?

不,你沒有錯過任何東西。在這種情況下,您可以做的最好的事情是dpkg-deb提取包的內容,並希望它們能正常工作:

dpkg-deb -x package_x.y.z_x86_64.deb my-private-root

這不會執行包中包含的任何維護者腳本;你可以提取那些使用

dpkg-deb -e package_x.y.z_x86_64.deb my-private-control

允許使用者使用系統的包管理器來安裝軟體,會帶來很多問題,其中一個容易實現的就是依賴關係的維護。即使您要安裝的軟體包的依賴關係今天得到滿足,但當真正的系統管理員進行了一些更改時,它們可能不會在明天得到滿足 - 如果您的安裝阻止他們的工作(沒有多少人會相信),如果您的軟體被解除安裝還是剛剛破碎?

Debian 軟體包只是ar包含兩個 tarball 的 -archives,因此它們應該很容易在任何 unix 系統上提取,但如果您使用的是 Debian(或不刪除它的衍生產品),它更容易使用dpkg-deb,正如 Stephen 在他的回答。請注意,除了在手動提取包內容時不執行維護者腳本之外,不檢查依賴項。檢查依賴關係很簡單(但正如所指出的情況可能會改變),做維護者腳本會做的事情可能很簡單,但也可能很困難。您需要閱讀腳本並弄清楚它們的作用以及如何在有限的環境中進行。

引用自:https://unix.stackexchange.com/questions/370916