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 / 问题 / 739201
Accepted
aphid
aphid
Asked: 2023-03-09 22:56:52 +0800 CST2023-03-09 22:56:52 +0800 CST 2023-03-09 22:56:52 +0800 CST

不一致的配置文件修改屏幕背后的动机或原因是什么?

  • 772

通过在不同主机上更新 debian 操作系统 ( apt-get dist-upgrade),我看到了同一屏幕的许多微小变化;当配置文件被修改时,它会告诉你有新版本可用,并要求你修复问题:你修改了文件并且 apt/dpkg 不能可靠地将你的更改与新版本集成。

现在这个选项菜单在各种文件之间是不同的。有时甚至在同一个包内。

一些文件将具有“包配置”控制台 UI,其他文件将使用普通控制台输出。包配置 UI 中可用的选项并不总是相同的。

修改/新版本文件的名称并不总是相同的。新文件的存储位置并不总是它应该在的位置(有时它在'tmp'中)。新文件的命名方案也不一致(一些软件包使用随机名称,一些使用 -new,其他的 -dpkg-new,等等。)

有些软件包拒绝告诉您 dpkg 默认值在哪里。有些软件包不为您提供带有扩展名 dpkg-old 或 -old 或 -dist 或 -dpkg-dist 或 -old-nameofpackage 的先前版本,但其他软件包提供。(所以在某些情况下你可以手动进行 3 向合并,在其他情况下你不能)。一些软件包添加了一个方便的“在版本之间进行 3 种方式合并”(这总是我尝试的第一件事,因为它通常可以自动解决问题:配置文件中的大多数更改通常只是注释中的拼写错误修复。

显示的程序或方式并排差异也可能因包/文件而异。

所以我认为包管理系统的全部目的是创建一种安装和卸载程序的一致方式。便于用户管理。

这里出了什么问题;为什么它的 UI/UX如此可怕?用户至少可以做些什么来更改/修改apt

  • “进行三向合并”可用
  • 新文件总是以一致的方式重命名/放置?

由于在归结为相同的死记硬背过程时做同样的事情有 1,000 种微小的变化,因此必须手动重新阅读并弄清楚如何手动处理每个配置文件是很痛苦的。

为了说明我的意思,这里有两个来自升级;


Configuration file '/etc/ssh/ssh_config'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
 
 A new version (/tmp/tmp.3RoEfdEm3M) of configuration file /etc/ssh/sshd_config is available, but the version installed currently has been locally modified.  
                                                                                                                                                              
 What do you want to do about modified configuration file sshd_config?                                                                                        
                                                                                                                                                              
                                                     install the package maintainer's version                                                                 
                                                     keep the local version currently installed                                                               
                                                     show the differences between the versions                                                                
                                                     show a side-by-side difference between the versions                                                      
                                                     show a 3-way difference between available versions                                                       
                                                     do a 3-way merge between available versions                                                              
                                                     start a new shell to examine the situation 

第二种变体中的那些选项?他们并不总是按照那个顺序在那里。

感觉就像这只是为了绊倒你。

debian
  • 2 2 个回答
  • 31 Views

2 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2023-03-10T00:25:50+08:002023-03-10T00:25:50+08:00

    我将首先解决您问题中“面向用户”的问题:

    “做一个三向合并”是可用的

    这不能由用户控制,这取决于包如何管理其配置文件(见下文)。

    新文件总是以一致的方式重命名/放置?

    不,但在实践中应该无关紧要。特别是,例如第二个示例(第sshd_config一个)中显示的临时文件确实是临时文件:它们是可用的配置文件的变体,以便比较工具等可以找到它们需要比较的数据。(这里可以通过默认不显示临时文件名来改善用户体验,只有在用户启动 shell“检查情况”时才显示它)。

    至于为什么会出现这种情况,具体在 Debian 中,这是因为配置文件可以通过多种方式处理。

    正如您所期望的,包管理器dpkg提供了自己的配置文件管理。这就是在您的示例(升级)中产生第一个变体的原因ssh_config。它只有两条信息可以使用:当前存在于磁盘上的配置文件,以及它试图安装的包中提供的新配置文件。因此,它无法提供三向合并。对于包维护者来说,它使用起来非常简单(事实上,在大多数情况下,它根本不需要任何工作)。dpkg的配置文件处理会在事后生成一致的文件名:文件以 结尾.dpkg-dist并.dpkg-old取决于用户是否保留现有文件(在这种情况下,保留新文件供以后参考,.dpkg-dist扩展名)或安装新文件(在这种情况下,旧文件与扩展名一起保留.dpkg-old)。

    为了改善这种情况,开发了该ucf工具。它存储配置文件的原始版本,这就是它可以提供三向比较和合并的原因。然而,它需要包维护者的一些工作,这就是为什么许多包不使用它的原因。此外,对三向合并的支持是可选的。您可以在此处查看openssh-server集成ucf。

    除此之外,还有debconfDebian 配置管理系统。这是在安装过程中需要交互的包应该使用的,但是同样,这需要包维护者的工作,所以虽然现在很常见,但仍然有一些例外(包括尚未更新使用的非常旧的包debconf).

    当然,一些维护者不喜欢上面的任何一个,或者在上面的一些可用之前开发了他们自己的解决方案,所以一些包做他们自己的事情。

    Joey Hess 写了他从 1999 年开始参与 Debian 的 VA Linux box set,它提供了一些关于包配置的创建debconf和修改的上下文。

    • 2
  2. aphid
    2023-03-10T17:41:57+08:002023-03-10T17:41:57+08:00

    在进行任何更新之前,首先安装distro-info,否则在无法访问 Web 浏览器的情况下从 CLI 查找以前的版本名称是很棘手的。

    命令:

    diff3 -m config.file config.file.dpkg-old config.file.dpkg-new > config.file.merged
    diff config.file config.file.merged
    

    然后编辑,或者,如果合并有效:

    mv config.file.merged config.file

    是一种做 debconf/ucf 手动做的同样事情的方法。

    这只会留下不通知用户他们将旧/新配置文件留在何处的软件包。要从旧版本的软件包下载丢失的配置文件,在升级过程进行到一半时,您可以安装一个完整的独立系统并在其中安装软件包。或者,您可以通过浏览器手动下载它,将其 ftp 到 linux 机器。但是,如果必须在升级机器的命令行上完成,事情就会变得有点复杂。

    这是我到目前为止所得到的。还有一件未实现的事情: GETPACKAGERELEASEVER--> 哪个版本的包是“buster”的一部分?我如何打印这个?另外,如何获得它是'main'还是'contrib'?

    (这部分的相关问题;如何从 cli 检查给定分发版本的包版本?)

    # Todo: Look this up in some way using apt. (main, non-free, or contrib).
    pkgType=main
    previousReleaseName = $(distro-info -o)
    # If not possible to use distro-info: 
    # This is rather hacky, and will fail when debian updates this webpage.
    # release=$(cat /etc/issue | sed -E 's/[^0-9]*([0-9]+).*/\1/')
    # previousRelease=$(($release-1))
    # wget -O- https://www.debian.org/releases/  > releases.html
    # previousReleaseName = $(cat releases.html | grep "Debian $previousRelease" | sed -E 's/.*Debian [0-9]+ \(<q>([a-z]+).*/\1/'))
    
    firstLetter="$(echo $packagename | head -c 1)"
    packageVersion=GETPACKAGERELEASEVER($packagename,$previousReleaseName)
    mkdir /tmp/$packagename/
    cd /tmp/$packagename
    rm -r /tmp/$packagename/*
    wget -O package.deb "https://deb.debian.org/pool/$pkgType/${firstLetter}/${packageName}/${packagename}_${packageVersion}_amd64.deb" 
    ar x package.deb
    tar -xvf data.tar.xz
    
    diff3 -m /etc/$packagename/$configfile /tmp/$packagename/etc/$configfile /etc/$packagename/$newconfigfile > /etc/$packagename/$configfile.merged` 
    
    
    • 0

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

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