zaLinux.ru

Как в Linux симулировать установку пакета (Как создать и установить фиктивный пакет)


Иногда при установке пакетов из исходного кода можно столкнуться с проблемой, что в системе отсутствует нужная зависимость. Обычно необходимо решить эту проблему установкой необходимых зависимостей из стандартного репозитория, либо скомпилировав их из исходного кода.

Иногда нужный пакет присутствует, но не подходит его версия, подобный пример и путь решения описан в статье «Как установить пакет, для которого отсутствует зависимость нужной версии».

Но я столкнулся с ситуацией, когда необходимая зависимость:

а) не существует вовсе (пакет был удалён из репозитория пакетов)

б) функциональность перенесена в другой пакет, который можно установить

Посмотрите на следующее сообщение:

Reading state information... Done
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
 detectiteasy : Depends: qt5-default but it is not installable
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).

Установленная из исходного кода программа требует пакет qt5-default. В этом пакет один единственный конфигурационный файл. Сам пакет был удалён за ненадобностью или из-за того, что его функционал был перенесён в пакет qtchooser, который я установил. То есть с практической точки зрения зависимость не нужна, но я не могу обновить систему, из-за, как думает менеджер пакетов, сломанных зависимостей.

Выход из этой ситуации — установить фиктивный пакет.

Как создать и установить фиктивный пакет в Linux (Debian, Linux Mint, Kali Linux, Ubuntu)

Существует пакет Debian под названием equivs, которая может создавать фиктивные пакеты. Установите его, запустив

sudo apt install -y equivs

Из-за неразрешённых зависимостей я не смог установить пакет с equivs в проблемную ОС — для помощи я воспользовался другим компьютером.

После установки вы создайте файл «control» шаблона с помощью следующей команды:

equivs-control ИМЯ_ФАЙЛА

Например:

equivs-control qt5-default

Можно использовать альтернативное имя пакета, например postfix-custom для postfix или что-то ещё.

Откроем сгенерированный файл для редактирования:

gedit qt5-default

Пример содержимого в моём случае:


### Закомментированные записи имеют разумные значения по умолчанию
### Раскомментируйте их для редактирования.
# Source: <имя исходного пакета; по умолчанию устанавливается на имя пакета>
Section: misc
Priority: optional
# Homepage: <введите здесь URL; значение по умолчанию отсутствует>
Standards-Version: 3.9.2

Package: <имя пакета; по умолчанию это equivs-dummy>
# Version: <здесь введите версию; по умолчанию это 1.0>
# Maintainer: Ваше Имя <yourname@example.com>
# Pre-Depends: <разделённый запятой список пакетов>
# Depends: <разделённый запятой список пакетов>
# Recommends: <разделённый запятой список пакетов>
# Suggests: <разделённый запятой список пакетов>
# Provides: <разделённый запятой список пакетов>
# Replaces: <разделённый запятой список пакетов>
# Architecture: all
# Multi-Arch: <что из: foreign|same|allowed>
# Copyright: <лицензия; по умолчанию это GPL2>
# Changelog: <файл изменений; по умолчанию это generic changelog>
# Readme: <README.Debian file; по умолчанию используется родовой>
# Extra-Files: <разделённый запятой список дополнительных файлов для директории doc>
# Links: <пары разделённых пробелом путей; Первое — это путь символьной ссылки указывающий на, второе — это имя файла или ссылки>
# Files: <пары разделённых пробелом путей; Первое — файл для внедрения, второе — пункт назначения>
#  <ещё пары, если имеется более чем один файл для внедрения. Обратите внимание на начальный пробел>
Description: <короткое описание; обычно несколько умных слов> 
 длинное описание и информация
 .
 второй параграф

Строки с комментариями показывают, какие значения по умолчанию будут применены при создании пакета — можете удалить эти строки или раскомментировать и указать своё значение.

Также в строке «Package» впишите имя пакета, у меня получилось так:

Section: misc
Priority: optional
Standards-Version: 5.15.2+dfsg-7
Version: 5.15.2
Package: qt5-default

С помощью строки «Provides» можно сказать, что мой пакет предоставляет возможности, предлагаемые другим пакетом, который я пытаюсь подделать.

Наконец, после создания файла управления шаблоном используйте команду equivs-build для создания поддельного пакета, например


equivs-build /ПУТЬ/ДО/СГЕНЕРИРОВАННОГО/КОНТРОЛЬНОГО/ФАЙЛА

В моём случае это:

equivs-build qt5-default

Сборка пакета займет несколько секунд, а затем вы можете запустить

sudo dpkg -i ИМЯ_ПАКЕТА*.deb

Например, в моём случае после переноса пакета на проблемную систему команда следующая:

sudo dpkg -i qt5-default_5.15.2_all.deb

После установки пакета работа менеджера пакетов пришла в норму — вновь возможно устанавливать и удалять пакеты, обновлять систему.

Для опытных пользователей, если ваш файл управления шаблоном имеет строку «Requires», вы можете создавать метапакеты, для установки группы программ.

Смотрите также:


Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *