首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于蚀刻器、apt和/或dpkg的锁定机制的正式文档在哪里?

关于蚀刻器、apt和/或dpkg的锁定机制的正式文档在哪里?
EN

Unix & Linux用户
提问于 2018-05-12 01:44:06
回答 1查看 293关注 0票数 1

上下文:

想要在特殊备份过程中对蚀刻/apt钩子活动设置一个锁。

目的是保持整个包的完整性,例如,等待任何包安装完成,然后防止新安装开始直到特殊备份完成。

找到cron下面的shell脚本,该脚本似乎试图锁定

代码语言:javascript
复制
/var/cache/etckeeper/packagelist.pre-install

但实际上,它并不是原子化的,因此它是有缺陷的。我认为cron shell脚本是Ubuntu16.04安装的一部分,而不是版本的一部分。Flawed锁代码如下所示。

搜索有关使用/var/cache/etckeeper/packagelist.pre-install作为锁文件的etckeeper文档。没有发现任何文件。但是确实找到了一个脚本文件,它可以写入/var/cache/etckeeper/packagelist.pre-install,而不把它当作锁文件。此时,我假定/var/cache/etckeeper/packagelist.pre-install并不打算用作etckeeper的锁文件接口。Etckeeper内部脚本不处理 /var/cache/etckeeper/packagelist.pre-install as,如下所示。

Question 1:是否有(如果是的话)关于and锁定机制的文档,或者开发人员门户来发出澄清的请求?

在stackexchange站点上有许多关于使用

代码语言:javascript
复制
/var/lib/apt/lists/lock    (we call it apt lock below)

代码语言:javascript
复制
/var/lib/dpkg/lock     (we call it dpkg lock below)

分别作为apt和dpkg的锁。所有的通信都涉及卡住锁,如何诊断它们,以及如何解除它们。但是,我发现没有引用官方的apt和dpkg文档来指定那些作为正式接口使用的锁文件。

Question 2:是否有关于 apt lock机制和/或 dpkg lock机制的文档?

有缺陷的锁尝试shell脚本,可能由Ubuntu 16.04提供:

代码语言:javascript
复制
$ 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内部外壳编写到packagelist.pre-install,而不是将其视为锁-因此,我认为它并不打算作为一个锁接口。

代码语言:javascript
复制
$ 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
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-05-12 06:44:23

  1. cron作业将/var/cache/etckeeper/packagelist.pre-install视为正在处理安装的证据,因此它不应该将任何东西存档。该文件不应该是锁文件,但是cron作业正在使用它作为替代文件。不过,我不会特别担心etckeeper和它有或没有的任何锁文件。如果您想要对etckeeper托管树进行一致的备份,请使用VCS的特性(但不要忘记任何被忽略的文件)。
  2. dpkg锁被记录为frontend.txt (/usr/share/doc/dpkg-dev/frontend.txt in dpkg-dev)中的公共接口(尽管很简短)。
票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/443336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档