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
    • 最新
    • 标签
主页 / user-272806

Marco Bonelli's questions

Martin Hope
Marco Bonelli
Asked: 2019-01-06 10:13:09 +0800 CST

检测特定软件包是否安装在 apt-get hook 中的更简洁方法?

  • 6

我有一个简单的脚本,可以将补丁应用于给定的包,并且由于每次升级所述包时,补丁都会被覆盖,我真的很想在每次升级后自动应用补丁。

为此,我在其中创建了一个文件/etc/apt/apt.conf.d/并为DPkg::Post-Invoke. 正如 所记录的man apt-get,这个钩子是apt-get在安装一个带有dpkg. 然而,这个钩子似乎没有任何关于安装了哪个特定包的信息,所以我不知道我是否必须应用补丁。没有任何东西传递给它的标准输入,没有任何东西作为参数传递,并且手册页没有说明它。

所以为了解决这个问题,我做了我唯一能想到的事情:我添加了另一个钩子DPkg::Pre-Install-Pkgs,它在安装包apt-get 之前运行。这个钩子(通过标准输入)获取.deb将由. 当我的另一个钩子被执行时,它首先检查所述文件是否存在,如果存在,则将补丁应用于刚刚安装的包。dpkg/tmp

这是我在其中创建的文件/etc/apt/apt.conf.d/:

DPkg::Pre-Install-Pkgs {
    "while read -r pkg; do case $pkg in *somepkg*) touch /tmp/.patch && exit 0; esac done < /dev/stdin";
};

DPkg::Post-Invoke {
    "[ -f /tmp/.patch ] && /home/marco/scripts/apply_somepkg_patch.sh && rm -f /tmp/.patch; exit 0";
};

需要明确的是:apply_somepkg_patch.sh只需编辑包提供的文件的内容。我希望每次都升级和修补所说的文件,我不想“锁定”它所以它不会升级。

现在,虽然这一切都很好,但它看起来真的很脏,而且对我来说有点不对劲。有没有更清洁的方法来做到这一点?也许只使用DPkg::Post-Invoke钩子?或者,换句话说,有没有办法知道DPkg::Post-Invoke钩子中安装了哪个包?


编辑:添加我正在做的事情的详细示例只是为了 101% 清楚,即使我认为它不会为我上面所说的内容添加更多信息。

假设somepkg是我正在谈论的包,并且somefile是我要修补的此类包安装的文件。

  1. 第一次安装somepkg,内容somefile:

    some_opt1 = some_value
    some_opt2 = some_value
    some_opt3 = a, b, c, d
    some_opt4 = some_value
    
  2. 应用补丁,将其更改为:

    some_opt1 = some_value
    some_opt2 = some_value
    some_opt3 = X, Y, Z, d
    some_opt4 = some_value
    
  3. 升级后的somepkg内容somefile:

    some_opt1 = some_value
    some_opt2 = some_value
    some_opt5 = some_value
    some_opt3 = a, b, c, d
    some_opt6 = some_value
    some_opt4 = some_value
    
  4. 应用补丁,将其更改为:

    some_opt1 = some_value
    some_opt2 = some_value
    some_opt5 = some_value
    some_opt3 = X, Y, Z, d
    some_opt6 = some_value
    some_opt4 = some_value
    

现在,是什么somepackage,在哪里somefile,里面是什么somefile:这与我的问题完全无关。你需要知道的是,我想在得到文件的升级版本后somefile,动态修改其中的一部分somepkg内容。

这显然不能静态完成:我需要一个脚本来读取somefile、解析其内容并相应地对其进行修补。因此,如果我希望我的脚本在每次somepkg更新时自动运行,我需要apt-get为我自动运行它。

dpkg apt
  • 1 个回答
  • 685 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 5 个回答
  • Marko Smith

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

    • 3 个回答
  • 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
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +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

热门标签

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