Вы находитесь на странице: 1из 98

Так видит журнал читатель, который забыл оформить подписку:

№5(30) май 2005


подписной индекс 81655

СЬ
www.samag.ru

ЛИ
Почему MS SQL медленно работает?
Ищем причины
ЛИ
ТЯ Е

Ж ПИ
Строим защищенную беспроводную сеть:
ЗА ДНИ

WPA-Enterprise, 802.1x EAP-TLS


НУ

РА КУ
Настраиваем UPS под Linux
ЛЫ ГО

ТИ РАС
Как восстановить
удаленные файлы под BSD
К У ВО

Что важно знать об IP-телефонии

№3(40) март 2006

О
танавливаем Symantec Antivirus 9.0
НИ НО

ТР
в корпоративной сети
Эффективно управляем

С
подписной индекс 20780
полями пользователей в AD

БЫ
Контролируем безопасность сети
с помощью OSSIM
КА

Интервью с Ларри Уоллом –


создателем языка Perl
www.samag.ru

Узнай секреты WMI:


события и провайдеры

№3(40) март 2006


И
ЬГ
ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

Кириллизация в Linux
РА Е О

КО НЕО
АВ СЛ
Л

Л
ХА

ПО
УЕ

ЗА
Знакомимся с Gentoo:
установка системы
Так видит журнал читатель, оформивший подписку:
Создаем порт для FreeBSD
№5(30) май 2005
подписной индекс 81655
www.samag.ru

Почему MS SQL медленно работает?


Ищем причины
своими руками
Строим защищенную беспроводную сеть:
WPA-Enterprise, 802.1x EAP-TLS
Настраиваем UPS под Linux

Zserver Suite: защищаем


Как восстановить
удаленные файлы под BSD
Что важно знать об IP-телефонии
танавливаем Symantec Antivirus 9.0
в корпоративной сети

корпоративные хранилища
Эффективно управляем
полями пользователей в AD
Контролируем безопасность сети
с помощью OSSIM
Интервью с Ларри Уоллом –

данных
создателем языка Perl

Управляем сетевым
оборудованием
с помощью протокола SNMP
Работаем с PDF из Perl

ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Документация – экономия


времени или его бесполезная
Роспечать – 20780, 81655 трата?
Пресса России – 87836
Интер-почта – тел. (095) 500-00-60
оглавление

3 ТЕНДЕНЦИИ БЕЗОПАСНОСТЬ
4 СОБЫТИЯ 52 Zserver Suite: защищаем корпоративные
хранилища данных
АДМИНИСТРИРОВАНИЕ Как обеспечить защиту конфиденциальной инфор-
мации, хранимой и обрабатываемой на корпоратив-
6 Узнай секреты WMI: события и провайдеры ных серверах? Алексей Шелестов
Часть 1: дополнительные возможности info@securit.ru
Решаем задачи обработки системных событий, исполь-
зуя технологию WMI на примере подключения съем- ДОКУМЕНТАЦИЯ
ных USB-дисков. Константин Леонтьев
klеоnt@miсrоsоft.соm 56 Документация – экономия времени
или его бесполезная трата?
14 Кириллизация в Linux Искусство составления и использования документа-
Принято считать, что в Linux уже давно нет проблем с ки- ции – неотъемлемая часть работы хорошего IT-спе-
риллизацией приложений. Но на практике ситуация еще циалиста. Алексей Коршунов
весьма далека от идеальной. Алексей Барабанов akeeper@samag.ru
alekseybb@mail.ru
СЕТИ
22 Знакомимся с Gentoo
Часть 1: установка системы 60 Интернет «от Москвы до самых
Одним из главных завоеваний Open Source можно на- до окраин»
звать свободу выбора. Дальше всех в этом вопросе пош- Недорогой Интернет в любую точку страны? Это воз-
ли разработчики Gentoo – они решили вообще ничего можно! Все этапы подключения – от покупки оборудо-
не навязывать пользователю. Сергей Супрунов вания до настройки. Роман Ерин
amsand@rambler.ru kid@vsnet.ru

27 Собираем собственную ОС на базе Linux 64 Управляем сетевым оборудованием


Десятки компаний и тысячи программистов соревнуют- с помощью протокола SNMP
ся в создании лучшего Linux-проекта. Между тем, лю- Теоретические основы работы протокола SNMP и практи-
бой опытный пользователь может стать автором сис- ческая реализация решения некоторых задач с помощью
темы для домашнего ПК, не уступающей продуктам ги- сценариев на языке Perl. Андрей Бирюков
гантов IT-индустрии. Илья Александров mex_inet@rambler.ru
ilya_al@rambler.ru
ПРОГРАММИРОВАНИЕ
32 Создаем порт для FreeBSD своими руками
Часть 1: основные возможности 70 Переходим от VBScript к ASP и ASP.NET:
Cистема портов – то, чем по праву гордится FreeBSD. Часть2
Система содержит ссылки на десятки тысяч программ, Дописываем Framework на примере сетевых папок.
и список этот постоянно пополняется. Кто их создает, Иван Коробко
эти пополнения – некие выдающиеся специалисты? ikorobko@prosv.ru
Да вовсе нет. Вы тоже сможете стать одним из них.
Рашид Ачилов 78 Работаем с PDF из Perl
shelton@granch.ru Для создания и модификации документов PDF можно при-
менять самые различные средства: от дорогих настоль-
40 OpenPKG: кроссплатформенная система ных издательских систем до сценариев на популярных
пакетов языках программирования. Валентин Синицын
Обзор возможностей проекта. val@linuxcenter.ru
Андрей Коврин
kover@samag.ru ХОББИ
42 MikroTik – Router OS 84 Коллекция «Почему?»
Типичные задачи – организовать совместный доступ в Ин- Анна Николаева
тернет и вести учет трафика. Несмотря на простоту опре- Info1@samag.ru
деления, при более детальном подходе они распадаются
на сотни подзадач, полноценно справиться с которыми РЕТРОСПЕКТИВА
под силу далеко не каждому. Сергей Яремчук
grinder@ua.fm 86 История компьютеров «Амига»
Часть вторая: 1995-2006
46 Шлюз аутентификации пользователей После смерти Джея Майнера и банкротства компании
NuFW будущее Amiga оказалось под вопросом.
Фильтрация IP-пакетов – простое и эффективное средс- Сергей Зуев
тво защиты сетей. Но этому подходу явно не хватает megabyte2003@list.ru
детализации, а удаленность от прикладного уровня
требует согласования с другими инструментальными 92 КНИЖНАЯ ПОЛКА
средствами безопасности. Сергей Яремчук
grinder@ua.fm 77, 91 BUGTRAQ

№3, март 2006 1


конкурс

Редакция журнала «Системный администратор»


объявляет об учреждении 3 премий авторам
по итогам 2006 года:
 1 место – 30 000 рублей О номинациях
 2 место – 20 000 рублей 1. Серией материалов считается блок из не менее чем
 3 место – 10 000 рублей двух статей. Тема серии – по собственному выбору ав-
тора или же по выбору редакции.
Номинации 2. Статья, написанная на тему, придуманную автором
1. За лучшую серию материалов и одобренную редакцией.
2. За лучшую новую авторскую тему 3. Аналитическая статья может быть написана на тему,
3. За лучшую аналитическую статью предложенную автором или же на тему, заказанную ре-
дакцией.
Кто участвует
Участие принимают все авторы, опубликовавшие свои Кто судьи
статьи в журнале «Системный администратор» в тече- В состав жюри войдут сотрудники редакции и предста-
ние 2006 года. Напоминаем, что автором может стать лю- вители дружественных журналу информационных ре-
бой человек. сурсов.

Условия публикации предполагает объем, превышающий 20 тыс. знаков – раз-


Принимаются материалы, нигде ранее не опубликованные бивайте материал на несколько частей.
(в том числе в Интернете, прочих глобальных сетях, печат- Если вы пишете о продукте, технологии или компании,
ных изданиях и т. д.). Статьи не рецензируются. описывайте не только «плюсы», но и «минусы», а также при-
За содержание статьи ответственность несет автор. водите информацию о конкурентах.
В течение двух недель редакция принимает решение Рекомендуем ознакомиться со статьями на интересую-
о публикации статьи и сообщает об этом автору. щую вас тему, которые уже есть на нашем сайте.
Редакция оставляет за собой право редактировать пре-
доставленные материалы. Требования к виду присылаемых
Редакция имеет эксклюзивное право на распростране- материалов
ние принятого материала в журнале, включая возможность Статьи следует присылать в текстовом виде, предпочти-
его публикации в любой электронной форме. тельно в формате RTF или DOC. Имена пересылаемых
По истечении двух месяцев с момента выхода журнала, файлов только на английском языке. Выравнивание столб-
содержащего публикации, автор имеет право опубликовать цов производится табуляцией, а не пробелом. В тексте ста-
свой материал в другом месте только с предварительного тьи рекомендуется указывать местоположение иллюстра-
письменного согласия редакции и с обязательной ссылкой ций и подписи к ним, а сами иллюстрации не нужно встав-
на журнал «Системный администратор». лять в тело документа, их нужно запаковать в отдельный
По истечении одного года с момента первой публика- архив. Иллюстрации должны быть строго в формате PNG.
ции автор имеет право опубликовать свой материал в дру- Листинги должны содержать не более 60 символов (вмес-
гом месте без предварительного письменного согласия те с пробелами) в одной строчке. Переносы строк листин-
редакции. гов должны быть указаны в явном виде (---перенос стро-
ки---). Если в статье приводятся ссылки на ресурсы в сети,
Общие требования к статьям URL должен быть указан в явном виде.
Статьи не должны иметь рекламный характер какого-либо
продукта, компании или технологии. Контакты
В статье указываются ссылки на источники информа- Адрес: 107045, г. Москва, Ананьевский переулок д. 4/2,
ции. стр. 1, Редакция «Учительской газеты», журнал «Систем-
Не допускается несанкционированный перевод на рус- ный администратор»
ский язык статей, обзоров и сравнительных тестирований Телефон: (495) 928-82-53
продуктов, опубликованных в иностранных изданиях. Факс: (495) 928-82-53
Сайт: www.samag.ru
Рекомендации авторам e-mail: imp@samag.ru
Объем статьи – от 4 до 20 тыс. знаков. Если тема статьи secretar@samag.ru

2
тенденции
MySQL AB купила Netfrastructure лезом и стабильность программного обеспечения, лучшей
В конце февраля MySQL AB, известная своей свобод- поддержки языков азиатских стран, по-настоящему «чис-
ной базой данных, объявила о приобретении компании того» интерфейса.
Netfrastructure.
Руководитель приобретенной фирмы, Джим Стар- BECTA «противоречиво» относится
ки, до этого возглавлял Interbase, которая занималась к Open Source
разработкой и поддержкой одноименной СУБД. На ба- Пол Дженкинс из компании SimpleICT указал на «непосле-
зе этого кода (когда он был открыт) зародился Open довательность» в отношении британского агентства по об-
Source-проект Firebird, ставший фундаментом для бизне- разовательным коммуникациям и технологиям (BECTA)
са Netfrastructure. к открытому ПО.
Возможно, MySQL AB с помощью разработок и со- Список образовательных программ, опубликованный
трудников Netfrastructure намерена создать замену свое- BECTA, ранее сообщавшим о возможности для школ сэко-
му InnoDB. номить благодаря Open Source, содержит ничтожно малое
число приложений для GNU/Linux (18 против трех тысяч для
Fedora Core 5 все-таки вышла различных версий Windows). Вдобавок к этому там вовсе от-
После неоднократных переносов релиза новой версии на- сутствуют свободные программы для образования.
следника Red Hat Linux в середине марта наконец-то был Дженкинс же видит хорошие примеры из среды откры-
официально представлен выход Fedora Core 5. того ПО: «TuxMaths – отличная математическая программа
Последний перенос релиза FC5 был связан с ожида- для детей, но ее здесь нет. На самом деле, тут вообще ни-
нием GNOME 2.14, так что эта версия популярной графи- чего нет. Будь вы учителем, желающим использовать Linux,
ческой среды и вошла в состав дистрибутива. В качест- официальный сайт подсказал бы вам, что для этого нет про-
ве альтернативы предлагается KDE 3.5.1. Стоит отметить, граммного обеспечения».
что совершенствования в графической системе Fedora В свою очередь, представитель BECTA объявил о наме-
Core этим не ограничились – в последнем релизе дистри- рении закрыть веб-сайт и порекомендовал пользователям
бутива впервые появилась технология AIGLX (Accelerated обращаться к базе данных Curriculum Online. Однако, как вы-
Indirect GL X), по своей сути напоминающая XGL, разраба- яснилось, и в ней фактически нет программного обеспече-
тываемую в Novell для SUSE. AIGLX приводит в действие ния с открытым кодом.
GL-эффекты на рабочем столе благодаря модифицирован-
ному X-серверу (с некоторыми расширениями), обновлен- Составил Дмитрий Шурупов
ной версии Mesa и оконному менеджеру Metacity с компо- по материалам www.nixp.ru
зитным менеджером.
Кроме того, в Fedora Core 5 представлен офисный па-
кет OpenOffice.org 2.0.2, открытая реализация технологии
.NET Mono, ПО для виртуализации Xen, утилиты для рабо-
ты с пакетами на базе Yum, поддержка SELinux.

Ubuntu будут тестировать


больше обычного
Релизы Ubuntu Linux выходили каждые 6 месяцев, однако
для новой стабильной версии популярного GNU/Linux-дист-
рибутива для настольных ПК предлагается увеличить срок
тестирования на 6 недель.
Следующий релиз Ubuntu, получивший кодовое назва-
ние «Dapper Drake», должен появиться в апреле и станет
первой версией Ubuntu Linux с продолжительной техничес-
кой поддержкой для пользователей: 3 года – для десктоп-
редакции, 5 лет – для серверного варианта (для текущей
версии этот срок составляет 3 года).
Как сообщил в электронном письме Марк Шаттлворт,
основатель проекта Ubuntu Linux, очень важно, чтобы все
новшества были хорошо опробованы на стабильную рабо-
ту: «Мы будем жить с Dapper целых пять лет – так давай-
те предоставим релизу еще пару недель сейчас, дабы он
стал достойным продуктом проекта Ubuntu на все время
своей жизни».
Шаттлворт не собирается повредить хорошей репута-
ции Ubuntu, сложившейся благодаря своевременным ре-
лизам, однако небольшая задержка позволит добиться
большего тестирования, проверки на совместимость с же-

№3, март 2006 3


события

DiHalt 2006: компьютерное


искусство в чистом виде
Добро пожаловать на DiHalt 2006, один из крупных российских фестивалей компьютерного
искусства. Несколько сотен человек из разных городов России и ближнего зарубежья
в очередной раз соберутся в Нижнем Новгороде.
го лишь 3.5 MHz (вот уж где люди проявляют своё мастерс-
 Когда: 29-30 апреля тво, чтобы создать шедевры). Есть и специальный Wild-кон-
 Где: г. Нижний Новгород, ДК им. Орджоникидзе курс, в котором могут участвовать работы, не подходящие
(ул. Чаадаева, 17) по критериям в какой-либо из перечисленных конкурсов.
 Подробности: www.dihalt.org.ru Гарантируем, что здесь вы не увидите и не услышите ста-
рые, надоевшие вещи. Ведь среди прочих требований к кон-

П
роберитесь через джунгли творческого потенциала, курсным работам значится условие предоставления участни-
мастерства и искусства, созданного молодыми кре- ками только свежих, ранее не опубликованных нигде работ!
ативными людьми из разных стран. Вас ждет огром- Вне конкурсов, на открытом воздухе, пройдет соревнова-
ное количество интересных конкурсов, нацеленных на три ос- ние по спортивному метанию жёстких дисков на дальность,
новных направления: программирование, музыка и графика. а также другие забавные конкурсы. Победителей ожида-
Каждое из направлений, в зависимости от сложности реали- ют призы.
зации и методов подхода, разбито на несколько конкурсов. Фестиваль DiHalt – это еще и повод вживую встретить
На фестивале будут демонстрироваться работы, созданные старых друзей, с которыми зачастую общаешься только че-
не только на современных быстрых персональных компью- рез Интернет, а также завести новые знакомства! Здесь
терах, но и на редких для нашей страны компьютерах Amiga, вы не увидите ленивых геймеров. Только творческие люди
а также довольно популярных ранее и сейчас компьютерах из разных стихий.
ZX-Spectrum, которые вошли в массы как поистине «народные Прийти на фестиваль, посмотреть или поучаствовать мо-
компьютеры». Не исключено, что примут участие и мобиль- жет любой! Ограничений по возрасту нет. По сложившейся
ные средства (КПК, сотовые телефоны, фотоаппараты). традиции, а также в целях удобства для посетителей и ор-
В частности, программисты покажут свои навыки в со- ганизаторов, мероприятие пройдет в ДК им. Орджоникидзе,
здании программ (demo и intro), ограниченных размером: и будет представлено зрителям в виде шоу. На протяжении
4 kb intro; 64 kb intro и 16 mb demo. Для тех, кто не знает что двух дней на большом экране и с хорошей звуковой систе-
такое demo, расскажем подробнее. Это программа, соче- мой будут демонстрироваться конкурсные работы, зрите-
тающая в себе ряд видео-эффектов, объединённых каким- ли сами их будут оценивать (выставляя свою оценку рабо-
либо сюжетом или идеей, демонстрирующихся под музыку. те в специальном блокноте для голосования). В конце вто-
Это не заранее подготовленная анимация, а результат про- рого дня будут подведены итоги, а победители награждены
граммных расчётов в реальном времени, подкреплённых ра- ценными призами.
ботой художников, дизайнеров и музыкантов. Intro – это не- Любой зритель может превратиться в участника фестива-
большое demo, над которой программисты обычно работают ля, если пришлёт организаторам свою работу, соответству-
в одиночку. Художники будут соревноваться в умении: ющую указанным тематикам конкурсов, а также прочим ню-
 рисовать вручную на компьютере (так называемый ансам, указанным в правилах. Каждый конкурс специально
PixelArt); имеет свои ограничения и требования, что в конечном счете
 создавать рисунки с помощью 3D-пакетов (Lightwave, делает работы более интересными, а подходы к реализации
3DMax, Cinema); более изощренными, и это поможет выявить настоящих про-
 создавать рисунки, полученные комбинированными спо- фессионалов своего дела. Подробнее ознакомиться с прави-
собами (обработка в Photoshop, рендеринг, фотография, лами и требованиями для конкурсных работ вы можете по ад-
коллаж, ручное рисование и т. п.); ресу: http://www.dihalt.org.ru/rules.htm. Свои работы отправляй-
 ASCII-графика (изображения, составленные из обыч- те на электронный адрес dihalt@flatrate.ru.
ных букв и цифр). После окончания первого дня по принципу самоорганиза-
ции будет устроена hidden party (которая будет идти всю ночь).
Отдельно идут конкурсы по анимационным видеороли- На ней вы сможете обсудить увиденное с друзьями, да и прос-
кам и flash-анимации. то пообщаться с людьми в более неформальной атмосфере.
Ну а музыканты будут соревноваться в умении писать му- Иногородним посетителям будет оказана помощь по раз-
зыку/песни в формате mp3, а также в трекерных редакторах мещению в гостиницах Нижнего Новгорода.
с разделением на традиционные и альтернативные стили. Ждем вас на DiHalt 2006 !
Аналогичные конкурсы для компьютеров ZX-Spectrum, Все вопросы, связанные с фестивалем, отправляйте
на которых центральный процессор работает на частоте все- на адрес dihalt@flatrate.ru.

4
г. Москва, Хлебный переулок 2/3
тел. 29-161-32, 202-61-43
(круглосуточно)
e-mail: support@redline.ru

Íàøà êîìïàíèÿ 12 ëåò ïðåäîñòàâëÿåò ëèíèè ñâÿçè


â ñàìûõ íåïðîõîäèìûõ ìåñòàõ Ìîñêâû.
10 Ìáèò - $500, âêëþ÷åíî ÌÍÎÃÎ òðàôèêà.
Anything else?

Çâîíèòå, äîãîâîðèìñÿ!
;-)
администрирование

Узнай секреты WMI:


события и провайдеры
Часть I: дополнительные возможности
Алиса терпеливо ждала, пока Гусеница
не соблаговолит снова обратить на нее
внимание. Минуты через две та вынула кальян
изо рта, зевнула –раз, другой – и потянулась.
Потом она сползла с гриба и скрылась в траве,
бросив Алисе на прощанье:
– Откусишь с одной стороны – подрастешь,
с другой – уменьшишься!
– С одной стороны чего? – подумала Алиса.
– С другой стороны чего?
– Гриба, – ответила Гусеница, словно услышав
вопрос, и исчезла из виду.
С минуту Алиса задумчиво смотрела на гриб,
пытаясь определить, где у него одна сторона,
а где – другая; гриб был круглый, и это совсем
сбило ее с толку. Наконец, она решилась:
обхватила гриб руками и отломила с каждой
стороны по кусочку.

Приключения Алисы в стране чудес.


Чарльз Латвидж Доджсон
(Пер. Н. М. Демуровой)

Константин Леонтьев
Вы уже используете WMI, и эта технология помогает вам решать повседневные задачи?
Настало время копнуть поглубже и открыть новые возможности WMI, о которых многие,
возможно, даже и не догадываются!

6
администрирование
В поход за белым кроликом… ные с несанкционированным применением пользователя-
После того как азы WMI изучены [1], наша следующая ми съемных устройств памяти, довольно эффективно ре-
цель – рассмотреть расширенные возможности техноло- шают с помощью различного дополнительного ПО (напри-
гии, до использования которых добирается лишь неболь- мер, DeviceLock). Мы же с вами попробуем решить часть
шая часть системных администраторов, так как их приме- из них стандартными средствам WMI. Наша цель – зафик-
нение часто требует написания сценариев, что админис- сировать факт события подключения таких устройств и вы-
траторы ОС Windows делать обычно не любят. Мне хочет- полнить некоторое ответное действие (например, сцена-
ся сразу отметить, что эти возможности настолько удобны рий VBScript).
в использовании и полезны для решения нетривиальных Для начала давайте рассмотрим простой пример ко-
задач, что затраты сил и времени на их освоение и приме- да на VBScript, использующего WMI для синхронного от-
нение окупятся с лихвой. К тому же я постараюсь облег- слеживания событий подключения съемных дисковых ус-
чить вам эту задачу, включив в текст большое количест- тройств. Он послужит нам отправной точкой в данной ра-
во рабочих примеров из реальной жизни, которые послу- боте. Этот пример приведен на листинге 1. Попробуйте
жат хорошими шаблонами для решения ваших собствен- запустить этот сценарий командой cscript <имя сценария>
ных задач. и посмотреть на результат его работы при подключении ус-
Эта статья рассчитана на подготовленного читателя. тройств USB FlashDrive.
К таким читателям я отношу тех, кто уже использует в сво-
ей повседневной практике WMI и самостоятельно создает Листинг 1. Пример сценария синхронного отслеживания
подключения устройств USB
сценарии, использующие WMI для решения задач систем-
ного администрирования. strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" ↵
Однако не стоит отчаиваться и тем, кто хочет изучить эту & strComputer & "\root\CIMV2")
технологию с нуля. Для таких читателей я порекомендовал Set objEvents = objWMIService.ExecNotificationQuery _
("SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " & _
бы предварительно ознакомиться с моей статьей под назва- "TargetInstance ISA 'Win32_LogicalDisk'" & _
нием «Вы все еще не используете WMI?» из предыдущих " AND TargetInstance.DriveType = 2")
номеров журнала «Системный администратор» [1]. Wscript.Echo "Ожидаем события ..."
Для понимания материала этой статьи также необхо- Do While(True)
Set objReceivedEvent = objEvents.NextEvent
димы знания по программированию сценариев в среде
WSH (Windows Scripting Host). С подробной информаци- Wscript.Echo "Name: " & ↵
objReceivedEvent.TargetInstance.Name
ей по этому вопросу можно ознакомиться в переводной Wscript.Echo "Caption: " & ↵
книге Гюнтера Борна [2] и в оригинальной документации objReceivedEvent.TargetInstance.Caption
Wscript.Echo "FileSystem: " & ↵
Microsoft [3]. Все примеры, которые я использую, приведе- objReceivedEvent.TargetInstance.FileSystem
ны на языке VBScript и протестированы на ОС Windows XP Wscript.Echo "Description: " & ↵
objReceivedEvent.TargetInstance.Description
Service Pack 2 и Windows Server 2003, хотя многие из них
так же успешно будут работать и на Windows 2000, прав- Loop
да, для этого потребуется выполнить ряд подготовитель-
ных действий. Теперь давайте чуть подробнее разберем этот пример.
Напомню, что в предыдущей моей статье о техноло- Первые две строки служат для подключения к репозито-
гии WMI [1] очень кратко рассматривалась возможность рию WMI и не вызывают особого интереса. Третий же опе-
обработки событий WMI и объяснялись общие различия ратор сценария представляет для нас существенный инте-
между синхронной и асинхронной техникой обработки со- рес. Здесь мы вызываем метод ExecNotificationQuery объек-
бытий, а также была обозначена тема стандартных под- та objWMIService (он принадлежит к классу SWbemServices),
писчиков на события WMI (Standard Event Consumers), ко- который регистрирует временный подписчик на события
торые могут также применяться для обработки событий. WMI. Этот метод возвращает нам специальный объект-
В этой статье настал черед рассмотреть все эти темы под- подписчик, который по заданным нами критериям следит
робнее и детально разобрать примеры использования ос- за событиями WMI. Этот объект мы сохраняем в перемен-
новных провайдеров WMI, установленных по умолчанию ной objEvents. У класса SWbemServices также существует
в ОС Windows. второй метод регистрации временного подписчика на со-
бытия WMI, который называется ExecNotificationQueryAsync.
Типы событий WMI и способы Этот метод позволяет регистрировать временные подпис-
их обработки чики для асинхронной обработки событий WMI, о нем мы
Итак, приступим к изучению расширенных возможностей поговорим чуть-чуть позже.
WMI. Для того чтобы мой рассказ об этой теме был более Рассмотрим внимательнее WQL-запрос, с помощью
предметным, я решил выбрать конкретную практическую которого наш сценарий подписывается на события WMI.
задачку и рассмотреть ее решение поэтапно. Я остановил- Для того чтобы получать уведомления об интересующих
ся на задаче отслеживания событий подключения/отклю- нас событиях, мы делаем выборку объектов специально-
чения съемных дисковых устройств USB и реакции на них. го класса __InstanceCreationEvent, который служит для от-
Во многих организациях съемные устройства (в основном слеживания внутренних событий WMI, возникающих при
USB FlashDrive) являются головной болью для службы бе- создании экземпляров объектов любого класса, зарегис-
зопасности и администраторов. Обычно проблемы, связан- трированного в репозитории WMI. Заметим, что сущест-

№3, март 2006 7


администрирование
Таблица 1. Список основных классов для подписки Этот метод возвращает управление VBS-сценарию в тот
на внутренние (intrinsic) события WMI
момент, когда в системе происходит событие WMI, соот-
Внутренне классы событий Описание ветствующее условиям, заданным при создании объекта-
__ClassCreationEvent
Извещает подписчика о создании нового класса подписчика. Возвращаемый этим методом объект являет-
WMI
ся объектом-описателем происшедшего события и име-
__ClassDeletionEvent Извещает подписчика об удалении класса WMI ет свойства TargetInstance и TIME_CREATED. Свойство
__ClassModificationEvent Извещает подписчика об изменении класса WMI TargetInstance содержит не что иное как ссылку на экземп-
Извещает подписчика о создании экземпляра ляр объекта, вызвавшего это событие.
__InstanceCreationEvent
объекта класса WMI Теперь необходимо обратить наше пристальное вни-
__InstanceOperationEvent
Извещает подписчика об изменении, удалении мание на тот факт, что существуют два типа событий WMI.
или создании экземпляра объекта класса.
Внутренние (системные) события WMI и внешние (чуждые).
Извещает подписчика об удалении экземпляра
__InstanceDeletionEvent
объекта класса WMI
Эти типы событий принципиально отличаются по своему
происхождению, обслуживаются разными группами клас-
Извещает подписчика о модификации экземпляра
__InstanceModificationEvent сов WMI и как следствие отличаются по некоторым приемам
объекта класса WMI
Извещает подписчика о создании нового работы с ними. Все внутренние (intrinsic) классы отслежи-
__NamespaceCreationEvent
пространства имен WMI вания событий WMI выведены непосредственно из абс-
__NamespaceDeletionEvent
Извещает подписчика об удалении пространства трактного класса __Event, как я уже упоминал ранее, а вот
имен WMI
все внешние (extrinsic) классы событий выведены из клас-
Извещает подписчика об изменении в пространс- са __ExtrinsicEvent, который уже в свою очередь выведен
__NamespaceModificationEvent
тве имен WMI
из класса __Event.
Извещает подписчика о том, что некоторые собы-
__ConsumerFailureEvent тия не были доставлены подписчику из-за ошибок По сути дела за генерацию событий, доступ к которым
на стороне подписчика обеспечивают классы внутренних событий, отвечает само
__EventDroppedEvent
Извещает подписчика о том, что некоторые собы- ядро службы WMI, а за генерацию событий, доступ к ко-
тия не были доставлены до их подписчика
торым обеспечивают классы внешних событий, отвечают
Извещает подписчика о том, что некоторые со- уже WMI-провайдеры. Таким образом, если мы хотим от-
__EventQueueOverflowEvent бытия WMI не были доставлены до подписчика
из-за переполнения очереди событий слеживать события WMI, используя внутренние механиз-
Извещает подписчика о том, что был выполнен вы- мы службы WMI, то мы будем пользоваться универсаль-
__MethodInvocationEvent зов метода WMI. ными внутренними (intrinsic) классами. Если же интересу-
Не поддерживается на Windows NT/2000
ющий нас WMI-провайдер предоставляет свои собствен-
вуют и другие специальные классы отслеживания внут- ные (внешние) классы отслеживания событий, то исполь-
ренних событий WMI, например: __InstanceDeletionEvent, зовать следует именно их, так как они по определению бу-
__InstanceModificationEvent, __InstanceOperationEvent или дут работать эффективнее.
__ClassCreationEvent, __ClassDeletionEvent и другие. До- К сожалению, далеко не все провайдеры предоставляют
вольно очевидно из их названия, для отслеживания каких достаточный набор собственных внешних классов для от-
именно внутренних событий WMI эти специальные клас- слеживания событий. В листинге 3 дан пример использо-
сы созданы. В таблице 1 перечислены все основные сис- вания специального внешнего класса отслеживания со-
темные классы, обеспечивающие отслеживание внутрен- бытий Win32_ProcessStartTrace провайдера Win32. Также
них событий WMI. Все они выведены из абстрактного WMI в этом листинге используется пример отслеживания со-
класса __Event. бытий таймера с использованием внутренних классов от-
Далее обратим внимание на ключевое слово WITHIN слеживания событий. Хочу обратить ваше внимание на тот
в запросе WQL – в отличие от обычного языка SQL ключе- факт, что у всех внутренних классов отслеживания собы-
вое слово WITHIN в языке WQL определяет интервал опро- тий существует свойство TargetInstance, но его нет у вне-
са приходящих событий в секундах или служит для группи- шних классов отслеживания событий WMI. Зато, как пра-
ровки событий (в сочетании с ключевым словом GROUP) вило, внешние классы, отслеживающие внешние события
в течение указанного количества секунд. WMI, обладают довольно широким дополнительным набо-
В нашем конкретном случае временный подписчик собы- ром атрибутов, позволяющим легко устанавливать источ-
тий WMI – это объект, который мы получаем в переменную ник этого события.
objEvents в результате вызова метода ExecNotificationQuery. Также надо заметить, что ключевое слово WITHIN язы-
Он будет каждые 5 секунд осуществлять проверку всех со- ка WQL, позволяющее подписчику устанавливать интер-
бытий WMI по созданию экземпляров объектов, соответс- вал опроса экземпляров внутренних классов отслежива-
твующих критериям, заданным после ключевого слова ния событий, не требуется использовать с внешними клас-
WHERE, а именно отслеживать появление новых объек- сами отслеживания событий.
тов класса Win32_LogicalDisk, у которых свойство DriveType
равно 2. Асинхронная обработка событий WMI
Закончим разбор сценария анализом цикла ожидания в сценариях WSH
событий. Вполне очевидно, что сам по себе цикл беско- Вернемся к сравнению синхронного и асинхронного спосо-
нечный и условия завершения не имеет. Внутри тела цик- ба обработки событий WMI. Синхронная обработка собы-
ла вызывается метод NextEvent нашего экземпляра объ- тий – это когда процесс ожидает события и более ничем
екта objEvents – временного подписчика на события WMI. не занят. Обычно это ожидание – бесконечный цикл про-

8
администрирование
верки условия: поступило событие или нет. В нашем слу- While (True)
Wscript.Sleep(1000)
чае в сценарии на листинге 1 для синхронного получения Wend
очередного события вызывается метод NextEvent объекта
objEvents. Этот метод возвращает сценарию управление Листинг 3. Одновременное использование синхронной
только тогда, когда в системе происходит событие, на ко- и асинхронной техники обработки событий на примере Таймера
торое мы подписались. Dim tCount
Асинхронная обработка подразумевает, что сценарий
Sub TIMER_OnObjectReady(objReceivedEvent, objAsyncContext)
VBScript регистрирует специальный обработчик (подпис- tCount = tCount + 1
чик) события в объектной модели WSH и далее продолжа- Wscript.Echo "Произошло событие Таймера, ↵
счетчик tCount=" & tCount
ет выполнять различные свои задачи. Когда событие воз- End Sub
никает, нормальная работа сценария прерывается, запо-
strComputer = "."
минается место, где произошло прерывание, а управление tCount = 0
передается на зарегистрированный ранее обработчик со-
Set objWMIService = GetObject("winmgmts:\\" & ↵
бытий (event sink). После обработки события обработчиком strComputer & "\root\CIMV2")
управление возвращается на то действие сценария, кото- Set MySink = WScript.CreateObject ↵
("WbemScripting.SWbemSink","TIMER_")
рое было прервано.
Для реализации такой техники в объектной модели objWMIservice.ExecNotificationQueryAsync MySink, _
"SELECT * FROM __InstanceModificationEvent WHERE " & _
WSH для сценариев WMI предусмотрен ряд функций, на- "TargetInstance ISA 'Win32_LocalTime'"& _
звания которых оканчиваются на суффикс Async. К та- " AND TargetInstance.Second = 30"
ким функциям, в частности, относятся: ExecMethodAsync, Set objEvents = objWMIService.ExecNotificationQuery ↵
ExecNotificationQueryAsync, ExecQueryAsync, GetAsync ("SELECT * FROM Win32_ProcessStartTrace")
и PutAsync. Эти функции мало чем отличаются от своих Wscript.Echo "Ожидаем запуска новых процессов..."
синхронных аналогов. Основное их отличие состоит в двух
Do While(tCount < 10)
моментах. Во-первых, эти функции ничего не возвращают Set objReceivedEvent = objEvents.NextEvent
в вызывающую их программу. Во-вторых, в качестве пер-
WScript.Echo "Новый процесс: PID=" & ↵
вого аргумента все они требуют передавать зарегистри- objReceivedEvent.ProcessID _
рованный объект асинхронного подписчика, который со- & " Name=" & objReceivedEvent.ProcessName
Loop
здается стандартной функцией CreateObject на базе клас-
са WbemScripting.SWbemSink. Создание этого объекта ре- MySink.Cancel
гистрирует в среде WSH специальный отличительный пре-
фикс для процедур-обработчиков событий WMI. Это мо- Обратите внимание на технические особенности сцена-
жет быть любая текстовая строка, которая удовлетворя- рия, представленного на листинге 3. Асинхронный обра-
ет правилам именования процедур в VBScript. События ботчик внутренних событий таймера, зарегистрированный
WMI, которые могут обрабатываться в сценариях WSH, в этом сценарии, увеличивает переменную tCount на едини-
имеют следующие названия – OnCompleted, OnObjectPut, цу каждые 60 секунд (в тот момент, когда показания секунд
OnObjectReady и OnProgress. Таким образом, все собы- на системных часах равны 30) и выводит об этом сообще-
тия WMI будут обрабатываться в процедурах, имя кото- ние. Синхронный обработчик событий запуска процессов
рых состоит из зарегистрированного префикса обработ- внутри цикла вызывает метод NextEvent, который возвра-
чика и названия события. Примеры этого подхода даны щает управление сценарию только после того, как произой-
в листингах 2, 3. дет запуск очередного нового процесса. Становится понят-
но, что цикл завершится только тогда, когда от начала ра-
Листинг 2. Пример сценария асинхронного отслеживания боты сценария пройдет более 10 минут и в системе будет
подключения дисковых устройств USB
запущен новый процесс.
Sub SINK_OnObjectReady(objReceivedEvent, objAsyncContext)
Wscript.Echo "Name: " & ↵
objReceivedEvent.TargetInstance.Name Временные и постоянные подписчики на события
Wscript.Echo "Caption: " & ↵ Ознакомившись с вышеизложенной частью этой статьи,
objReceivedEvent.TargetInstance.Caption
Wscript.Echo "FileSystem: " & ↵ вы можете решить, что все, что вам необходимо для рабо-
objReceivedEvent.TargetInstance.FileSystem ты с событиями WMI, вы уже знаете. Теперь вы можете на-
Wscript.Echo "Description: " & ↵
objReceivedEvent.TargetInstance.Description писать любой сценарий, который будет реагировать на под-
End Sub ключения съемных запоминающих устройств USB и запус-
strComputer = "." тить его при старте компьютера через групповую полити-
Set objWMIService = GetObject("winmgmts:\\" & ↵ ку или через системный планировщик задач. Однако все
strComputer & "\root\CIMV2")
Set MySink = WScript.CreateObject( _ выше рассмотренные нами примеры обладают одним су-
"WbemScripting.SWbemSink","SINK_") щественным недостатком – события WMI будут отслежи-
objWMIservice.ExecNotificationQueryAsync MySink, _ ваться только тогда, когда временный подписчик сущес-
"SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " & _ твует, то есть созданный нами сценарий работает. Стоит
"TargetInstance ISA 'Win32_LogicalDisk'" & _
" AND TargetInstance.DriveType = 2" только остановить сценарий, и обработка событий закон-
чится. В каких то ситуациях такое решение неприемлемо,
WScript.Echo "Ожидаем события ..."
и необходимо, чтобы события отслеживались постоянно.

№3, март 2006 9


администрирование
Таблица 2. Cтандартные подписчики на события WMI Классы стандартных подписчиков на события WMI в ОС
(Standard Event Consumers)
Windows XP Service Pack 2 и Windows Server 2003 определе-
Название подписчика Описание ны в специальном пространстве WMI-имен root\subscription.
ActiveScriptEventConsumer
Служит для выполнения сценария при возникнове- Там же рекомендуется создавать экземпляры этих подпис-
нии указанного события WMI чиков, фильтры событий и объекты связывания подписчи-
Служит для записи произвольной строки в тексто- ков и фильтров событий.
LogFileEventConsumer вый лог-файл при возникновении указанного собы-
тия WMI. Не поддерживается на Windows 2000
Служит для записи события в журнал приложений
Создание MOF-файла для подписки на события
NTEventLogEventConsumer
(Application Log) системы при возникновении указан- и его компиляция
ного события WMI. Не поддерживается на Windows
2000
Для того чтобы воспользоваться стандартными подпис-
чиками на события WMI, вовсе не обязательно писать
Служит для отправки почтового сообщения по про-
SMTPEventConsumer токолу SMTP при возникновении указанного собы- сценарии VBScript. Для этого достаточно взять в качест-
тия WMI ве шаблона приведенный на листинге 4 MOF-файл и не-
Служит для локального запуска исполняемого фай- много модифицировать его под себя. Далее достаточно
CommandLineEventConsumer ла приложения при возникновении указанного собы-
тия WMI. Не поддерживается на Windows 2000 просто скомпилировать его штатной утилитой mofcomp –
и все готово.
Для решения этой задачи существуют постоянные подпис-
чики (permanent event consumer). В общем случае постоян- Листинг 4. Файл NTLog-for-remdev.mof для регистрации
постоянного подписчика событий
ный подписчик – это специальный компонент COM+, кото-
рый постоянно зарегистрирован получать определенные // Создает экземпляр объекта стандартного подписчика
// NT Event log и обозначает его псевдонимом $CONSUMER
события от службы WMI. #pragma namespace ("\\\\.\\root\\subscription")
Логика такой регистрации очень проста. У нас есть
instance of NTEventLogEventConsumer as $CONSUMER
COM+ компонент, отвечающий за обработку событий – под- {
писчик. У нас есть специальный класс WMI, который на- // Уникальное имя экземпляра
Name = "MyStandardConsumer";
зывается __EventFilter. Каждый экземпляр объекта класса // Системный источник события
__EventFilter содержит информацию о том, какие события SourceName = "MyMonitoring";
// Номер события в журнале приложений
WMI следует выбирать для передачи какому-нибудь пос- EventID = 235 ;
тоянному подписчику. Среди этой информации наиболее // Нумеротор EVENTLOG_INFORMATION_TYPE
EventType = 3;
важной является WQL-запрос к внутренним или внешним // Категорию сообщения мы не определяем (0)
классам отслеживания событий WMI и пространство имен, Category = 0;
// Число текстовых строк в параметре
в котором данный запрос будет выполняться. Для связы- // InsertionStringTemplates
вания конкретного экземпляра фильтра событий и конк- NumberOfInsertionStrings = 1;
ретного экземпляра постоянного подписчика использу- InsertionStringTemplates = { "Removable Drive ↵
ется специальный связывающий объект WMI, принадле- connected under "
"drive letter %TargetInstance.Caption% with ↵
жащий к классу __FilterToConsumerBinding. Этот класс file system %TargetInstance.FileSystem%" };
среди своих свойств содержит указатель на постоянного };
подписчика и указатель на фильтр событий. Таким обра- // Создание экземпляра объекта фильтра событий
зом, один и тот же фильтр событий может поставлять со- // и присвоение ему псевдонима $FILTER
бытия нескольким постоянным подписчикам, а один и тот instance of __EventFilter as $FILTER
же постоянный подписчик может получать события от не- {
// Уникальное имя экземпляра
скольких разных фильтров. Такой подход для связывания Name = "MyRemDevFilter";
хорошо известен разработчикам и администраторам ре-
// Определяем запрос WQL для отбора интересующих
ляционных баз данных для создания связей типа «мно- // нас событий
гие к многим». Query = "SELECT * FROM __InstanceCreationEvent ↵
WITHIN 5 WHERE TargetInstance ISA "
"\"Win32_LogicalDisk\" ↵
Стандартные подписчики на события AND TargetInstance.DriveType = 2" ;
Для того чтобы упростить жизнь системных администра- // Определяем язык запроса
торов и избавить их от программирования компонентов QueryLanguage = "WQL";
// Определяем пространство имен, где будет
COM+, в стандартной инсталляции Microsoft Windows XP // выполняться запрос
и Windows Server 2003 включены пять готовых постоянных EventNamespace = "root\\CIMv2";
};
подписчиков событий. Эти готовые постоянные подписчики
носят название Стандартных Подписчиков (Standard Event // Создаем экземпляр объекта связывания
// между фильтром и подписчиком, используя их
Consumers). Все они перечислены в таблице 2. // временные псевдонимы
В Microsoft Windows 2000, к сожалению, их только два.
instance of __FilterToConsumerBinding
Кроме того, один из них ActiveScriptEventConsumer не ском- {
пилирован, поэтому прежде чем его использовать необхо- Consumer = $CONSUMER;
Filter = $FILTER;
димо скомпилировать командой: };

mofcomp %windir%\wbem\Scrcons.mof Создайте файл с именем NTLog-for-remdev.mof и запол-

10
администрирование
ните его в соответствии с листингом 4. Затем выполните сание экземпляра объекта класса стандартного подпис-
синтаксическую проверку файла командой: чика NTEventLogEventConsumer и присвоение ему псевдо-
нима (alias) для последующей ссылки на него. При опре-
mofcomp –check NTLog-for-remdev.mof делении экземпляра этого объекта мы задаем его свойс-
тва – это самое интересное. Мы определяем уникаль-
Данный MOF-файл создает экземпляр стандартного ное имя этого экземпляра стандартного подписчика, код
подписчика на события WMI, который осуществляет за- события, которое будет вносить в журнал приложений
пись информационного события с кодом 235 в журнал при- этот экземпляр стандартного подписчика, тип события
ложений системы (Application Log) в случае, если в системе (0 – SUCCESS, 1 – ERROR, 2 – WARNING, 3 – INFORMATION,
появляется новое съемное запоминающее устройство ти- 4 – AUDIT_SUCCESS и 5 – AUDIT_FAILURE), источник со-
па USB FlashDrive. В данные события вносится информа- бытия и его категорию. Далее мы определяем число текс-
ция о букве диска, которая была назначена этому съемно- товых строк, которые будут передаваться службе журнала
му устройству, а также тип файловой системы, обнаружен- Windows при создании события с указанным нами кодом.
ной на подключенном съемном устройстве. Для всех событий в системе обычно предусмотрены текс-
Для того чтобы созданный нами MOF-файл был импор- товые шаблоны для поля Description. Это помогает сильно
тирован в репозиторий WMI и события подключения съем- экономить место в журналах событий системы. Эти шаб-
ных дисковых устройств типа USB FlashDrive стали регист- лоны обычно содержат специальные поля для внесения
рироваться в журнале приложений, нам необходимо ском- текстовых строк с деталями о конкретном событии. Пос-
пилировать этот MOF-файл. Для этого с правами админис- кольку для нашего события такого шаблона не существу-
тратора выполните команду: ет, то в поле описания события (Description) об этом будет
записано предупреждение.
mofcomp NTLog-for-remdev.mof Далее в MOF-файле создается экземпляр объекта клас-
са __EventFilter, в котором описываются те события, на ко-
Если после выполнения команды вы увидите сообщение торые мы хотим назначить постоянный подписчик. Мы, как
«Storing data in the repository... Done!», то это означает, что и раньше, определяем уникальное имя этого экземпляра
операция прошла успешно. Теперь проверьте журнал при- и задаем остальные свойства. Среди этих свойств мы оп-
ложений («Event Viewer → Application») на предмет ошибок ределяем запрос WQL, отслеживающий интересующие нас
от службы WinMgmt. Скорее всего, их не будет. Если же вы события и пространство имен WMI, в котором этот запрос
увидите запись об ошибке с кодом 10 (EventID 10), в текс- следует выполнять.
те которого будет присутствовать информация об ошибке Наконец последнее, что мы определяем в этом MOF-
WMI номер 0x80041003 [5], то знайте, что той учетной за- файле – это связывающий объект, который собственно и от-
писи, под которой вы проделали компиляцию MOF-фай- вечает за передачу событий от фильтра к подписчику.
ла, недостаточно прав для активации фильтра событий. Как описано выше, существует пять классов стандар-
Для решения этой проблемы выполните все эти действия тных подписчиков (см. таблицу 2). Соответственно поми-
из-под локальной встроенной учетной записи админист- мо записи событий в журнал событий мы можем, напри-
ратора. Это ситуация довольно редкая, но она случается мер, запускать сценарий VBScript как реакцию на интере-
с доменными учетными записями, включенными в группу сующее нас событие WMI или приложение из командной
локальных администраторов при отсутствии подключения строки. Давайте посмотрим, как очень легко можно моди-
к контроллеру домена. Рассматривать детально причину фицировать наш пример со стандартным подписчиком, ос-
такого провидения системы мы сейчас не будем. Просто тавляющим в журнале событий системы (Event Log) свою
помните об этом. запись о подключении съемного запоминающего устройс-
После того как вы подключите к компьютеру съемное тва, на запуск сценария VBScript.
дисковое устройство, в журнале событий вы увидите собы- Для начала давайте создадим сценарий, который мы
тие с текстом примерно следующего содержания: бы хотели запускать при возникновении интересующих
нас событий WMI. Я не буду подробно разбирать особен-
Event ID: 235
Source: MyMonitoring ности этого сценария, так как это не соответствует тема-
Type: Information тике нашей статьи. Обозначу лишь один важный момент:
Description:
The description for Event ID ( 235 ) in Source ( MyMonitoring ) когда данный сценарий WSH запускается ядром системы
cannot be found. The local computer may not have the necessary WMI, в объектное окружение WSH добавляется специаль-
registry information or message DLL files to display messages from ный объект TargetEvent, который по набору свойств соот-
a remote computer. You may be able to use the /AUXSOURCE= flag
to retrieve this description; see Help and Support for details. ветствует тому, что возвращала бы функция NetEvent при
The following information is part of the event: Removable Drive синхронной обработке уведомляющих запросов в наших
connected under drive letter E: with file system FAT32.
примерах выше.
Давайте теперь немного подробнее разберем приве- Пример нашего сценария дан в листинге 5:
денный пример MOF-файла. Обратите внимание, что син-
таксис MOF файлов [6] очень похож на синтаксис языка Листинг 5. Код из файла script.vbs. Файл должен находиться
в папке c:\windows\system32\wbem
программирования C++. Первая значащая строка опре-
деляет пространство имен WMI, где будут размещены со- Dim objFSO, objFile
здаваемые нами экземпляры объектов. Затем идет опи- Set objFSO = CreateObject("Scripting.FileSystemObject")

№3, март 2006 11


администрирование
Set objFile = objFSO.CreateTextFile ↵ "Set objFile = objFSO.CreateTextFile ↵
("C:\ScriptLog.txt", 8, true) (\"C:\\ScriptLog.txt\", 8, true)\n"
"objFile.WriteLine \"Time: \" & Now & \"; ↵
objFile.WriteLine "Time: " & Now & "; ↵ Entry made by: ASEC2\"\n"
Entry made by: ASEC" "objFile.WriteLine \"Script Started for "
objFile.WriteLine "Script Started for USB Drive: " & ↵ USB Drive: \" & "
TargetEvent.TargetInstance.Caption "TargetEvent.TargetInstance.Caption\n"
"objFile.Close\n";
objFile.Close };

Поместите этот сценарий в папку c:\windows\system32\ Обратите внимание, что сценарий VBScript задается
wbem. В принципе его можно хранить и в любой другой в виде текстовой строки, как в языке C++, и для перево-
папке, но вы должны понимать, что при наличии соответс- да строк используется спецсимвол «\n», а для включения
твующих прав на файл пользователь может изменить со- в текст двойных кавычек и обратных наклонных черт – спец-
держимое VBS-сценария, а поскольку он выполняется символы «\"» и «\\» соответственно.
в контексте безопасности SYSTEM, то пользователь мо- После того как вы проделали изменение нашего ба-
жет поднять свои права на локальной машине и натво- зового MOF-файла, еще раз проверьте синтаксис MOF-
рить еще много других бед. Рекомендуемая мной папка файла и компилируйте его, так как описано выше коман-
имеет достаточно надежные разрешения доступа к фай- дой mofcomp. После этого подключите к системе съемное
лам по умолчанию и позволит избавиться от этой потен- запоминающее устройство USB FlashDrive и убедитесь,
циальной уязвимости. что в корне диска C: создался файл отчета ScriptLog.txt
Теперь пришел черед модифицировать наш MOF-файл. о работе нашего сценария с примерно следующим содер-
На листинге 6 дано определение экземпляра объекта жимым:
стандартного подписчика, ответственного за запуск сце-
Time: 20.03.2006 12:43:18; Entry made by: ASEC
нариев. Как вы уже могли убедиться, все довольно прос- Script Started for USB Drive: E:
то. Мы, как и раньше, определяем уникальное имя экзем-
пляра класса стандартного подписчика и задаем другие
его свойства. Замените в нашем MOF-файле (см. лис- Отмена регистрации постоянных подписчиков
тинг 4) описание стандартного подписчика на это новое После того как вы проделали упражнение с созданием пос-
описание. тоянного стандартного подписчика на события WMI, этот
подписчик будет работать в системе даже после ее пере-
Листинг 6. Пример кода MOF-файла для создания экземпляра загрузки. У пытливого читателя сразу же возникнет вопрос:
стандартного подписчика, выполняющего сценарий
из указанного текстового файла «Как же теперь отменить все результаты наших эксперимен-
тов?» Эта задача решается довольно просто.
instance of ActiveScriptEventConsumer as $CONSUMER
{ Для того чтобы отменить созданную нами постоянную
Name = "MyStandardConsumer"; регистрацию стандартных подписчиков, следует выполнить
KillTimeout = 300;
ScriptingEngine = "VBScript"; приведенный на листинге 8 сценарий VBScript.
ScriptFileName = "c:\\windows\\system32\\wbem\\ ↵
script.vbs"; Листинг 8. Отмена регистрации постоянного стандартного
}; подписчика для NTEventLogEventConsumer

Наиболее важным для нас свойством является имя фай- On Error Resume Next
ла сценария, который следует исполнять в качестве реакции Set objWIMService = GetObject("winmgmts:\\.\root\subscription")
на события. Смысл всех остальных свойств вполне очеви-
Set objList = objWIMService.ExecQuery("references of ↵
ден из их названия. Рассмотренная проблема с размеще- {__EventFilter.Name='MyRemDevFilter'}")
нием файла сценария может быть решена еще одним спо- For each objInst in objList
objInst.Delete_
собом. Зачем вообще сохранять сценарий на диск маши- Next
ны, где он может быть модифицирован пользователем, ког-
Set objList = objWIMService.ExecQuery"references of ↵
да можно сохранить его код прямо в репозитории WMI. Ко- {NTEventLogEventConsumer.Name='MyStandardConsumer'}")
нечно, в каких-то случаях этот способ может быть не очень For each objInst in objList
objInst.Delete_
удобным, однако я специально привел его пример на лис- Next
тинге 7, поскольку этот способ хранения сценария реакции
Set objSTDConsumerInst = GetObject("winmgmts: ↵
на события априори более безопасный. \\.\root\subscription:NTEventLogEventConsumer= ↵
'MyStandardConsumer'")
objSTDConsumerInst.Delete_
Листинг 7. Пример кода MOF-файла для создания экземпляра
стандартного подписчика, выполняющего сценарий Set objEventFltInst = GetObject("winmgmts: ↵
из сохраненного в репозитории WMI кода VBScript \\.\root\subscription:__EventFilter= ↵
'MyRemDevFilter'")
instance of ActiveScriptEventConsumer as $CONSUMER objEventFltInst.Delete_
{
Name = "MyStandardConsumer";
ScriptingEngine = "VBScript";
KillTimeout = 300; Этот сценарий использует технику запроса WQL с ключе-
ScriptText = вым словом references of для нахождения всех экземпляров
"Dim objFSO, objFile\n"
"Set objFSO = CreateObject ↵ связывающих объектов класса __FilterToConsumerBinding
(\"Scripting.FileSystemObject\")\n" привязанных к экземпляру фильтра событий с именем

12
администрирование
NTLogConsumerForRemDevFilter и к экземпляру стандарт- Set objWMIService = GetObject("winmgmts:\\" & ↵
ного подписчика с именем NTLogConsumerForRemDev. Пос- strComputer & "\root\DEFAULT")
Set objEvents = objWMIService.ExecNotificationQuery _
ле нахождения всех этих связывающих объектов он удаля- ("SELECT * FROM RegistryValueChangeEvent WHERE " & _
ет их, а затем удаляет и сами экземпляры объектов стан- "Hive = 'HKEY_LOCAL_MACHINE'" & _
" AND KeyPath = 'SOFTWARE\\MyKey\\MySubKey\\'" & _
дартного подписчика и фильтра событий. " AND ValueName = 'MyValue'")
Просмотр и модификацию регистрации постоянных под-
Wscript.Echo "Ожидаем события ..."
писчиков на события WMI также удобно осуществлять с ис-
пользованием утилиты WMI Event Registration из комплек- Do While(True)
Set objReceivedEvent = objEvents.NextEvent
та WMI Administrative Tools [7].
Wscript.Echo "Произошло событие ↵
RegistryValueChangeEvent."
Полезные примеры мониторинга
системных событий Loop
Перед заключением приведу пару простых, но часто ис-
пользуемых практических примеров отслеживания собы- Поскольку пример довольно прост, мы не будем сейчас
тий WMI. В целях упрощения эти примеры приведены в ви- останавливаться на его внимательном рассмотрении и ос-
де сценариев синхронной обработки событий на VBScript, тавим это на вторую часть статьи, где среди прочего бу-
однако вы уже хорошо понимаете, как их можно легко мо- дет подробно рассматриваться работа с провайдером WMI
дифицировать к асинхронному виду или применить для их для доступа к реестру.
использования механизм стандартных подписчиков.
Для сравнения один из них, приведенный на листин- Что еще есть на вооружении WMI?
ге 9, использует внутренние (intrinsic) события и внутрен- Дополнительные возможности WMI не исчерпываются толь-
ние классы отслеживания событий WMI, а второй, приве- ко обработкой событий и созданием постоянных стандарт-
денный на листинге 10, использует внешние (extrinsic) со- ных подписчиков. В следующей части статьи мы поговорим
бытия, генерируемые провайдером WMI StdRegProv. о практическом использовании основных провайдеров WMI
и приемах работы с ними. Среди этих провайдеров я осо-
Листинг 9. Пример синхронного отслеживания событий бо хотел бы отметить следующие: Win32_Ping – осущест-
с файлами TXT в папке c:\temp
вляющий формирование ICMP Echo-запросов к указанным
strComputer = "." хостам сети, Win32_NTEventLog – с которым мы частично
Set objWMIService = GetObject("winmgmts:\\" & ↵
strComputer & "\root\CIMv2") знакомы и который обеспечивает доступ к журналам собы-
Set objEvents = objWMIService.ExecNotificationQuery _ тий системы OC Windows. Также мы рассмотрим провай-
("SELECT * FROM __InstanceOperationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DataFile'" & _ дер работы с реестром – StdRegProv и провайдер взаимо-
" AND TargetInstance.Drive = 'c:'" & _ действия с Microsoft Active Directory. Кроме них, будет по-
" AND TargetInstance.Extension = 'txt'" & _
" AND TargetInstance.Path = '\\temp\\'") лезно обсудить провайдер для работы со счетчиками про-
изводительности и довольно простой вопрос, который, од-
Wscript.Echo "Ожидаем события ..."
Do While(True) нако, вызывает частенько сложности, – работа с датами
Set objReceivedEvent = objEvents.NextEvent и временем через WMI.
WScript.Echo "Filename: " & ↵
objReceivedEvent.TargetInstance.FileName Ссылки, литература:
WScript.Echo "Name: " & ↵
objReceivedEvent.TargetInstance.Name 1. Леонтьев К. Вы все еще не используете WMI? Часть 1. – Жур-
Loop нал «Системный администратор», №1, январь 2006 г. – 4-11 с.;
Леонтьев К. Вы все еще не используете WMI? Часть 2: пишем
В примере на листинге 9 сценарий, используя синх- сценарии. – Журнал «Системный администратор», №2, фев-
ронную технику, отслеживает события создания удаления раль 2006 г. – 6-14 с.
и переименования файлов с расширением TXT в папке 2. Борн Г. Руководство разработчика на Microsoft Windows
C:\TEMP. Если вы будете экспериментировать с этим сцена- Scripting Host 2.0. Мастер класс. // Пер. с англ. – СПб.: Питер;
рием, будьте аккуратны, не увлекайтесь расширением об- М.: ИТД «Русская редакция», 2001. – 480 стр.: ил.
ласти мониторинга за счет захвата большего числа фай- 3. Microsoft Windows Script 5.6 Documentation – http://www.microsoft.
лов и папок. В современных версиях OC Windows измене- com/downloads/details.aspx?FamilyId=01592C48-207D-4BE1-
ния в файловой системе происходят очень часто, и ядро 8A76-1C4099D7BBB9&displaylang=en.
WMI может не выдержать потока всех свалившихся на не- 4. WMI Code Creator 1.0 – http://download.microsoft.com /
го событий и заберет почти 100% процессорного времени download /0/c /a/0ca7691c-6335-4143-8f9f-6708969f8212/
системы на их обработку. WMICodeCreator.zip.
Следующий пример, приведенный на листинге 10, по- 5. Таблица кодов ошибок WMI – http://msdn.microsoft.com/library/
казывает пример синхронной техники обработки внешних default.asp?url=/library/en-us/wmisdk/wmi/wbemerrorenum.asp.
(extrinsic) событий WMI для провайдера StdRegProv. 6. Синтаксис MOF-файлов – http://msdn.microsoft.com/library/en-
us/wmisdk/wmi/managed_object_format.asp?frame=true.
Листинг 10. Пример синхронного отслеживания событий 7. WMI Administrative Tools – http://download.microsoft.com/
изменения значения в реестре
download /.NetStandardServer/Install / V1.1/NT5XP/EN-US/
strComputer = "." WMITools.exe.

№3, март 2006 13


администрирование

Кириллизация в Linux

Алексей Барабанов
Принято считать, что в Linux уже давно нет проблем с кириллизацией чего-либо. Эта ОС вслед
за другими полным ходом движется в юникодный рай, где, как обещают, вавилонский кризис
никому не грозит. Но на практике ситуация еще весьма далека от идеальной.

Т
ема кириллизации или «русифика- сделанных на ее основе. Увы, в дан- ляются последовательностью байт.
ции», как иногда выражаются, с не- ном вопросе именно пользователи по- Таким образом, все входные потоки
которых пор исчезла с первых по- падают между молотом и наковаль- данных, которые, по сути, есть фай-
зиций рейтингов интереса со стороны ней, между стремлением разработчи- лы, тоже являются последовательнос-
неофитов Linux. В нашей стране уже ков дистрибутивов к псевдопрогрес- тью индифферентных байтовых кодов.
давно не внедряются новые кодировки. су и консервативностью рынка при- Как же программа априори «поймет»,
И хотя по их числу мы не превосходим кладного программного обеспечения. что за данные ей передаются?
народности с иероглифическими ме- Обсудим данный вопрос подробно на Есть два способа: по содержимому
тодами написания, но в европейском примере дистрибутива SuSE Linux 10.0 самого потока данных, так называе-
регионе явно ходим в рекордсменах. и в сравнении на примере ряда других мый «in-band», и на основании внешне-
И вот теперь, когда, казалось бы, уже ведущих дистрибуций. го предписания, или «out-band».
нет проблем, чтобы предложить поль- Первый способ зависит от фор-
зователям Linux все разнообразие про- Терминология мата, второй – диктует формат. Из-
веренных наработок и материалов по и проблематика начально использовался только вто-
кириллизации, многие дистрибуторы Необходимость адаптации програм- рой способ. Например, в первых пер-
начинают экономить, можно сказать, много обеспечения к требованиям ин- сональных компьютерах исключалось
на самом святом. Им кажется, что надо терфейсного окружения обуславли- применение символьных данных в ко-
уже сейчас заставить всех пользова- вается тем, что существует изначаль- дировках, отличных от кодовой стра-
телей работать в универсальной коди- ная проблема определения кодировки ницы 437 (IBM Codepage 437). Исполь-
ровке UTF-8 (алгоритм 8-го представ- символьных данных. Например, в UNIX- зование данной кодовой таблицы бы-
ления символов UNICODE) и в локалях, подобных системах файлы представ- ло закреплено аппаратно, то есть вне-

14
администрирование
шним путем. С распространением символьные входные данные и выво- «out-band» указать на способ расшиф-
компьютерной технологии в регионах, дит свои отчеты в правильных коди- ровки символов. То есть программа
где приняты иные требования на пред- ровках. Здесь, в самом определении, еще и различает все входные данные
ставление символьных данных, была заложена некая условность, приводя- с использованием кодировки локали
определена процедура так называе- щая к неверному пониманию сущнос- и, кроме того, в той же кодировке вы-
мой локализации, или модификации ти происходящего. Бытует мнение, что водит все сообщения. Ну, положим, ес-
программного обеспечения для ис- из привязки локали к процессу следу- ли для вывода используются объек-
пользования региональных стандар- ет легкость манипулирования её на- ты среды, которые наследуют локаль
тов. Но данный путь оказался слиш- стройкой. Мол, если локаль переда- программы, то еще можно надеяться,
ком трудозатратным. И тогда было ется процессу из окружения, то ниче- что при некоторых условиях они будут
произведено функциональное выде- го нет проще, как установить любую адекватно воспринимать и отображать
ление всех национально-зависимых локаль прямо перед запуском. Напри- кодировку данной локали. Но в отно-
программных компонентов так, чтобы мер, в Linux используются для этого шении входных данных это не всег-
можно было настраивать требуемую переменные окружения LC_* и LANG. да верно. Точнее, в отношении вход-
локализацию динамически. Естествен- Эти переменные формируются в про- ных данных не работает обратная ло-
но, данная процедура всецело опреде- цессе отработки профиля пользова- гика. Если локаль процесса, исполь-
лялась платформой. Так, в частности, теля и далее передаются всем порож- зующего входные данные, не совпа-
на обсуждаемой платформе GNU/Linux денным процессам. Вот как все прос- дает с локалью процесса, их породив-
локализация управляется единым об- то! Если в системе в базе локализации шего, то, скорее всего, ничего хороше-
разом на основе так называемых «ло- присутствует нужная локаль, то, ука- го не выйдет.
калей» (locale) с помощью системной зав ее в окружении, мы можем заста- Самый простой пример такой ситу-
библиотеки glibc. вить работать с нею любой процесс. ации, когда программа использует ра-
Второй способ, «in-band», подразу- Увы, нет! Это со всех сторон наивный нее накопленные данные, где тип ис-
мевает, что, получив некоторые сим- взгляд. Чтобы понять свойства локали, пользуемой кодировки определяет ин-
вольные данные, программа самосто- давайте взглянем на процесс ее обра- формацию – это имена файлов, индек-
ятельно сумеет определить их коди- зования (см. врезку «Локали и их об- сы в структурах БД, базы служебных
ровку, пользуясь лишь информаци- разование»). сообщений, сохраненные из Интернета
ей из входного потока. Например, ко- Кодировка, включенная в локаль, документы. Вы наблюдали на экранах
дировка может указываться в самом является тем самым ключевым па- компьютеров «кракозябры» в сообще-
файле или в начале потока данных. Та- раметром, позволяющим методом ниях программ, которые в 90% случа-
кой способ принят во многих внутрен-
них форматах, поддерживаемых текс- Локали и их образование ется двумя символами в строчном регис-
товыми редакторами, в формате HTML Стандарты локализации, применяемые тре, согласно международному стандар-
для этого используются специальные в системах GNU/Linux, называются POSIX- ту ISO 639. Территория указывается то-
тэги, а в протоколе HTTP специальные локалями, поскольку их применение рег- же двумя символами, но уже прописными,
опции и так далее. Но, несомненно, са- ламентируются именно этим стандартом обозначающими страну по стандарту ISO
мым универсальным является способ на интерфейс между операционной сис- 3166. Следующая компонента привязыва-
использования кодировки такого раз- темой и прикладной программой. Обычно ет к локали кодовую страницу. Модифика-
мера (разрядности), чтобы она смог- база локалей размещается в /usr/lib/locale. тор в кириллических локалях пока не ис-
ла содержать в себе все возможные В SuSE Linux указанная директория при- пользуется.
символьные комбинации. Так возник- надлежит пакету glibc-locale. Именно там Итак, в создании локали использу-
ла идея кодировки UNICODE (Unicode ищутся описания правил национальных ются описания национальных стандар-
standard ISO 10646, или Universal стандартов и прочее, что необходимо для тов, размещенные в /usr/share/i18n/locale/,
Character Set, или UCS) и её более ком- традиционного представления данных в со- и кодировки из деректории /usr/share/i18n/
пактной версии UTF-8 [1]. Казалось бы, ответствии с принятой локалью. charmaps. Обе директории в SuSE Linux
проблема решена, да не тут-то было! И если там нужная локаль отсутствует, поставляются в пакете glibc-i18ndata. Та-
Универсальная кодировка не отправи- то ее можно скомпилировать с помощью ким образом локаль устанавливает соот-
ла использование локалей в прошлое, утилиты localedef. Для этого следует вы- ветствие некоторой совокупности нацио-
а лишь добавила проблем, поскольку звать утилиту с параметрами: файл описа- нальных стандартов и кодировки символь-
увеличила их число! ния стандартов локали и файл с описанием ных данных.
соответствия символов юникода (unicode) К сведению, на платформе MS Windows
Локали в Linux тем, что приняты для кодирования инфор- используется так называемый идентифи-
Итак, в программном окружении оп- мации в данной локали. Например: катор локали (Locale Identifier – LCID), со-
ределяется понятие локали как со- стоящий из кода языка и кода культуры.
# localedef -i ru_RU -f CP1251 ru_RU.CP1251
вокупности данных об используемых То есть кодировка исключена из локали
языковых и национальных особеннос- создаст локаль ru_RU.CP1251. Название ло- вовсе и требует дополнительного указания,
тях среды исполнения. Именно поль- кали образуется по правилам [язык[_терри- поскольку не управляется локалью. Тем са-
зуясь параметрами локали, програм- тория][.кодовая_таблица][@модификатор]] мым лишний раз подчеркивается компли-
ма «понимает» правильным образом в соответствии с RFC 3066. Язык указыва- ментарность локали в системной среде.

№3, март 2006 15


администрирование
ев работали вполне адекватно? Вам приходилось вместо ru_RU в многобайтной кодировке UTF-8. При этом в систе-
имен файлов видеть всякую «бнопню»? Это именно те слу- ме определены следующие варианты настройки:
чаи, когда программа воспользовалась строковой констан-
той, подготовленной в другой локали, или пыталась про- > locale
честь символьные данные, созданные с использованием ru_RU
иной локали. Даже точно «угадав» локаль исходных дан- ru_RU.koi8r
ru_RU.utf8
ных, то есть, казалось бы, сводя проблему к тривиальной
перекодировке, не всегда удается достичь успеха. Пример Здесь уже должно быть понятно, что представления
тому – данные, упорядоченные или проиндексированные, об используемых в нашей стране локалях у разработчиков
в соответствии с алфавитным порядком для некоторой ло- SuSE Linux далеки от реальности. В качестве эталонного
кали. Здесь перекодировка не даст успеха, а сортировка примем мнение авторов документа [2], прошедшего провер-
будет уже не только трудоемкой, но и даже невозможной, ку опытом. Кстати, из указанного источника можно почер-
если используются разделяемые данные, что характерно пнуть дополнительный комментарий, который по причине
для совместной сетевой работы. форматных ограничений не вошел в настоящий текст.
Ну хорошо, локаль – это типичное указание «out-band» Поправим в немецком дистрибутиве SuSE Linux со-
кодировки. Примение UTF-8 должно, по идее, избавить став локалей, которые необходимы для работы российс-
от дополнительного указания на локаль, так как эта коди- кого пользователя, следующим скриптом, запускаемым
ровка допускает определение локализации на основании от root:
самих данных. Но, увы, лишь в теории. Локаль, безуслов-
но, указывает на единственную используемую в ней ко- #!/bin/sh
дировку, а вот кодировка может использоваться в разных LOCALE=/usr/lib/locale
локалях. И чем универсальнее эта кодировка, тем больше LP=ru_RU
LD=$(which localedef)
выбор возможных локалей. То есть в случае абсолютного
универсального идеала кодирования информации UTF-8 [ "1$LD" == "1" ] && { echo localedef not found ; exit -1 ; }
мы вообще лишились возможности по характеру данных LD="$LD -c -i $LP"
сделать заключение о том, в какой локали эта информа-
[ "1$(locale -a | grep ^$LP | grep utf8)" == "1" ] && ↵
ция представлена! $LD -f UTF-8 $LP.UTF-8
Вот и получается, что кажущаяся легкость манипулиро- [ "1$(locale -a | grep ^$LP | grep UTF-8)" == "1" ] && ↵
ln -sf $LOCALE/$LP.utf8 $LOCALE/$LP.UTF-8
вания локалью на самом деле не соответствует действи-
тельности. Таким образом, локаль, кроме национальной [ "1$(locale -a | grep ^$LP | grep koi8r)" == "1" ] && ↵
$LD -f KOI8-R $LP.KOI8-R
базы стандартов, включает в себя тип кодировки внешней [ "1$(locale -a | grep ^$LP | grep KOI8-R)" == "1" ] && ↵
среды, который от процесса не зависит, да и локаль не оп- ln -sf $LOCALE/$LP.koi8r $LOCALE/$LP.KOI8-R
ределяет! И, значит, для того чтобы обрабатывать широкий [ "1$(locale -a | grep ^$LP | grep cp1251)" == "1" ] && ↵
спектр входных данных, надо иметь в системном окруже- $LD -f CP1251 $LP.CP1251
[ "1$(locale -a | grep ^$LP | grep CP1251)" == "1" ] && ↵
нии весь необходимый перечень локалей для возможных ln -sf $LOCALE/$LP.cp1251 $LOCALE/$LP.CP1251
кодировок, и все сопутствующие данные для построения
[ "1$(locale -a | grep ^$LP | grep iso88595)" == "1" ] && ↵
правильной среды исполнения программы. $LD -f ISO-8859-5 $LP.ISO-8859-5
Вот о сопутствующих данных далее и поговорим, но сна- [ "1$(locale -a | grep ^$LP | grep ISO-8859-5)" == "1" ] && ↵
ln -sf $LOCALE/$LP.iso88595 $LOCALE/$LP.ISO-8859-5
чала проверим, какие локали нам предлагаются в SuSE
Linux. [ "1$(locale -a | grep ^$LP | grep cp866)" == "1" ] && ↵
$LD -f IBM866 $LP.CP866
[ "1$(locale -a | grep ^$LP | grep CP866)" == "1" ] && ↵
Локали в SuSE Linux 10.0 ln -sf $LOCALE/$LP.cp866 $LOCALE/$LP.CP866
Выполним установку системы по умолчанию, лишь указав, [ "1$(locale -a | grep ^$LP | grep maccyrillic)" == "1" ] && ↵
что принимается русский язык, и в результате получим сле- $LD -f MAC-CYRILLIC $LP.MAC-CYRILLIC
[ "1$(locale -a | grep ^$LP | grep MAC-CYRILLIC)" == "1" ] && ↵
дующую настройку локализации: ln -sf $LOCALE/$LP.maccyrillic $LOCALE/$LP.MAC-CYRILLIC

> locale И тут же проверим результат:


LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8" > locale -a | grep ^ru_RU
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8" ru_RU
LC_COLLATE="ru_RU.UTF-8" ru_RU.cp1251
LC_MONETARY="ru_RU.UTF-8" ru_RU.CP1251
LC_MESSAGES="ru_RU.UTF-8" ru_RU.cp866
LC_PAPER="ru_RU.UTF-8" ru_RU.CP866
LC_NAME="ru_RU.UTF-8" ru_RU.iso88595
LC_ADDRESS="ru_RU.UTF-8" ru_RU.ISO-8859-5
LC_TELEPHONE="ru_RU.UTF-8" ru_RU.koi8r
LC_MEASUREMENT="ru_RU.UTF-8" ru_RU.KOI8-R
LC_IDENTIFICATION="ru_RU.UTF-8" ru_RU.maccyrillic
LC_ALL= ru_RU.MAC-CYRILLIC
ru_RU.utf8
ru_RU.UTF-8
Как можно убедиться, предлагается работать в локали

16
администрирование
Полученные локали позволят работать с кириллицей
в соответствии с национальным стандартом ru_RU, исполь-
зуя кодировки UTF-8, KOI8-R, CP1251, ISO-8859-5, CP866
и MAC-CYRILLIC.
Некоторого пояснения требует сосуществование полного
и сокращенного (в оригинале mangled – «порубленного») на-
именования локали, например, ru_RU.KOI8-R и ru_RU.koi8r.
В принципе достаточно лишь сокращенного. Полное имя ло-
кали, указанное в переменных окружения, будет преобра-
зовано к сокращенному в процессе работы. Но, учитывая
мнение [1] и тот факт, что в отечественных дистрибутивах,
например в ALT Linux (до версии 3.0), принято использова-
ние полного наименования локали даже в директории раз-
мещения (/usr/lib/locale), вероятно в расчете на независи-
мость и оригинальность российских программистов, созда-
дим символьные ссылки с полными именами на директории
с базами локалей, которые были построены localedef.
Как видите, в недрах SuSE Linux заложен большой
потенциал – расширение базы локализаций произошло
Рисунок 1. Ввод данных с клавиатуры
без загрузки каких-либо дополнительных файлов кроме
дистрибутивных.
В работающей системе SuSE Linux локаль устанавлива-
ется единым образом на основании переменной RC_LANG,
размещенной в файле /etc/sysconfig/language. Ранее, сразу
после присвоения данной переменной нужного значения,
например того же ru_RU.UTF-8, следовало выполнить:

# SuSEconfig -module profiles»

для модификации служебных файлов профилей, форми-


рующих окружение командной оболочки. Но теперь в этом
нет необходимости, так как профили формируются уни-
версальными скриптами /etc/profile.d/*.sh, среди которых
lang.sh непосредственно читает /etc/sysconfig/language и все
настраивает интерактивно, то есть в процессе запуска ко-
мандной оболочки, и потом передается всем порожденным
процессам. Таким образом, после модификации перемен-
ной RC_LANG достаточно перегрузить пользовательскую
сессию или запустить дополнительную через «su -», чтобы
начать работу в новой локали.
В других дистрибутивах возможен иной подход к фор-
мированию значений переменных окружения, указываю-
Рисунок 2. Вывод данных на экран монитора
щих на используемую локаль. Для того чтобы определить
последовательность настройки, можно произвести контекс- базовый по отношению ко всему остальному, поскольку
тный поиск строки LANG в скриптах и конфигурационных именно этот режим поддерживается в ядре, а все осталь-
файлах, расположенных в /etc. ные подсистемы, и X Window в том числе, работают лишь
в качестве приложений.
Различные подходы к кириллизации В современных дистрибутивах Linux присутствуют два
Вернемся к той мысли, что кроме нужной локали процесса пакета интернационализации, с помощью которых настра-
надо обеспечить соответствующее преобразование вход- ивается кириллическая консоль. Хронологически первым
ных и выходных данных. То есть правильную кодировку, является пакет kbd [3], и более поздним, порожденным как
как это упрощенно воспринимается. И здесь нам придет- ветвь от kdb, – console-tools [4]. Долгое время ожидалось,
ся проанализировать, какие методы кириллизации, то есть что console-tools, содержащий множество утилит для мани-
адаптации интерфейсов для использования кириллицы, су- пуляции шрифтами и кодировками, вытеснит «простень-
ществуют. кий» kbd. Это мнение, подогреваемое русскоязычными со-
Так как речь идет об интерфейсах, то настройки нуж- разработчитками console-tools (см. страницу credits на [4])
ного преобразования кодов можно разделить на два ви- и отечественными дистрибуторами, в частности ALT Linux,
да: кириллизация консоли и кириллизация графической «просочилось» в многочисленные руководства и учебники,
среды. Обсудим подробно консольный режим работы, как например [5]. Поторопились...

№3, март 2006 17


администрирование
Таблица 1. Параметры настройки кодовых преобразований и локалей не только назначение определенного
Локаль Charmap Screenmap Keytable Encoding Источник символа каждой клавише, но и произ-
ru_RU.UTF-8 UTF-8 trivial ru-utf.map UTF-8 Unicode Org
водится выбор кодировки. Иначе го-
воря, чтобы после нажатия клавиши
ru_RU.KOI8-R KOI8-R koi8-r_to_uni ru-ms.map KOI8-R RFC 1489
«А» получить символ «А» в кодировке
ru_RU.CP1251 CP1251 cp1251_to_uni ru_win.map CP1251 MS Cyrillic
KOI8-R, надо использовать раскладку
ru_RU.ISO-8859-5 ISO-8859-5 8859-5_to_uni ru_ms-iso-8859-5.map ISO-8859-5 SUN Cyrillic или таблицу, у которой в строке, соот-
ru_RU.CP866 IBM866 cp866_to_uni ru_ms-ibm866.map IBM866 IBM Cyrillic ветствующей клавиатурному коду кла-
ru_RU.MAC-CYRILLIC MAC-CYRILLIC mac-cyrillic_to_uni ru_ms-mac-cyrillic.map MAC-CYRILLIC Apple Cyrillic виши с изображением «А», и в колон-
ке для нужного кириллического ре-
По данным поисковой системы [6], пакет console-tools ис- гистра клавиатуры содержится код 0xE1. Если бы требо-
пользуется в дистрибутивах: Mandrake, Mandriva, Conectiva, валось получать символы в кодировке CP1251, то там дол-
ALT Linux, RedHat 6 и 7, Turbolinux, Trustix, Engarde. С пер- жен содержаться код 0xC0. Чувствуете разницу? Не важ-
выми четырьмя все ясно, так как они явно исторически тя- но, что программа ожидает получать символы в соответс-
готеют друг к другу. А вот RedHat из перечисленных вер- твии с локалью. Если нужная таблица преобразований не
сий отметим особо! будет загружена с помощью утилиты loadkeys в клавиатур-
По сведениям с того же сайта, пакет kbd применяет- ный драйвер, то, как бы не менялась локаль, успешной ра-
ся в дистрибутивах SuSE, Fedora, RedHat 5 и 8, WhiteBox, боты не получится.
CentOS, ASP Linux, PLD, Aurox, StartCom, Arklinux, Openwall Второй режим работы драйвера клавиатуры, который ак-
и все таже Conectiva. Со второго по пятый в списке пред- туален для текстового режима, это UNICODE. Как следует
ставлены явные «редхатоиды» и их клоны. Очень интерес- из названия, в этом режиме драйвер формирует на выходе
но обсудить «пируэт», который совершили разработчики коды в соответствии с UTF-8. В этом режиме все равно ис-
RedHat, перейдя на console-tools в релизах 6 и 7 и вернув- пользуется таблица преобразования, но на выходе драйве-
шись потом снова к kbd в релизе 8. Нет, они не перегрелись ра создаются не однобайтные посылки, а строки перемен-
в солярии. Можно предположить, что в связи с ожидаемым ной длинны. В SuSE Linux параметры, управляющие работой
и скорым, как думают латентные эсперантисты, переходом утилиты loadkeys, настраивающей клавиатуру, содержатся в
в универсальную кодировку unicode (а как известно, в 8 вер- /etc/sysconfig/keyboard. В отличие от изображенного на рис. 1
сии RedHat Linux произошел переход на utf 8) преимущес- раскладка для режима по умолчанию указана как:
тва пакета console-tools, ориентированного в основном
на изощренные манипуляции с кодировками, теряют акту- # grep ^KEYTABLE /etc/sysconfig/keyboard
альность, а вот средства управления виртуальными консо- KEYTABLE="ru1.map.gz"
лями в kbd, напротив, становятся незаменимыми. Что и пос-
лужило основанием возврата к использованию kbd. Значит, используется кириллическое подмножество
Принимая все перечисленное во внимание и учитывая, UTF-8 (предположительно) с переключением регистров че-
что в SuSE Linux всегда применялся и применяется сейчас рез <RightAlt> + <Shift>. Но вот проблема: кириллица вро-
пакет kbd, далее будем обсуждать именно его. де бы вводится, а при выводе на экран вместо знаков этого
древнего алфавита отображаются лишь пустые знако-места.
Ввод символов с консоли Linux Заглянув в исходный текст ru1.map.gz определяем, что там
Консольный (иногда его называют «терминальным») драй- производится отображение не в UTF-8, а в KOI8-R. И это не-
вер состоит из двух частей. Первая отвечает за ввод с кла- доразумение, кстати сказать, сопровождает уже несколько
виатуры, а вторая за вывод на экран. То есть делится на час- версий SuSE Linux подряд. Замена раскладки на ru-utf.map.
ти в соответствии с функциональным разделением самой gz исправляет ошибку разработчиков дистрибутива.
консоли на клавиатуру и экран. Клавиатура может быть как Здесь отметим, что перенастройка режима ввода с кон-
физическим, локальным устройством, так и удаленным вир- соли производится системным скриптом /etc/init.d/kbd не-
туальным. То же самое верно и в отношении экрана. Если зависимо от настроек локали.
он локальный, то соответствует экрану консоли, подклю-
ченной к компьютеру, а если виртуальный, то в последова- Вывод символов в консоль Linux
тельности преобразования может участвовать и консоль- Теперь обсудим, как производится вывод символьной ин-
ный драйвер удаленной системы. Поэтому для ясности бу- формации с помощью драйвера экрана. Для этого вос-
дем учитывать только локальные устройства. пользуемся схемой, представленной на рис. 2. На рисун-
Сначала разберемся, как происходит преобразование ке изображена последовательность преобразования в слу-
вводимых данных. Воспользуемся схемой, представленной чае использования кодировки KOI8-R. Настраиваемыми
на рис. 1. Изображенная там последовательность преобра- параметрами являются таблица ACM (Application Character
зования будет иметь место в том случае, когда клавиатур- Map), предназначенная для перекодировки во внутреннее
ный драйвер включен в режим XLATE и настроен в локали представление драйвера, таблица SFM (Screen Font Map),
ru_RU.KOI8-R. На рисунке видно, что ключевую роль в ус- предназначенная для получения индекса глифа в экран-
тановлении соответствия некоторой клавиши и того кода, ном шрифтовом наборе, и собственно растровый шрифт.
который будет получать процесс, играет специальная таб- Два последних элемента тесно связаны и очень часто объ-
лица, называемая раскладкой. В этой таблице происходит единяются в единый файл. Файлы экранных шрифтов с име-

18
администрирование
нами, использующими суффиксы psfu должны содержать
после растрового шрифта соответствующую таблицу пе-
рекодировки SFM. Специальная управляющая подстрока
CONSOLE_MAGIC используется для активации настроенно-
го преобразования. Подробности можно узнать в [5]. В об-
щем все достаточно тривиально.
Как уже было сказано, по умолчанию SuSE Linux настра-
ивается для использования UTF-8. Тогда все системные пе-
ременные, которые используются для настройки способа
вывода принимают значения:

# grep ^CONSOLE_ /etc/sysconfig/console

CONSOLE_FONT="Cyr_a8x16.psfu"
CONSOLE_UNICODEMAP=""
CONSOLE_SCREENMAP="trivial"
CONSOLE_MAGIC="(K"
CONSOLE_ENCODING="UTF-8"
Рисунок 3. Консоль в режиме ru_RU.CP866

И здесь также отметим, что настройка вывода в кон- Характерной особенностью является отсутствие про-
соль призводится системным скриптом /etc/init.d/kbd не- писной буквы «Ы» (на рисунке 3 в строке приглашения кон-
зависимо от настроек локали. И лишь воля администра- соли), которая совпадает по коду со служебным символом
тора, редактирующего соответствующий управляющий управления кодовыми таблицами SCI (0x9B). Но в осталь-
файл /etc/sysconfig/console, должна обеспечить согласо- ном все прекрасно работает.
вание кодировок. Итак, потенциально возможно настроить консольный
драйвер и окружение пользователя для работы в любой
Настройка консоли SuSE Linux из перечисленных локалей. Так почему же все настойчи-
В отличие от ранее созданных локалей для обеспечения во предлагают работать в ru_RU.UTF-8 и так пренебрежи-
соотвествующей настройки придется подгрузить в систе- тельно относятся ко всем остальным локалям?
му дополнительные файлы. В дистрибутивной поставке от-
сутствует ACM для MAC-CYRILLIC и некоторые клавиатур- Использование локали приложениями
ные раскладки. Используемые для настройки разных ре- Безусловно, это самый важный вопрос. При его исследо-
жимов параметры перечислены в таблице 1. Недостаю- вании можно встретить как приятные открытия, так и оза-
щие отмечены отсутствием фоновой тонировки. Эти фай- дачивающие. Тема эта неисчерпаема, как и сам набор воз-
лы, как и все приведенные или упомянутые здесь скрипты, можных приложений. Для нас здесь принципиальным явля-
можно найти в архиве [7]. ется тот факт, что корректное использование локалей все-
Вот как должен выглядеть скрипт для переключения ло- цело на совести разработчиков программного обеспечения.
кали и консоли в режим работы с кодировкой CP1251, вы- Более того, приложение может «уметь» использовать ло-
полненный в точном соответствии с таблицей 1: кали, но не поддерживать часть из них.
Например, X Window в используемом большинством
# cat console2cp1251 дистрибутивов Linux варианте Xorg является, по сути,
#!/bin/sh
обычным приложением. Переведем SuSE Linux в локаль
PREF=/etc/sysconfig ru_RU.CP1251 и затем внутри работающего X Window пе-
[ "1$UID" != "10" ] && { echo "you must be root!" ; exit ; } реключимся в CP866 и запустим новую сессию konsole. Ре-
зультат на рис. 4.
# Console
perl -i -p -e 's/^CONSOLE_FONT= ↵ Получаем сразу две проблемы: во-первых, сооб-
.*/CONSOLE_FONT=Cyr_a8x16.psfu/g' $PREF/console щение «QT: Locales not supported on X server» и, во-вто-
perl -i -p -e 's/^CONSOLE_SCREENMAP= ↵
.*/CONSOLE_SCREENMAP=cp1251_to_uni/g' $PREF/console рых, внутри созданного окна не наблюдается кириллицы
perl -i -p -e 's/^CONSOLE_ENCODING= ↵ в CP866. Первая из-за того, что нужная локаль не созда-
.*/CONSOLE_ENCODING=CP1251/g' $PREF/console
на в /usr/lib/X11/locale, а вторая из-за того, что теперь надо
# Keyboard для данного экземпляра konsole указать кодировку вручную.
perl -i -p -e 's/^KEYTABLE= ↵
.*/KEYTABLE=ru_win.map.gz/g' $PREF/keyboard Вспоминаем о том, что оптимисты считают локаль свойс-
твом процесса и ... недоумеваем! Вероятно, оптимисты не
# Language
perl -i -p -e 's/^RC_LANG= ↵ входят в число авторов этих программ.
.*/RC_LANG=ru_RU.CP1251/g' $PREF/language Проявляем настойчивость и получаем уже несколько
rckbd restart иной результат на рис. 5.
Обратите внимание: появилась кириллица в ответе
exit
date, корректно представлена псевдографика mc, и, са-
Аналогичным образом строятся скрипты для переклю- мое главное, нет проблем с прописной «Ы», так как клави-
чения в другие локали (см. [7]). Результат перевода консо- атура работает в «сыром» (raw в оригинале), прозрачном
ли в режим ru_RU.CP866 изображен на рис. 3. режиме, и текстовая консоль не участвует в процессе вы-

№3, март 2006 19


администрирование
Password:
Last login: Thu Mar 9 22:03:31 2006
Have a lot of fun...

alekseybb@wsvm02:~> locale

LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=

Рисунок 4. Запуск konsole в CP866 alekseybb@wsvm02:~> grep ^RC_LANG /etc/sysconfig/language


RC_LANG=ru_RU.MAC-CYRILLIC

Как видно из протокола сеанса, командная оболочка за-


пустилась в локали клиента. Произошло это благодаря то-
му, что в параметрах сервера ssh указано экспортировать
переменные среды клиента:

wsvm02:~ # grep ^AcceptEnv /etc/ssh/sshd_config


AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL

А в параметрах клиента, аналогично, передавать пере-


менные среды на удаленную сторону:

wsalekseybb:~ # grep ^SendEnv /etc/ssh/ssh_config


SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
Рисунок 5. Konsole в CP866 с кодировкой, указанной вручную SendEnv LC_IDENTIFICATION LC_ALL

вода. Только не получится повторить то же самое в лока- Но если попытаться подключиться к компьютеру в ло-
ли ru_RU.MAC-CYRILLIC, так как в konsole эту кодировку кали ru_RU.MAC-CYRILLIC с помощью PyTTY из-под
нельзя указать принудительно – ее просто нет. Приятно то, MS Windows, то ничего хорошего не получится, так как там
что варианты 1-4 из таблицы 1 работают в SuSE Linux в ре- нет возможности ни передать переменные программной
жиме X Window, как говорится, «из коробки». среды, ни прямо указать перекодировку с MAC-CYRILLIC.
Еще более интересные метаморфозы претерпевает Надо заметить, что в приложениях, не поддерживающих
локаль в режиме удаленной работы. Например, с помо- POSIX-локали, бывают вообще странные ситуации, вроде
щью ssh. Если из локальной сессии, работающей в лока- той, что сообщает wine при запуске некоторых абстрактно
ли ru_RU.KOI8-R, подключиться к удаленному компьюте- написанных программ:
ру, настроенному для работы в другой локали, то получим
fixme: msvcrt:MSVCRT_setlocale : Codepage only locale not implemented
следующее:
Дословно: локаль, определяемая только кодовой табли-
alekseybb@wsalekseybb:~> locale цей, не реализована. В свете того, что по кодировке сим-
LANG=ru_RU.KOI8-R вольного потока вообще нельзя установить тип локали,
LC_CTYPE="ru_RU.KOI8-R" приведенное выше сообщение можно понимать, как свое-
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R" го рода юмор.
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
Подведем итоги
LC_PAPER="ru_RU.KOI8-R" В общем случае не представляется сложным настроить ра-
LC_NAME="ru_RU.KOI8-R" бочую станцию GNU/Linux в любой из желаемых локалей.
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R" Как было продемонстрировано на примере SuSE Linux 10.0,
LC_MEASUREMENT="ru_RU.KOI8-R" который не является кириллически толерантным, что ука-
LC_IDENTIFICATION="ru_RU.KOI8-R"
зано в предупреждении инсталлятора, даже такой дист-
LC_ALL=
рибутив поддается настройке. Казалось бы, отечествен-
alekseybb@wsalekseybb:~> ssh alekseybb@192.168.0.184 ные дистрибутивы должны все описанное в статье иметь

20
администрирование
Таблица 2. Уровень исходной кириллизации дистрибутивов
Дистрибутивы SuSE Linux 10.0 RHEL 4 AS ASP Linux 10 OEM ALT Linux Compact 3.0.4
Критерии glibc Xorg Уст. fonts glibc Xorg Уст. fonts glibc Xorg Уст. fonts glibc Xorg Уст. fonts
Локали 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
UTF-8 Да Да Да 512 Да Да Да 465 Да Да Да 723 Да Да Да 59
KOI8-R Да Да 349 Да Да Да 228 Да Да Да 1027 Да Да 78
CP1251 Да 0 Да Да 0 Да Да Да 368 Да Да 64
ISO8859-5 Да 102 Да Да 52 Да Да Да 52 Да Да 23
CP866 25 0 0 Да 0
MAC-CYRILLIC 0 0 0 0
Число полных поддержанных локалей 1 2 4 1

как встроенный сервис. Но этого не наблюдается. На Руси Заметно, насколько не согласована политика внутри
с древности повелось так, что народ учили грамоте то вся- коллективов разработчиков. Например, в SuSE инсталля-
кие «пришлые греки», то «ушлые варяги». Складывающая- тор предлагает лишь UTF-8, тогда как внутри, еще в силу
ся вокруг компьютерных кодировок ситуация следует исто- привычки, все есть для безбедной работы в KOI8-R, и это
рической традиции. Очередные заморские гуру, в который при почти полном игнорировании CP1251, от качества на-
раз предлагают отказаться от всего, что было ранее прове- стройки которой в нашей стране существенно зависит ин-
рено и внедрено, и принять от них новую чудодейственную теграция с MS Windows, ну а наличие шрифтов для коди-
«пилюлю». Ожидаемо, после того как четыре зарубежные ровки CP866 не объяснить никакой адекватной логикой.
компании создали четыре взаимоисключающие способа Точно так же непонятно, зачем в ALT Linux Compact 3.0 со-
кодирования кириллической информации, полностью игно- здана локаль для X Window, соответствующая CP866, при
рируя ту, что была создана независимыми отечественными отсутствии всего остального для этой кодировки. На этом
разработчиками, в среде пользователей должен сформи- фоне лишь ASP Linux можно считать образцом взвешенно-
роваться иммунитет к языковым авантюрам. Тем более что, го и разумного подхода. В строке 7 указано число локалей,
как продемонстрировано выше, единого подхода к работе полностью реализованных и поддержанных сервисом. Этот
с локалями не наблюдается вовсе, то есть появление но- параметр является киррилическим рейтингом по факту.
вой локали закономерно приведет к новым хлопотам и про- Так что же произошло на самом деле? Что так неод-
блемам с программами. Но лишь один из ведущих россий- нозначно понимается создателями продукции, наполняю-
ских разработчиков – ASPLinux – признает сложившуюся щей внутренний рынок дистрибутивов GNU/Linux? Что их
ситуацию и предлагает набор локалей и кодировок на вы- смущает?
бор (все из перечисленного, кроме экзотической кодиров- К уже имеющим хождение в России пяти кодировкам
ки Mac и устаревшей cp866, в версии 10 ASPLinux). А вот добавилась еще одна. И всего-то! После пяти предыдущих
дистрибуция ALT Linux, копируя западный подход, с вер- надо появление очередной, шестой, встречать с уже натре-
сии 3.0 полностью переходит в ru_RU.UTF-8. Причем ре- нированным навыком.
комендации по «откату» на привычную KOI8-R выклады- Успехов вам, читатели, в настройке собственных рабо-
ваются в Сеть синхронно с появлением этой искусствен- чих станций, иногда вопреки загадочному желанию разра-
но созданной «проблемы» [8]. Вероятно, тщательная ки- ботчиков, далеких от общественных интересов!
риллизация Linux не только стала казаться неактуальной
для некоторых пользователей, но даже и не считается обя- Ссылки:
зательным качеством национальной продукции у некото- 1. Юникод. Материал в википедии – свободной энциклопедии.
рых разработчиков. http://ru.wikipedia.org/wiki/UTF-8.
Построим сравнительную таблицу дистрибутивов, 2. RU.LINUX Frequently Asked Questions. Составитель Александр
не претендуя на полноту обзора. Рассмотрим как деклари- Канавин. Глава 3. Русификация – http://www.sensi.org/~ak/
рованные свойства, так и латентные, подобные тем, что поз- linuxfaq/rulinux.faq-3.html#ss3.4.
волили столь эффективно произвести многие этапы кирил- 3. Пакет интернационализации консоли kbd – ftp://ftp.win.tue.nl/
лизации SuSE Linux. Выберем для сравнения парочку веду- pub/home/aeb/linux-local/utils/kbd.
щих дистрибутивов зарубежного производства и уже упо- 4. Пакет интернационализации консоли console-tools – http://lct.
мянутых лидеров отечественного рынка. Зарубежные в пол- sourceforge.net.
ном формате, а отечественные в однодисковых вариантах, 5. Костромин Виктор Алексеевич. «Линукс для пользователя».
для того чтобы уровнять шансы. Сравнивать будем нали- Электронный вариант – http://nf8.jinr.ru/~kras/kostromin/gl-11/
чие системных локалей, локалей X Window, предложения gl_11_01.html.
установщика (в таблице колонки, озаглавленные «Уст.») 6. Поисковая система для rpm – http://rpm.pbone.net.
и число шрифтов выбранной кодировки для X Window (на- 7. Архив файлов к настоящей статье – http://www.barabanov.ru/
пример для UTF-8: «xlsfonts | grep iso10646 | wc -l»; считая, arts/cyrillic/cyrillic.tgz.
что в них уже содержатся глифы для кириллицы, что в об- 8. Как сменить системную локаль на KOI-8 в дистрибу-
щем случае не всегда выполняется). Полученные резуль- тиве ALT Linux Compact 3.0 – http://wiki.sisyphus.ru/utf8/
таты сведём в таблицу 2. MigrateToKoi8?v=1d2w.

№3, март 2006 21


администрирование

Знакомимся с Gentoo
Часть I – установка системы

Одним из главных завоеваний Open Source, и Linux в частности, можно назвать свободу
выбора. Что ставить, как, куда, с какими параметрами… Дальше всех в этом вопросе пошли
разработчики Gentoo – они решили вообще ничего не навязывать пользователю.

Сергей Супрунов

22
администрирование
«Что за птица такая?»
Интересующихся этимологией от- Gentoo a.k.a. Pygoscelis papua
правляем на врезку «Gentoo a.k.a. Пингвин папуанский (ослиный), именуемый по латыни Pygoscelis papua,
Pygoscelis papua». в англоязычных странах известен под кличкой Gentoo. От сородичей
Здесь же поговорим о Linux-дистри- отличается более крупными размерами и одной из самых высоких
бутиве Gentoo. Отличается он от боль- скоростей передвижения под водой. В общем, «быстрее, выше, силь-
шинства других тем, что очень мно- нее». Ещё одна характерная черта – очень громкий голос (за что пин-
гое в нём приходится делать вручную. гвина и назвали «ослиным»), но мы не будем проводить здесь анало-
До версии 2006.0, увидевшей свет гии с Gentoo-сообществом...
в самом начале весны этого года, дист-
рибутив не располагал инсталлятором, та OpenOffice.org, который тоже вклю- ту. Конечно, можно выполнить уста-
и практически каждый шаг выполнял- чён в Live CD. новку и автономно (в инсталляторе
ся вручную. С инсталлятором, думаю, вы пре- этот режим называется GRP, в кото-
Зато в итоге вы получали имен- красно разберётесь и сами (несколь- ром используются те файлы, которые
но ту систему, о которой мечтали всю ко советов можно найти на врезке обеспечивают работу Live CD). Но без
жизнь. «Всё лучшее – пользователю»). широкополосного подключения к Се-
Вторая особенность Gentoo – ори- Мы же в память о том чувстве без- ти Gentoo будет работать в полсилы.
ентированность на сборку из исход- граничной свободы, которое возника- Впрочем, это верно почти для любой
ных кодов. Для работы с приложени- ло при работе с 2005.1 и более ранни- UNIX-подобной операционной сис-
ями реализована очень напоминаю- ми версиями, поставим всё сами. темы.
щая коллекцию портов FreeBSD сис- На тот случай, если вам проще за-
тема Portage, о которой у нас ещё бу- «Где взять дистрибутив?» ранее скачать наиболее крупные фай-
дет возможность поговорить. Установ- Раздобыть образ дистрибу тивно- лы, загрузите себе следующие два ар-
ка бинарных пакетов (которые имену- го диска, очевидно, можно на одном хива (пути указаны для одного из зер-
ются packages) не поощряется, хотя из зеркал www.gentoo.org (см. раздел кал, другие можно выбрать на http://
и возможна. Mirrors). www.gentoo.org/main/en/mirrors.xml):
В общем, всё направлено на дости- Для платформы x86 вы можете  ftp://ftp.citkit.ru/pub/Linux/gentoo/
жение одной цели – не просто предо- выбрать один из следующих вари- releases/x86/2006.0/stages/stage3-
ставить пользователю возможность антов: x86-2006.0.tar.bz2
полностью контролировать процесс  Minimal CD: минимальный диск,  ftp://ftp.citkit.ru/pub/Linux/gentoo/
установки ПО в систему, а вынудить позволяющий просто начать уста- snapshots/portage-20060308.tar.
его это делать. Это как раз то, что за- новку. Основные файлы системы bz2
ложено в фундамент любой UNIX-по- придётся скачивать из Интерне-
добной системы, – ответственность. та. Естественно, к тому времени, ког-
Полная ответственность за любое  Live CD: полноценный «живой» да вы будете читать эту статью, номера
действие. дистрибутив, который можно ис- актуальных версий могут и поменяться
Если вы уже успели испугаться пользовать и сам по себе. В уста- (а для portage поменяются обязатель-
и потянулись к своей коллекции CD новке Gentoo на жёсткий диск вам но), так что следите за новостями. Ещё
за диском с SUSE Linux – не спеши- поможет программа-инсталлятор. можно заранее скачать portage-архив
те, всё не так уж и страшно. На самом Есть возможность сгенерировать ядра (например, отсюда: http://distfiles.
деле, если держать под рукой замеча- необходимые для установки сис- gentoo.org/distfiles/linux-2.6.15.tar.bz2),
тельное «Руководство пользователя», темы файлы из программ на диске, но в этом случае могут возникнуть
то вы не только с лёгкостью справитесь хотя рекомендуется всё же скачать проблемы с совместимостью данного
с инсталляцией и настройкой, но и уз- их из Сети, чтобы получить более файла с вашей версией Portage на мо-
наете много нового о внутреннем уст- свежие версии. мент установки.
ройстве Linux. Так что ядро лучше всё-таки ста-
К тому же начиная с версии 2006.0 Но я открою вам страшную тай- вить по сети (см. далее).
установочный диск представляет со- ну – дистрибутив нам, по большому
бой полноценный Live CD-дистрибу- счёту, не нужен. А откуда же мы бу- «Куда же нам теперь
тив с графической средой пользова- дем выполнять установку? Да отку- идти?»
теля (используется Gnome 2.12). От- да угодно – подойдёт любая работаю- Итак, от использования инсталлятора
сюда же можно запустить инсталлятор, щая система Linux как стационарная, мы отказались. Да и, к слову сказать,
который будет работать как обычная так и Live CD, например Knoppix. Безу- работает он пока не очень стабильно.
пользовательская программа, просто словно, Gentoo Live CD или Minimal CD Так что загрузитесь в ту систему, ко-
выполняя всё то, что до 2006.0 прихо- тоже сгодятся. Ну и понадобится под- торая у вас есть. И что теперь делать?
дилось делать вам. Вы же в это время ключение к Интернету с возможностью Как вы уже догадались, без толково-
можете, например, поиграть или да- скачать 150-200 Мб данных. го руководства – никуда. Я постараюсь
же оформить ваши впечатления от ус- Нужно заметить, что Gentoo вооб- пояснить наиболее важные моменты,
тановки в текстовом редакторе паке- ще ориентирован на сетевую рабо- но если вам не жалко бумаги, можете

№3, март 2006 23


администрирование
Создаётся файловая система командой mkfs (пример
Немного истории ме управления ПО – Portage, дан для Ext3):
Первый официальный выпуск во многом аналогичной «пор-
Gentoo компьютерный мир уви- там» BSD, но с более развитым # mkfs -t ext3 /dev/hda1
дел весной 2002 года. Разра- функционалом.
ботчик этого дистрибутива Да- В настоящее время для ре- Понятно, что вы должны указать именно тот раздел,
ниэль Роббинс (Daniel Robbins) лизов Gentoo принята нумера- который подготовили на предыдущем шаге. Не ошиби-
также активно участвовал в ра- ция вида 2005.1, где 2005 – год тесь! Если вы создавали swap, то нужно будет активиро-
боте над FreeBSD, поэтому выпуска дистрибутива, 1 – но- вать и его:
не удивительно, что Gentoo пе- мер релиза в этом году. Пос-
ренял многие её черты. Прежде ледний релиз на данный мо- # mkswap /dev/hda3
# swapon /dev/hda3
всего, это выражается в систе- мент – 2006.0.

заранее распечатать «Руководство» с сайта www.gentoo.org. «Порядок – прежде всего!»


Кстати, оно есть и на русском языке: http://www.gentoo.org/ Примонтируйте вновь созданный раздел к вашей файло-
doc/ru/handbook. вой системе. Если вы планируете использовать для Gentoo
Процесс установки разделён на этапы, причём вы в лю- несколько разделов (например, разместить /boot или /var
бое время можете прервать его и продолжить затем с того отдельно), то нужно будет выполнить монтирование всех
места, где остановились. А вообще, времени (и пива) пона- этих разделов, соблюдая иерархию каталогов. Здесь мы
добится немало – как для того, чтобы разобраться с даль- будем предполагать, что установка выполняется на один
нейшим шагом, так и на ожидание, пока выполнится ком- раздел, hda1:
пиляция той или иной программы.
# mkdir /mnt/gentoo
# mount /dev/hda1 /mnt/gentoo
«Место под солнцем»
Итак, сначала нужно подготовить место на диске. Отне- Теперь внутри каталога /mnt/gentoo нужно создать ту
ситесь к этому этапу со всей ответственностью, особен- структуру каталогов, которая требуется для работы Linux.
но если у вас уже есть разделы с другими системами, ко- Разработчики Gentoo подготовили для этого специаль-
торыми вы очень дорожите. Ответственности должно быть ный архив, называемый Stage3 (см. также врезку «Эта-
ещё больше, если учесть, что выполнять разбиение диска пы большого пути»). Благодаря этому нам остаётся лишь
вам, возможно, придётся с помощью утилиты fdisk – одно- распаковать его в указанный каталог (предварительно
го из наиболее гибких и мощных инструментов, но в то же сверив часы, чтобы не было проблем со временем созда-
время наименее дружественного (по крайней мере, в вер- ния файлов):
сии 2005.1 использовать приходилось именно его).
Если использование fdisk кажется вам слишком слож- # date
# tar xvjpf stage3-x86-2006.0.tar.bz2 -C /mnt/gentoo
ным, воспользуйтесь более дружественным инструментом,
который наверняка есть в том дистрибутиве Linux, с кото- Вдогонку распакуем и дерево Portage – оно понадобит-
рого вы загрузились. В частности, в Knoppix можно подго- ся для установки некоторых программ уже на этапе инс-
товить разделы в QtParted, легко перемещая мышкой их талляции системы:
границы. Но запомните – вы не узнаете, как разбиваются
диски, пока лично что-нибудь не сломаете. # tar xvjpf portage-20060308.tar.bz2 -C /mnt/gentoo/usr
Итак, раздел у нас есть. Осталось принять ещё одно
принципиальное решение – выбрать тип файловой сис- Теперь в каталоге /mnt/gentoo размещается почти вся
темы. система за исключением ядра.
Продолжим…
«Что вы мне порекомендуете?»
Большинство дистрибутивов Linux, желая облегчить участь «Сердце системы»
своих пользователей, предлагают по умолчанию файло- Дальнейшую работу лучше выполнять уже в среде Gentoo.
вую систему, которую их разработчики считают наилуч- Поэтому:
шей. Ну а Gentoo, как нетрудно догадаться, напротив, ос-
тавляет этот вопрос целиком и полностью на усмотрение # mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
пользователя. # chroot /mnt/gentoo /bin/bash
Я тоже не буду агитировать вас за ту или иную ФС. # env-update
# source /etc/profile
У каждой есть свои достоинства и недостатки, и оконча- # grep -v rootfs /proc/mounts > /etc/mtab
тельное решение можете принять на этот счёт только вы,
исходя из тех задач, которые предполагаете решать. Крат- Первые две команды монтируют proc и dev в будущий
кое сравнение различных вариантов даётся в «Руководс- корень устанавливаемой системы. Также нужно будет от-
тве». Если же после прочтения соответствующего парагра- редактировать (или скопировать из рабочей системы до пе-
фа никаких мыслей у вас так и не возникнет – используйте рехода в chroot) файл resolv.conf, чтобы в chroot-окружении
проверенную временем Ext3. работало разрешение сетевых имён.

24
администрирование

Всё лучшее – пользователю


Начиная с релиза 2006.0 дистрибутив
снабжён написанным на Python графи-
ческим инсталлятором. Работает он как
обычная пользовательская программа,
выполняя то, что раньше приходилось де-
лать вручную.
Стабильность инсталлятора пока остав-
ляет желать лучшего, но всё же подобный
шаг навстречу не очень опытным пользова-
телям можно считать знаковым моментом
в истории дистрибутива. Выиграет Gentoo
от этого или проиграет – покажет время.
Итак, осмотревшись в системе, запус-
кайте инсталлятор. Вам придётся ответить
не некоторые вопросы, которые порой по-
нятны лишь тем, кому доводилось ставить
Gentoo вручную, а именно: выбрать, отку-
да брать Stage3, коллекцию Portage, ядро,
отметить дополнительные пакеты, настро-
ить сеть. Если вы хотите сэкономить тра-
Так тоже можно ставить Gentoo
фик, используйте GRP-установку и в даль-
нейшем (например, при выборе ядра) ука- ния /mnt. Дело в том, что необходимые для Во-вторых, если вам понадобится по-
зывайте, что хотите использовать данные работы Live CD файлы подключены как работать в терминале с правами пользова-
с диска. В завершение инсталлятор выпол- /mnt/livecd, и выполнив, скажем, команду теля root, то использовать непосредствен-
нит (по крайней мере, должен выполнить) «mount /dev/hda1 /mnt», вы разрушите эту но команду «su» вам не удастся, т.к. вы не
необходимые операции по установке. связь и потеряете способность выполнить знаете пароля. Получить нужные права
Ещё пара советов по работе с Live CD, какую-либо команду (даже выйти из систе- вам поможет следующий манёвр: «sudo
хотя напрямую к инсталлятору они и не от- мы не удастся иначе как с помощью вол- su -». Кстати, после этого можно и устано-
носятся. Во-первых, никогда не исполь- шебной кнопки «Reset»). Поэтому исполь- вить новый пароль, чтобы иметь возмож-
зуйте для подключения файловых сис- зуйте для монтирования отдельные ката- ность работать в дальнейшем более при-
тем непосредственно точку монтирова- логи в /mnt, например, /mnt/gentoo. вычным способом.

Четвёртая и пятая строки создают нужную среду окру- А волшебная команда emerge, о которой мы подробнее
жения, исполняя сценарии из каталога /etc/env.d и обраба- поговорим во второй части статьи, выполнит установку ко-
тывая файл /etc/profile. Последняя формирует файл mtab, дов ядра gentoo.
который может понадобиться для правильной установки Конечно, вы можете выбрать и другое, например vanilla, –
загрузчика. собственно, поэтому ядро и не включается в Stage3, чтобы
Перед тем как приступать к инсталляции исходных ко- ничего вам не навязывать.
дов ядра системы, вы можете дополнительно указать нуж- Подробнее о ядрах можно прочитать в «Руководс-
ные вам режимы сборки (например, параметры оптимиза- тве».
ции) в файле /etc/make.conf. Теперь нужно ядро собрать. Разработчики дистрибутива
Как я писал выше, исходники ядра лучше устанавливать подготовили специальную программу – genkernel, которая
по сети (объём закачки составит примерно 40 Мб). Если вы автоматически соберёт ядро, вполне подходящее для ра-
всё же решили скачать архив заранее, то скопируйте его боты. Но мы же ставим Gentoo не для того, чтобы полагать-
в /usr/portage/distfiles, где emerge должна его найти (конеч- ся на чей-то выбор?
но, если версия будет соответствовать той, которая описа- А раз так, то:
на в дереве Portage).
Установка исходных кодов выполняется простой ко- # cd /usr/src/linux
# make menuconfig
мандой:
Особое внимание в настройках ядра уделите подде-
# USE="-doc symlink" emerge gentoo-sources ржке нужных вам файловых систем и оборудования (сете-
вые и звуковые карты, USB и т. д.). Впрочем, как вы пони-
Здесь значение переменной окружения USE озна- маете, любая ошибка поправима – этот шаг вы всегда смо-
чает «не учитывать зависимости, связанные с докумен- жете повторить. Так что спокойно и без спешки просмотри-
тацией, и после установки создать символьную ссылку те все опции и подумайте, нужны они вам или нет. И не за-
/usr/src/linux, указывающую на каталог с исходными кода- бывайте о встроенной справке, где вам всегда разъяснят,
ми данной версии». зачем нужен тот или иной параметр.

№3, март 2006 25


администрирование
# rc-update add syslog-ng default
Этапы большого пути Сейчас официально под- # rc-update add vixie-cron default
Для решения проблемы «кури- держивается установка толь- Это означает, что соответствующие службы будут заре-
цы и яйца» предлагается не- ко из Stage3, поскольку польза гистрированы на автоматический запуск при переходе на
сколько архивов, содержащих от персональной сборки всей runlevel, установленный по умолчанию (default).
необходимую для начала рабо- системы сомнительна (к то- Более подробно о средствах конфигурирования мы по-
ты базовую систему. Историчес- му же вы всегда можете сде- говорим во второй части статьи.
ки пользователь мог выбрать лать это позже), а времени тре- Ещё я непременно ставлю на этом этапе редактор
один из трёх вариантов – Stage1 буется немало. Впрочем, ар- vim, поскольку необходимость работать в предлагаемом
(абсолютный минимум, основ- хивы Stage1 и Stage2 по-пре- по умолчанию nano меня сильно огорчает:
ная часть системы компилиру- жнему доступны на «зерка-
ется отдельно), Stage2 (некий лах», так что любой желаю- # USE="-X" emerge vim
гибрид между Stage1 и Stage3) щий может поэксперименти-
и Stage3 (заранее скомпилиро- ровать со сборкой всей систе- Заодно можно сразу выполнить и ряд других настроек
ванная базовая система). мы «под себя». (например, настроить сеть). Обязательно установите пароль
пользователю root. «Рядового» пользователя, под именем
После того как разберётесь с опциями, запускайте сбор- которого вы будете работать в дальнейшем, лучше завес-
ку ядра и установку модулей: ти после первой перезагрузки.

# make «Осталось совсем немножко…»


# make modules_install
Последний этап – установка загрузчика. Если на вашем
Минут через 20 (зависит от того, что вы выбрали в на- компьютере уже есть boot-менеджер, пригодный для за-
стройках ядра, ну и, естественно, от возможностей вашей пуска Linux, можно просто добавить в него пункт, указыва-
машины) вы получите именно то ядро, которое хотели, – да- ющий на наше ядро.
же ругать в случае проблем будет некого. Если же вы хотите управлять загрузкой из Gentoo, то
Осталось лишь скопировать его в каталог /boot: уже знакомым способом ставьте свой любимый загрузчик
и настраивайте его:
# tar xvjpf portage-20060308.tar.bz2 -C /mnt/gentoo/usr
# emerge grub
# vi /boot/grub/menu.lst
Назвать файл ядра вы вольны так, как вам удобно. Глав- # grub-install /dev/hdа
ное – потом не запутаться.
Осталось перезагрузиться. Как вы понимаете, в случае
«А далеко ещё?» ошибки вы легко можете повторить тот или иной этап без не-
Итак, базовая система у нас есть. Portage есть. Ядро есть обходимости выполнять заново всю процедуру.
и рвётся в бой. Осталось сделать несколько последних
штрихов. «Мы сделали это!»
Во-первых, Stage3 не включает несколько нужных Итак, у нас теперь есть Gentoo. Думаю, самое главное вы
для работы программ. Не вошли они в базовую систему поняли – любой дистрибутив Linux, и Gentoo в частности, –
по той же причине, что и ядро, – чтобы вы могли устано- это всего лишь «пирамидка», которую нужно просто соб-
вить именно ту реализацию, какую хотите. рать в правильном порядке. Инсталляторы «больших» дис-
Итак, нам понадобятся: трибутивов скрывают это от вас, создавая вокруг этапа ус-
 утилита ведения логов в системе (одна из реализаций тановки системы некоторый ореол таинственности. Но те-
syslog); перь и вы стали немножко волшебниками.
 утилита выполнения задач по расписанию (реализация В следующий раз мы рассмотрим вопросы настройки
cron); системы и подробнее поговорим о том, что делает Gentoo
 инструменты работы с файловыми системами, отлич- непохожей на других – о системе Portage.
ными от Ext2/3 (если требуется);
 клиент dhcp (если сеть настраивается с его помо- Ссылки:
щью). 1. www.gentoo.org – официальный сайт проекта.
2. www.gentoo.ru – сайт русскоязычного сообщества пользова-
Устанавливаются они очень просто (приведён пример, телей.
вы же можете выбрать и другие реализации, например,
sysklogd и dcron):

# emerge syslog-ng
# emerge vixie-cron

Теперь нужно зарегистрировать их в системе, чтобы


обеспечить их автоматический запуск при перезагрузках,
что можно сделать с помощью специального скрипта:

26
администрирование

Создаём собственную ОС на базе Linux

Дистрибутивов Linux существует сотни, и неизвестно,


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

Илья Александров

№3, март 2006 27


администрирование

З
а долгие годы работы с Linux мною было использова- диске выделяется раздел для новой системы. После чего
но огромное количество различных дистрибутивов: на этом разделе нужно будет статически скомпилировать
Mandriva, Fedora, SlackWare, Debian, Ubuntu и мно- все необходимые программы и ядро системы. Далее про-
гие другие. Какой-то проект нравился больше, какой-то – исходит смена корневого каталога на раздел жесткого дис-
меньше. Но во всех дистрибутивах неминуемо приходилось ка, отведенный под нашу новою ОС. Потребуется повторить
сталкиваться с серьезными недостатками, которые сильно компиляцию, но на этот раз ПО должно быть собрано дина-
затрудняли работу. Один слишком требователен к ресур- мически (отличие динамической компиляции от статичес-
сам, в другом нет поддержки всего нужного оборудования, кой будет описано ниже). Последний этап включает в себя
в третьем не хватает различного ПО. Вот тогда я вспомнил сборку важнейшей библиотеки glibc и конфигурацию уста-
известную восточную мудрость: если нужно что-то сделать новленной ОС. Как видите, ничего особенно сложного де-
хорошо, сделай это сам. лать не придется.
На протяжении всего процесса ваш главный помощник –
Linux from Scratch документация из пакета LFS-book, русский перевод которой
Я не единственный, кто решил заняться построением собс- можно взять тут: http://multilinux.sakh.com/download/lfsbook.
твенной версии Linux – ОС, в которой за основу будет взята tar.bz2. В книге подробно описан каждый шаг создания ОС,
базовая часть системы и ядро, но где не будет ни единого поэтому обязательно обращайтесь к этому руководству
лишнего килобайта от разработчика, то есть от вас. Боль- в случае возникновения проблем (данная статья не при-
шое количество Linux-дистрибутивов, не соответствующих звана заменить такую обширную документацию).
требованиям пользователей, подтолкнуло Герарда Бикмен- Создаем новый раздел – в моем случае это /dev/hda5,
са (Gerard Beekmans) к созданию дистрибутива, который так как раздел /dev/hda1 уже занят установленным на жес-
даст возможность каждому собрать систему, где будут толь- ткий диск Linux Slackware. Рекомендуется предваритель-
ко необходимые ему компоненты и функции. но сделать бэкап системы, дабы можно было ее восстано-
Стремление талантливого программиста вылилось вить в случае повреждения, хотя вероятность подобного
в проект Linux from Scratch (www.linuxfromscratch.org), со- близка к нулю. И тут, думаю, все понятно: выделяем нужное
кращенно – LFS. Этот проект, позволяет сконструировать количество (достаточно 2-3 Гб) под корневой каталог, про-
«с нуля», из исходных кодов, свою операционною систему странство, равное удвоенному объему ОЗУ – под swap-раз-
на базе Linux. Компиляция LFS проходит на компьютере дел, по желанию можно создать отдельные разделы для до-
с уже установленной Linux-системой, впрочем, подойдет машнего каталога (/home) и для /boot. Впрочем, излюблен-
и «продвинутый» Live-CD, например, Knoppix [6]. ный многими вариант разбиения – отвести под корневой ка-
При этом Linux-система, используемая для сборки, мо- талог все доступное пространство минус swap, и последую-
жет быть любой – обязательно лишь наличие компилятора щее создание собственно swap – также вполне допустимо
и системных библиотек. Linux From Scratch трудно назвать при сборке LFS. На компьютере автора и Linux Slackware, яв-
дистрибутивом в привычном смысле этого слова – это что- ляющийся родительской ОС, и LFS, используют один жест-
то вроде вспомогательного ПО, которое вкупе с базовой кий диск, впрочем, установить LFS на другой винчестер то-
частью операционной системы позволит вам создать свою, же труда не составит.
уникальную версию ОС. Файловую систему выбирайте на ваше усмотрение:
Как известно, Линус Торвальдс разрабатывал свою опе- и с Ext3, и с ReiserFS никаких проблем под LFS не было.
рационную систему под девизом «Just for fun!» – то есть А вот поклонников XFS придется огорчить – попытки за-
только ради удовольствия. Нужно признать, что LFS дейс- ставить Linux From Scratch работать с этой ФС не увенча-
твительно не часто можно встретить на серверах, исполь- лись успехом.
зуют эту систему, как правило, компьютерные энтузиасты. Теперь монтируем раздел, отведенный под новую ОС:
Установка и работа с Linux from Scratch поможет вам разо-
браться во взаимосвязи компонентов ОС, что пригодится $ mount /dev/hda5 /mnt/mylin
при собственных разработках Linux-дистрибутива, причем
не только на базе LFS. Поэтому LFS во многом рассчитан Для удобства определим переменную MYLIN:
на тех людей, для которых процесс сборки собственного
дистрибутива увлекателен и интересен – а таких людей, $ export MYLIN=/mnt/mylin
поверьте, немало.
Итак, если вы готовы потратить на конструирование Отлично, для дальнейшей работы лучше создать отде-
системы целый день (а то и больше), то рекомендую ска- льного пользователя mylin, которого и назначим владель-
чать с сайта (2) LFS-packages-6.0, LFS-book, и продолжить цем смонтированного раздела.
читать эту статью.
$ useradd mylin
$ chown –R mylin $MYLIN
Разбиение диска и создание дерева
каталогов Нужно создать дерево каталогов в корне нового раз-
Для лучшего понимания материала опишем весь ход про- дела:
цесса в общих чертах (см. рис. 1).
На первом этапе, с помощью уже инсталлированного $ cd $MYLIN
$ mkdir –p bin boot dev etc home lib mnt opt root sbin ↵
дистрибутива или LiveCD, разбивается диск. На жестком usr/{X11R6,local} var

28
администрирование
В каталогах usr, usr/X11R6, usr/local создаем необходимую $ ./configure –-enable-static-link --prefix=$MYLIN/stat
$ make
структуру: подкаталоги bin, etc, include, lib, sbin, share, src. $ make install
Затем то же самое проделаем для каталогов /var и /opt
будущей системы: По такой же схеме собираем остальные необходимые
пакеты: binutils, bzip2, textutils, texinfo, tar, sh-utils, gcc, grep,
$ mkdir var/{cache,lib,local,lock,log,opt,run,spool} gzip, gawk, diffutils, fileutils, make, patch, sed, и, собственно,
$ mkdir opt/{bin,doc,include,info,lib,man}
linux-kernel.
Не будем забывать, что существуют более глубокие ие- Да, при компиляции ядра не забываем, что для ста-
рархии, например, /usr/share/man/man1. Но объем статьи не рых версий ядер (2.2.x-2.4.x) нужно использовать gcc 2.95,
позволяет привести здесь всю информацию о структуре а для текущей версии 2.6.x рекомендуется применить
файлового дерева, поэтому нужно либо воспользоваться gcc 3.x, дабы не возникло проблем.
документом Filesystem Hierarhy Standart (можно найти по ад- Не забываем заглядывать в соответствующие разделы
ресу: http://linux-ve.net/MyLDP/file-sys/fhs-2.2-rus), либо вни- LFS-book, там сказано об этом и многих других нюансах.
мательно изучить структуру уже установленной у вас ОС В целом же компиляция ядра в LFS не отличается от по-
семейства Linux. После подготовки жесткого диска присту- добной процедуры, проводимой при использовании уста-
паем к статической сборке. новленного на HDD дистрибутива. Разархивируем исход-
ники ядра в $MYLIN/usr/src/linux-2.6.xx, после чего конфи-
Статическая сборка гурируем, запуская:
Зачем мы используем статическую сборку? При статичес-
кой компиляции исходный код библиотеки присоединя- $ make menuconfig
ется к коду приложения, что влечет за собой увеличение
его размера, но при этом сохраняется целостность. При ди- Процесс настройки параметров ядра многократно опи-
намической же компиляции библиотека находится в отде- сан в Интернете (6), вряд ли есть необходимость останав-
льном файле, к которому по мере необходимости обраща- ливаться на этом подробнее. Далее даем следующие ко-
ются приложения. В итоге все программы работают с од- манды в папке с исходными текстами Linux-kernel:
ной версией библиотеки
Но когда мы посредством команды chroot установим $ make bzImage
$ make modules
корневой каталог для вновь собираемой системы, библи-
отеки «родительской», установленной системы, находящи- Все, по адресу $MYLIN/usr/src/linux-2.6.xx/arch/i386/boot/
еся в /lib, /usr/lib, и прочих, станут уже недоступны, поэто- bzImage находится новое ядро.
му динамически скомпилированные программы работать Далее создаем файлы $MYLIN/etc/passwd и $MYLIN/etc/
откажутся, вдобавок совместимость версий никем не га- group. В первом прописываем пока единственного пользо-
рантирована. вателя – root с любым паролем, а во втором группы поль-
Чтобы избежать этого, все необходимое программное зователей (для начала одной группы root тоже будет до-
обеспечение для нашей будущей системы мы для начала статочно).
соберем статически. Начнем, пожалуй, с командного ин- На этом наши приготовления к следующему шагу за-
терпретатора bash. (Поклонники ZSH или TCSH могут ус- кончились, и мы переходим уже к более тонкой динами-
тановить любимые интерпретаторы после установки сис- ческой сборке.
темы, но на этапе сборки их использование не предус-
мотрено автором LFS). Следует проверить, есть ли у вас Динамическая сборка
файл /usr/lib/libcurses.a и если его нет – установите па- Теперь нам нужно сменить корневой каталог на /mnt/mylin,
кет nсurses-dev. Все пакеты надо собирать с флагами ста- где мы будем пользоваться только статически собранными
тической сборки: «--enable-static-link», «--disable-shared» утилитами – к помощи инструментов из «родительской» ОС
или «--static». Какой именно подходит в каждом конкрет- мы уже прибегать не сможем. Даем команду в консоли:
ном случае, можно узнать из документации к конкретному
пакету или из вывода конфигурационного сценария, запу- $ chroot $MYLIN/usr/bin/env –i \
>HOME=/root TERM=$TERM PS1=’\u:\w\$’ \
щенного с параметром «--help». >PATH=/bin: /usr/bin: /sbin: /usr/sbin: /stat/sbin \
>/stat/bin/bash --login
$ ./configure –-help
Этой командой мы указали пути к исполняемым фай-
Чтобы не спутать позже статически скомпилированные лам, тип терминала, интерпретатор и вид приглашения ко-
программы с «динамическими», создадим для них специ- мандной строки.
альный каталог: Для обеспечения работы некоторых программ, надо ус-
тановить файловую систему proc в новой системе.
$ mkdir $MYLIN/stat
$ mount proc /proc -t proc
При сборке и установке пакетов не забываем добавлять
параметр «--prefix=$MYLIN/stat» для перемещения файлов Наступил самый ответственный момент. Сборка биб-
именно в этот каталог. И, наконец, ставим bash: лиотеки glibc. Самый ответственный он потому, что рабо-

№3, март 2006 29


администрирование
Таблица 1. Необходимый набор glibc и других библиотек), и того, что а не родительской системы.
пакетов для сборки для установки glibc нужен интерпре- Для установки системного време-
autoconf grep perl татор Perl, которого у нас нет. ни создадим файл /etc/sysconfig/clock,
automake groff man Заменяем имя пользователя root содержащий всего одну строку:
bash gzip procinfo
в файле login/Makefile на его uid, то
есть 0, а переменную $PERL в файле UTC=0
bin86 kbd procps
malloc/Makefile следует заменить на
binutils less psmisc
путь к интерпретатору – /usr/bin/perl – Теперь часы компьютера будут
bzip2 lfs-bootscripts reiserfs-progs и при конфигурировании он просто бу- отображать время вашего часового по-
diffutils libtool sed дет проигнорирован. яса – при условии, что значение време-
e2fsprogs lilo sh-utils Далее: ни в BIOS установлено верно.
ed m4 shadow Дадим компьютеру имя:
$ /usr/src/glibc-2.x.x/configure ↵
file make sysklogd --prefix=/usr --enable-add-ons ↵ echo "HOSTNAME=my_linux" > ↵
fileutils makedev sysvinit --libexecdir=/usr/bin && /etc/sysconfig/network
& make
findutils man-pages tar & make install
$ make localedata/install-locales Теперь разделы, которые система
flex modutils texinfo $ /stat/bash --login должна монтировать при загрузке, ука-
gawk ncurses textutils
жем в /etc/fstab:
gcc netkitbase util-linux Если вы все сделали правильно,
bison net-tools vim glibc скомпилируется, в строке при- # filesystem mount-point fs-type ↵
options dump fsck-order
gettext patch глашения наконец-то появится «root»,
и можно будет динамически переком- /dev/hda5 / ext3 defaults 1 1
/dev/hda3 swap swap pri=1 0 0
пилировать все программы. proc /proc proc defaults 0 0
Завершим установку ядра:
Вместо /dev/hda3 и /dev/hda5 напи-
$ make modules_install шите ваши разделы (корневой и swap),
$ make install
дополните файл при необходимости
Чтобы переместить новое ядро точками монтирования других разде-
в каталог /boot, выполняем еще од- лов жесткого диска и CD-ROM.
ну команду: Теперь сделаем нашу систему за-
гружаемой.
$ make unstall Если помимо lFS вы пользуетесь
другими дистрибутивами Linux, то сей-
Собираем все установленные и час нужно войти в старую систему –
некоторые новые программы, теперь для этого выполняем команду:
уже без флагов статической компиля-
ции. Нам потребуются (на данном эта- $ exit
пе очень важно не забыть скомпили-
ровать все нижеперечисленное) (см. Уже в родительской ОС в файл /etc/
таблицу 1). lilo.conf добавляем следующее:
Рисунок 1. Схема сборки LFS
После выполнения динамической
тать без нее большинство необходи- перекомпиляции можно удалить ка- # LFS
image=/boot/bzImage
мых программ не будет, а в использо- талог со статически собранными па- label=lfs
вании Linux без основной библиотеки кетами: root=<partition>
read-only
смысла нет. Сборка glibc же зачастую
доставляет массу проблем. $ rm -rf /stat Понятно, что «/boot/bzImage» – это
При сборке мы указывали пара- путь к скомпилированному вами ядру
метр «--prefix=$MYLIN/stat», поэтому Можно облегченно вздохнуть и вы- системы, а «partition» – раздел диска,
при смене корня все статически соб- пить кофе – самое сложное, рутинное где находится корневой каталог.
ранные пакеты окажутся в каталоге / осталось позади. Переходим к следу- Если же вы не планируете пользо-
stat раздела новой ОС. ющему этапу – начальному конфигу- ваться другими операционными систе-
Итак, распаковываем архив glibc- рированию нашей системы. мами и дистрибутивами Linux, то сразу
2.x.x.tar.gz (например, в дирек то- переходите к настройке LILO в LFS.
рию /usr/src/) и переходим в каталог Начальное В этом случае lilo.conf будет выгля-
glibc-linuxthreads. Придется немного конфигурирование деть примерно так:
подправить исходный код ввиду того, системы
что на данном этапе в системе невоз- Перед тем как приступить к настрой- boot=/dev/hda
delay=40
можна идентификация пользовате- ке, замечу, что все изменения нужно compact
ля по имени (как раз из-за отсутствия делать в файлах каталога новой ОС, vga=normal

30
администрирование
root=/dev/hda1 Теперь такое вполне возможно – по адресу http://ezine.
read-only
image=/boot/zImage-2.6.12 daemonnews.org/200302/fbsdscratch.html находится статья о
label=Linux сборке FreeBSD из исходников целиком – от distributions до
портов, причем методом не похожим на обычный «rebuild»
Сделайте необходимые изменения в зависимости от ва- системы, но схожим с методом Герарда Бикменса. Что ж,
шей конфигурации. Обновляем загрузчик командой: теперь и у вас есть личная, уникальная система, создан-
ная на базе Linux. В случае возникновения проблем ищи-
$ /sbin/lilo –v те их решение в LFS-book, там все подробно описано. Так-
же рекомендую с портала http://www.tldp.org скачать руко-
И, если все предыдущие этапы были выполнены пра- водство Linux Network Administrator’s Guide, оно хоть и не
вильно, мы окажемся в новой системе. Однако долгий этап относится непосредственно к LFS, но пригодится на этапе
«тонкой» настройки (отдельное внимание стоит уделить бе- настройки системы. Не стоит забывать, что с каждой про-
зопасности новой системы, ибо LFS по умолчанию выгля- граммой поставляются также различные man и info pages,
дит довольно-таки незащищенным, как и всякая вновь ус- также призванные облегчить жизнь линуксоида.
тановленная ОС) еще впереди. Зато собственноручно соб-
ранная версия Linux у вас уже есть. Литература и ссылки
1. LFS-book на русском – http://multilinux.sakh.com/lfs.
Постскриптум 2. Официальный портал проекта LFS – http://www.linuxfromscratch.
Герард Бикменс – не единственный, кому пришло в голову со- org.
здать собственный Linux. Другой проект – BYOLinux, руково- 3. Портал ByoLinux – http://www.byolinux.org.
дителем которого являлся Джонатан Торп (Jonatan Thorpe), на 4. Cтатья о FreeBSD from scratch – http://ezine.daemonnews.org/
сегодняшний день свое развитие прекратил, хотя написанная 200302/fbsdscratch.html.
имдокументация сохраняет актуальность и сейчас, но она не 5. Статья о компиляции ядра Linux – http://vikos.lrn.ru/MyLDP/
так детальна, как LFS-book и не переведена на русский. Глав- kernel/kompil-2-6.html.
ное отличие метода Джона в том, что библиотека glibc перено- 6. Байрак А. Обзор Knoppix 3.7 Russian Edition. – Журнал «Сис-
сится из родительской системы в дочернюю без перекомпиля- темный администратор», №3, март 2005 г. – 4-6 с.
ции, это не столь эффективно, но позволяет избежать многих
проблем при сборке. Желание почувствовать себя конструкто- Ссылки на все указанные в статье программы приведены
ром ОС испытывают и некоторые пользователи FreeBSD. в LFS-book (Часть 3. Приложения).

№3, март 2006 31


администрирование

Создаем порт для FreeBSD своими руками


Часть I: основные возможности

Автоматизированная система сборки стороннего программного обеспечения из исходных


текстов (система портов) – это то, чем по праву гордится FreeBSD. Система содержит
ссылки на десятки тысяч программ, и этот список постоянно пополняется. Кто их создает –
эти пополнения – некие выдающиеся специалисты? Да вовсе нет. Вы тоже сможете стать
одним из них.

Рашид Ачилов

32
администрирование

С
поры о том, что правильнее – собирать програм-
мы руками или использовать для этого порты, в эх-
оконференции FidoNet RU.UNIX.BSD не утихают
никогда. Они могут стихнуть на время, но затем кто-ни-
будь снова задаст такой вопрос, и они разгораются с но-
вой силой.
И рано или поздно каждый приходит к мнению, что ис-
пользовать порты удобнее, потому что:
 Система сама ведет список файлов, входящих в порт,
что позволяет просто удалить программу, не заботясь
о том, что на диске останутся «хвосты».
 Система сохраняет контрольную сумму MD5 по каж-
дому файлу, что позволяет проверить его подлинность
в случае возникновения сомнения, а также при удале-
нии программы. Поскольку при удалении порта прове-
ряются контрольные суммы файлов, его составляющих,
система не удалит файл, если его контрольная сумма не
совпадает с записанной. Это исключает ситуацию, ког-
да тщательно настроенный, но как обычно нигде не за-
резервированный конфигурационный файл программы
пропадает при ее удалении.
 Система отслеживает выход новых версий программы
(это верно только для портов, которые сопровождают-
ся кем-то еще, а не вами. О своевременном обновле-
нии вашего порта вы должны заботиться сами).
 Значительно проще ответить на вопрос «Установлена ли
у меня эта программа?» или «Где у меня такой-то файл
от такой-то программы?»

Основные моменты того, как устроена система портов


и как с ней эффективно работать, изложены в [1], здесь я
приведу только ее краткое описание, необходимое для по-
нимания статьи. Система портов или «коллекция портов»
представляет из себя древовидную структуру каталогов,
которая обычно размещается в /usr/ports. Имена каталогов
первого уровня (находящиеся непосредственно в /usr/ports)
образуют наименования «категорий», то есть тематических
групп. Например, есть категория mail, в которую входят все
программы, связанные с обработкой электронной почты,
есть категория dns и т. д. Решение о создании новой кате-
гории принимает FreeBSD Team, которая создает на пер-
вичных зеркалах новый каталог, переносит в него нужные
порты, откуда изменения расходятся по вторичным зерка-
лам и обычным серверам. Перед тем как приступить к со-
зданию порта, необходимо решить, к какой категории отно-
сится программа, которую предстоит внести в дерево пор-
тов. Имена категорий и их краткое описание приведено в [2].
Внутри каталога категории размещаются непосредствен-
но порты – по одному в каждом отдельном каталоге. Такая
структура несколько замедляет навигацию, когда в катало-
ге находится много файлов, и именно поэтому постоянно
появляются новые и новые категории.

Из чего, собственно, состоит порт для FreeBSD?


Порт для FreeBSD состоит из нескольких файлов, которые
сами по себе ничего не делают. Даже несмотря на то, что
один из них называется Makefile, все они представляют из се-
бя файлы данных – описания и определения некоторых пе-
ременных, используемых системой портов в качестве исход-

№3, март 2006 33


администрирование
ных данных. Механизм работы системы давным-давно отла-  distinfo – файл, описывающий все файлы, входящие
жен, в простейшем случае необходимо только задать исход- в дистрибутив программы. Его нет необходимости со-
ные данные. Ниже приводится список файлов, которые необ- здавать вручную – после создания Makefile достаточно
ходимы для порта (на самом деле порт может использовать выполнить команду make makesum – и он будет создан
и другие файлы, но они не являются необходимыми): автоматически.
 Makefile – основной файл порта. В нем задаются все  pkg-descr – текстовый файл с небольшим описанием
необходимые переменные, которые настраивают рабо- программы и ее возможностей. Описание может быть
ту системы портов в том или ином режиме. Также в этом вообще коротким – 2-3 строки или более подробным 10-15
файле может программироваться собственно поведение строк. В конце файла желательно привести URL разра-
системы в той или иной ситуации. Текстовый файл, стан- ботчика и его адрес электронной почты в формате:
дартного формата, распознаваемого программой BSD
make (не путать с GNU make! О синтаксисе файлов BSD WWW: http://this.insert.link/~homepage
Author: John J. Smith <jsmit@someserver.tld>
make см. man make). Данный файл условно делится на
четрые секции, которые должны идти строго друг за дру-  pkg-plist – список всех файлов, входящих в про-
гом, не нарушая порядка. Определения переменных, ко- грамму, а также команд, выполняемых при уста-
торые должны появляться в данной секции, не должны новке и/или удалении данной программы. Файлы
появляться ни в предыдущей, ни в последующей сек- указываются с путями относительно каталога установ-
ции. Порядок секций таков: начальная секция → секция ки (по умолчанию /usr/local), могут содержать макросы
MAINTAINER → секция USE_* → секция доопределений. (будут рассмотрены ниже). Команды задаются в фор-
 Начальная секция идет самой первой. В нее поме- мате, описанном в man pkg_create.
щаются переменные PORTNAME, PORTVERSION,  Другие файлы с произвольными именами. Например,
CATEGORIES, MASTER_SITES и DISTNAME. Также файл сообщения, выдаваемого после успешной уста-
в нее могут быть помещены другие переменные, пол- новки (или удаления) обычно называется pkg-message,
ный перечень которых приведен в файле bsd.port.mk. хотя конечно никто не помешает назвать его как угод-
 Секция MAINTAINER идет непосредственно после но по-другому.
начальной секции. Как правило, она содержит только
две переменные – MAINTAINER и COMMENT. Смысл Итак, что понадобится для того, чтобы приступить к со-
этой секции в том, что она определяет персону, отве- зданию своего собственного порта?
чающую за данный порт, и дает краткое описание это-  Дистрибутив программы. Его следует поместить
го порта. В целях безопасности все запросы на патчи в /usr/ports/distfiles – это обычно место, куда скачивают-
(да и сами патчи тоже), пришедшие для уже принято- ся дистрибутивы и где система портов будет их искать.
го порта не с адреса, указанного в поле MAINTAINER,  Программа должна собираться и устанавливаться без
а с другого адреса, перенаправляются MAINTAINER ошибок. Если создается порт для чужой программы
на утверждение и вносятся в порт только в том слу- и она собирается с ошибками, следует найти причину,
чае, если будут им одобрены. но не править исходный текст, а подготовить патч (ес-
 Секция USE_* расположена после секции MAINTAINER. ли только не предполагается выкладывать исправлен-
Она содержит различные переменные, задающие яв- ный дистрибутив на собственном сервере).
но или неявно зависимости для данного порта. Напри-  Решение о присвоении программе определенной кате-
мер, «USE_GETTEXT=yes» задаст зависимость порта гории.
от devel\gettext, «USE_KDEBASE_VER=3» задаст зави-  Любимый текстовый редактор.
симость от x11\kdebase3 и т. д. Список всех возможных  Терпение и свободное время – возможно, порт придет-
переменных USE_* приведен в файле bsd.port.mk. Мо- ся пересобирать не один раз и даже не десять.
жет отсутствовать, но, как правило, присутствует – труд-
но найти порт, который вообще ни от чего не зависит. Первый порт – несложная программа
 Секция доопределений – последняя секция в фай- для KDE
ле. Может отсутствовать и зачастую так и происходит. Мы не будем заниматься искуственными примерами. В ка-
Содержит переопределения различных мишеней, со- честве примера первого порта возьмем несложную про-
ставляющих процесс сборки порта. При сборке порта грамму для KDE, взятую с сайта http://www.kde-apps.org.
последовательно выполняются мишени fetch, extract, Почему именно для KDE? Сообщество разработчиков KDE
configure, build и install. Каждая из них в свою очередь огромно, программы появляются, развиваются, а потом пе-
состоит из трех этапов: pre-sometarget, do-sometarget рестают поддерживаться и развиваться постоянно, при-
и post-sometarget. Эти этапы предназначены для про- чем большинство их авторов из Европы, работающие в той
ведения дополнительной предварительной или после- или иной версии Linux и даже и не подозревающие, что их
дующей обработки, а также для замещения некото- программа может работать и в другой операционной сис-
рого этапа, если в этом есть необходимость. Напри- теме, и ситуация, когда на KDE applications находится инте-
мер, этап do-extract может быть переопределен для ресная и нужная программа, – это совершенно обычная си-
выполнения распаковки дистрибутива нестандарт- туация. Итак, в качестве примера возьмем программу, ко-
ным образом. Существуют и другие этапы, полный торая позволяет встроить в панель KDE выпадающее меню
их перечень приведен в файле bsd.port.mk. с содержимым адресной книги. Программа так и называет-

34
администрирование
ся – «Contacts menu for Kicker». Подробное ее описание при- Откуда взять имя дистрибутива и адрес домашнего сай-
ведено в [3]. Факт успешной сборки программы уже прове- та проекта? Как правило, первоначальная закачка файла
рен, программа установлена, и протокол установки сохра- производится вручную, следовательно, имя файла и URL ис-
нен в файле, то есть была выполнена команда: ходного сайта всегда можно найти в логах программ, кото-
рыми он закачивался. Можно использовать для этого и дру-
# make install >& install.log гие методы, которые я не буду здесь описывать ввиду их
чрезвычайно большого разнообразия. Таким образом, ес-
В данном примере для перенаправления в файл и обь- ли бы имя дистрибутивного файла нашей программы бы-
единения выводов stdout и stderr используется синтаксис ло contactsmenu-0.3.4b.tar.gz, нам бы больше ничего не пот-
tcsh, в sh необходимо выполнить: ребовалось указывать – вся информация для загрузки уже
предоставлена. Но не все так просто, потому что имя наше-
# make install > install.log 2>> install.log го файла – 34479-contactsmenu-0.3.4b.tar.bz2.
Что делать? Для таких случаев предусмотрено прину-
Начинаем. Сразу же необходимо иметь в виду, что су- дительное задание имени дистрибутивного файла, кото-
ществует довольно жесткий порядок, в котором в фай- рое должно быть полным, то есть
ле Makefile должны появляться определения переменных.
В нижеследующем примере приводится правильный поря- DISTNAME= 34479-${PORTNAME}-${PORTVERSION}
док и нарушать его не рекомендуется.
Включив в нижеследующие секции «USE_BZIP2=YES»
Файл Makefile мы сформировали полное имя дистрибутивного файла.
В соответствии с рекомендациями [4] Makefile должен иметь Для многих популярных URL типа www.apahe.org,
следующий заголовок: sourceforge.net, www.kde.org и пр. определены специаль-
ные макросы, в которых перечислены все URL, на кото-
# New ports collection makefile for: contactsmenu рых можно найти данную программу. Например, если бы
# Date created: 01 Mar 2006
# Whom: Rashid N. Achilov <shelton@granch.ru> данная программа располагалась на сайте sourceforge.net,
# то строка MASTER_SITES была бы заменена следующей
# $FreeBSD$
комбинацией:
На этом заголовок кончается.
Внимание! Для впервые отправляемого порта строка MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= contactsmenu
$FreeBSD$ должна выглядеть именно так, как показана!
Первыми строками, идущими за заголовком, должны что означало бы загрузку файла с сайтов, входящих в зара-
быть следующие: нее определенный список из подкаталога contactsmenu.

PORTNAME= contactsmenu MAINTAINER= shelton@granch.ru


PORTVERSION= 0.3.4b COMMENT= KDE 3.x addressbook Kicker applet
CATEGORIES= mail kde
Эти строки должны идти в том порядке, в котором при-
Эти три переменные должны идти первыми и именно ведены. MAINTAINER задает адрес электронной почты ли-
в том порядке, в котором они приведены. Первая из них за- ца, которое создало и управляет данным портом. COMMENT
дает имя порта. Она должна совпадать с именем катало- содержит краткое (одну строчку) описание данного порта.
га с файлами порта. Вторая задает номер текущей версии Внимание! При использовании нескольких адресов
программы. Именно по ней будет проводится сравнение су- электронной почты в поле MAINTAINER должен быть про-
ществующей и установленной версий. Третья перечисляет ставлен тот адрес, который будет указан в поле From:
список категорий, к которым относится данный порт. Вы- во время отправки подготовленных файлов порта командой
бор категории, а также требования к составлению данно- send-pr. Если в поле MAINTAINER будет указан один адрес,
го списка приведены в [2]. а обновления порта пойдут с другого адреса, придется до-
полнительно подтверждать, что данное письмо отправлено
MASTER_SITES= http://www.kde-apps.org/content/files/ именно майнтайнером порта, а не является подделкой.

Эта переменная должна идти сразу после CATEGORIES. USE_KDEBASE_VER= 3


USE_GMAKE= yes
Она задает список сайтов, с которых будет скачиваться дис- USE_BZIP2= yes
трибутив программы.
Имя дистрибутивного файла по умолчанию формирует- Начинается секция переменных USE_*. Здесь, как пра-
ся как ${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}. вило, перечисляются неявные зависимости, заранее оп-
EXTRACT_SUFX же по умолчанию равен «.tar.gz», если ределенные в системе. USE_KDEBASE задает зависи-
не указано явно, каким архиватором упакован дистрибу- мость порта от пакета kdebase3, USE_GMAKE – от паке-
тив. Явно задать архиватор можно с помощью переменных та gmake, USE_BZIP2 – от пакета bzip2 (и заодно устанав-
«USE_BZIP2=YES» для архиватора Bzip2 и «USE_ZIP=YES» ливает EXTRACT_SUFX в «.tar.bz2»).
для архиватора Zip. Эти переменные должны быть заданы Что означает «порт Х зависит от порта Y»? Это означа-
ниже, в секции, где группируются все переменные USE_*. ет, что в соответствии с тем, к какому типу будет отнесена

№3, март 2006 35


администрирование
данная зависимость (EXTRACT_DEPENDS, RUN_DEPENDS share/locale/ga/LC_MESSAGES/libkickermenu_contactsmenu.mo
share/locale/fr/LC_MESSAGES/libkickermenu_contactsmenu.mo
и т. д., см. bsd.port.mk для полного списка), то на данном эта- share/locale/pt/LC_MESSAGES/libkickermenu_contactsmenu.mo
пе построения порта (extract, install и т. д.) система проверит share/locale/sv/LC_MESSAGES/libkickermenu_contactsmenu.mo
наличие установленного пакета, который указан как зави-
симость, и если он не установлен, система автоматически то есть одна динамическая библиотека, один файл .desktop
перейдет к его установке. В этом проявляется еще одно пре- и восемь файлов локализации. Тут надо заметить, что,
имущество системы портов – имея скоростной канал в Ин- как правило, с файлами локализации в KDE сплошная
тернете и дешевый трафик, можно не думать, например, морока – их бывает по 20-30 шт. Но пропустить, случай-
о том, какие файлы нужны для установки KDE – достаточ- но или намеренно, какой-либо файл нельзя – порт будет
но перейти в каталог x11/kde и набрать make. Построение впоследствии отослан на тестирование во FreeBSD Team,
правильного списка зависимостей – одна из задач автора где проверят все этапы его установки и удаления, и если
порта. Если указать ненужные программы – порт будет пы- после удаления в каталоге будут обнаружены оставшиеся
таться их поставить, что будет забивать систему мусором, файлы, то майнтайнер порта получит сообщение об ошиб-
если же забыть нужные – порт в лучшем случае не собе- ке, не устранив которую, он никогда не увидит своего пор-
рется, в худшем – соберется и не будет работать. та принятым.
Во второй части файла pkg-plist перечисляются коман-
GNU_CONFIGURE= yes ды, которые необходимо выполнить системе при деинс-
CONFIGURE_ARGS += --with-qt-dir=${QT_PREFIX} \
--with-extra-includes=${LOCALBASE}/include \ талляции программы. Как правило, это команды удаления
--with-extra-libs=${LOCALBASE}/lib каталогов, которые могли быть созданы в процессе инс-
талляции. Если в команде упоминается каталог, который
Эти строки должны присутствовать (если они есть) пос- к моменту выполнения деинсталляции непустой – он не бу-
ле всех переменных USE_*. Они определяют, что для со- дет удален.
здания Makefile, управляющего сборкой программы, будет
использоваться configure, и задают дополнительные аргу- @dirrm share/locale/bg/LC_MESSAGES
@dirrm share/locale/bg
менты, передаваемые при вызове configure. При сборке @dirrm share/locale/br/LC_MESSAGES
программы configure получает неявные параметры, зада- @dirrm share/locale/br
@dirrm share/locale/da/LC_MESSAGES
ваемые, например, с помощью PREFIX, но может получать @dirrm share/locale/da
и явные параметры, перечисляемые выше. @dirrm share/locale/de/LC_MESSAGES
@dirrm share/locale/de
Ну и последней строкой нашего Makefile обязательно @dirrm share/locale/ga/LC_MESSAGES
должна быть: @dirrm share/locale/ga
@dirrm share/locale/fr/LC_MESSAGES
@dirrm share/locale/fr
.include <bsd.port.mk> @dirrm share/locale/pt/LC_MESSAGES
@dirrm share/locale/pt
@dirrm share/locale/sv/LC_MESSAGES
которая, собственно, и загрузит основной файл. Вот и все, @dirrm share/locale/sv
файл, управляющий сборкой программы создан.
Опять упоминаются в основном каталоги для сообще-
Файл pkg-plist ний, потому что их могло и не быть. Здесь опять же нельзя
Файл составляется как раз на основе протокола инсталля- пропустить ни одного каталога, который создается исклю-
ции install.log, который был сохранен во время установки чительно данной программой и больше никем не исполь-
программы. Следует также учесть, что программы для KDE зуется.
часто используют локальные скрипты libtool, которые уста-
навливают динамические библиотеки, используя свои собс- Файл pkg-descr
твенные конфигурационные файлы с расширением .la. По- Как уже говорилось выше, это просто текстовый файл с не-
этому, если в протоколе установки упоминается, например, большим описанием того, что делает данная программа.
kickermenu_contactsmenu.la, нужно открыть его (это тексто- Чтобы не сочинять самому описание, в нашем случае мы
вый файл) и посмотреть, какая же библиотека там исполь- просто берем описание, приведенное автором на страни-
зуется. Как правило, ее имя совпадает с именем .la фай- це kde-apps и заносим его в этот файл, сопровождая ссыл-
ла (в нашем случае kickermenu_contactsmenu.so), но могут кой на собственно страницу программы (файл см. на сайте
быть отличия, в частности, файлов может быть несколько. журнала в разделе «Исходный код»).
В файл pkg-plist компоненты программы вписываются по На этом этап первоначального формирования фай-
одному в строке, с указанием пути относительно корня ус- лов можно считать законченным. Мы еще не сформирова-
тановки (по умолчанию /usr/local). ли distinfo, но он формируется автоматически после того,
То есть в нашем случае: как порт будет проверен. Переходим к проверке порта.

lib/kde3/kickermenu_contactsmenu.so Для проверки правильности написания файлов порта су-


lib/kde3/kickermenu_contactsmenu.la
share/apps/kicker/menuext/contactsmenu.desktop ществует специальная программа portlint, которую необхо-
share/locale/bg/LC_MESSAGES/libkickermenu_contactsmenu.mo димо установить каждому, кто собирается заниматься раз-
share/locale/br/LC_MESSAGES/libkickermenu_contactsmenu.mo
share/locale/da/LC_MESSAGES/libkickermenu_contactsmenu.mo работкой собственных портов. Это небольшой скрипт, напи-
share/locale/de/LC_MESSAGES/libkickermenu_contactsmenu.mo санный на языке Perl, устанавливается он из devel/portlint:

36
администрирование
# cd /usr/ports/devel/portlint plist будет подставлено значение, превращающее строки
# make all install
с «%%NLS%%» в строки комментария. Обратите внимание,
После установки запускаем portlint в текущем каталоге что в этом случае зависимость от devel/gettext не вставля-
с ключами, которые включают все возможные проверки: ется. В противном случае NLS принимает значение пустой
строки, и зависимость от devel/gettext вставляется. Этот
# portlint -abvtAN прием (модификация pkg-plist в зависимости от параметров
... сборки порта) является очень широко распространенным.
WARN: /usr/ports/mail/contactsmenu/pkg-plist [4]: installing Запускаем portlint еще раз, получаем одно замечание
gettext translation files, please define USE_GETTEXT as appropriate
... про MASTER_SITES, которое игнорируем. Осталось со-
0 fatal errors and 9 warnings found. здать файл distinfo. Это просто. Система сама его создаст,
если ее об этом попросить:
Здесь приведена часть вывода portlint, в которой вы-
водится замечание. В последней строке приводится итог – # make makesum
сколько ошибок и сколько замечаний было обнаружено. От-
мечу сразу, что необходимо добиться устранения всех оши- Созданный файл имеет следующий вид:
бок и желательно всех замечаний. В данном случае portlint
MD5 (34479-contactsmenu-0.3.4b.tar.bz2) =
предупреждает о том, что устанавливаются файлы сооб- 65af4e3103c906ed13508bf1b2dd217a
щений gettext, но в порт не включено неявной зависимости SHA256 (34479-contactsmenu-0.3.4b.tar.bz2) =
88e05096b2f9c8d659be61daed5e6da977a056033a52c79789dade217709afee
от devel/gettext (это может привести к невозможности рабо-
SIZE (34479-contactsmenu-0.3.4b.tar.bz2) = 457076
ты с данными файлами). Для исправления данной ситуации
добавляем в секцию USE_* строку «USE_GETTEXT=YES» Теперь пробуем собрать программу, используя порт.
и повторно запускаем portlint. Для проверки правильности составления файла pkg-plist
в качестве корневого каталога сборки назначим /tmp/1 (пос-
# portlint -abvtAN ле деинсталляции программы не должно оставаться фай-
... лов или каталогов, которые она создает).
WARN: Makefile: Consider adding support for a WITHOUT_NLS knob to
conditionally disable gettext support. # make PREFIX=/tmp/1
...
WARN: Makefile: only one MASTER_SITE configured. Consider adding ===> Vulnerability check disabled, database not found
additional mirrors. ===> Extracting for contactsmenu-0.3.4b
... => MD5 Checksum OK for 34479-contactsmenu-0.3.4b.tar.bz2.
0 fatal errors and 2 warnings found. => SHA256 Checksum OK for 34479-contactsmenu-0.3.4b.tar.bz2.
===> Patching for contactsmenu-0.3.4b
===> contactsmenu-0.3.4b depends on file: /usr/X11R6/qt33/bin/moc - found
Что нам советуют сейчас? Добавить поддержку пара- ===> contactsmenu-0.3.4b depends on executable: gmake - found
===> contactsmenu-0.3.4b depends on shared library: kfontinst - found
метра WITHOUT_NLS для тех, кто не хочет устанавливать ===> contactsmenu-0.3.4b depends on shared library: kimproxy - found
===> contactsmenu-0.3.4b depends on shared library: intl - found
файлы языковых сообщений и увеличить количество зер- ===> Configuring for contactsmenu-0.3.4b
кал, на которых размещен данный файл. Здесь надо заме- ===> Building for contactsmenu-0.3.4b
cd: can’t cd to /usr/ports/mail/contactsmenu/work/34479-contactsmenu-0.3.4b
тить, что любой дистрибутив порта после его принятия в сис- *** Error code 2
тему дополнительно зеркалится на сайте проекта FreeBSD,
Stop in /usr/ports/mail/contactsmenu.
так что замечание о дополнительных зеркалах мы игнори-
руем, а вот замечание о WITHOUT_NLS исправим. Для это- Вот мы и получили первую ошибку. Она связана с не-
го добавим в Makefile следующий код: которой бестолковостью имен дистрибутивных файлов
на http://www.kde-apps.org, когда сам файл имеет имя с чис-
.if defined(WITHOUT_NLS) лом впереди, а каталог, упакованный внутри него, – без это-
PLIST_SUB+= NLS="@comment "
.else го числа. Для решения этой проблемы следует указать сис-
USE_GETTEXT= yes теме, что имя каталога, в которую будет распакован дис-
PLIST_SUB+= NLS=""
.endif трибутив, будет задано вручную. После (!!) переменной
MAINTAINER впишем следующую строчку:
а в файле pkg-plist изменим строки, описывающие файлы
языковой поддержки таким образом: WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}

%%NLS%%share/locale/bg/LC_MESSAGES/libkickermenu_contactsmenu.mo указывая таким образом, что дистрибутив будет распа-


%%NLS%%share/locale/br/LC_MESSAGES/libkickermenu_contactsmenu.mo
%%NLS%%share/locale/da/LC_MESSAGES/libkickermenu_contactsmenu.mo кован в каталог с именем, состоящим из имени и номе-
%%NLS%%share/locale/de/LC_MESSAGES/libkickermenu_contactsmenu.mo ра версии пакета. Повторяем сборку. Сборка проходит
%%NLS%%share/locale/ga/LC_MESSAGES/libkickermenu_contactsmenu.mo
%%NLS%%share/locale/fr/LC_MESSAGES/libkickermenu_contactsmenu.mo нормально. Запускаем установку. Видим, что в каталоге
%%NLS%%share/locale/pt/LC_MESSAGES/libkickermenu_contactsmenu.mo /tmp/1 появились все нужные файлы. Создаем пакет с по-
%%NLS%%share/locale/sv/LC_MESSAGES/libkickermenu_contactsmenu.mo
мощью pkg_create (хотя можно то же самое проделать че-
Как это будет работать? Параметр PLIST_SUB содер- рез make package):
жит список подстановок, которые выполняются, когда сис-
тема обрабатывает файл pkg-plist. Если при сборке пор- # cd /var/db/pkg
# pkg_create -b contactsmenu-0.3.4b
та будет задан параметр «WITHOUT_NLS=yes», то в pkg-

№3, март 2006 37


администрирование
Проверяем файл +CONTENTS внутри архива – под каж- что есть и русскоязычные коммиттеры (например, пись-
дой строчкой, описывающей файл программы, должна рас- мо, приведенное выше, получено от Кирилла Пономарева
полагаться строчка комментария с контрольной суммой: (krion@freebsd.org). Сообщение об успешном помещении
в дерево портов может выглядеть так:
lib/kde3/kickermenu_contactsmenu.so
@comment MD5:fd3cf198770bac4e1b8453f3ba2d6f90 Synopsis: new port: sysutils/spassgen
lib/kde3/kickermenu_contactsmenu.la
@comment MD5:4de2541c36ea248066aecb851aedbbe5 State-Changed-From-To: open->closed
State-Changed-By: pav
State-Changed-When: Sat Jul 31 09:26:28 GMT 2004
Если такой строчки нет – значит, в файле pkg-plist ошиб- State-Changed-Why:
ка – при установке файл не был найден. Это может быть New port added, thank you!
тривиальная опечатка или же ошибка в Makefile, при кото- http://www.freebsd.org/cgi/query-pr.cgi?pr=69748
рой в pkg-plist был вставлен файл, отсутствующий в дан-
ной конфигурации. После чего останется только обновить дерево портов
Проверяем удаление пакета через plg_delete (или make и убедиться, что да, на самом деле порт в нем присутству-
deinstall в каталоге порта). При удалении не должно выда- ет. С этого момента майнтайнер порта отвечает за его ак-
ваться сообщений о том, что файл не найден. Если такие со- туальное состояние – своевременное обновление в соот-
общения выдаются, значит файл pkg-plist содержит ссылки ветствии с новыми версиями программы, внесение нужных
на файлы, которые на самом деле не были установлены. патчей и удаление устаревших. Как скоро ожидать ответа
Ну вот, все проверки проделаны. Что дальше? от FreeBSD Team? На этот вопрос трудно дать определен-
Последним этапом нашей работы будет отправка порта ный ответ. Иногда они реагируют буквально в течение не-
во FreeBSD Team и получение оттуда ответа об успешном дели, а иногда приходится ждать несколько месяцев. Вне-
помещении его в дерево портов или сообщение об ошиб- сения в дерево своего первого порта, kavmilter, я ждал боль-
ке. Порядок действий при этом такой: ше года, а например, spassgen прошел за неделю.
 Удаляется каталог work и все файлы, которые не вхо- Кроме того, FreeBSD Team временами самостоятельно
дят в отсылаемый порт (отладка и пр.). вносит некоторые изменения в файлы портов, когда прово-
 Создается shell-архив командой «shar `find contactsmenu`». дится какая-либо глобальная модификация системы в це-
При это нужно находиться в корневом каталоге категории лом. Если вдруг по каким-либо причинам порт перестанет
(в нашем случае /usr/ports/mail), а не в каталоге порта! собираться, майнтайнеру будет отправлено соответству-
 Shell-архив отсылается во FreeBSD Team с помощью ко- ющее извещение. Если майнтайнер не устранит ошибку
манды send-pr (помните, что email в поле MAINTAINER и не пришлет соответствующий патч, исправляющий ситу-
должен совпадать с email в поле From:, иначе замучают ацию, порт может быть помечен как BROKEN. Как правило,
расспросами). О том, как использовать send-pr см. man порты, помеченные как BROKEN, удаляются из дерева если
send-pr. Некоторая информация о том, как отправить они находятся в таком состоянии более 3 месяцев.
порт приведена также в [5].
 Дожидаетесь ответа от одного из коммиттеров FreeBSD Заключение
о том, что порт успешно помещен в дерево портов или же Вот и готов наш первый порт. Он вышел чрезвычайно прос-
о том, что при тестировании порта возникли ошибки. тым, мы не затронули и пятой части возможностей сис-
Все присылаемые в FreeBSD Team порты тестируются темы сборки портов. Но мы сделали одну чрезвычайно
ими на предмет правильной сборки, установки и удале- важную работу – убедились в том, что круг программного
ния под всеми поддерживаемыми в данный момент вет- обеспечения, который может работать под FreeBSD вовсе
ками FreeBSD. Сообщение об ошибке может выглядеть, не ограничивается тем, что присутствует в каталоге пор-
например так: тов (несмотря на то, что на текущий момент там присутс-
твует более 14000 программ), и в том, что создать порт
Synopsis: [maintainer-update] Updating mail/sccmilter up to под FreeBSD своими руками – это не такая уж и сложная
0.94.9 version
задача. В следующей статье мы задействуем более слож-
State-Changed-From-To: open->feedback ные возможности системы – многофайловые дистрибути-
State-Changed-By: krion
State-Changed-When: Fri Feb 18 14:33:28 GMT 2005
вы, экран опций, перехват управления при сборке, исполь-
State-Changed-Why: зование внешних патчей...
It does not honour PREFIX, it’s not very critical since it builds
for LOCALBASE,
but I’d like to see the PREFIX honoured though. Ссылки и литература:
1. Осинцев В. Эффективная работа с портами во FreeBSD. – Жур-
cc -pthread -L/var/tmp/ttt/lib -L.libs -o sccmilter sccmilter.o
нал «Системный администратор», №1, январь 2004 г. – 63-66 с.
globals.o utilites.o mlficatch.o parseconfig.o commandline.o
-lmilter -lconf 2. http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/porters-
/usr/bin/ld: cannot find -lconf handbook/makefile-categories.html.
http://www.freebsd.org/cgi/query-pr.cgi?pr=77679 3. http://www.kde-apps.org/content/show.php?content=34479.
4. Руководство FreeBSD по созданию портов – http://www.ru.freebsd.
В этом сообщении всегда указывается причина ошиб- org/doc/ru_RU.KOI8-R/books/porters-handbook/index.html.
ки и диагностика. Все общение с FreeBSD Team происхо- 5. http://www.ru.freebsd.org/doc/ru_RU.KOI8-R/books/porters-
дит, естественно, на английском языке, несмотря на то, handbook/porting-submitting.html.

38
администрирование

OpenPKG: кроссплатформенная
система пакетов

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

Концепция проекта OpenPKG ходников. И это только в Linux. А теперь добавьте к данно-
OpenPKG – это свободная кроссплатформенная (т.е. с пре- му семейству FreeBSD ports, NetBSD Packages Collection,
тензией на независимость от ОС) система пакетов програм- DMG-пакеты Mac OS X...Такое многообразие заставляет
много обеспечения, распространяемого под открытыми ли- задуматься и разработчиков. Несомненно, самый прос-
цензиями, и набор утилит для работы с ними. Как извес- той способ – ограничиться публикацией обычных архивов
тно, мир Open Source – это мир альтернативных решений, с исходниками продукта, а пользователи сами смогут соб-
и данное его свойство породило множественность не толь- рать пакеты как для себя, так и для всех обладателей оп-
ко в выборе конкретных программных продуктов для ко- ределенной среды. Ничуть не странно, что желающих ис-
нечного пользователя, но и в принципах разработки, в са- кать и вручную компилировать каждую программу не так
мых базовых аспектах построения свободных операцион- уж много. В то же время скучающих альтруистов, собира-
ных систем вообще. Наглядным отображением этого явля- ющих все новые релизы каких-то пакетов под свою систе-
ется разнообразие, наблюдаемое даже в таких «субкульту- му и выкладывающих это ко всеобщему удовольствию, то-
рах» Open Source, как GNU/Linux-дистрибутивы. Ядро ОС же зачастую не хватает. Все эти (а также и упущенные в на-
у всех одно (хотя и тут не обходится без вариаций на тему – писанном выше) проблемы побудили к рождению проекта
в виде общих и специализированных патчей от сторонних OpenPKG, регулярно подготавливающего наборы из уни-
разработчиков), но дальше, что называется, «кто во что фицированных пакетов с отобранным программным обес-
горазд». Несомненно, создатели постоянно оглядываются печением для различных систем.
на какие-то привычные и устоявшиеся положения архитек-
туры, но всякий хочет привнести что-то новое и неповтори- Кроссплатформенность и пакеты
мо-эксклюзивное в свой мир (неспроста уже давно не толь- Последним релизом OpenPKG (2.5) официально поддержи-
ко трубят о необходимости стандартизации GNU/Linux-дис- ваются следующие платформы: Linux (Fedora Core 4, Red Hat
трибутивов, но и предпринимают попытки добиться этого Enterprise Linux 4, OpenSUSE Linux 10, SUSE Linux 9.3 и 10.0,
путем создания сертификаций вроде Linux Standard Base). Gentoo Linux, Mandriva 10.2, Debian GNU/Linux 3.1), FreeBSD
Одной из ключевых составляющих каждого дистрибутива (4.11-SOLID, 5.4-STABLE, 6.0-STABLE, 7.0-CURRENT),
является система управления программным обеспечени- NetBSD 2.0.2, Solaris (8, 9, 10). Кроме того, известно, что ос-
ем – без этого затруднительно называть ОС готовой для новные функции OpenPKG работают в AIX 5.1 и HP-UX 11.11.
конечного использования. И здесь отчетливо прослежива- Общее число существующих и поддерживаемых на момент
ются концептуальные расхождения в подходах. Конечно, не последнего релиза пакетов – 579. Конечно, это существенно
каждый в состоянии разработать с нуля свою систему па- меньше, чем в Debian-репозитарии или в FreeBSD-портах,
кетов, и это положение значительно повлияло на числен- но стоит отметить, что OpenPKG – это, во-первых, не прос-
ность подобных систем, однако единого решения нет да- то коллекция всех доступных приложений вообще, а отоб-
же среди GNU/Linux-дистрибутивов. Кто-то использует RPM, ранное лучшее и самое нужное, и во-вторых, проект ори-
кто-то – DEB, некоторые – систему портов, всегда найдут- ентирован на применение на серверных станциях. То есть
ся любители собирать приложения самостоятельно из ис- OpenPKG практически не содержит приложений для на-

40
администрирование
стольных ПК. Тем не менее, представлены и некоторые пускать/останавливать/перезапускать отдельные (или все
базовые программы для удобной работы в консоли: обо- вообще) пакеты, а также выводящий различные конфигу-
лочки Bash и Zsh, текстовые редакторы Emacs и Vim, веб- рационные значения (при вызове с --config). В качестве до-
браузеры Lynx и Links, почтовый клиент Mutt, FTP-клиен- полнения представлен пакет openpkg-tools – после его инс-
ты lftp и ncftp, файловый менеджер MC и т. п. Из сервер- талляции появляются утилиты, которые, используя при сво-
ного программного обеспечения можно выделить наличие ей работе make, binutils и gcc, позволяют автоматизировать
Apache, BIND, INN, MySQL, OpenLDAP, OpenSSH, OpenSSL, процесс сборки и установки пакетов из исходников с уче-
Postfix, PostgreSQL, ProFTPD, PureFTPd, Samba, Sendmail, том их зависимостей (команда openpkg build).
SpamAssassin, SQLite, Squid. В общем, привычный набор
знакомых и распространенных среди серверов пакетов. Подводя итоги
Не забыто и ПО для разработчиков: GCC, GDB, Subversion, OpenPKG – основанная исключительно на Open Source тех-
Autoconf, Automake, Make, Perl, PHP, Python, Ruby, Tcl... нология, предназначенная для упрощения работы с пакета-
ми на множестве разнородных UNIX/Linux-серверов. Про-
Подробности об устройстве OpenPKG ект предоставляет всю необходимую унифицированную
Продукция OpenPKG распространяется в виде модифици- инфраструктуру управления программным обеспечени-
рованных для поддерживаемых платформ RPM-пакетов ем на различных платформах, облегчая тем самым жизнь
(спецификации для каждой ОС написаны разработчиками системному администратору в инсталляции и обновлении
OpenPKG с нуля) двух традиционных типов: binary и source. привычных пакетов, общее количество которых превыша-
При этом рекомендуемыми к использованию считаются, ес- ет 500.С помощью OpenPKG можно как быстро разверты-
тественно, пакеты с исходниками – единые для всех плат- вать серверы из бинарных пакетов, так и (почти?) полно-
форм. К бинарным сборкам, существующим в виде отде- стью автоматизировать процесс сборки программных ком-
льных для каждой ОС коллекций, советуют обращаться понентов (с учетом необходимых оптимизаций и особеннос-
только в исключительных случаях, когда нет возможнос- тей платформ). OpenPKG позволяет создавать множество
ти уделить процессу компиляции необходимое для это- полностью самодостаточных, изолированных сущностей
го время. Связано такое положение вещей хотя бы с тем, с пакетами в единой системе (причем с возможностью ис-
что зачастую некоторые функции приложений «вшивают- пользования одной сущностью пакетов из другой, что сво-
ся» в бинарные файлы, в результате чего встроенные оп- дит на нет необходимость установки одинаковых пакетов
ции могут быть изменены только путем пересборки. Вы- в различных сущностях – это своего рода система зависи-
бор формата RPM разработчики объясняют тем, что это мостей? Нет, это больше похоже на случай, когда на одном
единственное из всех рассмотренных ими решений (к сло- сервере множество VPS под Gentoo Linux, а база портежей
ву, исследовать они успели еще и Debian dpkg/apt, FreeBSD для всех виртуальных серверов монтируется одна). Инстал-
ports с pkg_xxx, SVR4 pkgxxx, epkg, Build’n’Play, GNU Stow, лируемое ПО максимально обособлено от системы и неза-
Opt-Depot, а также другие утилиты), удовлетворяющее висимо, может быть полностью удалено менеджером без
всем основным требованиям и предоставляющее подде- потребности в дополнительных манипуляциях. Разработчи-
ржку полного цикла жизни пакета. Помимо пакетов с са- ки OpenPKG беспокоятся и о безопасности поставляемых
мим программным обеспечением в дистрибутив релиза пакетов, что особенно важно, учитывая серверную специ-
OpenPKG входят и средства для создания собственного ок- ализацию, подразумевающую возможность использова-
ружения системы пакетов и удобной работы с ними. Shell- ния поставляемого ПО на общедоступных (через локаль-
скрипт openpkg-<version>-<opkg-release>.src.sh, доступ- ную или глобальную сеть) машинах. На регулярной осно-
ный в директории с исходниками, формирует базовое ок- ве для всех официально поддерживаемых пакетов выпус-
ружение для OpenPKG, после чего за работу берется спе- каются предупреждения об уязвимостях в безопасности
цифичный для структуры скрипт openpkg-<version>-<opkg- (security advisories, SA) и исправляющие эти проблемы об-
release>.<arch>-<platform>-openpkg.sh, устанавливающий новления в виде UPD-файлов формата SRPM. Поддержка
менеджер пакетов в систему (для его запуска требуются распространяется только на последние версии OpenPKG
права root). Для первой установки OpenPKG или ее обнов- (на данный момент это 2.4 и 2.5). Для цифровой подписки
ления далее необходимо проинсталлировать пакет openpkg уведомлений о безопасности и SRPM-пакетов официаль-
(как отмечают разработчики в своем руководстве, «вос- ных релизов OpenPKG используются GnuPG и OpenPGP.
пользуйтесь OpenPKG для обновления OpenPKG!»). Далее С этого года поддержкой проекта занимается некоммер-
с помощью удобного консольного менеджера openpkg мож- ческая организация OpenPKG Foundation e.V. Финансы и ре-
но управлять всеми доступными пакетами (устанавливать, сурсы ей (на данный момент) предоставляет тройка немец-
удалять, собирать из исходников, просматривать инфор- ких спонсоров. Следующий релиз OpenPKG – 2.6 – наме-
мацию и т.п.).Основные административные операции осу- чен на апрель 2006 года.
ществляются через команду openpkg rpm, принимающую
параметры, знакомые любому пользователю RPM-основан- Ссылки
ных систем. Действие некоторых ключей распространяет- 1. Сайт OpenPKG – http://www.openpkg.org.
ся только на binary- или только на source-пакеты, а, напри- 2. OpenPKG FAQ – http://www.openpkg.org/faq.html.
мер, -Uvh для бинарного проводит установку или обновле- 3. OpenPKG Quick Reference – http://www.openpkg.org/doc/
ние, а для src – распаковку. Существует и собственный «за- quickref/openpkg.txt.
грузочный скрипт» (<корень_opkg>/etc/rc), позволяющий за- 4. OpenPKG 2.5 на FTP – ftp://ftp.openpkg.org/release/2.5.

№3, март 2006 41


администрирование

MikroTik – Router OS

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

С
егодня разработано достаточ- ализированные дистрибутивы, постро- дет речь, не похож ни на один из тех,
но инструментов, позволяющих енные на базе GNU/Linux или различ- с которыми мне приходилось ранее
упростить решение этой зада- ных BSD-систем [2, 3, 4], которые поз- иметь дело автору.
чи как полностью, так и отдельных ее воляют превратить старый системный
участков. Среди программных реше- блок в надежный маршрутизатор. Во- Возможности MikroTik
ний это различные утилиты для ана- обще все дистрибутивы чем-то похо- Честно говоря, если бы MikroTik не был
лиза журналов и вывода результатов, жи, тот же Linux только маленький, от- предложен моим интернет-провайде-
графические интерфейсы к програм- личаются составом приложений, воз- ром для организации доступа к нашей
мам настройки сети, сервисов и меж- можностью обновления, наличием спе- районной сети, то, вероятно, я еще дол-
сетевого экрана, VPN, системы защи- цифических утилит для упрощения их го бы не знал об его существовании,
ты и прочее. Особой популярностью настройки. Латышский дистрибутив т.к. на всех профильных интернет-про-
у администраторов пользуются специ- GNU/Linux MikroTik [1], о котором пой- ектах информация о MikroTik отсутс-

42
администрирование
твует. Теперь же после полугода эксплуатации можно от- пользовать MikroTik в течение неограниченного времени.
метить стабильную работу сервера. За этот период ни ра- В настоящий момент имеется 6 уровней лицензии. Уро-
зу не понадобилось перезагружать сервер. Для организа- вень 0 означает работу без лицензии. Лицензия уровня 1
ции доступа в Интернет сети из сотни пользователей ис- или SOHO предоставляется бесплатно и имеет ограниче-
пользовался старый системный блок с установленным Пен- ние по количеству максимальных соединений PPTP, PPPoE,
тиумом 233 с 128 Мб оперативной памяти и жестким дис- Queues, NAT, EoIP и DHCP, в этом случае также отключе-
ком на 2 Гб. Максимальная загрузка процессора составля- на поддержка беспроводных устройств, веб-кеша и Radius-
ла всего 25%, используемая память не превысила значе- клиента, нет технической поддержки и невозможно обнов-
ния 40 Мб, а жесткий диск заполнен на 50 Мб. Раз уже за- ление дистрибутива. Стоит особо отметить, что лицензия
шла речь о системных требованиях, то в официальных ру- привязана к Software ID, его значение администратор полу-
ководствах они еще ниже, чем указанные: частота процес- чит во время установки системы. При этом Software ID (и со-
сора от 100 МГц, ОЗУ 32 Мб (рекомендуется от 64 Мб), жес- ответственно и ключ лицензии) изменится только при ус-
ткий диск от 64 Мб. тановке дистрибутива на другой жесткий диск, при заме-
Кроме того, на сайте проекта можно купить предуста- не остального оборудования маршрутизатора или добав-
новленную на IDE Flash-модуль дистрибутива который мо- лении нового оборудования новый ключ получать не при-
жет использоваться вместо жесткого диска. Кроме сис- дется. Стоимость других уровней лицензирования колеб-
темных требований, удивили и поистине богатые возмож- лется от 45 до 250 у.е.
ности вкупе с легкостью настройки и администрирования.
Приведу лишь небольшую часть из возможностей дист- Установка
рибутива: На момент написания статьи актуальной была версия 2.9.14,
 Межсетевой экран и NAT – полноценная фильтрация о которой и пойдет речь далее, хотя со времени версии 2.8
пакетов, source и destination NAT, классификация паке- процесс установки не изменился, увеличилось только ко-
тов по МАС, IP-портам, опциям протоколов, интерфей- личество доступных пакетов. Установить систему можно
сам, внутренним маркированным пакетам, содержимо- тремя способами:
му, P2P-фильтрация. Поддержка мостов между интер-  при помощи загрузочного CD;
фейсами с фильтрацией пакетов.  с дискет (DiskMaker);
 Маршрутизация – статическая, multi-path, на основе по-  через сеть (загрузившись при помощи флоппи ли-
литик (совместно с межсетевым экраном), динамичес- бо сетевой карты с поддержкой загрузки по сети PXE
кая маршрутизации: RIP v1/v2, OSPF v2, BGP v4; или EtherBoot).
 Управление качеством облуживания – маркировка по
IP, сети и подсети, порту; управление полосой пропус- Кроме того, на сайте доступен архив, который при помо-
кания, задание скорости и прочее. щи программы PhysDiskWrite для Windows либо dd в UNIX не-
 Полноценный HotSpot – создание plug&play точек кол- обходимо перенести на CompactFlash. Первый вариант яв-
лективного пользования Интернет с аутентификацией ляется самым простым и распространенным (кроме покуп-
на RADIUS-сервере, с контролем работы в реальном ки предустановленного), его и будем рассматривать. Ска-
времени, заданием скорости, объема, времени работы чиваем с сайта архив, содержащий ISO-образ, распаковы-
клиента, создание walled-garden защищенных зон. ваем, записываем, выставляем загрузку с CD-ROM в BIOS
 Поддержка различных Point-to-Point-протоколов – и загружаемся. Никаких опций во время загрузки не предус-
PPTP, PPPoE и L2TP с поддержкой RADIUS, PAP, CHAP, мотрено, на первом экране пользователю предлагается вы-
MSCHAPv1 и v2 протоколов аутентификации; MPPE брать приложения. Здесь все просто: перемещаемся при по-
шифрования; компрессии и дозвона по требованию для мощи стрелок (или клавиш <p> и <n>), наводим на нужное
PPPoE. приложение и выбираем его при помощи пробела. При на-
 Туннели – IPIP, EoIP (Ethernet over IP). ведении на пункт внизу экрана выдается краткое поясне-
ние, и в скобках указываются зависимости, system явля-
А еще поддержка IPSec, FTP и HTTP/HTTPS кэширую- ется обязательным к установке. Нажатие на <а> приведет
щий прокси-сервер, DHCP-сервер и клиенты, клиент и сер- к выбору всех пунктов, <m> – установит только минималь-
вер Network Time Protocol, Bonding, журналирование работы ный набор. После выбора нажимаем на <i> (install), и про-
межсетевого экрана, действий пользователя и поведения исходит собственно установка. Жесткий диск будет разме-
системы, генерация простых отчетов. Предусмотрена воз- чен автоматически, все данные будут уничтожены, хотя вам
можность настройки GPRS-соединения. Но самое интерес- будет предложено сохранить предыдущую конфигурацию
ное, что размер дистрибутива чуть больше 14 Мб. MikroTik. Что очень полезно, так как SOHO-лицензия не под-
держивает обновлений, а так есть возможность сохранить
Лицензия все настройки при полном обновлении системы. Обратите
MikroTik не является полностью свободным продуктом, внимание, что все версии MikroTik до 2.8 не поддерживают
и за все его возможности придется заплатить. Без ли- более одного жесткого диска. В новых версиях второй диск
цензии установленный сервер проработает ровно 24 часа используется только для кэширования веб-страниц. После
(при выключении отсчет времени останавливается). По ис- распаковки приложений вы получите сообщение о необхо-
течении этого срока либо потребуется ввести ключ, либо димости нажать Enter для перезагрузки. Вот, собственно,
переустановить систему. Полученный ключ позволяет ис- и все. После установки CD-ROM можно отключить.

№3, март 2006 43


администрирование
лит вроде ifconfig, netstat, ping, можно обнаружить, что при-
сутствует только последняя из них. Все пункты меню мож-
но узнать, нажав два раза табуляцию.
[admin@MikroTik] >
certificate import log ppp redo special-login undo
driver interface password queue routing system user
export ip ping quit setup test-bridge
file isdn-channels port radius snmp tool

Набираем в строке приглашения нужный пункт. Напри-


мер, для установки IP-адреса интерфейса набираем ip.

[admin@MikroTik] > ip
[admin@MikroTik] ip>

Табуляция подсказывает следующие уровни либо ко-


Рисунок 1. Веб-страница настроенного маршрутизатора манды.
MikroTik
[admin@MikroTik] ip> address
[admin@MikroTik] ip address > add

address: 192.168.0.1/24
interface: ether1

Обратите внимание, что адрес вводится вместе с се-


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

[admin@MikroTik] > /ip address ↵


add address 192.168.0.1/24 interface ether1
[admin@MikroTik] > /ip address ↵
Рисунок 2. На веб-странице можно просмотреть графики add address 192.168.1.100/24 interface ether2
загрузки системы и канала

Теперь доступ к серверу можно получить различными Чтобы вернуться на уровень вверх, необходимо набрать
способами: локальная консоль, терминал, подключенный две точки. Для удобства сетевым интерфейсам можно дать
к COM-порту (9600 бит/с, 8 бит данные, 1 стоповый, аппа- более удобные имена:
ратное управление потоком RTS/CTS), telnet, SSH, MikroTik
MAC Telnet, веб-интерфейс Webbox и графическая утили- [admin@MikroTik] interface> set ether1 name=Local; ↵
set ether2 name=Public
та Winbox.
Первоначальные настройки осуществляются исключи- Теперь ether1 будет называться Local, а ether2 – Public.
тельно при помощи локальной консоли. Для регистрации И не забываем добавить шлюз:
используем логин: admin с пустым паролем. После чего бу-
дет выведено следующее сообщение, в последней стро- [admin@MikroTik] ip route> add gateway=192.168.1.100/24
ке которого вам будет показан необходимый для регист-
рации software ID, в моем случае это 4NHQ-GWN. Теперь Да, чтобы выключить или перезагрузить компьютер,
заходим на сайт проекта и в правом верхнем углу, подпи- необходимо перейти в меню system и набрать shutdown
санном как «Account Server», выбираем «New», заполняем или reboot.
данные и ждем подтверждения регистрации по электрон- С командами разобраться легко, но понадобятся
ной почте. После чего регистрируемся в системе, вводим они только при удаленном управлении при помощи ssh
Software ID, и на ваш электронный адрес придет лицензи- или telnet. Для первоначальной настройки лучше воспользо-
онный ключ. В данном случае использовалась бесплатная ваться скриптом setup и настроить только внутренний интер-
SOHO-лицензия, при необходимости затем всегда можно фейс, остальную настройку производить удаленно при по-
поднять уровень лицензирования. мощи более наглядных утилит Webbox и Winbox.
Строка приглашения показывает имя маршрутизато- И не забываем сменить пароль администратора.
ра и уровень меню:
[admin@MikroTik] > password
[admin@MikroTik] > old password:
new password: ************
Попробовав работу ряда привычных юниксовских ути- retype new password: ************

44
администрирование
Утилиты конфигурирования Webbox
и Winbox
Для вызова утилиты Webbox достаточно набрать в веб-бра-
узере IP-адрес маршрутизатора (рис. 1), здесь же можно
просмотреть графики загрузки (рис. 2). Зарегистрировав-
шись вверху окна, можно получить доступ к некоторым
настройкам системы (рис. 3), информации о работе мар-
шрутизатора, вывести простые отчеты. С первой страни-
цы можно скачать утилиту Winbox, которая предоставля-
ет большие возможности по конфигурированию системы
(рис. 4). В отличие от Webbox Winbox может работать по за-
щищенному каналу, для чего при установке нужно выбрать
пакет security. Режим можно определить по тому, с каким
портом происходит работа. В случае незащищенной рабо-
ты используется 8290 TCP-порт и 8291 – в случае шифро-
ванного соединения. Все настройки удобно собраны по от- Рисунок 3. Утилита веб-администрирования Webbox
дельным пунктам меню и понятны, дополнительные опции
свернуты и не мешают.
При каждом соединении с Winbox вам будут напоминать
о необходимости введения лицензионного ключа и остав-
шемся времени, поэтому лучше сделать это сразу. Для на-
стройки второго интерфейса заходим в «IP → Addresses»
и вводим его IP-адрес.
В моем случае необходимо было настроить PPPoE-под-
ключение к провайдеру услуг Интернет. Для этого заходим
в пункт PPP во вкладке Interfaces, нажимаем на «+», выбира-
ем «PPPoE Client», далее заполняем все необходимые поля
и нажимаем кнопку «OK». Если всё введено правильно, под-
ключение заработает, что можно тут же проверить, кликнув
на имени и перейдя затем на вкладку «Traffic». Хотя, набив
руку, можно ввести это все и через ssh. Например:

[admin@MikroTik] > /interface pppoe-client ↵


add name=pppoe-user-grinder user=grinder ↵ Рисунок 4. Утилита администрирования Winbox
password=1234567 interface=Public ↵
service-name=internet disabled=no dial-on-demand=yes го, комплект сетевых утилит входящих в комплект MikroTik,
можно запускать как при помощи Winbox, либо ssh.
И опять же напоминаю, что при наборе практически всех
параметров пользуйтесь табуляцией, это ускоряет и упро- Выводы
щает набор. Тщательность проработки, продуманность настроек MikroTik
Межсетевой экран свежеустановленого MikroTik марш- вызывает только положительные эмоции. Несмотря на не-
рутизатора не содержит встроенных правил, поэтому если которую непривычность вначале, очень быстро осваива-
просканировать его nmap, то можно обнаружить, что из вне- ешься и далее работаешь без затруднений. А хорошая до-
шней сети можно получить доступ ко многим лишним сер- кументация, форум проекта и набор утилит только помо-
висам. Поэтому следующим обязательным шагом необхо- гают в этом. В принципе один такой маршрутизатор впол-
димо настроить фильтрацию пакетов, в первую очередь за- не способен решить все стандартные задачи по представ-
претив доступ к ftp, telnet и www. лению доступа для небольшой и средней сети и их защи-
Для настройки правил межсетевого экрана переходим те. Если версии SOHO будет недостаточно, то можно ли-
в «IP → Firewall» и во вкладке «Filter Rules» прописываем бо приобрести лицензию, либо попробовать разбить сеть
правила, запрещающие подключение к портам 21, 23, 80, на более мелкие фрагменты.
137-139 и 445 с внешних адресов, и во вкладке NAT разре-
шаем маскарадинг для внутренних клиентов. Ссылки:
Кроме дистрибутива MikroTik на сайте проекта можно 1. Сайт проекта – http://www.mikrotik.com.
найти и еще ряд дополнительных утилит, которые будут по- 2. Яремчук С. Роутер без диска. – Журнал «Системный адми-
лезны в работе. Например, MikroTik Bandwidth Test позволя- нистратор», №9, 2004 г. – 8-9 с.
ет оценить пропускную способность канала, Traffic Counter – 3. Яремчук С. Маленький линукс в качестве firewall. – Журнал
подсчитывать трафик, MT Syslog Daemon – демон syslog «Системный администратор», №9, 2003 г. – 24-32 с.
для Windows-систем, Log Downloader – сохранение жур- 4. Яремчук С. Сетевой полицейский. – Журнал «Системный ад-
налов на другом компьютере, Dude – утилита мониторин- министратор», №1, 2005 г. – 42-45 с.
га и построения карт сетей и некоторые другие. Кроме то- 5. Утилита PhysDiskWrite – http://www.m0n0.ch/wall.

№3, март 2006 45


администрирование

Шлюз аутентификации
пользователей NuFW

Фильтрация IP-пакетов является простым,


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

46
администрирование

Ч
тобы удовлетворять всем требо- релиз через два года – в марте 2005 г.
ваниям безопасности, сегодняш- Поэтому проекту могут быть присущи
ние системы должны работать болезни молодости, и иногда возни-
на уровне пользователей. Но класси- кают проблемы с безопасностью, на-
ческая схема основывается на пред- пример сообщение о возможности
положении: один пользователь → один DOS-атаки [4].
компьютер → один IP-адрес. То есть
системный администратор для реше- Принцип работы
ния проблемы управления пользова- В основе работы NuFW лежит взаи-
телями фактически должен работать модействие с Netfilter – механизмом
на IP-уровне. В простейшем случае фильтрации сетевых пакетов, появив-
это решается статическим закрепле- шимся в ядре Linux в версии 2.4. Поэ-
нием IP-адреса, что может быть эф- тому в настоящее время такой шлюз
фективно только в небольших сетях. аутентификации может работать толь-
В то же время сегодня доволь- ко на Linux, хотя разработчики плани-
но обычна ситуация, когда несколь- руют разработку NuFW и для других
ко пользователей используют одну операционных систем, в первую оче-
и ту же многопользовательскую сис- редь BSD.
тему, и в таком случае установленные Для обеспечения услуг доступа ис-
правила будут действовать для всех пользуются два демона, которые могут
работающих в одной системе одина- быть запущены на разных компьюте-
ково. рах. Сервер аутентификации – nuauth
Один из вариантов решения про- и работающий на шлюзе – nufw.
блемы описан в [8]. Проект NuFW Последний обеспечивает связь
(Now User Filtering Works) предлагает с Netfilter через цель «-j QUEUE», и та-
несколько иной подход к решению – ким образом осуществляется фильтра-
«authenticating gateway». NuFW позво- ция трафика (рис. 2).
ляет проводить аутентификацию поль- Стоит отметить, что в ядре 2.6.14
зователя для каждого соединения, пы- появилась новая, более мощная оп-
тающегося получить доступ к межсете- ция NFQUEUE, что позволяет совмес-
вому экрану и некоторым другим сер- тно с NuFW использовать, например,
висам сети. Фактически после аутен- и IDS Snort в режиме inline (системы
тификации всегда можно однознач- остановки атак). На остальных ком-
но сказать, что в данный момент вре- пьютерах должны быть установле-
мени 192.168.0.2 = Вася Пупкин. Та- ны клиентские программы, при помо-
кой подход позволяет не только огра- щи которых будет осуществляться ау-
ничивать доступ, тонко реализуя по- тентификация. Такие программы до-
литику безопасности, но и регистри- ступны для Linux, FreeBSD, MacOS X
ровать деятельность, выполнять под- и Windows. Когда клиент пытается от-
счет трафика, выставлять различное править пакет через межсетевой эк-
значение QoS (Quality of Service), осу- ран или шлюз, демон nufw связывается
ществлять маршрутизацию, динами- с демоном nuauth, который подтверж-
чески изменять списки контроля до- дает либо отрицает полномочия поль-
ступа, опираясь на данные пользова- зователя. При этом фактически внима-
теля, а не на IP. ние уделяется первой фазе установле-
Также правила фильтрования могут ния соединения, т.е. SYN-пакетам.
в этом случае использовать и данные Начиная с версии 1.1.0 обмен меж-
о приложениях, операционной системе, ду клиентами и nuauth ведется в UTF-8
используемых клиентом (рис. 1). (если при конфигурировании исполь-
Хотелось бы отметить, что проект зовалась опция «--with-utf8»).
относительно молодой. Сама идея воз- Система аутентификации пользо-
никла в 2001 году при попытке доба- вателя выполнена в виде модуля. Де-
вить поддержку LDAP к прокси, обес- мон nuauth для аутентификации поль-
печивающему безопасный доступ зователей и групп может использовать
к telnet/ftp-сервисам. Исходный про- сервер LDAP, PAM/NSS, базу в фор-
ект имел название Net Security Master мате DBM, обычный текстовый файл

Сергей Яремчук (сейчас GateKeeper). Рабочая альфа-


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

№3, март 2006 47


администрирование
Все соединения по умолчанию за- gcrypt, gnutls, cyrus-sasl, gdbm, libident,
крываются при помощи SSL, что реша- libpam.
ет проблему спуфинга адресов и рас- Дистрибутив NuFW на сайте проек-
крытия пароля. Хотя в более ранних та доступен только в исходных текстах,
версиях протокола на участке клиент – хотя в архивах [6] и им подобных мож-
nuauth использовалась только откры- но найти пакеты для Debian и некото-
тая передача данных (на рис. 2 пока- рых rpm-дистрибутивов (для ALTLinux
зано оранжевым цветом). Кроме па- в Сизифе пакетов на момент написа-
роля для доступа пользователи могут ния статьи не было). Если планиру-
использовать и TLS (Transport Layer ется контроль над полосой пропуска-
Security) сертификаты. ния и QoS, необходима перекомпиля-
Но это еще не все. В настоящее вре- ция ядра с патчами ip_queue_vwmark
мя разработаны модули для веб-сер- и CONNMARK, которые входят в ком-
вера Apache и Squid, позволяющие им плект patch-o-matic [7].
работать совместно с системой NuFW.
Пользователь в этом случае будет ау- # KERNEL_DIR=/usr/src/linux ↵
IPTABLES_DIR=/home/sergej ↵
Рисунок 1. NuFW позволяет делать тентифицирован только один раз. Та- /src/iptables ./runme ↵
фильтрацию по IP-адресам, пользователям, ip_queue_vwmark
приложениям и операционной системе кой метод прозрачной аутентификации
# KERNEL_DIR=/usr/src/linux ↵
назван SSO (Single Sign On). Работает IPTABLES_DIR=/home/sergej ↵
дут иметь доступ к только электронной система следующим образом: пользо- /src/iptables./runme CONNMARK
почте, а какие могут пользоваться http, ватель получает доступ к межсетево-
ftp и другими сервисами. му экрану обычным образом и попа- После чего нужно пересобрать яд-
Единственное ограничение NuFW дает на сервер. Модуль SSO, работаю- ро, модули и утилиты iptables.
заключается в том, что пока фильтру- щий на сервере, зная параметры свя- На момент написания статьи пос-
ется только TCP, но в будущем плани- зи, запрашивает в базе данных соот- ледней версией пакета NuFW была
руется работа с UDP и ICMP. ветствующий вход для каждой связи. 1.0.20. Кроме того, доступен неста-
Если пользователь принадлежит Если пользователь аутентифицирован, бильный релиз 1.1.3, в котором кли-
к группам с противоречивыми на- то доступ к сервису разрешается. ентская утилита nutcpc начала рабо-
стройками, nuauth может быть настро- NuFW – полностью открытый про- тать в среде ОС FreeBSD и Mac OS X.
ен на разный вариант разрешения си- ект, все компоненты, за исключением При конфигурировании доступен ряд
туации. клиента под Windows, распространяют- опций. Вот некоторые из них:
Для регистрации действий пользо- ся под лицензией GNU GPL v2, прото-  --with-user-mark – поддержка мар-
вателей применяется syslog, или базы кол полностью документирован [5]. кировки пользователя в NuFW;
данных MySQL и PostgreSQL. В случае  --with-mysql-log, --with-pgsql-log –
использования базы данных такая сис- Установка NuFW регистрация поддержки пользова-
тема способна сохранить более под- Для установки NuFW вам потребуют- теля в соответствующей базе дан-
робную информацию. ся последние версии: glib2.0, gpg-error, ных;
 --with-system-auth, --with-ldap,
--with-gdbm, --with-ident – подде-
ржка соответствующих методов
аутентификации пользователей
(для текстового режима опций ука-
зывать не надо).

Выбираем необходимые опции


и конфигурируем.

$ ./configure --with-ldap ↵
--with-system-auth ↵
--with-mysql-log ↵
--sysconfdir=/etc/nufw/ ↵
--prefix=/usr --with-debug

Дальше обычная компиляция.

$ make
# make install

К сожалению, во время установки


не создаются необходимые каталоги
и не копируются файлы, поэтому вам
Рисунок 2. Принцип работы NuFW придется сделать это самим.

48
администрирование
# mkdir /etc/nufw/ ля, время ожидания подтверждения от клиента и количес-
тво повторных запросов в случае неудачи. А также время
хранения списков доступа в кэше, максимальное количес-
Настраиваем nuauth тво клиентов и серверов nufw, параметры доступа к серве-
Теперь конфигурационный файл для демона nuauth – рам LDAP, MySQL и PostgreSQL и уровень регистрации со-
/etc/nufw/nuauth.conf. Приведу только основные парамет- бытий, и другие параметры.
ры. Копируем его на место и конфигурируем.
Последние настройки и запуск
# cp conf/nuauth.conf /etc/nufw/ В составе дистрибутива в подкаталоге certs имеются го-
# vi /etc/nufw/nuauth.conf
# Файл /etc/nufw/nuauth.conf товые сертификаты, предназначенные для тестирования,
# Адрес, на котором демон nuauth будет принимать там же лежат и сертификаты разработчиков. Копируем их
# клиентов, в нашем случае со всех доступных адресов
nuauth_client_listen_addr="0.0.0.0" в /etc/nufw/. Для nufw:
# IP-адрес, на котором nuauth слушает пакеты nufw
nuauth_nufw_listen_addr="127.0.0.1"
# Порт для запросов nufw # cp conf/certs/nufw-* /etc/nufw/
nuauth_gw_packet_port=4129
# Порт для пакетов аутентификации пользователей
nuauth_user_packet_port=4130 И для nuauth:
# Адрес и порт nufw маршрутизатора, на котором он будет
# ожидать ответ в незащищенном UDP, – это локальный адрес.
# В TLS-режиме это может быть список адресов #cp conf/cert/nuauth*.pem /etc/nufw/
# nufw_gw_addr="192.168.75.1 192.168.75.254" #cp conf/cert/NuFW*.pem /etc/nufw/
nufw_gw_addr="127.0.0.1"
nufw_gw_port=4128 В рабочей системе создадим свои сертификаты.
# Что делать в том случае, когда пользователь является
# членом групп с противоречивыми установками
# (0 - нет, 1 - разрешить) # openssl req –new –x509 –nodes –days 365 –out ↵
nuauth_prio_to_nok=1 /etc/nufw/nuauth-cert.pem –keyout /etc/nufw/nuauth.pem
# Аутентификация может работать в двух режимах. # openssl req –new –x509 –nodes –days 365 –out ↵
# POLL: клиент отправляет пакет в каждом случае, когда /etc/nufw/nufw-cert.pem –keyout /etc/nufw/nufw-key.pem
# требуется аутентификация в этом режиме, трафик меньше,
# поэтому он может использоваться для удаленных
# либо сильно загруженных сетей Файл users.nufw содержит списки пользователей. Запи-
# PUSH: демон nuauth посылает предупреждение клиенту си в нем состоят из строк вида:
# о необходимости аутентификации (лучшее время отклика)
nuauth_push_to_client=1
# Ограничения регистрации пользователей Username: passwd:uid:gid[,gid,gid]
# 0 : без ограничений (по умолчанию)
# 1 : один вход для пользователя
# 2 : один вход для IP Обратите внимание, в файл заносится пароль в чистом
# nuauth_connect_policy=1
# Для клиентов, не поддерживающих протокол NuFW, или если виде, а не хэш. Это не совсем хорошо с точки зрения безо-
# его применение затруднено, например, использованием NAT пасности, но при установке соответствующих прав в данном
# или межсетевых экранов, разделяющих сети, применяется
# аварийная (hello) аутентификация, базирующаяся только случае в принципе приемлемо. Например:
# на IP и поддерживающая только одного пользователя.
# Такой способ работает для всех типов потоков IP
nuauth_hello_authentication=0 sergej:passwd1:1:102
nuauth_do_ip_authentication=0 admin:admin_passwd:2:100,102,103
# Модуль аутентификации пользователей
# (libldap, dbm, plaintext, system) Для отключения пользователя достаточно добавить ка-
nuauth_user_check_module=»libdbm» кой-либо знак к паролю (обычно «*» или «!»). Списки контро-
# Модуль списков контроля доступом (libldap, libplaintext)
nuauth_acl_check_module=»libplaintext» ля доступа в этом случае хранятся в файле acls.nufw, в кото-
nuauth_acl_cache=1 ром вы найдете их подробное описание. Например, для до-
# Модуль IP-аутентификации (libipauthident, rpc)
nuauth_ip_authentication_module="libipauthident" ступа к ssh для пользователей Linux, входящих в группы 100
# Ниже перечислены файлы для хранения сертификатов и ключей и 102 с любого адреса, пишем такое правило.
# секретный ключ сервера (по умолчанию CONFIGDIR/nuauth.pem)
nuauth_tls_key="/etc/nufw/nuauth.pem"
# Сертификаты сервера [ssh]
nuauth_tls_cert="/etc/nufw/nuauth-cert.pem" decision=1
nuauth_tls_cacert="/etc/nufw/NuFW-cacert.pem" gid=100, 102
# Использование клиентом сертификата вместо пароля proto=6
nuauth_tls_request_cert=0 SrcIP=0.0.0.0/0
# Регистрация событий: «mysql», «pgsql», «syslog» SrcPort=1024-65535
nuauth_user_logs_module="syslog" DstIP=0.0.0.0/0
# Регистрация деятельности пользователей: syslog, mysql, DstPort=22
# script. В последнем случае при подключении пользователей App=/usr/bin/ssh
# будет запущен скрипт, лежащий в CONFDIR/user-up.sh OS=Linux
# и при разъединении CONFDIR/user-down.sh
nuauth_user_session_logs_module="syslog mysql"
# Списки пользователей и ACL при использовании Для доступа к сервисам без ограничений группе 100.
# для аутентификации текстовых файлов
plaintext_userfile="/etc/nufw/users.nufw"
plaintext_aclfile="/etc/nufw/acls.nufw" [full]
# Преобразование имени пользователя в верхний регистр decision=1
# system_convert_username_to_uppercase=0 gid=100
proto=6
SrcIP=0.0.0.0/0
Также в файле можно указать время, через которое бу- SrcPort=1024-65535
дет производиться повторная аутентификация пользовате- DstIP=0.0.0.0/0

№3, март 2006 49


администрирование
Большая часть параметров очевидна, «proto=6» озна- казано, поэтому указывайте только внешний интерфейс.
чает TCP, «decision» позволяет указать варианты правил,
если правила пересекаются. В качестве параметров IP мо- $nutcpc –S –U 102 –H 192.168.0.1
гут быть указаны как отдельные адреса сети, так и список,
разделенный запятой. В правила можно добавить разре- Вводим имя пользователя и пароль. В случае неуда-
шенные время и день работы. чи вам будут выведены сообщения, достаточные для ло-
Для формирования файла DBM используется утилита кализации проблемы. Сообщения также можно будет про-
nufw_dbm, но в случае большого числа пользователей все же смотреть в /var/log/messages. Для работы в среде Windows
удобней применять LDAP, для которого правила формируются имеется графический клиент NuWINс, который доступен
при помощи скрипта nuaclgen. При этом информация о соеди- в двух вариантах: один для работы в домене, работающий
нении LDAP должна быть записана в файл nuaclgen.conf. прозрачно для пользователя и запускающийся в качестве
Правило для ssh в этом случае задается так. сервиса, второй – в классическом варианте. Демонстраци-
онную версию последнего, разрешающую только 30 минут
#nuaclgen.pl –A cn=ssh,ou=Acls,dc=inl,dc=fr –p 6 ↵ сессии, можно скачать с сайта [3]. На том же сайте досту-
–dport 22 –AppName "/usr/bin/ssh" –j ACCEPT –g 100
пен графический клиент для Linux-систем nuapplet, пред-
Кроме того, на сайте [3] можно найти Nuface, представ- ставляющий собой апплет для Gnome 2.x.
ляющий веб-интерфейс для создания правил для Netfilter,
в том числе и без поддержки NuFW при помощи скрипта Работа с базами данных
nupyf.py, который можно запускать и вручную. Демонстра- Превым делом необходимо создать пользователя, обладаю-
ционная версия Nuface доступна по адресу [9]. щего привилегиями UPDATE, INSERT к conntrack_ulog, и за-
Далее проверяем загрузку модуля ядра. нести эти параметры в файл nuauth.conf. Для создания са-
мих таблиц используйте готовые сценарии nulog.mysql.dump
# /sbin/lsmod | grep ip_queue и nulog.pgsql.dump, которые вы найдете в подкаталоге conf
ip_queue 10520 0 дистрибутива. Кроме того, в подкаталоге script лежит скрипт
clean_conntrack.pl, при помощи которого таблицы очищаются
При необходимости загружаем его при помощи команды: от «мертвых» соединений. Его необходимо периодически за-
пускать при помощи cron, иначе таблица быстро будет пере-
# /sbin/modprobe ip_queue полняться и задерживать ответ клиентам. Время нужно под-
бирать индивидуально для каждой сети (обычно 5-10 минут
Добавляем правило в iptables (в документации и на сай- достаточно). Для работы этого скрипта необходимо создать
те [2] приведено большое количество конфигураций). пользователя, обладающего привилегиями SELECT и DELETE
для таблицы «conntrack_ulog» и INSERT для «ulog». И внести
# /sbin/iptables –A OUTPUT –s 192.168.0.0/24 –p tcp ↵ эти данные во внутрь скрипта (по умолчанию используется
–dport 22 –m state –state NEW –syn –j QUEUE
# /sbin/iptables –A OUTPUT –m state –state ↵ root, что излишне). Кроме того, в этом же подкаталоге лежат
ESTABLISHED,RELATED –j ACCEPT два скрипта – ulog_rotate_daily.sh и ulog_rotate_weekly.sh, при
помощи которых можно очищать базы журналов от перепол-
Запускаем nuauth: нения. Для детального просмотра результатов удобно исполь-
зовать веб-приложение nulog, демонстрационная версия кото-
# /usr/sbin/nuauth –vvvvvvvvv рого доступна по адресу [10]. Кроме того, в настоящее время
** Message: debug_level is 9 ведется работа над приложением корреляции и выдачи пре-
дупреждений Nualert и генератором отчетов Nureport.
** Message: Starting nuauth
** Message: Auth (user) module: plaintext
** Message: ACL module: libplaintext Ссылки:
** Message: User logs module: syslog
1. Официальный сайт проекта – http://www.nufw.org.
** Message: creating acl cache thread
** Message: Creating search_and_fill thread 2. Сайт поддержки NuFW – http://regit.free.fr/nufw.
** Message: Creating 3 acl checkers 3. Сайт INL develops – http://www.inl.fr.
** Message: Creating 3 user checkers
** Message: Creating 2 user loggers 4. http://www.security.nnov.ru/Kdocument456.html.
** Message: Creating tls authentication server thread 5. Протокол и алгоритм работы – EFICAAS (Extending Firewalling
** Message: Creating tls nufw server thread
Infrastructure Capabilities and Aggregating Authentication
** Message: Threads system started
Systems) – http://www.nufw.org/eficaas.
И nufw: 6. Архивы программного обеспечения – http://packages.debian.
org/unstable/source/nufw; http://rpm.pbone.net.
#/usr/sbin/nufw –D –vvvv –d 127.0.0.1 –p 4129 7. Сайт проекта Netfilter – ftp://ftp.netfilter.org/pub/patch-o-matic.
8. Ачилов Р. Настройка Squid для использования авторизации
В комплект дистрибутива входят консольный клиент, из домена Windows 2000. – Журнал «Системный админист-
работающий под управлением Linux, FreeBSD и Mac OS X. ратор», №10, 2004 г. – 30-35 с.
Параметр -S, необходимый для SSL-соединения, при тести- 9. Демонстрационная версия Nuface – https://nuface.inl.fr.
ровании можно пока не применять. Если в качестве адреса 10. Демонстрационная версия nulog – http://www.inl.fr/download/
назначения использовать localhost, в соединении будет от- ulog-demo.

50
безопасность

Zserver Suite: защищаем корпоративные


хранилища данных
Наиболее распространенный способ хищения
конфиденциальной информации – кража носителей
и архивных копий и доступ посторонних лиц
к серверу. Как обеспечить защиту данных, хранимых
и обрабатываемых на корпоративных серверах?

Алексей Шелестов

У
течка даже части конфиденци- гает возможность физического доступа посредством шифрования. Мы рас-
альной информации может нанес- к носителям информации. Это означает, скажем вам о возможностях комп-
ти непоправимый вред компании, что традиционные средства разграниче- лекса Zserver Suite компании SecurIT
начиная от потери большей части кли- ния доступа, которыми могут быть ос- (http://www.securit.ru). В состав комп-
ентов до остановки бизнеса. Мы зачас- нащены информационные системы, не лекса входят программные продукты
тую отдаем сервер или жесткий диск решают проблемы, поскольку физичес- Zserver и Zbackup, которые помогут
на ремонт или замену, выбрасываем кий доступ к носителям означает обход минимизировать риски утечки кон-
старые архивные ленты, в лучшем слу- всех таких средств защиты. Действи- фиденциальных сведений.
чае тщательно стараясь удалить не- тельно, как может помочь корпоратив- Zserver позволит вам эффективно:
когда хранимую на нем конфиденци- ный firewall в случае, если злоумышлен-  защищать разделы жестких дисков
альную информацию низкоуровневым ник каким-либо образом получил в свое от несанкционированного доступа;
форматированием, либо специализи- распоряжение жесткий диск с сервера  оперативно блокировать и уничто-
рованными утилитами, что не всегда или архивную магнитную ленту? жать информацию с любого ПЭВМ,
бывает успешно. Не стоит и недооценивать вероят- имеющего соединение с сервером,
Некогда популярные уничтожите- ность наступления такого случая. Толь- радиоустройства, либо телефона;
ли конфиденциальной информации ко за 2005 – начало 2006 года произош-  скрывать сам факт наличия конфи-
на жестких дисках посредством элек- ло несколько десятков крупных инци- денциальной информации на сер-
тромагнитного импульса уходят в про- дентов, связанных с пропажей носите- вере;
шлое, поскольку ценность хранимой лей конфиденциальной информации  безопасно транспортировать ин-
информации стремительно растет, с участием таких всемирно известных формацию на любых носителях;
разница между актуальными данны- компаний как Citigroup, Ernst & Young,  контролировать и разграничивать
ми и архивной копией зачастую кри- Bank of America и т. д. доступ к защищаемой информации.
тична для бизнеса. Для того чтобы защитить инфор-
Кроме этого, в последнее время все мацию на носителе, к которому возмо- Общее описание
большую популярность завоевывает жен физический доступ посторонних программно-аппаратного
аутсорсинг различных информацион- лиц, необходимо использовать крип- комплекса
ных служб, и нередко возникает ситуа- тографические средства. Только ког- Программно-аппаратный комплекс
ция, когда сервер с конфиденциальной да информация на носителе зашиф- Zserver – средство защиты конфиден-
информацией размещается в сторон- рована, а ключ шифрования хранит- циальной информации от несанкциони-
нем дата-центре, а архивные ленты хра- ся в недоступном месте, можно не бес- рованного доступа посредством шиф-
нятся в депозитарии за пределами кон- покоиться, если сам носитель окажет- рования разделов диска «на лету».
тролируемой территории предприятия. ся в руках злоумышленника. Сегодня Предназначен для защиты инфор-
В этих случаях количество посто- речь пойдет об одном из эффектив- мации, хранимой как на корпоратив-
ронних людей, которые могут полу- ных способов защиты конфиденциаль- ных серверах, так и на рабочих стан-
чить доступ к информации, сущест- ной информации, хранящейся на дис- циях под управлением следующих опе-
венно возрастает, и, что гораздо ху- ках и лентах, с применением криптог- рационных систем:
же, владелец этой информации теря- рафических средств.  MS Windows NT/2000/XP/2003
ет возможность контролировать про- На рынке программного обеспече-  Novell NetWare
цесс доступа к информации. ния существует несколько програм-  Linux
Рассмотренные угрозы имеют од- мно-аппаратных комплексов для за-
ну общую черту – они характеризуются щиты конфиденциальной информа- Zserver работает с простыми и ди-
тем, что модель нарушителя предпола- ции на рабочих станциях и серверах намическими дисками (составными,

52
безопасность
зеркальными, Raid-массивами). Имеется возможность
установки Zserver на кластер из серверов на основе MS
Cluster Service.
Требования к Zserver определяются требованиями опера-
ционной системы. Zserver неприхотлив в ресурсах. Основные
ресурсы требуются на реализацию криптографических про-
цессов симметричными алгоритмами шифрования. Шифро-
вание и дешифрование данных осуществляется «на лету»
при соответствующих операциях записи и чтения. Комплект
Zserver состоит из дистрибутива программного обеспечения,
устройства для работы со смарт-картами ACR ACS-30U (USB),
лицензионного ключа защиты (LPT или USB), двух микро-
процессорных смарт-карт для хранения ключей, устройства
«красной кнопки», подключаемой к COM-порту.
Структура программной части Zserver состоит из трех
модулей:
 сервер защиты данных (ядро системы) Консоль администратора Zserver
 консоль управления сервером
 модуль подачи сигнала тревоги осуществляется на основе Diffie-Hellman EKE, данные шиф-
руются 128-битным ключом по алгоритму RC5.
Установка Zserver проста и не требует дополнительных
навыков. Весь процесс инсталляции занимает не более Алгоритмы шифрования
10 минут с одной перезагрузкой. Генерация ключа шифрования осуществляется при непос-
редственном участии пользователя, с применением слу-
Сервер защиты данных чайных чисел. В качестве генератора случайных чисел ис-
Сервер защиты данных (ядро системы) устанавливает- пользуются движения мыши.
ся непосредственно на сервер с защищаемой информа- В Zserver предусмотрено формирование ключа шифро-
цией. Запускается с помощью службы «SecurIT Zkernel» вания с помощью двух симметричных алгоритмов:
от пользователя System в автоматическом режиме при  RC5 – 128-битным ключом
подсоединенном лицензионном ключе защиты. Служба  AES – 256-битным ключом
не имеет зависимостей, что делает её устойчивой к сбо-
ям в операционной системе. В отсутствии ключа защи- Возможна также поддержка российского симметрич-
ты данную службу запустить невозможно. Если при уже ного алгоритма ГОСТ 28147-89 с 256-битным ключом, схо-
запущенной службе отключить физически ключ защиты жим с алгоритмом DES, но работающим гораздо быст-
Zserver, то через некоторое время на этом сервере про- рее. На момент подготовки материалов статьи была воз-
исходит «тревога». можность взлома ключа симметричных алгоритмов дли-
ной до 64 бит. Ключ RC5 длинной в 64 бит был взломан
Консоль управления за 1 757 дней с привлечением 58 747 597 657 компьютеров
Всё управление системой Zserver ведется с единой для всех пользователей. Для этого потребовалось перебрать око-
продуктов компании SecurIT консоли управления. Она мо- ло 15 769 938 165 961 326 592 ключей. При скорости пе-
жет устанавливаться как на сервер, так и на любую рабо- ребора 100 000 000 ключей в секунду потребуется около
чую станцию, имеющую соединение с сервером по прото- 117 375 055 576 687907 000 дней для подбора ключа шиф-
колу TCP/IP. В случае использования консоли управления рования длинной в 128 бит.
на сервере, соединение осуществляется по внутренней Использование предлагаемых алгоритмов длиной клю-
петле на TCP-порт. По умолчанию используется 1245 порт. ча шифрования в 128 и 256 бит сделает неактуальной похи-
Для минимизации риска номер TCP-порта можно изменить щенную у вас информацию, так как на подбор ключа для до-
с помощью настроек Zserver. ступа к данным потребуется значительное время и вычис-
Для разграничения полномочий и доступа к консоли ис- лительные ресурсы, а сама кража станет абсолютно бес-
пользуется встроенная авторизация средствами Zserver, смысленной идеей.
что позволяет разграничить администраторов сервера и ад- Хранение ключей шифрования возможно на смарт-
министраторов безопасности. карте, либо в файле с расширением *.key. При хранении
С версии 3.0 Zserver возможно управление настройка- ключа шифрования в файле – защиты не предусмотре-
ми нескольких серверов одновременно с одной консоли уп- но. С целью обеспечения надежной защиты ваших кон-
равления. Консоль управления Zserver позволяет управлять фиденциальных данных ключ необходимо хранить толь-
пользователями, ключами, носителями и общими ресурса- ко на смарт-карте.
ми. Соединение консоли управления с сервером защиты
данных осуществляется по зашифрованному каналу пос- Кворум ключей
редством автоматически создаваемого одноразового сес- Для того чтобы один человек не мог совершить каких-либо
сионного ключа. Процедура выработки сессионного ключа операций, критичных для бизнеса или целостности самих

№3, март 2006 53


безопасность
данных, ключ шифрования можно поделить на несколько следует держать в секрете, никому не сообщать, и исполь-
равных частей, делегировав право подключения зашиф- зовать только в системе Zserver. В комплект поставки вхо-
рованного раздела нескольким администраторам безопас- дит PC/CS-совместимое устройство чтения-записи смарт-
ности. Разделяя ключ шифрования, вы тем самым органи- карт, подключаемое через USB-интерфейс.
зуете «кворум ключей». Кворум ключей – это общее чис-
ло частей, необходимое для формирования полного ключа Зашифровывание разделов
шифрования. Число кворумов в системе Zserver может быть В Zserver возможно зашифровывание как уже имеющего-
равным 2 или 3. Число ключей в кворуме – почти не огра- ся раздела (логического диска) с данными, так и нового.
ничено (9,(9)*10 27). Таким образом, если вы выбрали число Зашифровывание существующего раздела займет более
ключей – 6, а количество кворумов – 2, то любые 2 ключа длительное время, но в ходе процесса пользователи смогут
из 6 сформируют полноценный ключ шифрования. При этом по-прежнему работать с данными. Время зашифровывания
порядок загрузки ключей не играет роли. Если имеется не- раздела зависит только от объема всего раздела и не за-
сколько ключей на одной смарт-карте, то при загрузке сис- висит от наличия информации на нем.. Так как доступ к за-
тема спросит – какой ключ следует загрузить. Загрузка шифрованному разделу осуществляется только с помо-
ключа шифрования может осуществляться с устройства щью ядра Zserver, которое запускается как сервис (служ-
для чтения со смарт-карт, подключенного непосредствен- ба), не могут быть зашифрованы разделы на более низком
но к серверу, либо к рабочей станции. Эта функция облег- уровне, содержащие файлы операционной системы (вклю-
чает процесс подключения зашифрованного раздела, ра- чая файлы подкачки и реплики Active Directory), а также за-
боту со смарт-картами, а также позволяет её оперативно грузочный раздел. При зашифровывании происходит «по-
уничтожить в случае возникновения критической ситуации. секторное» криптографическое преобразование по ключу
При поломке (повреждении чипа) смарт-карты с единствен- шифрования, включая всю информацию о содержании дан-
ной копией ключа шифрования, либо его частью – инфор- ных в самом разделе. В отключенном состоянии в опера-
мация будет утеряна навсегда. Чтобы не потерять всю ин- ционной системе зашифрованный раздел виден как нераз-
формацию бесследно, необходимо создавать дубликаты меченная (не отформатированная) пустая область. В под-
ключей либо увеличивать число ключей в кворуме. ключенном – зашифрованный раздел представлен как ло-
После загрузки ключи хранятся в оперативной памяти. гический диск. Естественно, при копировании данных с за-
В целях защиты ключа Zserver не позволит выгрузить его шифрованного диска на незашифрованный данные оказы-
из оперативной памяти сервера, даже если кто-то облада- ваются незащищенными.
ет всеми правами в системе. Для выполнения такой опе- В случае компрометации ключа можно перешифровать
рации необходима только ваша смарт-карта и PIN для до- раздел другим ключом. Возможно также расшифровыва-
ступа к ней. ние всего раздела.

Система защиты смарт-карт Работа с общими ресурсами


Микропроцессорная смарт-карта ACOS1 объемом 8 Кб Zserver позволяет предоставлять в общий доступ ресурсы,
стандарта ISO 7816 может содержать до 16 ключей. Запись находящиеся на зашифрованном разделе, посредством
ключей в смарт-карту осуществляется в ячейки фиксиро- «модуля управления ресурсами».
ванной длины. Доступ к ключу через консоль Zserver воз- Средствами операционной системы это невозможно.
можен только после ввода PIN-кода фиксированной дли- Авторизация пользователей производится встроенными
ны в 8 символов. В случае четырехкратного неправильно- средствами. Добавить учетную запись и наделить его пра-
го ввода PIN-кода смарт-карта блокируется, что означает вами может только администратор Zserver, а для предостав-
невозможность дальнейшего использования самой кар- ления в общий доступ необходима учетная запись с пра-
ты и ключей шифрования. Полезным является режим вво- вами администратора самого сервера. Естественно, весь
да PIN-кода «под принуждением», представляющего со- трафик между сервером и клиентом (пользователем) пе-
бой ввод обратной последовательности PIN. При исполь- редается в незашифрованном виде.
зовании такого режима все ключи шифрования удаляют-
ся со смарт-карты, и выводится соответствующая ошибка. Модуль подачи сигнала тревоги
Вы можете использовать этот режим, если кто-то, угрожая Модуль подачи сигнала тревоги служит для мгновенной бло-
вам, требует ввести PIN. Ключ шифрования в любой мо- кировки доступа всех лиц посредством отключения зашиф-
мент можно скопировать на другую смарт-карту, либо файл, рованных дисков и удаления из оперативной памяти клю-
или удалить. При удалении ключа со смарт-карты последу- чей шифрования. Имеется также возможность активации
ющее его восстановление невозможно. функции перезагрузки сервера при получении сигнала тре-
В связи с тем, что функционал ввода PIN-кода под при- воги. При отключении дисков вся несохраненная информа-
нуждением реализован программно системой Zserver, ция будет утеряна. Подача сигнала тревоги может быть ини-
а не аппаратно смарт-картой, следует учесть, что в случае циирована с любой рабочей станции авторизованным поль-
использования стороннего программно-аппаратного обес- зователем по протоколу TCP/IP, либо с помощью аппарат-
печения для работы со смарт-картами ACOS число попыток ной кнопки, подключенной к компьютеру в сети, либо к сер-
ввода PIN-кода увеличивается до 8. Более того, зная PIN-код веру. «Красная кнопка» может быть двух видов: програм-
под принуждением, злоумышленник может получить доступ мная (с помощью установленного программного обеспече-
к памяти смарт-карты. Поэтому PIN-код под принуждением ния) и аппаратного (с помощью устройства на COM-порту).

54
безопасность
Программная кнопка инициируется щелчком курсора мы- сценарии при возникновении событий на сервере при воз-
ши в трее панели задач на любой рабочей станции, имею- никновении тревоги, открытия-закрытия диска и т. п. К при-
щей подключение к серверу по TCP-порту 1245 (по умол- меру, сервер при поступлении сигнала тревоги сначала дол-
чанию). Сигнал тревоги можно также послать серверу пу- жен оповестить пользователей по сети, выслать админис-
тем запуска приложения ssagent.exe с указанием аргумен- тратору безопасности письмо по электронной почте, а уже
та «-a». Для исключения случайных ложных тревог при ис- затем корректно отключить базу данных, пользователей
пользовании программной кнопки на клиентском рабочем и перезагрузить сервер. В документации к Zserver имеют-
месте настраиваются аутентификация и право использо- ся несколько уже готовых типовых сценариев.
вания этой функции. Так как данные для аутентификации
хранятся в реестре операционной системы, следует завес- Zbackup как средство защиты
ти одну либо несколько учетных записей в системе Zserver, архивных копий
делегировав им только право на подачу сигнала тревоги. Любая система, от которой зависит стабильность техноло-
Аппаратная кнопка – с помощью устройства на COM-пор- гических процессов компании, подвергается архивирова-
ту сервера, либо на COM-порту рабочей станции с установ- нию. Бессмысленно хранить в зашифрованном виде кри-
ленной «программной кнопкой» (имеющей подключение тичную для бизнеса информацию, защищать сервер меж-
по TCP-протоколу к серверу). Принцип действия «красной сетевыми экранами, хранить журналы доступа, когда ко-
кнопки» прост. Аппаратно (через COM-порт), либо програм- пию своей системы вместе с данными можно украсть с ар-
мно (с помощью установленного клиентского программно- хивной копией. Zbackup решает эту проблему, помещая
го обеспечения) модуль подачи сигнала тревоги аутенти- в архив уже зашифрованные данные. Даже при хищении
фицируется на сервере защиты данных и передает сигнал резервной копии доступ без ключа, которым данные на ар-
тревоги. Далее происходит выполнение запрограммирован- хивной копии были зашифрованы, либо длительного под-
ных действий. Возможна активация, к примеру, через SMS- бора этого ключа, будет невозможен.
сообщение, либо звонка на определенный номер с вводом Zbackup может работать как отдельный продукт,
определенного добавочного кода в тональном режиме. Ин- так и в составе Zserver. При использовании в составе
терфейс продукта и имеющийся SDK-комплект разработчи- Zserver, возможно использование одних и тех же ключей
ка позволит заказчику самостоятельно определить спосо- шифрования. Zbackup работает как с оптическими носите-
бы активации. Количество программных «красных кнопок» лями (CD/DVD-(RW)), так и со стримерными лентами. Систе-
неограниченное. При наличии нескольких кнопок срабаты- ма Zbackup совместима с часто используемыми системами
вание будет только от той, которая первой пошлет сигнал архивации данных, такими как BrighStor ARCserve Backup,
тревоги. При этом нажатие остальных не будет чревато для Veritas Backup Exec и другими. Настройка Zbackup проста
системы. В случае подачи сигнала тревоги обратное под- и производится с единой консоли Zserver. Данные на архи-
ключение зашифрованных разделов не может быть произ- вном носителе хранятся в зашифрованном виде. Доступ
ведено, пока сервер не будет перезагружен. Для подключе- к ним возможен только с использованием ключа шифрова-
ния зашифрованного раздела после перезагрузки необхо- ния. Zbackup может использовать ключ шифрования, кото-
димо загрузить полный ключ, либо сформировать, загру- рым зашифрованы разделы в Zserver, либо другой, но сфор-
зив его части с источников при наличии кворума. мированный по алгоритмам, используемым в Zserver.

Протоколирование событий Выводы


Для анализа произведенных действий в системе Zserver Применив на практике вышеописанную связку продуктов
имеется функция журналирования. Фильтр событий, регис- компании SecurIT, вы получаете комплексное взаимосвя-
трируемых в журнале, настраивается из консоли управле- занное решение для защиты конфиденциальных сведе-
ния и может содержать операции с зашифрованным дис- ний на серверах, аналогов которому не существует. Про-
ком, ключами, пользователями и сеансами. Журнал с прото- стота интерфейса и наличие подробной документации
колом событий может вестись как в текстовый файл на ло- на русском языке позволяют внедрить проект в кратчай-
кальных дисках сервера, так и в EventLog операционной шие сроки. Соответствие законодательству РФ и возмож-
системы. По умолчанию протоколирование отключено. ность поддержки российских криптографических алгорит-
мов позволит применить продукты компании SecurIT в раз-
Использование сценариев личных сферах деятельности, в том числе в государствен-
Для осуществления дополнительных функций, таких как ных и финансовых структурах. После внедрения в корпо-
сокрытие диска, удаление файлов, подмена логического ративной системе один человек не сможет производить
диска и т. п., в составе Zserver имеется Script Pack. Zserver какие-либо монопольные действия, архивные копии даже
Script Pack использует модуль Windows Script Components, в случае кражи будут непригодны к использованию, так как
который обеспечивает создание COM-компонентов с по- кворум ключей будет разделен между ответственными ад-
мощью языков создания сценариев, таких как VBScript, министраторами безопасности. Принцип разделения прав
а также языков, совместимых со спецификацией ECMA 262 по ISO 13569 (Dual Control) мы получаем на практике в ком-
(JScript, JavaScript и других). Данная функция позволяет за- плексном решении. Следствием применения такого реше-
казчику более тесно интегрировать Zserver с остальными ния будет неизбежное снижение рисков ваших серверов
компонентами операционной системы и серверными при- и спокойный сон администратора безопасности.
ложениями, определить дополнительные пользовательские На правах рекламы

№3, март 2006 55


документация

Документация – экономия времени


или его бесполезная трата?

Алексей Коршунов
Искусство составления и использования документации – неотъемлемая часть работы
хорошего IT-специалиста. Грамотно составленный документ способен помочь избежать
огромной потери времени и лишних трудозатрат. До сих пор многие предпочитали
игнорировать эту часть работы, но всё когда-то меняется.

К
аждый сотрудник периодичес- нает казаться, будто они никогда не за- нейшим шагом к экономии рабоче-
ки испытывает на себе инте- кончатся. го времени.
рес руководства с целью выяс- Искусство организации рабочего
нения, чем занимается он в рабочее времени всё ещё в диковинку для мно- Документация
время. Разумеется, начальству хочет- гих сотрудников, и не обязательно Я хочу сразу оговориться, что данная
ся слышать, что время тратится на бла- только IT-отделов. Обычно считается, статья не преследует собой цель рас-
го компании. Особенно это актуально что эта задача решается руководите- крыть все вопросы создания и веде-
для системных администраторов ком- лями, но это не так. Никто не мешает ния технической документации, кото-
паний, руководители которых придер- обычному системному администрато- рая может потребоваться системному
живаются позиции, будто сотрудни- ру, отдел которого насчитывает всего администратору. Здесь я лишь попыта-
ки IT-отделов большую часть време- одну персону, научиться тратить вре- юсь очертить круг тех документов, ко-
ни «отдыхают». Зачастую именно из- мя с умом. Организация рабочего вре- торые так или иначе приходится писать
за такого расхожего мнения, систем- мени сисадмина отличается от ситуа- любому работнику IT-отдела, если в его
ным администраторам едва ли не в ре- ции с менеджерами ввиду различий задачи входит документирование.
жиме реального времени ставят зада- в их сферах деятельности. Организа- Покупая какой-либо программный
чи одну за другой. Однако оставаться ция рабочего времени сисадмина от- или технический продукт, пользователь
на работе допоздна или засиживать- личается от ситуации с менеджерами рассчитывает получить вместе с ним
ся в выходные – это не единственный в виду различий в их сферах деятель- пакет документации, который расска-
способ уберечься от загромождения ности. Умение составлять и исполь- жет, как именно использовать новооб-
задачами до такой степени, что начи- зовать документацию является важ- ретённое средство. Разумеется, я не

56
документация
хочу сказать, что в современном ми-
ре, если вы, допустим, покупаете сер- Уважаемые читатели! Наш журнал с удо- рим о различных схемах работы с доку-
верную операционную систему, то со- вольствием представляет вашему вни- ментами. Статья, открывающая рубрику,
вершенно обязательно получите вмес- манию новую рубрику «Документация». является вводной и намеренно охватыва-
те с дистрибутивом ещё и целую кни- Мы решили начать с того, что на наш ет весь вопрос в целом.
гу «в нагрузку». Конечно, нет. Книго- взгляд является наиболее важным, а имен- В дальнейшем, каждый из наиболее
печатные издания не даром едят свой но с умения и понимания необходимос- интересных моментов будет рассматри-
хлеб, выпуская массу замечательных ти составления технической документа- ваться более подробно. Если вы хоти-
материалов, помогающих новичкам ции. Многие IT-специалисты не любят за- те увидеть на страницах журнала ответ
и профессионалам учиться исполь- ниматься «писаниной», но мы всё же поп- на какой-то из вопросов по технической
зовать разработки различных компа- робуем показать, чем это может быть по- документации или имеете желание на-
ний. В данном случае я скорее говорю лезно. Расскажем о наиболее эффектив- писать статью по этой теме – присылай-
о встроенных help-справках, которые ных способах составления документации те ваши вопросы и предложения на адрес
могут внести минимально необходи- и поддержания ее актуальности. Погово- akeeper@samag.ru.
мую ясность в процесс эксплуатации,
а также о вложенных в «пакет» вместе средних размеров и у неё нет десятков ков (если таковой имеется, а если
с дисками документах. Это если затра- серверов и крайне разветвлённой инф- нет, то, может быть, и разработать
гивать программные продукты. раструктуры. А если есть? И более то- его, но об этом позже);
Случаи с покупками «железа» го, не описана ни в каких документах?  узнать принятую внутри компании
по сути мало чем от этого отличаются, Это может стать настоящим кошмаром структуру взаимодействия работ-
но набор документации, как правило, для вступающего в свои обязаннос- ника IT-отдела с пользователями,
всё-таки более широк. Причем не так ти нового сотрудника. Ведь предсто- поставщиками;
уж важно, купили вы видеомагнитофон, ит не просто понять, что происходит  узнать схему закупки нового обо-
музыкальный центр или сервер компа- на серверах компании и что на них ра- рудования, схему его заказа;
нии SUN – минимально необходимый ботает. Предстоит сделать значитель-  иметь представление об оргтехни-
набор документов вы получите. Причем но больше. ке, находящейся в ведении компа-
можно смело сказать, что чем богаче А именно: нии;
набор полученной документации, тем  вникнуть в структуру локальной се-  прочие пункты (коих может быть ве-
более добросовестно относится произ- ти; ликое множество).
водитель к своей работе. Думаю, каж-  понять структуру телефонной сети
дый сталкивался с ситуациями на ра- (да-да, я знаю, что большая часть Это лишь основная часть того,
боте, когда вы получаете заказанное системных администраторов пред- во что предстоит вникнуть новому со-
оборудование без сколько бы то ни бы- почитает не заниматься телефони- труднику. И в ситуациях, когда ввес-
ло серьёзного пакета документов. Если ей. Однако, как показывает практи- ти его в курс дел максимально под-
это сервер или рабочие станции, зака- ка, по сию пору многим сотрудни- робно некому, это может стать насто-
занные в выбранной вами же конфигу- кам IT-отделов приходится не толь- ящей головной болью. Даже в случа-
рации, это ещё не так критично. А ес- ко знать устройство всего этого ях увеличения штата IT-отдела на пол-
ли это, например, мини-АТС, то ситуа- «хозяйства», но и принимать непос- ное ознакомление могут уйти дни и не-
ция становится прямо-таки мало при- редственное участие в её доработ- дели. Между тем пользователи рабо-
ятной. В большинстве случаев после ке или даже разработке); тают, сервера требуют необходимого
некоторого диалога с продавцом всё  минимально необходимо знать воз- им ухода, а в планах может находить-
же удаётся добиться от него какой-ли- можности существующей электро- ся немало проектов, также нуждаю-
бо сопроводительной документации. сети; щихся в непосредственном внимании
А если нет, то, возможно, придётся об-  составить полное представление и участии сотрудника.
ратиться напрямую к производителю о серверном парке компании; Выглядит довольно грустно. И глав-
или наиболее крупному дилеру.  разобраться в программном обес- ная причина этого – отсутствие техни-
Сопроводительная документация п е ч е н и и , ф у н к ц и о н и р у ю щ е м ческой документации, куда своевре-
важна для всех, начиная от директо- на серверах компании, о схемах менно были бы занесены все аспек-
ра компании и бухгалтерии, закан- решений тех или иных вопросов, ты работы сетевой инфраструктуры
чивая теми, кому предстоит исполь- системах резервного копирования предприятия. Можно долго размышлять
зовать оборудование (или програм- и обо всём остальном, что смело на тему, почему каждый раз, приходя на
мные средства). Она нужна для общего можно отнести к огромному фрон- новое место работы, системный адми-
представления того, что вы приобрели, ту работ с новыми (для данного со- нистратор сталкивается с вышеобозна-
а также для банального учёта имеюще- трудника) серверами; ченными трудностями. Это может быть
гося в распоряжении предприятия.  составить не менее полное пред- инертность и халатность предыдущих
С этим вроде бы всё более или ставление о рабочих станциях; сотрудников («Я знаю, как это работа-
менее понятно. Но как же быть с тем,  знать полный набор программно- ет, а после меня хоть потоп».), а может
что уже имеет компания на момент ва- го обеспечения, принятого стан- быть и банальное незнание руководи-
шего прихода? Хорошо, если компания дартами компании для сотрудни- телей о необходимости ведения доку-

№3, март 2006 57


документация
ментации отделом IT. А что не требует- ми программного обеспечения. Тем бо- в будущем, так как разом решает це-
ся, то не делается. Это правило край- лее что многим ГОСТам уже «сто лет лую кучу проблем. Не говоря уже об ис-
не распространено у системных адми- в обед» и на половину документов, ко- чезновении проблем с нерабочими се-
нистраторов, и не только касательно до- торые вы, возможно, захотите создать, тевыми розетками, обрывами прово-
кументации. Думаю, каждый хоть раз стандарта просто не существует. дов и так далее. С этим тоже каждому
слышал о человеке, не озаботившем- Соблюдение всех норм и правил системному администратору приходит-
ся разработкой и введением в эксплу- необходимо в тех случаях, когда па- ся сталкиваться и не раз за время сво-
атацию системы резервного копирова- кет технической документации гото- ей профильной деятельности.
ния всех жизненно важных для работы вится для внешнего пользователя. На- Если же эти условия не выполня-
компании файлов. Точно так же каж- пример, если вы планируете продать ются и вы являетесь «хозяином» не-
дый знает, к чему это приводит. Поверь- (как вариант, перепродать) сетевую известной структуры сети, то, навер-
те, отсутствие документации рано или инфраструктуру вашей компании при ное, уже потратили уйму времени на то,
поздно может привести к не менее пе- смене офиса. Здесь вам на помощь чтобы в ней разобраться и понять, «по-
чальному результату. как раз придут ЕСКД (Единая струк- чему этот провод торчит из стены и ку-
тура конструкторской документации) да он ведёт». Надеюсь и с патч-панеля-
Что такое техническая и ЕСПД (Единая система програм- ми у вас полный порядок. Теперь самое
документация мной документации), а также прочие время выделить себе один-два рабочих
Итак, мы уже поговорили о том, для че- стандарты, принятые в таких случаях. дня на то, чтобы всё это задокументиро-
го нужна техническая документация. Но это отдельный длинный разговор, вать. Надеюсь, не надо объяснять, что
Теперь давайте поймём, что же это та- и пока что мы об этом умолчим. это в первую очередь нужно вам самим?
кое. Если за ответом на этот вопрос об- Не слишком приятно будет вспоминать
ратиться к ныне столь популярной ви- Когда начинать вести ваши «поползновения» с неизвестными
кипедии (wikipedia – ru.wikipedia.org.), документацию проводами, когда (или если) такая необ-
то мы получим следующий вполне кон- Резонный вопрос, возникающий пос- ходимость возникнет в будущем.
кретный ответ: «Техническая докумен- ле всего, что мы узнали выше, – когда Это и является ответом на вопрос
тация – набор документов, используе- же надо начинать вести документацию «Когда начинать создавать документа-
мых при проектировании (конструиро- на подотчётное «хозяйство». Правиль- цию?». Если у вас её ещё нет – начни-
вании), создании (изготовлении) и ис- ным ответом было бы – сразу. То есть те прямо сегодня. Ведь это только на-
пользовании (эксплуатации) каких-ли- ровно с того момента, как начала за- чало вашей работы по написанию пол-
бо технических объектов: зданий, со- кладываться инфраструктура будущей ноценного пакета документов на всё,
оружений, промышленных товаров, компании. Пока ещё нет десятков мет- с чем вы работаете. Как известно, Ро-
программного и аппаратного обеспе- ров непонятных сетевых, телефонных дина начинается с картинки в букваре,
чения.» Другими словами, к техничес- и прочих кабелей. Пока нет неразбери- а техническая документация систем-
кой документации относится довольно хи. Тем более что правильное планиро- ного администратора со схемы струк-
обширный круг документов. вание будущей сети компании с необ- туры сети.
Разумеется, не всё из перечис- ходимыми планами, схемами и описа-
ленного в определении нас интересу- ниями – это уже огромный задел для Типы технической
ет. Наибольшее внимание стоит уде- весьма увесистого и крайне подробно- документации
лить пункту «программное и аппарат- го пакета технических документов. Как уже было сказано выше, наиболь-
ное обеспечение». То есть собственно Однако, как показывает практика, ший первоначальный интерес для сис-
то, с чем работает каждый системный те или иные причины всегда препятс- темного администратора в техничес-
администратор. твуют правильному ведению дел с са- кой документации представляет схе-
Для создания и ведения техничес- мого начала. Самое простое, что мо- ма сети, но этим интерес не ограни-
кой документации «по правилам» су- жет прийти на ум, – компания въезжает чивается.
ществует целый набор принятых на го- в новый офис с уже существующей се- Краткий перечень документов, ко-
сударственном уровне стандартов тью, на которую попросту нет докумен- торый стоит начать создавать сразу же
(ГОСТ). Не всегда чёткое следование тов и схемы. К счастью, в последние па- после (или во время) описания сети:
этим стандартам добавляет информа- ру лет наблюдается картина значитель-  описание схемы доступа в Интер-
тивности к создаваемым документам ных изменений в подходе руководства нет и интранет сети;
и уж тем более не всегда требуется. к инфраструктуре вообще и IT-отделам  описание серверов;
Во всяком случае до тех пор, пока мы в частности. Всё чаще и чаще перед пе-  описание системы резервного ко-
говорим о документации, создаваемой реездом в новый офис в нём делается пирования;
для внутрикорпоративного использова- ремонт, а план необходимых коммуни-  описание схемы антивирусной за-
ния. Ну в самом деле, станете ли вы пи- каций с планированием расположения щиты компании;
сать настолько сложный документ, соб- серверной комнаты и сетевого обору-  описание стандартов используемо-
людающий все необходимые требова- дования закладывается на стадии ещё го пользователями программного
ния стандарта, если вам просто-напрос- только обсуждения возможности пере- обеспечения;
то необходимо создать перечень наибо- езда. Безусловно, это сильно упрощает  прочие пункты, уже упомянутые
лее часто используемого пользователя- работу по составлению документации в введении.

58
документация
Кратко рассмотрим весь этот ко- ние файла с описанием операционной ные стандарты на программное обес-
роткий (по сравнению с полным) спи- системы, работающих сервисов, аппа- печение, используемое пользователя-
сок документов. ратной составляющей, функциональ- ми в повседневной работе.
ной значимостью и прочими «мелоча- Однако, как бы странно это ни зву-
Описание схемы доступа ми» не требует значительных ресурсов. чало, не везде это задокументиро-
в Интернет и интранет сети Ведь вы уже работаете с этими маши- вано.
Уровень развития телекоммуникаци- нами и знаете для чего каждый из них. Как следствие, с тем, чего нет
онных компаний сейчас достиг того, Сбор сведений – дело техники. Вам ос- на бумаге, нельзя ознакомить поль-
что всевозможные конкуренто-способ- танется лишь задокументировать всё зователя и ввести ответственность за
ные предложения просто-таки навод- это и отложить в сторону до следующих соблюдение. Где нет правил, там не мо-
нили рынок. Это даёт компаниям-поль- изменений, после которых надо сразу жет быть их исполнения.
зователям широкий выбор в способе и же обязательно вносить поправки. Это Поэтому оформление корпора-
количестве потребления услуг досту- позволит поддерживать актуальность тивного стандарта в едином докумен-
па в Интернет. Пользуясь этой ситуа- документа и избежать головной боли те и ознакомление с ним пользова-
цией, многие руководители, серьёзно в дальнейшем. теля во избежание эксцессов в буду-
относящиеся к бесперебойному досту- щем – это хорошая практика. Разу-
пу в Интернет и понимающие его важ- Описание схемы резервного меется, это не означает сто процент-
ность, уже давно приняли (или имеют копирования ной гарантии, что на компьютере то-
это в планах на ближайшее будущее) Строго говоря, описав правильную го или иного пользователя не появит-
решение о резервном канале от одного схему резервного копирования и до- ся «почтовый клиент некорпоративно-
из присутствующих в районе провай- бавив к ней обоснование, почему это го стандарта».
деров. Чем полезна схема с двумя про- важно, можно смело идти к руководс- Уровень компьютерной грамотнос-
вайдерами уже обсуждалось не раз. тву и объяснить необходимость выде- ти пользователей растёт, а установ-
Если у вас уже есть два канала для лить бюджетные средства на новую ка новой программы не является про-
доступа в Интернет, то от вас требует- технику. Но для нас это важно по дру- блемой даже для неопытного пользо-
ся всего лишь документирование этой гой причине, которая всем известна: вателя.
схемы. А если нет, то чем не повод её сеть без резервного копирования – Разумеется, такие задачи чаще
изобразить и пойти с ней к руководству. это бомба замедленного действия, ко- всего решаются на уровне операцион-
Чем это полезно? Да хотя бы тем, что торая рано или поздно рванет так, что ной системы, но, как показывает прак-
вы сами в процессе составления доку- никто не уйдёт без «подарков». Наде- тика, административные меры самые
мента создаёте у себя в голове чёткое юсь, вы не из тех любителей испыты- действенные. (Особенно если за на-
представление о том, как это делается, вать удачу, которые откладывают ре- рушение корпоративного стандарта
и сможете применить этот навык в лю- шение такой важной задачи. штрафуют.)
бое время. Полезно? Ещё бы.
Кроме того, не лишним будет опи- Описание схемы антивирусной Заключение
сать схему доступа в Интернет и для защиты компании Разумеется, перечислены далеко
пользователей компании. Трафик, ко- Чем важна система защиты от виру- не все документы, которые стоило бы
нечно, дешевеет изрядно, но практи- сов, знает каждый системный адми- начать вести каждому системному ад-
ка ограничения используемого досту- нистратор. А те, кто уже хотя бы раз бо- министратору, который серьёзно и ос-
па применяется всё чаще. Причем если ролись с эпидемиями, возникающими новательно подходит к своей работе.
раньше большая часть системных ад- даже в казалось бы защищённой сети, Мне известно, что многие люди, рабо-
министраторов (или руководства) ис- уже давно составили схему целостной тающие по этой специальности, мяг-
пользовали схему ограничения по ре- защиты и привели антивирусную защи- ко говоря, недолюбливают написание
сурсам, то сейчас наиболее популяр- ту на всех рабочих станциях и серверах технической документации. Однако
ным становится ограничение по объ- к «общему знаменателю». Довольно даже они рано или поздно начинают
ёму скачиваемого контента. Если вы странно звучит, но тем не менее факт – жаловаться на то, что «такой-раста-
всё ещё ограничиваете пользователей в сетях, где антивирусы установлены, кой предшественник не оставил пос-
по списку запрещённых к посещению но общей схемы защиты нет, рано или ле себя ничего».
ресурсов, это хороший повод перейти поздно обязательно возникнет вирус- Может быть, стоит с себя начать
на ограничение по трафику. ная эпидемия. Во всём должен быть по- и ввести практику ведения докумен-
рядок и максимально прозрачное пред- тации, если таковая ещё не была при-
Описание серверов ставление реализации. Это касается нята в вашей компании.
Разбираться каждый раз (или вспоми- и защиты от вирусов. Написание документации полезно
нать, если у вас их множество), что на- во всех смыслах. Начиная от образо-
ходится на том или ином сервере, – Описание стандартов вательных, заканчивая тем, что после
это занятие не из приятных. Особенно используемого сотрудниками проделывания всей той работы, кото-
если именно этот сервер уже полтора программного обеспечения рая кратко была перечислена выше,
года работает в штатном режиме и вни- В большинстве средних и крупных можно смело идти... за премией.
мания не требует. В то же время созда- компаний уже приняты корпоратив- А почему нет?

№3, март 2006 59


сети

Интернет «от Москвы до самых


до окраин»

Роман Ерин
Недорогой Интернет в любую точку страны? Это возможно! Использование спутниковой связи
позволит вам подключиться к сети даже там, где нет ни коммуникаций, ни людей на многие
километры. Все этапы подключения – от покупки оборудования до настройки.
Как оценить свои Итак, какие выгоды вы получите дороговизны оборудования, трудно-
потребности и выбрать от использования спутникового до- стей получения разрешений и большо-
оборудование ступа в сеть: го объёма необходимой информации.
В февральском номере журнала была  дешёвый трафик (менее 1 рубля Кроме приёмного оборудования
опубликована статья Антона Борисо- за 1 Мб при скорости до 5 Мбит); вам понадобится, конечно же, и сама
ва «Подключаемся к Интернету через  доступность безлимитных тарифов тарелка. Для того чтобы оценить не-
спутник». В ней автор рассказал о так (32 Кбита от 1200 рублей); обходимый размер тарелки, восполь-
называемом «фишинге» – методе при-  возможность доступа при отсутс- зуйтесь картой покрытия спутника.
ёма со спутника данных, не предназна- твии магистральных каналов (мож- Как правило, на ней имеются зоны, по-
ченных для вас. Разумеется такой спо- но использовать в качестве обрат- казывающие либо сразу размеры та-
соб хорош для при приёма тяжёлого ного канала модем или GRPS); релки, либо уровень сигнала на мест-
контента – фильмов и музыки – за чу-  возможность доступа при полном ности (см. рис 1).
жой счёт, но имеет один существенный отсутствии сетевой инфраструк- После того как вы определились
недостаток – вы не можете выбирать, туры (через приёмо-передающий с размером антенны – вам необходимо
что вам принимать. Эта статья более комплекс). выбрать подходящий вид конструкции.
полно познакомит вас с технологией Тарелки бывают двух видов: прямофо-
использования спутникового канала На выбор типа доступа (асиммет- кусные и офсетные (см. рис. 2).
доступа в сеть. ричный или двухсторонний) и обору- Оба типа имеют свои плюсы и мину-
Не секрет, что в нашей стране, дования в первую очередь влияет сум- сы. Если для приёма сигнала вам тре-
за пределами центрального региона – ма денег, которую вы хотите потратить: буется размер тарелки менее 2 мет-
Москвы и Санкт-Петербурга, магист- если вы домашний пользователь, если ров, настойчиво рекомендую выби-
ральные провайдеры устанавливают у вас есть наземный канал и нет боль- рать офсетную антенну – у вас будет
достаточно высокие цены за интернет- ших запросов в плане стабильности – меньше хлопот со снегом – не будет
трафик. Сервис-провайдеры в регио- можно выбрать самый дешевый ва- скапливаться. Кроме того, это единс-
нах, таким образом, вынуждены ещё риант – установить в свой компьютер твенный вариант при установке ан-
увеличивать цену, в результате чего PCI DVB приёмник, такой как Skystar1, тенны на стене или балконе.В против-
она доходит до 2-3, а в некоторых ре- Skystar2 и их аналоги. Если же вы со- ном случае вам следует выбрать пря-
гионах и до 4 рублей за 1 Мб. При этом, бираетесь потреблять много трафика, мофокусный вариант. Как можно ви-
как правило, оплачивается только вхо- если для вас важна стабильность и ми- деть на рисунке, у прямофокусной та-
дящий к абоненту трафик. Всё это со- нимизация цены за трафик – ваш вы- релки часть поверхности зеркала за-
здаёт предпосылки для использования бор аппаратные DVB-маршрутизаторы крывает конвертер, поэтому для ан-
асимметричного доступа в Интернет с поддержкой более мощных алгорит- тенн небольшого диаметра лучше вы-
при помощи спутников, посредством мов сжатия (про алгоритмы подробно бирать офсетную модель. Из антенн,
технологии Digital Video Broadcasting рассказано в разделе «Используемые представленных на российском рынке,
(DVB) – технологии цифрового веща- методы сжатия»). Разница в цене этих можно выделить продукцию ОАО «Ал-
ния. Изначально технология была раз- решений составляет примерно 10-50 мет», выпускающуюся под названием
работана для телевидения, но теперь раз. Симметричный доступ мы в этой «Супрал», как имеющую оптимальное
используется и для работы в сети. статье рассматривать не будем ввиду соотношение цена/качество.

60
сети
Вещание со спутников ведется в двух частотных диапа-
зонах: C (3.4-4.2 GHz) и Ku (10.7-12.75 GHz). В зависимос-
ти от того, в каком диапазоне вы будете принимать сигнал,
вы должны приобрести нужный конвертер. Для того чтобы
определить, какой диапазон вам нужен, надо выбрать спут-
ник и оператора на нём.

Используемые методы сжатия


При передаче информации через спутник используется не-
сколько типов модуляции, позволяющих передавать в поло-
се шириной в 1 МГц эффективный поток скоростью до не-
скольких Мбит.
BPSK, QPSK, OQPSK, 8PSK, 16QAM – эти виды моду-
Рисунок 1. Карта покрытия спутника Express AM1
ляции расположены в порядке возрастания сжатия. Под- с отмеченными зонами уровня сигнала
робное описание алгоритмов их работы выходит за рам-
ки статьи.
Для практического использования достаточно знать:
чем больше сжатие – тем ниже конечная цена трафика.

Выбор спутника
Итак, настало время выбрать спутник, с которого вы бу-
дете принимать сигнал. Есть два варианта: вы можете по-
искать в Интернете провайдеров спутникового доступа
и на их сайтах посмотреть, какие спутники они использу-
ют, или, что предпочтительнее, вы можете найти подходя- Рисунок 2. Типы приёмных антенн
щий спутник и выяснить, кто через него вещает. Посети-
те сайт http://www.lyngsat.com – на нём вы найдёте список Для того чтобы направить антенну, вы должны знать две
спутников с их положением на орбите и сможете посмот- цифры: азимут и угол места. Для более полного понима-
реть, кто из провайдеров на них работает. Там же можно ния, что это такое, см. рис. 3.
ознакомиться с картами зон вещания с каждого из транс-
пондеров спутника. Предпочтение следует отдавать евро-
пейским операторам связи – у них цены ниже. Также имей-
те в виду, что многие провайдеры готовы работать с вами
через спутники, на которых в данный момент их нет, поэто-
му личные переговоры с представителем провайдера час-
то позволяют многого добиться. Не стесняйтесь немного где:
поторговаться – можно сбросить цену в некоторых случа-  G1 – ваша географическая долгота;
ях более чем в 2 раза.  G2 – долгота расположения интересующего вас спутни-
ка на орбите (западная с минусом);
Настройка оборудования  W – ваша географическая широта.
Итак, теперь у вас есть всё необходимое: тарелка, конвер-
тер (головка), обычный телевизионный коаксиальный ка- Соберите антенну согласно инструкции по сбор-
бель (75 Ом), комплект приёмного оборудования (PCI-пла- ке. Жестко закрепите опору в выбранной точке. При ус-
та или аппаратный демодулятор), компьютер (если исполь- тановке на балконе или лоджии загородку сверлят на-
зуется PCI-плата). Для того чтобы вывести вашу тарелку сквозь и прикрепляют опору обычными длинными бол-
на нужный спутник, вы можете воспользоваться двумя ме- тами большого диаметра. При установке на стене в ней
тодами: применить специальное оборудование или собс- сверлят отверстия и используют саморасклинивающие-
твенную голову и руки. Если у вас есть спектроанализа- ся анкерные болты.
тор – наведение не составит большого труда. Надо всего В соответствии с рис. 3, используя вышеприведённые
лишь закрепить датчик прибора на месте конвертера в кре- формулы, отвес и транспортир, вам не составит труда в те-
пеже тарелки, примерно нацелиться на спутник и, ориенти- чение часа настроить тарелку на нужный спутник. Уровень
руясь по показаниям спектроанализатора, произвести точ- сигнала при этом контролируется программным обеспече-
ную настройку. Однако будем предполагать, что специаль- нием (szap для Linux и setup4pc для Windows).
ного оборудования у вас нет, но есть голова, руки и немно- Имеет значение не только точная установка конверте-
го знания математики. ра в фокусе антены, но и правильное положение относи-
Сразу оговорюсь, я буду рассматривать установку оф- тельно оси вращения конвертера. Обычно каждый конвер-
сетной антенны на азимутальную подвеску. Про прямофо- тер (имеются в виду конвертеры, монолитно объединен-
кусные тарелки и полярную подвеску вы можете прочи- ные с поляризатором и облучателем, которые использу-
тать в Интернете. ются для установки антенны на один спутник) имеет метку

№3, март 2006 61


сети
Внимание! Всё, что относится к dvb, собирайте моду-
лями.
В разделе «Device Drivers → Multimedia Devices →Digital
Video Broadcasting Devices» включайте:
 DVB Core support
 Technisat/B2C2 FlexCopII(b) and FlexCopIII adapters
 Technisat/B2C2 Air/Sky/Cable2PC PCI

В /etc/modprobe.conf добавьте строку:

options dvb_core dvb_shutdown_timeout=0

Рисунок 3. Определение азимута и угла места Это необходимо сделать для того, чтобы Skystar не пе-
реходил постоянно в режим энергосбережения, в котором
«верх», которая связана с положением встроенного поля- он перестаёт принимать сигнал.
ризатора (соответствует вертикальной поляризации). Од- Выполните сборку, установку и перезагрузите компью-
нако точно вверх эта метка должна смотреть только на гео- тер.
графической долготе спутника. Если вы устанавливаете ан-
тенну западнее или восточнее, чем расположен спутник, Часть вторая: готовим утилиты
то конвертер нужно повернуть в держателе вокруг своей На сайте http://www.linuxtv.org возьмите утилиты управ-
оси. Для многих современных мощных спутников, распо- ления DVB-картами linuxtv-dvb-apps или, если вы исполь-
ложенных не слишком низко над горизонтом, этим эффек- зуете Slackware Linux, скачайте бинарный пакет со спе-
том можно пренебречь из-за запаса по мощности их сиг- циально мной пропатченными утилитами с моего сайта
нала. Однако, если вы ловите сигнал на пределе возмож- http://kid.tomsk.ru.
ностей вашей приемной системы, то правильный угол по- Также в составе пакета доступны man страницы на рус-
ворота конвертера может дать существенное повышение ском и английском языках, а также утилита интерактивной
уровня сигнала и создать запас на случай ухудшения ме- настройки dvb-setup.
теорологической обстановки. После установки этих утилит вам станут доступны сле-
дующие необходимые программы:
Мультифиды, DiSEqC – используем  szap – программа настройки карты на нужную частоту;
тарелку эффективно  dvbnet – программа, включающая сетевую надстройку
Если вы планируете использовать тарелку единолично над DVB;
и при этом хотите не только пользоваться Интернетом,  dvbtraffic – программа просмотра текущей активности
но и время от времени баловать себя просмотром телеви- на спутнике – позволяет проверить приём с тарелки.
зионных и прослушиванием радиопередач со спутника –
вам может понадобиться мультифид – крепление на од- Часть третья: готовим стартовые скрипты
ну тарелку нескольких головок и устройства с поддержкой Создайте файл /etc/channels.conf следующего содержа-
DiSEqC – протокола управления несколькими устройства- ния:
ми по одному кабелю. Если в вашей местности вы можете
принимать несколько близко расположенных спутников – Название оператора:частота в Мгц:поляризация(h|v): ↵
fec(0-авто):символьная скорость(в килосимволах в сек.): ↵
установите вместо стандартного крепления конвертера PID:PID:0
мультифид (его можно легко изготовить самостоятельно,
но лучше купить). Создаем стартовый скрипт rc.dvb

Пример настройки компьютера #!/bin/bash


PREFIX=/usr/local/sbin
под управлением Linux+Skystar2 # Ваш пид – его вам сообщит ваш оператор связи
Итак, вы имеете настроенную тарелку, компьютер под уп- PID1=523
# Имя сетевого интерфеса (менять не нужно)
равлением Linux, DVB плату Skystar2 и, конечно же, договор DEV_NAME1=dvb0_0
с оператором связи. Ваша задача – настроить раздачу де- # IP-адрес можно любой, лишь бы он не пересекался по маске
# ни с каким другим адресом в вашей системе. Настоятельно
шевого интернет-трафика всей вашей локальной сети. # рекомендую оставить нули
IP_ADDR=0.0.0.0
# MAC-адрес вашей карточки (как правило, его можно прочитать
Часть первая: настройка ядра # на бумажной наклейке на самой карте), но можно использовать
Для использования DVB-платы вам, скорее всего, придёт- # любой. Единственное ограничение – такого MAC-адреса
# не должно быть больше ни у кого, кто использует этот спутник
ся пересобрать ядро. Чем свежее оно будет – тем лучше. MAC_ADDR1=xx:xx:xx:xx:xx:xx
Я на момент написания статьи использовал на спутниковом case "$1" in
start)
маршрутизаторе ядро версии 2.6.15.4 – поэтому описание # Загружаем модули
будет происходить на его основе. Для более ранних ядер modprobe dvb_core dvb_shutdown_timeout=0
modprobe b2c2_flexcop_pci
будьте внимательны – драйверы называются по-другому # Если у вас настроен udev, то нужно немного времени,
и расположены в другом месте конфигурации ядра. # чтобы устройства появились в каталоге /dev

62
сети

Используем одну карту для работы


с несколькими подписками одновременно
Зачастую бывает, что одной подписки оказывается мало, как на-
пример в моем случае – я хочу иметь медленную безлимитную
подписку и быструю с помегабатной оплатой.
Skystar2 поддерживает до 32 одновременных независимых
каналов приёма с одного транспондера. Каждый канал будет
различаться только mac адресом на нём. Модифицируйте стар-
товые скрипты необходимым образом. В качестве MAC-адресов
для новых интерфейсов, как вариант, можно брать адреса со сго-
ревших сетевых плат.
Вам также придётся потратить какое-то время для того, чтобы
объяснить спутниковому провайдеру, что от него требуется. Схе-
ма взаимодействия показана на рис. 4.
Основная мысль заключается в том, чтобы делать SNAT
на разные адреса для разных пользователей/сервисов. Рисунок 4. Схема взаимодействия

sleep 3 вать openvpn или pptp.


# Тюним карточку
$PREFIX/szap -c /etc/channels.conf -n 1 -p
$PREFIX/dvbnet -p $PID1 #!/bin/bash
/sbin/ifconfig $DEV_NAME1 $IP_ADDR
/sbin/ifconfig $DEV_NAME1 hw ether $MAC_ADDR1 LOCALIP=xx.xx.xx.xx # Ваш наземный постоянный IP-адрес
echo 1000000 > /proc/sys/net/core/rmem_max REMOTEIP=xx.xx.xx.xx # IP-адрес сервера спутникового
echo 0 > /proc/sys/net/ipv4/conf/dvb0_0/rp_filter # провайдера
;; LOCALGW=xx.xx.xx.xx # Ваш наземный шлюз
stop) TUN=yy.yy.yy.yy # Ваш адрес в туннеле
# Останавливаем szap TUNGW=xx.xx.xx.xx # Адрес провайдера в туннеле
killall szap
# Останавливаем сетевой интерфейс NAME="skytun" # Имя тунеля
/sbin/ifconfig $DEV_NAME1 down
$PREFIX/dvbnet -d 0 modprobe ipip
# Удаляем «мусор» в случае повторных запусков скрипта
# Выгружаем модули ip route del $REMOTEIP >/dev/null 2>&1
rmmod b2c2_flexcop_pci b2c2_flexcop stv0299 dvb_core # Добавляем маршрут на сервер доступа провайдера «по земле»
;; ip route add $REMOTEIP via $LOCALGW
restart) ip tunnel del $NAME
$0 stop # Создаём тунель
$0 start ;; ip tunnel add $NAME mode ipip remote $REMOTEIP local ↵
*) $LOCALIP ttl 255
echo "Usage: start | stop | restart"
esac ip link set $NAME mtu 1500

ip addr add $TUN peer $TUNGW dev $NAME


Этот скрипт можно использовать как в Slackware, ip link set $NAME up
ip route del default
так и в SysV-системах, типа RedHat. ip route add default via $TUNGW
Внимание! В этом скрипте используются пропатчен- ip route flush cache
ные утилиты. Если вы используете оригинальные утилиты
с www.linuxtv.org – вам потребуется внести изменения.
Часть пятая: раздаем Интернет в локальную сеть
Часть четвертая: поднимаем обратный канал
Итак, канал для приёма информации уже есть, осталось # Включаем маршрутизацию
echo 1>/proc/sys/net/ipv4/ip_forward
создать запросный канал. Я буду рассматривать сейчас
подключение к оператору спутникового Интернета с по- В некоторых случаях, если вы наблюдаете пробле-
мощью ipip тунеля, что подразумевает наличие у вас ста- мы с загрузкой крупных объектов, при нормальном про-
тического IP-адреса и скорее всего постоянного наземно- хождении пинга, может потребоваться добавить вот та-
го подключения. Если это не так – вам придётся использо- кую строку:

Ошибки, часто допускаемые начинающими iptables -A FORWARD -p tcp -o skytun ↵


--tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300
Ошибки, которые делаются на этапе настройки оборудования
на спутник: Дальше:
 путают точку отсчета при выборе угла места;
 забывая основы школьного курса географии, отсчитывают # Раздаём интернет в сеть mynet/masklen
iptables -t nat -A FORWARD -s mynet/masklen ↵
азимут от юга. -j SNAT –to-source yy.yy.yy.yy

Ошибки, которые делаются на этапе настройки ОС Linux: Готово! Вы имеете систему с настроенным спутниковым
 забывают отключать тайм-аут засыпания карты. Интернетом и раздачей его всей локальной сети.

№3, март 2006 63


сети

Управляем сетевым
оборудованием с помощью
протокола SNMP

Управлять активным сетевым


оборудованием можно различными
средствами, например, с помощью Telnet
или SSH. Но одним из наиболее быстрых
и удобных средств взаимодействия
является протокол SNMP.

64
сети

З
адача автоматизации управления различным се-
тевым оборудованием существует со времени по-
явления первых сетевых устройств. На сегодняш-
ний день практически в любой сети можно найти актив-
ное сетевое оборудование, управление которым можно,
а как правило, нужно автоматизировать. Для решения
подобных задач был разработан протокол SNMP (Simple
Network Management Protocol). Существует масса готовых
коммерческих решений по управлению различными уст-
ройствами с помощью SNMP, например HP Open View, од-
нако не каждой организации по карману приобретение по-
добного ПО, к тому же эти программные продукты пред-
назначены для управления большим количеством уст-
ройств, и их использование в небольших сетях будет не-
целесообразным.
Рассмотрим теоретические основы работы протокола
SNMP и практическую реализацию решения некоторых
задач с помощью сценариев на языке Perl.

Описание протокола и его компонентов


SNMP использует UDP в качестве транспортного протоко-
ла порт 161 и предназначен для использования сетевыми
управляющими станциями, как правило серверами, в ка-
честве управляющих и активного сетевого оборудования
в качестве управляемых систем. Протокол определяет
формат данных, их обработка и интерпретация остаются
на усмотрение управляющих станций.
SNMP-сообщения не имеют фиксированного формата
и фиксированных полей. При работе протокол SNMP ис-
пользует управляющую базу данных MIB – (Management
Information Base), которая определяется стандартами
RFC-1213, 1212.
Общая архитектура взаимодействия по протоколу
SNMP имеет следующий вид: на устройстве, которым не-
обходимо управлять, запущен агент SNMP (см. рис. 1).
Агенты имеют доступ к инфоpмации об упpавляемом
устpойстве, на котоpом они запущены и делают ее до-
ступной для систем сетевого упpавления NMS (Network
Management Systems).
Упpавляемое устpойство может быть любого типа,
лишь бы оно было подключено к сети, это могут быть как
компьютеpы, так и сеpвеpа, пpинтеpы, маpшpутизатоpы,
коммутаторы и даже DSL-модемы.
Для пpимеpа: устpойство может отслеживать следу-
ющие паpаметpы:
 Количество и состояние своих виpтуальных соедине-
ний (Virtual circuits).
 Количество пpинятых сообщений об ошибках опpеде-
ленного pода (Number of certain kinds of error messages
received).
 Количество байт и пакетов, пpинятых и посланных этим
устpойством.
 Максимальное значение длины очеpеди (для маpшpу-
тизатоpов и дpугих межсетевых устpойств).
 Количество пpинятых и отправленных шиpоковещатель-
ных сообщений.
 Состояние каждого из своих интеpфейсов.
Андрей Бирюков
Забегая вперед, скажу, что задача получения значе-

№3, март 2006 65


сети
 ifMtu – максимальный размер пакета сетевого уровня,
который можно послать через этот интерфейс.
 ifSpeed – пропускная способность интерфейса в битах
в секунду (100 для Fast Ethernet).
 ifPhysAddress – физический адрес порта, для Fast
Ethernet им будет МАС-адрес. ifAdminStatus – желаемый
статус порта:
 up – готов передавать пакеты;
 down – не готов передавать пакеты;
 testing – находится в тестовом режиме.
 ifOperStatus – фактический текущий статус порта, име-
ет те же значения, что и ifAdmin-Status.
 ifin Octets – общее количество байт, принятое данным
портом, включая служебные, с момента последней ини-
Рисунок 1. Структура взаимодействия SNMP циализации SNMP-агента.
 iflnUcastPkts – количество пакетов с индивидуальным
ний некоторых из этих параметров будет реализована да- адресом интерфейса, доставленных протоколу верхне-
лее в этой статье. го уровня.
 ifInNUcastPkts – количество пакетов с широковеща-
Отправляем объекты тельным или мультивещательным адресом интерфей-
Существует несколько стандартов на базы данных управля- са, доставленных протоколу верхнего уровня.
ющей информации для протокола SNMP. Основные – стан-  ifinDiscards – количество пакетов, которые были при-
дарты MIB-I и MIB-II и версия базы данных для удаленно- няты интерфейсом, оказались корректными, но не бы-
го управления RMON MIB. Спецификация MIB-I определя- ли доставлены протоколу верхнего уровня, скорее все-
ла только операции чтения значений переменных. Опера- го из-за переполнения буфера пакетов или же по иной
ции изменения или установки значений объекта являются причине.
частью спецификаций MIB-II.  ifinErrors – количество пришедших пакетов, которые не
Версия MIB-I определяет порядка 114 объектов, кото- были переданы протоколу верхнего уровня из-за обна-
рые подразделяются на 8 групп. ружения в них ошибок.
 System – общие данные об устройстве (например, иден-
тификатор поставщика, время последней инициализа- Каждый объект в дереве значений SNMP определяет-
ции системы). ся с помощью уникального идентификатора OID (Object ID).
 Interfaces – параметры сетевых интерфейсов устройс- OID можно представить либо в числовом виде (то есть в том
тва (например, их количество, типы, скорости обмена, виде, который использует SNMP), либо в текстовом, с ис-
максимальный размер пакета). пользованием MIB-файлов. Следует также отметить, что су-
 Address Translation Table – описание соответствия меж- ществуют базы MIB от различных производителей как ап-
ду сетевыми и физическими адресами (например, по паратного, так и программного обеспечения, которые поз-
протоколу ARP). воляют представлять числовые значения параметров сво-
 Internet Protocol – данные протокола IP (адреса IP-шлю- их SNMP-агентов в символьном виде. Формат MIB-файлов
зов, хостов, статистика о IP-пакетах). описан в RFC-1212 [3].
 ICMP – данные протокола обмена управляющими сооб- Составное числовое имя объекта SNMP MIB соответс-
щениями ICMP. твует полному имени этого объекта в дереве регистрации
 TCP – данные протокола TCP (например, о TCP-соеди- объектов стандартизации ISO.
нениях). Пространство имен объектов ISO имеет древовидную ие-
 UDP – данные протокола UDP (число переданных, при- рархическую структуру. От корня этого дерева отходят три
нятых и ошибочных UDP-дейтаграмм). ветви, соответствующие стандартам, контролируемым ISO,
 EGP – данные протокола обмена маршрутной информа- ITU и совместно ISO-ITU. В свою очередь, организация ISO
цией Exterior Gateway Protocol (число принятых с ошиб- создала ветвь для стандартов, создаваемых национальны-
ками и без ошибок сообщений). ми и международными организациями (ветвь оrg). Объекты
любых стандартов, создаваемых под эгидой ISO, однозначно
В версии MIB-II был расширен набор стандартных объ- идентифицируются составными символьными именами, на-
ектов, а число групп увеличилось до 10. В число объектов, чинающимися от корня этого дерева. В сообщениях протоко-
описывающих каждый конкретный интерфейс устройства, лов символьные имена не используются, а применяются од-
включены следующие: нозначно соответствующие им составные числовые имена.
 ifType – тип протокола, который поддерживает интер- Каждая ветвь дерева имен объектов нумеруется в дереве це-
фейс. Этот объект принимает значения всех стандарт- лыми числами слева направо начиная с единицы, и эти чис-
ных протоколов канального уровня, например rfc877-x25, ла и заменяют символьные имена. Поэтому полное символь-
ethernet-csmacd, iso88023-csmacd, iso88024-tokenBus, ное имя объекта MIB имеет вид: iso.org.dod.intemet.mgmt.mib,
iso88025-tokenRmg и т. д. a полное числовое имя: 1.3.6.1.2.1 (см. рис. 2).

66
сети
Таким образом, искомые значения можно получить, об-
ратившись к соответствующим ветвям MIB с помощью чис-
ловых имен. На практике это выглядит следующим образом,
для того чтобы получить информацию о наименовании ус-
тройства необходимо обратиться к следующей ветке MIB
iso.org.dod.intemet.mgmt.mib.system.sysName, а в числовом
представлении это будет выглядеть так 1.3.6.1.2.1.1.5.

Ловушки
Еще одним важным понятием являются Traps, или ловушки,
реагирующие на определенные события отправкой сооб-
щений управляющей системе. Какая информация отправ-
ляется управляющей системе в сообщении Trap?
Посылаются следующие данные: Рисунок 2. Древовидная структура MIB
 Uptime устройства в виде пары: соответствующий OID
uptime, значение. То есть время, которое прошло с мо-
мента включения устройства.
 OID, содержащий информацию о произошедшем собы-
тии.
 Любые пары OID и его значение, которые могут дать до-
полнительную информацию. Например, когда коммута-
тор отправляет сообщение о подключении по протоколу
Telnet, он также передаёт OID, содержащий информа-
цию о том, с какого IP-адреса, с какого и на какой порт
было осуществлено подключение и OID, идентифици-
рующий сессию. Информация, переданная в данном
уведомлении Trap, будет выглядеть следующим обра-
зом (см. рис. 3).
Рисунок 3. Внешний вид сообщения SNMP
Расшифровав это уведомление Trap (сообщение SNMP)
с помощью базы MIB для коммутаторов Cisco, можно полу- ряд баз для различных агентов, в частности имеется MIB
чить OID и их значения в символьном виде. Например, иден- для оборудования Cisco, протоколов маршрутизации OSPF
тификатор .1.3.6.1.4.1.9.2.9.3.1.1 в символьном виде будет и BGP, операционной системы Windows.
представлен так: .iso.org.dod.internet.private.enterprises.cisco.
local.lts.ltsLineSessionTable.ltsLineSessionEntry.tslineSesType, Настраиваем оборудование
и содержать значение 5. Из описания данного OID узнаем, Прежде чем приступить к настройке SNMP на конкретном
что это telnet(5), тип сессии Телнет. управляемом устройстве, необходимо определиться с то-
Также уведомления Trap весьма полезны при различ- пологией сети, в которой находятся управляемое устройс-
ных внештатных ситуациях, например, отключения порта тво и сервер управления SNMP. Как уже упоминалось, дан-
на коммутаторе или маршрутизаторе. ный протокол использует UDP. В связи с этим следует от-
метить, что при использовании технологии NAT (Network
Симулятор SNMP Address Translation) или соединения через VPN-канал между
Для лучшего понимания теоретических основ функциони- управляющим устройством и сервером управления могут
рования протокола SNMP можно воспользоваться специ- возникнуть трудности с прохождением SNMP-сообщений.
альным симулятором Advent Net, испытательную версию Также необходимо позаботиться о том, чтобы в соответству-
которого можно загрузить по адресу [6]. ющих списках доступа для портов 161 и 162 (SNMP Traps)
Данный симулятор позволяет воспроизвести точную был разрешен UDP-трафик.
копию различных устройств, как управляющих (MIB-брау- Приступим к настройке работы SNMP на управляемом
зер, Trap Recorder), так и управляемых (Agent Simulator, Trap устройстве.
Stormer) с поддержкой протокола SNMP, причем компонен- На некоторых видах оборудования, таких как аппарат-
ты AdventNet можно использовать и при тестировании вза- ные принт-сервера, ADSL-модемы, а также в некоторых
имодействия с реальными устройствами. Например, мож- операционных системах, агент SNMP включен по умолча-
но, включив на маршрутизаторе поддержку SNMP, получать нию. Поэтому мы рассмотрим процедуру настройки взаи-
уведомления Trap с помощью Trap Recorder и конфигури- модействия по протоколу SNMP на маршрутизаторах Cisco.
ровать элементы Management Information Base через MIB- Данные настройки осуществляются довольно просто. В ре-
браузер. И наоборот, отправлять уведомления Traps из Trap жиме конфигуратора необходимо ввести:
Stormer и получать их с помощью Perl-сценариев, о которых
речь пойдет далее. Следует также сказать несколько слов snmp-server community <community_name> RO <access-list>
snmp-server enable traps
о поддержке MIB в Advent Net. Симулятор содержит целый snmp-server host <host_address>

№3, март 2006 67


сети
Таблица 1. SNMP Management Monitor Значения первых четырех параметров, как правило ука-
sysDescr Cisco Router зываются при первом конфигурировании устройства и за-
sysContact SysAdmin
тем остаются неизменными, а последние три являются счет-
чиками и постоянно изменяются.
sysName Core router
Как уже упоминалось, приведенный здесь сценарий поз-
sysLocation Wiring closet
воляет получать информацию через веб-интерфейс, созда-
ipInDelivers 12991 вать странички «на лету», то есть является CGI-сценарием.
ipInReceives 23632 Не увлекаясь особо веб-программированием, будем выво-
ipInAddrErrors 246 дить эти значения в виде таблицы. Общий алгоритм работы
сценария следующий, устанавливаем SNMP-сессию, в ко-
Первая команда определяет community или «сообщест- торой запрашиваем нужные ветки MIB. Затем полученные
во», представляющее строку, используемую в процессе до- значения преобразовываются и выводятся на экран.
ступа к устройству. На многих устройствах по умолчанию
это public. Однако лучше придумать название подлиннее Листинг 1. Взаимодействие по протоколу SNMP
и посложнее, дабы те, кому не положено, не смогли даже #!/usr/bin/perl
просмотреть значения MIB для данного устройства. # Первая строка – путь к интерпретатору Perl
use SNMP_Session;
Второй параметр RO – это уровень доступа Read Only, use BER;
существует также уровень доступа, позволяющий запись # Эти две библиотеки можно найти в исходных кодах к статье
use strict;
(RW), однако настоятельно рекомендую без особой необхо-
димости не давать такого доступа, так как это может при- # Объявляем основную процедуру, выводящую значения
# параметров на экран
вести к самым неприятным последствиям, вплоть до пол- sub snmp_get($@);
ной потери рабочей конфигурации.
$SNMP_Session::suppress_warnings = 1;
Наконец, третий параметр – это номер Access-list, спис-
ка доступа, который определяет, кому разрешен доступ my $ipv4_only_p = 0;
my $snmp_version = 1;
к данному управляемому устройству. Этот параметр не яв- # По умолчанию используется версия 1
ляется обязательным, если его не указывать, то сообще- my $hostname = '172.17.39.1'; # управляемое устройство
my $community = 'admin12345'; # SNMP community
ния об ошибке не будет, но для ограничения безопасности
access-list необходим [1]. my %ugly_oids = qw( sysDescr 1.3.6.1.2.1.1.1.0
sysContact 1.3.6.1.2.1.1.4.0
Вторая команда включает Trap, то есть SNMP-сообще- sysName 1.3.6.1.2.1.1.5.0
ние, являющееся реакцией на событие или изменение со- sysLocation 1.3.6.1.2.1.1.6.0
ipInDelivers 1.3.6.1.2.1.4.9.0
стояния. В данном примере мы будем получать отклики обо ipInReceives 1.3.6.1.2.1.4.3.0
всех событиях на управляемом устройстве. ipInAddrErrors 1.3.6.1.2.1.4.5.0
);
Третья команда определяет SNMP-сервер, на который # объекты MIB (OID) в числовом виде
будут отправляться уведомления Trap. my %pretty_oids;
Итак, мы сконфигурировали SNMP на маршрутизаторе foreach (keys %ugly_oids) {
Cisco, теперь посмотрим, как можно с помощью сценари- $ugly_oids{$_} = encode_oid (split (/\./, $ugly_oids{$_}));
$pretty_oids{$ugly_oids{$_}} = $_;
ев Perl обратиться к управляемому устройству и получить }
необходимую информацию. # в цикле преобразовываем OID
srand();
# устанавливаем SNMP-сессию
Программная реализация my $session = ($snmp_version == 1)
? SNMPv1_Session->open ($hostname, $community, 161, ↵
Рассмотрим пример, позволяющий выполнить основ- undef, undef, undef, undef,undef, $ipv4_only_p)
ные операции взаимодействия с управляемым устройс- : SNMPv2c_Session->open ($hostname, $community, 161, ↵
undef, undef, undef, undef, undef, $ipv4_only_p)
твом. Исходный код, а также библиотеки, которые были or die "Couldn’t open SNMP session to $hostname: ↵
взяты за основу при написании сценариев, можно загру- $SNMP_Session::errmsg";
# ошибка, если не удалось установить SNMP-сессию
зить по адресу [5]. Однако эти исходные коды были не- snmp_get ($session, qw(sysDescr sysContact sysName ↵
много доработаны и теперь позволяют получать инфор- sysLocation ipInDelivers ipInReceives ipInAddrErrors));
$session->close ();
мацию через веб интерфейс, так что не забудьте подпра-
вить путь к интерпретатору Perl в первой строке сценария. sub snmp_get ($@) {
my($session, @oids) = @_;
Итак, попробуем прочитать значения следующих объек- my($response, $bindings, $binding, $value, $oid);
тов MIB (для простоты воспользуемся MIB RFC 1213), на- grep ($_ = $ugly_oids{$_}, @oids);
my $interf='';
ходящихся в ветках iso.org.dod.intemet.mgmt.mib.system my $stroka='';
и iso.org.dod.intemet.mgmt.mib.ip: if ($session->get_request_response (@oids)) {
$response = $session->pdu_buffer;
 sysDescr – описание системы; ($bindings) = $session->decode_get_response ($response);
 sysContact – контактная информация; print "Content-type: text/html\n\n";
print "<html> <title> SNMP Management monitor ↵
 sysName – наименование системы; </title> <body> <center><b> SNMP ↵
 sysLocation – расположение устройства; Management Monitor ↵
</b><hr><table cellpadding=1 ↵
 ipInDelivers – сколько IP-пакетов отправлено; cellspacing=1 border=2>";
 ipInReceives – сколько IP-пакетов получено; while ($bindings ne '') {
($binding, $bindings) = decode_sequence ↵
 ipInAddrErrors – сколько пакетов с неверными адресами. ($bindings);

68
сети
($oid, $value) = decode_by_template ↵ Например, вот так будет выглядеть сообщение SNMP,
($binding, "%O%@");
print "<tr><td bgcolor=yellow><b>", ↵ которое прислал коммутатор после отключения его ин-
$pretty_oids{$oid}, " </b></td> "; терфейса.
$stroka= pretty_print($value);
print '<td bgcolor=magenta><b>',$stroka, ↵ .1.3.6.1.2.1.2.2.1.2.4 STRING FastEthernet0/4
'</b></td></tr>';
.1.3.6.1.3.1.9.2.2.1.1.20.4 STRING LostCarrier
}
print "</table></body></html>";
} else { А так выглядит SNMP Trap, сообщающий о том, что ин-
warn "SNMP problem: $SNMP_Session::errmsg\n";
} терфейс включен:
}
.1.3.6.1.2.1.2.2.1.2.3 STRING FastEthernet0/3
.1.3.6.1.4.1.9.2.2.1.1.20.3 STRING up
В результате работы данного сценария получаем таб-
лицу, содержащую значения параметров MIB (см. табли- Аналогичным образом можно получить сообщения, ка-
цу 1). сающиеся других событий, происходящих с управляемым
Данный сценарий вполне можно использовать на прак- устройством.
тике.
Например, для получения информации о состоянии того Заключение
или иного устройства на текущий момент времени. Однако В завершении хотелось бы отметить ряд моментов. Прежде
при добавлении OID своего устройства необходимо убе- всего, следует обратить внимание на то, что у многих круп-
диться, что управляемое устройство их поддерживает (на- ных производителей имеются свои базы MIB и для более
пример, с помощью MIB-браузера), так как в противном слу- эффективного использования возможностей SNMP луч-
чае сценарий вернет ошибку выполнения. ше использовать MIB для оборудования конкретного про-
Приведем еще один фрагмент сценария, который осу- изводителя. Для поиска баз MIB воспользуйтесь сайтом
ществляет прием сообщений Trap. Общий алгоритм рабо- MIBSearch.com. Что же касается активного сетевого обо-
ты аналогичен предыдущему, поэтому приведу лишь ту рудования Cisco, то на CPAN.org можно найти множество
часть сценария, которая касается собственно получения Perl-сценариев для взаимодействия по протоколу SNMP,
сообщений. а также сценариев, осуществляющих разбор SNMP-сооб-
щений для конкретных событий, например для событий,
Листинг 2. Получение SNMP Traps связанных с протоколами динамической маршрутизации,
… # заголовок и объявление библиотек потерей пакетов, состоянием VLAN и так далее.
my $trap_session = SNMPv1_Session->open_trap_session () Также, возможно, у вас сложилось впечатление, что про-
or die "cannot open trap session";
my ($trap, $sender_addr, $sender_port) = ↵ токол SNMP на практике использует только активное сете-
$trap_session->receive_trap () вое оборудование, канального и сетевого уровней, c встро-
or die "cannot receive trap";
my ($community, $enterprise, $agent, енным программным обеспечением, однако это не так.
$generic, $specific, $sysUptime, $bindings) К примеру, некоторые виды программного обеспечения,
= $trap_session->decode_trap_request ($trap)
# устанавливаем trap session такие как корпоративные антивирусные системы, актив-
or die "cannot decode trap received" но используют уведомления Trap для оповещения о ви-
… # команды, связанные с получением сообщения, русных инцидентах и эпидемиях. Также SNMP использу-
… # аналогичные предыдущему листингу ют системы резервного копирования и системы беспере-
my ($binding, $oid, $value); бойного питания.
while ($bindings ne ‘’) { Так что данный протокол полезен не только для ор-
($binding,$bindings) = &decode_sequence ($bindings);
($oid, $value) = decode_by_template ($binding, "%O%@"); ганизации систем управления сетевым оборудованием,
# декодируем полученное сообщение но и для решения повседневных задач системного адми-
print BER::pretty_oid ($oid)," => ", ↵
pretty_print ($value); нистрирования.
# выводим ветку MIB и значение в строковом формате
%mail = ( To => 'admin@mynetwork.ru',
From => 'snmptrap@mynetwork.ru', Литература, ссылки:
Message => "SNMP trap received:".$bindings, 1. Основы организации сетей Cisco. Справочное руководство.
SMTP => '10.0.1.2'
); 2. www.opennet.org – интернет-ресурс со множеством статей
sendmail(%mail) or die $Mail::Sendmail::error; и примеров, посвященных реализации SNMP на различных
# письмо администратору
} устройствах.
3. www.ietf.org – ресурс содержит все стандарты RFC, в том чис-
# здесь собственно производится прием сообщений Trap,
# для того чтобы получать эти сообщения постоянно, ле и RFC 1212, 1213.
# необходимо использовать бесконечный цикл, 4. www.CPAN.org – ресурс, на котором можно найти боль-
# который прерывается при нажатии любой клавиши
While (@_='') { шое количество исходных кодов Perl-сценариев для работы
my ($trap, $sender_addr, $sender_port) = ↵ с SNMP.
$trap_session->receive_trap ()
or die "cannot receive trap"; 5. http://www.switch.ch/misc/leinen/snmp/perl/dist – исходный код,
} а также библиотеки, использованные при написании сцена-
рия.
В результате получим содержимое сообщений SNMP 6. http://www.adventnet.com/products/simulator – дистрибутив си-
Trap, которые пришли от управляемых устройств. мулятора SNMP.

№3, март 2006 69


программирование

Переход от VBScript к ASP и ASP.NET


Часть II: дописываем Framework на примере
сетевых папок

Иван Коробко
Программисты Microsoft, создававшие Framework, явно не ориентировались на системных
и сетевых программистов, поэтому в нем отсутствуют функции по управлению DFS, сетевыми
папками и т. д. Рассмотрим возможные пути решения возникших проблем.

К
сожалению, в Microsoft Framework ции, дописать Framework по своему ус- нению с VBScript. Однако стоит учесть,
отсутствуют функции по управ- мотрению. что скорость работы адаптированных
лению DFS, сетевыми папками сценариев оставляет желать лучше-
и т. д. Возникает вопрос – а как же ре- WINAPI, или адаптация го, по сравнению с API-функциями. Ис-
шить данную проблему, ведь, напри- VBScript пользование API-функций – занятие
мер, в VBScript можно было без осо- Рассмотрим преимущества и недостат- трудоемкое и требует много внимания,
бых усилий управлять сетевыми папка- ки предлагаемых вариантов. Если гово- поскольку в MSDN приведены описа-
ми (Shared Folders). Неужели в VB.NET рить о трудоемкости, то предпочтитель- ния функций, годящиеся для VB, а как
это невозможно сделать? ным является, конечно же, первый вари- известно, типы данных VB и VB.NET
Существует два варианта: адап- ант, поскольку все ограничивается под- не совпадают, так что придется занять-
тировать сценарий на VBScript под ключением библиотеки и незначитель- ся их преобразованием. Это еще не все.
VB.NET или, используя WIN API-функ- ным изменением синтаксиса, по срав- Для простоты написанный програм-

70
программирование
мный код рекомендуется поместить в отдельную библиотеку, Таблица 1. Свойства сетевой папки
которую опять же, чтобы использовать, необходимо подклю-
Параметр Описание
чить к проекту и вызывать нужную функцию. Итак, если для
MaxUserCount Максимальное число подключенных пользователей
вас скорость не критична и не хочется тратить время – выби-
AdsPath ADsPath – сетевой путь к ресурсу
райте адаптацию скрипта под VB.NET, если же есть желание
отмучиться один раз, создав библиотеку, и каждый раз на- Имя класса, к которому принадлежит объект. Для сетевой пап-
Class
ки имя класса – «FileShare»
слаждаться высокой скоростью работы созданных приложе-
Число пользователей, подключенных к сетевой папке в насто-
ний – вам придется использовать API-функции. CurrentUserCount
ящее время
Description Описание сетевого ресурса
Сетевые папки: от VBScript к VB.NET GUID Уникальный идентификатор ресурса
С сетевыми папками можно проделывать следующие опе-
Name Имя ресурса
рации:
 предоставлять к папкам доступ из сети; Parent Путь в формате AdsPath родительского объекта

 удалять сетевые папки; Path Системный путь к ресурсу, например «c:\folder»


 просматривать свойства выбранной сетевой папки; Scheme Путь в формате AdsPath к схеме класса
 получать список доступных сетевых папок на указан-
ном компьютере.  в VB.NET отсутствуют операторы SET и LET (все отли-
чия синтаксиса подробно описаны в статье «Переход
Рассмотрим пример создания сетевой папки на VBScript от VBScript к VB.NET»).
(см. пример 1). Пример можно разделить условно на две ло-
гические части: в первой из них осуществляется проверка Текст примера, в котором создается заданный каталог,
существования папки с помощью объекта FSO. В том слу- в случае его отсутствия выглядит следующим образом:
чае, если папки нет, она создается. Во второй части предо-
ставляют сетевой доступ к существующей папке, для чего ' Объявление константы
Dim PathToFolder As String = "C:\Test"
необходимо указать несколько обязательных параметров:
имя компьютера, путь к папке, название папки в сети. Пол- Dim fso As New Scripting.FileSystemObject
If fso.FolderExists(PathToFolder) = False Then
ный список и описания параметров см. в таблице 1. fso.CreateFolder(PathToFolder)
End If
Пример 1. Создание сетевой папки на VBScript

' Обработчик ошибок Если использовать объект Microsoft.VisualBasic.FileIO.


On Error Resume Next FileSystem, относящийся к стандартным, то пример созда-
' Объявление констант ния заданного каталога выглядит так:
PathToFolder="С:\Test"
ShareName="Test" ' Объявление константы
ObjectType="Fileshare" Dim PathToFolder As String = "C:\Test"
MaxUsers=10
' Проверка существования каталога
' Проверка существования каталога Dim fso As New Microsoft.VisualBasic.FileIO.FileSystem
set fso=wscript.createobject("Scripting.FileSystemObject") If fso.DirectoryExists(PathToFolder) = False Then
If fso.FolderExists (PathToFolder)=False then fso.CreateDirectory(PathToFolder)
set o=fso.createfolder(PathToFolder) End If
end If

' Определение имени текущего компьютера


Set WSHNetwork = CreateObject("WScript.Network") Определение имени текущего
PCName=WSHNetwork.ComputerName
компьютера
' Создание объекта Как говорилось ранее, для создания сетевой папки необхо-
Set ShareServiceObj = GetObject("WinNT://"+PCName+ ↵
"/LanManServer") димо указать несколько обязательных параметров, среди ко-
set NewShare = ShareServiceObj.Create(ObjectType,ShareName) торых имя компьютера. В том случае, если предоставляется
NewShare.Path = PathToFolder
NewShare.MaxUserCount = MaxUsers сетевой доступ к локальной папке, то имя компьютера мож-
NewShare.SetInfo ' сохранение изменений в файловую но определить как с помощью объекта Wscript.Network:
' систему

При переводе данного примера на VB.NET необходи- Dim Temp As New WshNetwork
Dim PCName As String = Temp.ComputerName
мо прежде всего подключить две библиотеки: «Microsoft
Scripting Runtime» и «Active DS Type Library». так и с помощью встроенной функции в VB.NET:

Управление файловой системой Dim PCName As String = My.Computer.Name


Для управления файловой системой в VBScript использу-
ется объект FSO, содержащийся в библиотеке «Microsoft
Scripting Runtime», подключаемый через свойства проекта. Создание сетевой папки
Поскольку в VB.NET в отличие от VBScript необходимо: Для этого необходимо определить обязательные парамет-
 объявлять и указывать соответствующий им тип дан- ры: локальный путь и название папки в сети, тип создава-
ных; емого объекта. Оба этих параметра – строки (string):

№3, март 2006 71


программирование
Dim PathToFolder As String = "C:\Test" или, что то же самое:
Dim ShareName As String = "Test"
Dim ObjectType As String = "FileShare"
Dim ShareServeceObj As ActiveDs.IADsContainer = ↵
GetObject("WinNT://" + PCName + "/LanManServer")
Также используем один необязательный параметр –
MaxUserCount, указывающий максимальное количество Аналогично адаптируем строку создания объекта ти-
пользователей, которое может одновременно обращать- па FileShare и назначаем объекту необходимые свойства.
ся к сетевому ресурсу (см. таблицу 1). Тип этого парамет- Запись сделанных изменений так же, как и в VBScript, осу-
ра – число (integer): ществляется с помощью метода SetInfo:

Dim MaxUsers As Integer = 10 ' Создание объекта


Dim ShareServeceObj As ActiveDs.IADsContainer = ↵
GetObject("WinNT://" + PCName + "/LanManServer")
После объявления констант необходимо получить до- Dim NewShare As ActiveDs.IADsFileShare = ↵
ShareServeceObj.Create(ObjectType, ShareName)
ступ к объекту LanManServer, в данном случае – локально- NewShare.Path = PathToFolder
го компьютера с помощью функции GetObject(). Подклю- NewShare.MaxUserCount = MaxUsers
NewShare.SetInfo() ' сохранение изменений в файловую
ченная библиотека хранит процедуры и функции в объекте ' систему
ActiveDS, пространство имен которого можно импортиро-
вать в создаваемый проект с помощью команды Imports: Теперь необходимо создать обработчик ошибок, что-
бы созданное приложение выдавало сообщение, напри-
Imports ActiveDS мер, о том, что создаваемая сетевая папка уже сущест-
вует. Для этого рекомендуется использовать встроенную
Для удобства восприятия не будем использовать им- процедуру «Try … End Try». Ее шаблон выглядит следую-
порт пространства имен, а каждый раз в примере будем щим образом:
разыменовывать объект.
Итак, пишем: Try

' Тестируемый программный код


Dim con As ActiveDS
Catch ex As Exception
MsgBox(ex.Message)
и в отображаемой нам оболочкой VB.NET подсказкой End Try
в свойствах класса не находим функцию GetObject().
Для решения вопроса обратимся к поисковой системе Таким образом, полный вариант текста адаптирован-
MSDN (http://msdn.microsoft.com), задав в качестве крите- ного сценария создания сетевой папки выглядит следую-
рия «ActiveDS, GetObject». щим образом:
Среди найденных страниц остановимся на ссылке
«IADsContainer::GetObject», в которой приведен пример чте- Try
' Объявление констант
ния объекта (см. рис. 1). Приняв его за основу, адаптируем Dim PathToFolder As String = "C:\Test"
его под нашу задачу: Dim ShareName As String = "Test"
Dim ObjectType As String = "FileShare"
Dim MaxUsers As Integer = 10
Dim ShareServeceObj As ActiveDs.IADsContainer
ShareServeceObj = GetObject("WinNT://" + PCName + ↵ ' Проверка существования каталога
"/LanManServer") Dim fso As New Microsoft.VisualBasic.FileIO.FileSystem

Рисунок 1. Свойства объекта в MSDN

72
программирование
If fso.DirectoryExists(PathToFolder) = False Then Таблица 2. Используемые функции WIN API для управления
fso.CreateDirectory(PathToFolder) сетевыми папками
End If
Действие Функция
' Определение имени текущего компьютера
Предоставить папку в сетевой доступ NetShareAdd
Dim PCName As String = My.Computer.Name
Удалить сетевую папку NetShareDel
' Создание объекта
Dim ShareServeceObj As ActiveDs.IADsContainer = ↵ Просмотреть/изменить свойства выбранной
NetShareGetInfo/NetShareSetInfo
GetObject("WinNT://" + PCName + "/LanManServer") сетевой папки
Dim NewShare As ActiveDs.IADsFileShare = ↵
ShareServeceObj.Create(ObjectType, ShareName) Сформировать список имеющихся сетевых
NetShareEnum
папок на компьютере
NewShare.Path = PathToFolder
NewShare.MaxUserCount = MaxUsers
NewShare.SetInfo() ' сохранение изменений в файловую Таблица 3. Преобразование типов для функций
' систему Структура в MSDN Описание в VB.NET
Catch ex As Exception LPTSTR a
MsgBox(ex.Message)
End Try LMSTR a ByVal … As String
LPWSTR a
LPBYTE a ByRef … As StructName
Использование WIN API-функций LPBYTE a ByRef … As IntPtr
С помощью API-функций программисту предоставляет-
DWORD a ByVal … As Integer
ся возможность доступа ко всему многообразию функций
LPWORD a ByRef … As Integer
ОС на низком уровне. Это обозначает, что скорость работы
и функционал создаваемого приложения увеличится. TCHAR a <MarshalAs(UnmanagedType.Struct)> byRef … As String

Итак, для начала вспомним действия, которые можно


осуществлять с сетевыми папками, и приведем в таблице 2 Таблица 4. Преобразование типов для структур
соответствующие им процедуры, хранящиеся в библиотеке Структура в MSDN Описание в VB.NET
Netapi32.dll (http://msdn.microsoft.com/library/default.asp?url= LPCWSTR a
Public a as String
/library/en-us/stgmgmt/fs/netsharesetinfo.asp). LMSTR a
Рассмотрим подробно, как и в предыдущем разделе, LPWSTR a <MarshalAs(UnmanagedType.LPWStr)> Dim a As String
процесс создания сетевой папки, а остальные функции <VBFixedString(128), MarshalAs( _
приведем в приложении. TCHAR a[128] UnmanagedType.ByValTStr, SizeConst:=128)> _
Public szCSDVersion As String

Маршалинг вызова функций BYTE a Public a as Byte

Все данные, используемые в среде VB.NET, являются уп- FILEOP_FLAGS a Public a as Short
равляемыми, то есть их расположением в памяти управ- BOOL a Public a as Boolean
ляет среда исполнения .NET. Обычная DLL-библиотека LPVOID a
ничего не знает о среде исполнения и типах данных, ко- UINT a
торые используются. Чтобы установить отсутствующую Public a as Integer
LONG a
связку, в игру вступает процесс, называемый маршалин-
HWND a
гом (marshal (англ.) – располагать в определенном поряд-
WORD a Public a as Int16 или Integer
ке, размещать). Этот процесс позволяет перенести вызов
из среды .NET на уровень операционной системы, непос- DWORD a Public a as Int32 или Integer

редственно к самим библиотекам. LPStructureName Storage Public a as IntPtr


Вызов функции из DLL осуществляется следующим об-
разом: Необходимо помнить, что, указывая название функции,
 поиск указанной в запросе библиотеки; следует различать большие и маленькие буквы. Поскольку
 загрузка DLL в память; в MSDN декларирование функций приведено для VB, а ти-
 поиск необходимой функции; пы данных VB и VB.NET значительно отличаются, то для
 перенос параметров в стек и преобразование типов (на- корректного объявления функций не обойтись без таб-
пример, из String в LTPSTR) – этот процесс и называет- лицы 3.
ся маршалингом;
 вызов функции из DLL; Описание структуры
 анализ возвращаемых значений и обработка ошибок Синтаксис объявления структур, используемых функция-
 приведение типов возвращаемых значений к типам ми, следующий:
.NET.
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Structure OSVERSIONINFOEX
Объявление функции …
Синтаксис объявления функций следующий: End Structure

Declare Unicode Function NetDfsGetInfo Lib "***.DLL" Функция всегда возвращает код ошибки, а манипуляция
(ByVal[ByRef] ParametrName As TypeOfData,…) As Integer
с данными осуществляется через память чтением или запи-

№3, март 2006 73


программирование
Вызов API-функции, осуществляющей запись
в структуру
Рассмотрим такую функцию на примере создания сетевой
папки с помощью NetShareAdd, которая объявляется сле-
дующим образом:
Рисунок 2. Описание функции NetShareCheck в MSDN Declare Unicode Function NetShareAdd Lib "NETAPI32.DLL" ↵
(ByVal servername As String, ByVal level As Integer, ↵
ByRef buf As _SHARE_INFO_2, ↵
ByRef parm_err As Integer) As Integer

Если обратить внимание на описание этой функции


в MSDN, то видно, что она при декларировании может ссы-
латься на одну из структур. В приведенном примере исполь-
зуется структура _SHARE_INFO_2.
Также необходимо описать в тексте VB-файла структу-
ру _SHARE_INFO_2. Воспользовавшись поиском в MSDN
найдем ее описание (см. рис. 3) и таблицей 4, корректно
опишем структуру в VB-файле VB.NET проекта:
Рисунок 3. Описание структуры _SHARE_INFO_2 в MSDN

сью данных в структуру. Описание структур в MSDN также <StructLayout(LayoutKind.Sequential, ↵


CharSet:=CharSet.Auto)> _
требует адаптации для VB.NET (см. таблицу 4). Public Structure _SHARE_INFO_2
<MarshalAs(UnmanagedType.LPWStr)> ↵
Public shi2_netname As String
Вызов функции Public shi2_type As Int32
Синтаксис вызова функции зависит от нескольких факто- <MarshalAs(UnmanagedType.LPWStr)> ↵
Public shi2_remark As String
ров. Рассмотрим некоторые из возможных вариантов. Public shi2_permissions As Int32
Public shi2_max_uses As Int32
Public shi2_current_uses As Int32
Вызов API-функции, не обращающейся <MarshalAs(UnmanagedType.LPWStr)> ↵
к структуре Public shi2_path As String
<MarshalAs(UnmanagedType.LPWStr)> ↵
Примером такой функции является API-функция NetShare Public shi2_passwd As String
Check, с помощью которой определяют статус сетевой End Structure
папки.
На первом этапе необходимо объявить функцию, вос- Перед тем как выполнить обращение к функции необ-
пользовавшись MSDN, задав в качестве искомого слова ходимо присвоить членам, описанным в структуре, соот-
«NetShareCheck» (см. рис. 2), и таблицей 3: ветствующие значения:

Declare Unicode Function NetShareCheck Lib "NETAPI32.DLL" ↵ Dim a As _SHARE_INFO_2


(ByVal servername As String, ByVal device As String, ↵ a.shi2_max_uses = 100
ByRef type As Integer) As Integer a.shi2_netname = "123"
a.shi2_path = "c:\123"
В обработке какого-либо события, например нажатия
на кнопку, осуществляется вызов функции: Затем осуществляется вызов функции, с указанием не-
обходимых параметров:
Private Sub Button1_Click(ByVal sender As System.Object, ↵
ByVal e As System.EventArgs) Handles Button1.Click
Dim server As String = "\\1230pc"
Dim server As String = "\\ComputerName" Dim err_code As Integer
Dim share As String = "c:\FolderName" err_code = NetShareAdd(server, 2, a, Nothing)

Const STYPE_DISKTREE = 0 Если все типы данных объявлены корректно, то функ-


Dim err_description As String = "" ция возвратит 0, если же нет, необходимо воспользоваться
Dim err_code As Integer MSDN для определения по коду ошибки ее описания ссыл-
err_code = NetShareCheck(server, share, ↵ кой (http://msdn.microsoft.com/library/default.asp?url=/library/
STYPE_DISKTREE) en-us/debug/base/system_error_codes.asp). Полный вариант
if err_code = 0 then текста вызова функции приведен ниже:
err_description = "Shared Folder Status: OK "
else Private Sub Button1_Click(ByVal sender As System.Object, ↵
err_description = "Shared Folder Exist: Error" ByVal e As System.EventArgs) Handles Button1.Click
end if
MsgBox(err_description) Dim a As _SHARE_INFO_2
a.shi2_max_uses = 100
End Sub a.shi2_netname = "123"
a.shi2_path = "c:\123"
В приведенном примере функция не передает ника- Dim server As String = "\\1230pc"
ких данных.

74
программирование
Dim err_description As String = ""
Dim err_code As Integer
err_code = NetShareAdd(server, 2, a, Nothing)

Select Case err_code


Case 0
err_description = "Share Folder Was Created"
Case 2
err_description = "Folder Not Found"
Case 2118
err_description = "Share Folder Is Exist"
End Select
MsgBox(err_description)

End Sub

Рисунок 4. Задаем пространство имен динамической библиотеки


Вызов API-функции, осуществляющей чтение
данных из структуры Case 0
MsgBox(b.shi2_netname)
Проиллюстрировать данный случай лучше всего на приме- Case 2310
ре функции NetShareGetInfo. Обратите внимание на декла- err_description = "Share Is Not Found"
MsgBox(err_description)
рирование этой функции в MSDN: последний параметр яв- End Select
ляется ссылкой на данные, хранящиеся в памяти, который End Sub
имеет в VB.NET тип IntPtr. При вызове функции осущест-
вляется обращение к структуре и обработка полученных
данных. Итак, объявление этой функции в VB.NET выгля- Создание собственной библиотеки
дит следующим образом: Для создания собственных динамических библиотек необ-
ходимо создать проект, имеющий тип Class Library.
Declare Unicode Function NetShareGetInfo ↵ Библиотека состоит минимум из одного класса, в кото-
Lib "NETAPI32.DLL" (ByVal servername As String, ↵
ByVal netname As String, ByVal level As Integer, ↵ ром описаны функции, вызов которых и осуществляется
ByRef bufptr As IntPtr) As Integer из внешних программ:

Для использования этой функции необходимо описать Imports …


Public Class ClassName1
соответствующую структуру и указать соответствующий Public Function Function1(ByVal Type As Integer, …) ↵
ей номер в качестве значения параметра level. Посколь- As String
End Function
ку, как и в прошлом случае будет использована структу-
ра _SHARE_INFO_2, то пропустим часть, в которой осу- Public Function Function2(ByVal Type As Integer, …) ↵
As Object
ществляется ее декларирование. Данные считываются End Function
по следующему алгоритму: сначала осуществляется вы-
Function Function1(ByVal Type As Integer, …) As ↵
зов функции: String
End Function

Dim server As String = "\\1230pc" End Class
Dim share As String = "123" …
Dim err_code As Integer Public Class ClassNameK
Dim bufPtf As IntPtr …
err_code = NetShareGetInfo(server, share, 2, bufPtf) End Class
затем чтение полученных данных из памяти:
Обратите внимание на то, что некоторые функции или
Dim b As _SHARE_INFO_2 даже классы можно сделать недоступными из других фай-
b = CType(Marshal.PtrToStructure(bufPtf, ↵
GetType(_SHARE_INFO_2)), _SHARE_INFO_2) лов, например сервисные функции. Чтобы достичь этого
MsgBox(b.shi2_netname) эффекта, при декларировании функции или класса необ-
ходимо пропустить слово Public. API-функции и необходи-
Полный текст процедуры вызова функции приведен мые структуры декларируются, как и в обычных проектах:
ниже: в классе, но вне функции и процедур.

Private Sub Button6_Click(ByVal sender As System.Object, ↵ Определяем пространство имен


ByVal e As System.EventArgs) Handles Button6.Click
Dim server As String = "\\1230pc" Намеренно забегу вперед и расскажу об использовании
Dim share As String = "123" библиотек, чтобы потом вам не пришлось переделывать на-
Dim err_description As String = "" звания классов и функций. Необходимо определиться с за-
Dim err_code As Integer данием 3-х категорий имен: основным пространством имен
Dim b As _SHARE_INFO_2 всей библиотеки, названиями классов и названиями функ-
Dim bufPtf As IntPtr ций. Рассмотрим поочередно все три категории.
err_code = NetShareGetInfo(server, share, 2, bufPtf)
b = CType(Marshal.PtrToStructure(bufPtf, ↵ Предположим, что мы создали уже библиотеку и хотим
GetType(_SHARE_INFO_2)), _SHARE_INFO_2) ее использовать в другом проекте. Для получения доступа
Select Case err_code к библиотеке необходимо сначала подключить ее к проекту,

№3, март 2006 75


программирование
а затем импортировать пространство имен. Присоединение Private Function _AddShare(ByVal server As String, ↵
ByVal share As String, ByVal path As String, ↵
к проекту, как описывалось ранее, осуществляется с помо- ByVal description As String)
щью пункта меню «Add Reference…» через вкладку «File». Dim a As _SHARE_INFO_2
a.shi2_netname = share
После этого необходимо импортировать пространство имен a.shi2_path = Path
с помощью ключевого слова Imports. Предположим, что мы a.shi2_remark = description
_AddShare = NetShareAdd(Server, 2, a, Nothing)
хотим, чтобы пространство имен было SharedFolders, тогда End Function
команда импорта должна выглядеть так:
Рассмотрим тело основной функции. Поскольку усло-
Imports SharedFolders вились, что будем проверять булевое значение, то необхо-
димо с помощью объекта FSO проверить наличие катало-
Чтобы достичь этого эффекта, необходимо в проекте, га, при указанном булевом значении TRUE. В том случае,
где формируется библиотека, в его свойствах изменить за- если значение равно TRUE, т.е. проверка осуществляет-
данное значение параметра Root namespace на желаемое, ся, то при отсутствии каталога в указанном месте он со-
а именно на SharedFolders (см. рис. 4). здается и предоставляется в сетевой доступ с указанны-
Замечание: в качестве параметра Assembly name ми параметрами.
(см. рис. 4) задается название формируемой DLL-библи- Если же значение FALSE, то проверка на наличие ка-
отеки. талога не осуществляется и подразумевается, что папка
Названия классов, используемые при формировании существует:
библиотек, становятся доступными при импорте пространс-
тва имен данной библиотеки из другого проекта. Dim fso As Microsoft.VisualBasic.FileIO.FileSystem
If flag = True Then
Dim path_exist As String = "\\" + Server + ↵
Формирование функций "\" + Right(Path, Len(1)) + "$" + ↵
Left(Path, Len(Path - 1))
Приведу пример функции в DLL-библиотеки, создающей се- If fso.DirectoryExists(path_exist) = False Then
тевую папку. В том случае, если папка отсутствует, то фун- fso.CreateDirectory(path_exist)
AddShare = _AddShare(Server, Share, ↵
кция, в зависимости от установленного флага, будет ее со- Path, Description)
здавать. End If
Else
Новая функция должна иметь несколько обязательных AddShare = _AddShare(Server, Share, ↵
параметров: Path, Description)
End If
 Имя компьютера, на котором она должна быть создана.
 Путь к локальной папке, которую необходимо предоста- Полный листинг см. на сайте журнала в разделе «Ис-
вить в сетевой доступ. ходный код».
 Имя папки в сети. Если этот параметр не задан, то имя
сетевой папки должно совпадать с физическим именем Вызов созданной функции
папки. из библиотеки
 Описание сетевой папки. Создав и скомпилировав библиотеку, необходимо прове-
 Флаг: 0/1. Если значение 0 – при физическом отсутствии рить работоспособность всех функций библиотеки, создав
папки не создавать ее, 1 – создать папку, если ее нет. тестовый проект и подключив к нему скомпилированную
в DLL-файл библиотеку.
Конечно, количество параметров можно расширить В форме нового проекта создадим кнопку, назвав ее,
или сократить, например, можно уменьшить их количест- например, Add Share, и в процедуру обработки события до-
во, объединив первые три в UNC-путь к папке (\\Server\C$\ бавим следующий текст:
Folder), при условии, что сетевое имя папки берет за осно-
ву ее физическое имя. Dim a As SharedFolder.Manipulate
Dim err_code As Integer
Теперь придумайте название функции, например, err_code = a.AddShare("1230pc","c:\123","123", ↵
AddShare. "TestFolder",True)
MsgBox (err_code)
На первом этапе следеут объявить функцию. Первые че-
тыре параметра имеют строковый формат, флаговое зна- Если в появившемся диалоговом окне вы увидите 0,
чение может быть числовым (0/1) либо булевым(True/False). то на локальном диске С компьютера 1230pc в его корне-
В данной ситуации остановимся на булевом значении: вом каталоге 123 создана сетевая папка 123.
Проверив этот факт, можно убедиться, что скомпили-
Public Function AddShare(ByVal Server As String, ↵ рованная библиотека работает корректно.
ByVal Path As String, ByVal Share As String, ↵
ByVal Description As String, ByVal flag As Boolean) ↵
As Integer Вместо заключения

End Function Используя описанные методы, читатель сможет создавать
свои библиотеки, объединяя в них часто используемые, ес-
Для удобства предлагается поместить операцию вызова ли так можно сказать, скрипты. Благодаря этому скорость
API-функции в отдельную функцию, например _ AddShare. и качество программирования увеличатся. Вместе с тем
Чтобы она была не видна из других приложений, она долж- он сможет использовать хоть и не быстрые, но хорошо из-
на иметь тип Private: вестные и до боли знакомые функции.

76
bugtraq

Множественные уязвимости в Mac OS X сценария в браузер жертвы в контексте безопасности ло-


Программа: Apple Macintosh OS X. кального домена.
Опасность: Критическая. 13. Ошибка в Safari в LaunchServices может позволить
Описание: 1. Уязвимость существует в automount. Удален- злоумышленнику выдать злонамеренный файл за безо-
ный пользователь, контролирующий файловый сервер, мо- пасный и выполнить его на системе, если включена опция
жет заставить уязвимую систему смонтировать файловую «Open safe files after downloading».
систему, содержащую зарезервированные адреса. Удач- 14. Межсайтовый скриптинг возможен в компоненте
ная эксплуатация уязвимости позволит злоумышленнику Syndication (Safari RSS). Удаленный пользователь может
вызвать отказ в обслуживании или выполнить произволь- выполнить произвольный код сценария в браузере жерт-
ный код на целевой системе. вы в контексте безопасности уязвимого сайта.
2. Обход каталога существует в BOM framework из-за URL производителя: www.apple.com.
ошибки при обработке некоторых архивов. Удаленный поль- Решение: Установите исправление с сайта производите-
зователь может с помощью специально сформированно- ля.
го архива распаковать файлы в произвольную директо-
рию на системе. Переполнение буфера в LISTSERV
3. Небезопасное создание временных файлов обнару- Программа: LISTSERV 14.3 и 14.4, возможно более ран-
жено в приложении passwd. Локальный пользователь мо- ние версии.
жет с помощью специально сформированной символичес- Опасность: Высокая.
кой ссылки перезаписать произвольные файлы на системе Описание: Уязвимость существует из-за неизвестной
с привилегиями пользователю root. Пример: ошибки при проверке границ в сценарии WA CGI. Удален-
Apple Mac OS X "/usr/bin/passwd" Binary Local Privilege ↵ ный пользователь может вызвать переполнение буфера
Escalation (root) Exploit и выполнить произвольный код на целевой системе. Под-
4. Директории пользователя монтируются небезопас- робности уязвимости не сообщаются.
ным образом при создании FileVault-образа. Удаленный URL производителя: www.lsoft.com.
пользователь может получить неавторизованный доступ Решение: Установите последнюю версию (14.5) с сайта
к файлам. производителя.
5. Обнаружена ошибка в IPSec при обработке опреде-
ленных состояний ошибок. Удаленный пользователь может Переполнение буфера
аварийно завершить работу VPN-соединений. в RevilloC MailServer
6. Переполнение динамической памяти обнаружено Программа: RevilloC MailServer 1.21, возможно другие вер-
в компоненте LibSystem при обработке запроса на боль- сии.
шое количество памяти. Удаленный пользователь может Опасность: Высокая.
с помощью специально сформированного запроса выпол- Описание: Уязвимость существует при обработке вход-
нить произвольный код на целевой системе. ных данных в команде USER в службе POP3. Удаленный
7. Download Validation в Mail-компоненте не предупреж- пользователь может с помощью специально сформиро-
дает пользователя об открытии небезопасного вложения ванного имени пользователя вызвать переполнение дина-
при двойном щелчке по файлу. мической памяти и выполнить произвольный код на целе-
8. Уязвимость существует из-за того, что Perl некоррек- вой системе.
тно сбрасывает привилегии, если приложение использует URL производителя : w w w.revilloc.com /mailser ver/
выражение «$< = numeric_id;» для установки uid. default.asp.
9. Переполнение динамической памяти обнаружено Решение: В настоящее время способов устранения уязви-
в приложении rsync при передаче расширенных атрибутов. мости не существует.
Авторизованный пользователь может вызвать отказ в об-
служивании приложения или выполнить произвольный код Переполнение буфера в службе IMAP
на целевой системе. в Mercur Messaging
10. Переполнение динамической памяти обнаружено Программа: Mercur Messaging 2005 5.0 SP3
в WebKit при обработке HTML-кода. Удаленный пользова- Опасность: Средняя.
тель может с помощью специально сформированной веб- Описание: Уязвимость существует из-за ошибки провер-
страницы выполнить произвольный код на целевой сис- ки границ при обработке IMAP-команд. Удаленный поль-
теме. зователь может с помощью команд LOGIN и SELECT вы-
11. Переполнении стека обнаружено в браузере Safari звать переполнение стека и выполнить произвольный код
при обработке JavaScript-кода. Удаленный пользователь на целевой системе.
может с помощью специально сформированной веб-стра- URL производителя: www.atrium-software.com.
ницы, содержащей злонамеренный JavaScript, выполнить Решение: В настоящее время способов устранения уязви-
произвольный код на целевой системе. мости не существует.
12. Уязвимость обнаружена в модели безопасности бра-
узера Safari при обработке HTTP-перенаправлений. Уда- Составил Александр Антипов
ленный пользователь может выполнить произвольный код

№3, март 2006 77


программирование

Работаем с PDF из Perl


Бытует мнение, что PDF – это закрытый формат, для работы с которым необходимо
дорогостоящее ПО. Это не вполне верно: спецификация PDF доступна всем желающим,
а для создания и правки файлов можно применять не только настольные издательские
системы, но и сценарии Perl.

Валентин Синицын

М
одуль PDF::API2 (http://pdfapi2. ше, Encode и Compress::Zlib (если что- удобным для вас способом. Послед-
sf.net) разрабатывается Аль- то и придется установить, то только ней на момент написания статьи вер-
фредом Райбенщухом (Alfred последний из них). Модуль использует сией была 0.51.
Reibenschuh) и распространяется стандартную объектную нотацию Perl 5 Поставляемая вместе с PDF::API2
по лицензии GNU GPL. PDF::API2 на- и доступен как через CPAN, так и че- документация насчитывает более
писан на чистом Perl и имеет мини- рез репозитарии ActiveState PPM, по- 160 страниц, большая часть из кото-
мум зависимостей: Perl 5.8.4 или вы- этому может быть установлен любым рых не имеет практической ценности.

78
программирование
Для повседневной работы вам потребуются лишь страни- дюйма, что примерно соответствует типографскому пунк-
цы PDF::API2, ::Content, ::Page и ::Util, где перечислены зна- ту (pt). Вы можете перенести начало отсчета в другую точ-
чения различных констант. ку (translate), повернуть оси на некоторый угол (rotate), из-
PDF::API2 не является средством для редактирования менить масштаб (scale) или скосить их (skew). Напомним,
PDF в прямом смысле этого слова – он не предоставляет что порядок применения этих операций имеет значение:
специальных методов для «поиска и замены» существую- перенос и поворот – это совсем не то же самое, что пово-
щих элементов (например, картинок). Однако с его помощью рот и перенос. Изменения системы координат непосредс-
вы легко можете создавать собственные PDF-файлы, а так- твенно сказываются на выводимых объектах: так, надпись,
же обрабатывать и дополнять уже существующие. Как мы расположенная вдоль оси X в повернутой системе коорди-
вскоре увидим, этого достаточно для решения весьма ши- нат, будет идти под некоторым углом к краю страницы. Ес-
рокого круга задач. Другое ограничение – невозможность ли система координат была перенесена на N пунктов влево
работать с зашифрованными PDF-файлами. Видимых пре- и M пунктов вверх, окружность, центр которой якобы нахо-
пятствий этому нет – программа дешифровки PDF на Perl дится в начале (0,0), будет изображена в окрестности точ-
(http://www.cs.cmu.edu/~dst/Adobe/Gallery/pdfdecrypt.pl) за- ки с координатами (M,N) и так далее.
нимает менее двухсот строк кода. «Альтернативный» мо- Геометрическая плоскость, на которой введена наша
дуль CAM::PDF (http://search.cpan.org/~clotho/CAM-PDF-1.05), система координат, бесконечна, однако в реальном мире
который, по моему мнению, проигрывает PDF::API2 в удобс- все имеет свой предел. Стандарт PDF предусматривает не-
тве использования, также справляется с этой задачей безо сколько различных типов границ, наиболее важными из ко-
всякого труда. Возможно, этот функционал будет реализо- торых являются граница физической страницы (MediaBox)
ван в следующих версиях модуля. и граница видимой области (CropBox). Каждая из них зада-
Прежде чем мы приступим к обсуждению констант ется четверкой чисел, представляющих собой координаты
и функций, давайте поближе познакомимся с форматом левого нижнего и правого верхнего углов прямоугольной
PDF версии 1.4, с которой и работает PDF::API2. области в системе координат по умолчанию. Если CropBox
не задан явно, он принимается равным MediaBox.
Экранная модель PDF Теперь, когда мы бегло познакомились с экранной мо-
Основой для эффективной работы с PDF является понима- делью PDF, можно переходить к изучению функций модуля
ние его экранной модели (imaging model). Аналогичные кон- PDF::API2, реализующих работу в ней на языке Perl
цепции лежат в основе многих современных API для рабо-
ты с векторной графикой, например, Cairo и Arthur, так что Здравствуй, мир!
кое-какие представления о них в любом случае окажутся По сложившейся традиции, мы начнем свое рассмотре-
нелишними. ние с программы «Hello, World». Данный пример был взят
Спецификация PDF 1.4 предусматривает четыре типа из стандартного дистрибутива PDF::API2, но слегка моди-
объектов, которые могут отображаться на странице: кон- фицирован, чтобы лучше отражать отечественные реалии.
туры (path object), текст (text object) и растр (image object). Конечно, при практическом наборе кода номера строк (01:,
Особняком стоит область отсечения (current clipping path) – 02:, ...) необходимо опустить; мы также не используем стро-
специальный контур, в пределах которого возможна отри- гий режим (use strict), чтобы слегка уменьшить объем сце-
совка объектов. Любые фигуры или их части, выходящие нариев и повысить их удобочитаемость.
за пределы данной области, отсекаются, откуда и проис-
ходит это название. Пример 1
Для описания объектов всех четырех типов и работы 01:#!/usr/bin/perl
с ними в PDF служит специальный язык, по своим функци-
02:use PDF::API2;
ям аналогичный PostScript. Например, для отрисовки кон-
тура используется оператор S (stroke), а для его заливки – 03:use constant mm => 25.4/72;
04:use constant cm => 2.54/72;
f (fill) (здесь нет никакой опечатки – операторы «языка PDF» 05:use constant in => 1/72;
в большинстве своем одно- и двухбуквенные). Как нетрудно 06:use constant pt => 1;
видеть, у этих операторов нет параметров. Точки, образую- 07:$pdf = PDF::API2->new;
щие контур, задаются заранее, а такие атрибуты, как тол-
08:$fnt = $pdf->corefont('Verdana', -encode => 'cp1251');
щина соединяющей их линии, ее цвет и цвет заливки оп-
ределяются текущим графическим состоянием (graphics 09:$page = $pdf->page;
10:$page->mediabox('A4');
state). Одним из наиболее важных элементов этого состо-
яния является матрица преобразования системы коорди- 11:$gfx = $page->gfx;
нат (current transformation matrix, CTM), определяющая теку- 12:# Выводим текстовую метку
щее положение декартовых осей. Думается, читатели, име- 13:$gfx->textlabel(210/mm/2, 297/mm/2, $fnt, 12, ↵
'Здравствуй, мир !');
ющие опыт программирования трехмерной графики, испы-
тали чувство дежа-вю, и не зря: аналогия с OpenGL/Direct3D 14:$pdf->saveas('helloworld1.pdf');
15:$pdf->end;
налицо, разве что все преобразования координат в PDF бу-
дут двумерными. По умолчанию, система координат имеет Строки 1-2, будем надеяться, в особых комментариях
начало в левом нижнем углу листа, ось X направлена впра- не нуждаются. В строках 3-6 задаются стандартные кон-
во, ось Y – вверх. За единицу измерения принимается 1/72 станты, выражающие миллиметр (mm), сантиметр (cm),

№3, март 2006 79


программирование
по умолчанию используется стандартный для США размер
Letter. Помимо псевдонима «A4» в методе mediabox мож-
но использовать пару (ширина, высота) или ту самую чет-
верку чисел, о которой говорилось в предыдущем разде-
ле. Подготовительные операции завершаются создани-
ем графического объекта $gfx (можете рассматривать его
как холст – canvas) в строке 11.
В строке 13 мы вызываем метод textlabel – это самый
простой (но не самый гибкий) способ создания текстового
объекта, который будет расположен в точке с координата-
ир !

ир !
й, м

й, м ми 210/mm/2, 297/mm/2 (т.е. в центре листа. Обратите вни-


тву

тву
!
р
мание на использование константы mm для перевода мил-
!
ми
авс

авс

ир
й,
м
ву
й,
Зд р

Зд р

вст
ву
ра
вс
т
лиметров в пункты) и отрисован шрифтом $font (Verdana)
Зд
ра
высотой 12 пунктов. В строках 14 и 15 происходит запись
Зд

Здравствуй, мир !
PDF-документа на диск и разрушение объекта.
Здравствуй, мир !

Зд
ра На первый взгляд подготовительный этап может пока-
Зд
вс
ра
тв
вс
Здр

Здр

уй
заться чересчур трудоемким, но давайте не будем спешить
тв
,
й, у
ми
ав

авс

р
ми
!
и займемся усовершенствованием этого, в общем-то, очень
ств

р
т

!
вуй
й, м у

простого примера. Заменим строки 12-13 на:


, ми
ир

р!
!

Пример 2:

01:$n = 10;
02:$R = 50;

# $n текстовых меток по кругу


03:$gfx->translate(210/mm/2, 297/mm/2);
04:for $i (1..$n) {
05: $gfx->rotate(360/$n);
06: $gfx->textlabel($R, 0, $fnt, 12, 'Здравствуй, мир !');
07:}

Здесь мы перемещаем начало отсчета в центр листа


Рисунок 1. Результат работы сценария helloworld1.pl
(строка 3), а затем выводим в цикле 10 текстовых меток,
дюйм (in) и пункт (pt) в принятых в PDF единицах измере- каждый раз поворачивая систему координат на 36 градусов
ния. Рекомендую включать их во все ваши скрипты. Нако- относительно предыдущего положения (строка 5). Что полу-
нец, в строке 7 создается объект PDF::API2, с которым мы чится в результате? Правильно – десять радиально расходя-
и будем работать. Каждому такому объекту может соот- щихся надписей «Здравствуй, мир!». Отступ на $R пунктов
ветствовать не более одного PDF-документа. В строке 8 по оси X (в повернутой системе координат!) нужен для то-
мы выбираем шрифт, который будет использоваться для го, чтобы начальные буквы фразы не накладывались друг
вывода текста. Параметр -encode может принимать лю- на друга (см. рис. 1).
бое значение, известное модулю Encode вашей инсталля- Полученная нами картинка уже неплоха, но здесь явно
ции Perl и, конечно, совпадающее с кодировкой символов напрашивается что-то большее. Давайте добавим в наш
в вашем сценарии. Метод corefont указывает, что нам ну- документ геометрические фигуры (в терминологии PDF –
жен один из «базовых» шрифтов, лицензированных ком- контуры) и раскрасим их в различные цвета!
паниями Adobe и Microsoft для свободного распростране- Вставьте данный кусочек кода после строки 2 в преды-
ния, а посему потенциально доступными на любой системе. дущем примере:
Помимо Verdana, сюда входят Georgia, Webdings, Wingdings
(набор «Windows Fonts»), Courier, Helvetica, Symbol, Times, Пример 3
ZapfDingbats (набор «Adobe Core Fonts») и их разновиднос- # Синий фон
ти: жирный, курсив и так далее. 01:$gfx->fillcolor('blue');
02:$gfx->rectxy($page->get_mediabox);
К сожалению, текущая версия PDF::API2 умеет коррек- 03:$gfx->fill(1);
тно отображать русский текст лишь шрифтами Verdana
# Желтый круг в центре страницы
и Georgia – для остальных гарнитур отсутствует информа- 04:$gfx->fillcolor(‘yellow’);
ция о ширине символов, в результате чего буквы слипают- 05:$gfx->circle(210/mm/2, 297/mm/2, 0.95*$R);
06:$gfx->fill(1);
ся (см. врезку «Изъясняемся по-русски»).
Кроме core-шрифтов, PDF::API2 может использовать В строке 1 задается одно из свойств текущего графи-
произвольные шрифты TrueType, PostScript и BDF, предо- ческого состояния – цвет заливки (fillcolor). Строка 2 опре-
ставленные пользователем в виде файлов. В этом случае деляет прямоугольник, в точности совпадающий с нашей
шрифт внедряется в PDF-документ. страницей (поскольку координаты его вершин возвраща-
В строке 9 мы добавляем в конец нашего, пока еще пус- ются методом get_mediabox). Наконец, в строке 3 дает-
того документа чистую страницу, а в строке 10 устанавлива- ся команда закрасить ранее определенный контур (пря-
ем ее размер, равный странице формата A4 (210x297 мм) – моугольник) цветом, установленным последним вызовом

80
программирование
fillcolor (синим). До вызова метода fill наш прямоугольник
не отображается на странице. Более того, заменив вызов fill
на stroke, мы получим незакрашенный прямоугольник, пос-
троенный по тем же самым точкам. Это является следстви-
ем того, что операторы S и f не имеют собственных вход-
ных параметров, а используют заданные ранее значения.
Аналогичным образом в строках 4-6 строится желтый круг
радиуса 0.95*$R.
Сохраните сценарий и запустите его на выполнение. Ес-
ли вы не допустили ошибок при наборе исходного текста,

ир !

ир !
й, м

й, м
ваши старания будут вознаграждены! На синем небе яр-

тву

тву
!
ко засияет солнышко, каждый лучик которого шлет привет р
!
ми

авс

авс
р
ми
й, уй,
тв
этому, а может быть, и другим мирам (см. рис. 2).

Здр

Здр
у
вс
тв
ра
вс
Зд
ра
Конечно, возможности PDF::API2 никоим образом не ог- Зд

Здравствуй, мир !
раничиваются рассмотренными здесь вызовами. Всю не- Здравствуй, мир !

Зд
обходимую информацию вы можете найти в документа- вс
ра
Зд
ра
в ст
ву

Здр

Здр
ции. От себя добавлю, что в сценариях для «серьезной»
тв
уй й,
,м ми

авс

авс
р
работы с текстом возможностей, предоставляемых мето-
ир
!

тву

т
!

вуй
й
дом textlabel, может оказаться недостаточно. Поэтому ес-

, ми

, ми
ли вы намерены составить конкуренцию TeX или Adobe

р!

р!
InDesign, советуем ознакомиться со статьей [1], в которой
подробно рассмотрен процесс верстки и добавления ил-
люстраций.

Квитанции, брошюры и все-все-все


Простым созданием документов в формате PDF (пусть да-
же таких красивых, как наше солнышко), сейчас уже нико-
го не удивишь. Однако модификация существующих фай-
лов по-прежнему остается уделом избранных. Что ж, поп-
Рисунок 2. Результат работы сценария helloworld2.pl
робуем приоткрыть завесу тайны и с удивлением обнару-
жим, что все необходимое у нас уже есть. $pdf->openpage, открывающему уже существующую. Кста-
Начнем с такой распространенной задачи, как заполне- ти, номер страницы (в нашем случае 1) может быть и от-
ние бланков: счетов в интернет-магазинах, квитанций, анкет рицательным – это означает, что вы ведете отсчет не с на-
и т. п. Для этих целей вполне сгодится наш первый пример. чала документа, а с конца. Файл blank.pdf мы подготовили
Единственное, что нужно сделать, – заменить создание но- в обычном текстовом процессоре с возможностью экспор-
вого документа открытием уже существующего: та PDF, а расположение полей для заполнения определи-
ли, используя его «линейки» (297мм – высота листа фор-
Пример 4 мата A4, отступы отсчитываются от левой и верхней гра-
01:#!/usr/bin/perl ниц страницы) (см. рис. 3).
Другой весьма широкий класс задач – так называемый
02:use PDF::API2;
пост-процессинг PDF-документов: поворот страниц, обре-
03:use constant mm => 25.4/72; зание полей (crop), слияние нескольких документов в один
04:use constant cm => 2.54/72;
05:use constant in => 1/72; и извлечение страниц, а также извечная проблема любите-
06:use constant pt => 1; лей электронных книг – брошюровка (называемая в наро-
07:$pdf = PDF::API2->open("blank.pdf"); де «верстка книжкой»). Рассмотрим каждую из этих задач
08:$font = $pdf->corefont("Georgia-Italic", ↵ по очереди. Во всех последующих сценариях, где это не-
-encode => cp1251);
обходимо, подразумевается «преамбула» в объеме строк
09:$page = $pdf->openpage(1); 1-6 примера 4.
10:$gfx = $page->gfx;
11:$gfx->textlabel(3.20/cm, 297/mm-3.30/cm, $font, 12, ↵
"Иванов И.И."); Поворот страниц
12:$gfx->textlabel(6.0/cm, 297/mm-3.80/cm, $font, 12, ↵
"Голодающим детям Африки");
13:$gfx->textlabel(3.05/cm, 297/mm-4.80/cm, $font, 12, ↵ 01:$pdf = PDF::API2->open("document.pdf");
"01.01.1970"); 02:for $i (1..$pdf->pages) {
03: $pdf->openpage($i)->rotate(90);
14:$pdf->saveas("receipt.pdf"); 04:}
15:$pdf->end; 05:$pdf->saveas("document_new.pdf");
06:$pdf->end;
Нетрудно видеть, что вместо метода PDF::API2->new
здесь используется open, принимающий в качестве пара- Мы пробегаем в цикле все страницы данного доку-
метра имя существующего PDF-файла. Вызов $pdf->page, мента (их число возвращает метод pages) и для каждой
создающий новую пустую страницу, уступил место методу из них вызываем метод rotate. Отметим, что он отличает-

№3, март 2006 81


программирование
го лишь устанавливает определенный параметр в свойс-
твах страницы.
Иванов И.И.
Голодающим детям Африки Слияние документов и извлечение страниц
01.01.1970 Чтобы решить эту задачу, нам придется поднапрячься и со-
вершить качественный скачок – начать работать с дву-
мя объектами PDF::API2 одновременно. В общем случае
нам необходимо создать документ-источник и документ-
приемник, а затем перенести страницы с помощью метода
importpage. Если документ-приемник ранее не существовал
(то есть был создан в процессе работы сценария), мы име-
ем дело с извлечением страниц, в противном случае нали-
цо (частичное) слияние двух документов.

01:#!/usr/bin/perl

02:use PDF::API2;

03:$source = PDF::API2->open("document.pdf");
04:$dest = PDF::API2->new;
#или PDF::API2->open("document2.pdf");

05:@pages = (1, -1);


06:for $page (@pages) {
07: $dest->importpage($source, $page, $dest->page);
08:}

09:$dest->saveas("document_new.pdf");
10:$dest->end;
11:$source->end;

В строке 5 мы перечисляем страницы, которые будут им-


портированы из $source в $dest. В данном случае нас инте-
ресуют только первая и последняя. Всю необходимую рабо-
Рисунок 3. Заполненная квитанция
ту выполняет метод importpage (строка 7), на вход которого
ся от рассмотренного нами ранее метода rotate объекта подаются объект-источник ($source), номер страницы в ис-
$page->gfx. Во-первых, здесь допустимы повороты толь- ходном документе ($page) и номер страницы в документе-
ко на углы, кратные 90 градусам. Во-вторых, вызов мето- приемнике или объект типа PDF::API2::Page, «в который»
да $page->rotate не меняет текущую матрицу преобразо- будет помещена импортированная страница. Мы использу-
вания (CTM), а устанавливает особый параметр страницы ем результат вызова $dest->page, который, напомним, до-
(можете думать о нем, как о флажке «книжной/альбомной» бавляет новую страницу в конец документа $dest. Следу-
ориентации) и, таким образом, влияет на вид системы ко- ет отметить, что созданные таким образом страницы име-
ординат по умолчанию. Так, в нашем случае ее начало на- ют кое-какие ограничения – например, их нельзя импорти-
ходится в левом верхнем углу страницы, оси направлены ровать в другой документ (тому есть свои причины) до тех
вправо и вниз. Попробуйте нарисовать на каждой стра- пор, пока они не будут сохранены в реальном файле, а за-
нице квадрат с вершинами (0,0) – (100,100), и вы поймете, тем заново открыты методом openpage. Если это для вас су-
что имеется в виду. щественно, создайте пустой одностраничный PDF-документ
любым доступным способом (например, в OpenOffice.org)
Обрезание полей и каждый раз импортируйте его единственную чистую стра-
ницу вместо вызова метода page.
01:$pdf = PDF::API2->open("document.pdf");
02:for $i (1..$pdf->pages) {
03: $pdf->openpage($i)->cropbox(3/cm, 3/cm, ↵ Брошюровка
210/mm-3/cm, 297/mm-3/cm); Теперь мы можем перейти к наиболее сложной из заяв-
04:}
05:$pdf->saveas("document_new.pdf"); ленных нами задач – брошюровке. Этот процесс состоит
06:$pdf->end; из двух этапов. На первом из них создается набор пар –
номеров страниц, подлежащих распечатке на одном лис-
Нетрудно видеть, что решение этой задачи полностью те (с двух сторон).
аналогично предыдущему. Всю работу выполняет метод Идея проста: исходный документ дополняется пустыми
cropbox, «отхватывающий» по 3 сантиметра от каждого края (или рекламными) страницами так, чтобы их общее чис-
листа формата A4 (в настоящей программе было бы разум- ло N было кратно 4, затем страницы группируют следую-
но получать текущие размеры каждой страницы при помо- щим образом: (N,1), (2, N-1), (N-2, 3) до тех пор, пока пер-
щи метода get_mediabox). Если сейчас вы подумали об об- вое число в паре меньше второго. Затем каждая пара со-
ласти отсечения (clipping path), то, к сожалению, ошиблись: ответствующим образом уменьшается и копируется на пе-
она здесь ни при чем. Подобно методу rotate, cropbox все- чатный лист.

82
программирование
01:$source = PDF::API2->open("document.pdf");
02:$dest = PDF::API2->new; «Изъясняемся по-русски»
03:$left = 1; «Слипание» букв русского алфавита происходит из-за того, что
04:$right = ($source->pages % 4 == 0) ? $source->pages : ↵ PDF::API2 не обладает достаточной информацией о их ширине
$source->pages + (4 - $source->pages % 4);
05:$reversed = 1; в каждом конкретном шрифте. Существует несколько способов
06:while ($left < $right) { исправить «заморский акцент» PDF::API2:
07: $page = $dest->page;
08: $page->mediabox(297/mm, 210/mm);  Использовать только core-шрифты Verdana и Georgia – для них
09: $page->rotate(90); эти сведения имеются.
10: draw_page($source, $left, $dest, -1, $reversed);  Использовать встраиваемые шрифты TrueType или PostScript.
11: draw_page($source, $right, $dest, -1, !$reversed) ↵ Здесь также не исключены проблемы, но они куда менее ве-
if ($right <= $source->pages);
12: $left++; $right--; $reversed = !$reversed; роятны – вся информация берется непосредственно из фай-
13:} лов шрифтов.
14: $dest->saveas("document_book.pdf");  Добавить в файлы PDF/API2/Resource/Font/Corefont/*.pm
15:$dest->end; информацию о ширине символов кириллицы (U+0x04NN).
16:$source->end;
Это не так-то просто, но если вы все же справитесь с этой
Этот кусочек кода реализует первую половину на- задачей – не забудьте отправить «заплатку» автору модуля,
шего плана. В переменной $left хранится номер первой, и благодарное сообщество вас не забудет.
а в $right – второй страницы текущей пары. Строка 4 вкупе
с условием if в строке 11 эквивалентна добавлению нужно- Метод importPageIntoForm в строке 3 возвращает нуж-
го числа пустых страниц в конец документа $source. Флаг ную нам страницу исходного документа в виде «непрозрач-
$reversed определяет, где на печатном листе будет распо- ного» объекта X-Object. С такими объектами можно выпол-
ложена страница с меньшим номером – слева или справа. нять различные преобразования и располагать их в любом
Интерес также представляют строки 7-9: здесь мы добав- месте страницы, но узнать, что находится у них внутри, не-
ляем в $dest новую страницу формата «перевернутый A4» льзя. Условие в строках 5-7 выясняет, был ли для исход-
и тут же поворачиваем ее на 90 градусов. Таким образом ной страницы установлен CropBox (иными словами – бы-
мы получаем обычную страницу формата A4 с необычной ли ли обрезаны поля), и, если это так, создает на основе
системой координат, так что все помещенные на нее объек- этой информации область отсечения для объекта X-Object
ты будут «лежать на боку». Фактической отрисовкой страни- (иначе эта информация будет потеряна – X-Object включа-
цы занимается подпрограмма draw_page, которая принима- ет в себя лишь содержимое страницы, но не ее свойства,
ет пять параметров: объект-источник ($pdf_in) и номер ис- где, как мы помним, находится поле CropBox). К сожале-
ходной страницы ($in_idx), объект-приемник ($pdf_out) и но- нию, в текущей реализации PDF:API2 не существует мето-
мер страницы-«печатного листа» ($out_idx), а также пози- да get_cropbox, поэтому данную информацию приходится
цию на печатном листе (0 – слева, 1 – справа): извлекать таким «низкоуровневым» способом. В строках
8-10 мы находим ширину и высоту импортируемого объек-
01:sub draw_page { та и затем вычисляем по ним коэффициенты масштабиро-
02: my ($pdf_in, $in_idx, $pdf_out, $out_idx, ↵
$position) = @_; вания (строки 11-13, обратите внимание, что подпрограм-
ма может работать с любыми размерами исходных стра-
03: my $xo = $pdf_out->importPageIntoForm($pdf_in, ↵
$in_idx); ниц и печатных листов). Условие в строках 15-24 обеспе-
04: my $pg_out = $pdf_out->openpage($out_idx); чивает пропорциональность масштабирования, а метод
05: if (my $cropbox = ↵ formimage в строке 25 отображает уменьшенную копию
$pdf_in->openpage($in_idx)->find_prop("CropBox")) { страницы на печатном листе.
06: $xo->bbox(map {$_->val} $cropbox->elementsof);
07: } Ну вот и все! Теперь осталось только распечатать по-
лученную книжку и отнести в ближайший копи-центр для
08: my @ps = map {$_->val} $xo->{BBox}->elementsof;
09: my $bbox_width = $ps[2] - $ps[0]; сшивания, а используя этот сценарий вместе с програм-
10: my $bbox_height = $ps[3] - $ps[1]; мой для извлечения страниц, можно распечатать и удобно
11: my (undef, undef, $page_width, $page_height) = ↵
$pg_out->get_mediabox; сшить даже самый монументальный труд. Удачи!
Все обсуждаемые примеры можно загрузить с сайта
12: my $scale_x = $page_width/(2*$bbox_width);
13: my $scale_y = $page_height/$bbox_height; журнала http://samag.ru в разделе «Исходный код».
14: my ($scale, $x, $y);

15: if ($scale_x <= $scale_y) { Ссылки


16: $scale = $scale_x; 1. http://www.printaform.com.au/clients/pdfapi2 – несколько ус-
17: $x = 0;
18: $y = ($page_height - $scale*$bbox_height)/2; таревшая, но не потерявшая актуальности статья, деталь-
19: } но рассматривающая вопросы верстки текста с помощью
20: else {
21: $scale = $scale_y; PDF::API2.
22: $x = ($page_width/2 - $scale*$bbox_width)/2; 2. http://partners.adobe.com/public/developer/pdf/index_reference.
23: $y = 0;
24: } html – здесь можно загрузить официальную спецификацию
формата PDF от Adobe.
25: $pg_out->gfx->formimage($xo, $x - $ps[0] + ($position ↵
? $page_width/2 : 0), 26:$y - $ps[1], $scale); 3. http://www.accesspdf.com/pdftk – домашняя страница PDF
27:} Toolkit – открытой программы для обработки PDF-файлов.

№3, март 2006 83


хобби

Коллекция «Почему?»
Куда все делось и откуда что берется -
Одновременно два вопроса не решить…

Ïî÷å Владимир Высоцкий

ìó?
Каждый пишет, как он слышит,
каждый слышит, как он дышит,
как он дышит, так и пишет,
не стараясь угодить...

Почему?
Булат Окуджава

Почему? Поч е м у ?

Почему
? Почем
ч е м у ? у?
Почему? П о Почему?
Конечно же, Алексей Коршунов – системный администратор. Но при этом еще и коллекционер.
Правда, не совсем обычный: в его собрании – не пивные пробки, использованные телефонные
карты или отбитые носики от антикварных фарфоровых чайников. Алексей коллекционирует
философские вопросы и не менее философские ответы. А еще он пишет задумчивые
рассказы, где главные герои – говорящие лягушки, ожившие поезда и материализовавшееся
Время – размышляют о несовершенном величии и величественном несовершенстве мира.
Вот такой системный коллекционер получается…

…«Через неделю «новый поезд будущего», наспех переиме- Как только Алексей научился складывать буквы в слова,
нованный в «Экспериментальную разработку», перегнали а случилось это, как вы понимаете, довольно давно, он тут
на завод-производитель. Никто не пытался понять, с чего же начал писать рассказы. Как водится, первые опыты от-
это вдруг кусок железа стал вести себя как разумное сущес- давали подражанием – приключения Алисы Селезневой
тво. Гордыня людей не позволяла допустить даже мысли, в исполнении Кира Булычева произвели на мальчика Але-
что есть еще кто-то мыслящий, кроме них самих… А Ижику, шу столь неизгладимое впечатление, что он, недолго ду-
отключенному от основного питания, все снилось, как ра- мая, тут же сочинил четыре тетрадки собственных про-
достные пассажиры заполняют его вагоны и все вместе должений. Чуть позже стали появляться собственные ори-
поют песни, пока он мчит их до далекой, но такой близкой гинальные сюжеты, что-то из «раннего» Алексей хранит
следующей станции»… до сих пор, что-то в приступе творческой неудовлетворен-

84
хобби

«Почемучка» из жизни максимум, поняв «что, зачем и по- Жизнь проходила мимо, а Почемучка
Почемучка никогда не был спокойным ре- чему». Но жизнь меняет всех, и даже наш все не мог понять, «что, зачем и почему»
бенком. Он просыпался и засыпал с одним герой не исключение. происходит так, а не иначе. Он стал запи-
и тем же вопросом: «Почему?». Казалось, Время научило, что не все советы по- сывать свои мысли в надежде, что кто-то
нет ничего важнее в жизни, чем вовре- могают людям, не всякая критика приводит найдет для себя в них что-то интересное.
мя узнать «что, зачем и почему». В мире к улучшениям, а друзья не всегда готовы Он сдул пыль с умных книг и погрузил-
столько всего интересного, и надо везде мириться с вечными нравоучениями, щед- ся в поиск ответа на ненавистный воп-
успеть. Все узнать, все понять. Прочитать ро разбавленными огромным самомнени- рос. Почемучка не мог начать менять свою
все книжки и поговорить со всеми людь- ем. Да и цель в жизни как-то потерялась… жизнь, не поняв «что, зачем и почему».
ми. В детском саду Почемучка был за- Надо было что-то менять, но Почемучка Почемучка бежал вприпрыжку от счас-
водилой, в школе – лидером. Его обожа- привык советовать другим, а не действо- тья, как будто ему снова 15 лет, ведь он по-
ли учителя, и уважали сверстники. К не- вать сам. нял, понял «что, зачем и почему»! Теперь-то
му приходили с бедами, заслушивались Жизнь шла, а Почемучка все был в сом- уж он не упустит своего счастья! Теперь он
его советами. нениях, ведь он много-много раз говорил все изменит, и мир никогда не будет пре-
Почемучка всегда знал, чего хочет, другим: действовать можно, только поняв жним!.. Визг тормозов и удар о лобовое
и стремился к своим целям, которые меня- «что, зачем и почему». Уже не так охотно стекло прервали жизнь впервые не посмот-
лись со скоростью звука очередного, зада- слушали его советы, а друзья вечно ссыла- ревшего по сторонам Почемучки.
ром отданного совета. Он пылал энергией лись на занятость делами. Почемучка за- В удивленных глазах остывал вопрос:
жизни и не мог сидеть на месте. Мирить- грустил. Некого стало учить жизни, некому «Что? Зачем? Почему?».
ся с судьбой Почемучка не умел и не хо- стало пенять на безделье и малодушие. Из-
тел, он гнул ее под себя и старался выжать вечный вопрос стал проклятием… 27 августа 2004 г.

ности было азартно порвано или сожжено. Кто не прохо- радостнее и веселее. Конечно, все эти рассказы обо мне
дил через это?.. самом, это мои собственные поиски. Я не пытаюсь пере-
И по сей день страсть переносить свои сомнения и раз- делать мир или что-то в нем исправить, мне интересно, по-
думья на бумагу, то затихает в нем, то разгорается с но- чему так вышло. Почему люди перестают друг друга заме-
вой силой. Было время, когда главным развлечением на- чать – с этим уже ничего не поделаешь, но до причины до-
шего героя были беседы с непременными бабушками, за- копаться непременно нужно.
седающими у каждого уважающего себя подъезда. С не- А публикации до добра не доводят: на меня тут же на-
поддельным любопытством слушал увлекательные исто- чинают сыпаться советы и комментарии, будто я спраши-
рии их жизни – про Сибирь и высокие кабинеты ЦК. И ни- вал чьей-то рецензии.
чего не писал. Кстати, о форуме, где можно прочитать рассказы Коршу-
Просто не хотелось, видимо, копил в себе эти образы нова. Он создал его два года назад. От всех своих сетевых
и впечатления, не растрачивая их попусту. Желание взять- аналогов он существенно отличается полным отсутствием
ся за «перо», «достать чернил и плакать» – оно вообще на- единой темы. И вообще какой-либо темы. Сюда приходят
поминает море, с его приливами и отливами. Как и положе- люди самых разных профессий, интересов и жизненных
но человеку с «системным» мышлением, Алексей уже дав- позиций, есть ветераны Чеченской и даже один – Великой
но вывел закономерность собственной писательской актив- Отечественной войны. Приходят, когда им есть что сказать,
ности: если в жизни его хватает живого общения, встреч, обсудить, но чаще – на что пожаловаться. Когда Алексей
разговоров и эмоций – рассказы писать не хочется. Фило- стал более детально изучать интернет-сообщество – уди-
софские вопросы о природе мироустройства, правда, все вился: по всем законам жанра его форум должен был по-
равно никуда не уходят – как мучили, так и продолжают му- чить в бозе максимум через полгода после рождения. Од-
чить, но придавать им литературную форму желание пропа- нако живет до сих пор, и каждую неделю на нем появляют-
дает. И наоборот: наступает «социальное» затишье, и рас- ся несколько тысяч новых сообщений.
сказы как блины пекутся. – Когда меня спрашивают о целях и задачах форума –
Пишет Алексей исключительно по ночам, лучше всего ничего не могу ответить. Хотя на самом деле цель есть –
работается ему в полнолуние. свести вместе людей, тех, чьи кабинеты расположены
Рассказы – это действительно хобби: на лавры серь- на двадцать пятом этаже и в подвале одного и того же зда-
езного прозаика Алексей не претендует. Он даже не хочет ния. Ведь они на мир смотрят совсем по-разному. Ну раз-
публиковаться, лишь несколько историй вывесил в Сети, ве ж им не полезно встретиться?
на своем форуме, по адресу www.akeeper.ru. Нынче коллекция Коршунова пополнилась очеред-
– Каждый мой герой мучается каким-то вопросом. ным философским утверждением, а значит, совсем скоро
Это некое существо – реже живой человек, который живет на свет появится и очередной литературный выплеск: де-
одной-единственной мыслью, и мысль эту в каждом конк- лая выбор, человек всегда от чего-то отказывается, и ка-
ретном рассказе я и пытаюсь развить. Поезд в метро, ко- кое бы решение мы не принимали – все равно где-то про-
торый не понимает, как люди могут ходить мимо друг дру- играем, прогадаем, останемся в минусе.
га, как мимо пустого места, лягушонок, который думает,
что если он переселится в другое болото, жизнь его станет Анна Николаева

№3, март 2006 85


ретроспектива

История компьютеров «Амига»


Часть вторая: 1995-2006

После смерти Джея Майнера и банкротства компании


будущее Amiga оказалось под вопросом.

Сергей Зуев
В поисках хозяина Escom сразу объявила, что Amiga грузчики, напрямую управлявшие кон-
В начале 1995 года имущество ком- не умерла, и наладила новое произ- троллером дисковода. Однако этот
пании стали распродавать, на права водство Amiga 1200 и Amiga 4000T. просчет так и не был устранен.
обладания популярными торговыми С последними произошла заминка, В 1996 году президентом Amiga Tech.
марками претендовали такие гиганты, в продажу они поступили только в фев- стал староый поклонник Amiga Петро
как Commodore UK, IBM, Dell, Escom, рале следующего года, что подмочило Тищенко. Он объявил о начале разра-
CEI и Samsung. Тендер был выигран не- репутацию компании. Для новых ма- боток новых моделей – Amiga Walker
мецким гигантом по производству IBM шин даже слегка переписали сущес- и Power Amiga. Walker, названный
PC-совместимых компьютеров Escom. твующую AmigaOS 3.0, дав ей номер в честь самой первой игры для Amiga
Новая компания сразу разделила два версии 3.1. У поступивших в продажу Mind Walker, имел весьма оригиналь-
бренда: Commodore стали продавать А1200 оказался не «родной» дисковод. ный дизайн, похожий на пылесос или
обычную периферию к PC (мыши, кла- Escom устанавливала слегка модифи- на шлем Дарта Вейдера. Внутри он
виатуры, колонки и прочее), а подраз- цированные дисководы от IBM PC, из- имел процессор MC68030, 2 Мб Chip-
деление Amiga Technologies – зани- за чего перестали работать програм- памяти, чипсет AGA и мог расширять-
маться разработкой Amiga. мы, использующие нестандартные за- ся через слоты Zorro-3 или, ставшей

86
ретроспектива
тогда популярной, шину PCI. Сторон- твующего парка A1200 и A4000 – и пообещала, что будет использовать
ние производители объявили о нача- это были двухпроцессорные карты ее на своих новых системах Pre/Box.
ле разработок Amiga-клонов. Напри- с MC68040(60) и PowerPC 603e/604e. Поскольку освоить разработку и про-
мер, известная в кругах Mac- и Amiga- Помимо этого фирма объявила о том, изводство такого сложного комплекс-
пользователей компания Phase 5, про- что работы над A/Box не прекраща- ного продукта, как A/Box, было доста-
изводящая процессорные карты, виде- ются и, если бренд Amiga будет за- точно сложно, то решено было для на-
окарты и прочую периферию, объявила брошен, то их новые системы с успе- чала выпустить упрощенные системы
о своем новом компьютере A/Box. Он хом займут нишу Amiga как компью- Pre/Box. По планам они должны были
должен был произвести новую муль- теры с такой же идеологией. В этом содержать один процессор 680x0 и че-
тимедийную революцию, как и сама году были представлены видеокарты тыре PowerPC. Index объявила о разра-
Amiga 10 лет назад. Внутри планиро- на базе чипсета Cirrus Logic от той же ботке своего проекта Inside Out. Пла-
валось устанавливать до четырех про- Phase 5 – CyberVision 64 и от Village нировалось сделать PCI-карту для IBM
цессоров PowerPC 604 с тактовой час- Tronic – Picasso IV. PC, которая содержала бы AGA-чипсет
тотой в 200 МГц (максимум – 500 МГц) К 1996-97 годам компьютеры Amgia и процессор 680LC60 на 75 МГц.
и до 1 Гб памяти с транфером в 1,6 Гб/с окончательно утратили свои ранее На программном рынке тоже тво-
(не сравнимо выше, чем у популярной прочные позиции на рынке компьютер- рилось некоторое оживление: посколь-
тогда EDO RAM – 57,3 Мб/с). Но самым ных развлечений, но несмотря на это, ку были открыты исходные коды Doom
главным в этом компьютере должен в этот период произошел бурный рост и Descent, то моментально появились
был стать чипсет. Phase 5 объявила, новых игр. Появились два неофици- их неофициальные версии для Amiga.
что весь чипсет будет заключен в одну альных релиза Quake и Myst, кото- Еще один знаменательный релиз –
128-разрядную и работающую на час- рые работали практически как слайд- 3D-shooter Genetic Species. Netscape,
тоте в 200 МГц микросхему под назва- шоу (3-4 fps), но к концу года фирма проиграв в коммерческом соревнова-
нием «Caipirinha». Планировалось уб- ClickBoom официально выпустила оп- нии браузеров Microsoft, открыла ис-
рать разделение памяти на две облас- тимизированные версии этих игр. ходные коды своего браузера, чем вы-
ти, сделав единое адресное пространс- Подразделение Gateway 2000, за- звала немалый ажиотаж в сообщес-
тво, поддерживались разрешения до нимающееся Amiga, под руководством тве пользователей Amiga. Фирмой
1600 x 1200 точек на 24 бита с транфе- того же Тищенко в 1997 году объявило DiscreetFX была объявлена неболь-
ром между модулями в 3200 Мб/с. Ко о разработке новой операционной сис- шая награда тому, кто первым порти-
всему прочему обещалась аппарат- темы AmigaOS 3.5. Amiga International рует NN для AmigaOS. Однако это был
ная MPEG-поддержка, Genlock-совмес- объявила, что больше не будет выпус- сложный комплексный продукт, и пер-
тимый выход, два раздельных видеов- кать аппаратное обеспечение, оста- вые значительные шаги в портирова-
хода, аппаратные окна, продвинутый вив эту прерогативу сторонним фир- нии уже Mozilla и FireFox осуществля-
Blitter и DSP-RISC процессор для 3D- мам наподобие Phase 5 или PIOS. ются только в наши дни. Награда же
графики и видеокомпрессии. На рынке сразу появилось несколько за портирование выросла уже до поч-
В июле Escom внезапно объявила Amiga-совместимых машин от Draco, ти 10 тысяч долларов.
о продаже своего имущества компа- Access, Eagle и прочих производите- То время было бумом дот-комов
нии VISCorp, в связи с финансовыми лей. В сентябре 1997 года Gateway и машинно-независимых языков. В се-
проблемами. Последняя сразу оста- объявил о создании нового подразде- редине года было объявлено, что по-
новила проект Walker и начала выпуск ления Amiga Inc., которое должно бы- мимо рынка настольных систем, бренд
комплектов Amiga Magic, которые пред- ло заниматься будущим Amiga. К концу Amiga будет распространяться на рын-
ставляли собой обычную A1200 с мо- года Phase 5 наконец выпустила свои ке встраиваемых и мобильных сис-
демом и 100 часами в IBM.net. Однако новые процессорные карты, а некото- тем. Для этого начали разработку
финансовое положение VISCorp изна- рые сторонние фирмы ( DCE, Micronik) Java-подобной виртуальной машины
чально было шатким, поэтому в дека- объявили о создании Amiga-совмести- AmigaDE. Для настольных компьюте-
бре бренд Amiga был продан очеред- мых компьютеров нового поколения. ров предлагалось выпустить к 2000
ной фирме Quickpak. Последняя на- Маленькая фирма BlitterSoft анонсиро- году новую ОС версии 4.0. В качестве
ладила выпуск A4000T с процессора- вала новый клон BoXeR, который дол- ее основы планировалось взять ядро
ми MC68060 и объявила о своих пла- жен был иметь улучшенный AGA-чип- от Linux или от BeOS, но в итоге оста-
нах о переносе AmigaOS на процессо- сет, выполненный в FPGA и 680x0-про- новились на варианте QNX. Это бы-
ры DEC Alpha. Однако и этой фирме не цессор. ло очень быстрое и компактное ядро,
повезло с Amiga, и бренд отошел в руки Начало 1998 года было украшено которое умещалось в кеш процессо-
корпорации Gateway 2000, которая бы- новыми анонсами: Phase 5 выпустила ра. С процессором новых систем то-
ла дружественной с фирмой Microsoft. графические адаптеры на базе чипсе- же творилась неразбериха. Снача-
Подразделение, занимающееся Amiga, та Permedia 2 для своих новых процес- ла было объявлено об использовании
переименовали в Amiga International. сорных карт, также был объявлен аль- семейства x86 от Intel, однако боль-
янс между Phase 5, Blitter Soft и Index шая часть сообщества опротестова-
Amiga International Information Ltd. о разработке PowerPC- ла переход на «вражеские» процес-
Phase 5 провела демонстрацию но- рас ширения д ля BoXeR. 10 мар - соры, и тогда сообщили, что основой
вых процессорных карт для сущес- та Phase 5 лицензировала AmigaOS будущих компьютеров могут равнове-

№3, март 2006 87


ретроспектива
ченный бренд, то в начале 2000 года
Tao Group и Amino Development выкупи-
ли Amiga. Amino сразу объявила себя
новым владельцем Amiga и даже пере-
именовала себя в Amiga Inc.
26 января 2000 года объявила о сво-
ем банкротстве фирма Phase 5, разра-
ботчик периферии для Mac и Amiga
с 12-летним стажем. Это событие окон-
чательно похоронило все надежды
сообщества на A/Box, Pre/Box и пос-
ледние их разработки – компьютер
Amirage и процессорные карты на базе
PowerPC G3/G4. Права на производс-
тво существующих товаров от Phase 5
перекупил известный немецкий завод
электронной техники – DCE. На кон-
вейер попали все топовые процес-
сорные карты от Phase 5 и периферия
к ним: для A1200 – Blizzard 1240 (про-
цессор 68040), Blizzard 1260 (68060),
Blizzard PPC (040/060 + PowerPC
Рисунок 1. AmigaOS4 beta 603e); для A3/4000 – Cyberstorm PPC
(040/060 + PowerPC 604e); видеокар-
роятно стать решения от многих фирм впоследствии были отменены, но по- ты BlizzardVisionPPC и CyberVisionPPC.
(MIPS, Motorola, Hitachi и пр.) ложили начало новым разработкам DCE обещала продолжить незакон-
Следующий год начался со слия- в этой области. ченные разработки от Phase 5 (напри-
ния немецкого и американского под- В середине года руководство ком- мер процессорную карту с PowerPC
разделений, получившийся конгло- пании подписало соглашение о сов- для A2000), однако в последующие го-
мерат так и назвали – Amiga. На мес- местной разработке AmigaDE вмес- ды никаких новых товаров она не вы-
то Тищенко был поставлен Джим Кол- те с Microsoft. QNX разорвала с Amiga пустила.
лас. Сразу было сделано заявление, всяческие отношения и подписала до- Новая Amiga Inc. разделилась
что компания понимает стремление говор с Phase 5 об использовании сво- на три части:
пользователей Amiga сохранить «дух ей ОС на новых компьютерах. Phase 5  Консульный Совет Amiga – груп-
Amiga» и все дальнейшие усилия ком- в свою очередь прекратила разработку па Amiga-разработчиков, журна-
пании будут направлены только на это. проекта Pre/Box и объявила о создании листов, пользовательских групп,
У Amiga появился новый значимый пар- новой, не менее впечатляющей, четы- и дилеров, которые были отобра-
тнер – Corel, который заявил, что их по- рехпроцессорной системы AmiRage K2. ны Gateway-Amiga Inc в 1999 году.
пулярный продукт WordPerfect будет Последовал анонс еще двух клонов – Amiga Inc. привлекла этих людей,
портирован на AmigaOS. Однако про- Amiga MCC (Multimedia Convergence чтобы оценить собственное поло-
граммисты Corel отказались работать Computer) от Gateway 2000 и компьютер жение на рынке, используя мне-
с чем-либо, альтернативным Windows, от неизвестной никому Iwin Corporation. ние различных частей сообщест-
за исключением Linux. Последняя обещала сделать настоя- ва пользователей Amiga.
Для удобства компьютеры Amiga щий клон Amiga с процессором 68060  Дилерская сеть Amiga – канал
стали разделять на «классические» или PowerPC 604e, 8 Мб Chip-памяти, для Amiga-дистрибуторов и диле-
и новые системы. Для классики с про- 3D-ускорителем, 16-разрядным зву- ров, связывающий их с головной
цессорными картами с PowerPC вышел ком, поддержкой USB и пр., однако компанией.
эмулятор PowerMacintosh – iFusion, пре- после анонса об этой компании боль-  Сеть поддержки разработчиков
вращавший Amiga в iMac. BoXeR про- ше никто ничего не слышал. К концу Amiga – создана для поддержки
демонстрировал свои новые наработ- года проект Amiga MCC был отменен, (документация, багфиксы и пр.)
ки в области создания Amiga-клона, и сразу же после этого Microsoft объ- разработчиков.
однако, к сожалению, к концу года про- явила о начале разработки X-Box, что
ект был свернут. В апреле были анон- сразу возбудило волну слухов о родс- 2000 год был насыщенным с точки
сированы первые игры для PowerPC твенности этих двух проектов. зрения анонса новых продуктов. Быв-
и вскоре вышел порт игры с PlayStation ший состав Phase 5 решил продолжить
WipeOut 2097, а Hyperion выпустила Возрождение работу на родном поприще и объявил
3D-shooter Shogo. На периферийном Поскольку со временем все яснее о создании новой операционной систе-
рынке анонсировали первые контрол- становилось, что компании Gateway мы – MorphOS. Внутри новая ОС очень
леры USB для шины Zorro, которые от Amiga нужен только хорошо раскру- походила на классическую AmigaOS,

88
ретроспектива
однако коренным ее отличием было их новую разработку – шинный мост +
то, что MorphOS изначально писалась процессорная карта Predator. По обе-
под процессоры PowerPC. Посколь- щаниям должна была получиться пла-
ку слухи о создании новой ОС ходи- та с PCI- и AGP-слотами и процессо-
ли уже с 1996 года, сообщество весь- ром PowerPC G3, которую также пла-
ма негативно отнеслось к этой ново- нировалось использовать в tower-вер-
сти – за последние годы слишком мно- сиях A1200.
го чего анонсировалось и тут же уходи- Известный производитель про-
ло в небытие. Чтобы разбить эти сом- цессорных карт для PowerMacintosh
нения, для публичного теста была вы- MetaBox анонсировала новую кар-
пущена очень сырая beta, которая тем ту для A1200 на базе процессора
не менее работала и даже могла запус- PowerPC G3, к сожалению, из-за внут-
кать некоторые программы. ренних проблем эта фирма скоро обан- Рисунок 3. MicroA1
Несмотря на отмену дальнейшей кротилась, оставив после себя толь-
разработки BoXeR, на рынке аппарат- ко прототип. именно то, чего долгие годы ожидало
ного обеспечения для Amiga в этом го- Amiga Inc. выпустила на рынок сообщество. За основу новой ОС взя-
ду царил бум новых товаров. Извест- новую ОС AmigaDE и SDK под нее. ли исходный код OS 3.x и начали пере-
ный наряду с Phase 5 в прошлом про- Для будущих систем, на которых пла- писывать его под современные требо-
изводитель периферии Apollo выпус- нировалась работа этой ОС, опубли- вания. Большая часть старой AmigaOS
тил платы со слотами расширения ковали спецификацию Zico с систем- была написана на С, однако были и ру-
Zorro-4 для переставленных в tower ными требованиями. Как было сказа- дименты в виде кусков на языке BCPL,
А1200. Zorro-4 – это некий компромис- но ранее, AmigaDE – это аналог Java, предшественнике С, и машииннозави-
сный вариант между Zorro-2 и Zorro-3: платформонезависимая ОС, которую симых частей, написанных на ассемб-
шина имеет 24-битную адресацию, как планировалось использовать в самом лере процессоров 680x0 и под чипсет.
в первом случае, и 32-битную шину широком спектре устройств – от на- Команда разработчиков, занимающая-
данных, как во втором. Польская фир- стольных компьютеров до встраива- ся новым проектом, обязалась перепи-
ма Elbox начала продавать комплекты емой и мобильной техники. Для клас- сать ОС под PowerPC и исключитель-
Mediator. Эти платы также предназна- сических компьютеров совсем неожи- но на С. Для демонстрации возможнос-
чались для А1200 и предоставляли воз- данно начала продаваться AmigaOS тей новой ОС в последующие годы бы-
можность использовать широко рас- 3.9. Если OS 3.5 была лишь набором ла проведена серия туров по многим
пространенную PCI-периферию вмес- патчей для старых ОС, то OS 3.9 пос- странам. Сначала срок выхода пла-
то дорогих аналогов Zorro (для срав- тавлялась с поддержкой PowerPC и на- нировался на конец 2001 года, затем
нения – сетевая карта под Zorro стоит бором очень полезных утилит. его отодвинули на 2002 год. С тех пор
85 $, когда для PCI можно найти ана- были выпущены три официальные бе-
логичную по параметрам за 5-10 $). Современность та-версии (см. рис. 1), однако дата ко-
Сразу после выхода Mediator, англий- В 2001 году Amiga Inc. анонсирова- нечного релиза до сих пор не опреде-
ская компания Eyetech анонсировала ла разработку AmigaOS 4. Это было лена. Единственное, что говорят раз-
работчики – «when it’s done».
Eyetech пересмотрела свои пла-
ны по разработке шинного моста
к A1200 и выпустила новый компьютер
на PowerPC под названием AmigaOne.
Позже было выпущено еще несколь-
ко моделей этого компьютера, отли-
чавшихся процессорами и форматом
плат. Последняя разработка, Micro
AmigaOne, представляет собой ма-
теринскую плату micro-ITX формата
(см. рис. 3). Первые модели поставля-
лись с дистрибутивом Linux, с возмож-
ностью получения бесплатно OS 4, ког-
да она появится в продаже. Позже все
владельцы купленных AmigaOne полу-
чили по почте все три вышедшие бе-
ты, а покупатели новых компьютеров
получали их сразу вместе с компью-
тером. В последнее время (вторая по-
ловина 2005 года) Eyetech приостано-
Рисунок 2. MorphOS вила производство своих компьюте-

№3, март 2006 89


ретроспектива
сообщается, что работа над процес- плата с новым процессором с часто-
сорной картой кипит и за год слегка той 266 МГц.
поменялись характеристики. Вместо За последние годы для классичес-
Freescale 8245 планируется устанав- ких Amiga было разработано и выпу-
ливать новый Freescale 5200 с тепло- щено много различной периферии. Не-
выделением в 1 Вт и с тактовыми час- мецкая фирма Individual Computers вы-
тотами в 400-466 МГц, слоты под па- пускает звуковые карты, контроллеры
мять заменены на распаянные прямо высокоскоростных (>115200 бод) пос-
на плате 512 Мб Fast-памяти, а чип от ледовательных портов и многое другое
ATI заменился на ноутбучный разъ- для A1200, E3B выпустила контролле-
Рисунок 4. Pegasos 2 ем MiniPCI для видеокарт. Сроки вы- ры USB, появилась в продаже Zorro-се-
хода обозначены на момент выхода тевая карта Ariadne 2 с возможностью
ров, и пока неизвестно, когда она про- OS 4. Одно радует – разработчики подключения различных модулей.
должится. AmigaOS 4 сообщают, что процесс ко- Среди сообщества за это вре-
Как OS4-совместимыми было заяв- нечной отладки кода входит в завер- мя назрела проблема новых ком-
лено еще несколько проектов. За пе- шающую стадию. пьютеров. Классические компьюте-
риод 2001-2005 гг. Elbox выпустила Од нако н е только OS 4 о с та- ры Amiga, как и любая вещь, имеют
несколько различных версий своих лась на рынке операционных систем свой ресурс, и, несмотря на то, что
Mediator, в том числе и Mediator 4000 Di, для Amiga. Помимо классических для Escom в свое время произвела столько
который заменял стандартную Riser всех платформ Linux и BSD, свое раз- А1200, что до сих пор можно без про-
Card в Amiga 4000 на новую со слота- витие получила MorphOS (см. рис. 2). блем за рубежом купить новый (ни-
ми PCI. В 2002 году на выставках, пос- После развала Phase 5 образовалась когда не распечатавшийся) компью-
вященных Amiga, была продемонс- новая фирма – bPlan, которая про- тер, когда-нибудь и они закончатся.
трирована новая процессорная кар- должила свою работу на поприще ап- Само сообщество раскололось на не-
та под Mediator с интерфейсом PCI – паратного обеспечения для Amiga. сколько частей: приверженцы но-
SharkPPC. Планировалось, что на ней В 2000 году bPlan опубликовала спе- вых PowerPC-платформ, привержен-
будут устанавливаться процессоры цификации их нового компьютера цы классики и те, кто использует эму-
PowerPC G3/G4 с диапазоном такто- Pegasos, а к февралю следующего лятор WinUAE. Последний, несмотря
вых частот в 400-533 МГц. На деле эта года уже выпустила рабочие прото- на не очень хорошую эмуляцию чип-
карта являет собой слегка переделан- типы своих машин. В качестве цент- сета (проблемы с мерцанием частей
ную процессорную карту для PowerMac рального процессора использовался изображения, проблема с VBlank, ко-
7200 от Sonnet. Сроки выхода данного PowerPC G3 400 МГц, а в качестве ОС – торую невозможно устранить в при-
продукта объявлялись на день выхо- SuSE Linux 7.0 и MorphOS. MorphOS, нципе и пр.), хорошо эмулирует основ-
да AmigaOS 4. Так как последняя еще как и AmigaOS 4, представляет собой ной процессор 680x0 на скоростях в 5-
не вышла, то сообщество до сих пор новую операционную систему, которая 10 раз больших, чем у флагмана этой
ждет этой карты. является клоном OS 3, переписанным серии 68060. WinUAE также может ис-
В декабре 2004 года известный полностью под PowerPC. пользовать как видеокарту графичес-
в своих кругах разработчик аппарат- За прошедшее время Pegasos кий контроллер вашего PC, что зна-
ного обеспечения Адам Ковальчик и MorphOS достаточно сильно разви- чительно упрощает использование
объявил о разработке им процессор- лись. Процессор обновили до Dual-G4 AmigaOS. Давно зрела идея (BoXeR,
ной карты для A1200 на базе процес- на 1 ГГц, вышло у же две версии IWin) о переносе чипсета от Amiga
сора Freescale 8245 (аналог PowerPC Pegasos (см. рис. 4). Под MorphOS раз- в современные ПЛМ. И вот совсем не-
603e) с тактовой частотой в 400 МГц. рабатывается и переносится с других давно, в декабре 2005 года, было объ-
На карте планировалось размещать платформ разнообразное програм- явлено о том, что работа в этом на-
графический контроллер ATI Mobility мное обеспечение. В будущем обе- правлении ведется норвежским эн-
Radeon, слоты под SODIMM-память, щаются новые компьютеры на ба- тузиастом Деннисом ван Веереном.
USB и скоростной IDE-контроллер. По- зе PowerPC Cell, а также суб-ноутбук По его сообщениям, в FPGA перенесе-
мимо всего прочего обещалось очень на базе Freescale 5200. но уже около 60% чипсета OCS, а что-
низкое тепловыделение и прошитый в Но и к л ас с ич е с ко е «жел е з о» бы сообщество, привыкшее к обманам
ПЗУ JIT-компилятор для эмуляции на не забрасывается. В последние годы за последнее время, не посчитало его
лету старого семейства процессоров Freescale выпустила новых представи- лжецом, в Интернет были выложены
680x0. То есть новый процессор начи- телей семейства процессоров 680x0 – фотографии, демонстрирующие рабо-
нал работать сразу после включения, и Motorola Coldfire. Этот процессор так- ту и (наверное, самое главное) ошибки
можно было бы использовать AmigaOS же имеет много интегрированных кон- в работе эмулируемого чипсета.
3.x, не устанавливая OS 4. После это- троллеров, и вот, 17 декабря 2004 го- Надо признать, что несмотря на все
го анонса последовал год молчания, и да Elbox анонсировала новую процес- трудности, выпавшие на ее долю,
вот недавно, в ноябре 2005 года, бель- сорную карту Dragon. Конструктив- Amiga живет и до сих пор пользуется
гийский новостной сайт Safir.se смог но – это тот же Mediator с AGP, только популярностью у немалой части поль-
взять у Адама интервью, в котором в один из его слотов вставляется PCI- зователей ПК.

90
bugtraq

Отказ в обслуживании в Cisco PIX Отказ в обслуживании в jabberd


Программа: Cisco PIX535, PIX OS ver 6.3(4), Cisco PIX515E, Программа: jabberd 2.0.
PIX OS ver 7.0(4), возможно, другие версии. Опасность: Средняя.
Опасность: Средняя. Описание: Уязвимость существует из-за ошибки при об-
Описание: 1. Уязвимость существует из-за ошибки при работке SASL-запросов. Удаленный пользователь может
обработке содержимого блока данных пакета. Удаленный послать специально сформированный запрос, содержа-
пользователь может с помощью специально сформирован- щий строку «response» перед строкой «auth», и вызвать от-
ного пакета запретить установку соединения к порту сер- каз в обслуживании.
вера, расположенного за межсетевым экраном PIX, когда URL производителя: www.jabberd.jabberstudio.org.
используется статическое перенаправление портов между Решение: Установите последнюю версию с сайта произ-
локальным и глобальным IP-адресами. Например: «Атаку- водителя.
ющий → Интернет → PIX → Сервер».
Удачная эксплуатация уязвимости позволит злоумыш-
леннику заблокировать соединения между портом источ- Обход ограничений безопасности
ником и портом назначения на 120 (PIXOS 6) и 30 секунд в GnuPG
(PIXOS 7). Программа: GnuPG версии до 1.4.2.2.
Удаленный пользователь может также заблокировать Опасность: Средняя.
доступ к сервису, расположенному за PIX (HTTP, SMTP), Описание: Уязвимость существует из-за ошибки при об-
для определенного хоста. Пример: наружении неподписанных данных. Удаленный пользова-
hping2 -a $SOURCE_IP -S -c 1 -s 31337 -p 80 $TARGET_IP -d 1 тель может внедрить произвольные данные в подписанное
hping2 -a $SOURCE_IP -S -s 0 -p 80 --faster $TARGET_IP -d 1 сообщение и повлиять на проверку подлинности включен-
2. Уязвимость существует при обработке значения ных в сообщение сигнатур и сигнатур, добавленных в за-
TTL-пакета. Удаленный пользователь может послать ус- шифрованное сообщение.
тройству специально сформированный пакет, содержа- URL производителя: www.gnupg.org.
щий значение TTL n-1. Для удачной эксплуатации уязви- Решение: Установите последнюю версию (1.4.2.2) с сай-
мости между PIX и целевым сервером должен находить- та производителя.
ся маршрутизатор, который бы возвращал ICMP-сообще-
ние «Время истекло при передаче» (например: «Атакую-
щий → Интернет → PIX → Маршрутизатор → Сервер»). Отказ в обслуживании в службе IMAP
Примеры: в Kerio MailServer
hping2 -a $SOURCE_IP -S -c 1 -s 31337 -p 80 -t 8 $TARGET_IP Программа: Kerio MailServer версии до 6.1.3 Patch 1.
hping2 -a $SOURCE_IP -S -s 0 -p 80 --faster -t 8 $TARGET_IP Опасность: Средняя.
Удачная эксплуатация уязвимости позволит злоумыш- Описание: Уязвимость существует из-за неизвестной
леннику заблокировать соединения между портом источ- ошибки при обработке входных данных в команде IMAP
ником и портом назначения на 120 (PIXOS 6) и 30 секунд LOGIN. Удаленный пользователь может с помощью специ-
(PIXOS 7) ально сформированной команды вызвать отказ в обслу-
URL производителя: www.cisco.com. живании приложения.
Решение: В настоящее время способов устранения уязви- URL производителя: www.kerio.com.
мости не существует. Решение: Установите последнюю версию (6.1.3 Patch 1)
с сайта производителя.

Отказ в обслуживании в MailEnable


Программа: MailEnable Standard Edition версии до 1.93, Переполнение буфера
MailEnable Professional Edition версии до 1.73, MailEnable в SecureCRT/ SecureFX
Enterprise Edition версии до 1.21. Программа: SecureCRT version 5.0.4 и более ранние вер-
Опасность: Средняя. сии, SecureFX version 3.0.4 и более ранние версии.
Описание: 1. Уязвимость существует в компоненте webmail Опасность: Средняя.
при обработке специально сформированного email. Удален- Описание: Уязвимость существует из-за ошибки при кон-
ный пользователь может с помощью специально сформи- вертации unicode-строк в многобайтные строки. Удален-
рованного сообщения заставить систему потребить боль- ный пользователь может с помощью специально сформи-
шое количество ресурсов процессора во время просмотра рованной строки вызвать переполнение буфера. Воздейс-
сообщения пользователем. твие уязвимости неизвестно.
2. Неизвестная ошибка существует при обработке POP- URL производителя: www.vandyke.com.
аутентификации. Подробности неизвестны. Решение: Установите последнюю версию (5.0.5 и 3.0.4)с
URL производителя: www.mailenable.com. сайта производителя.
Решение: Установите исправленную версию с сайта про-
изводителя. Составил Александр Антипов

№3, март 2006 91


книжная полка

FreeBSD. Архитектура и реализация


Маршал Кирк МакКузик, Джордж Невил-Нил
граалем. Книга начинается с введения, системы). Устройства (обзор, уровни
из которого вы узнаете о истории UNIX- GEOM, CAM, ATA, конфигурирование).
систем и возникновении FreeBSD как Локальные файловые системы (струк-
отдельной ОС в частности. После этого тура inode, именование, квоты, блоки-
своеобразного экскурса в историю на- ровки файлов, мягкие обновления, мо-
чинается непосредственно раскрытие ментальные снимки файловой системы).
основной темы книги. Обзор дизайна Сетевая файловая система. Управление
FreeBSD (средства FreeBSD и ядро, уп- терминалами. Межпроцессорное взаи-
равление процессами и памятью, сис- модействие, сетевая коммутация (ин-
тема ввода-вывода, устройства, фай- терфейс между сокетами и протокола-
ловая система, терминалы, IPC, сете- ми, маршрутизация, непосредственные
вая коммутация). Службы ядра (орга- сокеты). Сетевые протоколы (Ip v4 и v6,
низация ядра, системные вызовы, ис- UDP, IP, TCP, безопасность). Запуск и вы-
ключения и прерывания, службы вре- ключение системы (начальная загрузка,
мени и ресурсов). Управление ресур- инициализация ядра, модули ядра, ра-
Думаю, я не сильно ошибусь, если пред- сами (состояние процесса, переключе- бота системы). Замечательная во всех
положу, что перевод этой книги был од- ние контекста, планирование потоков, отношениях книга – классика.
ним из самых ожидаемых событий среди создание и завершение процесса, сиг-
системных администраторов UNIX. Са- налы). Управление памятью (ресурсы  Издательство: «Кудиц-Образ»
ма по себе книга не нуждается в каком- процесса, разделяемая память, интер-  Год издания: 2006
либо представлении и рекламе. И это фейс пейджера, страничная подкачка,  Количество страниц: 800
не удивительно, потому как по сути яв- замещение страниц). Обзор системы  ISBN: 5-9579-0103-2
ляется культовой среди BSD-админис- ввода-вывода (символьные и дисковые  Цена: ≈ 697 руб.
траторов, можно даже в какой то сте- устройства, управление дескриптора- Книга предоставлена издательством «Кудиц-
пени сравнить это издание со святым ми, интерфейс виртуальной файловой Образ».

Microsoft SQL Server 2005.


Новые возможности
Александр Волоха
ядре SQL Server 2005, новом поддержи- XML и SQL Server (типы данных XML, ин-
ваемом железе и о новшествах в бе- дексы, новые возможности XML). Безо-
зопасности. Раздел «утилиты и средс- пасность (обзор, изменения и преиму-
тва администрирования баз данных» щества SQL server 2005, хранение паро-
представлен материалом о управле- лей, наборы прав доступа и новые объ-
нии DB и средствами разработки, но- екты). Эту книгу сложно назвать исчер-
вых средствах управления и увеличе- пывающим руководством по SQL Server
ния производительности. Брокер за- 2005, скорее она рассчитана на людей,
просов SQL Server (общий обзор, на- которые уже имеют опыт работы с SQL
стройка и администрирование, разра- Server, и в данный момент перешли или
ботка приложений). Сервисы аналитики только планируют перейти на версию
(преимущества использования, управ- 2005. Это издание – отличный выбор
ление сервисами аналитики, средства для тех, кто хочет ознакомиться со все-
Несмотря на свой небольшой объем, разработки). Сервисы интеграции (ар- ми новыми средствами продукта, а так-
книга охватывает достаточно много ма- хитектура и компоненты сервисов, инс- же приметить их на практике, в макси-
териала. Как ясно из названия, основ- трументы работы с пакетами). Сервисы мально сжатые сроки.
ной акцент делается именно на рас- нотификации и отчетов. Средства вос-
смотрение новых возможностей про- становления данных (способы сохра-  Издательство: «Питер»
дукта. Повествование начинается с опи- нения данных, поддержка баз данных,  Год издания: 2005
сания общих положений, а также реко- превентивные действия, резервное ко-  Количество страниц: 304
мендаций по установке и обновлению пирование и восстановление). Програм-  ISBN: 5-469-01197-6
SQL Server 2005. Из главы, посвящен- мирование для SQL server (нововведе-  Цена: ≈ 375 руб.
ной администрированию, вы узнаете о ния, интеграция CLR и ADO.NET) Язык Книга предоставлена издательством «Питер».

92
книжная полка

Microsoft Exchange 2003 Server


Алексей Вишневский
Exchange Server 2003 и Lotus Domino). Управление получателями (группы ад-
Служба каталогов Active Directory (архи- ресатов, списки рассылки). Управле-
тектура AD, доменная модель службы ние общими папками (формирование
каталогов, пространство имен AD, фи- иерархии и администрирование). При-
зическая структура, репликация изме- менение политик Exchange для конфи-
нений каталогов, а также импорт и эк- гурирования почтовой системы. На-
спорт объектов каталога). Установка стройка протоколов SMTP, HTTP, NNTP,
Exchange2003 (подготовка к установ- POP3, IMAP4. Маршрутизация сообще-
ке, приготовление корпоративной се- ний (формирование маршрутной топо-
ти к развертыванию, работа с масте- логии, группы маршрутизации). Воп-
ром, удаление). Выполнение обновле- росы масштабирования Exchange. Мо-
ний предыдущих версий (использова- ниторинг производительности, поиск
ние Active Directory Connector, обновле- и разрешение проблем, а также вос-
ние Exchange Server 5.5/2000, особен- становление работоспособности почто-
ности совместной работы 2003 с преды- вого сервера. Как вы сами можете убе-
дущими версиями). Реализация адми- диться, книга охватывает практически
Добротная как по качеству, так и по ин- нистративной иерархии (инструменты, все ключевые моменты администриро-
формационному наполнению книга. Из- выбор административной модели, ис- вания Exchange 2003.
дание прежде всего рассчитано на спе- пользование механизма администра-
циалистов, уже имеющих опыт работы тивных групп). Управление хранили-  Издательство: «Питер»
с Exchange. Круг тем, рассмотренных щами (архитектура информационного  Год издания: 2005
в рамках книги, достаточно широк: об- хранилища в Exchange 2003, планиро-  Количество страниц: 672
зор Exchange 2003 (описание новых вание структуры, управление группа-  ISBN: 5-469-00386-8
возможностей данной версии, компо- ми строения, работа с базами данных  Цена: ≈ 548 руб.
ненты, а также сравнительный анализ хранилищ и индексация содержимого). Книга предоставлена издательством «Питер».

SQL. Cправочник
Кевин Клайн
ализации SQL, из нее вы узнаете о ре- обо всех платформо-специфичных фун-
ляционной модели баз данных, описа- кциях. Программирование баз данных
ние стандартов SQL, познакомитесь с (общий обзор, открытие и закрытие со-
основными реализациями баз данных. единений с DB, управление транзакци-
Основные концепции в виде фунда- ями, выполнение инструкций, извлече-
ментальных основ, необходимых для ние данных, связанные параметры, об-
понимания принципов работы баз дан- работка ошибок). Весь изложенный ма-
ных, а также основные команды опи- териал носит сугубо практический ха-
саны во второй главе. Далее читателю рактер, а большое количество приме-
предлагается справочник по инструк- ров поможет усвоить прочитанное на-
циям SQL (отсортированным в алфа- илучшим образом. Книгу можно реко-
витном порядке). В качестве примера мендовать всем без исключения DBA-,
приводятся реализации для каждой из SQL-программистам, а также систем-
вышеописанных баз данных. В начале ным администраторам, работа которых
главы приводится таблица, из которой так или иначе касается баз данных.
Среди прочих справочников по SQL этот можно узнать о степени реализации
выгодно выделяет то, что он охватыва- той или иной функции в представлен-  Издательство: «Кудиц-Образ»
ет практически все базы данных, подде- ных базах данных. Функции SQL – так-  Год издания: 2006
рживающие стандарт ANSI SQL 2003, а же отсортированный по алфавиту пе-  Количество страниц: 832
именно Microsoft SQL Server 2000 , DB2 речень функций SQL 2003 с описанием  ISBN: 5-9579-0114-8
v8.0, Sybase Adaptive server 12.5, Oracle реализаций (агрегатные, оконные, ска-  Цена: ≈ 476 руб.
10g, а так же OpenSource DB – MySQL лярные функции). Также, в рамках дан- Книга предоставлена издательством «Кудиц-
4.x и PostgreSQL 7.x . Весь материал ной главы представлена информация Образ».
разделен на пять логических частей.
Первая глава посвящена истории и ре- Обзор книжных новинок подготовил Александр Байрак

№3 март 2006 93
подписка на 2006 год
Российская Федерация ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
 Подписной индекс: годовой – 20780, полугодовой – 81655  Казахстан – по каталогу «Российская Пресса» через
Каталог агентства «Роспечать» ОАО «Казпочта» и ЗАО «Евразия пресс»
 Подписной индекс: 87836  Беларусь – по каталогу изданий стран СНГ через РГО
Объединенный каталог «Пресса России» «Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10)
Адресный каталог «Подписка за рабочим столом»  Узбекистан – по каталогу «Davriy nashrlar» российские
Адресный каталог «Библиотечный каталог» издания через агентство по распространению печати
 Альтернативные подписные агентства: «Davriy nashrlar» (7000029, г. Ташкент, пл. Мустакиллик,
Агентство «Интер-Почта» (095) 500-00-60, курьерская 5/3, офис 33)
доставка по Москве  Армения – по списку номенклатуры «АРЗИ» через ГЗАО
Агентство «Вся Пресса» (095) 787-34-47 «Армпечать» (375005, г. Ереван, пл. Сасунци Давида,
Агентство «Курьер-Прессервис» д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Са-
Агентство «ООО Урал-Пресс» (343) 375-62-74 рьяна, 22)
ЛинуксЦентр www.linuxcenter.ru  Грузия – по списку номенклатуры «АРЗИ» через АО
 Подписка On-line «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29)
http://www.arzi.ru и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru  Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-3300,
СНГ г. Тирасполь, ул. Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайс-листу через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номенк- (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)
латуры АРЗИ:  Подписка для Украины:
 Азербайджан – по объединенному каталогу российских Киевский главпочтамт
изданий через предприятие по распространению печа- Подписное агентство «KSS», тел./факс (044)464-0220

Подписные
индексы:

20780*
81655**
по каталогу
агентства
«Роспечать»

87836
по каталогу
агентства
«Пресса
России»
*
годовой
**
полугодовой

94
подписка на 2006 год
Редакционная подписка
Открыта подписка через редакцию. Вы можете оформить
подписку на любое количество номеров 2006 года. Редак-
ция не высылает журналы за пределы Российской Феде-
рации.

Для юридических лиц:


№5
по (30
д
ww писн

w.s ой ай 2
По am ин
ag дек
0 05
Ищ чем .ru с 8165
ем у M 5

 Отправьте заявку по факсу (095) 928-82-53 или по e-mail:


Ст пр S S
WP роим ичин QL м
A-E з ы ед
На nte ащи ле
нн
стр rpr ще ор
Ка аи is н
e, ную аб
info1@samag.ru. уд к во ва 80 ота
ем 2.1 бес ет?
ал сс UP
Чт
ов
е н т
ны но а S по
x EA пров
е ф вит дL P-T од
аж LS ную

 Укажите наименование и банковские реквизиты своей но ай ь inu


в к тана зн лы x се
ть:
ор вл ать по
Эф п ор ваи об д BS
по фек ати ем IP- D
ля ти вн Sy тел

организации, почтовый индекс и адрес доставки журна- ми вн ой ma еф


Ко по о у се nte он
с п нтро ль пр ти c
A и и
ом ли зо ав ntiv
Ин ощ ру ва ля iru
ью ем тел ем s9
со терв
ла, телефон и e-mail контактного лица, период подпис- OS без ей .0
зд ью SIM оп вA
ате с ас D
ле Ла но
м я рр сть
зы и У се
ки и количество номеров. Редакция выставит вам счет,
ка ол ти
Pe лом
rl –

после оплаты которого вы начнете получать журналы


по почте. Необходимые бухгалтерские документы вы-
сылаются почтой.

Для физических лиц:


 Заполните нижеприведенную квитанцию, оплатите в лю-
бом банке и пришлите в редакцию копию с отметками
банка.
 После поступления платежа редакция начнет отправ-
лять вам номера.

Стоимость
подписки через
редакцию:

900* руб.
за 6 номеров
1800* руб.
за 12 номеров

* Включая НДС
и почтовую доставку

№3, март 2006 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№3(40), Март, 2006 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец В СЛЕДУЮЩЕМ
НОМЕРЕ:
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
Технический редактор
Владимир Лукин
Редактор
Алексей Коршунов Перспективы профессии. тема сборки программ, используемая
Внештатные редакторы Автопортрет во FreeBSD имеет значительно боль-
Алексей Барабанов Кто такие системные администрато- шие возможности, чем те, которые мы
Кирилл Тихонов ры, почему они этим занимаются, что задействовали. Какие это возможнос-
Сергей Супрунов ждет их впереди? Попробуем разо- ти и как их использовать в своих пор-
Татьяна Ильченко браться в настоящем положении дел тах – в продолжении материала.
и сделать предположения на ближай-
РЕКЛАМНАЯ СЛУЖБА
тел./факс: (095) 928-8253
шее будущее. Используем средства
Дарья Хохлова
библиотеки OpenSSL
reсlama@samag.ru Архитектура и реализация для криптографической
файловой системы reiser4 защиты данных
Верстка и оформление Не уступая многочисленным аналогам Защищать данные надо – с этим ут-
maker_up@samag.ru в функциональности (здесь и практи- верждением трудно не согласиться. Са-
Дизайн обложки чески неограниченные размер раздела мым надежным способом скрыть ин-
Николай Петрочук и количество файлов, и динамическое формацию от посторонних глаз являет-
размещение объектов, и эффективная ся ее шифрование. В настоящее время
По вопросам распространения работа с маленькими файлами, и быс- существует большое количество стой-
обращайтесь по телефону: трое восстановление после сбоев), про- ких криптографических алгоритмов,
(095) 928-8253 (доб. 120)
изводительности и масштабируемос- позволяющих надежно защитить кон-
ти, reiser4 предоставляет пользовате- фиденциальные данные, и множество
107045, г. Москва,
Ананьевский переулок, дом 4/2, стр. 1 лям ряд дополнительных возможностей. их программных реализаций, доступ-
тел./факс: (095) 928-8253 Прозрачное сжатие и шифрование фай- ных для свободного использования.
Сайт журнала: www.samag.ru лов, полное журналирование данных, Речь пойдет о библиотеке OpenSSL,
а также практически неограниченную которая предоставляет в распоряже-
РУКОВОДИТЕЛЬ ПРОЕКТА (за счет плагинной архитектуры) рас- ние пользователя набор функций, ре-
Петр Положевец ширяемость, другими словами, способ- ализующих различные криптографи-
ность приспосабливаться к сколь угодно ческие алгоритмы, такие как Triple-DES,
УЧРЕДИТЕЛИ сложным запросам потребителей. Blowfish, AES, RSA и другие. Не углуб-
Владимир Положевец ляясь в детали реализации алгорит-
Александр Михалев
Создаем порт для FreeBSD мов, мы рассмотрим несколько прак-
ИЗДАТЕЛЬ
своими руками. тических примеров использования биб-
ЗАО «Издательский дом Часть 2: расширенные лиотеки OpenSSL для генерации псев-
«Учительская газета» возможности дослучайных чисел, вычисления хэшей
В первой части статьи мы рассмотре- (дайджестов), и шифрования данных
Отпечатано типографией ли основные вопросы создания порта с использованием симметричных и ас-
ГП «Московская Типография №13» для FreeBSD своими руками. Но сис- симетричных алгоритмов.
Тираж 10000 экз.

Журнал зарегистрирован Уважаемые читатели!


в Министерстве РФ по делам печати,
телерадиовещания и средств массо-
вых коммуникаций (свидетельство
Спешите оформить подписку
ПИ № 77-12542 от 24 апреля 2002 г.).
на первое полугодие 2006 года!
За содержание статьи ответственность Приобрести новые и старые номера журнала
несет автор. За содержание рекламно- вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
го объявления ответственность несет
рекламодатель. Все права на опубли-
кованные материалы защищены.

Доставка почтой в любую точку России.

96

Вам также может понравиться