Как заставить aptitude распознать Oracle Java как допустимую зависимость Java

Как заставить aptitude распознать Oracle Java как допустимую зависимость Java

У меня на Debian установлен Oracle Java 7.

Я хочу установить сервер tomcat с помощью aptitude, но он продолжает пытаться установить icedtea и ненужные пакеты, связанные с java. Может ли aptitude узнать, что у меня уже есть Java?

Примечание: Я использовал make-jpkgкоманду для установки Java из архива.

решение1

Редактировать: более простой метод находится здесь, вверху, но информация о controlфайлах из полного исходного ответа по-прежнему актуальна, поэтому я размещаю ее под горизонтальной линейкой.

Если make-jpkgвы уже создали файл Oracle Java .deb, вы можетеизвлеките его, измените его controlфайл, как показано ниже, чтобы добавить providesдирективы, повторно упакуйте его и установите измененный deb..


Оригинальный ответ:

Используя equivs, можно создать фиктивный пакет, который по сути заставляет dpkg думать, что что-то установлено.

Хороший пример того, как начать использовать «equivs», написанздесь.

Официально вы должны начать с equivs-control <:pkgname>того, что создаст файл pkgnameв текущем каталоге. Внутри есть различные поля, но вам нужно только восемь, и вы можете просто удалить остальные. Вот примерно то, что вы должны получить для вымышленного пакета pkgname:

Section: misc
Priority: optional
Standards-Version: 3.9.2

Package: pkgname
Version: 1:42
Maintainer: Your Name <[email protected]>
Architecture: all
Description: fake pkgname to block a dumb dependency

Чтобы сделать это для Oracle Java и заставить его работать как замена openjdk (который, как оказалось, является зависимостью icedtea-netxв sid, который я использую), я думаю, вам нужно установить provides:запись в конфигурации dpkg. Таким образом, ваш файл управления будет выглядеть примерно так:

Section: misc
Priority: optional
Standards-Version: 3.9.2

Package: oracle-java
Version: 7u181-2.6.14-1
Maintainer: Joe Bob <[email protected]>
Architecture: all
Description: dummy Java package to let the system know Oracle JDK is OK to use
Provides: openjdk-7-jdk, openjdk-7-jre, openjdk-7-jre-headless

Обратите внимание на добавление последней строки. Если бы я мог сделать цветной текст в markdown, я бы покрасил его в красный цвет для выразительности.

Затем, согласно сообщению в блоге, ссылка на которое приведена выше:

Сделав это, вам нужно будет только выполнить команду equivs-build path-to-pkgname(желательно из того же каталога), и вы получите поддельный deb для установки dpkg -i. Попрощайтесь с зависимостью.

Подробную информацию о providesдирективе см.: https://www.debian.org/doc/debian-policy/ch-relationships.html#virtual-packages-provides

Обратите внимание, что я не уверен, какую версию Debian вы используете, поэтому я не знаю, зависит ли OpenJDK 7, 8 или что-то еще от icedtea. Вам, вероятно, следует установить IcedTea как минимум, поскольку я не думаю, что у Oracle JDK есть веб-плагин. Но если вы хотите, и вы уверены, что это ничего не сломает, вы можете добавить icedtea как 'предоставленный'. Имя пакета (я думаю - это зависит от вашего выпуска Debian) icedtea-7-plugin.

Связанный контент