понедельник, 23 июня 2008 г.

Как мне установить программу, распространяемую в исходных кодах?

Статус статьи - надоело писать каждый раз, буду отсылать всех сюда. Первоначально статья была опубликована на сайте томского LUG, автор тот же.


Вступление


Существует несколько способов. Практически у всех есть общая часть - распаковать исходники:
tar xvfj mega_app.tar.bz2
or
tar xvfz mega_app.tar.gz
Выполнить комманду ./configure, затем make. Эти комманды служат для сборки из исходных кодов исполняемых файлов, библиотек и тп.

Отдельно стоит отметить первую комманду - ./configure
Если выполнить ./configure --help, то вы получите список параметров, которые можно передать ./configure
Например часто возможна такая комманда:
./configure --prefix=/opt/mega_app

Или указать путь к библиотеке, которая по каким либо причинам не нашлась сама:
./configure --kerberos-lib=/opt/kerberos/lib

Классический.


Итак делаем последовательность:
./configure
make
и команда которая собственно установит все составляющие программы в систему:
make install
WARNING!!! Используя этот способ легко получить очень серьезные проблемы в дальнейшем. Во первых, скорее всего,
вы не сможете удалить программу (make uninstall).

Checkinstall.


Правильный путь. После выполнения общей части запускаете:
checkinstall
Программа сама спросит вас обо всем, а можете просто везде нажать ENTER.
man checkinstall тоже очень хороший путь : ))

Сборка пакета для Debian.


Это отдельный и сложный путь - вам нужно разобраться со многими аспектами создания deb-пакетов (или любых других).
Здесь этот путь не будет описан в полной мере, только пример как собрать пакет из уже подготовленных материалов. Я,
например, пользовался им чтобы сделать бекпортинг пакетов из Feisty в Dapper.
Итак, пример. Идем на packages.ubuntu.com, находим нужный пакет (diff например) и качаем два файла - исходник (http://archive.ubuntu.com/ubuntu/pool/main/d/diffutils/diffutils_2.8.1.orig.tar.gz) и патч к нему, который поправит исходники и создаст папку debian с магическим файлом rules внутри (http://archive.ubuntu.com/ubuntu/pool/main/d/diffutils/diffutils_2.8.1-11ubuntu4.diff.gz).
Я скопировал их в папку ~/test и для начала распаковал исходник:
tar xvfz diffutils_2.8.1.orig.tar.gz
А затем наложил патч:
cd diffutils-2.8.1/
gzip -cd ../diffutils_2.8.1-11ubuntu4.diff.gz | patch -p1
Теперь надо сделать debian/rules исполняемым:
chmod 750 debian/rules
И собрать пакет:
fakeroot debian/rules binary
Fakeroot нужна для сборки пакета обычным пользователем (обычно многие операции требуемые не позволили бы вам сделать пакет).
ls ../
diff_2.8.1-11ubuntu4_i386.deb diffutils-2.8.1 diffutils_2.8.1-11ubuntu4.diff.gz diffutils_2.8.1.orig.tar.gz
Как видите, пакет готов.

Заключение


Есть еще методы - сделать пакет от начала и до конца. Надо взять мануал по созданию пакетов от своего дистрибутива и по нему изучить этот процесс от и до. Делайте пакетов много, хороших и нужных. Если сделали хорошую сборку - киньте разработчикам дистрибутива, поддерживайте актуальным. Помните, что даже один пакет поддерживаемый вами, может пригодиться сотням людей по всему миру.

Ну и конечно автор ответственности не несет ни за что и никогда : ))

5 комментариев:

Анонимный комментирует...

Debian:


0. wget имя_пакета.dsc, имя_пакета.diff.gz, имя_пакета.orig.tar.gz

1. dpkg-source -x имя_пакета.dsc

2. cd ./имя_пакета/

3. dpkg-buildpackage -rfakeroot

4. ???

5. PROFIT!

Deepwalker комментирует...

Вот за это я и люблю интернет! А я то все ручками : )

А пример создания deb пакета с нуля никто не опишет? А то я, честно говоря, не скоро наверное доберусь до этой темы.

Анонимный комментирует...

> Вот за это я и люблю интернет! А я то все ручками : )
> А пример создания deb пакета с нуля никто не опишет?

Ну если вы так любите интернет, то:

google://make+debian+package

даст вам чуть более, чем полностью исчерпывающий ответ.

Удачи.

Deepwalker комментирует...

Я имел ввиду на русском в своем блоге. Google я использовать умею.

Анонимный комментирует...

вот тут поглянь, возможно то, что ищешь
http://gq.net.ru/2007/03/16/building-deb-packages/