voliuf.narod.ru

главная

друзья

помощь сайту

Администрирование почтовых серверов sendmail  

Бесплатные учебники по темам

Партнерская программа

1.Принципы организации систем электронной почты

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

3.Установка телекоммуникационного оборудования в ОС Linux

4.DNS и доменные имена

5.Протокол SMTP

6.Протокол POP3

7.Протокол IMAP

8.Протокол РРР

9.Протокол UUCP

10.Программа sendmail

11.Установка и конфигурирование sendmail

12.Установка и конфигурирование POP3 и IMAP

13.Подключение почтового сервера к провайдеру Internet

14.Администрирование почтового сервера

15.Конфигурирование клиентов ЛВС

16.Поддержка удаленных клиентов

17.Почтовые псевдонимы и преобразование адресов

18.Списки рассылки

19.Маршрутизация IP в ОС Linux

 

Администрирование почтовых серверов sendmail 
2.Использование ОС Linux в качестве сервера электронной почты
  

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

 

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

 

Вообще, термин операционная система Linux не вполне корректен. Стандартную ОС Linux составляют несколько различных модулей и частей. Сердцем операционной системы является ядро. Ядро для ОС Linux создано и поддерживается по сей день Линусом Торвальдсом (Linus Torvalds). Само по себе ядро не может быть сколько-нибудь полезным. Чтобы операционная система нормально функционировала, в ней должны быть приложения и возможность их запуска. К счастью для Линуса, проект GNU в то время уже существовал.

 

Цель проекта GNU (аббревиатура GNU раскрывается рекурсивно "GNU's Not Unix") — создание открытой среды UNIX, свободной от "лицензионных войн" за текущие версии UNIX. Как оказалось, проект GNU на тот момент имел открытый исходный код многих UNIX-утилит и остро нуждался в ядре операционной системы, на базе которого их можно было бы реализовать (проект GNU работает над созданием собственной версии UNIX и по сей день). С другой стороны, Линус имел UNIX-подобное ядро операционной системы без утилит, которые делали бы его функциональным. Стечение этих двух обстоятельств и сделало возможным создание операционной системы Linux. Комбинация ядра Linux с утилитами UNIX проекта GNU сделала возможным создание новой полнофункциональной UNIX-подобной операционной системы. Ниже более детально рассмотрены аспекты функционирования ядра ОС Linux, а также некоторых основных UNIX-утилит проекта GNU. Дается также краткий обзор компаний, распространяющих свои версии ОС Linux.

 

Ядро ОС Linux

Ядро операционной системы — это ее сердце. Ядро должно управлять всеми устройствами и программами в системе, распределяя аппаратные ресурсы и запуская программы по мере надобности. В ядро Linux перешли многие идеи и функциональность системы UNIX. Линус Торвальдс отмечает, что к созданию ядра Linux его привело изучение операционной системы MINIX, которая являлась попыткой реализации ОС UNIX для IBM-совместимых ПК, предпринятой Эндрю Таненбаумом (Andrew Tanenbaum).

 

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

 

Управление памятью

Одной из важнейших функций ядра операционной системы является управление памятью. Ядро управляет не только физической памятью, имеющейся в ПК, оно способно также создавать и управлять виртуальной памятью, которая физически не существует. Ядро формирует эту память, используя пространство на жестком диске (называемое пространством подкачки (swap space)). При этом память подкачки на жестком диске компьютера ведет непосредственный обмен данными с физической памятью. Это заставляет систему "думать", что в ней имеется больше доступной памяти, чем физически существует. При этом разделители памяти группируются в блоки, называемые страницами. Каждая страница памяти расположена либо в физической памяти, либо в области подкачки. Ядро ведет специальную таблицу размещения страниц памяти, где точно указывается местонахождение всех страниц памяти.

 

Те области памяти, доступ к которым определенное время не предоставлялся, копируются ядром в область подкачки жесткого диска. Когда какая-либо программа запрашивает доступ к странице памяти, которая была помещена в область подкачки, ядру придется удалить из этой области содержащуюся там страницу и поместить туда страницу, запрашиваемую программой.

 

Чтобы использовать виртуальную память, сначала создайте область подкачки на жестком диске. Довольно часто эту процедуру можно выполнить во время инсталляции системы. Для разметки разделов на жестком диске используется команда fdisk. Формат команды fdisk следующий

 
fdisk [option] [device],

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

 
Таблица 2.1. Жесткие диски в ОС Linux
Устройство Описание
/dev/hd [a-h] дисковые устройства IDE
/dev/sd [a-p] дисковые устройства SCSI
/dev/ed [a--d] дисковые устройства ESDI
/dev/xd [ab] дисковые устройства XT
 

Первый доступный диск определенного типа обозначается как диск a, второй — b и так далее. В листинге 2.1 показан пример организации разделов в ОС Linux.

 
1 [root@shadrach root]# /sbin/fdisk/dev/sda
2
3 Command (m for help): p
4
5 Disk /dev/sda: 64 heads, 32 sectors, 521 cylinders
6 Units = cylinders of 2048 * 512 bytes
7
8 Device Boot Start End Blocks Id System
9 /dev/sdal 1 460 471024 83 Linux native
10 /dev/sda2 461 521 62464 5 Extended
11 /dev/sda5 461 521 62448 82 Linux swap
12
13 Command (m for help): q
14 (root@shadrach root]#
 

Листинг 2.1. Пример организации разделов с помощью команды fdisk

В строке 1 запущена команда fdisk для первого SCSI-диска в системе: /dev/sda. Программа fdisk является интерактивным средством, которое позволяет системному администратору управлять таблицей разметки жесткого диска. В строке 3 показана команда, применяемая для отображения текущей таблицы разметки разделов жесткого диска. С 5-й по 11-ю строки показана информация, содержащаяся в самой таблице разделов жесткого диска. В строке 11 показан размер раздела подкачки в Linux.

 

После того как область подкачки на жестком диске была создана, ядро Linux должно "узнать" о ее существовании и активировать ее. Для активизации процесса подкачки страниц памяти применяется программа swapon. Командой swapon устанавливаются параметры виртуальной памяти в ядре. Однако вся эта информация теряется при перезагрузке Linux-сервера. Это означает, что команду swapon следует выполнять каждый раз при загрузке системы. В большинстве версий Linux команда swapon включена в сценарий начальной загрузки и выполняется автоматически при загрузке системы.

 

Текущая информация о состоянии виртуальной памяти в системе Linux может быть получена из файла /proc/meminfo. В листинге 2.2 показан пример содержимого файла /proc/meminfo.

 
1 [root@shadrach /proc]# cat meminfo
2 total: used: free: shared: buffers: cached:
3 Mem:31535104 29708288 1826816 31817728 3051520 15773696
4 Swap: 63942656 2838528 61104128
5 MemTotal: 30796 kB
6 MemFree: 1784 kB
7 MemShared: 31072 kB
8 Buffers: 2980 kB
9 Cached: 15404 kB
10 SwapTotal: 62444 kB
11 SwapFree: 59672 kB
12 [root@shadrach /proc]#
 

Листинг 2.2. Пример файла /proc/meminfo

В строке 1 показана команда для просмотра файла /proc/meminfo. Строки со 2-й по 11-ю отображают содержимое файла meminfo. Из строки 3 можно сделать заключение о том, что данный сервер имеет 32 Мбайт физической памяти. Также, как мы видим, примерно 18 Мбайт из нее в настоящий момент не используется. Из строки 4 видно, что в системе имеется 64 Мбайт доступного для подкачки пространства. Это подтверждает показания 11-й строки листинга 2.1, которая также указывает на наличие раздела размером 64 Мбайт для подкачки (свопинга) на диске /dev/sda.

 

По умолчанию каждый процесс в ОС Linux имеет отдельную область памяти. То есть процесс не может получить доступ к области памяти, принадлежащей другому процессу. Кроме того, процессы не имеют доступа и к памяти, занятой процессами ядра системы. Для облегчения задачи совместного доступа к данным в памяти могут создаваться совместно используемые сегменты памяти. К областям памяти с совместным доступам могут обращаться несколько процессов. Ядро системы должно управлять областями памяти с совместным доступом. Для просмотра текущих сегментов памяти с совместным доступом в системе Linux можно использовать команду ipcs.

 

В листинге 2.3 показаны результаты работы команды ipcs.

 
1 [root@shadrach /proc]# ipcs -m
2
3 ------ Shared Memory Segments -------
4 key shmid owner perms bytes nattch status
5 0x00000000 0 rich 600 52228 6 dest
6 0x395ec51c 1 oracle 640 5787648 6
7
8[root@shadrach /proc]#
 

Листинг 2.3. Пример работы команды ipcs

В строке 1 вводится команда ipcs с параметром -m для отображения только совместно используемых сегментов. В строках 3–6 показаны результаты выполнения этой команды. Каждый совместно используемый сегмент памяти имеет своего владельца. Кроме того, каждый сегмент имеет также стандартное для UNIX разграничение прав доступа, которое определяет его взаимоотношения с другими пользователями. Ключевым параметром при этом выступает разрешение другим пользователям на доступ к совместно используемому сегменту памяти.

 

Управление процессами

Операционная система Linux обрабатывает программы как процессы. Управлением процессами занимается ядро системы. Ядром создается первый процесс системы init, который затем запускает остальные процессы в системе. При запуске ядра процесс init загружается в виртуальную память системы. Далее каждому запускающемуся процессу выделяется область виртуальной памяти для хранения данных и кода, который будет выполняться системой.

 

После запуска процесс init считывает файл /etc/inittab, чтобы определить какие еще процессы следует запустить в системе. В операционной системе Linux применяется система init с различными уровнями запуска (run levels). Уровень запуска может указывать процессу init запускать только определенные типы процессов. В ОС Linux существует пять уровней запуска init.

 

На уровне запуска 1 могут выполняться только основные системные процессы вместе с одним терминальным процессом, поддерживающим одну консоль. Такой режим работы называется однопользовательским (single-user mode). Однопользовательский режим в основном используется при обслуживании файловой системы сервера. Стандартный уровень запуска init — 3. На этом уровне запуска выполняется большинство прикладных программ, в частности программы обслуживания сети. Еще один часто используемый уровень запуска в ОС Linux — 5. На этом уровне выполняется работа с графической оболочкой X Window. Обратите внимание, как с помощью уровней запуска система Linux управляет функционированием всего ПК. Изменяя уровень запуска процессов с 3-го по 5-й, система Linux совершает переход от работы с консолями к работе в графическом режиме с помощью оболочки X Window.

 

Для отображения состояния текущих процессов в ОС Linux применяется команда ps. Формат команды:

 
ps [options],

где в качестве options могут выступать различные опции, в зависимости от которых видоизменяются параметры вывода результатов работы команды. В табл. 2.2 представлены все доступные опции (иногда их называют ключами) команды ps.

 
Таблица 2.2. Опции команды ps
Опция Описание
l Вывод результата в длинном формате
u Вывод в пользовательском формате (показывает имя пользователя и время запуска)
j Вывод результата в рабочем формате (показывает идентификаторы GID и SID процесса)
s Вывод результата в сигнальном формате
v Вывод результата в vm-формате
m Отображает состояние памяти
f Использует для вывода forest-формат (показывает процессы в виде дерева)
a Показывает процессы других пользователей
x Показывает процессы, не отображая управляющий терминал
S Показывает дочерний CPU, а также время и страницу сбоев
c Название команды для task_struct
e Показывает состояние после командной строки и а+
w Выводит результат в расширенном формате
h Не выводит заголовок
r Показывает только запущенные процессы
n Показывает числовой вывод для USER и WCHAN
txx Показывает процессы, управляемые терминалом ttyxx
O Сортирует вывод процессов по ключам к1,к2 и т.д.
Pids Показывает только процессы с указанными PID
 

Как видите, для управления выводом команды ps существует много опций. Пример работы этой команды показан в листинге 2.4.

 
1 [rich@shadrach rich]$ ps ax
2 PID TTY STAT TIME COMMAND
3 1 ? S 0:03 init [5]
4 2 ? SW 0:00 [kflushd]
5 3 ? SW 0:00 [kpiod]
6 4 ? SW 0:02 [kswapd]
7 232 ? S 0:00 portmap
8 278 ? S 0:00 syslogd
9 288 ? S 0:00 klogd
10 301 ? S 0:00 /usr/sbin/atd
11 314 ? S 0:00 crond
12 327 ? S 0:00 inetd
13 348 ? SW 0:00 [lpd]
14 369 ? S 0:00 sendmail: accepting connections on port 25
15 383 ? S 0:00 gpm -t ms
16 396 ? S 0:01 httpd
17 415 ? S 0:13 xfs
18 435 tty1 SW 0:00 [mingetty]
19 436 tty2 SW 0:00 [mingetty]
20 437 tty3 SW 0:00 [mingetty]
21 438 tty4 SW 0:00 [mingetty]
22 439 tty5 SW 0:00 [mingetty]
23 440 tty6 SW 0:00 [mingetty]
24 441 ? S 0:05 /etc/X11/prefdm -nodaemon
25 488 ? S 0:00 kwmsound
26 578 ? S 1:01 ora_pmon_test1
27 580 ? S 0:07 [oracle]
28 582 ? S 0:11 ora_lgwr_test1
29 584 ? S 3:34 ora_ckpt_test1
30 586 ? S 19:38 ora_smon_test1
31 588 ? S 0:00 ora_reco_test1
32 590 ? S 0:00 ora_s000_test1
33 592 ? S 0:00 [oracle]
34 594 ? S 0:00 ora_arc0_test1
35 9102 ? S 0:00 kwmsound
36 9710 ? S 0:26 /usr/X11R6/bin/X
37 18854 ? S 0:05 /oracle/product/8.1.5/bin/tnslsnr LISTENER -i
38 19607 ? S 0:00 httpd
39 19608 ? S 0:00 httpd
40 19609 ? S 0:00 httpd
41 19610 ? S 0:00 httpd
42 19611 ? S 0:00 httpd
43 19657 ? S 0:00 httpd
44 19658 ? S 0:00 httpd
45 19659 ? S 0:00 httpd
46 24844 ? S 0:00 kwmsound
47 24905 ? S 0:00 -:0
48 25357 ? S 0:00 in.telnetd
49 25358 pts/0 S 0:00 login -- rich
58 25359 pts/0 S 0:00 -bash
51 25484 pts/0 R 0:00 ps ax
52 [rich@shadrach rich]$
 

Листинг 2.4. Пример работы команды ps

В строке 1 задана команда ps. Для отображения всех текущих процессов в системе были заданы опции a и x. В первой колонке отображаются идентификаторы процессов (Process Identifier — PID). В строке 3 вы видите процесс init, запущенный ядром. Процессу init назначается PID 1. Остальным процессам, запускающимся после init, идентификаторы процессов назначаются в порядке возрастания. Два процесса не могут иметь одинаковый идентификатор.

 

В третьей колонке отображается состояние текущего процесса. В табл. 2.3 дается расшифровка всех возможных кодов состояния процесса.

 
Таблица 2.3. Коды состояния процесса
Код Описание
D Непрерываемый, находящийся в ожидании
R Выполняется
S Ожидающий
T Отслеживается или остановлен
Z Нефункциональный процесс-"зомби"
W У процесса нет страниц в памяти (процесс свопирован)
< Процесс с высоким приоритетом
N Процесс с низким приоритетом
L Некоторые страницы оперативной памяти блокированы
 

Название процесса отображается в последней колонке листинга. Заключенные в квадратные скобки ([]) процессы вследствие низкой активности были перекачаны из памяти в пространство подкачки на жестком диске. Например, в строках 18–23 показаны выполняющиеся процессы виртуальных консолей сервера Linux. Так как виртуальные сеансы не открывались пользователями, то они не являются активными и были переданы пространству подкачки. Если же пользователь открывает виртуальный сеанс, то соответствующий процесс mingetty будет вызван из области свопинга обратно в память для выполнения. Это создает небольшую задержку, влияющую на производительность приложения. В строках 26–34 вы видите процессы, принадлежащие серверу баз данных Oracle. Некоторые процессы свопируются на жесткий диск, некоторые — остаются в памяти.

 

Управление драйверами устройств

Еще одна из зон ответственности ядра — управление аппаратными устройствами ПК. Любое устройство в системе, с которым ОС Linux должна взаимодействовать должно иметь драйвер (специальный код) внутри ядра. Драйверный код позволяет ядру вести двусторонний обмен данными с устройством. Для встраивания драйвера устройства в ядро ОС Linux используются два способа.

 

Раньше единственным способом вставки кода драйвера устройства в ядро была перекомпиляция ядра системы. Каждый раз, добавляя новое устройство в систему, вы были вынуждены перекомпилировать ядро. По мере того как увеличивалось количество устройств, поддерживаемых системой Linux, этот процесс становился все более неэффективным. Поэтому был разработан более эффективный метод вставки драйвера устройства в ядро — с помощью модулей ядра. Модули ядра могли вставляться в уже запущенное ядро и также "на ходу" выгружаться из него, когда устройство уже не используется. Далее в этой лекции в разделе "Модули ядра" этот механизм будет рассмотрен более подробно.

 

Все физические устройства в ОС Linux представляются специальными файлами устройств. Файлы устройств разделяются на три вида:

 
  • символьные;
  • блочные;
  • сетевые.
 

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

 

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

 
1 [rich@shadrach /dev]$ ls -al sda* ttyS*
2 brw-rw----1 root disk 8, 0 May 5 1998 sda
3 brw-rw----1 root disk 8, 1 May 5 1998 sda1
4 brw-rw----1 root disk 8, 10 May 5 1998 sda10
5 brw-rw----1 root disk 8, 11 May 5 1998 sda11
6 brw-rw----1 root disk 8, 12 May 5 1998 sda12
7 brw-rw----1 root disk 8, 13 May 5 1998 sda13
8 brw-rw----1 root disk 8, 14 May 5 1998 sda14
9 brw-rw----1 root disk 8, 15 May 5 1998 sda15
10 brw-rw----1 root disk 8, 2 May 5 1998 sda2
11 brw-rw----1 root disk 8, 3 May 5 1998 sda3
12 brw-rw----1 root disk 8, 4 May 5 1998 sda4
13 brw-rw----1 root disk 8, 5 May 5 1998 sda5
14 brw-rw----1 root disk 8, 6 May 5 1998 sda6
15 brw-rw----1 root disk 8, 7 May 5 1998 sda7
16 brw-rw----1 root disk 8, 8 May 5 1998 sda8
17 brw-rw----1 root disk 8, 9 May 5 1998 sda9
18 crw-------1 root tty 4, 64 Nov 29 16:09 ttyS0
19 crw-------1 root tty 4, 65 May 5 1998 ttyS1
20 crw-------1 root tty 4, 66 May 5 1998 ttyS2
21 crw-------1 root tty 4, 67 May 5 1998 ttyS3
22 [rich@shadrach /dev]$
 

Листинг 2.5. Пример списка устройств на сервере с ОС Linux

В строке 1 задана команда ls для отображения всех файлов устройств sda и ttyS. Устройство sda — это первый жесткий диск SCSI, а ttyS соответствуют стандартным последовательным портам (COM) IBM-совместимых ПК. В строках со 2-й по 17-ю показаны все устройства sda в системе. Не все из них используются в данный момент, однако они создаются на тот случай, если в них возникнет потребность. В строках 18–21 вы видите все доступные в системе устройства ttyS.

 

В пятой колонке указаны старшие номера узлов устройств. Обратите внимание, что все устройства sda имеют один и тот же старший номер узла устройства (8), а все устройства ttyS используют 4. В шестой колонке указаны младшие номера узлов устройств. Как видите, каждое устройство с общим старшим номером имеет уникальный младший номер устройства. В первой колонке отражаются права доступа к файлу устройства. Первый символ в правах доступа говорит о типе файла. Заметьте, что файлы SCSI дисков все помечены как блоковые (b), в то же время файлы последовательных портов имеют пометку (c), т.е. определены как символьные.

 

Для того чтобы создать новый узел для устройства, можно воспользоваться командой mknod. Формат mknod следующий:

 
mknod [OPTION] NAME TYPE [MAJOR MINOR],

где NAME — это имя файла, а TYPE — его тип (блоковый или символьный). Параметр OPTION имеет лишь один вариант. Опция -m позволяет устанавливать права доступа к создаваемому файлу. Будьте внимательны при выборе уникальных старшего и младшего номеров узла устройства.

 

Управление файловой системой

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

 
Таблица 2.4. Файловые системы, поддерживаемые в ОС Linux
Файловая система Описание
affs Файловая система Amiga
ext Расширенная файловая система
ext2 Вторая расширенная файловая система
hpfs Высокопроизводительная файловая система OS/2
iso9660 Файловая система ISO 9660 ( для CD-ROM)
minix Файловая система ОС MINIX
msdos Система FAT16 компании Microsoft
ncp Файловая система компании NetWare
nfs Сетевая файловая система
proc Доступ к системной информации
smb Файловая система Samba (SMB)
sysv Старая файловая система UNIX
ufs Файловая система ОС Solaris и SunOS
umsdos UNIX-подобная файловая система поверх MS-DOS
vfat Файловая система ОС Windows 95
xia Система подобная ext2. Не используется
 

Любой жесткий диск для использования системой Linux должен быть форматирован с помощью одной из файловых систем, указанных в табл. 2.4. Форматирование в файловой системе Linux подобно форматированию диска в системе MS-DOS. Вначале операционная система должна занести на диск необходимую системную информацию, и только после этого диск можно использовать для дальнейшей работы. Для формирования файловой системы в ОС Linux используется команда mkfs. Формат команды mkfs

 
mkfs [-V] [-t fstype][fs-options] filesys [blocks],

где fstype указывает тип используемой файловой системы, а blocks — количество используемых в ней блоков. Файловой системой по умолчанию является ext2, а число блоков — все доступные блоки в разделе.

 

Ядро Linux взаимодействует с другими файловыми системами посредством виртуальной файловой системы Virtual File System (VFS). Таким образом обеспечивается стандартный интерфейс между ядром и всеми файловыми системами. Виртуальная файловая система VFS по мере монтирования и использования какой-либо файловой системы кэширует информацию о ней в памяти.

 

Модули ядра

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

 

Модули могут добавляться в ядро с помощью команды insmod. Формат команды insmod представлен ниже

 
insmod [-fkmpsxXv] [-o module_name] object_file [symbol = value ...].

Программа insmod пытается связать код модуля, содержащийся в object_file, с запущенным ядром системы. В табл. 2.5 показаны параметры командной строки, которые можно задавать с командой insmod.

 
Таблица 2.5. Параметры командной строки для команды insmod
Параметр Описание
- f Пытается загрузить модуль даже при несоответствии версии ядра
- k Устанавливает флаг автоматической очистки
- m Выводит карту загрузки
- o Выводит название модуля в явном виде
- p Тестирует модуль
- s Записывает все действия в syslog
- v Режим с высокой детализацией вывода
- X Экспортирует все внешние символы модуля
- x Не экспортирует внешние символы модуля
 

Программа insmod связывает модульный код с кодом ядра только на определенное время. При перезагрузке сервера под управлением Linux ядро загружается без добавленных ранее модулей. Решение этой проблемы достигается применением программы modprobe.

 
modprobe module.o [symbol=value ...]
modprobe -t -tag pattern
modprobe -a -t tag pattern
modprobe -1 [ -t tag ] pattern
modprobe -r module
modprobe -c

В первом случае команда modprobe используется в формате для загрузки отдельного модуля в ядро. Если модулю нужно задать какие-либо параметры, их также можно ввести из командной строки. Параметр -t позволяет команде modprobe загружать все модули, соответствующие определенному образцу в списке. Выгрузить определенный модуль из ядра позволяет опция -r.

 

Модули можно заносить в список, который будет включен в файл, считываемый при загрузке системы. В версии ОС Linux Mandrake 6.0 файл modules находится в /lib/modules/2.2.9-19mdk/modules.dep.

 

В этом файле содержится список модулей, которые команда modprobe попытается установить при загрузке системы. Для добавления/удаления модулей из файла modules применяется команда depmod.

 

Еще один важный файл для modprobe — это файл /etc/conf.modules. В этом файле конфигурации устанавливается, как должна вести себя программа modprobe в том или ином случае. В табл. 2.6 показаны строки конфигурации, которые могут присутствовать в этом файле.

 
Таблица 2.6. Команды файла /etc/conf.modules
Команда Описание
keep Указывает modprobe добавлять все пути из файла conf, а не замещать их
path=MOD_PATH Указывает на каталог, содержащий модули
path[tag]=MOD_PATH Определяет образец модулей, содержащихся в каталоге
alias module real-name Указывает псевдоним для имени модуля
pre-install module command Выполняет команду command перед установкой модуля
install module command Выполняет команду command во время установки модуля
post-install module command Выполняет команду command после установки модуля
pre-remove module command Выполняет команду command перед удалением модуля
remove module command Выполняет команду command во время удаления модуля
post-remove module command Выполняет команду command после удаления модуля
 

Пример файла /etc/conf.modules показан в листинге 2.6.

 
1 alias scsi_hostadapter aic7xxx
2 alias eth0 3c59x
3 alias parport_lowlevel parport_pc
4 pre-install pcmcia_core /etc/rc.d/init.d/pcmcia start
 

Листинг 2.6. Пример файла /etc/conf.modules

В строках 1–3 описываются псевдонимы для стандартных устройств, которые загружаются в список модулей. Каждое стандартное устройство указывает имя файла загружаемого модуля. В строке 4 указана программа, которая должна запускаться перед загрузкой модуля pcmcia.

 

Версии ядра

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

 

Разработчиками ядра поддерживается строгая система иерархии версий. Формат окончательной версии ядра (так называемый релиз)

 
linux-a.b.c,

где a — старший номер релиза, b — младший номер релиза и c — номер патча ("заплаты"). В настоящее время принято считать, что все релизы с нечетными младшими номерами являются тестовыми, а релизы с четными младшими номерами — стабильными и готовыми к использованию.

 

На момент написания данного курса текущим стабильным релизом ядра Linux был 2.2.13, текущим же тестовым релизом — 2.3.31. Хотя текущим стабильным релизом является 2.2.13, большинство распространителей Linux пока не включают его в свои версии Linux.

 

Для того чтобы определить версию вашей системы Linux, введите команду uname с параметром -a. В листинге 2.7 показана работа этой команды применительно к ОС Mandrake 6.0 Linux.

 
1 [rich@shadrach rich]$ uname -a
2 Linux shadrach.smallorg.org 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 i586 unknown
3 [rich@shadrach rich]$
 

Листинг 2.7. Пример выполнения команды uname -a

Результаты работы команды uname показаны в строке 2. В третьем поле строки 2 отображена версия ядра Linux. В нашем примере это ядро 2.2.9, скомпилированное специально для работы в Mandrake Linux, о чем говорит добавленный после номера версии префикс -19mdk.

 

Имеется возможность получения новых версий ядра для установки на сервере Linux. Но для этого вы должны иметь исходный код ядра, который можно получить через Internet из архива ядер ОС Linux по адресу: http://www.kernel.org. Однако компиляция и установка новой версии ядра задача не для новичка. Это — сложный многошаговый процесс. Если вы все же решитесь самостоятельно модернизировать ядро Linux, пожалуйста, внимательно ознакомьтесь с документацией, которая входит в поставку исходного кода. Обращайте особое внимание на особенности, касающиеся той или иной версии Linux.

 

Предупреждение

 

Установка нового ядра Linux происходит по принципу "если работает, не трогай". Если ваш сервер на базе ОС Linux работает нормально, не пытайтесь установить новое ядро лишь потому, что оно новое. Большинство версий 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.

 

Оболочка GNU bash

Для выполнения команд или программ пользователя ядру необходим макропроцессор для их обработки. В мире UNIX макропроцессор называют оболочкой (shell). Наиболее широко распространена оболочка Bourne shell, названная так в честь своего создателя Стефена Боурна (Stephen Bourne). Оболочка Bourne shell — это программа, которая запускается отдельным процессом в системе и организует интерактивный сеанс работы с пользователем. При этом пользователь может вводить команды из командной строки. Командами могут выступать прикладные программы, команды оболочки или программные файлы, содержащие команды оболочки (так называемые файлы сценариев). Запуск выполняемых программ оболочка осуществляет в отдельном новом процессе. Это позволяет каждой программе, запущенной из оболочки, иметь собственный процесс в системе, который отображает ее текущее состояние.

 

Разработчики проекта GNU знали, как велика потребность в хорошей оболочке для работы открытого кода в UNIX-подобной операционной среде. Разработанная ими программа оболочки, была названа bash, что означает Bourne-Again SHell. Оболочка bash полностью совместима со своей первой версией, называемой просто sh. В оболочку bash также включены различные возможности из других оболочек, в частности оболочек C shell (csh) и Korn shell (ksh). В настоящее время в подавляющем большинстве версий ОС Linux по умолчанию принята оболочка bash. Текущая версия bash 2.03.

 

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

 
riley:x:504:506:Riley M.:/home/riley:/bin/bash

Здесь двоеточия используются для разделения полей. В первом поле указано имя пользователя системы. Во втором — хранится в зашифрованном виде пароль пользователя. В данном конкретном примере версия ОС Linux использует так называемые "теневые" пароли. При этом настоящий пароль шифруется и помещается в отдельный файл. Третье и четвертое поля отображают идентификатор пользователя и группы, соответственно. В пятом поле указывается настоящее имя пользователя. Далее, в шестом поле назначается рабочий каталог пользователя, к которому ему будет предоставляться доступ сразу после входа в систему. И в последнем поле задается оболочка, с которой пользователь будет работать по умолчанию. В нем просто указывается, откуда запускать оболочку для пользователя (в нашем случае bash).

 

Оболочку bash можно настраивать определенным образом. Ее конфигурирование осуществляется несколькими файлами. Когда оболочка bash вызывается процессом регистрации в системе, то выполняется любая команда, записанная в файле /etc/profile. Эти операции действительны для всех пользователей, с оболочкой по умолчанию bash, указанной в файле passwd. В листинге 2.9 показан файл /etc/profile, сформированный по умолчанию для системы Mandrake 6.0 Linux.

 
1 # /etc/profile
2
3 # System wide environment and startup programs
4 # Functions and aliases go in /etc/bashnc
5
6 PATH="$PATH:/usr/X11R6/bin"
7 PS1="[\u@\h \W]\\$ "
8
9 # In bash2 we can't define a ulimit for user :-(
10 [ "$UID" = "0" ] && {
11 ulimit -c 1000000
12 }
13
14 if [`id -gn`= `id -un` -a `id -u`-gt 14 ]; then
15 umask 002
16 else
17 umask 022
18 fi
19
20 USER=`id -un`
21 LOGNAME=$USER
22 MAIL="/var/spool/mail/$USER"
23
24 HOSTNAME=`/bin/hostname`
25 HISTSIZE=1000
26 HISTFILESIZE=1000
27 export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL
28
29 for i in /etc/profile.d/*.sh ; do
30 if [ -x $i ]; then
31 . $i
32 fi
33 done
34
35 unset i
 

Листинг 2.9. Пример файла /etc/profile

Основная функция файла /etc/profile — создание новых переменных окружения для установки параметров сеанса работы с оболочкой, которые могут использоваться приложениями, запускаемыми из этой оболочки. Обратите внимание на переменную окружения MAIL в строке 22. Как администратор системы электронной почты вы должны знать механизм ее работы. Эта переменная указывает путь почтовой программе к почтовому ящику данного пользователя.

 

После выполнения команд из файла /etc/profile оболочка bash ищет еще три конфигурационных файла в рабочем каталоге пользователя. Это файлы .bash_profile, .bash_login и .profile. Все они должны находиться в рабочем каталоге пользователя и, следовательно, могут быть настроены для определенного пользователя. Имеется еще один файл конфигурации — .bash_logout. Этот файл сценария выполняется по окончании сеанса работы с пользователем. Конфигурируя файлы сценариев для отдельных пользователей, системный администратор может добиться оптимальной работы оболочки bash для каждой системы.

 

Компилятор GNU gcc

Если планируется установка программного обеспечения, которое распространяется в исходном открытом коде, то понадобится специальная программа-компилятор для создания из него выполняемого файла. Все программы для ОС Linux, описываемые в этом курсе, написаны на языке программирования С. Таким образом, на вашем сервере Linux должен быть установлен компилятор языка С. Самый широко распространенный компилятор для Linux — это GNU — компилятор языка С (gcc).

 

У него довольно интересная предыстория. Группа проекта GNU разработала и распространила первую версию компилятора gcc в начале 1990 года. Продолжив развитие gcc, организаторы проекта GNU выпустили версию 2.0, периодически улучшая ее вплоть до версии 2.8, которая вышла в 1997 году. В то же время другая группа разработчиков работала над созданием компилятора для языка С++, названного egcs (произносится как "eggs"). Работы над gcc после выхода версии 2.8 были направлены на объединение усилий с проектом egcs. После этого вышла версия egcs 1.0, объединяющая в одном пакете компиляторы языков С и С++.

 

К сожалению, проект egcs оказался недолговечным (вышла только еще одна версия egcs 1.1). В настоящее время оба проекта (gcc и egcs) снова вернулись к идеям, реализованным в gcc. На момент выхода этого курса последней версией gcc была 2.95. В ней поддерживаются компиляторы и для языка С, и для языка С ++. Вероятно, для усложнения жизни себе и другим некоторые распространители Linux продолжают называть этот компилятор egcs версии 2.95. Остается надеяться, что это недоразумение вскоре будет устранено.

 

Чтобы определить, какая версия gcc используется в вашей системе, в командной строке задайте опцию --version:

 
[rich@shadrach rich]$ gcc --version
pgcc-2.91.66
[rich@shadrach rich]$

Здесь приведен пример для системы Mandrake 6.0 Linux, с использованием компилятора gcc версии 2.91 с уровнем обновлений 66.

 

Утилита make

Со временем проекты на С и С++ становились все сложнее. Приходилось работать с несколькими исходными файлами, каждый из которых имел свой файл заголовка. Компиляция отдельных исходных файлов порождала несколько объектных файлов, которые затем необходимо было связать в определенной комбинации для получения выполняемых файлов, а это довольно громоздкая и неприятная работа. Для упрощения этих задач большинством компиляторов языка С и С++ используется утилита make. В функции этой утилиты входит управление созданием выполняемых файлов на основе изменений в исходных файлах или согласно конфигурации, заданной переменными в конфигурационном файле make.

 

В проекте GNU имеется версия утилиты make, которая полностью совместима с компилятором gcc. На момент выхода данного курса текущая версия утилиты make была 3.78.1.

 

Главной составляющей утилиты make является Makefile. В нем указывается алгоритм компиляции исходного кода для создания выполняемой программы. Пример Makefile приведен в листинге 2.10.

 
1 # Makefile -- Make file for test program
2 #
3
4 # Edit the following for your installation
5
6 CC = gcc
7 #===================================
8
9 # Compiler and linker flags
10
11 CFLAGS = -0
12 LFLAGS = -0
13
14 # This program's object code files
15
16 OBJS = test.o
17
18 # File dependencies
19
20 all: test
21
22 objs: $(OBJS)
23
24 clean:
25 rm -f $(OBJS)
26 rm -f test
27
28 test: $(OBJS)
29 $(CC) -o $@ $(LFLAGS) $(OBJS) $(LIBS)
30
31 test.o: test.c
32 $(CC) -c $(CFLAGS) -o $@ $<
 

Листинг 2.10. Пример Makefile

В строках 6, 11,12 и 16 задаются переменные Makefile. Эти переменные могут изменяться пользователем в соответствии с ресурсами системы. В строке 18 объявляется создание так называемых действий системы. Каждое действие можно запускать отдельно, задавая его имя как параметр команды make. Например, чтобы запустить действие clean, которое удаляет все старые объекты и выполняемые файлы, нужно в командной строке набрать

 
make clean

Для создания объектных файлов для тестовой программы просто наберите

 
make objs

Если же в командной строке просто задать make, то она выполнится с целью all и создаст выполняемый файл test.

 

Распространители ОС Linux

Если у вас уже кружится голова от предлагаемых вариантов и версий ОС Linux, не волнуйтесь. К счастью, достаточно умные люди уже собрали все эти лоскутки одеяла в одно целое для нашего с вами удобства. Предварительно собранные пакеты операционной системы Linux называются дистрибутивами Linux (Linux distribution).

 

Большинство дистрибутивов доступны как за определенную плату, так и бесплатно. Часто у некоторых людей возникают вопросы, каким образом компании могут оплачивать бесплатное программное обеспечение. Ответом может служить общественная лицензия проекта GNU. Девиз распространения системы Linux таков: "Бесплатно — разговор, а за пиво плати". Распространители ОС Linux вправе назначать ту цену на свои продукты, которую они считают приемлемой для общественности, т.е. которую эта общественность готова заплатить за их продукт. "Бесплатным" распространение считается потому, что программное обеспечение, входящее в пакет распространителя, содержит исходные тексты всех программ и вы имеете право модифицировать их по своему усмотрению. Большинство компаний-распространителей ОС Linux предлагают бесплатные версии (так же, как "бесплатное пиво") своих систем на общественных началах.

 

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

 

Большинство дистрибьюторов ОС Linux определенным образом пакуют программы, входящие в поставку ОС. Затем эти "запакованные" программы можно легко установить или удалить из системы, не влияя при этом на работу системы вцелом. Главным образом применяется метод пакования RPM, перешедший из дистрибутива Linux Red Hat. Все необходимые для работы файлы программа RPM пакует в один дистрибутивный файл. Установить либо удалить программное обеспечение программа RPM может с помощью одной простой команды.

 

В табл. 2.8 представлен список наиболее заметных распространителей ОС Linux на сегодняшний день. Приведены также версии ядра и библиотек языка С, входящих в поставку.

 
Таблица 2.8. Список распространителей ОС Linux
Дистрибутив Версия ядра Версия GLIBC
Caldera OpenLinux 2.3 2.2.10 2.1.1
Debian Linux 2.1 2.0.36 2.1
Mandrake 6.1 Linux 2.2.13pre 2.1.1
Red Hat 6.2 Linux 2.2.12 2.1.2
Slackware 7.0 2.2.13 2.1.2
SuSe 6.2 Linux 2.2.10 2.1.1
 

Как видно из табл. 2.8, дистрибутивы ОС Linux не очень сильно отличаются версиями ядра и библиотек языка С. Выбирая дистрибутив Linux для установки в качестве сервера, убедитесь, что в нем поддерживаются все требования, необходимые для нормальной работы приложений, которые вы собираетесь использовать.

 

Резюме

Основной составляющей сервера электронной почты на базе Linux является сама операционная система Linux. Сервер состоит из нескольких логических компонентов, но его сердцем является ядро системы Linux. Ядро управляет такими компонентами операционной системы, как память, процессы, устройства и файловая система. Кроме ядра, для нормальной работы ОС требуются различные утилиты. Группой проекта GNU была создана самая крупная библиотека UNIX-совместимых утилит для работы с ядром ОС Linux. Оболочка bash shell обеспечивает механизм взаимодействия пользователей с операционной системой, позволяя им запускать программы. Компилятор gcc дает пользователям возможность создавать выполняемые программы с использованием языков программирования С и С++. Утилита make широко используется для преобразования исходных текстов упакованных программ в выполняемые модули. В настоящее время доступно много дистрибутивов ОС Linux, включающих в один пакет все необходимые для работы утилиты вместе с определенным ядром Linux. Новичков довольно часто смущает множество доступных дистрибутивов ОС Linux. Если вы приобретаете новый дистрибутив ОС Linux для вашей компании, то ознакомьтесь с предложениями от различных распространителей этой операционной системы. Многие из них предлагают специальные пакеты услуг для бизнес-пользователей.

 
Автор: Р. Блам   источник: http://www.INTUIT.ru 


 

13 центов(0,13$) за клик, выплаты через WebMoney каждый вторник +10% с рефералов

Мы выкупаем 100% трафа! $12 за 1000 хостов (РФ), и до $4 за 1000 хостов (зарубежный траф) + 10% с дохода Ваших рефералов!
 Выплаты через
WebMoney

~80-100$ за1000 хостов 2.5$ за 1 смс.
реф. процент - 10 %Выплаты происходят раз в неделю, в четверг на
WebMoney
 
 

 

____________________________

Посмотреть порно видео в онлайне »

_______________________________

 

   
   
Сайт управляется системой uCoz