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

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

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

    Похожие публикации

    Комментарии 27
      +2
      Поясню последнюю команду. При скачке вгетом создается файл 40, вместо mc-4.7.0.4.tar.bz2. Поэтому мы его переименовываем такой командой.


      у wget есть опция --content-disposition, используя ей можно отбросить последний шаг
        –1
        не претендую на гениальность, но можно хранить, Makefile и этого достаточно, чтобы выполнить make uninstall, если конечно такой таргет вообще есть… А так слака она на то и слака ;)
          0
          В том и дело, что она оставаться слакой, а не свалкой :)
            +1
            мда… вы мне снова вернули веру в человечество… замыслил не ладное… вернуться с frugalware обратно на слаку…
              0
              К сожалению, всплыла проблема. Прога не работает для сорцов, при компиляции которых нужен autoheader. В моем случае я не смог скомпилить ей privoxy. Сейчас общаюсь с девелопером, авось чего скажет путного.
              А вообще, мой переход с дебиана на слаку и впоследствии эта статья навеяны вот этим комментом:
              Первой частью статьи вы уменьшили количество потенциальных дебианщиков и убунтовщиков, да и линуксоидов в принципе. С глюками через пару недель после make install справятся далеко не все из них, спасибо Вам огромное за продвижение винды в массы.

              НИКОГДА, МЛЯ, НИКОГДА НЕ СИДИТЕ ПОД РУТОМ И НЕ ЮЗАЙТЕ MAKE INSTALL В ПАКЕТНЫХ ДИСТРИБУТИВАХ! НЕУЖЕЛИ ЭТО СЛОЖНО 1!!! РАЗ ЗАПОМНИТЬ!?

              тырк
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Критикую не я, и не капсом. Если сделаете тырк по ссылке то увидите, с какого коммента все началось. Он процитирован здесь.
                  Насчет txz добавлю, спасибо.
                +2
                >--without-edit
                ах ты! а ведь кто то полтора года старался сделать mcedit c человеческим лицом… вах-вах-вах…
                  0
                  Я vi просто юзаю :)
                    +2
                    PKGBUILDs rule!
                      0
                      Когда я пользовался slackware, то использовался емнип pkgbuild для сборки пакетов.
                      Правда возникала помойка другого рода — пакет удалить можно, но далеко не факт, что какой-нибудь другой пакет от него не зависит. Все равно при удалении не будешь знать, сломается что-нибудь, или нет.

                      В итоге перешел на gentoo, который хоть частично такую проблему решает.
                        0
                        Ээээ… частично?
                          0
                          Полностью эту проблему решает Paludis :)
                          И большинство бинарных менеджеров пакетов.
                            0
                            Да. gentoo не избавлен от неявных зависимостей. Например, пакет x явно зависит от y, который неявно скомпилирован с поддержкой опции z. При удалении пакета z, x и y перестают работать.
                              0
                              И даже revdep-rebuild не спасает?
                                0
                                Спасает, конечно. Но revdep-rebuild — лечение последствий, а не причин.
                          +1
                          Бедные слакварщики…
                            0
                            Уже давно привычка делать ./configure --prefix=/usr/local/<имя программы>/
                            Оно все живет в указанной папке и удаляется одной командой.
                            Доктор, что я делаю не так?
                              +1
                              могу только сказать как такую схему чуть улучшить

                              ./configure --prefix=/usr/local/<имя программы>/
                              make
                              sudo checkinstall
                                0
                                В тех редких случаях когда приходилось что то собирать — поступал аналогично.
                                +1
                                Нарушаешь LSB
                                0
                                как много действий… cd /usr/ports/category/portname && make install clean :D
                                +2
                                «Пакет в слаке представляет собой tgz-архив» c 13 версии прибавился вариант с txz
                                  +2
                                  Long live ABS! :)
                                    +3
                                    Хоть у слаки нету deb'а
                                    Всё равно её не брошу
                                    Буду собирать руками
                                    Потому, что make хороший %)

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое