如何自动将 *dpkg-reconfigure dash* 设置为 bash

如何自动将 *dpkg-reconfigure dash* 设置为 bash

我想从 ubuntu 镜像构建一个 docker 镜像。需要手动将默认 sh 从 dash 更改为 bash。(因为它需要安装许多包含 bash 脚本的 rpm 包)

dpkg-reconfigure dash

有没有什么方法可以让这个动作自动进行而无需人工操作?

在我的 Dockerfile 中它可能写为(方法 1)

RUN dpkg-reconfigure dash

我尝试了另一种方法(方法 2)

RUN ln -sf bash /bin/sh

但,这两种方法都行不通。

答案1

你可以让 debconf 只询问高级或关键的问题[1]。

前任:

dpkg-reconfigure -p critical dash

dpkg-reconfigure 会使用 debconf 脚本中定义的默认答案。你也可以使用 debconf-get-selections 为非交互式安装选择不同的答案[2]。

  1. https://wiki.debian.org/debconf
  2. http://blog.nutsfactory.net/2008/03/06/noninteractive-dpkg-installation-on-debian-system/

答案2

将 Daniel 的评论粘贴在这里作为答案,因为它不依赖于 的默认设置dpkg-reconfigure

获取选项:

debconf-show dash

要将此特定选项设置为false

echo "dash dash/sh boolean false" | debconf-set-selections

并实际重新配置包:

DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash

这对我来说在 Dockerfile 中是有效的:

# make /bin/sh symlink to bash instead of dash:
RUN echo "dash dash/sh boolean false" | debconf-set-selections
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash

答案3

通过反复试验和其他人的帮助下,这个 ansible 语句做了同样的事情:

# See "/var/cache/debconf/config.dat" for name of config item after changing manually
- name: aws-ssm ansible plugin fails if dash is the default shell
  ansible.builtin.debconf:
    name: dash/sh
    question: dash/sh
    value: false
    vtype: boolean

答案4

您应该修补这些脚本以使用#!/bin/bash而不是#!/bin/sh。较新版本的 Debian 和 Ubuntu 不再支持使用除 dash 之外的任何其他内容/bin/sh

相关内容