Как се работи в Ubuntu
Съвет #59: Инсталиране на софтуер от изходни кодове
Когато няма хранилище и пакет, все още има надежда. Този раздел описва как да създавате от изходния код и да инсталирате отделни програми.
Преди се смяташе, че когато искате да инсталирате нова програма на Linux, трябва да отидете на началната страница на проекта, да намерите изходния архив, да го изтеглите и след това да отворите архива и да компилирате изходния код. Първо, много текстови съобщения ще бъдат показани в терминала, след което вашата програма ще бъде окончателно инсталирана. Всъщност този подход беше често срещан, поради което много дистрибуции идваха с инсталирани всички основни компилатори и библиотеки. Ах, добрите стари времена.
Онези стари времена не бяха толкова добри. Реалността е, че заедно с това, което беше споменато по-горе, вие сте имали някои допълнителни отговорности:
- Трябваше да се върнете на началната страница на проекта, ако установите, че има голям брой зависимости от библиотеки, които трябва да бъдат проследени, както и от други програми, на които се основава проектът.
- Ако софтуерът зависи от други програми, обикновено трябва първо да ги изтеглите и компилирате, само за да разберете дали те също имат външни зависимости, така че трябва също да посетите страниците на тези проекти, за да проследите и тези зависимости.
- И накрая, след като прекарате огромно количество време в проследяване на всички зависимости и успешно инсталиране на софтуера, разработчикът просто ще пусне нова версия с повече функции и по-малкомного грешки, трябва да започнете всичко отначало.
В днешно време почти всяка дистрибуция, включително Ubuntu, не само използвапакети(програми, които са компилирани и създадени специално за вас), но също така използва известно автоматично управление на зависимостите. Ако искате да инсталирате програма, трябва само да кажете на Ubuntu каква програма искате да инсталирате и системата ще я намери и всички нейни зависимости и ще ги инсталира вместо вас. Ако искате да надстроите, Ubuntu ще намери нови зависимости и нови версии за вас. В момента има толкова малко програми, за които трябва да изтеглите и компилирате изходния код, че Ubuntu дори не инсталира (по подразбиране) програмите, необходими за компилиране на изходния код. Девет пъти от десет пакетът, от който се нуждаете, или вече е в разпространението, или поне вече е наличен като предварително компилиран .deb пакет (как да инсталирате такива пакети е описано в Инсталиране и премахване на отделни .deb файлове [Hack #57]).
В допълнение към горното, има няколко други обстоятелства, при които ще трябва да изтеглите и компилирате програма от източника:
- Беше пуснат напълно нов проект с отворен код. Толкова е нов, че все още никой не е решил да го пакетира за Ubuntu.
- Има някаква функция в ядрото или друга програма, която е деактивирана по подразбиране, или има корекция, която искате да добавите, така че трябва да компилирате ядрото от изходния код. (Въпреки това може да откриете, че можете да персонализирате.debизходния пакет [Hack #63], за да получите това, от което се нуждаете).
- Производител на хардуер трета странае пуснал драйвери за Linux, но те са пуснати само като изходен код (или може би са внедрени само като RPM, предназначени за Red Hat и SUSE, и за всички други дистрибуции като файл.tar.gz), а за Ubuntu все още не е пуснат нито един готов за използване пакет.
- Вие самият сте програмист и бихте искали да помогнете на проект с отворен код, като подготвите пачове за него, или може би искате да започнете работа по изцяло нов проект.
- Издадена е нова версия на програмата и не можете да чакате да се появи като пакет, така че трябва сами да изградите пакета. (Имайте предвид обаче, че в зависимост от това с коя програма си имате работа, съществува риск от счупване на други части на системата, които зависят от старата версия на програмата. Обикновено, когато програма, която засяга други програми, трябва да бъде актуализирана, нейното инсталиране и инсталирането на нейните зависимости трябва да се извърши, преди те да бъдат напълно инсталирани под контрола на мениджъра на пакети).
Внимание
Инсталиране на инструменти за компилация
Ако трябва да компилирате от изходния код, първо трябва да инсталирате компилатора и всички други пакети, необходими за изграждане на програми от изходния код. В Ubuntu това е лесно: просто отворете мениджъра на пакети, който предпочитате да използвате, след това намерете и инсталирайте пакетаbuild-essential. Това ще получи и инсталира GNU C компилатора (gcc),make,g++и редица други програми, които ще ви трябват:
Получаване и компилиране на изходния код
След като всички тези програми са инсталирани, изтеглете архива на вашата програма и го извлечете някъде, например във вашата домашна директория. Повечето архивисе извличат в техните собствени директории (често със същото име като програмата), така че следващата стъпка е да промените (с помощта на командатаcd) към тази директория:
Повечето от днешните програми използват обичайния метод за конфигуриране и компилиране в три стъпки, но преди да започнете този процес, трябва да прочетете инструкциите за инсталиране, предоставени от разработчика (обикновено в главната директория с изходен код във файл, нареченINSTALLилиREADMEв, или на главната страница на проекта).
Стъпка 1: Конфигурация
Първата стъпка в процеса на изграждане обикновено е стартирането на скриптаconfigure, който се намира в главната директория с изходен код:
Тази програма ще сканира системата и ще провери за наличието на всички библиотеки, от които програмата се нуждае, както и ще намери пътищата до някои файлове и ще направи други настройки. Ако нямате всички библиотеки, необходими на програмата, скриптътconfigureще даде съобщение за грешка и ще покаже коя библиотека липсва (или че е необходима по-нова версия). Ако видите този вид грешка, ще трябва не само да разберете в кой пакет е тази библиотека, но и да изтеглите пакета за разработчици, който съдържа всички заглавни файлове за тази библиотека (в Ubuntu повечето от тези пакети имат-devсуфикс в края). След като тези библиотеки бъдат инсталирани, стартирайте скрипта за конфигуриране отново, за да видите дали всички други библиотеки, от които се нуждаете, са там.
Стъпка 2: Компилиране
След като скриптътconfigureприключи успешно, следващата стъпка е да компилирате изходния код. В повечето от днешните проекти, заедно със скриптаconfigureизползва се скриптътmakefiles, така че следващата стъпка е да изпълнитеmakeот главната директория на източника:
Трябва да видите вълна от съобщения на компилатора да мигат пред вас и в крайна сметка трябва да се върнете отново в командния ред. По време на тази стъпка може да възникнат грешки, но те обикновено са много по-трудни за справяне, тъй като може да са резултат от синтактична грешка в изходния код или някакъв друг проблем. Ако откриете някаква грешка при компилиране, проверете пощенския списък или други инструменти за поддръжка, свързани с тази програма, тъй като това може да е известен бъг; в противен случай подайте доклад за грешка.
Стъпка 3: Инсталиране
След като изходният код е компилиран, последната стъпка е да инсталирате програмата в системата. В повечето програми функцията, която извършва инсталацията, се намира вmakefiles; все пак имайте предвид, че обикновено трябва да инсталирате програмата като root, тъй като ще трябва да инсталирате файлове в директорията/usrи други директории, в които може да се пише само отroot. Уверете се, че все още сте в изходната директория и въведете:
Сега програмата ще бъде инсталирана в системата.
Някои пакети имат и функция "деинсталиране", която премахва програмата от системата. Просто се върнете в главната директория с източници и изпълнете командата:
съвет за съвет
В повечето случаи инсталирането на пакет използва процедура, която инсталира приложението в директорията/usr/local. Но ако искате да сте сигурни, че инсталацията ще стартирадалеч от частта от файловата система, контролирана от Ubuntu, добавете опцията --prefix=pathname към командата ./configure, както следва:
Почти винаги работи. Въпреки това, има някои програми, които не използват опцията --prefix, а някои програми (като тези, добавени към модулите на ядрото) ще поставят своите компоненти навсякъде във файловата система.