2010-10-15 20 views
0

我知道還有其他應用程序,但考慮yum/apt-get/aptitude/pacman是您的Linux發行版的核心軟件包管理器。有關如何在Linux庫管理器更新自己的設計原則?

今天我看到在我的Fedora 13中:

(7/7): yum-3.2.28-4.fc13_3.2.28-5.fc13.noarch.drpm  | 42 kB  00:00  

我開始懷疑如何這樣的包更新自己?需要哪些設計來確保程序可以自行更新?

也許這個問題太籠統了,但我覺得SO比程序員更合適。對於這樣一個問題,本質上它更具技術性。如果有更適合這個問題的地方,請隨時通知我,我可以關閉或者主持人可以移動。

謝謝。

回答

1

我不知道這些特定的系統是如何工作的,但是......

  • 現代UNIX系統一般會容忍重寫可執行文件運行沒有打嗝,所以理論上你可以只做到這一點。
  • 你可以在chroot監獄裏做,然後移動或類似的東西來減少系統脆弱的時間。添加一個日誌文件系統,這樣更安全一些。

在我看來,軟件包管理器需要在內存中保存軟件包訪問數據庫,以確保不存在競爭條件。再次,chroot監獄和複製選項可作爲一個較低風險的選擇。

+0

覆蓋的容忍度是否與文件沒有運行有關,但運行的文件的副本是否正確,因此覆蓋副本沒有問題,因爲當程序退出時,下一次運行會運行一個更新的副本嗎? – Chris 2010-10-15 18:28:42

+0

@Chris:呃...是的。我認爲,linux特別使用了「更新標記和複製」策略,因此除非一個「版本」或另一個版本發生更改,否則不會進行實際複製。但是,我不確定我的主張是否與過去相去甚遠。編輯。 – dmckee 2010-10-15 18:34:26

0

我開始懷疑這樣的軟件包是如何自我更新的?需要什麼 設計來確保程序可以自行更新?

這就像很多東西,你不需要專門設計來解決這個問題......但你需要知道某些「陷阱」。

例如,Unix可以通過引用計數inode來幫助您,因此「您」可以刪除您仍在使用的文件,並且沒關係。然而,這意味着你需要做的一些事情,例如,如果你有插件,那麼你需要全部加載之前你運行開始一個事務...即使插件只會在事務結束時運行(因爲最後你可能會有不同的版本)。

您還需要做一些事情來確保您正在更新的任何工作,比如:在刪除舊文件之前關閉新文件。不要截斷舊文件,只需取消鏈接。但那些也幫助你:)。使用與之通信的外部問題可能會非常棘手(因爲在更新後無法執行舊版本的新副本)。但是這通常不會完成,而當它是用於下載等任何更新之前可能會輕易發生的事情。

還有一些東西是不是在cmd行客戶喜歡關注百勝/易,例如,如果你有打算運行2+「更新」程序,那麼你可能會有問題,如果在第一次更新是給包管理員的。降級讓這更好玩:)。 像過程一樣的守護進程也應該基本上不會「加載」程序包管理器,但與其他陷阱一樣...無論如何,你往往想要遵循這一點,其他原因。