0,1
рейтинг
25 августа 2012 в 17:11

Разработка → Компиляция пакетов tutorial recovery mode

В Ubuntu используется философия пакетного менеджмента, то есть все программы ставятся из пакетов deb, в которых хранится, собственно сама программа и скрипты, которые корректно ставят/удаляют/обновляют. Пакеты deb можно найти в сети Интернет, на дисках. Самый лучший способ использовать репозитории, хранилища deb пакетов. Если использовать репозитории, то при появлении в них новых версий установленных у вас программ, вам будет проще и быстрей обновить их. Это очень удобно и позволяет держать систему актуальной и защищенной. Иногда требумой программы в репозитариях нет и приходится компилировать из исходников. Но это надо делать правильно.
Сегодня я хочу предложить изящный метод, не раз помогавший мне.

Итак, приступим.


1)Установим программу auto-apt командой
sudo apt-get install auto-apt
2)Командой cd переходим в директорию с распакованными исходниками и применяем команду
sudo auto-apt update && auto-apt -y run ./configure
Эта команда автоматически скачает и установит все необходимые файлы и библиотеки, т. е. удовлетворит все зависимости.
3)Теперь командой sudo checkinstall -D создадим deb-пакет, использующийся в дистрибутивах основанных на Debian, например Ubuntu.
4)Теперь этот пакет можно устанавливать: либо командой
sudo dpkg -i pocket_name.deb
Либо двойным щелчком по пакету.
5)Всё вышенаписанное применимо к основанным на Debian дистрибутивах.
Также если запустить sudo checkinstall -R получим rpm-пакет, применяемый в Fedora, RHEL, ASP Linux, ALT Linux, Mandriva, openSUSE.
Если же запустить sudo checkinstall -S получим пакет применяемый в Slackware.
В этих двух случаях конечная установка может отличаться.Если у кого-то есть замечания или уточнения-пишите, это пойдёт только на пользу дела.

Заключение.

Это метод удобен тем что make install не использовался и этим методом мы не вмешиваемся в пакетную систему дистрибутива.Этот метод достаточно элегантен и удобен тем созданный deb-пакет можно корректно удалить или заменить более новой версией.Также это истинно и для других форматов пакетов, созданных командой sudo checkinstall с нужным параметром.
Александр Карамах @Karamax
карма
0,0
рейтинг 0,1
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (43)

  • 0
    checkinstall как то сам умеет подхватывать все зависимости? Или ручками вписывать?
    • 0
      ./configure вывалится с ошибкой, если будут неудовлетворенные зависимости.
      • 0
        Я имел в виду чтобы потом другим передать этот пакет и они не думали каких еще пакетов им не хватает для запуска, т.е. чтобы в deb пакете заполнилось поле с требуемыми пакетами.
        • +1
          Насколько я помню, checkinstall предлагает заполнить 10 полей, с зависимостями в том числе, вручную.
          • 0
            Да вот как раз руками и не хочется заполнять поле с зависимостями. Когда для себя делаешь — фиг с ним, т.к. все нужные пакеты поставились еще до компиляции, а вот кому то надо передать это и фигня выходит.
    • 0
      checkinstal — это фактически make install в fakeroot с записью действий и последующей сборкой пакета. Этакий quick&dirty для сборки пакетов.
  • 0
    Второй командой мы удовлетворили зависимости.Насчёт вашего вопроса-вроде да.
  • +3
    Такое ощущение, что сообщение писалось на скорую руку.
    • 0
      Да.это фактически так.
    • 0
      такое ощущение, что смотрите на форму а не на содержание.
      Спасибо автору, было полезно
      • 0
        Рад стараться.Ведь знание заточённое-бесполезное знание.
  • 0
    Я так понимаю что auto-apt тут нужен только в том случае если такого пакета нет в репозиториях?
    Иначе зависимости можно устанавливать просто через apt командой
    apt-get build-dep имя-пакета
    • 0
      Иногда требумой программы в репозитариях нет и приходится компилировать из исходников.
      • 0
        Ну да, я частенько компилирую и те которые есть)) Например захотелось кастомный nginx или еще что-то…
        • +1
          Наверное VolCh сейчас себе рукой лоб разбил
    • 0
      Правильно понимаете.
  • 0
    С KTorrent как я понимаю данный фокус не пройдет? Он через cmake без ./configure собирается, то есть на втором пункте уже загвоздка получается
    • 0
      После make выполнить sudo checkinstall -D (R или S) и установить пакет. cmake не для сборки нужен, а для генерирования makefile или какая там у Вас система.
      • 0
        Имел ввиду, что в случаи с cmake все равно придется самому с необходимыми библиотеками для сборки копаться, или все же есть метод для автоматического нахождения и установки?
        • +1
          sudo apt-get build-dep ktorrent
          Это поможет. Хотя если в качестве wm используется KDE, предложенные пакеты уже будут присутствовать.
          • +1
            Я про сборку а не про библиотеки для работы. Буквально на днях на Kubuntu 12.04 появилась необходимость его обновить, в репозитариях последняя версия 4.1.3. Пришлось качать исходники с офф сайта и собирать, но тк на Kubunte еще ни разу в жизни ничего ручками не собирали cmake раз 10 ругался на отсутствие библиотек и инструментов для сборки. Собственно вопрос как раз об этом, есть ли возможность автоматически выкачивать и ставить необходимые для сборки библиотеки/инструменты? Я так понял sudo auto-apt update && auto-apt -y run ./configure на основе configure этим и занимается?
            • 0
              А я Вам о чем. Это же build-dep.
              • 0
                Или Вы про build-essential? Он и так должен быть установлен перед сборкой)
            • 0
              auto-apt делает тоже, что и apt-get build-dep, но может использоваться и для пакетов, отсутствующих в репозитории.
              • 0
                Разве apt-get build-dep ktorrent знает что необходимо для сборки KTorrent из исходников? Мне всегда казалось она найдет только то, что необходимо для работы с данным пакетом. Если не прав, то прошу прощения.
                • +1
                  Знает, ведь ktorrent присутствует в репозитории. То, что нужно для работы, установится по apt-get install.
    • 0
      Иногда бывают разные случаи.Всё зависит от авторов программы.Всё нужно рассматривать индивидуально.Единого пути нет.Большинство-укладывается в подобный путь.Большего и не надо.
  • +9
    • –1
      make не используется в данном случае. Хотя да, checkinstall и с make можно использовать.
  • +1
    >3)Теперь командой checkinstall -D создадим deb-пакет.

    Не спортивно!
    • +1
      Извините, иногда некоторым важней результат, чем процесс.Мне тоже нравятся TRUE'шные решения.Предложите свой вариант-пусть и другие узнают.Все только выиграют от этого.
      • 0
        раньше под слаку пакеты делал именно чекинсталлом, но он имеет некоторые недостатки…

        а по поводу пакетов под убунту то тут вполне исчерпывающая статья на тему сборки пакета.
  • 0
    checkinstall также умеет rpm и tgz, не только deb.
  • –2
    А где статья?
    Тут приведен просто лог установки без объяснений.
    • 0
      Почему же.Всё объясняется, правда не очень подробно.
  • +2
    > Теперь командой sudo checkinstall -D создадим deb-пакет, использующийся в дистрибутивах основанных на Debian, например Ubuntu.
    > Теперь этот пакет можно устанавливать: либо командой sudo dpkg -i pocket_name.deb

    Неправильно. Команда

    sudo checkinstall -D

    уже установит пакет, устанавливать его отдельной командой не нужно.
  • –1
    Реально пора вводить пометку уровня поста (для начинающих, для специалистов и т.д.) на хабре, т.к. заходишь, думаешь что-то новое прочитать, а получаешь то, что уже давно известно :(
  • 0
    deleted (глупость сморозил)
  • 0
    Это конечно все круто, но не вижу альтернатив для rpm-based систем.
    • +1
      Также если запустить sudo checkinstall -R получим rpm-пакет, применяемый в Fedora, RHEL, ASP Linux, ALT Linux, Mandriva, openSUSE.
      • 0
        checkinstall в репозиториях федоры не вижу. Не все сидят под бубунтой.
        • +1
          Доступны исходники.
        • 0
          Скомпилять можно.

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