Сборка пакетов (поиск ошибок)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

О сборке программ на форумах посвященных Линуксу было написано многое, но создам ещё одну тему. Хочу разобраться как собирать программы грамотно и как обходить все подводные камни.

Итак, сборка программы в 90% случаях состоит из трёх этапов: 1)конфигурирование; 2)компиляция; 3)установка.

Сначала необходимо поместить исходники собираемого пакета в каталог /opt/src (либо /usr/src для сборки ядра, либо /home/имяпользователя/src для сборки не суперпользователем). Это можно сделать, распаковав архив с исходниками при помощи tar или другого архиватора, либо получить при помощи системы управления версиями cvs, svn или git. Затем нужно войти в этот каталог и просмотреть его содержимое.
Если видим файл с именем Makefile (сценарий для компилятора make) значит конфигурирование не требуется (хотя есть исключение, ядро например конфигурируется командой make config и прочими).
Целью конфигурирования является появление файла Makefile. Обычно конфигурирование осуществляется посредством скрипта configure. Скрипт можно запустить с параметрами, самым интересным из которых является --prefix=<каталог> (определение каталога в который буден установлен пакет), полный список параметров можно узнать, введя "./configure --help"/пакетов
После конфигурирования можно компилировать пакет. Команда make.
После того как пакет скомпилирован его можно установить в систему. Вводится команда "make install". При необходимости удалить установленный пакет, необходимо снова войти в каталог с откомпилированными исходниками и выполнить "make uninstall"


Существуют пакеты в которых этап конфигурирования выполняется с помощью средства cmake. Если в каталоге с исходниками отсутствует скрипт configure, а присутствует файл CMakeLists.txt - то это как раз тот случай. Выполняется конфигурирование из отдельного каталога:

Код: Выделить всё

mkdir build && cd build && cmake ..

После этого в каталоге build появятся сконфигурированные исходники с файлом Makefile.

Вообще в каталоге с исходниками должны присутствовать файлы README или INSTALL. В них должны быть инструкции как правильно собирать пакет. И самое главное в них должно быть указано от каких пакетов собираемый пакет зависит.

Мне однажды попался пакет, для компиляции которого вместо make используется новое средство scons. То есть вместо:

Код: Выделить всё

./configure
make
make install

нужно вводить

Код: Выделить всё

scons
scons install

Я бы отметил, что в этом случае сообщения выводимые в процессе сборки более информативные и по ним легко можно определить причину ошибки если она возникает.

А теперь будут вопросы.
Первое: ошибки (Error) и предупреждения (Warning). Данные сообщения могут появляться как в процессе конфигурирования, так и компеляции. Я заметил такую законемерность - если пает не зафэйлился в процессе конфигурирования - то он на 90% не зафейлится в процессе компиляции. Причиной ошибок как я понимаю является то, что в системе чего-то не хватает. Для меня самое сложное определить чего именно не хватает.
Вот сейчас пытаюсь собрать libtorrent, скрипт configure выдаёт:

Код: Выделить всё

sunny-desktop:/opt/src/libtorrent# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
./configure: line 2483: syntax error near unexpected token `1.9.6'
./configure: line 2483: `AM_PATH_CPPUNIT(1.9.6)'

И как понять чего в системе не хватает? Пакеты указанные в README: libsigc++-2.0, libsigc++-2.0-dev и g++ вроде установлены. На строке 2483 скрипта configure только:

Код: Выделить всё

AM_PATH_CPPUNIT(1.9.6)

И такие заминки случаются с каждым четвёртым пакетом.

Второе. Если в каталоге исходников нет скрипта configure, а есть autoconf.sh, в результате работы которого формируется configure, то какие общие правила сборки таких пакетов? Зачем нужна такая многоступенчатая комбинация?

И третье. Если пакет был скомпилирован правильно, то где должны находиться все собранные файлы? И где должен находиться файллист на основе которого команда "make install" производит установку пакета? И наконец, что делает команда "checkinstall make install" которую рекомендуется использовать вместо "make install"?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сборка пакетов (поиск ошибок)

Сообщение drBatty »

sunny1983 писал(а):
15.09.2010 23:11
Итак, сборка программы в 90% случаях состоит из трёх этапов: 1)конфигурирование; 2)компиляция; 3)установка.

дальше можно было-бы и не читать, но я всё равно прочитал ;)

Основная ваша ошибка (ИМХО) - установка ПАКЕТА состоит из ПЯТИ этапов:
4) создание пакета
5) установка пакета.

Вы сделаете из своей системы что-то жуткое, если этого не поймёте. Скорее - уже сделали...

Причём этапы №4 и №5 сильно зависят от самой системы.
sunny1983 писал(а):
15.09.2010 23:11
И как понять чего в системе не хватает? Пакеты указанные в README: libsigc++-2.0, libsigc++-2.0-dev и g++ вроде установлены. На строке 2483 скрипта configure толь

версия не та скорее всего. ошибка была раньше, возможно тогда она была ещё WARNING'ом.
sunny1983 писал(а):
15.09.2010 23:11
Второе. Если в каталоге исходников нет скрипта configure, а есть autoconf.sh, в результате работы которого формируется configure, то какие общие правила сборки таких пакетов? Зачем нужна такая многоступенчатая комбинация?

общее правило тут только одно: читать документацию к программе.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

drBatty писал(а):
15.09.2010 23:37
Основная ваша ошибка (ИМХО) - установка ПАКЕТА состоит из ПЯТИ этапов:
4) создание пакета
5) установка пакета.

Вы сделаете из своей системы что-то жуткое, если этого не поймёте. Скорее - уже сделали...

А если объединить 3, 4 и 5 пункты, используя "checkinstall make instal" и тем самым одновременно создавать пакет и устанавливать его то что, не проканает?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

sunny1983 писал(а):
15.09.2010 23:59
А если объединить 3, 4 и 5 пункты, используя "checkinstall make instal" и тем самым одновременно создавать пакет и устанавливать его то что, не проканает?

И где здесь пакет?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

Как бы прописные истины:
- сначала стоит поискать уже собранный пакет под свою систему
- для установки стоит почитать README и INSTALL файлы в пакете, либо на сайте разработчика

Более того, cpanовские модули собираются через, о ужас, Makefile.PL.

P.S.: не верю, чтобы libtorrent не было в пакетах дистрибутива.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сборка пакетов (поиск ошибок)

Сообщение drBatty »

sunny1983 писал(а):
15.09.2010 23:59
А если объединить 3, 4 и 5 пункты, используя "checkinstall make instal" и тем самым одновременно создавать пакет и устанавливать его то что, не проканает?

1) вам нужно ПОСТАВИТЬ программу? зачем здесь тогда checkinstall?
2) хорошо, поставили. А как обновлять/удалять?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

Ладно, пройдёмся по всему сообщению.
sunny1983 писал(а):
15.09.2010 23:11
Сначала необходимо поместить исходники собираемого пакета в каталог /opt/src (либо /usr/src для сборки ядра, либо /home/имяпользователя/src для сборки не суперпользователем).
Программы никогда не собирают под рутом.
sunny1983 писал(а):
15.09.2010 23:11
После конфигурирования можно компилировать пакет. Команда make.
Не пакет, а программу (или библиотеку).
sunny1983 писал(а):
15.09.2010 23:11
После того как пакет скомпилирован его можно установить в систему. Вводится команда "make install".
Это не пакет устанавливает (которого Вы не создавали), а ту самую программу или библиотеку.
sunny1983 писал(а):
15.09.2010 23:11
При необходимости удалить установленный пакет, необходимо снова войти в каталог с откомпилированными исходниками и выполнить "make uninstall"
Во-первых - не пакет, а во-вторых, это не всегда работает.
sunny1983 писал(а):
15.09.2010 23:11
Вообще в каталоге с исходниками должны присутствовать файлы README или INSTALL. В них должны быть инструкции как правильно собирать пакет. И самое главное в них должно быть указано от каких пакетов собираемый пакет зависит.
Вот с этого надо начинать как раз. Только, опять-таки, там не может быть указано, от каких пакетов программа зависит, потому что именование пакетов в каждом дистибутиве своё. Там указывается, какие для компиляции нужны программы и библиотеки.
sunny1983 писал(а):
15.09.2010 23:11
И как понять чего в системе не хватает?
Написано же - синтаксическая ошибка. В самом скрипте. Можно попробовать сгенерировать его по-новой при посредстве autoconf или что там есть.
sunny1983 писал(а):
15.09.2010 23:11
Если в каталоге исходников нет скрипта configure, а есть autoconf.sh, в результате работы которого формируется configure, то какие общие правила сборки таких пакетов? Зачем нужна такая многоступенчатая комбинация?
Затем, что configure - скрипт немаленький, и писать его вручную - редкостный геморрой.
sunny1983 писал(а):
15.09.2010 23:11
Если пакет был скомпилирован правильно, то где должны находиться все собранные файлы? И где должен находиться файллист на основе которого команда "make install" производит установку пакета?
Не пакет... Всё прописано в Makefile.

Ну и главное: какой у Вас дистрибутив? Знакомо ли вам словосочетание "менеджер пакетов"? Пробовали ли Вы им пользоваться?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

Bizdelnick писал(а):
16.09.2010 03:14
Программы никогда не собирают под рутом.

Интересно как я это сделаю не под рутом, когда /usr/src как и любой подкаталог /usr доступен для записи только руту?

Bizdelnick писал(а):
16.09.2010 03:14
Ну и главное: какой у Вас дистрибутив? Знакомо ли вам словосочетание "менеджер пакетов"? Пробовали ли Вы им пользоваться?

Всякий раз когда я пробую какой-нибудь новый для себя дистрибутив я в первую очередь стараюсь выучить назубок работу с его мененджером пакетов.
В данном случае меня не устраевает та сборка rtorrent, что имеется в репозитории Debian, поэтому решил собрать его и libtorrent самостоятельно.

Bizdelnick писал(а):
16.09.2010 03:14
Написано же - синтаксическая ошибка. В самом скрипте. Можно попробовать сгенерировать его по-новой при посредстве autoconf или что там есть.

Я неудачный пример привёл. В данном случае я имею как раз дело с библиотекой, конфигурирующейся при помощи autoconf.sh+configure, а лучше бы было привести пример где только configure. В любом случае я создал эту тему не для того чтобы обсуждать сборку libtorrent, а для того чтобы обсуждать процесс сборки программ в целом. Для меня самое сложное определить какие для компиляции нужны программы и библиотеки, дело в том что не всегда README и INSTALL в каталоге присутствуют, а иногда бывает что они есть, но не несут в себе данной информации. Возможно ли определить зависимости по синтаксической ошибке? Существуют ли какие-нибудь инструменты для этого?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

sunny1983 писал(а):
16.09.2010 10:19
Bizdelnick писал(а):
16.09.2010 03:14
Ну и главное: какой у Вас дистрибутив? Знакомо ли вам словосочетание "менеджер пакетов"? Пробовали ли Вы им пользоваться?

Всякий раз когда я пробую какой-нибудь новый для себя дистрибутив я в первую очередь стараюсь выучить назубок работу с его мененджером пакетов.
В данном случае меня не устраевает та сборка rtorrent, что имеется в репозитории Debian, поэтому решил собрать его и libtorrent самостоятельно.


В debian можно сказать apt-get source rtorrent.
Поправить debian/rules и собрать, внимание, deb-пакет!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

sunny1983 писал(а):
16.09.2010 10:19
Интересно как я это сделаю не под рутом, когда /usr/src как и любой подкаталог /usr доступен для записи только руту?
А не надо класть исходники в /usr/src, используйте домашний каталог. От рута делается только установка (и намного лучше, если это будет установка пакета, а не свежесобранной программы).
sunny1983 писал(а):
16.09.2010 10:19
Для меня самое сложное определить какие для компиляции нужны программы и библиотеки
Это всегда есть в выводе configure (или cmake). Попробуйте запускать
./configure | grep needed
если не можете найти.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сборка пакетов (поиск ошибок)

Сообщение sash-kan »

Bizdelnick писал(а):
16.09.2010 13:02
А не надо класть исходники в /usr/src
вплоть до lenny это было нормальной практикой. собственно, это вообще нормальная практика, согласно man hier.
а вот в squeeze почему-то решили чуть усложнить жизнь, убрав set-group-id с этого каталога. вернуть, конечно, не сложно, но осадок-то остаётся.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сборка пакетов (поиск ошибок)

Сообщение drBatty »

Bizdelnick писал(а):
16.09.2010 03:14
Программы никогда не собирают под рутом.

нет.

Bizdelnick писал(а):
16.09.2010 03:14
Во-первых - не пакет, а во-вторых, это не всегда работает.


беда в том, что это не только не всегда работает, но и почти всегда работает неправильно.
Bizdelnick писал(а):
16.09.2010 03:14
Написано же - синтаксическая ошибка. В самом скрипте. Можно попробовать сгенерировать его по-новой при посредстве autoconf или что там есть.


не факт. вполне вероятно, что ошибка в синтаксисе просто из-за неожиданного дистрибутива. Ну например

Код: Выделить всё

$ [ $LANG = "C" ] || echo "not ok"
not ok

всё работает.
а вот так:

Код: Выделить всё

$ [ $LC_ALL = "C" ] || echo "not ok"
bash: [: =: unary operator expected
not ok

Видите - ошибка в скрипте. А у меня $LC_ALL не установлена, потому нормальное выражение превращается в ерунду.
Bizdelnick писал(а):
16.09.2010 03:14
Затем, что configure - скрипт немаленький, и писать его вручную - редкостный геморрой.

дело не в этом - можно взять шаблон.
беда в том, что на многих системах нужен РАЗНЫЙ скрипт. В иных даже bash'а нет.
sunny1983 писал(а):
16.09.2010 10:19
Интересно как я это сделаю не под рутом, когда /usr/src как и любой подкаталог /usr доступен для записи только руту?

а зачем туда СОБИРАТЬ программу?
sunny1983 писал(а):
16.09.2010 10:19
В данном случае меня не устраевает та сборка rtorrent, что имеется в репозитории Debian, поэтому решил собрать его и libtorrent самостоятельно.

пакет делайте.
sunny1983 писал(а):
16.09.2010 10:19
Для меня самое сложное определить какие для компиляции нужны программы и библиотеки, дело в том что не всегда README и INSTALL в каталоге присутствуют, а иногда бывает что они есть, но не несут в себе данной информации. Возможно ли определить зависимости по синтаксической ошибке? Существуют ли какие-нибудь инструменты для этого?

мозг+знание *NIX+знание ЯП, на котором написано ПО.
этого достаточно в 95%
Bizdelnick писал(а):
16.09.2010 13:02
Это всегда есть в выводе configure (или cmake). Попробуйте запускать
./configure | grep needed

+1
ещё бывает config.log
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

drBatty писал(а):
16.09.2010 15:32
мозг+знание *NIX+знание ЯП, на котором написано ПО.

Вы хотите сказать, что если я не знаю ЯП, то я так и буду долбиться лбом в стенку?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

sash-kan писал(а):
16.09.2010 14:49
Bizdelnick писал(а):
16.09.2010 13:02
А не надо класть исходники в /usr/src
вплоть до lenny это было нормальной практикой. собственно, это вообще нормальная практика, согласно man hier.
а вот в squeeze почему-то решили чуть усложнить жизнь, убрав set-group-id с этого каталога. вернуть, конечно, не сложно, но осадок-то остаётся.

По-моему, это общая тенденция. И поэтому я так категорично и написал: человеку, небось, долго ещё линуксами пользоваться, незачем привыкать делать так, как скоро уже никто не будет.

drBatty писал(а):
16.09.2010 15:32
Bizdelnick писал(а):
16.09.2010 03:14
Программы никогда не собирают под рутом.

нет.

Всегда знал, что слаководы - извращенцы :-)
sunny1983 писал(а):
16.09.2010 16:07
Вы хотите сказать, что если я не знаю ЯП, то я так и буду долбиться лбом в стенку?

Я почти что не знаю, но как-то справляюсь. Всё не так плохо.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

Дам на всякий случай то что выдаёт autoconf.sh при попытке собрать libtorrent:

Код: Выделить всё

aclocal...
configure.ac:20: warning: macro `AM_PATH_CPPUNIT' not found in library
autoheader...
libtoolize... using libtoolize
automake...
configure.ac:18: installing `./install-sh'
configure.ac:18: installing `./missing'
src/Makefile.am: installing `./depcomp'
autoconf...
configure.ac:20: error: possibly undefined macro: AM_PATH_CPPUNIT
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
ready to configure
Спасибо сказали:
Аватара пользователя
lastpriot
Сообщения: 218
ОС: FreeBSD

Re: Сборка пакетов (поиск ошибок)

Сообщение lastpriot »

у вас libtorrent версии 0.12.6?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Сборка пакетов (поиск ошибок)

Сообщение drBatty »

sunny1983 писал(а):
16.09.2010 16:07
Вы хотите сказать, что если я не знаю ЯП, то я так и буду долбиться лбом в стенку?

как повезёт. ИМХО в 75% случаев - да. Ошибки пишет компилятор, а создатели компилятора предполагали, что пользователь их ПО знает, почему нельзя делать декремент внутри константного метода, или почему нельзя определить чистую виртуальную функцию. Не думаю, что такое сообщение вам чем-то поможет. И мало того, то, что сегодня считается нормой, завтра может стать ошибкой - ЯП тоже меняются. С этим ничего не поделаешь, за некоторые фразы Александра Сергеевича Пушкина меня выкинут с этого форума - русский язык тоже меняется.

Bizdelnick писал(а):
16.09.2010 17:22
Всегда знал, что слаководы - извращенцы :-)


старая школа... на самом деле, я думаю попробовать делать пакеты для юзверей... есть у меня такая задумка...
sunny1983 писал(а):
16.09.2010 23:43
configure.ac:20: warning: macro `AM_PATH_CPPUNIT' not found in library

надо смотреть, почему не определён этот макрос, и зачем он вообще нужен. Подозреваю, что это просто число CPU. Возможно автор полагает, что оно должно быть прописано например в uname, а создатели дистра считают, что десктопной ОС это "не нужно". Оно может и не нужно, но прога не собирается.

PS: Сегодня собирал arora, примитивная программа (для сборки), а сразу не собралась. Требует qmake-qt4, а у меня такой нет. И не только у меня, но и во всех интернетах нет (для моей ОС). Т.е. Патрег мне не помог, и даже гугл не помог :( Помог лишь опыт: я вспомнил, что больше года назад в слаке были третьи кеды и соответственно Qt3. Однако, ещё тогда в полный рост юзалась Qt4. Вот что-бы их не путать, qmake для Qt4 назвали qmake-qt4 (в системе было сразу 2 qmake). Ну а что-бы я делал, если-бы об этом не знал? Ну разве-что здесь-бы что-нить подсказали...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

sash-kan писал(а):
16.09.2010 14:49
А не надо класть исходники в /usr/src вплоть до lenny это было нормальной практикой. собственно, это вообще нормальная практика, согласно man hier.
а вот в squeeze почему-то решили чуть усложнить жизнь, убрав set-group-id с этого каталога. вернуть, конечно, не сложно, но осадок-то остаётся.

Добавил своего пользователя в группу src и теперь имею доступ на запись от обычного пользователя к папке /usr/src

KiWi писал(а):
16.09.2010 12:24
В debian можно сказать apt-get source rtorrent.
Поправить debian/rules и собрать, внимание, deb-пакет!

Хмм... до этого никогда не пробовал получать исходники с помощью apt-src. Попробовал, получит исходники libtorrent с уже сформированным скриптом configure, мало того мне было предложено установить необходимые пакеты для сборки на что я согласился.

Теперь configure больше не фейлится. Зато фейлится make:

Код: Выделить всё

make  all-recursive
make[1]: Entering directory `/usr/src/libtorrent-0.11.9'
Making all in src
make[2]: Entering directory `/usr/src/libtorrent-0.11.9/src'
Making all in torrent
make[3]: Entering directory `/usr/src/libtorrent-0.11.9/src/torrent'
Making all in data
make[4]: Entering directory `/usr/src/libtorrent-0.11.9/src/torrent/data'
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT block.lo -MD -MP -MF ".deps/block.Tpo" -c -o block.lo block.cc; \
    then mv -f ".deps/block.Tpo" ".deps/block.Plo"; else rm -f ".deps/block.Tpo"; exit 1; fi
mkdir .libs
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT block.lo -MD -MP -MF .deps/block.Tpo -c block.cc  -fPIC -DPIC -o .libs/block.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT block_list.lo -MD -MP -MF ".deps/block_list.Tpo" -c -o block_list.lo block_list.cc; \
    then mv -f ".deps/block_list.Tpo" ".deps/block_list.Plo"; else rm -f ".deps/block_list.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT block_list.lo -MD -MP -MF .deps/block_list.Tpo -c block_list.cc  -fPIC -DPIC -o .libs/block_list.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file.lo -MD -MP -MF ".deps/file.Tpo" -c -o file.lo file.cc; \
    then mv -f ".deps/file.Tpo" ".deps/file.Plo"; else rm -f ".deps/file.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file.lo -MD -MP -MF .deps/file.Tpo -c file.cc  -fPIC -DPIC -o .libs/file.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file_list.lo -MD -MP -MF ".deps/file_list.Tpo" -c -o file_list.lo file_list.cc; \
    then mv -f ".deps/file_list.Tpo" ".deps/file_list.Plo"; else rm -f ".deps/file_list.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file_list.lo -MD -MP -MF .deps/file_list.Tpo -c file_list.cc  -fPIC -DPIC -o .libs/file_list.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file_list_iterator.lo -MD -MP -MF ".deps/file_list_iterator.Tpo" -c -o file_list_iterator.lo file_list_iterator.cc; \
    then mv -f ".deps/file_list_iterator.Tpo" ".deps/file_list_iterator.Plo"; else rm -f ".deps/file_list_iterator.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file_list_iterator.lo -MD -MP -MF .deps/file_list_iterator.Tpo -c file_list_iterator.cc  -fPIC -DPIC -o .libs/file_list_iterator.o
In file included from file_list_iterator.cc:42:
file_list_iterator.h: In member function 'uint32_t torrent::FileListIterator::depth() const':
file_list_iterator.h:64: error: 'abs' is not a member of 'std'
make[4]: *** [file_list_iterator.lo] Ошибка 1
make[4]: Leaving directory `/usr/src/libtorrent-0.11.9/src/torrent/data'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/usr/src/libtorrent-0.11.9/src/torrent'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/usr/src/libtorrent-0.11.9/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/usr/src/libtorrent-0.11.9'
make: *** [all] Ошибка 2
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

Ну что Вы опять творите? Вам сказали же:
KiWi писал(а):
16.09.2010 12:24
собрать, внимание, deb-пакет!

Хоть бы погуглили, как это делается.
http://www.opennet.ru/base/sys/debian_backport.txt.html
http://www.debian.org/doc/maint-guide/index.ru.html#contents
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

sunny1983 писал(а):
22.09.2010 01:07
sash-kan писал(а):
16.09.2010 14:49
А не надо класть исходники в /usr/src вплоть до lenny это было нормальной практикой. собственно, это вообще нормальная практика, согласно man hier.
а вот в squeeze почему-то решили чуть усложнить жизнь, убрав set-group-id с этого каталога. вернуть, конечно, не сложно, но осадок-то остаётся.

Добавил своего пользователя в группу src и теперь имею доступ на запись от обычного пользователя к папке /usr/src

KiWi писал(а):
16.09.2010 12:24
В debian можно сказать apt-get source rtorrent.
Поправить debian/rules и собрать, внимание, deb-пакет!

Хмм... до этого никогда не пробовал получать исходники с помощью apt-src. Попробовал, получит исходники libtorrent с уже сформированным скриптом configure, мало того мне было предложено установить необходимые пакеты для сборки на что я согласился.

Теперь configure больше не фейлится. Зато фейлится make:

Код: Выделить всё

make  all-recursive
make[1]: Entering directory `/usr/src/libtorrent-0.11.9'
Making all in src
make[2]: Entering directory `/usr/src/libtorrent-0.11.9/src'
Making all in torrent
make[3]: Entering directory `/usr/src/libtorrent-0.11.9/src/torrent'
Making all in data
make[4]: Entering directory `/usr/src/libtorrent-0.11.9/src/torrent/data'
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT block.lo -MD -MP -MF ".deps/block.Tpo" -c -o block.lo block.cc; \
    then mv -f ".deps/block.Tpo" ".deps/block.Plo"; else rm -f ".deps/block.Tpo"; exit 1; fi
mkdir .libs
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT block.lo -MD -MP -MF .deps/block.Tpo -c block.cc  -fPIC -DPIC -o .libs/block.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT block_list.lo -MD -MP -MF ".deps/block_list.Tpo" -c -o block_list.lo block_list.cc; \
    then mv -f ".deps/block_list.Tpo" ".deps/block_list.Plo"; else rm -f ".deps/block_list.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT block_list.lo -MD -MP -MF .deps/block_list.Tpo -c block_list.cc  -fPIC -DPIC -o .libs/block_list.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file.lo -MD -MP -MF ".deps/file.Tpo" -c -o file.lo file.cc; \
    then mv -f ".deps/file.Tpo" ".deps/file.Plo"; else rm -f ".deps/file.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file.lo -MD -MP -MF .deps/file.Tpo -c file.cc  -fPIC -DPIC -o .libs/file.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file_list.lo -MD -MP -MF ".deps/file_list.Tpo" -c -o file_list.lo file_list.cc; \
    then mv -f ".deps/file_list.Tpo" ".deps/file_list.Plo"; else rm -f ".deps/file_list.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file_list.lo -MD -MP -MF .deps/file_list.Tpo -c file_list.cc  -fPIC -DPIC -o .libs/file_list.o
if /bin/sh ../../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../..    -g -O2 -g -DDEBUG -fvisibility=hidden   -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include   -MT file_list_iterator.lo -MD -MP -MF ".deps/file_list_iterator.Tpo" -c -o file_list_iterator.lo file_list_iterator.cc; \
    then mv -f ".deps/file_list_iterator.Tpo" ".deps/file_list_iterator.Plo"; else rm -f ".deps/file_list_iterator.Tpo"; exit 1; fi
 g++ -DHAVE_CONFIG_H -I. -I. -I../../.. -I. -I./.. -I./../.. -I../../.. -g -O2 -g -DDEBUG -fvisibility=hidden -I/usr/include/sigc++-2.0 -I/usr/lib/sigc++-2.0/include -MT file_list_iterator.lo -MD -MP -MF .deps/file_list_iterator.Tpo -c file_list_iterator.cc  -fPIC -DPIC -o .libs/file_list_iterator.o
In file included from file_list_iterator.cc:42:
file_list_iterator.h: In member function 'uint32_t torrent::FileListIterator::depth() const':
file_list_iterator.h:64: error: 'abs' is not a member of 'std'
make[4]: *** [file_list_iterator.lo] Ошибка 1
make[4]: Leaving directory `/usr/src/libtorrent-0.11.9/src/torrent/data'
make[3]: *** [all-recursive] Ошибка 1
make[3]: Leaving directory `/usr/src/libtorrent-0.11.9/src/torrent'
make[2]: *** [all-recursive] Ошибка 1
make[2]: Leaving directory `/usr/src/libtorrent-0.11.9/src'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/usr/src/libtorrent-0.11.9'
make: *** [all] Ошибка 2


Хинт: файл debian/rules и команда debuild.
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

Bizdelnick писал(а):
22.09.2010 02:06
Хоть бы погуглили, как это делается.
http://www.opennet.ru/base/sys/debian_backport.txt.html
http://www.debian.org/doc/maint-guide/index.ru.html#contents

Откуда ж мне знать что гуглить. Я такое слово - бэкпорт только что из статьи узнал.

Ещё раз. Мне всегда казалось, что программу сначала нужно скомпилировать, а потом всё что скомпилировалось закатать в пакет. В статье же нигде не написано, что нужно вводить ./configure или make, "умная" команда dpkg-buildpackade сама всё сделает. А вот как мне поступать, если программу нужно переконфигурировать?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21528
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Сборка пакетов (поиск ошибок)

Сообщение Bizdelnick »

sunny1983 писал(а):
22.09.2010 23:43
как мне поступать, если программу нужно переконфигурировать?

KiWi писал(а):
22.09.2010 02:09
Поправить debian/rules

Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

KiWi писал(а):
16.09.2010 12:24
Поправить debian/rules

И что тут править:

Код: Выделить всё

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk

DEB_OPT_FLAG = -fno-strict-aliasing
DEB_CONFIGURE_EXTRA_FLAGS = --enable-aligned
DEB_DH_INSTALL_SOURCEDIR = debian/tmp
DEB_INSTALL_DOCS_ALL := --exclude=NEWS

Куда прописывать опции, передаваемые скрипту configure, такие как --prefix=/usr? И опять же, конкретно об этой опции, исходники разработчика обычно настроены по умолчанию так, что пакет устанавливается в /usr/local, в то время как бинарные пакеты ставятся в /usr. Так надо ли менять /usr/local на /usr или в исходниках, получаемых с репозитория они уже поменяны?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

sunny1983 писал(а):
26.09.2010 22:38
KiWi писал(а):
16.09.2010 12:24
Поправить debian/rules

И что тут править:

Код: Выделить всё

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/rules/simple-patchsys.mk

DEB_OPT_FLAG = -fno-strict-aliasing
DEB_CONFIGURE_EXTRA_FLAGS = --enable-aligned
DEB_DH_INSTALL_SOURCEDIR = debian/tmp
DEB_INSTALL_DOCS_ALL := --exclude=NEWS

Куда прописывать опции, передаваемые скрипту configure, такие как --prefix=/usr? И опять же, конкретно об этой опции, исходники разработчика обычно настроены по умолчанию так, что пакет устанавливается в /usr/local, в то время как бинарные пакеты ставятся в /usr. Так надо ли менять /usr/local на /usr или в исходниках, получаемых с репозитория они уже поменяны?

1. ПОЧИТАЙТЕ ПРО СБОРКУ DEB-ПАКЕТОВ
2. КУПИТЕ СЛОВАТЬ

На этом всё.
Спасибо сказали:
Аватара пользователя
sunny1983
Сообщения: 357
ОС: GNU/Linux 4.x (Fedora, Debian)

Re: Сборка пакетов (поиск ошибок)

Сообщение sunny1983 »

KiWi писал(а):
27.09.2010 03:13
1. ПОЧИТАЙТЕ ПРО СБОРКУ DEB-ПАКЕТОВ
2. КУПИТЕ СЛОВАРЬ

То есть вы советуете мне изучить со словарём мегабайты англоязычных руководств, а также изучить синтаксисы мейкфайлов, языков: си, пифон и джава, а также баш-скриптинг. А пять лет в ВУЗе проучиться не посоветуете? Так я и так учусь, только данные вопросы мы не проходим.
Если бы у меня было слишком много свободного времени, то я может быть для поисков ответов и воспользовался гуглем и словарём, а сейчас мне проще спросить на форуме специалистов, чтобы они объяснили всё на пальцах. А мне нужно получить рабочую версию rtorrent, чтобы с её помощью скачать vmware, который мне сейчас позарез необходим. Заодно уяснить для себя как это делать грамотно, потому как rtorrent - это не последнее что я собираю.
Ниже ссылка на тему в ЛОРе, где я задал аналогичный вопрос:
http://www.linux.org.ru/forum/general/5372267
Спасибо сказали:
Аватара пользователя
Sora
Сообщения: 243
ОС: RFR_14

Re: Сборка пакетов (поиск ошибок)

Сообщение Sora »

sunny1983 писал(а):
27.09.2010 13:33
KiWi писал(а):
27.09.2010 03:13
1. ПОЧИТАЙТЕ ПРО СБОРКУ DEB-ПАКЕТОВ
2. КУПИТЕ СЛОВАРЬ

То есть вы советуете мне изучить со словарём мегабайты англоязычных руководств, а также изучить синтаксисы мейкфайлов, языков: си, пифон и джава, а также баш-скриптинг. А пять лет в ВУЗе проучиться не посоветуете? Так я и так учусь, только данные вопросы мы не проходим.
Если бы у меня было слишком много свободного времени, то я может быть для поисков ответов и воспользовался гуглем и словарём, а сейчас мне проще спросить на форуме специалистов, чтобы они объяснили всё на пальцах. А мне нужно получить рабочую версию rtorrent, чтобы с её помощью скачать vmware, который мне сейчас позарез необходим. Заодно уяснить для себя как это делать грамотно, потому как rtorrent - это не последнее что я собираю.
Ниже ссылка на тему в ЛОРе, где я задал аналогичный вопрос:
http://www.linux.org.ru/forum/general/5372267

Зачем ругаться то? Никто вам ничем не обязан. А для линукса надо много времени. Да и знание английского по моему норма в наше время.
Смените дистрибутив, ту же Ubuntu или Fedora, в репах всегда более-менее свежее ПО.
AMD 4600+, 4Gb DDRII-800, GF GTS250 512Mb, HDD 750Gb WD
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

sunny1983 писал(а):
27.09.2010 13:33
То есть вы советуете мне изучить со словарём мегабайты англоязычных руководств, а также изучить синтаксисы мейкфайлов, языков: си, пифон и джава, а также баш-скриптинг. А пять лет в ВУЗе проучиться не посоветуете? Так я и так учусь, только данные вопросы мы не проходим.

1. debian/rules -- это просто sh и ничего больше
2. достаточно перевести то, что написано в debian/rules -- тогда, возможно, поймёте, что там написано
3. ВУЗ -- нет, не советую -- это личное дело каждого
4. и vmware скачивается с официального сайта по http/ftp(а желание скачать из торрента, скорее всего, говорит о том, что вы -- вор)
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Сборка пакетов (поиск ошибок)

Сообщение arkhnchul »

а желание скачать из торрента, скорее всего, говорит о том, что вы -- вор

давно по http/ftp быстрее качается, чем через торрент?
Losing is fun!
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Сборка пакетов (поиск ошибок)

Сообщение KiWi »

arkhnchul писал(а):
27.09.2010 17:13
а желание скачать из торрента, скорее всего, говорит о том, что вы -- вор

давно по http/ftp быстрее качается, чем через торрент?

Учитывая, что автор из торрентов сейчас не качает, а по http/ftp мог бы уже давно качать -- то, да, в данном случае -- http/ftp быстрее.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Сборка пакетов (поиск ошибок)

Сообщение sash-kan »

KiWi писал(а):
27.09.2010 16:23
debian/rules -- это просто sh и ничего больше
поправочка: вообще-то обычно это всё-таки make-файл.

Код: Выделить всё

#!/usr/bin/make -f
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: