關於 etckeeper、apt 和/或 dpkg 的鎖定機制的官方文件在哪裡?
語境:
想要在特殊備份期間鎖定etckeeper/apt掛鉤活動。
目標是保持整個包的完整性,例如,等待任何包安裝完成,然後在特殊備份完成之前阻止新安裝開始。
在cron下發現 shell 腳本似乎試圖鎖定
/var/cache/etckeeper/packagelist.pre-install
但實際上它不是原子執行的,所以它是有缺陷的。我認為cron shell 腳本是Ubuntu 16.04安裝的一部分,而不是etckeeper版本的一部分。 有缺陷的鎖碼如下所示。
搜尋有關用作鎖定文件的etckeeper文件。
/var/cache/etckeeper/packagelist.pre-install
找不到任何文件。但是確實找到了一個腳本文件,它寫入/var/cache/etckeeper/packagelist.pre-install
而不將其視為鎖定文件。此時我假設它/var/cache/etckeeper/packagelist.pre-install
不打算用作etckeeper的鎖定文件介面。 Etckeeper 內部腳本不/var/cache/etckeeper/packagelist.pre-install
視為鎖定文件,如下所示。問題 1:是否有(如果有)關於 etckeeper 鎖定機制的文件,或開發人員門戶網站發出澄清請求?
在stackexchange網站上有很多關於使用
/var/lib/apt/lists/lock (we call it apt lock below)
和
/var/lib/dpkg/lock (we call it dpkg lock below)
分別作為apt和dpkg的鎖。所有的通信都與卡住的鎖有關,如何診斷它們,以及如何解開它們。但是,我發現沒有參考官方apt和dpkg文件指定這些鎖定文件用作正式介面。
問題 2:是否有(如果有)關於apt鎖定機制和/或dpkg鎖定機製作為公共介面的文件?
有缺陷的鎖定嘗試 shell 腳本,可能由Ubuntu 16.04提供:
$ sudo cat /etc/cron.daily/etckeeper #!/bin/sh set -e if [ -x /usr/bin/etckeeper ] && [ -e /etc/etckeeper/etckeeper.conf ]; then . /etc/etckeeper/etckeeper.conf if [ "$AVOID_DAILY_AUTOCOMMITS" != "1" ]; then # avoid autocommit if an install run is in progress lockfile=/var/cache/etckeeper/packagelist.pre-install if [ -e "$lockfile" ] && [ -n "$(find "$lockfile" -mtime +1)" ]; then rm -f "$lockfile" # stale fi if [ ! -e "$lockfile" ]; then AVOID_SPECIAL_FILE_WARNING=1 export AVOID_SPECIAL_FILE_WARNING if etckeeper unclean; then etckeeper commit "daily autocommit" >/dev/null fi fi fi fi
Etckeeper內部 shell scipt 寫入
packagelist.pre-install
而不將其視為鎖 - 因此我不認為它打算用作鎖介面。$ sudo cat /etc/etckeeper/pre-install.d/10packagelist #!/bin/sh # This list will be later used when committing. mkdir -p /var/cache/etckeeper/ etckeeper list-installed > /var/cache/etckeeper/packagelist.pre-install etckeeper list-installed fmt > /var/cache/etckeeper/packagelist.fmt
- cron 作業被
/var/cache/etckeeper/packagelist.pre-install
視為正在處理安裝的證據,因此它不應該立即存檔任何內容。該文件不應該是鎖定文件,但 cron 作業正在使用它作為替代文件。但是我不會特別擔心
etckeeper
它擁有或沒有的任何鎖定文件。如果您想要託管樹的一致備份etckeeper
,請使用 VCS 的功能(但不要忘記任何被忽略的文件)。 2. 這些dpkg
鎖在frontend.txt
(/usr/share/doc/dpkg-dev/frontend.txt
indpkg-dev
)中被記錄為(雖然是簡短的)公共介面。