Напевно деякі з читачів потрапляли в ситуацію, коли треба встановити програму, якої немає в репозиторії Ubuntu. Швидкий пошук по мережі допоможе виявити готові до установки deb-пакети, зроблені іншими користувачами системи. А якщо пакетів немає? Або інший варіант: в улюбленій програмі з'явилася нова функція або виправлена набридлива помилка, але в репозиторій нова версія потрапить не скоро. Як бути? Тут нам допоможе установка з початкових кодів, і зробимо ми її правильно і акуратно, скомпілювавши програму і створивши з неї свій deb-пакет, який потім і встановимо. І, можливо, з іншими користувачами поділимося.
Отже, почнемо нашу розповідь. Давним-давно, коли трава була зеленішою, а комп'ютери повністю займали величезні приміщення і мали при собі обслуговуючий персонал з декількох чоловік, програми писалися на одній мові - мові комп'ютера. Не було ні слів, ні букв, а були лише нескінченні послідовності одиниць і нулів. А оскільки комп'ютери в ті стародавні часи коштували мільйони доларів і робилися на замовлення, то і мова у кожного був свій. Програмістів було небагато, і їх ремесло більше нагадувало чорну магію. Згодом комп'ютери ставали менше, надійніше, швидше і дешевше; відповідно і програмістів ставало більше.
Говорити одиницями і нулями не всякому під силу, тому були винайдені «високорівневі» мови програмування: асемблер, C, Pascal і інші. Ці мови набагато більше нагадували людські, і програмувати на них було набагато швидше і зручніше для всіх, так що програмування на машинних мовах поступово відмерли. Але був у них недолік: оскільки вони не були мовами, які комп'ютер безпосередньо розумів, був потрібний переклад з високорівневого мови на мову конкретного комп'ютера або сімейства комп'ютерів.
До речі, а де брати тарболи з кодами? Зазвичай посилання на них знаходяться на офіційному сайті проекту, на сторінці завантаження (download) де-небудь по сусідству зі словосполученням «source code». У нашому прикладі використовуються вихідні гри trackballs, знайдені на її офіційному сайті. Після розпакування перед нами лежить папка, а в папці безліч файлів, заглянувши в які ми побачимо здебільшого малозрозумілі тексти на різних мовах програмування. Однак парочка файлів заслуговує на нашу увагу, їх імена набрані прописними буквами. Це файли README і INSTALL. У файлі README, як правило, міститься важлива інформація, яку розробник програми хотів перш за все повідомити користувачеві. У файлі INSTALL, як і випливає з його назви, містяться інструкції по установці і список пакетів, необхідних для успішної компіляції програми.
В папці src містяться власне вихідні тексти програми на мові C ++, в інших - файли текстур, звуків, настановних скриптів, написаних на спеціальних мовах і інші. Приступимо до компіляції. Для перекладу вихідних текстів програми в зрозумілий комп'ютеру код нам не потрібно розбиратися в роботі компілятора або знати, для чого кожен з файлів потрібен, оскільки в більшості проектів вільного програмного забезпечення (ВПЗ) використовується утиліта make, призначена для автоматизації подібних операцій, і якщо в папці присутній файл Makefile, для компіляції досить перейти в цю папку і запустити make. Однак і Makefile потребує налаштування. Часто в папці з вихідними кодами є ще скрипт configure або заготовка для нього, configure.in. В останньому випадку замість скрипта треба запустити утиліту autoconf. Після успішного завершення роботи configure (або autoconf) і make, програма встановлюється командою sudo make install. Виглядає трохи заплутано, але насправді все просто. Відкриємо емулятор терміналу ( «Програми → Стандартні → Термінал») і наберемо відповідні команди, завершуючи кожну натисканням Enter і чекаючи успішного закінчення попередньої:
cd / повний / шлях / до / папці
./ configure
make
sudo make install
Ви напевно вже знайомі з пунктом меню «Установка / видалення ...». Він запускає простий графічний інсталятор, однак для наших цілей він не підійде. Нам буде потрібно більш потужний інструмент - synaptic.
Коли synaptic запуститься, вибираємо «Налаштування → Репозиторії» і у вікні перевіряємо, відзначений чи пункт «Вільне ПЗ, підтримуване співтовариством (universe)». Якщо немає, відзначаємо. Закриваємо вікно і натискаємо кнопку «Оновити», щоб отримати найсвіжіші список доступних пакунків. Після поновлення натискаємо кнопку «Знайти», в віконці, що з'явилося з випадаючого меню вибираємо «Опис і назву», щоб шукати не тільки по іменах пакетів, а й за описами; вбиваємо в пошуковий рядок ключові слова для шуканого пакету і тиснемо Enter.
Коли пакет знайдений, відзначаємо його для установки і натискаємо «Застосувати». Варто зауважити, що для компіляції програм крім власне пакетів виду, наприклад, libчайнік, потрібні відповідні пакети виду libчайнік-dev.
Ну і найпоширеніша помилка компіляції трапляється коли користувач не встановив базові, необхідні для компіляції чого-небудь взагалі інструменти. В Ubuntu їх за замовчуванням немає, тому доведеться їх встановлювати. На щастя, всі вони згруповані як залежності одного пакета - build-essential. Досить відзначити його, і synaptic сам запропонує встановити всі інші. Однак деякі відносно рідко використовуються в компіляції утиліти, можуть не бути встановлені. Якщо вам при компіляції попадається таке повідомлення:
Встановіть відсутній пакет (на зображенні повідомляється про наявність команди 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».
Як видно, папки з таким ім'ям не спостерігається. А це означає, що необхідно її спочатку створити і населити файлами за допомогою утиліти 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:
В першу чергу, програма цікавиться, як розбити тарбол на пакети. Виберемо один пакет - s (ingle) в разі звичайного одиночного додатки, бібліотеку - l (ibrary) в разі програми з ім'ям libчайнік і модуль ядра - k (ernel module) в разі модуля ядра. Коли вибір зроблений, dh_make відображає деякі дані про пакет і його творця. Ці дані будуть записані в файл control в папці debian.
Файл цього можна потім відредагувати. Файли emacsen - *. Ex, init.d.ex і manpage * в папці debian можна видалити, якщо програма відповідно не надає прекомпілірованние модулі emacs, що не запускається як системний сервіс і має при собі керівництво в форматі man.
Коли все готово, можна запускати компіляцію і збірку пакета:
dpkg-buildpackage -rfakeroot
Ось так виглядає успішне закінчення роботи dpkg-buildpackage для trackballs.
Серед створених dpkg-buildpackage файлів є і trackballs_1.1.2-1_i386.deb. Клацніть по ньому двічі або відкрийте за допомогою gdebi.
На закінчення зазначу, що тарболи - не єдиний шлях поширення вихідних текстів. Останнім часом все більш популярними стають так звані «системи управління версіями» (version control systems), що дозволяють програмістам більш тісно взаємодіяти і обмінюватися програмним кодом по мережі. Для користувачів ж це означає необхідність освоїти ще пару способів скачування початкових кодів. Часто команди для доступу публікуються в розділі завантаження, як, наприклад, на сайті Inkscape.
До зустрічі, з вами був Денис Шмаков.