Yum

執行 createrepo 時執行 yum update 會導致競爭情況嗎?

  • March 1, 2021

我們的團隊有一個本地託管的 yum 儲存庫。在我們的建構過程結束時,Jenkins:

  • 創建一個新的 RPM
  • 將新的 RPM 移動到包含 rpm 的 yum 伺服器目錄
  • 在我們的 yum 儲存庫上執行 createrepo

如果有人yum update在上述任何步驟中執行,會發生什麼?進一步來說:

  • 如果在 createrepo 更新 repo 時執行 yum update 會發生什麼?
  • 如果 yum update 在舊版本的 RPM 上執行,但 createrepo 刪除並添加了新的 RPM 版本,會發生什麼?

我很感激任何幫助。謝謝!

不,不是競爭條件,而是由於數據不一致導致的客戶端錯誤。

儲存庫有一個文件,其中包含其中包含的項目/包的列表。該文件在儲存庫創建/更新結束時創建/更新。

如果客戶端在寫入內容時打開 repo 並讀取內容文件,他們yum將因錯誤而退出。

如果未寫入文件但您正在更改 repo 內容,則數據可能不一致。客戶端將yum退出,因為內容文件中的文件引用不可讀。

如果您希望最大限度地減少問題,您可以處理 repo 的副本(取決於其大小);

# rm -fr newrepo oldrepo
# rsync -ua repo/ newrepo/
# cd newrepo
(then update this copy or the repository)
# cd ..
# mv repo oldrepo; mv newrepo repo
# rm -fr oldrepo

這將縮短轉換時間,儘管它不會完全避免客戶端錯誤。

引用自:https://unix.stackexchange.com/questions/637027