“dpkg-divert --local --rename --add /sbin/initctl”的含义

“dpkg-divert --local --rename --add /sbin/initctl”的含义

这是来自https://help.ubuntu.com/community/LiveCDCustomizationFromScratch
我应该在 chroot 环境中执行此操作,

dpkg-divert --local --rename --add /sbin/initctl

它是否告诉操作系统“从现在开始,当您安装软件包时,无论软件包是什么(--local),如果该软件包尝试安装 /sbin/initctl,则将其安装(--add)到 /sbin/initctl.distrib(--rename)”?我试图理解手册,但无法完全理解。

如果某个文件通过 dpkg-divert 命令被软件包转移到另一个文件(例如,将 xfile 转移到 xfile.distrib),那么当使用该软件包时,是否会使用 xfile.distrib 而不是原始 xfile?
我试过了cat /var/lib/dpkg/diversions,它给了我这个列表。

/usr/share/dict/words
/usr/share/dict/words.pre-dictionaries-common
dictionaries-common
/usr/share/man/man1/sh.1.gz
/usr/share/man/man1/sh.distrib.1.gz
dash
/usr/share/man/man1/dh_gstscancodecs.1.gz
...

该文件包含文件列表而不是包名称,我无法理解。例如,第一行是什么/usr/share/dic/words意思?
请有人确认我的理解是否正确以及列表的含义。

答案1

它是否告诉操作系统“从现在开始,当您安装软件包时,无论软件包是什么(--local),如果该软件包尝试安装 /sbin/initctl,则将其安装(--add)到 /sbin/initctl.distrib(--rename)”

  • --rename告诉它立即移动任何现有文件
  • 我会把它放在--add “告诉操作系统”旁边

是不是如果某个文件通过这个 dpkg-divert 命令被某个包转换为另一个文件(比如,将 xfile 转换为 xfile.distrib),那么当使用该包时,会使用 xfile.distrib 而不是原始的 xfile?

不。设置转移的人必须提供一些东西来代替这个xfile(在这种情况下,就是你)。在该页面中,他们做了:

ln -s /bin/true /sbin/initctl

diversions文件由三行组组成:

  1. 要转移的文件
  2. 转移地点
  3. 设置转移的包裹

因此对于以下三行:

/usr/share/dict/words
/usr/share/dict/words.pre-dictionaries-common
dictionaries-common

dpkg会将 的安装/usr/share/dict/words从 以外的软件包dictionaries-common(例如wamerican)转移到/usr/share/dict/words.pre-dictionaries-common。如果您安装wamerican,则可以看到以下效果:

# dpkg -S /usr/share/dict/words
diversion by dictionaries-common from: /usr/share/dict/words
diversion by dictionaries-common to: /usr/share/dict/words.pre-dictionaries-common
wamerican: /usr/share/dict/words

该指南有点过时:initctlUpstart 已不再使用。您甚至无法再安装它。服务管理使用 systemd 完成,现在您可以使用它systemctl

相关内容