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

668

Даже если вы пользуетесь популярным, раскручыенным дистрибутивом, все равно иногда возникает желание поставить малоизвестную, но любопытную софтину из исходников. Я когда-то очень часто этим занимался. Это доставляет массу удовольствия даже только от того, что ты сам «колдуешь», компилируя программу. Но обрантая сторона медали заключается в том, что установив программу и поигравшись, ты чаще всего о ней забываешь. Постепенно таких программ установленых ручками становится все больше, система засоряется, а вот удалить из оказывается не так уж и легко 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 имеет еще много других опций, в том числе и создание пакета из сорцов с предварительным скачиванием последних во временную диру.