Як компілювати та встановлювати програми з джерела


39

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

Порівняно з Windows, це легко. Вам (в значній мірі) потрібно використовувати програму інсталятора, яка виконує всю роботу в Майстрі. З Linux ... не так вже й багато.

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


7
"Порівняно з Windows, це легко. Вам (досить багато) потрібно використовувати програму інсталятора, яка виконує всю роботу в Майстрі. З Linux ... не так багато." У цьому питанні є слабка сторона. У Windows ви рідко отримуєте вихідний код, тож ви на милість того, хто склав пакет. Якщо ви подумаєте над цим, це не так сильно відрізняється від того, щоб сказати "не було пакета Linux, тому я повинен будувати з джерела", тобто. не було способу зробити це для початку. Будівництво з джерела зазвичай є крайнім заходом у * nix-land, але рідко є варіантом у Windows-Ville.
Avery Payne

2
Це було сказано ... +1 удар, щоб задати поширене запитання, на яке слід відповісти всім новачкам * nix систем. :) Будівництво з джерела іноді означає різницю між виправленням неприємної помилки та просто стражданням до наступного випуску програмного забезпечення. Це насправді не так вже й погано, і як багато хто тут зазначав, раз ви знаєте, на що звернути увагу і як це зробити, досить безболісно.
Avery Payne

Відповіді:


22

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

Здебільшого ви зробите будь-яке:

  1. Завантажте тарбол (файл tar.gz або tar.bz2), який є випуском конкретної версії вихідного коду
  2. Витягніть тарбол за допомогою команди на зразок tar zxvf myapp.tar.gzgzipped tarball або tar jxvf myapp.tar.bz2для bzipped tarball
  3. CD в ​​створений вище каталог
  4. бігати ./configure && make && sudo make install

Або:

  1. Використовуйте git або svn або будь-що інше, щоб витягнути останній вихідний код із офіційного сховища джерела
  2. CD в ​​створений вище каталог
  3. бігати ./autogen.sh && make && sudo make install

І налаштування, і autogen.sh приймуть аргумент --prefix, щоб вказати, де встановлено програмне забезпечення. Рекомендую перевірити Де я повинен розмістити програмне забезпечення, яке я збираю сам? поради щодо найкращого місця для встановлення програмного забезпечення на замовлення.


Чому autogen.sh використовується при отриманні останнього, але конфігурація / make використовується для офіційного випуску?
Луї Салін

1
Зазвичай люди, які хочуть програмного забезпечення "кровоточучої межі", витягнуть випуск із програмного забезпечення для управління версіями (наприклад, git, subversion або CVS). Це "кров'ячий край", тому що він, ймовірно, не перевірений, на відміну від випущеного тарболу, який (мабуть) був поручений як робочий (принаймні в основному). Мати сенс?
Метт Сіммонс

2
@ Matt, впевнений, що це має сенс, але я думаю, що коментар був спрямований більше на те, що Сенді тепер показала, що ніби в кожному багажнику git'd / svn'd є autogen.sh.
reiche

1
І курка в кожному горщику ... чи щось подібне. Чортве, час від часу я також натрапляю на програмне забезпечення без сценарію налаштування. Якби був простий, єдиний спосіб зробити це, нам би не потрібні пакунки ;-)
Метт Сіммонс,

Метт абсолютно правий, саме тому я сказав «здебільшого» і спершу виступав за пошук веб-сайту проекту. Поради autogen.sh/configure будуть стосуватися майже кожного модуля GNOME, а також багатьох інших проектів. Деякі проекти не використовують автоматичну функцію і матимуть лише Makefile, і ви просто запустите make && sudo make install. Деякі проекти Python матимуть лише setup.py, який ви зателефонуєте встановити (оскільки реального налаштування компіляції немає). Там також багато інших систем побудови / встановлення. Сподіваємось, файли README або INSTALL пояснять, що саме потрібно робити.
Сенді

3

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

У системах BSD це ports: Використання колекції портів

У Debian apt-getменеджер пакунків також може встановлювати з джерела: APT HOWTO: Робота з вихідними пакетами (Те саме стосується Ubuntu, Linux-mint та всього іншого на основі Debian)

У дистрибутиві Gentoo використовується portageменеджер пакунків, який збирає всю систему лише з джерела: Portage Introduction .

Slackware може компілювати пакети, але я не знаю, чи є для цього менеджер пакунків .. =)

У будь-якому разі ви завжди можете збирати пакунки вручну, як, наприклад, Сенді, зазначений вище =) Також потрібно мати можливість використовувати apt-getабо керувати portageпакетами в будь-якому іншому дистрибутиві ...


1
Сказати, що "менеджер пакунків apt-get може встановити з джерела" невірно. У цитованому розділі описано, як можна створити пакет Debian з джерел Debian . Не довільні вихідні джерела.
Faheem Mitha

2

Я думаю, що найкраще прочитати документацію, що постачається з тією конкретною програмою чи програмою, яку ви хочете встановити. Зазвичай є readmes / README всередині tarballs (архів джерела програми, який ви зазвичай можете завантажувати) або, можливо, навіть ВСТАНОВИТИ файли, щоб прочитати та дізнатися про те, що є кращим способом встановлення зазначеної програми. Словом: RTFM;)


Я прийшов сюди, тому що README дав усі вимоги для створення під Linux, але має лише інструкції щодо встановлення Windows. Прийнята відповідь працювала на мене і, ймовірно, працює більшу частину часу. Я думаю, що майже краще порадити спробувати ./configure маршрут і перейти до README, якщо він не працює (тобто відсутня залежність і ви не можете прочитати вихід компілятора).
Стівен С

1

Короткий огляд використання колекції портів у FreeBSD:

Знайдіть порт

Порти організовані за категоріями, тому якщо ви не знаєте, до якої категорії відноситься порт, вам слід знайти його спочатку:

cd /usr/ports
make search name=myport

Іноді таких записів занадто багато. Я особисто віддаю перевагу:

find /usr/ports -name myport* -print -depth 2

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

Конфігурація

Часто вам потрібно зробити якусь конфігурацію; програмне забезпечення типу Apache і Postgres практично вимагає цього. Є три основні варіанти: командний рядок, оточення та створення конфігураційних файлів. Для початку роботи з командним рядком:

make showconfig

тут буде вказано параметри конфігурації за замовчуванням. Якщо вам подобаються за замовчуванням, ви готові зібрати та встановити. Якщо ні,

make config

з'явиться діалогове вікно, де ви можете вибрати, які параметри ви хочете. (Не плутайте це з цим, make configureякий налаштовує ваш порт з обраними вами параметрами!) Цього часто достатньо, але для деяких програм, таких як Apache, часто є складна конфігурація, з якою простий діалоговий діалог не впорається. Для цього вам слід також подивитися на Makefile (s), які іноді дадуть вам деякі додаткові цілі для make, які дадуть вам більше інформації. Щоб продовжити приклад Apache

make show-modules
make show-options
make show-categories

дасть вам інформацію про налаштування обраних модулів, опцій потоку тощо. Якщо за замовчуванням вашого порту в основному добре, і ви просто хочете змінити кілька речей, ви також можете просто передати пари key = value, такі як змінні середовища:

make MYVBL1=MYVAL1 ... install clean

Крім того, ви можете встановити параметри комутатора за допомогою -Dпараметра:

make -D MYVAR -D MYOTHERVAR ... install clean

Однак для складної конфігурації командний рядок не працюватиме добре, і вам краще жоден з перших двох методів не буде ефективним. У цьому випадку ви можете створити файл конфігурації та передати його до makeзмінної __MAKE_CONF. FreeBSD має конфігураційний файл за замовчуванням: /etc/make.confякий зазвичай містить інформацію про раніше встановлені порти та інші системні налаштування. Для початку створіть файл із параметрами своїх портів, зателефонуйте до нього ~/myport.mkта комбінуйте цей файл із /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

Ви можете подвійно перевірити конфігурацію:

make showconfig __MAKE_CONF=~/make.port.conf

і якщо все виглядає добре:

make install clean __MAKE_CONF=~/make.myport.conf

ПОДЕРЖАЙТЕ! Якщо вам потрібно відрегулювати налаштування конфігурації після make configureабо встановлення цілком або частини, ви повинні спочатку очистити конфігурацію :

make rmconfig

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

Це щось дуже багато для підсумків, але складність конфігурації здебільшого стосується програми, а не порту. Наприклад, Bash насправді не має жодних варіантів.

Установка

Це легка частина:

make install clean

або ти можеш

make build
make install
make clean

що просто більше набирає текст.

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


0

Нещодавно я почав використовувати "Checkinstall" при установці з джерела за межами мого менеджера пакунків. Він будує "пакет" з сторонніх тарболів, який потім можна встановити та керувати (і видалити) за допомогою інструментів менеджера пакунків.

Перегляньте цю статтю - http://www.linuxjournal.com/content/using-checkinstall-build-packages-source

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.