L i n u x P a r k при поддержке ВебКлуба |
Назад | Оглавление | Вперед |
Глава 9 Функциональные возможности компилятораВ этой главеНеобходимые пакеты Почему мы выбираем использование тарболов? Компиляция программного обеспечения на вашей системе Создание и инсталляция программ на вашей системе Редактирование файлов с vi Некоторые последние комментарии |
Сейчас мы в одном из самых интересных мест установки √ мы будем компилировать и инсталлировать все сервисы, которые необходимы на сервере. Прежде чем мы начнем объяснять, как создать необходимое программное обеспечение, настроенное на максимальную безопасность и эффективность, важно узнать какими командами и программами мы будем пользоваться. Прежде всего, нужно проверить, что у нас установлены все необходимые пакеты, нужные для компиляции серверного программного обеспечения.
Следующие пакеты нужны, чтобы осуществлять компиляцию на вашей системе после создания нового ядра. Эти пакеты находятся на Red Hat Linux 6.1 или 6.2 Part 1 CD-ROM в каталоге RedHat/RPMS:
Red Hat 6.1 | Red Hat 6.2 |
autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-5.noarch.rpm dev86-0.14.9-1.i386.rpm bison-1.28-1.i386.rpm byacc-1.9-11.i386.rpm cdecl-2.5-9.i386.rpm cpp-1.1.2-24.i386.rpm cproto-4.6-2.i386.rpm ctags-3.2-1.i386.rpm egcs-1.1.2-24.i386.rpm ElectricFence-2.1-1.i386.rpm flex-2.5.4a-7.i386.rpm gdb-4.18-4.i386.rpm kernel-headers-2.2.12-20.i386.rpm glibc-devel-2.1.2-11.i386.rpm make-3.77-6.i386.rpm patch-2.5-9.i386.rpm |
autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-6.noarch.rpm dev86-0.15.0-2.i386.rpm bison-1.28-2.i386.rpm byacc-1.9-12.i386.rpm cdecl-2.5-10.i386.rpm cpp-1.1.2-30.i386.rpm cproto-4.6-3.i386.rpm ctags-3.4-1.i386.rpm egcs-1.1.2-30.i386.rpm ElectricFence-2.1-3.i386.rpm flex-2.5.4a-9.i386.rpm gdb-4.18-11.i386.rpm kernel-headers-2.2.14-5.0.i386.rpm glibc-devel-2.1.3-15.i386.rpm make-3.78.1-4.i386.rpm patch-2.5-10.i386.rpm |
ЗАМЕЧАНИЕ. Лучше все программы описанные выше инсталлировать одновременно, чтобы избежать сообщений об ошибках зависимостей от RPM. Если вы следовали по всем шагам, описанным в главе 2 ⌠Инсталляция вашего Linux сервера■, то все эти пакеты уже проинсталлированы в вашей системе и вам нет необходимости заново их переинсталлировать.
RPM команда для инсталляции пакета:
[root@deep /]# rpm -Uvh foo-1.0-2.i386.rpmRPM команда для проверки, инсталлирован ли пакет или нет:
[root@deep /]# rpm -q fooПосле завершения инсталляции и компиляции программ нужных серверу, очень важно деинсталлировать все вышеназванные пакеты. Это защитит вашу систему от неавторизованного использования компилирующих программ. Также переместите исполняемый файл rpm в безопасное место, например, на гибкий диск, тогда злоумышленник не сможет установить свои программы из rpm пакета и будет вынужден компилировать их на месте, а доступа к компилятору нет.
Для перемещения rpm на дискету:
[root@deep /]# mount /dev/fd0 /mnt/floppy/Для возврата rpm в оригинальный каталог:
[root@deep /]# mount /dev/fd0 /mnt/floppy/ЗАМЕЧАНИЕ. Никогда не деинсталлируйте пакет RPM полностью с вашего сервера, иначе вы не сможете проинсталлировать его по новой, потому что для инсталляции любого rpm пакета требуется наличие программы rpm.
Все дистрибьюции Red Hat поставляются в RPM файлах, которые известны также как ⌠пакеты■. Этот способ поставки программ характеризуется упрощением процесса их инсталляции, обновления и удаления. Однако, в мире UNIX, стандартом де-факто для пакетов программ является тарбол. Тарбол это просто сжатые файлы, которые могут быть прочитаны и раскрыты при помощи утилиты tar. Инсталляция программ из тарбола более тяжелый процесс, чем из rpm. Так почему мы будем использовать тарболы?
Программы √ это то, что компьютер может выполнять. Изначально, кто-то написал ⌠исходные коды■ на языке программирования который он/она знает (например, C, C++ и т.д.). Исходные коды обрабатываются компилятором, который преобразует инструкции в двоичные коды, подходящие под требуемый процессор (например, 386). Современным форматом исполняемых фалов является elf. Программист передает исходные коды компилятору и получает исполняемые файлы. Часто процесс компиляции завершается ошибкой или полученная программа не работает как надо. Половину времени процесса программирования составляет отслеживание и исправление этих проблем.
Для начинающих имеется много аспектов и новых терминов, относящихся к компиляции, которые вы должны знать. Ниже описаны некоторые из них:
Multiple Files
Программы, состоящие из одного файла встречаются редко. Обычно в него
входит несколько файлов (скажем, *.c, *.cpp и т.д.), каждый из которых
компилируется в объектные коды, а затем они компонуются в исполняемый
файл. Компилятор обычно используется для компоновки и вызывает в
заключение программу ld.
Makefiles
Makefiles предназначен, чтобы помочь вам при формировании программы,
проходить один и тот же путь. Она также сокращает время работы над
программой. Программа ⌠make■ использует зависимости, описанные в
Makefiles, чтобы решить, какие части программы надо перекомпилировать.
Если вы измените один файл из пятидесяти, вам потребуется выполнить одну
компиляцию и одну компоновку, вместо выполнения полного процесса сначала.
Библиотеки (Libraries).
Программы могут компоноваться не только в объектные файлы, но в
библиотеки, которые содержат наборы таких файлов. Существует две формы
компоновки библиотек: статическая, когда коды встраиваются в исполняемые
файлы, и динамическая, когда коды собираются в момент запуска программы.
Патчи (Patches).
Для исправления ошибок, люди модифицируют небольшую часть исходных
кодов, помещая внесенные изменения в файл, называемый патчем. Когда
требуется иметь две различные версии программы, небольшие изменения кода
можно сохранить этим путем, а не хранить две большие программы.
Ошибки при компиляции и компоновке.
Ошибки при компиляции и компоновке часто возникают из-за недосмотра и
неправильного использования языка. Проверьте, что для функций, которые вы
вызываете используются правильные заголовочные файлы. Неупомянутые
символы (Unreferenced symbols) являются признаком незавершенности шага
компоновки. Также проверьте, все ли необходимые библиотеки (GLIBC) и
утилиты (GCC, DEV86, AUTOMAKE и т.д.) установлены на вашей системе.
Отладка.
Отладка √ это отдельная большая тема. При отладке в код помещаются
инструкции, которые сообщают вам о происходящем. Чтобы не утонуть в
огромном количестве выводимой информации, вы можете распечатать только
первые три прохода в цикле. Также она помогает проверить, что все
переменные корректно передаются между модулями. Получше ознакомьтесь с
вашими средствами отладки.
С 10 по 20 главы вы увидите, что мы используем много разных команд компиляции для создания и инсталляции программ на сервере. Эти команды совместимы с UNIX и используются на всех вариантах *nix систем для компиляции и инсталляции программного обеспечения.
Ниже приводятся шаги необходимые для компиляции и инсталляции программного обеспечения из тарбола.
1. Вы должны скачать тарбол с сервера, которому доверяете. Обычно, это основной сервер программы
2. После того как тарбол скачен, перейдите в каталог /vat/tmp (заметим, что другой путь также возможен, это решать вам) и раскройте архив (как root), обычно, следующей командой:
[root@deep /]# tar xzpf foo.tar.gzВышеприведенная команда извлечет все файлы из архива foo.tar.gz и поместит их в новый каталог с именем этой программы, который создаст автоматически в месте, где вы сейчас расположены.
Опция ⌠x■ говорит tar извлечь все файлы из архива.
Опция ⌠z■ говорит, что tar архив был сжат при помощи gzip.
Опция ⌠p■ сохраняет оригинал и права доступа к файлам в том виде, каком они
существовали при создании архива.
Опция ⌠f■ говорит tar, что следующий аргумент это имя файла.
После того как тарбол был раскрыт, вы почти наверняка сможете найти в каталоге файлы README или INSTALL с инструкциями, как приготовить программное обеспечение к использованию. Скорее всего, вам надо будет ввести следующие команды:
./configureconfigure √ будет конфигурировать программное обеспечение, чтобы гарантировать, что ваша система имеет функциональные возможности и библиотеки необходимые для успешной компиляции пакета. ⌠make■ будет компилировать все исходные файлы в исполняемые. ⌠make install■ √ инсталлирует исполняемые и все сопутствующие файлы в определенное место.
Другие специальные команды, которые вы встретите в этой книге:
make depend⌠make depand■ будет создавать необходимые зависимости для различных файлов. ⌠strip■ будет удалять все символы из объектных файлов. В результате все исполняемые файлы будут меньшего размера. Это улучшит производительность программы, так как системе будет необходимо читать меньше строк при исполнении данного двоичного файла. ⌠chown■ будет устанавливать правильных владельцев файлов и разрешения для групп.
Текстовый редактор vi может быть использован для редактирования любых текстовых файлов. В процессе инсталляции программ, пользователь должен часто редактировать текстовые файлы, подобные Makefiles, или конфигурационные файлы. Ниже представлено несколько наиболее важных ключевых строк, необходимых для работы с vi:
i √ говорить vi вставить текст перед курсором.Перед переходом к чтению следующей части книги мне бы хотелось отметить, что в тексте подразумевается расположение некоторых файлов в определенных каталогах. Для соглашения, мы принимаем, что они расположены там, где это определено в дистрибутиве Red Hat. Если вы используете другой дистрибутив Linux или эти файлы расположены у вас в других местах, то будьте очень внимательны при копировании примеров из текста книги.
В этой части книги, все программное обеспечение перечисленное в главах с 10 по 21 необязательно, и зависит от того, что необходимо вашему серверу (например, какие задачи будет решать ваш сервер и для какой части Интернет/Интранет). Хотя некоторые программы могут быть очень важны для вас. Полезно заменить telnet на ssh для более безопасного удаленного администрирования сервера. Другая интересная программа √ Tripware, которая помогает следить за целостностью определенных программ.
Назад | Оглавление | Вперед |