是否可以停止 dpkg-reconfigure 重新启动服务

是否可以停止 dpkg-reconfigure 重新启动服务

我正在为基于 Debian 的系统构建安装密钥。安装密钥基本上将磁盘映像复制到系统上,然后在 chroot 中安装一些在构建过程中复制到安装密钥上的软件包。

安装密钥所做的一件事是擦除现有的 ssh 密钥(这样我们就不会创建一堆“相同”的 ssh 服务器)。为了尝试坚持使用 debian 的做事方式,我运行 dpkg-reconfigure openssh-server 来重新生成密钥,但在重新配置结束时,它会尝试重新启动服务器,而该服务器当然不会在安装密钥 chroot 中运行。

是否可以告诉 debconf 重新配置但不重新启动服务?

答案1

您所问的不是 debconf 或 dpkg-reconfigure 的直接功能。如果您下载 openssh-server 的 .deb 并从 control.tar.gz 中提取文件,您将看到“postinst”脚本执行了invoke-rc.d 或 /etc/init.d/ssh:

第 418 行:

setup_init() {
  if [ -x /etc/init.d/ssh ]; then
    update-rc.d ssh start 16 2 3 4 5 . stop 84 1 . >/dev/null
    if [ -x /usr/sbin/invoke-rc.d ]; then
      invoke-rc.d ssh restart
    else
      /etc/init.d/ssh restart
    fi
  fi
}

答案2

从何而来这个文件说,你应该/usr/sbin/policy-rc.d在 chroot 中创建一个执行的脚本exit 101

答案3

值得注意的是:如果您未处于不应运行该服务的运行级别,则服务将不会由invoke-rc.d启动。因此,一个想法可能是让chroot确信它处于单用户模式。

答案4

我正在使用以下脚本/usr/sbin/policy-rc.d

#!/bin/sh

SERVICE_NAME="$(ps -o command= --ppid $PPID | cut -d ' ' -f 3 )"
for service in service1 service2 service3
do
  if [ $SERVICE_NAME = $service ]
  then
    exit 101 # Prevent service from running
  fi
done
exit 0 # allow service
  • ps -o command= --ppid $PPID应该返回完整的调用命令,例如/bin/sh /usr/sbin/invoke-rc.d service1 start
  • cut -d ' ' -f 3cut 将分割并选择第三项,因此这里是“service1”。

该脚本将避免运行invoke-rc.dservice1service2service3将保留其他的。

相关内容