我尝试openjdk-7-jdk
在 Ubuntu Trusty 上安装(使用apt
或aptitude
),但它似乎依赖于,我想避免这种情况。但是,我在或 的输出中看systemd
不到。为什么会这样?是否依赖于?systemd
debtree
apt-rdepends
openjdk-7-jdk
systemd
为了让您更全面地了解情况,我正在配置一台服务器。这一切都发生在安装时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 update
它apt 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
,,,,,。less
ping
vi
curl
重点是,systemd-services
取决于systemd
或systemd-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
)可能会拒绝一些有用的依赖项。
看这个问题有关追溯依赖关系的详细信息。