Прийоми роботи в Ubuntu

Порада # 59: Встановлення програм із вихідних кодів

Коли немає репозитарію і немає пакета, надія все ще залишається. У цьому розділі описується, як зібрати з вихідного коду та встановити окремо взяті програми.

Раніше вважалося, що коли ви хочете встановити під Linux нову програму, ви повинні перейти на домашню сторінку проекту, знайти архів з вихідним кодам, завантажити його, а потім розкрити архів і відкомпілювати вихідний код. Спочатку в термінал буде видано багато текстових повідомлень, після чого ваша програма буде остаточно встановлена. Насправді такий підхід був звичайним явищем, тому багато дистрибутивів поставлялися з усіма встановленими основними компіляторами та бібліотеками. Ах, старі добрі часи.

Ці старі часи були не такими вже добрими. Реальність така, що поряд з тим, що було згадано вище, на вас покладалися деякі додаткові обов'язки:

  1. Ви повинні були повернутися до домашньої сторінки проекту, якщо ви виявляли, що є велика кількість залежностей від бібліотек, які потрібно відстежити, а також від інших програм, на яких ґрунтується проект.
  2. Якщо програмне забезпечення залежало від інших програм, вам, як правило, потрібно їх завантажити та відкомпілювати першими, тільки для того, щоб з'ясувати, чи є у них також зовнішні залежності, тому також потрібно було відвідати сторінки та цих проектів для того, щоб також відстежити ці залежності.
  3. Нарешті, після того, як ви витратите величезну кількість часу для відстеження всіх залежностей та успішної установки програмного забезпечення, розробник якраз випустить нову версію з більшими можливостями та меншимкількістю помилок, вам доведеться починати все з початку.

В даний час майже в кожному дистрибутиві, в тому числі і в Ubuntu, не тільки використовуютьсяпакети(програми, які були відкомпільовані та зібрані спеціально для вас), але також застосовуються деякі засоби автоматичного керування залежностями. Якщо ви хочете встановити програму, ви повинні тільки повідомити систему Ubuntu, яку програму потрібно встановити, і система знайде її та всі її залежності, і встановить їх для вас. Якщо ви хочете виконати оновлення, Ubuntu знайде для вас нові залежності та нові версії. В даний час так мало програм, для яких потрібно завантажувати та компілювати вихідний код, що Ubuntu навіть не встановлює (за замовчуванням) програми, які потрібні для компіляції вихідного коду. У дев'яти випадках з десяти пакет, який вам потрібен, або вже є в дистрибутиві, або, принаймні, вже є у вигляді попередньо відкомпілюваного пакета .deb (як встановити такі пакети, описується в розділі "Встановлюємо та видаляємо окремі файли .deb " [Рада # 57]).

Крім всього вищесказаного, є ще кілька обставин, за яких від вас буде потрібно завантаження та компіляція програми з вихідного коду:

  • Було випущено зовсім новий проект з відкритим кодом. Він настільки новий, що ніхто не вирішив зібрати його у вигляді пакетів для Ubuntu.
  • Є деяка особливість в ядрі або в іншій програмі, яка за замовчуванням відключена, або є патч, який ви хотіли б додати, тому вам необхідно скомпілювати ядро ​​з вихідного коду. (Втім, ви можете дізнатися, що можна налаштувати пакет.debз вихідним кодом [Рада # 63] таким чином, щоб отримати те, що вам потрібно).
  • Сторонній виробник обладнаннявипустив драйвери для Linux, однак, вони випущені тільки у вигляді вихідних кодів (або, можливо, вони реалізовані тільки у вигляді пакетів RPM, призначених для Red Hat та SUSE, а для будь-яких інших дистрибутивів - у вигляді файлу.tar.gz), а для Ubuntu ще не випущений якийсь уже готовий для використання пакет.
  • Ви самі програміст і хотіли б допомогти проекту з відкритим вихідним кодом, підготувавши для нього патчі, або, можливо, ви хочете почати роботу повністю над новим проектом.
  • Вийшла нова версія програми і ви не можете чекати, поки вона з'явиться у вигляді пакета, тому ви повинні зібрати пакет самостійно. (Втім, зауважимо, що, залежно від того, з якою програмою ви маєте справу, є ризик вивести з ладу інші частини системи, що залежать від старої версії програми. Зазвичай, коли має оновлюватися програма, що впливає на роботу інших програм, її встановлення та установка її залежностей повинна відбуватися до повної установки під контролем менеджером пакетів).

Застереження

Встановлення засобів компіляції

Якщо вам потрібно виконувати компіляцію з вихідного коду, вам потрібно спочатку встановити компілятор і всі інші пакети, необхідні для складання програм з вихідних текстів. У Ubuntu це робиться просто: достатньо відкрити менеджер пакетів, яким ви волієте користуватися, а потім знайти та встановити пакетbuild-essential. Будуть отримані та встановлені компілятори GNU C (gcc),make,g++, а також ряд інших програм, які вам знадобляться:

Отримуємо та компілюємо вихідний код

Після того, як всі ці програми будуть встановлені, скачайте tar-архів вашої програми і розпакуйте його кудись, наприклад, у ваш домашній директорій. Більшість архівіввитягуються у власні директорії (часто мають таку ж назву, як і програма), отже наступним кроком буде перехід (з допомогою командиcd) у цей директорий:

Для більшості сьогоднішніх програм використовується звичайний трикроковий метод конфігурування та компіляції, але перш ніж ви запустите цей процес, вам слід прочитати інструкції з установки, надані розробником (як правило, в головному директорії з вихідним кодом у файліINSTALLабоREADMEабо на головній сторінці проекту).

Крок 1: Конфігурація

Перший крок процесу створення, як правило, полягає в запуску скриптаconfigure, який розташований у головному директорії з вихідним кодом:

Ця програма просканує систему та перевірить наявність усіх бібліотеки, які необхідні програмі, а також знайде шляхи до деяких файлів та виконає інші налаштування. Якщо у вас немає всіх бібліотек, які потрібні програмі, скриптconfigureвидасть повідомлення про помилку та вкаже, якої бібліотеки не вистачає (або про те, що потрібна нова версія). Якщо ви побачите помилку цього виду, вам потрібно не тільки з'ясувати, в якому пакеті знаходиться ця бібліотека, але також завантажити пакет для розробника, в якому знаходяться всі файли заголовків для цієї бібліотеки (в Ubuntu більшість таких пакетів мають наприкінці доповнення- dev). Як тільки ці бібліотеки будуть встановлені, знову запустіть скрипт configure, щоб побачити, чи є всі інші бібліотеки, які вам потрібні.

Крок 2: Компіляція

Після того, як скриптconfigureуспішно завершить свою роботу, наступним кроком буде компіляція вихідного коду. У більшості сьогоднішніх проектів разом зі скриптомconfigureвикористовується скриптmakefiles, так що наступним кроком буде запускmakeз головного директорія з вихідним кодом:

Ви повинні побачити цілий потік повідомлень, що видаються компілятором, які промайнуть перед вами, і, зрештою, ви повинні знову повернутися до командного рядка. Під час виконання цього кроку можлива поява помилок, але з ними, як правило, впоратися набагато складніше, оскільки вони можуть бути результатом синтаксичної помилки у вихідному коді або виникнути через деяку іншу проблему. Якщо ви знайдете якусь помилку компіляції, перегляньте список розсилок або інші засоби підтримки, пов'язані з цією програмою, оскільки, можливо, це відома помилка; інакше заповніть звіт про помилку.

Крок 3: Встановлення

Після того, як вихідний код скомпільовано, останнім кроком буде встановлення програми в системі. У більшості програм функція, яка виконує інсталяцію, знаходиться у файліmakefiles; однак, відзначте, що ви, взагалі кажучи, повинні встановлювати програму з правами root, оскільки потрібно встановлювати файли в директорії/usrта інші директорії, запис в які можливі тільки з правамиroot. Переконайтеся, що ви все ще знаходитесь в директорії з вихідним кодом і наберіть:

Тепер програму буде встановлено в системі.

У деяких пакетах є також функція "uninstall" ("видалити"), яка видаляє програму із системи. Просто поверніться назад до основної директорії з вихідними кодами і виконайте команду:

Рада з приводу ради

У більшості випадків при встановленні пакета використовується процедура, яка встановлює додаток до директорії/usr/local. Але якщо ви хочете бути впевнені, що установка буде виконуватисьподалі від частини файлової системи, яка контролюється Ubuntu, додайте до команди ./configure параметр --prefix=pathname наступним чином:

Це працює майже завжди. Однак є деякі програми, в яких параметр --prefix не використовується, а деякі програми (такі, як додаються в модулі ядра) будуть розміщувати свої компоненти по всій файловій системі.