openjdk-7-jdk 是否依赖于 systemd?

openjdk-7-jdk 是否依赖于 systemd?

我尝试openjdk-7-jdk在 Ubuntu Trusty 上安装(使用aptaptitude),但它似乎依赖于,我想避免这种情况。但是,我在或 的输出中看systemd不到。为什么会这样?是否依赖于?systemddebtreeapt-rdependsopenjdk-7-jdksystemd

为了让您更全面地了解情况,我正在配置一台服务器。这一切都发生在安装时elasticsearch。它想要java,并且java想要systemd。但安装后systemd,它无法启用elasticsearch,因为它附带 init 脚本,而不是 systemd 单元文件。它看到systemctl并假设要使用它,而不是service

更新型多巴胺systemd在我这样做之前它并不需要apt update。之前apt update

# apt-cache policy openjdk-7-jdk
openjdk-7-jdk:
  Installed: (none)
  Candidate: 7u101-2.6.6-0ubuntu0.14.04.1
  Version table:
     7u101-2.6.6-0ubuntu0.14.04.1 0
        500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     7u51-2.4.6-1ubuntu4 0
        500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

# apt-cache policy systemd
systemd:
  Installed: (none)
  Candidate: (none)
  Version table:

apt update

# apt-cache policy openjdk-7-jdk
openjdk-7-jdk:
  Installed: (none)
  Candidate: 7u121-2.6.8-1ubuntu0.14.04.1
  Version table:
     7u121-2.6.8-1ubuntu0.14.04.1 0
        500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     7u51-2.4.6-1ubuntu4 0
        500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

# apt-cache policy systemd
systemd:
  Installed: (none)
  Candidate: 204-5ubuntu20.20
  Version table:
     204-5ubuntu20.20 0
        500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages

他们不是要转换 Ubuntu Trusty 吗systemd

此外,操作系统正在 lxc 容器中运行,但我怀疑这与此无关。而且可以说这是一个全新安装。我创建容器,登录,,,apt updateapt install openjdk-7-jdk想要systemd

/etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse

什么也没有/etc/apt/sources.list.d

答案1

有一个适用于 Ubuntu 14.04 (Trusty) 的 openjdk-7-jdk 软件包。14.04 基于 Upstart,不可信。因此,该软件包必须在没有 systemd init 系统的情况下运行 14.04。

您所指的 systemd 包是来自 trusty-updates 的 systemd。从该页面,您可以下载并查看 Debian 为制作软件包而添加的软件包。

在压缩档案中,您会在 README 文件中找到以下内容:

systemd 可以与 sysvinit 一起安装,并且不会改变系统的行为。这是有意为之。要测试 systemd,请添加:

init=/bin/systemd

到内核​​命令行然后重新启动,或者安装 systemd-sysv 包。

systemd 提供了许多软件包,OpenJDK 必须依赖其中一个。您可以确认该systemd-sysv软件包不是依赖项。

据我所知,在 Ubuntu 14.04 上安装标准软件包时,没有任何情况会导致系统切换为使用 systemd 作为 init 系统,除非用户明确选择加入。

如果您的 14.04 系统最终同时安装了 Upstart 和 systemd,您可以中断启动过程,进入 grub 菜单并修改内核命令行以添加init=/sbin/upstart使用 Upstart 重新启动,然后卸载或更改您需要的内容。


要解决 elasticsearch 无法启动的问题,请使用http://packages.ubuntu.com找到trusty或更早版本的 elasticsearch,然后从那里复制“init.d”脚本。此修复将在您升级 elasticsearch 后继续有效。

我认为您陷入了一种奇怪的状态,因为即使您使用的是 14.04,一些软件包维护者也正在转向预期systemd。我认为您找不到比这样的解决方法更好的解决方案。

答案2

事实证明,systemd这是作为建议引入的,即:

http://packages.ubuntu.com/trusty-updates/openjdk-7-jdk
http://packages.ubuntu.com/trusty-updates/openjdk-7-jre
http://packages.ubuntu.com/trusty-updates/libgtk-3-0
http://packages.ubuntu.com/trusty/libcolord1(推荐 colord)
http://packages.ubuntu.com/trusty/colord
http://packages.ubuntu.com/trusty-updates/policykit-1
http://packages.ubuntu.com/trusty-updates/libpam-systemd
http://packages.ubuntu.com/trusty-updates/systemd-services

这里我们可以看到 LXC 容器和物理服务器之间的行为差​​异。LXC 容器通常带有一组基本软件包。可能缺少以下内容:man,,,,,。lesspingvicurl

重点是,systemd-services取决于systemdsystemd-shim(>= 3)。全新安装 Ubuntu 后,您通常已systemd-shim安装。因此安装openjdk-7-jdk不会拉入systemd软件包。

对于 LXC 容器,这两个都没有安装,因此在要求apt安装时openjdk-7-jdk它选择第一个:systemd包。

解决这个问题的一种方法是systemd-shim在安装之前安装openjdk-7-jdk。我更喜欢这种方法,因为另一种方法(apt install --no-install-recommends openjdk-7-jdk)可能会拒绝一些有用的依赖项。

邮件列表讨论更多细节。

这个问题有关追溯依赖关系的详细信息。

相关内容