
情境:
我正在嘗試將.deb
包轉換為.rpm
使用外星人,我使用這個命令:
$ alien -r foo.deb
但它這樣抱怨:
> Warning: alien is not running as root!
> Warning: Ownerships of files in the generated packages will probably be wrong.
我認為所有alien
需要root
的是保證它有權為輸出創建foo.deb
'sroot
擁有的文件foo.rpm
,但我不確定。
問題:
- 包總是需要一些
root
- 擁有的文件嗎? - 為什麼他們需要
root
- 擁有的文件? - 如果我錯了,為什麼
alien
需要root
?
答案1
使用假根。外星人不需要 root 來操作某些位元。 fakeroot 手冊頁中的一行描述充分總結了這一點:
在偽造 root 權限的環境中執行命令以進行檔案操作
因此,fakeroot 是一個程序,它使相關命令相信它正在以 root 身份運行,並且檔案權限在應有的位置設定為 root 權限。有關詳細信息,請參閱man fakeroot
。
不幸的是,您收到的錯誤訊息具有誤導性。
簡而言之,做
fakeroot alien ...
這是一份錯誤報告,其中 Alien 的作者 Joey Hess 討論了使用 fakeroot 的必要性。可能不是最好的連結。如果我找到更好的東西,我會發布它。
答案2
因為更改檔案的所有權需要「root」權限;並不是因為這些文件必須由「root」擁有——儘管很多文件都是如此。
在您的主目錄中建立一個檔案並嘗試更改其所有者:-
touch test.txt
ls -l test.txt
-rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt
chown nobody. test.txt
chown: changing ownership of ‘test.txt’: Operation not permitted
儘管我擁有該文件並擁有rw
權限,但我無法更改所有者。
sudo chown nobody. test.txt
ls -l test.txt
-rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt
但使用 root 身分運行它是sudo
可行的。
正如警告所述;所有權將是錯誤的。由此,我們可以假設alien
更改了某些文件的所有權。
系統檔案通常由具有限制性權限的“root”擁有,因此像您我這樣的使用者不會更改或刪除它們。
系統上還有其他使用者和群組,但與「root」不同,它們在各個發行版中並不相同。例如,在 Fedora(以及 RedHat 和 CentOS)下,Apache
網路伺服器運行apache
並且資料檔案由該使用者擁有。另一方面,我相信它在 Debian/Ubuntu 系統上Apache
運行www-data
,因此資料檔案歸該使用者所有。這意味著alien
在轉換時需要更改檔案的擁有者,並且要執行此操作,如上例所示,它需要以「root」身分執行。
答案3
Rpm 和 deb 軟體包包含要安裝的檔案的存檔(CPIO在 rpm 的情況下存檔,柏油在 deb 的情況下)。這些檔案包含有關每個文件的元數據,包括其名稱、修改日期、所屬使用者和群組以及權限。安裝軟體包後,每個檔案最終都具有存檔中描述的所有權(除非安裝後腳本對其進行修改)。
大多數由軟體包安裝的檔案都歸 root 所有,因為沒有使用者被授權修改它們。
Alien 透過解壓縮存檔並重新打包來轉換軟體套件(以及轉換安裝前/安裝後腳本等其他操作)。例如,要將 rpm 轉換為 deb,alien 呼叫cpio
將檔案提取到臨時位置,然後tar
建立新的檔案。如果解壓縮不是使用 root 權限完成的,那麼所有臨時檔案將歸進行解壓縮的使用者所有,因此當檔案打包到新檔案中時,它們最終將歸該使用者所有。
Alien 實際上不需要以 root 身分執行,因為它不需要修改系統中的任何內容。假根在該命令接收有關檔案系統操作的虛假資訊的環境中執行外星人(或任何其他命令),假裝通常需要 root 的操作(例如更改檔案擁有權)已成功。這樣,解包將以 root 身分完成,並設定正確的檔案擁有權(就alien
其子進程而言),因此重新打包會建立預期的存檔。