AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 443336
Accepted
Craig  Hicks
Craig Hicks
Asked: 2018-05-12 17:44:06 +0800 CST2018-05-12 17:44:06 +0800 CST 2018-05-12 17:44:06 +0800 CST

关于 etckeeper、apt 和/或 dpkg 的锁定机制的官方文档在哪里?

  • 772

语境:

想要在特殊备份期间锁定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
dpkg apt
  • 1 1 个回答
  • 208 Views

1 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2018-05-12T22:44:23+08:002018-05-12T22:44:23+08:00
    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)中。

    • 3

相关问题

  • 在发行版的不同版本中混合软件时要寻找什么?

  • 了解 apt 列表输出

  • 尝试安装 debian 软件包 npm,使 apt-get 删除 libssl-dev

  • 如何下载软件包而不是使用 apt-get 命令安装它?

  • /etc/apt/sources.list.d 比 /etc/apt/sources.list 有什么好处

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve