![如何在 Arch Linux 上負責任地自動執行更新?](https://rvso.com/image/38695/%E5%A6%82%E4%BD%95%E5%9C%A8%20Arch%20Linux%20%E4%B8%8A%E8%B2%A0%E8%B2%AC%E4%BB%BB%E5%9C%B0%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我是 Arch Linux 的新手,仍在適應它的一些範例。我從另一個發行版中繼承了很多習慣,該發行版更加結構化並且在某些方面是可預測的。
我想對一些系統做的一件事是啟用 cron 作業來自動更新所有系統軟體包。這似乎很容易,但我也希望系統提供一些有意義的回饋,告訴我事情進展如何,但不要太冗長,以至於我最終會忽略它,直到我發現系統出現問題。
- 的完整輸出
pacman
是不必要的。我不在乎下載花了多長時間,也不關心它是在更新 53 的 46 上。 - 大多數情況下,我並不在乎成功。
- 我確實關心錯誤。如果更新運行失敗,我想了解它,並且應該修補任何特定的錯誤訊息。
我確實關心安裝過程中發出的“通知”。例如今天的 systemd 更新說:
:: coredumps are no longer sent to the journal by default. To re-enable: echo >/etc/sysctl.d/50-coredump.conf \ "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"
或者檔案系統產生了這個:
warning: /etc/group installed as /etc/group.pacnew warning: /etc/passwd installed as /etc/passwd.pacnew warning: /etc/shadow installed as /etc/shadow.pacnew
最後一個類別實際上促使我提出這個問題,因為看起來這些在整個軟體包集中非常不一致。其中一些似乎是由 生成的
post_upgrade()
,其他是由 生成的install()
,等等。訊息的格式差異很大:有時整個區塊以某種方式以縮排為前綴,其他時候只有一個裸露的回顯字串。
我想了解可能需要我對系統進行幹預但又不被打擾的事情。是否有一種工具可以智慧地管理這些數據並簡化系統管理?有什麼方法可以將軟體包產生的輸出與安裝它們的 pacman 進程分開?或者我自己寫某種解析器來過濾掉安裝日誌中的良性內容?
1 在您跳過這有多愚蠢之前,請注意,我很聰明,不會在生產伺服器上執行此操作,並且如果沒有基於快照的完整系統備份,可以在發生災難時輕鬆恢復。
答案1
我想向您和任何其他可能遇到此問題的人澄清。你想做的是不是可能的。 Arch 毫不掩飾它所期望的事實你管理您的系統。該責任的一部分是在更新周期中存在。
現在,有腳步您可以負責任地實現更新流程的自動化,但它永遠不會達到自動化的-Syu
。您只需要在那裡進行升級。
例如,您可以做的是設定一個cron
作業來下載任何需要安裝的軟體包(但不要安裝它們)。以下是pacman
文件的摘錄:
SYNC OPTIONS ... -w --downloadonly Retrieve all packages from the server, but do not install/upgrade anything.
然後,您可以設定一個cron
作業來運行sudo pacman -Syuw
。我不太熟悉cron
它的調度能力。但是,如果它只能在滿足特定條件(例如,命令返回特定值)後運行作業,那麼根據需要觸發新套件的下載將是相當簡單的。
checkupdates | wc -l
例如,我會想像對 進行檢查。如果它傳回任何大於零的數字,您就可以觸發下載。不過,這並不能取代-Syu
您在場並準備好處理升級時運行 an 。
對於問題的最後一部分,即在哪裡獲取升級期間發生的情況的輸出,您正在尋找/var/log/pacman.log
.它包括您可能感興趣的所有錯誤訊息。
有一個工具這是為了讓pacman
不熟悉的用戶更友善。如果我沒記錯的話,如果有需要手動幹預的更新,它還會提供有關新聞項目的通知。
從短期來看,這個工具可能會讓您的生活變得更簡單,但它永遠無法取代明智而勤奮地遵循郵件清單。
答案2
有一個舊腳本做得非常好;它被稱為安全包裝。
編輯:這個腳本仍然可以在 github 上找到: https://github.com/bencahill/binfiles/blob/master/safepac
它有什麼作用以及如何運作?
我通常更新 Arch 的方式是看新聞然後做
pacman -Syu
,或者只是做pacman -Syu
,如果出了什麼問題,再看新聞。現在這個腳本什麼都不做:它從 RSS 來源獲取最新的新聞條目,執行一些sed
魔法,並比較所有具有可用新聞更新的套件的名稱。它匹配新聞中的“package-name”和“package-name-”,如果包名稱出現在新聞中的某個位置,它將忽略該包,只更新所有其他包。這樣,任何可能出錯的事情都將被推遲,直到有時間手動檢查問題為止,而非關鍵更新將自動完成!通常,一旦您處理了可能不順利的更新,您將不希望
safepac
仍然忽略某個軟體包,因為它仍然在新聞中。這就是忽略清單的用途。因此,每次手動更新時,您都可以使用 將相應的新聞條目新增至忽略清單中,其中safepac -Ia xxx
xxx
是新聞條目的編號。您也可以使用該開關指定要在其解析中包含的最新新聞的數量-n
。該腳本還足夠智能,可以跳過不存在的條目。如果您遇到名稱非常短的軟體包的問題,這些軟體包可能會任意出現在新聞中(例如“yes”),您可以將它們添加到白名單中,這樣safepac -Wa
即使它們出現在新聞中,它們也將始終被安裝。
請注意,您需要一個有效的郵件設置,因為此腳本也會向您發送摘要郵件(帶有完整日誌?)以及更新的重要部分:
解析
pacman
輸出以尋找這些單字並將其新增至摘要:
“note”“pacnew”“error”“important”“warning”“exists”。
該腳本很舊,但想法很好,並且可能仍然可以在較小的更新(如果有)下使用。
答案3
我用我自己的直到yaourt
由 cron運行。