Apt

關於 etckeeper、apt 和/或 dpkg 的鎖定機制的官方文件在哪裡?

  • May 12, 2018

語境:

想要在特殊備份期間鎖定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)

分別作為aptdpkg的鎖。所有的通信都與卡住的鎖有關,如何診斷它們,以及如何解開它們。但是,我發現沒有參考官方aptdpkg文件指定這些鎖定文件用作正式介面。

問題 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
  1. cron 作業被/var/cache/etckeeper/packagelist.pre-install視為正在處理安裝的證據,因此它不應該立即存檔任何內容。該文件不應該是鎖定文件,但 cron 作業正在使用它作為替代文件。

但是我不會特別擔心etckeeper它擁有或沒有的任何鎖定文件。如果您想要託管樹的一致備份etckeeper,請使用 VCS 的功能(但不要忘記任何被忽略的文件)。 2. 這些dpkg鎖在frontend.txt/usr/share/doc/dpkg-dev/frontend.txtin dpkg-dev)中被記錄為(雖然是簡短的)公共介面。

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