傑夫約翰遜是絕對正確的,它應該不能完成。但它當然可以做到。
我已經在RPM中完成了這項工作,但是請注意,這是一個包含半結構化環境,其中包含所有系統的遠程維護。 如果您有遠程訪問權限,請執行「刪除,安裝」路徑並編寫腳本。
如果你真的覺得你應該這樣做,那麼這些都是指針。我不會告訴你我是如何做到的,因爲這是「工作」,而不是我的分享。這些概念是我的:-)
首先,備份/ var/lib/rpm/Packages文件(cp /var/lib/rpm/Packages /var/tmp/Packages.bkp
)。把它放一些安全。如果有人在您的解決方案中工作時更換系統,請更新您的備份。定期檢查RPM的次數,並在每次更改或步驟後從星期天開始每一次測試。
您將需要使用db_unload和db_load命令。爲了提高速度,您需要使用「s2p」將任何shell sed模式轉換爲perl。然後建立一個管道,看起來像這樣:
db_unload /var/tmp/Packages.bkp |perl -i -e "s2p converted string" |db_load /var/tmp/Packages.new
然後,您可以嘗試通過在原來的OT複製到測試Packages.new。手動更改後,始終運行rpm --rebuilddb。如果您看到任何錯誤,請恢復備份並再次重建數據庫。
如果您需要將它放入RPM中,請將其轉換爲Lua,並將其放入pretrans或posttrans scriptlet(%pretrans -p <lua>
)中。選擇取決於您嘗試實現的順序。 Lua解釋器內置於rpm,所以即使您的RPM被某種方式調用,在新系統安裝過程中它也會運行正常。我用lua long字符串將我的「管道」包裹起來,並且只在系統已經存在時才執行。它不做任何事情。如果你在想「那永遠不會發生」,那麼看看「永不言敗」。
順便說一句,如果你搞砸了,你可以完全僵化你的RPM基礎,從而管理系統的未來。如果你這樣做,並且沒有備份或出路,那麼知道你對自己的行爲負責是一個很難的方法。只是說你已經受到警告!