Симоне! Я знаю як ти почуваєшся; Я також боровся з цією частиною вивчення Linux. Спираючись на власний досвід, я написав підручник про деякі пункти, до яких ви звертаєтесь (здебільшого як посилання на себе!): Http://easyaspy.blogspot.com/2008/12/buildinginstalling-application-from.html . Я думаю, ви оціните мою замітку про те, як прості програми Python створюються / встановлюються. :)
Сподіваюся, що це допомагає! І із задоволенням складаю.
Тім Джонс
Створення / встановлення програми з джерела в Ubuntu Linux
Хоча сховища Ubuntu переповнені чудовими програмами, в той чи інший момент ви зобов'язані зіткнутися з тим інструментом "must-have", який не знаходиться у сховищах (або не має пакета Debian) або вам потрібен новіша версія, ніж у сховищах. Що ти робиш? Ну, ви повинні створити додаток з джерела! Не хвилюйтесь, це справді не так складно, як це звучить. Ось кілька порад, заснованих на моєму досвіді переходу на посаду аматора! (Хоча я використовую Ubuntu для цього прикладу, загальні концепції повинні застосовуватися до більшості будь-якого дистрибутиву Unix / Linux, наприклад Fedora, і навіть платформи Cygwin у Windows.)
Основний процес складання (компілювання) більшості програм із джерела дотримується цієї послідовності: configure -> compile -> install. Типові команди Unix / Linux для цього: config
-> make
-> make install
. У деяких випадках ви навіть знайдете веб-сторінки, які показують, що все це можна об'єднати в одну команду:
$ config && make && make install
Звичайно, ця команда передбачає, що жодного з цих кроків немає проблем. Ось тут і приходить веселощі!
Починаємо
Якщо ви раніше не компілювали додаток з джерела у вашій системі, вам, мабуть, потрібно буде налаштувати його за допомогою деяких загальних інструментів розробки, таких як gcc
набір компілятора, деякі загальні файли заголовків (вважайте це кодом, який вже був написаний іншим, хто використовується програмою, яку ви встановлюєте), і інструментом make. На щастя, в Ubuntu існує метапакет, який називається, build-essential
що встановить це. Щоб встановити його (або просто переконайтесь, що він у вас вже є!), Запустіть цю команду в терміналі:
$ sudo apt-get install build-essential
Тепер, коли у вас є основна установка, завантажте вихідні файли додатків і збережіть їх у каталозі, в якому ви маєте права читання / запису, наприклад, у "домашній" каталог. Зазвичай вони знаходяться в архівному файлі з розширенням файлу .tar.gz
або .tar.bz2
. .tar
Просто означає , що це «архів стрічка», яка являє собою угруповання файлів, що зберігають свою відносну структуру каталогів. .gz
Чи означає GZIP (GNU Zip), який є популярним форматом стиснення Unix / Linux. Аналогічно, .bz2
розшифровується bzip2, який є більш новим форматом стиснення, який забезпечує більш високу компресію (менший розмір стисненого файлу), ніж gzip.
Завантаживши вихідний файл, відкрийте вікно терміналу (системний термінал у меню Ubuntu) та перейдіть до каталогу, де ви зберегли свій файл. (Я буду використовувати ~/download
в цьому прикладі. Тут '~' - це ярлик до вашого домашнього каталогу.) Використовуйте команду tar для отримання файлів із завантаженого архіву:
Якщо ваш файл є архівом gzip (наприклад, закінчується .tar.gz
), використовуйте команду:
$ tar -zxvf filename.tar.gz
Якщо ваш файл є архівом bzip2 (наприклад, закінчується .tar.bz2
), скористайтеся командою:
$ tar -jxvf filename.tar.gz
Порада: Якщо вам не потрібно запам’ятовувати всі комутатори командного рядка для вилучення архівів, я рекомендую отримати одну (або обидві) ці утиліти: dtrx (мій улюблений!) Або деко (більш популярний). За допомогою будь-якої з цих утиліт ви просто вводите ім'я утиліти (dtrx чи deco) та ім'я файлу, це робить все інше. Обидва ці "знають", як обробляти більшість архівів у будь-якому форматі, який ви, швидше за все, будете працювати, і вони мають велику обробку помилок.
При будівництві з джерела існують два поширені типи помилок, з якими ви можете зіткнутися:
- Помилки конфігурації виникають під час запуску сценарію конфігурації (зазвичай він називається config або configure) для створення файлу makefile, який є специфічним для вашої установки.
- Помилки компілятора трапляються, коли ви запускаєте команду make (після створення файлу makefile), і компілятор не в змозі знайти потрібний код.
Ми розглянемо кожне з них і обговоримо, як їх вирішити.
Помилки конфігурації та конфігурації
Після того, як ви вилучили файл архіву вихідного коду, у терміналі слід перейти до каталогу, який містить витягнуті файли. Зазвичай ім'я цього каталогу буде таким самим, як ім'я файлу (без .tar.gz
або .tar.bz2
розширення). Однак іноді ім'я каталогу - це лише назва програми без будь-якої інформації про версію.
У вихідному каталозі шукайте README
файл та / або INSTALL
файл (або щось із подібними іменами). Ці файли зазвичай містять корисну інформацію про те, як скласти / скласти програму та встановити її, включаючи інформацію про залежності. "Залежності" - це просто фантазійне ім'я для інших компонентів або бібліотек, необхідних для успішної компіляції.
Після того, як ви прочитали файл README
та / або INSTALL
файл (і, сподіваємось, переглянули будь-яку відповідну документацію в Інтернеті для програми), знайдіть виконуваний файл (чи має дозвіл "x" у файлі) названий файл config
або configure
. Іноді файл може мати розширення, наприклад .sh
(наприклад, config.sh
). Зазвичай це сценарій оболонки, який запускає деякі інші утиліти, щоб підтвердити, що у вас є "здорове" середовище для компіляції. Іншими словами, він перевірить, чи встановлено у вас все, що вам потрібно.
Порада: Якщо це програма на основі Python, замість конфігураційного файлу слід знайти файл з назвою setup.py
. Програми Python, як правило, дуже прості в установці. Щоб встановити цю програму як root (наприклад, поставте sudo перед наступною командою під Ubuntu), запустіть цю команду:
$ python setup.py install
Це повинно бути все, що вам потрібно зробити. Ви можете пропустити решту цього підручника і перейти безпосередньо до використання та насолоджуватися вашою програмою.
Запустіть сценарій конфігурації в терміналі. Як правило, ви можете (і повинні!) Запустити свій конфігураційний сценарій зі звичайним обліковим записом користувача.
$ ./config
Сценарій відображатиме деякі повідомлення, щоб дати вам уявлення про те, що він робить. Часто сценарій дасть вам вказівку на те, чи вдався він чи не вдався, а якщо він не вдався, якусь інформацію про причину відмови. Якщо ви не отримуєте жодних повідомлень про помилки, тоді, як правило, ви можете припустити, що все пройшло нормально.
Якщо ви не знайдете жодного сценарію, схожого на сценарій конфігурації, то це означає, що додаток дуже простий і він не залежить від платформи. Це означає, що ви можете просто перейти до кроку збирання / компілювання нижче, тому що надані Makefile
повинні працювати в будь-якій системі.
Приклад
У цьому підручнику я буду використовувати текстовий RSS-рідер під назвою Newsbeuter як приклад для типів помилок, з якими ви можете зіткнутися під час створення програми. Для Newsbeuter назва сценарію конфігурації config.sh
. У моїй системі під час запуску config.sh
трапляються такі помилки:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ ./config.sh
Checking for package sqlite3... not found
You need package sqlite3 in order to compile this program.
Please make sure it is installed.
Провівши деякі дослідження, я виявив, що насправді sqlite3
додаток було встановлено. Однак, оскільки я намагаюся створити з джерела, це підказка, що config.sh
насправді шукають бібліотеки (заголовки) розвитку sqlite3
. У більшості пакунків Ubuntu встановлений відповідний пакунок для розробки, який закінчується -dev
. (Інші платформи, такі як Fedora, часто використовують суфікс -devel
для розробки пакетів.)
Щоб знайти відповідний пакет для пакета sqlite3
розробки, ми можемо використовувати apt-cache
утиліту Ubuntu (і, аналогічно, yum
утиліту у Fedora):
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-cache search sqlite
Ця команда повертає досить великий список результатів, тому нам доведеться зробити трохи детективної роботи, щоб визначити, який саме відповідний пакет. У цьому випадку виявляється відповідний пакет libsqlite3-dev
. Зауважте, що іноді в шуканому нами пакеті буде lib
префікс замість того ж самого пакета плюс -dev
. Це тому, що іноді ми просто шукаємо спільну бібліотеку, яка може використовуватися багатьма різними програмами. Щоб встановити libsqlite3-dev
, запустіть типову команду apt-get install у терміналі:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ sudo apt-get install libsqlite3-dev
Тепер нам потрібно запустити config.sh
ще раз, щоб переконатися, що ми вирішили цю проблему залежності і що більше не виникне проблем із залежністю. (Поки я не показуватиму це тут, у випадку Newsbeuter, мені також довелося встановити libcurl4-openssl-dev
пакунок.) Також, якщо ви встановите пакет розробки (як libsqlite3-dev
) і пов'язаний пакет додатків (наприклад, sqlite3
), це не вже встановлена, більшість систем автоматично встановлюватиме відповідний пакет додатків одночасно.
Коли конфігурація працює успішно, результатом буде те, що вона створить один або кілька файлів створення. Ці файли, як правило, називають Makefile
(пам’ятайте, що випадок імені файлу має значення в Unix / Linux!) Якщо пакет складання включає підкаталоги, такі як src
тощо, кожен із цих підкаталогів також буде містити a Makefile
.
Помилки побудови та компіляції
Тепер ми готові фактично скласти заявку. Це часто називають будівництвом, а назва запозичена з реального процесу побудови чогось. Різні "шматочки" програми, які, як правило, є декількома файлами вихідного коду, об'єднуються разом для формування загальної програми. Утиліта make керує процесом збирання та закликає інші програми, такі як компілятор і лінкер, фактично виконати роботу. У більшості випадків ви просто запускаєте make (зі своїм звичайним обліковим записом користувача) з каталогу, де ви запустили конфігурацію. (У кількох випадках, наприклад, для компіляції програм, написаних з бібліотекою Qt, вам потрібно буде замість цього запустити інший додаток "обгортки", наприклад, qmake. Знову ж таки, завжди перевіряйте деталі README
та / або INSTALL
документи.)
Як і у сценарії конфігурації, описаному вище, коли ви запускаєте make (або подібну утиліту) в терміналі, він відображатиме деякі повідомлення про те, що виконується, та будь-які попередження та помилки. Зазвичай ви можете ігнорувати попередження, оскільки вони в основному стосуються розробників програми та говорять їм, що існують деякі стандартні практики, які порушуються. Зазвичай ці попередження не впливають на функцію програми. З іншого боку, потрібно усунути помилки компілятора. З Newsbeuter, коли я бігав робити, на деякий час все пішло нормально, але потім я отримав помилку:
tester@sitlabcpu22:~/download/newsbeuter-1.3$ make
...
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/configparser.o -c src/configparser.cpp
c++ -ggdb -I/sw/include -I./include -I./stfl -I./filter -I. -I./xmlrss -Wall -Wextra -DLOCALEDIR=\"/usr/local/share/locale\" -o src/colormanager.o -c src/colormanager.cpp
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:5:18: error: stfl.h: No such file or directory
In file included from ./include/pb_view.h:5,
from src/colormanager.cpp:4:
./include/stflpp.h:33: error: ISO C++ forbids declaration of \u2018stfl_form\u2019 with no type
./include/stflpp.h:33: error: expected \u2018;\u2019 before \u2018*\u2019 token
./include/stflpp.h:34: error: ISO C++ forbids declaration of \u2018stfl_ipool\u2019 with no type
./include/stflpp.h:34: error: expected \u2018;\u2019 before \u2018*\u2019 token
make: *** [src/colormanager.o] Error 1
Процес виготовлення припиниться, як тільки з’явиться перша помилка. Поводження з помилками компілятора часом може бути складним бізнесом. Ви повинні подивитися на помилки, щоб знайти деякі підказки про проблему. Зазвичай проблема полягає в тому, що деякі файли заголовків, які зазвичай мають розширення .h
або .hpp
, відсутні. У випадку помилки, зазначеної вище, очевидно, що проблема полягає в тому, що stfl.h
файл заголовка неможливо знайти. Як показує цей приклад, ви хочете переглянути перші рядки повідомлення про помилку і пропрацювати свій шлях вниз, щоб знайти основну причину проблеми.
Переглянувши документацію Newsbeuter (яку я повинен був зробити ще до того, як почати, але тоді ця частина підручника не була б дуже значущою!), Я виявила, що для неї потрібна стороння бібліотека під назвою STFL. То що ми робимо в цьому випадку? Ну, ми, по суті, повторюємо цей самий той самий процес для потрібної бібліотеки: отримати бібліотеку та виконати для неї процес налаштування-збірки-встановлення, а потім відновити створення потрібного додатку. Наприклад, у випадку з STFL, мені довелося встановити libncursesw5-dev
пакет, щоб він міг правильно скластись . (Зазвичай не потрібно повторювати етап налаштування нашої оригінальної програми після встановлення іншого необхідного додатка, але це ніколи не шкодить.)
Після успішної установки інструментарію STFL процес виготовлення Newsbeuter пройшов успішно. Процес виготовлення зазвичай підбирається там, де він залишається (в момент помилки). Таким чином, усі файли, які вже успішно складені, не будуть перекомпільовані. Якщо ви хочете перекомпілювати все, ви можете запустити очистити все, щоб видалити всі складені об'єкти, а потім запустіть зробити знову.
Встановлення
Після успішного завершення процесу збирання ви готові встановити додаток. У більшості випадків, щоб встановити додаток у загальні області файлової системи (наприклад, /usr/bin
або /usr/share/bin
тощо), вам потрібно буде запустити інсталяцію як root. Установка - це дійсно найпростіший крок у всьому процесі. Щоб встановити, у терміналі запустіть:
$ make install
Перевірте результат цього процесу на наявність помилок. Якщо все вдалося, вам слід мати змогу запустити ім'я команди в терміналі, і воно запуститься. (Додайте & до кінця командного рядка, якщо це програма GUI або ви не зможете використовувати термінальний сеанс, поки програма не закінчиться.)
Коли ви створюєте додаток з джерела, він зазвичай не додає піктограму чи ярлик до меню GUI в Ubuntu. Це потрібно буде додати вручну.
І в основному це процес, хоча і потенційно ітеративний, створення та встановлення програми з джерела в Ubuntu. Коли ви зробите це лише кілька разів, це стане для вас другою природою!