Pull to refresh

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

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

Набрав в гугле «как собрать программу из исходников» начинающий линуксоид сразу наткнется на известную мантру:
./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.2-noarch-3.tgz
installpkg src2pkg-2.2-noarch-3.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 имеет еще много других опций, в том числе и создание пакета из сорцов с предварительным скачиванием последних во временную диру.

UPD: тихо и незаметно обновилась версия программы.
Tags:
Hubs:
+23
Comments 27
Comments Comments 27

Articles