Установите конкретную версию пакета и связанных пакетов

Я пытаюсь установить Erlang из репозитория Решений Erlang (прокрутите вниз к "Установке с помощью репозитория" на странице загрузки Решений Erlang.

Текущая версия Erlang/OTP-20.0-rc2, но я хочу Erlang 19.3. Если я пробую следующее:

sudo apt-get install erlang=1:19.3-1

... Я получаю ошибку следующим образом:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 erlang : Depends: erlang-diameter but it is not going to be installed
          Depends: erlang-eldap but it is not going to be installed
          Recommends: erlang-ic-java but it is not going to be installed
          Recommends: erlang-src but it is not going to be installed
          Recommends: erlang-examples but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Я знаю, что могу разрешить это при помощи следующего:

sudo apt-get install erlang=1:19.3-1 erlang-diameter=1:19.3-1 erlang-eldap=1:19.3-1

Но это требует, чтобы я знал, заранее, каковы зависимые пакеты.

Как делают я программно (т.е. в ударе) решаю это в "общем" случае? По крайней мере, для Erlang/OTP, так или иначе?

Примечание: Я знаю, что могу sudo apt-get install esl-erlang=1:19.3 (за исключением того, что это обновит, если я не буду использовать ответ fkraiem).

2
задан 16 June 2017 в 13:58

2 ответа

То, что Вы делаете, не корректно, потому что даже при установке версии 19.3 вручную она будет обновлена до версии 20* в следующий раз, когда Вы работаете apt upgrade. То, что необходимо сделать, создают файл /etc/apt/preferences.d/erlang со следующим содержанием

Package: erlang* esl-erlang
Pin: version 1:19.3*
Pin-Priority: 501

, Это говорит Кв., что, для всех пакетов, имя которых содержит erlang, версии, запускающиеся с 19.3, должны быть предпочтены по всем другим версиям, еще более новым. Затем простое apt install erlang должно установить версию 19.3 со всеми своими корректными зависимостями.

0
ответ дан 2 December 2019 в 08:54

1. Удалите предыдущие версии/пакеты Erlang:

$ sudo apt-get purge erlang esl-erlang erlang-base erlang-crypto erlang-eldap erlang-inets erlang-mnesia erlang-os-mon
$ sudo apt-get autoremove
$ sudo apt-get install -f

$ sudo rm -rf /usr/lib/erlang
$ cd /usr/local/bin
$ sudo rm -f erl
$ sudo rm -f erlc
$ sudo rm -f epmd
$ sudo rm -f run_erl
$ sudo rm -f to_erl
$ sudo rm -f dialyzer
$ sudo rm -f typer
$ sudo rm -f escript
$ sudo rm -f ct_run

2. Добавьте запись репозитория вручную:

  • Чтобы получить кодовое имя Ubuntu, введите $ lsb_release -c. В моем случае это xenial.

  • $ sudo nano /etc/apt/sources.list и добавьте следующий текст в конец файла:

# Erlang Solutions
deb https://packages.erlang-solutions.com/ubuntu xenial contrib
  • Создайте файл /etc/apt/preferences.d/erlang :
$ sudo touch /etc/apt/preferences.d/erlang
$ sudo nano /etc/apt/preferences.d/erlang

со следующим содержанием:

Package: erlang* esl-erlang
Pin: version 1:21.3*
Pin-Priority: 501

где 21.3 — версия Erlang/OTP.

3. Установите Erlang:

$ sudo apt-get update
$ sudo apt-get install esl-erlang
$ sudo ln -s /usr/lib/erlang/bin/erl /usr/local/bin/erl

4. Проверьте установленную версию Erlang:

$ erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell
0
ответ дан 26 June 2020 в 08:29

Другие вопросы по тегам:

Похожие вопросы: