Статья Slackware. Утилита Src2pkg или как не сделать из слаки свалку

0
259

Даже если вы пользуетесь популярным, раскручыенным дистрибутивом, все равно иногда возникает желание поставить малоизвестную, но любопытную софтину из исходников. Я когда-то очень часто этим занимался. Это доставляет массу удовольствия даже только от того, что ты сам «колдуешь», компилируя программу. Но обрантая сторона медали заключается в том, что установив программу и поигравшись, ты чаще всего о ней забываешь. Постепенно таких программ установленых ручками становится все больше, система засоряется, а вот удалить из оказывается не так уж и легко http://www.masterorlov.ru/.

В сети немало статей и руководст на тему очистки системы. Но их никогда не бывает много, и IR0N предлагает решение для самого древнего и прекрасного дистрибутива Slackware.По ссылке вы найдете оригинал, а я все же воспроизведу текст здесь, чтобы опыт не потерялся.

Рано или поздно любой начинающий линуксоид столкнется с необходимостью собирать программу из исходников. Причины на это могут быть самые разные, начиная от спортивного интереса и заканчивая самописной/самоисправленной программой.

Набрав в гугле «как собрать программу из исходников» начинающий линуксоид сразу наткнется на известную мантру:
./configure
make
make install
Вот таким вот образом система и превращается в помойку. Вот поставили вы таким образом сотню программ, а теперь попробуйте-ка удалить 50 из них. В лучшем случае вам поможет скачка той же версии исходников, что и установленная программа, ./configure с теми же параметрами, make и только затем make uninstall, и то если разработчик позаботился о деинсталляции своего творения. В худшем случае-ползайте по всем папкам вашей системы и вычищайте руками все файлы, связанные с программой.

И тот, и другой способ нудные, долгие и с кучей нюансов. Поэтому мы будем изучать другой способ установки программ, на примере ОС Slackware 13.

Итак. Для начала спешу всех слаководов обрадовать (и огорчить слаконенавистников). Менеджер пакетов в слаке есть, был и будет есть.

Да, он не такой функциональный как в Debian или Ubuntu, и пакеты там не deb и не rpm. Но кто сказал что это плохо?

Пакет в слаке представляет собой tgz-архив (а также с 13-ой версии еще и txz), состоящий из бинарников и установочного скрипта. Для установки пакета используется команда installpkg, для удаления-removepkg.

UPD: спасибо за замечание kyb27

Поясню принцип рассматриваемого способа установки. У нас есть исходники, из которых мы посредством утилиты src2pkg делаем пакет, который потом устанавливаем через installpkg. Плюсом такого метода установки является то, что в любое время мы можем снести нашу программу командой removepkg.

С теорией закончили, перейдем к практике.

С установкой программы src2pkg проблем быть не должно. Все же поясню на примере (все команды от рута):
mkdir /home/src2pkg
cd /home/src2pkg
wget distro.ibiblio.org/pub/linux/distributions/amigolinux/download/src2pkg/src2pkg-2.1-noarch-7.tgz
installpkg src2pkg-2.1-noarch-7.tgz
Все, утилита установлена.

Теперь попробуем с ее помощью собрать и установить программу mc.
mkdir /home/mc
cd /home/mc
wget —content-disposition www.midnight-commander.org/downloads/40
UPD: за замечание спасибо Toseter.

Теперь читаем маны, конфигуры и прочее, если нам нужны опции компиляции программы. Если нет, то все еще проще.
В моем случае команда для сборки пакета из сорцов имела след. вид:
root@ironnet:/home/mc# src2pkg -e=’—sysconfdir=/etc/mc —without-x —without-edit’ -C mc-4.7.0.4.tar.bz2
где:
-e — опция для компиляции с параметрами
-С — положить созданный пакет в текущий каталог
mc-4.7.0.4.tar.bz2 — файл сорцов

Вывод получается вот какой:
Found source archive: mc-4.7.0.4.tar.bz2
Deleting old build files — Done
Creating working directories:
PKG_DIR=/tmp/mc-4.7.0.4-i486-1
SRC_DIR=/tmp/mc-4.7.0.4-src-1
Unpacking source archive — Done
Correcting source permissions — Done
Checking for patches — None found
Found configure script — Done
Configuring sources using:
LDFLAGS=»-Wl,-L/lib,-L/usr/lib» CFLAGS=»-O2 -m32 -march=i486 -mtune=i686″ ./configure —prefix=/usr —sysconfdir=/etc/mc — -without-x —without-edit —libdir=/usr/lib
Configuration has been — Successful!
Compiling sources — Using: ‘make’
Compiling has been — Successful!
Checking for Makefile rule: ‘install’ Okay
Creating content in JAIL root — Using: ‘make install’
Safe content creation — Successful!
Processing package content:
Correcting package permissions — Done
Stripping ELF binaries — Using: strip -p —strip-unneeded Done
Checking for standard documents — Done
Compressing man pages — Done
Creating slack-desc — From default text
Searching for links in: mc-4.7.0.4-i486-1 — Done
Adding links to doinst.sh — Adding links-creation to the doinst.sh
Deleting symbolic links — Removing links from the package directory
Rechecking package correctness —
Checking for misplaced dirs — Done
Rechecking package permissions — Done
Creating package: mc-4.7.0.4-i486-1.tgz — Done
Package Creation — Successful! Package Location:
/home/mc/mc-4.7.0.4-i486-1.tgz
Пакет готов. Ставим его:
root@ironnet:/home/mc# installpkg mc-4.7.0.4-i486-1.tgz
Verifying package mc-4.7.0.4-i486-1.tgz.
Installing package mc-4.7.0.4-i486-1.tgz:
PACKAGE DEscriptION:
# mc
#
# No description was given for this package.
#
# Packaged by src2pkg
Executing install script for mc-4.7.0.4-i486-1.tgz.
Package mc-4.7.0.4-i486-1.tgz installed.
Панели открылись, все в порядке. Поздравляю с успешной установкой.
Для того, чтобы удалить наш пакет, используем команду
removepkg mc-4.7.0.4-i486-1.tgz
Естественно что по истечении какого-то времени мы забудем, какой именно версии у нас mc. Но и здесь есть выход.

Чтобы быстро узнать, какой именно пакет MC установлен в нашей системе, выполним команду:

ls /var/log/packages/mc*

Которая и вернет нам имя нашего пакета, а заодно и версию mc.
Немного вкусноты напоследок:
программа src2pkg имеет еще много других опций, в том числе и создание пакета из сорцов с предварительным скачиванием последних во временную диру.