Главная Статьи Linux для чайников Компиляция дистрибутива из исходников или как собрать DEB пакет
Компиляция дистрибутива из исходников или как собрать DEB пакет
25.06.2009 21:30

Наверняка некоторые из читателей попадали в ситуацию, когда надо установить программу, которой нет в репозитории Ubuntu. Быстрый поиск по сети поможет обнаружить готовые к установке deb-пакеты, сделанные другими пользователями системы. А если пакетов нет? Или другой вариант: в любимой программе появилась новая функция или исправлена надоедливая ошибка, но в репозиторий новая версия попадёт не скоро. Как быть? Здесь нам поможет установка из исходников, и сделаем мы её правильно и аккуратно, скомпилировав программу и создав из неё свой deb-пакет, который затем и установим. И, возможно, с другими пользователями поделимся.

{mosloadposition debug}


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

 


Говорить единицами и нулями не всякому под силу, поэтому были изобретены «высокоуровневые» языки программирования: ассемблер, C, Pascal и другие. Эти языки гораздо больше напоминали человеческие, и программировать на них было гораздо быстрее и удобнее для всех, так что программирование на машинных языках постепенно отмерло. Но был у них недостаток: поскольку они не были языками, которые компьютер непосредственно понимал, требовался перевод с высокоуровневого языка на язык конкретного компьютера или семейства компьютеров.


Этот процесс перевода и называется компиляцией, а текст программы на высокоуровневом языке, требующий перевода — исходным текстом (source code). Со временем появились хитроумные языки, не требующие компиляции, такие как Python, Perl и LISP, однако компилируемые языки остаются популярными, главным образом из-за их более высокой скорости и «близости к железу».
Традиционно авторы программ для UNIX, и в особенности для свободных UNIX, предпочитали делиться своими творениями в наиболее удобном для других программистов формате — «тарболах» с исходными текстами программы. Тарбол (англ. tarball) — это архив с файлами в формате tar. Часто тарболы сжимают программой gzip (и тогда имя файла оканчивается на .tar.gz или .tgz) или bzip2 (окончание .tar.bz2 или .tbz2). Разумеется, чтобы извлечь файлы, надо пропустить архив обратно через использованную программу сжатия, и затем через tar. Но поскольку мы используем Ubuntu Linux, всё это можно сделать одним щелчком из контекстного меню.

 

Image



Кстати, а где брать тарболы с исходниками? Обычно ссылки на них находятся на официальном сайте проекта, на странице загрузки (download) где-нибудь по соседству со словосочетанием «source code». В нашем примере используются исходники игры trackballs, найденные на её официальном сайте. После распаковки перед нами лежит папка, а в папке множество файлов, заглянув в которые мы увидим большей частью малопонятные тексты на различных языках программирования. Однако парочка файлов заслуживает нашего внимания, их имена набраны прописными буквами. Это файлы README и INSTALL. В файле README, как правило, содержится важная информация, которую разработчик программы хотел прежде всего сообщить пользователю. В файле INSTALL, как и следует из его названия, содержатся инструкции по установке и список пакетов, необходимых для успешной компиляции программы.

 

 

Image



В папке src содержатся собственно исходные тексты программы на языке C++, в остальных — файлы текстур, звуков, установочных скриптов, написанных на специальных языках и другие. Приступим к компиляции. Для перевода исходных текстов программы в понятный компьютеру код нам не требуется разбираться в работе компилятора или знать, для чего каждый из файлов нужен, поскольку в большинстве проектов свободного программного обеспечения (СПО) используется утилита make, предназначенная для автоматизации подобных операций, и если в папке присутствует файл Makefile, для компиляции достаточно перейти в эту папку и запустить make. Однако и Makefile нуждается в настройке. Часто в папке с исходниками есть ещё скрипт configure или заготовка для него, configure.in. В последнем случае вместо скрипта надо запустить утилиту autoconf. После успешного завершения работы configure (или autoconf) и make, программа устанавливается командой sudo make install. Выглядит немного запутанно, но в действительности всё просто. Откроем эмулятор терминала («Приложения→Стандартные→Терминал») и наберём соответствующие команды, завершая каждую нажатием Enter и дожидаясь успешного окончания предыдущей:


cd /полный/путь/к/папке
./configure
make
sudo make install

 

 

Image



Чтобы получить полный путь к папке trackballs, достаточно перетащить её в окно терминала. Если все команды завершились успешно, то есть без слов «ошибка» или «error», команда trackballs должна запустить игру. Однако часто бывает, что ошибки возникают, причём возникают уже на стадии выполнения configure. Если это случилось, не стоит паниковать, а стоит внимательно просмотреть тот текст, что выплеснул в терминал configure: скорее всего причина всего лишь в отсутствующем пакете, и устраняется его установкой как, например, в случае другой игры, Liquid War 6.

 

 

Image



Вы наверняка уже знакомы с пунктом меню «Установка/удаление…». Он запускает простой графический установщик, однако для наших целей он не подойдёт. Нам потребуется более мощный инструмент — synaptic.

 

Image



Когда synaptic запустится, выбираем «Настройки→Репозитории» и в появившемся окне проверяем, отмечен ли пункт «Свободное ПО, поддерживаемое сообществом (universe)». Если нет, отмечаем. Закрываем окно и нажимаем кнопку «Обновить», чтобы получить самые свежие списки доступных пакетов. После обновления нажимаем кнопку «Найти», в появившемся окошке из выпадающего меню выбираем «Описание и название», чтобы искать не только по именам пакетов, но и по описаниям; вбиваем в поисковую строку ключевые слова для искомого пакета и жмём Enter.

 

 

Image



Когда пакет найден, отмечаем его для установки и нажимаем «Применить». Стоит заметить, что для компиляции программ помимо собственно пакетов вида, к примеру, libчайник, требуются соответствующие пакеты вида libчайник-dev.

 

Image



Ну и самая распространённая ошибка компиляции случается когда пользователь не установил базовые, необходимые для компиляции чего-либо вообще инструменты. В Ubuntu их по умолчанию нет, поэтому придётся их устанавливать. К счастью, все они сгруппированы как зависимости одного пакета — build-essential. Достаточно отметить его, и synaptic сам предложит установить все остальные. Однако некоторые относительно редко используемые в компиляции утилиты, могут не быть установлены. Если вам при компиляции попадается такое сообщение:

 

 

Image



Установите недостающий пакет (на картинке сообщается о наличии команды makeinfo в пакете texinfo). Если же проблема, с которой вы столкнулись, не решается простой установкой недостающих пакетов, ступайте на ближайший форум поддержки и вместе с описанием ситуации обязательно запостите содержимое терминала от конца и до первых сообщений об ошибках (ищите «error») включительно.


Ну а теперь, когда вы научились справляться с простейшими огрехами компиляции, пришла пора научиться создавать свои deb-пакеты! «Зачем? — спросите вы. — Ведь программа уже установлена и работает». Ну, во-первых, установлена она, прямо скажем, неуклюже, скорее всего где-то в дебрях /usr/local/, а не как полагается всем порядочным пользовательским программам — в /usr/. Само по себе это не повод для беспокойств, однако есть возможность возникновения конфликтов между разными версиями одной библиотеки, установленными в /usr/lib/ (или /lib/) и /usr/local/lib/. Во-вторых, чтобы иметь возможность удалить программу, вам придётся держать под рукой папку, в которой вы её откомпилировали. В её мейкфайле (или мейкфайлах; бывает, что их несколько в разных подпапках) содержатся инструкции по удалению программы, и чтобы сделать это, необходимо перейти в папку и выполнить:


sudo make uninstall


Ладно, если только одна программа из тарбола установлена. А если их несколько? А что если со временем в репозитории появится более новая и стабильная версия? Ведь программа, установленная описанным мною способом, в системе управления пакетами Ubuntu не регистрируется, то есть synaptic, «простой установщик» и менеджер обновлений о её присутствии даже не подозревают. Только если программа была установлена в /usr/, при попытке установить версию из репозитория могут возникнуть ошибки, а после удаления — остаться лишние файлы.
По этим и другим причинам, научимся собирать deb-пакеты.


Система управления пакетами в Ubuntu взята от одного из известнейших и основополагающих дистрибутивов — Debian. Система эта очень гибкая, надёжная и масштабируемая, однако и простотой создания пакетов не славится. Некоторые разработчики могут предпочесть создавать пакеты руками, ну а мы воспользуемся двумя утилитами, значительно автоматизирующими этот процесс, благо и пакет мы делаем в основном для себя. Первая утилита — dh_make (пакет dh-make, также установите пакеты debhelper и devscripts). Она создаст за нас все необходимые для deb-пакета управляющие файлы и описания. Вторая — dpkg-buildpackage — скомпилирует программу с особыми настройками и упакует её вместе с управляющими файлами в deb-пакет.
Итак, у нас есть папка со свежераспакованными исходными текстами игры trackballs. Перейдём в эту папку, как и раньше, и посмотрим, есть ли в ней папка «debian».

 

Image



Как видно, папки с таким именем не наблюдается. А это значит, что необходимо её сначала создать и населить файлами с помощью утилиты dh_make. Вызывать её надо с параметром -f, указывающим путь к архиву, из которого содержимое папки на свет появилось. В данном случае это dh_make -f ../trackballs-1.1.2.tar.gz. Две точки обозначают папку на один уровень выше текущей, а текущая папка — trackballs-1.1.2. Выше неё, соответственно, рабочий стол, а на рабочем столе — искомый архив. Кстати, у dh_make особые требования к имени папки, в которой её запускают. Имя должно быть вида программа-версия, например, вундервафля-0.15b или ч3бур3йк4-42.5, причём прописных букв в названии быть не должно, т.е. Вундервафля-0.15b уже не потянет, придётся переименовать. Это связано с тем, что dh_make извлекает из названия папки название и версию программы, и вносит в файлы описания. Итак, запускаем dh_make:

 

 

Image



В первую очередь, программа интересуется, как разбить тарбол на пакеты. Выберем один пакет — s(ingle) в случае обычного одиночного приложения, библиотеку — l(ibrary) в случае программы с именем libчайник и модуль ядра — k(ernel module) в случае модуля ядра. Когда выбор сделан, dh_make отображает некоторые данные о пакете и его создателе. Эти данные будут записаны в файл control в папке debian.

 

Image



Файл сей можно затем отредактировать. Файлы emacsen-*.ex, init.d.ex и manpage* в папке debian можно удалить, если программа соответственно не предоставляет прекомпилированные модули emacs, не запускается как системный сервис и имеет при себе руководство в формате man.

 

 

Image



Когда всё готово, можно запускать компиляцию и сборку пакета:
dpkg-buildpackage -rfakeroot
Вот так выглядит успешное окончание работы dpkg-buildpackage для trackballs.

Среди созданных dpkg-buildpackage файлов есть и trackballs_1.1.2-1_i386.deb. Щёлкните по нему дважды или откройте с помощью gdebi.

В заключение замечу, что тарболы — не единственный путь распространения исходных текстов. В последнее время всё более популярными становятся так называемые «системы управления версиями» (version control systems), позволяющие программистам более тесно взаимодействовать и обмениваться программным кодом по сети. Для пользователей же это означает необходимость освоить ещё пару способов скачивания исходников. Часто команды для доступа публикуются в разделе загрузки, как, например, на сайте Inkscape.


До встречи, с вами был Денис Шмаков.

{mosloadposition cpanel}

{mosloadposition debug}

Комментарии (0)Добавить комментарий

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

busy

Похожие новости:
Новые материалы на эту тему:
Также рекомендуем к прочтению:

Обновлено 14.02.2011 13:37