Донецкий техникум промышленной автоматики

Компіляція та встановлення програм з вихідних

  1. Правильна установка (Варіант №1)
  2. Правильна установка (Варіант №2)
  3. Установка (варіант №3)
  4. неправильна установка

Не рідко необхідні пакети можна знайти тільки у вигляді вихідних текстів, в даній статті описується метод установки пакета з вихідних текстів.

Програми зазвичай поширюються в упакованих архівах, це файли з розширеннями

<Some_app_name> .tar.gz (іноді .tgz) <some_app_name> .tar.bz2

Потрібно розуміти відмінність між архиватором і пакувальником.

Для архівації директорій і файлів використовується програма tar; результатом її роботи є файл з розширенням .tar. Грубо кажучи, це копія файлової системи - директорій і файлів з їх атрибутами і правами доступу, поміщена в один файл.

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

Програма tar вміє розпаковувати, тому не потрібно викликати gunzip, а можна просто вказати програмі tar, що файл потрібно cначала розпакувати. Наприклад, команда

tar -xvf <some_app_name> .tar.gz

відразу розпакує і розархівуйте. Відмінність файлів з розширеннями

<Some_app_name> .tar.gz

і

<Some_app_name> .tar.bz2

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

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

cd <Имя_Пакета> *

Для складання програм в GNU / Linux використовується (в основному) програма make, яка запускає інструкції з Makefile, але оскільки дистрибутивів GNU / Linux багато, і вони всі різні, то для того щоб зібрати програму, потрібно для кожного дистрибутива окремо прописувати шляху, де які лежать бібліотеки та заголовки. Програмісти не можуть вивчати кожен дистрибутив і для кожного окремо створювати Makefile. Тому придумали конфігуратор, які «вивчають» систему, і відповідно до отриманими знаннями створюють Makefile. Але на конфигураторе вони не зупинилися і придумали конфігуратор конфігуратор Для складання програм в GNU / Linux використовується (в основному) програма make, яка запускає інструкції з Makefile, але оскільки дистрибутивів GNU / Linux багато, і вони всі різні, то для того щоб зібрати програму, потрібно для кожного дистрибутива окремо прописувати шляху, де які лежать бібліотеки та заголовки ... на цьому вони зупинилися

Для збірки нам потрібні компілятори: вони прописані в залежностях пакета build-essential, так що досить встановити його з усіма залежностями. Ще потрібні autoconf і automake.

Отже, щоб зібрати щось з початкових кодів, потрібно спочатку зібрати конфигуратор; як зібрати конфигуратор, описано в файлі configure.in. Для складання конфігуратора необхідно виконати

. / bootstrap

або

. /autogen.sh

Якщо таких скриптів в архіві не виявилося, то можна виконати послідовно наступні команди:

aclocal autoheader automake --gnu --add-missing --copy --foreign autoconf -f -Wall

Всі ці команди використовують файл configure.in. Після виконання цих команд створиться файл configure. Після цього необхідно запустити конфігуратор для перевірки наявності всіх залежностей, а також установки додаткових опцій збірки (якщо можливо) і перегляду результату установки (опціонально- може не бути)

. / configure

Конфігуратор побудує Makefile грунтуючись на отриманих знаннях і файлі makefile.am. Можна передати конфігуратору опції, передбачені в исходниках програми, які дозволяють вмикати / вимикати ті або інші можливості програми, зазвичай дізнатися про них можна командою

. / Configure --help

Також є набір стандартних опцій, на зразок

--prefix =

, Яка вказує, який каталог використовувати для установки. Для Ubuntu зазвичай

--prefix = / usr

або

--prefix = / usr / local

БЕЗ слеша в кінці! Тепер можна запустити процес складання самої програми командою

make

Для збірки досить привілеїв звичайного користувача. Закінченням збирання можна вважати момент, коли команди в консолі перестануть «безладно» виконуватися і не буде слова error. Тепер все скомпільовано і готово для установки.

Зусилля витрачені на Правильну установку надалі з лишком окупляться в разі видалення або оновлення встановлення програмного забезпечення.

Правильна установка (Варіант №1)

Установка за допомогою утиліти checkinstall. Для установки виконайте

sudo apt-get install checkinstall

Мінус даного способу: checkinstall розуміє не всі вихідні, оскільки автор програми може написати особливі скрипти по установці і checkinstall їх не зрозуміє.

Для створення і установки deb-пакету необхідно виконати

sudo checkinstall

Правильна установка (Варіант №2)

Швидке створення deb-пакету «вручну».

Основна відмінність від попереднього способу полягає в тому, що в даному випадку ви створюєте пакет вручну і відстежуєте всі внесені зміни. Так само цей спосіб підійде вам, якщо вихідні не підтримують складання пакета з checkinstall.

fakeroot make install DESTDIR = `pwd` / tempinstall сd tempinstall mkdir DEBIAN find etc | sed "s / ^ / \ //"> DEBIAN / conffiles Package: Имя_Пакета Version: 1.2.3 Architecture: amd64 / i386 / armel / all Maintainer: Можете вписати своє ім'я, можете дурниці, але якщо залишити порожнім, то dpkg буде лаятися Depends: Тут можна вписати список пакетів через кому. Priority: optional Description: Теж треба щось вписати, щоб не кидало попередження

  • При необхідності там же можна створити скрипти preinst, postinst, prerm і postrm.

  • Створюємо deb-пакет, для чого виконуємо:

dpkg -b tempinstall sudo dpkg -i tempinstall.deb

Установка (варіант №3)

Процедура створення deb-пакету докладно описана в даній статті .

неправильна установка

Мінус даного способу полягає в тому, що якщо ви встановлюєте безпосередньо через make install, то нормально видалити або оновити пакет ви, швидше за все, не зможете. Більш того, установка нової версії поверх старої, швидше за все, затрёт ваші зміни в конфігах. make install робить рівно те, що йому сказано - виробляє установку файлів в потрібні місця, ігноруючи той факт, що там щось уже є. Після цього процесу абсолютно ніякої інформації про те, що і куди ставилося, отримати в легкотравному вигляді неможливо. Іноді, звичайно, Makefile підтримує дію uninstall, але це зустрічається не так часто, та й не факт, що коректно працює. Крім того, вам буде необхідно зберігати для деінсталяції розпаковане дерево початкових кодів та правил складання.

Для установки необхідно виконати

sudo make install

Для видалення пакета, встановленого цим способом необхідно виконати в кореневій директорії початкових кодів програми (там де ви запускали make install).

sudo make uninstall

Часто на етапі конфігурації конфигуратор повідомляє, що бракує тієї чи іншої бібліотеки. Назва бібліотеки, яке він повідомляє, не завжди відповідає назві пакета в Ubuntu. З власного досвіду можу порадити пошукати в Сінаптіке потрібний пакет, виключивши префікс lib, якщо знайшлося кілька пакетів розрізняються приставкою -dev в назві, то вам потрібно встановити саме -dev пакет (зазвичай він тягне за собою і не -dev пакет). Можна ще пошукати за допомогою http://packages.ubuntu.com/ , Ввівши ім'я бібліотеки в пошук по вмісту пакетів, аналогічно, якщо знайдеться dev і не dev, потрібні обидва Часто на етапі конфігурації конфигуратор повідомляє, що бракує тієї чи іншої бібліотеки . Ну або просто пошукати в Google .

Пакети з буквами mm в кінці опису - це пакети для C ++ програм. Список для bmpx, але підійде майже для будь-якої GTK2 / Gnome програми. Так що якщо не виходить зібрати, то подивіться на цей список і звірте з тим що у вас встановлено.

Compile: Runtime: X libx11-dev libx11-6 GlibMM libglibmm-2.4-dev libglibmm-2.4-1c2a GTK + libgtk2.0-dev, gtk-doc-tools libgtk2.0-0 GTKMM libgtkmm-2.4-dev libgtkmm-2.4-1c2a Glade libglade2-dev libglade2-0 GladeMM libglademm-2.4-dev libglademm-2.4-1c2a XML libxml2-dev libxml2 XML ++ libxml ++ 2.6-dev libxml ++ 2.6c2a DBus libdbus-1-dev, libdbus-glib-1 dev libdbus-1-2, libdbus-glib-1-2 Alsa libasound2-dev libasound2 HAL libhal-dev, libhal-storage-dev libhal1, libhal-storage1 Gamin libgamin-dev libgamin0 Neon libneon25-dev libneon25 TagLib libtagc0-dev libtagc0 Startup -Notify libstartup-notification0-dev libstartup-notification0 Boost libboost-dev, libboost-filesystem-dev libboost-filesystem1.33.1 MusicBrainz libmusicbrainz4-dev libmusicbrainz4c2a GStreamer libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev libgstreamer0.10- 0, libgstreamer-plugins-base0.10-0