Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Установка программ из source-кодов

Читайте также:
  1. D) программа
  2. I)Однофакторный дисперсионный анализ (выполняется с применением программы «Однофакторный дисперсионный анализ» надстройки «Анализ данных» пакета Microsoft Excel).
  3. I. Включение, начальная установка
  4. I. Программирование на CF Pascal
  5. I. Рабочая программа дисциплины
  6. I. Целевая установка
  7. I. Языки программирования
  8. IF(POS('ПРОГРАММИР',NAZ)<>0) AND
  9. II. Анализ программ по чтению и литературной подготовке учащихся начальной школы и УМК к ним. Познакомьтесь с требованиями ФГОС.
  10. II. Программа курса

В этой лекции мы рассмотрим как в Linux выполнить установку программы из исходных кодов. Также говорят установить из source-кодов или “ исходников “. В настоящее время для всех популярных Linux-дистибутивов программное обеспечение поставляется в виде пакетов и уже нет необходимости компилировать и устанавливать программы из source-кодов. Но все же уметь выполнять эту операцию нужно.

Как правило, исходные коды программы распространяются в архиве .tar.gz. Иногда могут встречаться другие типы архивов, но этот пока самый распространенный. Что означают символы tar.gz? Они говорят о том, что исходные коды программы были заархивированы командой tar, а затем сжаты командой gzip. Команда tar (type archive) - одна из самых старых команд Linux. Ее задача состоит в том чтобы из любой ветки файловой системы можно было сделать архив в виде одного файла. Таким образом утилита tar не сжимает данные, а записывает их в несжатом виде в один файл. Затем, созданный tar-файл, сжимается архиватором gzip. Например, создайте каталог targz в котором создайте несколько подкаталогов и файлов:

1 2 3 4 5 6 7 8 9 10 11 12 13 $ mkdir targz $ mkdir -p./targz/1 $ mkdir -p./targz/2 $ mkdir -p./targz/3 $ mkdir -p./targz/4 $ echo "Hello hello HELLO" >./targz/1.txt $ cp./targz/1.txt./targz/2.txt $ cp./targz/1.txt./targz/3.txt $ cp./targz/1.txt./targz/4.txt $ cp./targz/1.txt./targz/1/1.txt $ cp./targz/1.txt./targz/2/1.txt $ cp./targz/1.txt./targz/3/1.txt $ cp./targz/1.txt./targz/4/1.txt

Чтобы создать tar-архив (tar-файл) каталога targz выполняем команду:

  $ tar -cf targz.tar./targz/

В результате получим файл targz.tar. Чтобы распаковать tar-архив выполняем следующую команду:

  $ tar -xvf targz.tar

Чтобы из tar-архива создать tar.gz-архив его нужно сжать утилитой gzip:

  $ gzip targz.tar

В результате получим tar.gz-архив - targz.tar.gz. Обратите также внимание на то, что утилита gzip при сжатии удаляет исходный файл. То есть файл targz.tar будет автоматически удален после того как будет создан файл targz.tar.gz. Чтобы распаковать gz-архив нужно воспользоваться командой gunzip:

  $ gunzip targz.tar.gz

Таким образом, чтобы распаковать tar.gz-архив можно воспользоваться командами tar и gunzip:

1 2 $ gunzip targz.tar.gz $ tar -xvf targz.tar

или использовать команду tar c дополнительным ключом - z, который автоматически вызывает команду gunzip для распаковки gz-архива:

  $ tar -xvzf targz.tar.gz

В результате получим исходный каталог targz. Еще одна полезная, хотя и немного громоздкая конструкция которая позволяет вывести в консоли содержимое tar.gz-архива не распаковывая его:

  $ gzip -dc targz.tar.gz 2>/dev/null | tar tvvf -

Итак, мы научились распаковывать tar.gz-архивы в которых распространяются исходные коды многих программ. Теперь посмотрим как из них скомпилировать программу и установить ее. Для примера я предлагаю воспользоваться исходными кодами http-сервера - mini_httpd. Скачать можно отсюда.

Давайте познакомимся с основными служебными файлами, которые как правило содержаться в source-кодах. Распаковываем tar.gz-архив:

  $ tar -xzvf mini_httpd-1.19.tar.gz

Переходим в каталог с исходниками и смотрим его содержимое:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $ cd./mini_httpd-1.19/ $ ls -l итого 192 drwxr-xr-x 3 igor igor 4096 2003-12-20 06:05 contrib -r--r--r-- 1 igor igor 340 2001-12-22 20:54 FILES -r--r--r-- 1 igor igor 414 1999-09-28 21:49 htpasswd.1 -r--r--r-- 1 igor igor 4959 2001-12-19 02:08 htpasswd.c -r--r--r-- 1 igor igor 326 2005-06-29 20:32 index.html -rw-r--r-- 1 igor igor 3140 2002-11-02 01:02 Makefile -r--r--r-- 1 igor igor 2661 2005-06-29 20:31 match.c -r--r--r-- 1 igor igor 1679 2005-06-29 20:31 match.h -rw-r--r-- 1 igor igor 199 2001-12-23 22:09 mime_encodings.txt -rw-r--r-- 1 igor igor 4632 2003-10-26 19:00 mime_types.txt -r--r--r-- 1 igor igor 16625 2005-06-29 20:31 mini_httpd.8 -r--r--r-- 1 igor igor 88322 2005-06-29 20:31 mini_httpd.c -r--r--r-- 1 igor igor 1132 2001-12-20 09:14 mini_httpd.cnf -r--r--r-- 1 igor igor 2249 2002-07-30 21:45 port.h -r--r--r-- 1 igor igor 2157 2005-06-29 20:31 README drwxr-xr-x 2 igor igor 4096 2003-12-20 06:05 scripts -r--r--r-- 1 igor igor 8284 2005-06-29 20:31 tdate_parse.c -r--r--r-- 1 igor igor 1575 2005-06-29 20:31 tdate_parse.h -r--r--r-- 1 igor igor 231 2003-12-20 06:03 version.h

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

Следующий важный файл - это файл Makefile. Этот файл предназначен для утилиты make. Утилита make предназначена для того, чтобы реализовать в автоматическом режиме некий алгоритм действий, необходимый для компиляции или установки приложения. Этот алгоритм действий и описан в файле Makefile. Будем говорить, что утилита make реализует цель описанную в файле Makefile. Целей может быть несколько. Откроем командой less Makefile и посмотрим часть его содержимого:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ..... BINDIR = /usr/local/sbin MANDIR = /usr/local/man CC = gcc CDEFS = ${SSL_DEFS} ${SSL_INC} CFLAGS = -O ${CDEFS} #CFLAGS = -g ${CDEFS} LDFLAGS = -s #LDFLAGS = -g LDLIBS = ${SSL_LIBS} ${SYSV_LIBS} ${CRYPT_LIB} all: mini_httpd htpasswd mini_httpd: mini_httpd.o match.o tdate_parse.o ${CC} ${CFLAGS} ${LDFLAGS} mini_httpd.o match.o tdate_parse.o ${LDLIBS} -o mini_httpd mini_httpd.o: mini_httpd.c version.h port.h match.h tdate_parse.h mime_encodings.h mime_types.h ${CC} ${CFLAGS} -c mini_httpd.c match.o: match.c match.h ${CC} ${CFLAGS} -c match.c tdate_parse.o: tdate_parse.c tdate_parse.h ${CC} ${CFLAGS} -c tdate_parse.c.....

В самом начале идет инициализация переменных, которые будут использоваться в Makefile. Например, переменная BINDIR = /usr/local/sbin. Затем идет вот такая конструкция:

  all: mini_httpd htpasswd

all - это и есть имя цели. Справа от двоеточия идет условие выполнения этой цели. Эта строка читается так: цель all будет достигнута тогда, когда будут достигнуты цели mini_httpd и htpasswd. Давайте посмотрим на цель mini_httpd:

1 2 mini_httpd: mini_httpd.o match.o tdate_parse.o ${CC} ${CFLAGS} ${LDFLAGS} mini_httpd.o match.o tdate_parse.o ${LDLIBS} -o mini_httpd

Цель mini_httpd в свою очередь будет достигнута тогда когда будет успешно выполнена команда ${CC} ${CFLAGS} ${LDFLAGS} mini_httpd.o match.o tdate_parse.o ${LDLIBS} -o mini_httpd в результате которой должен скомпилироваться бинарный файл mini_httpd. Но, чтобы файл был успешно скомпилирован должны быть достигнуты цели mini_httpd.o, match.o и tdate_parse.o. И так далее по цепочке. Одна цель зависит от другой.

Как следует понимать строку ${CC} ${CFLAGS} ${LDFLAGS} mini_httpd.o match.o tdate_parse.o ${LDLIBS} -o mini_httpd? Очень просто. Путем подстановки значений переменных, она преобразуется к виду:

  gcc -s mini_httpd.o match.o tdate_parse.o -lcrypt -o mini_httpd

gcc - это стандартный компилятор Linux для языков С/С++. То есть если в командной строке набрать make mini_httpd, то будет выполнена цепочка действий описанных в файле Makefile, после которых в случае успеха будет создан бинарный файл в каталоге с исходными кодами.

Другие цели которые есть в Makefile это install, clean и tar. Цель clean очищает каталок с исходными кодами от промежуточных файлов компиляции оставляя только исходники. Цель tar создает tar.gz-архив. А цель install выполняет установку приложения в систему:

1 2 3 4 5 6 7 8 9 install: all rm -f ${BINDIR}/mini_httpd ${BINDIR}/htpasswd -mkdir -p ${BINDIR} cp mini_httpd htpasswd ${BINDIR} rm -f ${MANDIR}/man8/mini_httpd.8 ${MANDIR}/man1/htpasswd.1 -mkdir -p ${MANDIR}/man8 cp mini_httpd.8 ${MANDIR}/man8 -mkdir -p ${MANDIR}/man1 cp htpasswd.1 ${MANDIR}/man1

Как видите для того чтобы цель install была успешно выполнена, необходимо, чтобы была выполнена цель all, а установка подразумевает под собой простую операцию копирования скомпилированных файлов в соответствующие каталоги файловой системы.

Таким образом, если в каталоге с исходными файлами присутствует Makefile, то можно приступать к компиляции. По умолчанию команда make без указания цели будет выполнять цель all. То есть make равносильно make all. После успешного выполнения команды make можно выполнять команду make install, которая завершить установку программы в системе.

Если в каталоге с исходниками нет файла Makefile, а есть файл Makefile.in, значит должен быть скрипт config. Скрипт config проверяет систему и создает файл Makefile. Таким образом в общем случае команды для установки программы из исходных кодов при отсутствии файла Makefile будут такими:

1 2 3 $./config $ make $ make install

Если выполнить команду make в каталоге ./mini_httpd-1.19/, то получим ошибку компиляции цели htpasswd.o, соответственно цель all не может быть реализована. В файле README написано, что утилита htpasswd предназначена для смены пароля. Основной же файл это mini_httpd. Поэтому, чтобы установить сервер, хотя бы частично можно написать так:

1 2 $ make clean $ make mini_httpd

Компиляция проходит без ошибок и в результате будет скомпилирован файл mini_httpd. Если запустить этот файл от имени рута, затем открыть бразузер и набрать в нем http://localhost, то мы увидим сообщение о том, что mini_httpd -сервер работает. Останется только скопировать файл в каталог с бинарными файлами.

В качестве домашнего задания попробуйте изменить в файле Makefile цель install таким образом, чтобы mini_httpd мог работать в вашем дистрибутиве и управляться стандартными командами /etc/init.d/mini_httpd start|stop|restart.

 




Дата добавления: 2014-12-19; просмотров: 98 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.012 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав