Компіляція дистрибутива з початкових кодів або як зібрати deb пакет

Відео: Linux - Компіляція програм з вихідних в Ubuntu

Напевно деякі з читачів потрапляли в ситуацію, коли треба встановити програму, якої немає в репозиторії Ubuntu. Швидкий пошук по мережі допоможе виявити готові до установки deb-пакети, зроблені іншими користувачами системи. А якщо пакетів немає? Або інший варіант: в улюбленій програмі з`явилася нова функція або виправлена набридлива помилка, але в репозиторій нова версія потрапить не скоро. Як бути? Тут нам допоможе установка з початкових кодів, і зробимо ми її правильно і акуратно, скомпілювавши програму і створивши з неї свій deb-пакет, який потім і встановимо. І, можливо, з іншими користувачами поділимося.


Отже, почнемо нашу розповідь. Давним-давно, коли трава була зеленішою, а комп`ютери повністю займали величезні приміщення і мали при собі обслуговуючий персонал з декількох чоловік, програми писалися на одній мові - мові комп`ютера. Не було ні слів, ні букв, а були лише нескінченні послідовності одиниць і нулів. А оскільки комп`ютери в ті стародавні часи коштували мільйони доларів і робилися на замовлення, то і мова у кожного був свій. Програмістів було небагато, і їх ремесло більше нагадувало чорну магію. Згодом комп`ютери ставали менше, надійніше, швидше і дешевше-відповідно і програмістів ставало більше.

Говорити одиницями і нулями не всякому під силу, тому були винайдені «високорівневі» мови програмування: асемблер, 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}

Відео: Навчися Linux: збірка програм з вихідних (епізод 13)

Поділися в соц мережах:
Cхоже

Увага, тільки СЬОГОДНІ!