協助應用打包不良的更新檔?
我管理著幾台執行亞勢線上備份解決方案各種角色的伺服器。
軟體每年更新幾次,我需要在我的伺服器上應用更新檔。
令人煩惱的是,這些更新檔的打包/分發相當糟糕,所以如果想要使用 yum 安裝/更新伺服器,所有的事情都是手動處理的。
第一次安裝伺服器相當簡單,將歸檔文件解壓到 /usr/local 並執行 install.sh(創建 init-scripts 等)。
然而,在那之後,管理層開始變得煩人。要進行設置更改和重新命名伺服器,您需要更改啟動腳本和構成伺服器的實際 xml 文件。
如果不是因為每次發布新更新檔時都會附帶這些文件的庫存版本和覆蓋自定義文件的說明,這本身就不是什麼大問題。
在多個伺服器上的每次更新中重寫文件自然是一件很麻煩的事情。
所以我發現自己正在校對更新檔中的大部分文件,挑選那些我認為包含實際更新的文件,然後只更新那些。
現在,它不是數十億個文件,只是足以令人討厭。最新更新檔:
# find . -type f ./webapps/rdr/jsp/lib/common.js ./webapps/rdr/WEB-INF/lib/rdr.jar ./webapps/rdr/WEB-INF/web.xml ./webapps/rdr/WEB-INF/struts-config.xml ./webapps/obs/WEB-INF/lib/rdr.jar ./webapps/obs/WEB-INF/web.xml ./webapps/obs/WEB-INF/struts-config.xml ./tomcat/lib/libFileSysUtilObdX86.so ./tomcat/lib/libFileSysUtilFbdX64.so ./tomcat/lib/libFileSysUtilObdX64.so ./tomcat/lib/mail.jar ./tomcat/lib/libFileSysUtilSosSp9.so ./tomcat/lib/libFileSysUtilFbdX86.so ./tomcat/lib/libFileSysUtilLinX64.so ./tomcat/lib/libFileSysUtilLinSpc.so ./tomcat/lib/libFileSysUtilSosX86.so ./tomcat/lib/libFileSysUtilLinPpc.so ./tomcat/lib/libFileSysUtilLinArm.so ./tomcat/lib/libFileSysUtilLinP64.so ./tomcat/lib/libFileSysUtilLinX86.so ./tomcat/lib/libFileSysUtilSosX64.so ./tomcat/lib/libFileSysUtilSosSpc.so ./tomcat/lib/ani.jar ./bin/startup.sh ./bin/shutdown.sh
執行以下操作,我設法更容易地發現文本差異:
for NEW in `find . | xargs file | grep text | sed 's/:.*$//' | xargs` do OLD=`echo $NEW | sed 's!^\.!/usr/local/rdr!'` echo -e "$NEW \t\treplaces $OLD" diff $OLD $NEW done
在這個最新的更新檔中,沒有任何文本文件的更新(我可以辨識)。這意味著我可以用rm $NEW替換****差異。
之後,我對所有文件進行了比較,而不僅僅是文本文件:
# for NEW in `find . -type f | xargs`; do OLD=`echo $NEW | sed 's!^\.!/usr/local/rdr!'`; diff $NEW $OLD; done Binary files ./webapps/rdr/WEB-INF/lib/rdr.jar and /usr/local/rdr/webapps/rdr/WEB-INF/lib/rdr.jar differ Binary files ./webapps/obs/WEB-INF/lib/rdr.jar and /usr/local/rdr/webapps/obs/WEB-INF/lib/rdr.jar differ Binary files ./tomcat/lib/mail.jar and /usr/local/rdr/tomcat/lib/mail.jar differ Binary files ./tomcat/lib/libFileSysUtilSosX64.so and /usr/local/rdr/tomcat/lib/libFileSysUtilSosX64.so differ Binary files ./tomcat/lib/ani.jar and /usr/local/rdr/tomcat/lib/ani.jar differ
給出 5 個(共 25 個)的列表,我實際上需要更改。
這似乎是包維護者一直在處理的那種令人頭疼的問題,有什麼方法可以讓這個過程不那麼麻煩嗎?
我的伺服器(如果有什麼不同的話)正在執行 CentOS 6.5。
從您的描述來看,您獲得的不是更新檔,而是文件的更新版本。您可以做的是將軟體的普通安裝中的文本文件
~/sw_current
與~/sw_new
. 每次獲得更新時,都應該~/sw_new
通過盲目複製文件並生成真正的diff
更新檔來應用它:diff -rupN ~/sw_current/ ~/sw_new/ > update.patch
這將生成帶有說明更新哪些文件中的哪些行的更新檔,同時保持其余文件完好無損。然後應將此更新檔應用於您的實際安裝:
cd /path/to/software patch < update.patch
請注意,如果您手動更改了系統上的特定文本行,然後該行得到更新,則應用更新檔將產生衝突,您必須手動解決。
應用更新後,不要忘記刪除您的 vanilla
~/sw_current
目錄並將內容複製~/sw_new
到~/sw_current
.關於隨更新提供的二進製文件,您可以將它們複製到所有機器上覆蓋原始文件,因為我想您永遠不會修改二進製文件。