Опубликован: 21.11.2006 | Доступ: свободный | Студентов: 1811 / 140 | Оценка: 4.09 / 4.00 | Длительность: 38:34:00
Лекция 2:

Использование ОС Linux в качестве сервера электронной почты

Библиотеки ОС Linux

Операционная система Linux очень сильно зависит от языка программирования С. Само ядро ОС Linux, большинство драйверов устройств и практически все утилиты были написаны с использованием именно этого языка программирования. Также не являются исключением и прикладные программы, написанные для платформы Linux. Все они написаны на языке программирования С.

Одним из преимуществ языка программирования С является возможность загрузки программного кода из файла библиотеки при выполнении программы. Думаю, большинство пользователей операционной системы Microsoft Windows знают о существовании библиотек DLL. Программный код, который могут совместно использовать несколько программ, компилируется в общей библиотеке (файле DLL). При выполнении программы файл DLL может загружаться в память по мере того как возникает необходимость в выполнении функций, имеющихся в библиотеке.

В ОС Linux также используются подобные механизмы. А префикс lib относится к файлам библиотек. В таблице библиотек хранятся данные обо всех совместно используемых библиотеках, зарегистрированных в системе. Довольно часто в среде Microsoft Windows возникает ситуация, когда одна программа вносит изменения в файл DLL, в то время как другая требует раннюю версию DLL, что приводит к остановке работы. В ОС Linux такая проблема не возникает, так как таблица библиотек способна обслуживать несколько копий одной и той же библиотеки, к которой могут получать доступ различные программы.

Файл /etc/ld.so.conf содержит список библиотек, которые вставляются в таблицу библиотек. С помощью команды ldconfig можно вызвать текущую таблицу библиотек ОС Linux. В листинге 2.8 представлен пример результатов работы команды ldconfig в системе с ОС Mandrake 6.0 Linux. Это лишь частичный листинг, так как из строки 2 следует, что в данной системе зарегистрированы 534 различных библиотеки.

1 [rich@shadrach rich]$ /sbin/ldconfig -p
2 534 libs found in cache `/etc/ld.so.cache' (version 1.7.0)
3 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2
4 libzvt.so.2 (libc6) => /usr/lib/libzvt.so.2
5 libz.so.1 (libc6) => /usr/lib/libz.so.1
6 libz.so.1 (iibc6) => /usr/lib/libz.so.1
7 libxm11amp.so.0 (libc6) => /usr/X11R6/lib/libx11amp. so.0
8 libxml.so.0 (libc6) => /usr/lib/libxml. so.0
9 libxml.so.0 (libc6) => /usr/lib/libxml.so.0
10 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1
11 libvgagl.so.1 (libc5) => /usr/i486-linux-libc5 /lib/libvgagl.so.1
12 libvgagl.so.1 (libc6) => /usr/lib/libvgagl.so.1
13 libvgagl.so (libc6) => /usr/lib/libvgagl.so
14 libvgagl.so (libc6) => /usr/lib/libvgagl.so
15 libvga.so.1 (libc6) => /usr/lib/libvga.so.1
16 libvga.so.1 (libc5) => /usr/i486-linux-libc5/lib/libvga.so.1
17 libvga.so.1 (libc6) => /usr/lib/libvga.so.1
18 libvga.so (libc6) => /usr/lib/libvga.so
19 libvga.so (libc6) => /usr/lib/libvga.so
20 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5
21 libuulib.so.5 (libc6) => /usr/lib/libuulib.so.5
22 libuulib.so (libc6) => /usr/lib/libuulib.so
23 libuulib.so (libc6) => /usr/lib/libuulib.so
Листинг 2.7. Пример выполнения команды uname -a

Все разновидности ОС Linux требуют наличия версии стандартных библиотек языка С, которые установлены в системе. Стандартная библиотека С имеет функции, которые наиболее часто используются в системе. Здесь как раз дает о себе знать пестрое прошлое ОС Linux. В ранних версиях ОС Linux ядро системы было тесно привязано к библиотеке С Linux (Linux C Library). Любые изменения в ядре влекли за собой модифицирование библиотеки С Linux, и наоборот. Первая версия библиотеки С Linux называлась libc1. Позднее ее возможности расширялись в версиях libc2, libc3 и libc4. Эти библиотеки широко использовались для создания большинства утилит и прикладных программ для Linux в первые годы после ее появления.

Однако через некоторое время разработчики Linux пришли к выводу, что старая библиотека С Linux уже не удовлетворяет сегодняшним требованиям. И не только потому, что библиотека была тесно привязана к ядру ОС Linux, — с ее помощью создавались выполняемые файлы в устаревшем формате a.out. Большинство более новых POSIX-совместимых систем перешли на новый формат Executable and Linking Format (ELF), который оказался более производительным и эффективным. Поэтому в новую версию библиотеки С Linux libc5 была встроена поддержка формата ELF. Программы, созданные с помощью библиотеки libc5, не будут работать на старых Linux-системах, в которых используются библиотеки типа a.out. Однако устаревшие программы, созданные с использованием таких библиотек, вполне успешно будут выполняться на новых системах с libc5. Это был первый случай приведший к путанице среди пользователей ОС Linux.

Во то время как библиотека libc5 успешно развивалась и распространялась, проект GNU разработал собственную библиотеку, которая не была привязана к какому-либо определенному ядру. Библиотека С проекта GNU (GNU Project's C library) получила название glibc. Однако ее появление не вызвало фурора в мире Linux, так как библиотека libc5 вполне справлялась с возложенными на нее задачами.

После периода некоторого забвения программисты вновь заинтересовались кодом библиотеки glibc. Они надеялись, что, по сравнению с libc5, библиотека glibc имеет преимущества. И действительно, одним из преимуществ glibc является ее независимость от определенной операционной системы или ядра. Позже была выпущена новая версия этой библиотеки — glibc 2.0.

Тогда большинство дистрибьюторов ОС Linux решило включить код новой библиотеки glibc 2.0 в свои новые версии. К сожалению, многие дистрибьюторы побоялись отказаться от библиотеки libc5, что также привело к довольно запутанной ситуации.

Версии ОС Linux, кроме glibc, включают и библиотеку libc5 для реализации обратной совместимости. Так как ОС Linux обслуживает таблицу файлов библиотек, то одновременное использование двух отдельных библиотек вполне возможно. Поэтому большинство приложений для Linux продолжают использовать библиотеку libc5 в целях сохранения совместимости.

Например, такие приложения как Netscape Communicator и Corel WordPerfect написаны с использованием библиотеки libc5 и могут работать практически с любыми версиями ОС Linux. Некоторые разработчики программного обеспечения для ОС Linux решили использовать в своих программах преимущества библиотеки glibc. Так, например, продукты StarOffice 5.0 компании Star Division и программное обеспечение для работы с базами данных Oracle 8 компании Oracle написаны с использованием библиотеки glibc 2.0. Эти приложения не смогут выполняться на Linux-системах, где имеется только библиотека libc5.

Было бы грустно, если бы этим все и закончилось. Однако не так давно организация проекта GNU выпустила новую версию своей библиотеки glibc 2.1. С выходом этой версии связано несколько неприятных моментов. Дело в том, что некоторые функции в версии 2.1 были изменены. Следствием этого является аварийное завершение некоторых приложений, написанных под библиотеку glibc 2.0 (например, StarOffice 5.0), которые запускаются на Linux-системе с библиотекой glibc 2.1.

Библиотеки в ОС Linux

Если после чтения этого раздела вы заволновались о работе своего Linux-сервера, поспешим вас успокоить. Для большинства приложений, распространяемых в открытом виде (таких как, например, почтовые серверы, обсуждаемые в этом курсе), компиляция кода с использованием любой из библиотек С пройдет успешно. Для приложений, распространяемых в бинарном формате нужно лишь использовать релиз версии соответствующей С библиотеки ( libc5, glibc 2.0 или glibc 2.1 ).

Если же вам не известно, какая из библиотек имеется в вашей версии ОС Linux , то это можно выяснить, просмотрев каталог /lib. В табл. 2.7 представлены различные библиотеки языка С.

Таблица 2.7. Список библиотек языка С в ОС Linux
Библиотека Описание
libc.so Библиотека libc1 языка С типа a.out
libc.so.2 Библиотека libc2 языка С типа a.out
libc.so.3 Библиотека libc3 языка С типа a.out
libc.so.4 Библиотека libc4 языка С типа a.out
libc.so.5 Библиотека libc5 языка С типа ELF
libc.so.6 Символические связи для библиотеки glibc
libc-2.0.x.so Библиотека glibc 2.0 языка С типа ELF
libc-2.1.x.so Библиотека glibc 2.1 языка С типа ELF

Проект GNU

Проект GNU был создан в 1984 году с целью разработки бесплатной UNIX-подобной операционной системы. В функции этой организации входит обслуживание различных версий открытого кода утилит для UNIX. Без проекта GNU система Linux никогда не увидела бы свет. Большинство составляющих ядра операционной системы Linux созданы проектом GNU. В этом разделе мы остановимся на описании работы трех основных программ, от работы которых зависит функционирование сервера электронной почты. Это оболочка bash, компилятор gcc и утилита make.