equivs: фэйковые пакеты для Debian/Ubuntu

// Февраль 6th, 2017 // Debian, linux

Я люблю Debian за его замечательный пакетный менеджер apt, который сам разруливает все зависимости, и для установки софта обычно достаточно одной команды apt-get install <packagename>, но иногда бывает, что именно эта фишка заставляет биться головой об стену, когда пакеты из сторонних репозитариев начинают требовать неразрешимые зависимости, или когда вместе какой-то мелкой консольной утилитой весом в 20кбайт тащится половина Х-ов на 200мегабайт или MTA postfix/exim, там где это вообще не требуется.

Есть замечательная утилита, которая облегчает жизнь в таких ситуациях — equivs. equivs умеет создавать пустые пакеты с полным удовлетворением зависимостей, дабы удовлетворить жажду пакетного менеджера понаставить чего.

И так, допустим, нужно систему заставить думать, что у нас установлен MTA postfix, для начала установим equivs, как всегда это делается легко:

 apt-get install equivs


переходим в каталог для сбора пакетов

cd /usr/src

создадим файл описания для псевдопакета:

equivs-control postfix

будет создан файл с именем postfix, и содержанием:

### Commented entries have reasonable defaults.
### Uncomment to edit them.
# Source: <source package name; defaults to package name>
Section: misc
Priority: optional
# Homepage: <enter URL here; no default>
Standards-Version: 3.9.2

Package: <package name; defaults to equivs-dummy>
# Version: <enter version here; defaults to 1.0>
# Maintainer: Your Name <yourname@example.com>
# Pre-Depends: <comma-separated list of packages>
# Depends: <comma-separated list of packages>
# Recommends: <comma-separated list of packages>
# Suggests: <comma-separated list of packages>
# Provides: <comma-separated list of packages>
# Replaces: <comma-separated list of packages>
# Architecture: all
# Copyright: <copyright file; defaults to GPL2>
# Changelog: <changelog file; defaults to a generic changelog>
# Readme: <README.Debian file; defaults to a generic one>
# Extra-Files: <comma-separated list of additional files for the doc directory>
# Files: <pair of space-separated paths; First is file to include, second is destination>
#  <more pairs, if there's more than one file to include. Notice the starting space>
Description: <short description; defaults to some wise words>
 long description and info
 .
 second paragraph

нас интересует секция, которая начинается с Package:, для полного удовлетворения зависимостей — нам нужно установить правильное имя пакета и его назначение, для этого берем информацию из оригинального пакет:

apt-cache show postfix

получим:

Package: postfix
Version: 2.9.6-2
Installed-Size: 3466
Maintainer: LaMont Jones <lamont@debian.org>
Architecture: amd64
Replaces: mail-transport-agent
Provides: mail-transport-agent
Depends: libc6 (>= 2.11), libdb5.1, libsasl2-2 (>= 2.1.24), libsqlite3-0 (>= 3.5.9), libssl1.0.0 (>= 1.0.0), debconf (>= 0.5) | debconf-2.0, netbase, adduser (>= 3.48), dpkg (>= 1.8.3), lsb-base (>= 3.0-6), ssl-cert, cpio
Recommends: python
Suggests: procmail, postfix-mysql, postfix-pgsql, postfix-ldap, postfix-pcre, sasl2-bin, libsasl2-modules, dovecot-common, resolvconf, postfix-cdb, mail-reader, ufw, postfix-doc
Conflicts: libnss-db (<< 2.2-3), mail-transport-agent, smail
Description-ru: высокопроизводительный агент пересылки почты
 Postfix -- это написанный Вейтсом Венемой (Wietse Venema) агент
 пересылки почты с целью заменить широко используемую программу Sendmail.
 Postfix быстро работает, лёгок в администрировании, безопасен и
 в некоторой мере совместим с sendmail. Снаружи он ведёт себя как
 sendmail, а внутри совершенно другой.
Homepage: http://www.postfix.org
Description-md5: 98656fbf1bb45b53edd367037a2e5a90
Tag: implemented-in::c, interface::daemon, mail::smtp, mail::transport-agent,
 network::server, protocol::smtp, role::program, works-with::mail
Section: mail
Priority: extra
Filename: pool/main/p/postfix/postfix_2.9.6-2_amd64.deb
Size: 1591142
MD5sum: edb56b4508706379521d3f33392ea74b
SHA1: 3278ebf26afef5e88fade5441badb7782e29605d
SHA256: b9b6ff84efef562e7a03434765902c954f55e1fb4cf431f5091ccdf38a31c9c0

перенесем эти секции в наш файл postfix:

Package: postfix
Version: 2.9.6-2
Replaces: mail-transport-agent
Section: mail

теперь собираем пакет:

# equivs-build postfix
dh_testdir
dh_testroot
dh_prep
dh_testdir
dh_testroot
dh_install
dh_installdocs
dh_installchangelogs
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dpkg-gencontrol: предупреждение: File::FcntlLock недоступна; используется flock, которую небезопасно использовать при работе с NFS
dh_md5sums
dh_builddeb
dpkg-deb: сборка пакета «postfix» в файл «../postfix_2.9.6-2_all.deb».

The package has been created.
Attention, the package has been created in the current directory,
not in ".." as indicated by the message above!

и устанавливаем пакет:

dpkg -i postfix_2.9.6-2_all.deb

One Response to “equivs: фэйковые пакеты для Debian/Ubuntu”

  1. Slayer:

    Сталкивался с таким) Еще прикольно искать в базе репозиторий символы переноса строки, переназначать права, что бы поставить программу! Так как при установки чтение базы репозиториев доходило до 78% и показывало дулю)))

Leave a Reply