The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by , 2018-10-18 06:14:46

070

070

Debian на перепутье

Не Linux’ом единым...

Debian – это не только удачный менеджер завершает его задачу по построению Unix- Стабильный выпуск Debian Преимущества Debian сделали его
пакетов. Это опытное сообщество, строгий под- подобной ОС, состоящей только из ПО, создан- никогда не будет включать в идеальным фундаментом для
ход к отбору пакетов и инструменты, помогаю- ного в GNU. Позже появились проекты, постро- себя пакеты, не удовлетворя- построения новых дистрибутивов. Это
щие достичь всего вышеперечисленного. енные на ядрах FreeBSD и NetBSD. Некогда ющие политике Debian Policy. лишний раз подтверждается
Вполне естественно, что эти преимущества существовала идея создать порт для Windows Строгие правила и мощь dpkg многочисленными производными Debian.
нашли свое применение за пределами дистри- (при помощи Cygwin), но сейчас здесь не приводят к тому, что базовая инс-
бутива Linux. Различные официальные проекты наблюдается активности. талляция Debian гораздо меньше
Debian работают над созданием систем на базе по размеру, чем дистрибутив на базе
других ядер. Первым из них был GNU/Hurd, Вне официальных проектов, инструменты RPM. В частности, правила Debian Policy
который заменил Linux микроядром Hurd. Hurd Debian используются в Fink, который обеспечи- требуют, чтобы разделяемые библиотеки
разрабатывается в рамках проекта GNU и вает доступ к открытым приложениям Unix из составляли отдельный пакет (а не распро-
Mac OS X. странялись вместе с использующими их
Он (а скорее, какой-нибудь графический программами), имя котрого выбирается
интерфейс, вроде Synaptic) позволяет вам постинсталляциионные сценарии, которые в соответствии с ABI (Application Binary
легко загружать на свой компьютер новые выполняют любую (в том числе, интерак- Interface, бинарный интерфейс приложе-
или обновленные приложения – и, что тивную) конфигурацию пакета. В состав ния) текущей версии библиотеки.
более важно, программы, от которых они Debian включена система debconf, которая
зависят. APT автоматически разрешает предоставляет стандартные средства для Это весьма помогает в борьбе с «кош-
зависимости и избавляет вас от мороки с организации диалогов в этих скриптах. маром DLL», когда невозможно установить
установкой ПО. Считается, что APT – это Кроме того, dpkg предлагает несколько две разные версии одной и той же библи-
«изюминка» Debian, так правда это или различных интерфейсов (текстовый, Gtk отеки из-за их конфликта. В Debian такой
нет? В двух словах, нет. и Qt) и может быть настроен на запрос проблемы просто не существует.
различного объема информации в Эти технически преимущества, вкупе с
За пределами APT зависимости от приоритетов. В случае гарантиями, предоставляемыми Debian,
автономной инсталляции debconf может упрощают персонализацию системы
Несмотря на то, что APT – это велико- не задавать ни единого вопроса, и все и делают его популярной основой для
лепный инструмент, сам по себе он не параметры будут заполнены значениями
придает веса Debian. Компания Conectiva по умолчанию. >>желающих создать свой собственный
(впоследствии слившаяся с Mandrakesoft
и сменившая имя на Mandriva) четыре Конечно, ни RPM, ни dpkg не являются дистрибутив.
года назад переработала APT для дистри- совершенными, хотя dpkg универсальнее и
бутивов, использующих RPM, но «вкус» надежнее. Основной причиной, по которой Debian Linux
получился уже не тот. Существуют другие Debian превосходит RPM-дистрибутивы
решения, подобные APT, например, urpm в управлении пакетами, является всесто- Progeny Debian
или yum, но и они кое в чем проигрывают ронняя политика Debian, устанавливающая
своему «прототипу». Возможно, так про- правила для сборки пакетов и инстру- Knoppix Storm Linux Libranet Linux
исходит потому, что RPM по ряду позиций менты, которые претворяют ее в жизнь.
все же не дотягивает до dpkg из Debian. Lindows OS
Один из разработчиков Mandriva, Клаудио Corel Linux
Мацуока (Claudio Matsuoka) писал в своем MEPIS Linux Linex Damn Small Linux
дневнике (http://tweek.dyndns.org:8080) о Demo Linux
«десяти главных проблемах RPM», среди Kanotix Skole Linux
которых упоминались «разнящаяся обра- Xandros
ботка файловых зависимостей и большое Guada Linex Linspire
число скрытых зависимостей, автомати- Morphix User Linux
чески добавляемых RPM». Overclockix Ubuntu Linux

Очевидно, dpkg гибче RPM. Например, Whoppix
dpkg допускает большую свободу в опи-
сании взаимоотношений между пакетами, Gnoppix
которые уже не просто зависят друг от
друга. Один пакет может «предварять» Kubuntu Linux
(pre-depend) другой, если его необходимо
установить и настроить для нормальной
установки исходного, «рекомендовать»
(recommend) его, что обеспечивает не
абсолютную, слабую зависимость, или
даже «предлагать» (suggest) другой пакет.
В последнем случае наличие пакета не
является обязательным, но обеспечит
дополнительную функциональность.

Возможности dpkg включают в себя и

www.linuxformat.ru LXF1(70) сентябрь 2005  5 1

Debian на перепутье

Проблемы проблемами, актуальными и потенциаль- сообщении утверждалось, что «дальней-
в городе ными, к моменту появления Etch на свет ший скоординированный выпуск дистри-
свободы Debian будет попросту нерелевантен». бутива для стольких архитектур не пред-
ставляется возможным. В последний год,
Тот факт, что Debian имеет очень растя- Почему на Sarge ушло столько вре- поддержание 11 архитектур в готовности к
нутый релиз-цикл (на подготовку Sarge мени? Между ним и Woody не так много релизу отнимало большую часть усилий у
потребовалось три года, на Woody ушло технических различий. Фактически, самым команд подготовки к выпуску, d-i (Debian
два) глубоко укоренился в головах членов крупным из них является инсталлятор Installer) и сопровождения ядра».
сообщества. Вопрос состоит в том, почему Debian Installer, да и он находился в раз-
Sarge потребовал так много времени и что работке несколько лет. Проще всего будет Ванкуверский Проспект пропаганди-
собираются делать разработчики, чтобы предположить, что Debian стал слишком рует уменьшение числа поддерживаемых
выпустить Etch в срок? большим и процессы подготовки к выпуску архитектур. Этот документ является пред-
не успевают за этим. Раньше, когда паке- метом различных споров, отчасти из-за
В первую очередь, давайте выясним, тов было гораздо меньше, новые версии непонимания, отчасти потому,что он ставит
имеет ли дата выхода Etch хоть какое- Debian выходили быстрее. людей перед свершившимся фактом. На
то значение. Debian не находится под самом деле, он не был принят как офици-
давлением со стороны рынка и может Впрочем, весьма очевидно, что число альная политика Debian. По словам нового
позволить себе выпускать код тогда, когда пакетов не является единственным фак- главы «политического комитета» Debian
сочтет нужным. Зачем тогда все это, если тором. В составе Sarge 15 000 пакетов, Брендена Робинсона (Branden Robinson),
которые поддерживает 1 000 человек, «это лишь начало процесса поиска реше-
100,000 таким образом, отношение «разработчиков ния, но никак не конец».
на пакет» здесь гораздо лучше, чем в
10,000 Mandriva или Fedora. Задержка Sarge была Недопонимание происходит от более
связана не только с этим. раннего предложения разделить архи-
1,000 тектуры с целью уменьшения трафика,
Размер – не главное необходимого для зеркалирования репо-
100 зитария Debian. Предполагалось разнести
Большую проблему представляет число массовые архитектуры, вероятно, x86,
10 архитектур, поддерживаемых Debian. AMD64, IA-64 и PowerPC и платформы
Разработчики тратят много сил на порти- «второго класса» (Second Class Citizens,
Packages рование приложений на «минорные» плат- SCC), насчитывающие куда меньше
Developers формы. Например, основные разработчики пользователей. Предложение SCC будет
1 приложения, как правило, не интересуются принято, поскольку оно освобождает
такими архитектурами, как ARM, HP-PA, канал для новых архитектур, например,
Количество пакетов в некоторых версиях Debian заметно увеличивалось, но это MIPS или m68k. Если при портировании на AMD64. В свою очередь, Ванкуверский
компенсировалось ростом числа разработчиков. них возникают трудности, разработчикам Проспект, предлагающий просто отка-
Jan 95 Debian приходится преодолевать их само- заться от выпуска SCC-архитектур, все
Jan 96 стоятельно. Стабилизация ядра, инстал- еще обсуждается. В нем перечислены
Jan 97 лятора и подготовка инфраструктуры для положения, которым должна удовлетво-
Jan 98 доставки обновлений безопасности для рять архитектура, «достойная» выпуска.
Jan 99 Sarge были, в частности, теми аспектами, Помимо прочего, сюда входит возмож-
Jan 00 что замедлили его выход в свет. ность приобрести новое оборудование,
Jan 01 способность собрать на ней 98 процентов
Jan 02 Стив Лэнгесек (Steve Langasek), член пакетов, не зависящих от архитектуры,
Jan 03 команды подготовки к выпуску Sarge, поддержка со стороны Debian Security
Jan 04 написал электронное письмо, которое Team и так далее.
Jan 05 позже стало известно как Ванкуверский
Проспект (Vancouver Prospectus). В данном

Тест, тест, тест

пользователи, которым требуется самое Проект Debian поддерживает три ветви разра- testing. Смысл тестируемой ветви состоит в том,
современное ПО, могут выбрать ботки: стабильную (stable), тестовую (testing) и что она всегда близка к состоянию релиза. При
тестируемую или «нестабильную» нестабильную (unstable). Стабильная ветвь желании, конечные пользователи могут уста-
ветвь разработки дистрибутива соответствует текущему стабильному выпуску навливать пакеты из ветвей testing или unstable
или одну из многочисленных Debian (сейчас это 3.1 или Sarge) и не меняется (и даже перемешивать пакеты из stable, testing
производных, например, Ubuntu? до тех пор, пока не появится новая ревизия. и unstable друг с другом).
Одним из людей, которые Обновления безопасности для стабильной вер-
считают, что Etch должен выйти за сии существуют в отдельном репозитарии APT В целом, использование testing относительно
по адресу: безопасно. Здесь никогда не будет слишком
разумное время, является Ян Мердок. http://security.debian.org. много проблем, однако, команда Debian Security
Запись в его дневнике, появившаяся вско- Team не поддерживает данную ветвь, так что
ре после выпуска Sarge, утверждает, что Нестабильная ветвь представляет собой тес- она определенно не подходит для критически
Debian должен сделать регулярность появ- товую площадку для следующего релиза важных приложений. Unstable – для истинно
ления новых версий, а также удержание Debian. Все новые пакеты загружаются в этот рисковых личностей, предпочитающих жить на
места среди многочисленных производных репозитарий. По истечении определенного вре- острие атаки. Время от времени обновление из
приоритетной задачей. «Что поставлено на мени пакеты, в которых не обнаруживается этой ветви может испортить вашу систему.
кон? Если мы не сделаем что-то с этими дополнительных ошибок и отсутствует зависи-
мость от приложений, еще не находящихся в
тестировании, отправляются в репозитарий

5 2   LXF1(70) сентябрь 2005 www.linuxformat.ru

Debian на перепутье

Марк Шаттлворт, «отец» Ubuntu:повредит или поможет Debian дистрибутив африканского Базза Лайтера? Восход
Ubuntu Linux

Самым популярным и одновременно самым
молодым отпрыском Debian является Ubuntu
Linux, основанный и поддерживаемый
бывшим разработчиком Debian, Интернет-
предпринимателем и космическим туристом
Марком Шаттлвортом (Mark Shuttleworth).
Марк является уроженцем ЮАР, а слово
Ubuntu, в переводе с одного из африканских
языков, означает «гуманность в отношении к
другим». Ubuntu Linux позиционируется как
«Linux для человеческих существ» и является
простым в использовании настольным
дистрибутивом, построенным на Debian.
Ubuntu разделяет многие идеалы свободы,
принятые Debian. Вы даже можете заказать
себе установочный компакт-диск и он будет
доставлен бесплатно в любую точку Земного
шара. Это обстоятельство, по-видимому,
является одним из факторов, приведших к
стремительному росту его популярности.
Ubuntu обещает поддерживать регулярный
шестимесячный релиз-цикл, что также
добавляет ему очков.
В настоящий момент Ubuntu существует для
платформ x86, AMD64 и PowerPC, как в виде
установочных дисков, так и в качестве LiveCD.
Sparc и IA-64 поддерживаются как минорные,
«невыпускные» архитектуры.
• Читайте мнение Марка Шаттлворта о
Debian, Ubuntu и разветвлении/ответвлении в
следующем номере нашего журнала!

Хотя в необходимости принятия мер Благодаря модульности Debian, сте- развитию отдельных лидеров рынка (Red
по повышению управляемости процессов пень совместимости между Sarge и его Hat и Novell)».
выпуска Debian нет никаких сомнений, производными (Ubuntu, Linspire, Xandros
день, когда проект откажется от сопро- и другими) очень высока, особенно по Между проектом Debian и его отпрыс-
вождения портов на ARM или MIPS, будет сравнению с тем, что творится в семействе ками, тем не менее, существуют напря-
грустным для всего Linux-сообщества. Red Hat. Многие, тем не менее, считают, женные отношения. Это особенно верно
что Debian и его детям следует сотрудни- в отношении самого молодого из них,
Прочие предложения по улучшению Ubuntu. Разработчики Debian обсуждали
данного процесса фокусируются на комму-
никациях и распределении обязанностей. «Между Debian и его производными,
Одиночного менеджера предлагается особенно Ubuntu, существуют
заменить группой, и Бренден Робертсон напряженные отношения.»
уже избран главой команды под кодовым
названием Project SCUD (еще один реве-
ранс в сторону «Истории игрушек»).

Объединяй и чать более тесно. вопрос, является ли он дочерним дистри- какую пользу оказал Debian. Если завтра
Ян Мердок бутивом или вредоносным разветвлением Debian исчезнет с лица земли, Canonical
властвуй пишет: «Нам и достаточно ли участники Ubuntu делают окажется в чем-то связанной по рукам и
необходимо для того, чтобы передавать сделанные ногам»,-сказал Робинсон в своем недав-
Задержка с выпуском Sarge исполь- ими изменения людям, ответственным нем интервью.
привела к увеличению раз- зовать за те или иные пакеты в Debian. «Ubuntu
рыва между стабильной уникальное вызывает смешанные чувства, но сум- Ясно, что необходима более тесная
версией Debian и достояние марный результат остается положитель- связь между Debian и его дочерними дис-
его производными, Debian, а ным. Он помог улучшить имидж Debian. трибутивами. Различные проекты всегда
например, Ubuntu. именно – Минусом является то, что благодаря Ubuntu преследуют свои цели, но уверенность в
Теперь, когда Sarge, мощь его некоторые люди начали задумываться том, что релизы Debian будут предсказу-
а значит, стабиль- производ- о «релевантности» Debian как такового. емыми, закладывает прочный фундамент
ная версия Debian с ных. Сами Как потребитель операционной системы для других инициатив и снижает риск
относительно новым по себе они не Debian и создатель производного продукта, появления несовместимых производных и
ПО, наконец-то увидела Canonical Ltd. [спонсор Ubuntu] могла разветвлений.
свет, расстояние между ними столь важны, но все бы заострять больше внимания на том,
сократилось. вместе препятствуют >>

www.linuxformat.ru LXF1(70) сентябрь 2005  5 3

Debian на перепутье

В ожидании входит перевод стандартного инструмен- Другой назревший переход – замена
Etch тария Debian на GCC 3.4 или 4.0. Это, в стареющего XFree86 4.3 на X.Org. Это
свою очередь, подразумевает изменение опять же не должно вызвать проблем,
Sarge пришел, пыль осела, так что сей- интерфейса C++ ABI, что приведет к нару- поскольку команда Debian X Strike Force
час самое время задуматься о том, что шению обратной совместимости с биб- уже предоставляет пакеты X.Org в тече-
будет представлять из себя следующий лиотеками C++. Таким образом, придется ние некоторого времени. В числе прочих
стабильный выпуск Debian, известный пересобрать все библиотеки и приложения изменений, запланированных для Etch,
сейчас под кодовым именем Etch (в C++. Это не такая уж большая проблема следует упомянуть Gnome 2.10, KDE 3.4 и
честь персонажа по имени Etch a Sketch и планы ее решения уже имеются, но OpenOffice.org 2.0.
из «Истории игрушек»). Хотя, на момент пройдет какое-то время, прежде чем
написания этой статьи, Etch едва насчиты- первые результаты появятся в тестируемом Во-вторых, порт на платформу AMD64
вал три недели, мы уже знанем о многих варианте Debian. должен непременно получить статус
изменениях, которые будут включены в поддерживаемого Etch, но, как мы уже
него в процессе разработки. Это происхо- По словам разработчика Билла отмечали, общее числе архитектур при
дит потому, что большая часть из них пла- Алломберта (Bill Allombert), зависимость этом может быть существенно сокращено.
нировалась уже давно, но была отложена, APT и утилит Aptitude от C++, наряду с AMD64 и подобные процессоры предо-
чтобы не мешать выпуску Sarge. циклическими зависимостями и пакетами, ставляют смешанную среду выполнения
«портящими конфигурационные файлы и (в данном случае, 32 и 64-битную), и в
Ключевые нововведения делающими управление ими посредством данный момент рассматриваются пред-
dpkg бесполезным» является тремя ключе- ложения по обеспечению наилучшей
В первую очередь, необходимо выпол- выми областями Sarge, требующими дора- поддержки этой множественности (см.
нить некоторые преобразования. Сюда ботки. В своем письме сообществу Debian врезку «Мультиархитектурное предложе-
Алломберт отмечает, что эти проблемы ние» справа). Уже произведено некоторое
были усугублены недостатком времени, тестирование.
оставшимся для тестирования Sarge после
его заморозки (feature freeze). «Такие вещи Сейчас слишком рано для того, чтобы
нужно делать автоматически, ..., примерно говорить, будут ли данные изменения
тем же путем, что и сборки»,-считает он. реализованы в Etch, но если это все же
случится, то будет большим благом для
обеспечения обратной совместимости и
кросс-разработки.

Документация, лицензированная по GNU FDL, не может быть включена в состав Etch и Больше свободы
часть ее уже удалена
Наконец, поправки к Debian Software
«Выпуск Etch в ближайшие 18 месяцев Guidelines также потребуют кое-каких
позволи т сократить ущерб, нанесенный изменений. В будущем требования DFSG
задержкой Sarge.» будут относиться не только к программно-
му обеспечению, но и к дополнительным
Несвободная лицензия для документации материалам, таким как документация или
прошивки. Эти изменения были отложены,
Лицензия GNU Free Documentation License для свободной модификации текста. FDL. В каждом конкретном случае придется что позволило выпустить Sarge, но теперь
(FDL) Фонда Свободного Программного Разработчики Debian долго обсуждали про- либо выпустить текст по другой, DFSG-сов- они возымеют свое действие. Одной из
Обеспечения является дополнением для GPL, местимой лицензии или же исключить его из проблем является лицензия GNU Free
предназначенным для документации на сво- блему FDL и пришли к мнению, что докумен- секции main. Documentation License, которая была
бодное ПО. Однако, многие рассматривают ее тация, распространяющаяся на ее условиях, признана несвободной. Это значит, что
саму как несвободную или несостоятельную. не может быть включена в основной репози- Кое-какая работа в данном направлении большой объем документации придется
Основная проблема кроется в «инвариантных тарий Debian. Хотя введение в строй этого уже проделана: некоторые разработчики перелицензировать или исключить из
секциях», допускаемых FDL. Инвариантная решения было отложено с тем, чтобы выпус- Debian удалили «несвободную» документа- основного репозитария Debian. Драйвера,
секция не может быть изменена или удалена, тить Sarge, к Etch это будет относиться в пол- цию из своих пакетов, предназначенных для зависящие от прошивок, существующих
даже если она устареет и является барьером ной мере. Некоторые пакеты Debian содержат Sarge. только в двоичной форме, также придется
документацию, лицензированную по GNU удалить из состава ядра.

Разумно ожидать от Etch улучшений
в области группировки пакетов (task
system) и распознавания оборудования.
Группировка ускоряет установку Debian,
позволяя пользователям выбирать не
одиночные пакеты, а целые наборы,
предназначенные для решения тех или
иных типовых задач. В состав Sarge вхо-
дит лишь несколько подобных групп, так
что здесь Etch, несомненно, есть к чему
стремиться.

В числе уже предложенных наборов
значится «ноутбук», автоматически уста-
навливающий средства управления пита-

5 4   LXF1(70) сентябрь 2005 www.linuxformat.ru

Debian на перепутье

нием. Базовая установка Etch будет легче и ты с файлами (пакет coreutils), процесса Мультиархитектурное предложение
сможет обходиться без компилятора C, так init и демонов – еще нет.
что потребуется еще одна дополнительная Многие из современных процессоров Практика использования /lib, /lib64 и подоб-
группа: «Средства разработки C». В качестве планируемой даты выпуска поддерживают сразу несколько интерфейсов ных каталогов весьма негибкая. Как насчет
Etch называется декабрь 2006 года, так что ABI. Например, AMD64 может выполнять IA-64, способного выполнять код IA-32, HPPA
В области распознавания оборудова- на разработку остается около 18 месяцев. код IA32 и AMD64, IA-64 поддерживает и имеющего сверх того собственный набор
ния одним из интересных предложений В настоящий момент такой срок выглядит совместимость с IA32 и HPPA, а PowerPC инструкций. Как насчет процессоров с обратным
является возможность реагировать на приемлемым. Конечно, подразумевается, даже способен выполнять программы с порядков следования байтов? Как насчет ABI
изменения в аппаратной конфигурации что по мере достижения различных конт- различным порядком следования байтов! других операционных систем и эмуляторов
(например, замену видео или сетевой рольных точек в процессе переноса, сроки Проблема состоит в том, что исполняемые типа Qemu?
карты). Debian должен автоматически выхода Etch будут уточняться. файлы требуют наличия разделяемых
предложить пользователю перенастро- библиотек, использующих тот же ABI, что и В качестве решения предлагается добавлять
ить X или изменить параметры сети. Критики утверждают ,что если работа они сами, а для расположения последних префикс, определяющий ABI (процессор и ОС)
Подобные функции уже много лет пред- над Etch затянется, Debian рискует стать имеется лишь одно стандартное место. к пути библиотеки. Например, /lib/ia32-linux
лагаются Kudzu, системой распознавания нерелевантным. Это крайняя точка зрения, Чтобы выполнять двоичные файлы IA32 на или /lib/ppc64-darwin7.0 полностью опреде-
оборудования в Red Hat. но, тем не менее, вполне очевидно, что AMD64, нужны 32-битные версии разде- ляют положение необходимых библиотек. /lib64
выпуск Etch в указанный срок позволит ляемых библиотек, таких как стандартная и /lib32 можно сохранить в виде символических
Усиленная безопасность снизить ущерб, нанесенный «долгостро- библиотека C, X Window System и так далее. ссылок с целью обеспечения обратной сов-
ем» Sarge. Как разработчики дистрибутивов намерены местимости.
Etch также будет обладать повышенной бороться с этим?
безопасностью. Одним из изменений И все же, мы считаем, что в качестве Мультиархитектурное предложение Debian
станет включение APT 0.6.0, с поддержкой награды за его выпуск разработчики Текущие стандарты FHS (File-Hierarchy идет еще дальше и дает рекомендации по
криптографической проверки подлинности Debian заслужили небольшой отпуск. Им Standard) и LSB (Linux Standard Base) мало управлению программами с неродным ABI
источника, из которого происходит пакет. следует поберечь силы для долгого похода что добавляют по данному вопросу, так что через пакетную систему Debian. Вместо того,
Таким образом, загрузив что-то из сети, на Etch. LXF применяемые подходы могут варьироваться. чтобы заставлять пользователей инсталли-
вы можете быть уверены, что оно не было Для процессоров, способных выполнять 32 ровать и поддерживать 32-битную среду на
скомпрометировано в процессе доставки. и 64-битный код, 32-битные библиотеки AMD64 вручную, почему бы не позволить им
APT 0.6.0 уже некоторое время находится обычно устанавливаются в /lib, /usr/lib и так просто установить библиотеки от i386? Это
в экспериментальном репозитарии Debian далее, а 64-битные – в /lib64 и /usr/lib64. проще, чем готовить библиотеки в родном
и используется в Ubuntu, но необходимые AMD64 отличается от других. 64-битный и эмулируемом исполнении по отдельности,
инфраструктурные изменения в тестовом режим здесь предпочтителен, поэтому биб- но требует изменений в dpkg, позволяющих
дереве Etch еще не произошли. лиотеки для него располагаются в /lib, хотя указывать целевую архитектуру в зависимостях.
Debian для AMD64 располагает 32-битные К счастью, данные изменения уже были произ-
Продолжая тему безопасности, сле- библиотеки в /emul/ia32-linux. ведены и протестированы.
дует упомянуть проект SELinux (Security-
Enhanced Linux), который часто просят
включить в Etch. SELinux берет свое
начало в недрах Агентства Национальной
Безопасности США и добавляет в Linux
функции мандатного контроля доступа,
что обеспечивает более тонкую настрой-
ку политик безопасности. Библиотека
libselinux и использующие ее утилиты уже
являются частью репозитария Debian, но
другие компоненты, например, исправлен-
ные версии стандартных утилит для рабо-

Группировка пакетов, пересмотренная в Sarge, будет доработана в Etch, чтобы еще LXF1(70) сентябрь 2005  5 5
более ускорить инсталляцию.

www.linuxformat.ru

BEAGLE РУКОВОДСТВО ПО УСТАНОВКЕ

Взять его! нурасуMтпакоaноnошdвваrкiоаvгaдBоLсeвaiтngоuвlеexо
Эта ищейка найдет документы и письма, которые, как вам казалось, уже

навсегда потеряны: но сможет ли Beagle стать новым лучшим другом человека?

BДавайте посмотрим вместе с Грэхемом Моррисоном.
eagle, наряду с другими настоль- формате PDF, HTML, наиболее распростра-
ными поисковыми инструмента- ненные графические и звуковые форматы,
ми, рассматривается как нечто мгновенные сообщения Gaim и многое, мно-
из разряда компьютерных рево- гое другое. Когда вы привыкнете пользовать-
люций. В ее основе лежит про- ся Beagle, просмотр обширных иерархий па-

стая идея: введите несколько пок в поисках одного-единственного файла

слов или фраз в окне поиска, и Beagle рас- начнет казаться вам слишком трудоемким и

кроет их в список ссылок, содержащих ука- устаревшим методом. Чтобы подробнее оз-

занные термины. Иногда эти ссылки указы- накомиться с технологией и историей разра-

вают на простые файлы, но интеллект систе- ботки, посетите домашнюю страницу проекта

мы проявляется в том, что здесь с тем же ус- Beagle: http://beaglewiki.org/Main_Page.

пехом может оказаться переписка, сообще- Как уже упоминалось в 67-ом выпуске

ния электронной почты, изображения, музы- LinuxFormat, в обзоре Mandriva Linux Limited

кальные файлы, каждый из которых разме- Edition 2005, мы были встревожены тем, что

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

Это похоже на то, как работает сервис пакетов. Очевидно, разработчики Mandriva

Google Gmail. Он предлагает гигабайты дис- слишком заняты, чтобы включать в дистрибу-

кового пространства, и приучает вас никогда тив такие своенравные

не удалять отдельные письма. А как, по-ва- пакеты, как

шему, организованы все эти данные? Ну, Beagle, так что

Google предпочитает просто оставлять все как мы решили

есть. Сила Gmail заключается в использова- описать

«Когда вы привыкнете
к Beagle, старые
методы покажутся вам
трудоемкими И
НЕСОВРЕМЕННЫМИ.»

нии устрашающих поисковых алгоритмов каждый шаг установки Beagle в вручную установить некоторые
Google, чтобы моментально предоставить системе Mandriva. Если вы исполь- большие приложения. Сказав все
вам список электронных сообщений, соот- зуете другой дистрибутив, многие это, мы постараемся исключить
ветствующих вашим критериям поиска. стадии будут сходными – просто заме- большинство трудных моментов и
Например, вы можете захотеть проверить не- ните менеджер пакетов Mandriva на тот, проведем вас за руку по всем шагам,
который онлайновый заказ: просто введите который имеется в вашем дистрибутиве, и все так что от вас не потребуется каких-
«компакт-диск» и «Бритни Спирс» в форме должно заработать. либо специальных знаний. Только де-
поиска, и все письма, соответствующие этому ржитесь подальше от пустошей и осте-
запросу, будут сразу же отображены в списке. Основная трудность настройки Beagle регайтесь луны!
Это и есть тот тип интеграции, который Beagle заключается в несколько причудливом спо-
стремится принести на ваш рабочий стол. собе именования, принятом в Mandriva и в
проблемах зависимостей. Инсталляция
Но Beagle имеет одно преимущество пе- Beagle - не для слабых сердцем: она может
ред Gmail: он обрабатывает не просто вашу оказаться достаточно стрессовой. Требуется
почту, а целый набор Gnome-приложений, удовлетворить дюжину зависимостей, тре-
включая документы OpenOffice.org, файлы в бований совместимости со стороны ядра и

5 6   LXF1(70) сентяБрь 2005 www.linuxformat.ru

BEAGLE РУКОВОДСТВО ПО УСТАНОВКЕ

Этап 1 – Низкоуровневая конфигурация

Beagle активно следит за изменениями в timedia-2.6.11-9.mm, и вы можете найти Способ установки с помощью EasyURPMI
вашей файловой системе. Можно было бы него в Сети, введя имя в форме поиска
ожидать, что он поглотит значительную часть на http://rpm.pbone.net. Как только вы Преимущества установки вручную очевидны: вы Инсталляция с EasyURPMI - что может
ресурсов, но этого не происходит, потому получите файл, установите его, набрав в работаете с последней версией и получаете быть проще!
что Beagle использует систему мониторинга консоли следующую команду от имени больший контроль над тем, как Beagle работает
событий уровня ядра, называемую Inotify. суперпользователя root: на вашей системе. Обратная сторона медали выбрать локальный сервер для Contribs в сек-
Она включена в большинство современных urpmi kernel-multimedia-2.6.11-9. состоит в том, что пройдет много времени, пре-
ядер, но проблема заключается в том, mm.4mdk-1-1mdk.i586.rpm жде чем все заработает. Mandriva предлагает ции Core Distribution, после чего вы просто
что Beagle требует для своей работы Urpmi внесет изменения в ваше загрузочное компромисс за счет использования ее
специальную версию Inotify. Поскольку меню, что позволит вам выбрать вновь Contribution repository – это позволяет вам уста- щелкаете на кнопку Process To Step 3, и соот-
мы будем ставить Beagle версии 0.0.11.1, установленное ядро во время следующей навливать все сразу одной командой.
выпущенную 15 июня, нам понадобится загрузки. Также должна добавиться ветствующая команда urpmi будет сгенерирова-
необходимая для активации Inotify опция, ‘Contribs’, как его ласково называют - это
ядро, содержащее Inotify версии 0.23. что можно проверить, поискав inotify=o• хранилище пакетов, которые не вошли в пос- на автоматически. Ее нужно вставить в команд-
Более ранние версии Beagle в соответствующей строке «append» ледний релиз. Они обычно не так стабильны,
требуют более ранних файла /etc/lilo.conf. Простая перезагрузка как их собратья на диске, и установка программ ную строку и исполнить от имени root.
версий Inotify. с этим ядром обеспечит работу системы из этого репозитария может подорвать надеж-
Сборка своего Inotify, которая создаст файл устройства, ность вашей системы. Зато вы можете поиграть После того как urpmi завершит загрузку
размещенный в /dev/inotify. с некоторыми авангардными приложениями из
собственного мира Linux, и Beagle – одно из них. списка пакетов с сервера, установка Beagle бу-
ядра – сложная Секретные файлы
операция, так что Простейший путь установить Contribs – это дет очень простой:
намного проще загрузить Следующий кирпичик низкоуровневой использование сайта EasyURPMI (http:// urpmi beagle
уже скомпилированное и конфигурации, на который опирается easyurpmi.zarb.org), который настраивает раз-
любезно подготовленное для личные хранилища, доступные пользователям Ниже приведен список специфических
Mandriva ядро как пакет. Ядро, которое Beagle - поддержка расширенных Mandriva. зависимостей. Каждый из этих пакетов
нас интересует, называется kernel-mul- атрибутов в вашей локальной должен быть установлен, и автоматически
файловой системе. Расширенные Чтобы добавить репозитарий Contributions, потянет за собой множество других
атрибуты – это хороший способ сперва убедитесь, что ваша система была вы- связанных с ним пакетов, в зависимости от
присоединить некоторую брана автоматически (она будет обозначена как конфигурации вашей системы. Установите
информацию к файлу внутри «2005» для «2005 LE»). Затем вам необходимо их из Control Center, или из командной
самой файловой системы, а не строки с помощью urpmi.
хранить ее во внешней базе раздела в /etc/fstab может выглядеть таким • bison
данных или ином файле. образом: • libglib2.0_0-devel
Информацией может быть что- /dev/hda7 /home ext3 noatime,user_xattr 1 2 • gcc-c++
то обычное, например, тип • libxml2-devel
файла или время последнего Вы можете быстро перемонтировать • libexif12-devel
доступа к нему. Beagle соответствующий раздел без перезагрузки • libwv-1.0_2-devel
использует расширенные вашей машины с помощью следующей • gnome-vfs-devel
атрибуты для отслеживания команды: • mozilla-firefox-devel
файлов и их содержимого. mount -o remount /home • libxorg-x11-devel
Большинство современных • libpango1.0_0-devel
файловых систем, за Ад зависимостей • libgtk+2.0_0-devel
исключением Reiser4 и NFS, • libsqlite0-devel
поддерживают расширенные Следующий шаг – инсталляция пакетов • libgnome-vfs2_0-devel
атрибуты. В Reiser4 применяется Mandriva, от которых зависит Beagle. Вы • libgnomecanvas2_0-devel
собственный интерфейс к можете установить их с помощью утилиты • libgnomeui2_0-devel
rpmdrake или используя urpmi в командной • libgnomeprintui2-2_0-devel
расширенным атрибутам, в то время как оболочке, войдя в систему как root. • gtkhtml-devel
NFS их вообще не имеет, так что пока обе Прежде чем углубляться в отдельные пакеты,
они пока не подходят для пользователей сначала убедитесь, что у вас установлены
Beagle. все пакеты из набора Gnome Workstation. Вы
можете сделать это в Control Center системы
Чтобы включить расширенные атрибуты, Mandriva, загрузив компонент Software
вам нужно просто добавить ключ user_xattr Management, перейдя к Look At Installable
для дисковых разделов в вашем файле /etc/ Software Packages и выбрав Gnome
fstab. Поскольку Beagle предполагает запуск Workstation. Щелчок по кнопке Install начнет
от имени непривилегированного длительный процесс установки десятков
пользователя, то в действительности вам файлов, которые вам нужны.
нужно установить этот ключ только для
раздела, где размещен ваш домашний «Загрузите ядро, которое
каталог. В другой стороны, если вы любезно подготовлено для
используете один раздел, то просто Mandriva в виде пакета.» >>
установите этот ключ для корневого раздела
/. Соответствующая строка для вашего

www.linuxformat.ru LXF1(70) сентяБрь 2005  5 7

BEAGLE РУКОВОДСТВО ПО УСТАНОВКЕ

Этап 2 – Крутимся сами

>> Мы использовали готовые пакеты осталось просто набрать $ ln -s /usr/lib/pkgconfig/mozilla-firefox-
Mandriva, какие только могли, но остались
еще пять, которые нужно скачать, make и make install, как и gtkmozembed.pc /usr/lib/pkgconfig/firefox-
скомпилировать и установить:
• Mono 1.0.6 or newer или более новая в случае с инсталляцией gtkmozembed.pc
реализация Microsoft .NET Framework от
Novell. http://mono-project.com Mono. $ ln -s /usr/lib/pkgconfig/mozilla-firefox-
• gtk-sharp 1.0.x набор привязок GTK
GUI .NET. http://mono-project.com/Downloads Кроме самой Beagle, xpcom.pc /usr/lib/pkgconfig/firefox-xpcom.
• gecko-sharp 0.6 «Обертка», делающая
«движок» Mozilla доступным для остаются еще два пакета, pc
приложений GTK#. www.go-mono.com/
packagers/gecko-sharp/gecko-sharp-0.6.tar. которые нужно скачать и Нам также нужно добавить одну оп-
gz
• gmime-2.1.13 синтаксический установить: gecko-sharp и цию в сценарий конфигурации Beagle,
анализатор mime-сообщений,
необходимый для чтения вашей почты. gmime-2.1.13. Они не чтобы включить новый web-сервис. Он
http://spruce.sourceforge.net/gmime
• beagle-0.0.11.1 звезда нашего шоу. должны вызвать особых позволит вам отправлять запросы к базе
http://ftp.gnome.org/pub/GNOME/sources/
beagle/0.0/ проблем. Просто загрузите данных Beagle из любого web-браузера.
Самое крупное приложение из этих
пяти, – это Mono. Оно отнимает больше файлы, распакуйте их, за- Чтобы конфигурационный скрипт добавил
всего времени, так что хорошо бы с него и
начать. пустите ./configure -- этот сервис, наберите следующее:
Файл объемом около 15Мб может
быть легко загружен с сайта http://go- prefix=/usr в каталоге $ ./configure --prefix=/usr --enable-
mono.com или получен с помощью
следующей команды: Установка всех пакета, а затем выполните webservices=yes
wget http://go-mono.com/sources/mono- необходимых для Beagle приложений с использованием с правами root команды Теперь запуск сценария должен прой-
1.1/mono-1.1.8.tar.gz менеджера пакетов Mandriva. make и make install для
Компиляция Mono обычно проходит ти без каких-либо ошибок. Когда работа
легко, разве что требует некоторого време-
ни. Прежде всего, нам нужно распаковать – gtk-sharp-1.0, который используется в установки каждого из них. Если все прой- скрипта завершится, последний блок тек-
скачанный архив, запустить сценарий кон-
фигурации, чтобы сборка была оптимизи- основном для графического интерфейса дет как надо, нам останется установить ста проинформирует вас о том, какие сов-
рована под вашу систему, и, наконец, дать
команду make, которая должна собрать пользователя. Важно, чтобы это была только один пакет, а именно – Beagle. местимые расширения были найдены:
приложение. Компиляция займет примерно
30 минут на современной машине – этого именно версия 1.0, а не более свежая -
времени как раз достаточно, чтобы про-
фильтровать воду, перемолоть немного 1.9. Как и в случае со всеми пакетами, ко- «Вы даже можете
кофе и сделать освежающий напиток. торые нам нужно собрать, для установки отправлять запросы к
В наших примерах мы всегда передаем необходимо выполнить четыре стандарт- Beagle из вашего
префикс /usr сценарию конфигурации, ных операции: распаковку архива, конфи- web-браузера.»
поскольку Mandriva использует именно это гурацию процесса сборки, собственно
местоположение. Вам может потребоваться сборку приложения и, наконец,
изменить его, чтобы соответствовать фай- инсталляцию.
ловой системе вашего дистрибутива.
tar xvzf mono-1.1.8.tar.gz tar xvzf gtk-sharp-1.0.10.tar.gz
cd mono-1.1.8
./configure --prefix=/usr cd gtk-sharp-1.0.10
make
sudo make install ./configure --prefix=/usr Установка Beagle Target OS: linux
Mono обеспечивает платформу разра- В случае с gtk-sharp есть одна Extended Attributes: libc
ботки для Beagle. Другие компоненты, ко-
торые вам придется установить, обеспечи- особенность, которая заключается в Этот этап на самом деле достаточно прост, Prefix: /usr
вают расширение возможностей платфор-
мы .NET, которую предоставляет нам Mono. выводе конфигурационного скрипта. Он поскольку все необходимое уже установле- GNOME Prefix: /usr
Первый пакет из тех, что нам потребуются
показывает вам, какие компоненты gtk- но. После того, как вы скачали tar-файл, KDE Prefix: /usr

sharp будут установлены. Если у вас есть распаковали его, перешли во вновь со- Evolution-Sharp? no

все необходимые пакеты разработки, вы зданный каталог, у вас может возникнуть (missing dependencies)

должны увидеть что-то подобное этому: желание сразу же двинуться вперед и вы- gsf-sharp? no

Optional assemblies included in the build: полнить команду ./configure --prefix=/ gst-sharp? no

* art-sharp.dll: yes usr. Если вы так сделаете, то будете «об- Epiphany Extension? no (Epiphany not

* gnome-sharp.dll: yes радованы» примерно такой ошибкой: installed)

* glade-sharp.dll: yes ‘configure: error: unable to find Mozilla Extension? yes

* gda-sharp.dll: no grkmozembed; this can be found in wv1? yes

* gnomedb-sharp.dll: no the mozilla/firefox/thunderbird libchm? no

* rsvg-sharp.dll: no development packages’. Local SqliteClient? yes

* gtkhtml-sharp.dll: no Конфигурационный сценарий жалуется, Enable WebServices yes

* vte-sharp.dll: no что не может найти grkmoztmbed, обычно Любые дальнейшие расширения, какие вы

Библиотеки, которые нам необходимы устанавливаемый как часть пакета разра- пожелаете добавить, например, Evolution-

- это art-sharp.dll, gnome-sharp.dll и glade- ботчика Firefox. Проблема заключается в sharp (которое позволит Beagle индексиро-

sharp.dll, так что остальной вывод можно том, что в Mandriva требуемый пакет уже вать адресные книги Evolution), могут быть

смело игнорировать. Если же один их этих был установлен, когда мы инсталлировали скачаны и установлены со страницы допол-

трех обязательных пакетов окажется не mozilla-firefox-devel, но имена файлов в нительных пакетов Beagle http://beaglewiki.

включен (в приведенном выводе будет нем отличаются от тех, которые ищет сце- org/Optional_Prerequisites.

значиться ‘no’ вместо ‘yes’), вам нужно убе- нарий конфигурации. На самом деле, для http://beaglewiki.org/

диться, что вы правильно установили все работы сценария необходимы два файла, Optional_Prerequisites.

библиотеки разработки Gnome. Вы можете и наименее разрушительный путь – со-

проверить это, просто набрав ‘-devel’ в ка- здать на имеющиеся в Mandriva файлы Наконец, наберите make и make install

честве критерия поиска в менеджере паке- символические ссылки с именами, кото- (от имени root), чтобы собрать и установить

тов Mandriva. Если же с выводом конфигу- рые ожидает видеть конфигурационный Beagle в вашу систему.

рационного скрипта вам повезло, то вам сценарий:

5 8   LXF1(70) сентяБрь 2005 www.linuxformat.ru

BEAGLE РУКОВОДСТВО ПО УСТАНОВКЕ

Этап 3 – Запускаем Beagle

Beagle запускается как демон от имени файле .noindex, что разрешит нормально об- тов. Щелчок по ней откроет простое окно Вы можете выполнить
текущего пользователи при помощи коман- рабатывать все остальные файлы в данном поиска, где можно ввести запрос прове- локальный поиск,
ды beagled. Если у вас возникают пробле- каталоге. ренным веками способом. Результат дол- используя web-браузер,
мы, добавьте параметр -debug, который жен сразу появиться ниже в виде списка. например, Firefox.
поможет определить, что же идет Второй способ – добавить список фай- Просмотр каждого результата запускается
неправильно. лов и директорий в центральный файл с щелчком по ссылке. Если вы оставите окно beagled --web-start
именем .neverindex, размещаемый в ва- результатов открытым, оно будет обнов- Далее, нужно набрать в браузере следу-
Наиболее часто встречающаяся при за- шем домашнем каталоге. Он работает так ляться, по мере того как Beagle будет нахо-
пуске Beagle проблема выглядит следую- же, как и список файлов и директорий, до- дить новое содержимое, например, допол- ющий адрес: http://localhost:888/beagle/
щим образом: бавленных в файл .noindex, и они оба по- нительные строки в IM-диалоге или новые search.aspx. Ваш браузер отобразит стра-
[graham@stinky ~]$ beagled нимают шаблоны и регулярные выражения. сообщения электронной почты. ничку, очень похожую по интерфейсу на
ioctl: Bad address Процесс фоновой индексации вряд ли бу- инструмент Best. Вам также ничего не стоит
Unhandled Exception: System.IO. дет заметен при работе, поскольку Beagle Вы даже можете работать с Beagle, че- загрузить инструментальную панель Beagle
IOException: Attempt to watch /usr/share/ управляет использованием CPU. Загрузка рез свой web-браузер. Для этого мы доба- для Firefox, которая предоставляет анало-
applications failed! процессора минимальна, когда вы работае- вили соответствующую конфигурационную гичную функциональность.
in <0x0026c> Beagle.Util.Inotify:Subscribe... те за компьютером, зато Beagle будет пот- опцию, когда компилировали Beagle. Чтобы
реблять циклы ожидания процессора, когда такой способ доступа заработал, надо запус- Новый способ поиска
Это как раз тот случай, когда версия вы не используете вашу машину. тить демон с дополнительным ключом:
Inotify в ядре несовместима с Beagle, и вам Почему же такая простая идея привлекает так
нужно найти новое ядро (такое как Консоль или GUI 3 много внимания? Ответ заключается в том,
multimedia-ядро из описания первого эта- что вам больше не нужно беспокоиться об ор-
па). Если же запуск beagled проходит нор- Теперь, пройдя столь длинный путь, чтобы 5 ганизации ваших данных, поскольку с этих
мально, вы можете проверить его статус заставить его работать, мы можем принять пор они всегда доступны непосредственно из
командой beagled-info: «новелловского пса» на службу. Оставшись Beagle, и это меняет ваш подход к индексиро-
Scheduler: ненадолго в командной строке, вы можете ванию и хранению информации. Обращение к
Count: 114 отправить Beagle запрос, используя коман- Beagle - гораздо более эффективный процесс
Status: Working ду с говорящим названием beagle-query: поиска, чем самостоятельная охота за нужным
1 Generator 0 beagle-query sausage файлом; и более того, Beagle предоставит вам
File System Crawler в числе содержащих искомое слово такие
last=/home/graham/beagle/beagle-0.0.11.1, Эта команда найдет в вашей домашней файлы, о которых вы бы и не подумали.
uncrawled=964, dirty=964) директории все поддерживаемые Beagle
файлы, содержащие слово ‘sausage’ (колба- Beagle все еще находится на ранней ста-
Теперь Beagle запущен и будет автомати- са) – документы Word, сообщения Gaim, дии разработки. В дальнейшем, по мере того
чески индексировать ваш домашний каталог в почта, текстовые и двоичные файлы. Если как будут добавляться новые типы файлов и
фоновом режиме. Если по каким-либо причи- вы не коллекционируете рецепты изготовле- уделяться больше внимания вопросам ста-
нам вы желаете, чтобы некоторая часть ката- ния колбасы, то, вероятно, не будет найдено бильности, он должен становиться все мощ-
лога не индексировалась, вы можете посту- ничего, но вы хотя бы узнаете, как это дела- нее и мощнее. Не за горами то время, когда
пить двумя способами. Первый – создать ется. Однако лучший способ отправить за- Beagle станет неотъемлемой частью вашего
скрытый файл с именем .noindex в каждой прос Beagle - использование графической рабочего стола, как web-браузер или проиг-
директории, которую вы хотите исключить из утилиты Bleeding Edge Search Tool или, ко- рыватель мультимедиа, и, хочется надеяться,
обработки. Это запретит Beagle индексировать ротко, Best. что к тому моменту он будет иметь более про-
данный каталог и все его подкаталоги. Вы мо- стую процедуру инсталляции. В любом слу-
жете перечислить имена конкретных файлов в Как только Best будет вызван, вы уви- чае, вы уже сейчас в состоянии получить ра-
дите иконку Beagle на панели инструмен- ботающую копию Beagle на вашей системе, в
чем только что могли убедиться. LXF
Установленный Beagle во всей красе

[1] Это Bleeding Edge Search Tool, или Best 2 1
– графическая утилита для формирования 4
запросов к базе данных Beagle и
отображения результатов в виде списка.

[2] Когда сообщение попадает в Gaim
Instant Messenger, ваш диалог будет
доступен для запросов.

[3] Firefox нуждается в расширении beagle.
xpi, после чего история вашего браузера
также может быть доступна для запросов,
позволяя вам переходить непосредственно
к ссылкам.

[4] Содержание документов Word, как
созданных в почтенном приложении
Microsoft, так и в OpenOffice.org, также
может быть проиндексировано.

[5] Вместо того, чтобы тратить время на
сортировку ваших входящих сообщений,
почему бы не доверить Beagle извлекать
для вас любые важные письма?

www.linuxformat.ru LXF1(70) сентяБрь 2005  5 9

разработка

В сетиВремя отдыха
Пока мы удивлялись инновациям в настольных приложениях, web-разработчики делали гигантские шаги в
улучшении взаимодействия с пользователем, доставки информации и быстродействия. Амиас Чэннер (Amias
Channer) рассматривает 3 наиболее активных проекта: прорыв мета-языка XML, обещающего пользователям
более быстрый и качественный доступ к информации, впечатляющие перспективы для хакеров из Google, но
прежде всего - новый сервис BBC, чья открытость вознаграждена появлением заставляющих задуматься
применений для его RSS-содержимого.

BBC: новое слово в распространении контента

М ы любим web-програм- щему важное и достойное ваших програм- информации, собранному BBC, а также для Перед тем, как начать использовать
мирование – сидение до- мистских способностей. обеспечения качественного бета-тестирова- сервис, необходимо прочитать условия
поздна, кофе и просмотр ния их RSS-сервиса. его предоставления (не волнуйтесь, ли-
Buffy в ожидании усколь- Что же, теперь такой источник сущест- цензия сравнительно проста, и ей до-
зающей Музы… затем вует. BBC открывает свой контент для бес- В данный момент доступны RSS-каналы вольно легко следовать). Для тех, кто
возбуждение внезапно платного, некоммерческого использования новостей, спорта, проектов сообщества BBC, часто читает лицензии, она будет прямо-
посетившей идеи и лихорадочное кодиро- на своем новом сайте: http://backstage.bbc. путешествий, погоды, развлечений, а также таки глотком свежего воздуха. Суть со-
вание в ночи до тех пор, пока мысль не co.uk для всех заинтересованных лиц. На программ радио и телевидения. Некоторые глашения состоит в том, что вы не имеете
станет осязаемой. Но утром вы всего лишь момент написания этой статьи доступны каналы содержат более полную информа- права выставлять счета посетителям сай-
получаете еще один способ для показа ва- только RSS-источники и несколько API для цию, чем другие, но сервис расширяется: к та (вряд ли это первое, о чем думают раз-
ших воскресных фотографий в Сети. Если доступа к содержимому. Однако, в ближай- примеру, программы раньше были ограни- работчики проектов с открытыми исход-
бы только существовал источник настояще- шее время ожидается гораздо больше. чены только каналом BBC4, но сейчас там ными текстами), конспектировать и со-
го, надежного контента – что-то по-настоя- Проект задуман для привлечения сообщес- появились и недельные программы других кращать информацию. Вы также должны
тва web-разработчиков к огромному объему каналов BBC и радиостанций.

6 0   LXF1(70) сентябрь 2005 www.linuxformat.ru

разработка

Исследование: владельцев ин- лее комфортно, когда думаю о том, как
эксперименты с BBC Backstage формации, пос- технология может улучшиться в будущем».
кольку физический
Некоторые из наших самых любимых

«Я некоторое время экспериментировал с контроль за ее прототипов приведены в списке пяти луч-
аудио, сетевыми дневниками и RSS, но представлением и ших во врезке внизу. «Мы были очень

настоящее понимание пришло после контекстом будет уте- впечатлены качеством поступивших ра-

того, как я осознал всю мощь техноло- рян. Однако, такой бот»,-говорит Меткалф. «И нам опреде-
гии podcasting разрабатываемой Дэйвом подход, очевидно, ленно нужно подумать о том, как внедрить
Винером (Dave Winner) и Адамом Карри предоставляет и мно- некоторые из этих идей в bbc.co.uk. Люди,
(Adam Curry). Я могу загрузить контент, синтезировать текст жество преимуществ, например, расшире- предоставившие прототипы, сохраняют
и затем распространять улучшенную таким образом инфор- ние области охвата и инновации”,-сказал г- право интеллектуальной собственности,
мацию как podcast. Моим Святым Граалем всегда был ле- н Меткалф. поэтому мы будем работать над идеями
гальный источник новостей мирового класса. Так что, когда

Тед Гилкрист (Ted Gilchrist) появился проект BBC Backstage, я был счастлив. Я перевел С тех пор, как сайт Backstage был от- вместе с ними».
Rebotcast канала мировых все свои RSS-ленты, начиная с погоды в Прадхо-Бей, штат крыт, он привлекает активное сообщество
новостей BBC Аляска и заканчивая новостями BBC на Linux-сервер за разработчиков и несколько действительно Цель RSS
http://feeds.feedburner.com/ $600 в моем подвале. Я использую систему синтеза речи инновационных прототипов. Пока что не
bbcworldRebotcast Festival, прекрасный образчик открытого программного было отмечено нарушений условий согла- British Broadcasting Corporation (BBC) –
обеспечения. Я программирую на Perl и применяю десятки шения, что же касается прототипов, то они уникальная компания в плане трансляции
модулей, разработанных Perl-сообществом и распространя- проверяются и в момент регистрации, и своих передач, из-за своего устава и не-
емых через CPAN.org. Таким образом, моё использование регулярно после него. коммерческого статуса. Эти фактора дела-
RSS зависит от доброй воли незнакомых мне людей, рабо- ют компанию очень близкой по духу к
тающих в одиночку или в творческих союзах.» Чтобы получить больше информации о Интернету. BBC всегда использовала Open

BBC Backstage, вы можете подписаться на Source там, где это возможно и даже под-

обеспечить ссылку на сайт BBC. В целом, латили показы, так, что они вполне могут список рассылки, который стремительно держивает несколько собственных проек-

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

Хотя вам и не позволяется брать плату без необходимости платить снова. ком информации о RSS для британских У компании сильная репутация в

за информацию, вы тем не менее, имеете Во время запуска сервиса также ожи- проектов. Кроме того, этот список позволя- Интернете, поэтому обязательства, которые

возможность показывать рекламу на ва- дается появление некоторых результатов ет почувствовать, что же происходит в сов- она берет на себя в проекте Backstage

шем сайте. Но вы не можете утверждать, недавних экспериментов BBC с сетевым ременном мире web-программирования. убеждают, что его контент будет также хо-

что информация принадлежит вам или вещанием. В общем-то, вся программа Дункан Меткалф (Duncan Metcalfe), недав- рошо восприниматься сообществом, как и

брать деньги за ее использование.

Официальный запуск сайта http://

«С этими людьми, в их окружении поbackstage.bbc.co.uk произошел 23 июля на

конференции Open Tech 2005 (Хаммерсмит,
Лондон), организованной UK Unix и Open

настоящему приятно работать.»Systems User Group – это огромный вклад

BBC в сообщество разработчиков Open

Source. В сетевых дневниках и среди ком-

пьютерной публики ходят слухи, что BBC Open Tech посвящена технологиям, к кото- ний студент, приславший несколько прото- остальные сервисы. Предполагается, что

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

ке телевизионных сериалов. Вы только привычное открытое программное обеспе- рит, что вдохновлен идеями и поддержкой бы новостей, в частности ожидается, что к

представьте себе подобное! чение, или нестандартное применение проекта. «Это мое первое участие в каком- концу года 10% трафика news.bbc.co.uk бу-

Хотя такой шаг, скорее всего, снизит электронных устройств, например Xbox. либо качестве в сети разработчиков. С эти- дет передаваться по RSS.

доходы от продажи DVD и видео кассет, Лучшая работа ми людьми, в их окружении по настояще-
это может стать вполне цивилизованным му приятно работать и я чувствую себя бо-

ответом на бум нелегального копирования, Лидер проекта Backstage Бен Меткалф

который угрожает сделать по сути тоже са- (Ben Metcalfe) потратил месяцы, работая

мое. По крайней мере, в этом случае BBC над ним в новом подразделении BBC. Как

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

что уходит наружу, а не просто оставлять к контенту, требовался «дар убеждения».

все на откуп пиратам. “Когда речь идет о праве распространять

Такой ход будет вполне соответствовать контент на web-сайтах других людей, вы и

уставу BBC. Покупатели лицензий уже оп- в самом деле просите довольно много от

5 лучших прототипов www.missingwords.co.uk: все равно что жить в одной комнате с диктором.
BBC Backstage

• www.chatbots.co.uk/newsbot новости читает виртуальный диктор.
• www.assistmedia.com/trafficlite Информация и дорожных пробках и т.п. на вашем мобильном
телефоне.
• www.missingwords.co.uk Онлайн-версия игры в слова «Have I Got News For You», с новыми
заголовками, генерируемыми каждые 15 минут из RSS.
• www.backstage.min-data.co.uk/sport поиск новостей о любимой британской футбольной команде.
• www.justinflavin.com/tagsoup/tagsouprss.php новости технологий BBC.

www.linuxformat.ru LXF1(70) сентябрь 2005  6 1

разработка

Аякс, перемены НЕСУЩИЙ мости изобретать колесо всякий раз, когда Традиционный DHTML ограничен манипуля-
вы собираетесь куда-то ехать. Основная циями с данными, доступными через интер-
проблема с web-архитектурами заключается фейс объектной модели документа (DOM –
Document Object Model), тогда как Ajax-при-
в том, что они имеют тенденцию быть весь- ложения могут запросить нужные сведения
напрямую от сервера. Этот трюк обычно де-
ма гетерогенными, так что какие-либо про- лается с помощью новой JavaScript-функции
XMLHttpRequest(), которая только недавно
Используемая в Google Maps, Gmail и мес- пути, позволяющие web-страницам манипу- веренные методы бывает трудно выделить и была реализована в основных web-браузе-
рах. С ее помощью страница может запро-
тами в Flickr (программе для публикации лировать своей информацией или же полу- воспроизвести в других сценариях. сить любые данные из любого места в
Интернете, используя протокол HTTP.
фотографий), технология с именем Ajax чать больше данных без видимой перезаг- Выявление факта, что ваша работа повторяет Предоставляемые ею возможности огром-
ны: вы можете загрузить последний список
привлекает все большее внимание, особен- рузки. Кэширование и умелое расположение какой-то паттерн проектирования – это уже записей в сетевом дневнике, заголовки но-
востей, анонсы, сообщения журнала сервера
но последние несколько месяцев. Сначала страниц могут сделать переход «клиент- само по себе искусство. Паттерны не обяза- или, если у вас совсем туго с фантазией,
курсы валют.
мы не совсем понимали, что это такое на са- сервер-клиент» более плавным, но задерж- тельно помогут вам создать лучший код, но
Также довольно легко можно сгенериро-
мом деле, хотя и были совершенно уверены, ка или перерыв в работе с пользователем от они предоставят набор полезных указаний, вать поток XML из базы данных и использо-
вать его в Ajax.
что это не средство для мытья посуды и не этого не исчезнет. как не загнать самого себя в ловушку.
Но на этом веселье не кончается.
голландская футбольная команда. Мы также Ajax привносит третий уровень потока Модель MVC - один из наиболее извес- Поскольку XML-данные структурированы,
они легко могут быть помещены на страни-
знали, что сайты, где используется ЭТО, структурированных данных. Как правило, тных паттернов, используемых в програм- цу, откуда их вызвали, при помощи некото-
рых манипуляций с CSS и DOM. Все это про-
весьма круты и думали, что так можно ска- речь идет об XML, хотя может использовать- мировании. Он применяется почти во всех изойдет в фоновом режиме с помощью ме-
ханизма событий JavaScript, и в этом случае
зать и в отношении Ajax. Теперь мы знаем о ся и JavaScript Object Notation. Вы можете операционных системах с графическим ин- можно даже использовать язык XSLT
(eXtensible Stylesheet Language
нем немного больше, и, откровенно говоря, «сторонние разработчики Transformation) для преобразования XML в
мы впечатлены. могут улучшить ваш сайт и HTML прямо в браузере.
добавить новых данных»
Термин Ajax был придуман web-разра- В традиционном web-приложении для
ботчиком с большим стажем Джесси этого потребуется перезагрузить некоторую,
Джеймсом Гарреттом (Jessy James Garrett), иногда преднамеренно скрытую (брр...),
чье фото украшает эту страницу. «Когда я страницу. В любом случае, этот подход при-
обсуждал этот подход с клиентами, мне ну- ведет к тому, что браузер будет чем-то занят
и не будет отвечать на действия пользовате-
жен был более короткий термин, чем ля. Добавьте к этому создание и отрисовку
PNG и вы поймете почему слово web-сайт
Asynchronous + JavaScript + CSS + DOM + подумать, что добавление нового уровня терфейсом. Его главное преимущество со- уже не выражает того, что имеет место быть.
Слово «приложение» подходит куда, пос-
XMLHttpRequest»,- только больше замедлит процесс, но в дейс- стоит в том, что он позволяет разделить раз- кольку отражает все то взаимодействие, что
происходит за браузером.
написал он на сайте твительности некоторые вещи ускорятся. работку интерфейса и прикладных компо-
Будущее web
компании web-кон- Этот отдельный уровень позволяет приме- нентов, необходимых для его функциониро-
Из-за отсутствия перегрузки страниц подход
сультантов Adaptive нять логику обработки данных перед тем, как вания, тогда как в традиционной web-пара- Ajax (будучи примененным правильно) дол-
жен приводить к существенному приросту в
Path, которая ис- они вернутся на сервер, или даже заставить дигме эти две части тесно связаны друг с скорости, по сравнению с методами старой
школы. После начальной загрузки страницы,
пользовала данный Ajax выполнять некоторые простые задачи другом. все вызовы к вашему серверу будут просто
извлекать данные без необходимости за-
подход в нескольких самостоятельно. Это весьма полезно для XML коктейль полнения шаблонов или принятия решений
проектах, но не яв- проверки данных, но Ajax раскрывается во о показе того или иного документа.

ляется ее непос- всей своей красе, когда вам нужно быстрое Если вы занимались web-разработкой в те- На уровне одной сессии прирост почти
не заметен, однако в целом для сайта, про-
редственным взаимодействие с пользователем. чение некоторого времени, то можете поду- изойдет ощутимое снижение нагрузки на
сервер, что, в свою очередь, сделает извле-
изобретателем. Поборники паттернов проектирования мать, что все это очень напоминает DHTML, чение данных еще более быстрым.

На самом деле, Ajax совсем не новая и узнают в такой модели архитектуру MVC и это на самом деле так. Но есть и кое-что Другое преимущество Ajax – четкое раз-
деление уровней данных, интерфейса и ло-
photo and diagrams courtesy adaptive path даже не оригинальная технология. Это прос- (model-view-controller). Паттерны проекти- весьма специфичное – это XML! гики. Это означает, что сторонние разработ-

то новый, более искусный способ использо- рования выделяют типы программных

вания старых возможностей. В частности, структур, которые присутствуют почти в каж- Браузер клиента
Ajax использует зрелые технологии, базиру- дой программе, и позволяют использовать
ющиеся на открытых стандартах (HTML, их как проверенные практики без необходи- Пользователь

CSS, JavaScript/ECMAScript и XML), так что Движок Ajax
вам потребуются лишь минимальные до-
полнительные знания. Кроме того, вам не Браузер клиента HTML+CSS data

понадобятся никакие новые модули к брау- Пользователь Движок Ajax
зеру. Что действительно ново, так это идеи,

стоящие за Ajax. К ним придется привыкнуть

– но сам процесс обещает быть весьма ин- HTTP-запрос HTTP-запрос

тересным, а результаты - действительно Транспорт HTTP(S) Транспорт HTTP(S)
впечатляющими.
Данные HTML+CSS Данные XML

Это действительно Web-сервер Web и/или XML-сервер
полезно!

Обычные web-приложения имеют привыч- Хранилища данных, обработка, Хранилища данных, обработка,
ную клиент-серверную структуру, с запроса- унаследованные системы унаследованные системы
ми пользователей (или «вызовами HTTP»),
отправляемыми на сервер и почти всегда Серверные системы Серверные системы
вызывающими полную перезагрузку стра-
ницы. Обычно вся логика сосредоточена на Классическая модель Модель web-приложения
сервере, а в браузере отображаются простые web-приложения на базе Ajax
страницы, хотя многие люди пытались найти

6 2   LXF1(70) сентябрь 2005 www.linuxformat.ru

разработка

5 лучших web-сайтов на Ajax ния с возможностью объединения парадиг-
мы Ajax с надежной серверной технологией

• http://maps.google.co.uk – изумительный сайт Google с картографической (в данный момент одна из наиболее попу-

информацией. лярных - Ruby on Rails). Эти инструменты
• http://gmail.google.com – почтовый сервис Google. могут сильно помочь при переходе на Ajax,
• www.google.com/webhp?hl=en&complete=1 – новый поисковый интерфейс Google но вряд ли будут очень полезны, если до-
с автоматическими подсказками. бавляются в уже существующий сайт.
• www.monoplylive.com – онлайн-версия игры «Монополия» с использованием
GPS и данных, поступающих от водителей такси В условиях постоянно появляющегося
• www.basecamphq.com – сайт управления проектами, построен с использованием открытого RSS-контента, распространяемого
Ruby on Rails. под довольно гибкими лицензиями, Ajax

скоро станет нормой, так что традиционные

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

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

ные подробности. Если вы использовали ных технологий. Во-первых, в Ajax, в отли- одному производителю (как, например, в технологий, парадигм и просто модных слов,

классы JavaScript при первоначальном на- чие от Flash, вы всегда можете увидеть ис- случае с Java), это делает невозможным но Ajax заслуживает вашего внимания за

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

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

деления методов. Например, Google Maps изучающих чужие решения. Во-вторых, пос- несколько инструментов, позволяющих со- тенциал для инноваций в пользовательских

уже запустил несколько модифицированных кольку эта технология основывается на стан- здавать основанные на Ajax web-приложе- интерфейсах.

версий, в каждой из которых используется

один «движок», поставляющий географи- Классическая модель web-приложения (синхронный режим)
ческие данные различным интерфейсам.

Перед тем, как разрешить сторонним Пользователь Клиент Пользователь
программистам доступ к вашим данным, >> >>
было бы разумно проработать правила ис- Пользователь
пользования и создать что-то вроде про- >>

граммы поддержки разработчиков (Wiki или Передача данных Передача данных Передача данных данных
>> >> >> >
список рассылки).
Передача
Так в чем подвох? Время >

Вероятно вы думаете, «Все это звучит заме- > > > >
чательно, но в чем подвох?». Что ж, сущест-
вует несколько проблем, но их легко обойти. >> сервер >>
В то время, как стандартные web-приложе- Обработка системой Обработка системой
ния не сильно теряют в ситуациях, когда
клиент использует устаревший web-браузер Модель web-приложения на базе Ajax (асинхронный режим)
или вообще не использует его, Ajax прило-
жения могут не заработать или стать полным Клиент
кошмаром, когда дело касается доступности
приложения для людей с физическими не- Интерфейс браузера
достатками. Программы - читатели текста и
принтеры Брайля будут полностью нерабо- Пользователь >Отобврваождаен>ие >>> >Отобврваождаен>ие >>> О>тобврваождаен>ие >>> >Отобврваождаен>ие >>>
тоспособны в Ajax-приложении и вряд ли
смогут работать с XMLHttpRequest(). Ajax Передача Передача данных Передача данных Передача
> >> >> >
Для таких браузеров необходимо обес- Обработка на стороне клиента
печить альтернативный подход или сделать
так, чтобы все действия были доступны с Время данных данных
помощью нормальных форм и стандартных > >
ссылок.
> >> > >> > >> > >>
Не все функции Ajax доступны во всех
броузерах. Чтобы обойти это ограничение, Обработка на Обработка на Обработка на Обработка на
написаны несколько JavaScript-библиотек с стороне сервера стороне сервера стороне сервера стороне сервера
унифицированным API, позволяющим кор-
ректно определять ситуации, в которых Ajax сервер
использоваться не может.

Только сейчас, когда применяемые в
Ajax технологии вполне созрели, он перестал
быть чем-то интересным, но не имеющим
места в реальной жизни и начал использо-
ваться во многих впечатляющих сайтах.
Google Maps, Google Suggest доказали его
возможности и помогли получить признание
среди web-разработчиков.

www.linuxformat.ru LXF1(70) сентябрь 2005  6 3

разработка

Google Maps — рай для хакера данных в формате XML. В процессе за-
грузки этот XML передается в
XmlHttpRequest() при помощи вызова фун-
кции с родительской страницы. Это не-
сколько странно – ведь Ajax мог быть ис-
пользован для достижения того же самого
эффекта напрямую. Мы не знаем, почему
так было сделано, хотя можем предполо-
жить, что разработчики Google не хотели
выдать реальное местоположение XML-
сервера и разместили перед ним кэширую-
щий прокси. С учетом развития технологий
HTTP-кэширования они могли предпочесть
традиционный HTTP-запрос использова-
нию сырого XML без какого-либо кэширо-
вания на уровне протокола.

После получения данных, они переда-
ются функции _load() родительского окна,
затем происходит XSLT-трансформация,
превращающая XML в локальную инфор-
мационную панель. Эта перезагрузка обес-
печивает создание красивых указателей,
речевых пузырей и маршрутных линий на
карте слева. Благодаря Ajax, данные могут
происходить откуда угодно, но будут иметь
смысл только в случае, если в них содер-
жатся географические координаты.

Сломай меня, если
можешь!

Теперь, когда мы знаем, как все утроено,

давайте попробуем повеселиться. Чтобы

создать новую карту, требуется не так уж

много (подробности см. на сайте Google

Maps), поскольку неформальному описа-

нию API уже посвящены кое-какие Wiki и

списки рассылки. Однако, если вы не хоти-

те переписывать свой web-сайт каждый

Карты Google Maps полезны сами по себе, но с учетом данных, получаемых через Ajax, день, следует подождать публикации офи-
все становится куда интереснее. Здесь мы видим информацию об автобусных остановках. циальной версии Google Maps API.

Самым нетерпеливым рекомендуем

Если вы ищите реальный пример, отображающая на спутниковых картах гео- Обработка карт впечатляет, но настоя- начать с посещения www.mygmaps.com и

демонстрирующий, что хорошего можно графические объекты, координаты кото- щая магия кроется в позиционировании на генерации карты с помощью web-интер-

сделать при помощи Ajax, рекомендуем рых сохранены в формате XML. Это обес- них точек и соединительных линий. фейса. Он позволит вам создать достаточ-

взглянуть на проект Google Maps. Если вы печивает комфорт и удобство «родного» Пользовательский запрос отправляется но примитивный файл данных, разместит

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

по адресу http://maps.google.com трудно поверить, что им одновременно ветной странице содержится скрытый можно стремиться. Затем используйте код

Каждый, кто хоть раз видел систему управляют две различных системы. фрейм, содержащий большое количество из http://stuff.rancidbacon.com/google-

Keyhole.com, использующую снимки со Два метода Авторские права на Google Maps
спутников, трехмерную географию и кар-
ты, непременно испытает чувство дежа- Ну и как же оно работает? Удивитель-

вю: Google недавно приобрел Keyhole и но, но Ajax используется только для за- Google намеренно избегает ответа на вопрос о Делая это, разработчики нарушили лицензию,
именно ее разработки лежат в основе проса данных – загрузка карт происходит повторном использовании сервиса Google на условиях которой Google получил картогра-
Google Maps. Программисты компании через стандартные фреймы IFRAME, так Maps. Похоже, что до тех пор, пока вы упоми- фические данные. Извлечение карт и исполь-
взяли чистое Windows-приложение и пе- что вы по-прежнему можете пользоваться наете Google и других держателей авторских зование их для любых других целей нарушает
ренесли его в web, попутно сделав более кнопками Back и Forward в вашем браузе- прав на материалы на своих страницах, вы права владельцев, так что инициативу при-
универсальным, доступным и ре – каждое обновление фрейма оставля- вольны использовать его в рамках стандартных шлось закрыть, чтобы вывести Google из-под
бесплатным. ет запись в истории посещенных страниц. ограничений (НЕ-порно, НЕ-терроризм и так удара. Кстати, уведомление о прекращении ра-
Это объясняет, почему показ карт работает далее). К настоящему моменту известно о за- боты было типичным для Google. Оно напоми-
Тем не менее, по-настоящему мудрым в любом браузере, а отображение данных крытии лишь одного проекта – сайта, которые нало записку друга и даже содержало извине-
оказался следующий шаг. Для получения на них – только в достаточно новых (хотя позволял склеивать кусочки карт в большое по- ния перед держателем сайта.
данных и отрисовки карт было решено сторонники Internet Explorer могут исполь- лотно.
использовать Ajax. В результате получи- зовать версию 3 и выше).
лась поистине потрясающая система,

6 4   LXF1(70) сентябрь 2005 www.linuxformat.ru

разработка

Исследование: 5 лучших применений
экспериментируем с Google Maps Google Maps

Дункан Баркли «Я решил сделать что-нибудь отображающее события, • www.chicagocrime.org
(Duncan Barclay) попавшие в новости BBC, на карте Google Maps. С Чикаго – следующая жертва угонщиков Grand Theft Auto.
Новости графств получением сведений из RSS-ленты и расположением их на • www.busmonster.com
http://backstage. «местности» не возникло проблем. Нужно было лишь Будем надеяться, последний гвоздь в гроб автомобилистов Сиэттла.
min-data.co.uk/news разобраться с долготой и широтой, загрузить и • www.gtraffic.info
проанализировать данные (я использовал PHP), а затем Узнайте, что делает лондонская полиция при помощи дорожных камер.
передать их в виде XML сценарию Google Maps. Разместить • www.dynamite.co.uk/local
карту на странице было уже сложнее. Мне пришлось Google Maps, BBC Travel, местные новости, фотографии Flickr, ...
просмотреть исходные тексты Google Local и удалить весь • www.housingmaps.com
код, не относящийся к отображению карты. Случались и Найдите свой дом на спутниковом снимке.
накладки, например, любое изменение, вносимое Google в
свои сценарии означало, что мне переписывать сайт с
нуля.»

mapsembed-how-to, чтобы встроить карту в Google разрабатывает API для внедрения Ограбили в Чикаго? Не отчаивайтесь – здесь можно получить свои деньги назад.
свою страницу. Для этого достаточно вы- карт в другие сайты, но еще не завершил
звать функцию-обертку и передать ей тег эту работу. Google продолжает традицию
DIV, в котором вы хотите разместить дан- изготовления чересчур хороших сайтов и с
ный объект. Первые попытки были очень каждым разом становится все лучше и
ненадежными – Google Maps по-прежнему лучше, несмотря на то, что у него не так уж
находится в стадии «бета», так что интер- много денежных стимулов для этого – все
фейсы могут быть изменены без уведом- причастные уже богаты (или должны быть
ления. Однако, они прекрасно демонстри- богаты), как Крез. С выпуском коммерчес-
руют потенциал хакеров и, к настоящему кого API для Google Maps они удвоят свое
моменту, уже достаточно стабильны. состояние. Лучше для них – лучше для
нас. LXF
Согласно авторам сетевых дневников,

www.linuxformat.ru LXF1(70) сентябрь 2005  6 5

интервью гаэль дюваль

CoLemebackГаэль Дюваль (Gaël Duval), отец-основатель Mandrakesoft, LXF-

увел свое детище от края пропасти и сделал его интервью

Kingполноправным членом многонациональной империи Linux.
Как ему это удалось? Что будет дальше?

П однимаясь из руин банкротства, общие дебаты и, наконец, был сделан те еще до слияния, в рамках LCC (Linux ГД: Я считаю, что наши рынки очень похо-
Mandrakesoft сменил имя и, бла- выбор между слиянием и поглощением. Core Consortium), так что уже испытывали жи. Вопрос состоит лишь в модельном
годаря приобретениям последних Поскольку большая часть нашей команды к ним дружеские чувства. Со своей сторо- ряде, так что нам пришлось объединить
шести месяцев, увеличился в раз- менеджеров согласилась с тем, что это ны, они также были заинтересованы в продуктовые линейки и торговые марки,
мерах более чем вдвое. И до, и хорошая идея... этой сделке, поскольку, не являясь боль- поскольку эффективнее иметь всего одну
после его главой был Гаэль шой или очень известной компанией, серию продуктов и один бренд. Это было
Дюваль, тихий француз, почитающий LXF: С обеих сторон? смогли таким образом привлечь к себе одной из причин для переименования:
Джими Хендрикса и опасающийся летать. внимание общественности. Conectiva плюс Mandrake равно Mandriva.
Linux Format побывал в Париже и пригла- ГД: Да, с обеих сторон. Мы начали фор- В настоящий момент мы находимся в про-
сил Гаэля пообедать в Лувре, чтобы за мальный процесс, в ходе которого члены LXF: Кстати, LCC вам хоть в чем-нибудь цессе объединения наших Linux-продук-
чашкой кофе расспросить его о будущем Совета директоров Mandriva выразили помог? тов в общую линейку решений. Возможно,
Mandriva, давлении со стороны конкурен- свое мнение относительно слияния, затем они будут иметь специализированные
тов и, наконец, узнать, что же такое чуть- было голосование акционеров... Это дол- ГД: На этом фронте сейчас не наблюдает-
чуть не уничтожило компанию. гий процесс, который отнял у нас почти ся особой активности. Я не думаю, что
год, а точнее – девять месяцев. влияние будет сколько-нибудь значитель-
LXF: Год назад, Mandrake был почти
банкротом, а теперь вы заключаете «Я думаю, реакция сообщества была
сделки с Conectiva и Lycoris. Что же ключевым фактором, не позволившим нам
привело к таким изменениям столь
скоро после банкротства?

ГД: Возможно, в прошлом Mandrake поте- опустить руки и сказать: «Все, мы сдаемся.»
рял какое-то время, утрясая финансовые
вопросы, так что, когда все было решено, LXF: Насколько близки были Conectiva и ным – просто два члена консорциума ста- продукты для Южной Америки, если того
нам пришлось двигаться быстрее. Mandrake? Была ли у вас общность в ли одним, и все. потребует их локальный рынок, но на
стратегии или вы искали нечто совсем общемировом уровне все будет унифици-
LXF: Чтобы наверстать упущенное? другое? LXF: Как по-вашему, в результате сли- ровано. Мы возьмем лучшее в Conectiva
яния цели Mandriva стали ближе к Linux, добавим в Mandrake и назовем
ГД: Да. Поэтому слияние с Conectiva было ГД: Для нас представлял интерес слияние целям Conectiva, Mandrake или смесью получившийся продукт Mandriva.
для нас, во-первых, возможностью проде- с компанией, работающей не в том же их обеих?
монстрировать, что мы живы-здоровы, и самом сегменте рынка. Они [Conectiva] не LXF: И что же является лучшим в
во-вторых, доказать, что мы можем рас- были прямыми конкурентами Mandriva, ГД: Цели были практически одинаковыми. Conectiva Linux?
ширить компанию, поднять бизнес, стать поскольку их целевая аудитория – Южная И мы, и Conectiva выпускаем продукт на
сильнее и так далее. Америка и потому были привлекательны. базе Linux и продаем его корпорациям и ГД: Кое-какие удачные технологии явля-
Они дополняли Mandriva, а не... я не знаю, частным лицам, они – в Южной Америке, ются частью ПО Smart. Оно похоже на
LXF: Чьим решением было слиться с как это объяснить. Кроме всего прочего, мы – в Европе и США. urpmi, систему отслеживания зависимос-
Conectiva? Это была группа людей? Conectiva – компания примерно того же тей Mandrake, но использует другие алго-
размера, что и мы и имеет сходное число LXF: Как вы думаете, Mandriva сохранит ритмы и более развито. Мы хотим объ-
ГД: Первым шагом был сбор сведений об сотрудников. Дискуссии с ними были тоже в себе все черты Conectiva? Вы слегка единить urpmi и Smart в отдельном пакете.
имеющихся возможностях. На нем мы очень теплыми. Мы начали работать вмес- сместите свой рынок?
обнаружили Conectiva, а также ряд других >>
компаний. На втором этапе были устроены

6 6   LXF1(70) сентябрь 2005 www.linuxformat.ru

интервью гаэль дюваль

Гаэль Дюваль LXFвизитка

Вп вкоироеоСзитрпмоворсрпзебиаедтаривсвнае.рлтиллЕа:еюдтдCн3и,вииo2лпасеnртгпвeороорыcтиддоtйRiбаеаvдуюeaктdят,щиEивHвуdзaпюMgtсрeвкоaи-оnсб1IртdTы9ооr9иляaб8нkьоLeнигчyоуянcкдюаoыбкуrаеisн.кротства,
ЧЯ С Н и зтасыацлжкио оорПвнаКапб:л ро1ьот2нгыор савтмьLм:i nифuррxоа:в н1ац0нуилз яе:т8
С уточная
С андалий: норма кофе: 2 чашки без кофеина
1 пара
з1О н 0на0юс%чт-,инотоачегеотмт:о«гвоЛвкюонрдаяист,т»оултвьенрожмдуапюрщимиеен, ечнтоиюLinнuеx

www.linuxformat.ru LXF1(70) сентябрь 2005  6 7

интервью гаэль дюваль

LXF: Из тех 150 человек, сколько было
разработчиков, сотрудников отдела
продаж, администраторов, менеджеров?

ГД: Я думаю, около 60 разработчиков. У
нас тогда была команда в США, и это
обходилось нам очень дорого. В нее вхо-
дили специалисты по продажам и про-
граммисты. Думаю, разработчиков было
где-то треть.

LXF: Должно быть, ваше финансовое
положение значительно улучшилось
благодаря членам сообщества, которые
вступали в MandrakeClub?

>> LXF: Conectiva базируется на APT? подождать, пока независимые поставщики в штате Mandrakesoft было около 12 чело- ГД: В конце 2002 года у нас начались серьез-
начнут чаще выпускать решения для Linux, век, а спустя год их стало уже 150. ные проблемы с деньгами и мы поняли, что
ГД: Нет, нет, это RPM, но он может пони- станут рассматривать его как жизнеспособ- для дальнейшего роста их необходимо где-
мать APT до некоторой степени. ный рынок. Конечно, это не так просто. LXF: Ого! Теперь понятно, куда делись то искать. Нам не удалось привлечь допол-
деньги. нительных инвестиций, так что мы попыта-
LXF: Вы планируете посетить штаб- С другой стороны, мы наблюдаем пози- лись объяснить ситуацию сообществу. Мы
квартиру Conectiva? тивные сдвиги в данном направлении, напри- ГД: Именно. Знаете, в том, что касается сказали, что если они хотят помочь Mandriva,
мер, выпуск Nero для Linux или новой версии увольнения работников, во Франции дейс- то могут сделать это, приобретая наши про-
ГД: Может быть, но не скоро. Сначала мне Acrobat Reader. Может быть, переход Apple на твует очень жесткое законодательство, так дукты, становясь членами MandrakeClub... Я
нужно подготовить корабль. платформу Intel (см. Новости на стр. 6) также что нам потребовалось много времени, чтобы думаю, реакция сообщества была ключевым
окажет позитивное влияние, снизив затраты и сократить штат и достичь точки безубыточ- фактором, не позволившим нам опустить
LXF: Вы не любите летать? упростив работу поставщиков по переносу их ности. В период между 2001 и 2003 годом у руки и сказать: «Все, мы сдаемся».
приложений в Linux. С другой стороны, про- нас были сплошные расходы. Прошло вре-
ГД: Я не могу летать, у меня боязнь ждав достаточное время, мы с необходимос- мя – три года, если быть точным, и мы пот- LXF: Значит, они держали вас на плаву?
самолетов. тью получим открытый эквивалент для каж- ратили все, что у нас было. Когда у вас кон-
дого приложения Windows. Вот тогда Linux чаются деньги, необходимо закрыть компа- ГД: Да, да, мы поняли, что Mandriva очень
LXF: А вы рассматривали возможность будет полностью готов к настольному приме- нию и искать какой-нибудь выход. важна для них. В то же время многие люди
слияния с SUSE? Они куда ближе к вам. нению – и для коммерческого ПО будет уже стали членами Клуба и оказали нам
слишком поздно. LXF: Принятие неудачных решений было финансовую поддержку. Мы поняли, что
ГД: В Германию обычно летают самолета- частью проблемы? стоит хотя бы попытаться найти какой-
ми, поэтому здесь у нас те же проблемы. LXF: Планируется ли еще одна смена нибудь выход.
имени? ГД: Да, в некотором смысле. Сложно ска-
LXF: Расскажите про приобретение зать, было ли нечто правильным, посколь- LXF: Вы не боитесь, что расширяетесь
Lycoris. Чем был обусловлен этот шаг? ГД: Нет. ку для ответа на этот вопрос необходимо слишком быстро и можете столкнуться
попробовать другие варианты, но я считаю, с теми же проблемами?
ГД: Mandriva начинался как настольный LXF: До слияния с Conectiva, что привело что нанять так много людей было невер-
дистрибутив, хотя потом мы расширились Mandrake к таким серьезным пробле- ным шагом. После этого были и другие ГД: Lycoris является нашим третьим при-
и на сервера. Мы считаем важным про- мам, и чему вы научились в конечном затратные решения, например, поучиться обретением за минувший год, и мы потра-
двигаться дальше в области настольных итоге? электронному бизнесу. Менеджеры прини- тили не так уж много денег – в основном,
систем, поскольку это часть нашего имид- мали очень дорогие предложения, пос- присходил обмен акциями. Кроме того,
жа и потому, что мы хотим быть готовы к ГД: Я думаю, проблема была в выборе кольку были уверены, что в компанию обя- Edge-IT и Conectiva были прибыльными
прорыву Linux в данном направлении. времени. Мы начали в 1998 году и очень зательно придут деньги и покроют эти компаниями, как и Mandriva. Так что риски
быстро стали успешными. Проблемы при- расходы. и ситуация не совсем те, что были раньше,
LXF: Значит, по-вашему, Linux еще не шли позднее и были связаны с крушением когда затраты превышали выручку в три-
готов к настольному доткомов. В 1999 и 2000 году на счета LXF: Не очень реалистично четыре раза.
применению? компании поступало множество средств –
в основном, инвестиций от венчурных ГД: Нет, и всей команде менеджеров при- LXF: Lycoris основан на Caldera Linux
ГД: С технической точки капиталистов. У нас было более 20 млн. шлось уйти, поскольку продолжать в таком (продукте родительской компании SCO
зрения, думаю, готов. То евро, а когда вы – молодая компания, духе длительное время было невозможно. Group). Вы не боитесь, что эта ассоци-
есть, технологии уже нали- обладающая значительными средствами, Мы начали подчищать здесь и там, но на ация может повредить Mandriva?
чествуют. Но необходимо вы начинаете слишком много тратить и это ушло несколько лет...
нанимать лишних людей. В середине 1999 ГД: Я так не думаю – образ Lycoris давно
не ассоциируется ни с Caldera, ни с SCO.

>>LXF: По-вашему, консолидация на рын-

ке Linux будет продолжаться?

6 8   LXF1(70) сентябрь 2005 www.linuxformat.ru

интервью гаэль дюваль

«Мы не думаем, что Linux уже
готов для массового рынка»

www.linuxformat.ru LXF1(L7X0F) 6с9енaтuяgбuрsьt 22000055   6 9

интервью гаэль дюваль

>> ГД: Мы рады, что находимся в ситуации,

когда сами приобретаем компании, а не

наоборот. И хорошо, что Mandriva может

расширяться.

LXF: Значит ли это, что Mandriva свора-
чивает свою деятельность на данном
фронте?

ГД: Вероятнее всего, мы сделаем паузу.
Объединить Conectiva и Lycoris с Mandriva
– уже непростая задача с точки зрения
организации и процессов. Кто знает...

LXF: В этом году Mandriva выпустила
только Limited Edition, тогда как раньше
были и PowerPack, и PowerPack+. В
будущем также будет одна-единствен-
ная версия дистрибутива, или же пла-
нируются различные уровни?

ГД: Limited Edition (Ограниченная редак- 9.3 включает GNOME 2.10, KDE 3.4, Xen, должно входить в официальные выпуски, и, Linux для него еще не готов. Мы будем в
ция) – это специальный выпуск, и он будет Beagle, F-Spot, Mono, Java – и спустя в то же самое время, мы можем предлагать нужном месте, когда начнется его бурное
только один. Следующая версия продол- две недели выходит Mandriva. С более самые последние новинки членам клуба, развитие, но сейчас мы предлагаем реше-
жит традицию именования, поскольку мы старым GNOME, KDE... которые хотят всегда быть впереди. Может ния для покупательского ядра и хотим рас-
добавим полную редакцию 2006 года, но быть, SUSE принимает на себя часть рисков. ширяться на корпоративный рынок.
здесь уже появятся демо-пак, PowerPack+ ГД: Традиционно, Mandrake находился на Не знаю, насколько стабилен этот дистрибу-
и Discovery. острие атаки, а SUSE и Red Hat были более тив, но... LXF: А с географической точки зрения?
консервативны, поскольку желали удосто- Несомненно, Mandriva присутствует во
LXF: Mandriva перешла на годичный цикл, вериться, что используют самое стабиль- LXF: Последний выпуск Mandriva вызвал Франции и Бразилии, но где еще у вас
но недавно промелькнула информация о ное ПО. Теперь они стараются делать то же, немало критики в рядах наших читате- есть сильные позиции, а где вы только
неких клубных выпусках, появляющихся что и мы раньше. Это немного забавно, но лей из-за своей «мультяшной» графики. собираетесь закрепиться?
раз в два месяца и содержащих новые решение выпускать обновление каждые Вы стараетесь выйти на корпоративный
функции. Так какова ваша стратегия: раз два месяца было продиктовано не SUSE рынок, но вряд ли такие рисунки при- ГД: У нас сильные позиции на корпоратив-
в год, раз в два месяца или..? или кем-то там еще, а нашими пользова- дутся по вкусу его покупателям. ном рынке Франции. Находясь в Париже,
телями, которые хотели иметь самые све- мы легко можем встречаться с людьми из
ГД: С одной стороны, мы имеем офици- жие версии продуктов. ГД: Я еще раз повторяю, что это была спе- больших компаний и правительства. Но
альные продукты – коробочные версии с циальная версия. В марте мы планировали если речь идет об индивидуальных поль-
документацией и поддержкой, которые LXF: Так почему же Mandriva 2005 про- выпустить официальный Mandrake с эле- зователях... да, у нас обширная база во
люди могут покупать в магазинах и тому игрывает SUSE в номерах версий? У вас ментами Conectiva и другими бонусами, но Франции, Великобритании, США, а также
подобное, а с другой – у нас есть члены всегда было все самое свежее и вдруг... это оказалось невозможным, так что мы других частях Европы. Основная часть
Клуба, которые имеют доступ ко всем этим Что случилось? решили приготовить особую переходную заказов приходится на наш онлайн-мага-
продуктам и даже больше. Суть состоит в версию. Она не ориентирована ни на кор- зин, и мы осуществляем поставки пример-
том, что если вам нужны все официальные ГД: По сравнению с тем, что было раньше, поративный, ни на частный сектор. Она – но в 150 стран мира. Рынок очень велик, и
версии, следует вступить в Клуб, и вы смо- мы внедрили у себя в компании более фор- для продвинутых пользователей. Их не мы не можем иметь офисы в каждой точке.
жете загружать обновления каждые два мальный процесс, чтобы обеспечить самое смущают «мультяшные» изображения.
месяца, включая такие новинки, как пос- высокое качество. В рамках этого процесса LXF: Как Вы думаете, рынок Южной
ледние версии Gnome и KDE. выбор версии происходит за 3-4 месяца до LXF: Где вы видите основные рынки для Америки отличается от европейского?
даты предполагаемого релиза, поэтому и Mandriva? Что наиболее привлекательно
LXF: Речь идет именно об обновлении сложно включить самую последнюю вер- с точки зрения выручки? ГД: В Южной Америке и, в частности, в
или же придется загружать новые ISO- сию. Я не знаю, как это удается SUSE! Бразилии, рынок Linux особенно обширен.
образы и устанавливать, устанавливать, Существует два типа пользователей Linux. ГД: Ядро наших покупателей формируют На мой взгляд, местные правительства
устанавливать? Это хакеры, которым всегда нужна послед- домашние пользователи. Мы можем поло- действительно хотят избавиться от
няя версия. Кроме них, существует корпора- житься на данный рынок – это солидная Microsoft – они не особенно любят ее и
ГД: У вас есть выбор. Можно загрузить тивный рынок и обычные пользователи, часть наших доходов. Но, с нашей точки страну, которую представляет данная ком-
обновленные пакеты или дистрибутив которые знают о Linux самую малость и зрения, корпоративный и бизнес-рынки пания. Это большой рынок, который играет
просто хотят попробовать его, может быть, предоставляют больше возможностей для по своим правилам, но он предназначен
целиком. использовать его, но им не нужна послед- роста. Впоследствии мы можем переклю- для больших корпораций и правительс-
няя версия. Мы стараемся угодить всем. Я читься на массовый рынок, индивидуаль- твенных учреждений.
LXF: Решение выпускать думаю, что гарантированно стабильное ПО ных пользователей, но, по нашему мнению,
что-то каждые два

месяца было продик-
товано давлением со
стороны конкурентов? SUSE

7 0   LXF1(70) сентябрь 2005 www.linuxformat.ru

интервью гаэль дюваль

LXF: А как обстоят дела с побочными дого дистрибутива будут свои собственные получают скоростной доступ в Интернет – Mandriva пакеты KDE и GNOME, участвуют
продуктами вроде Mandriva Move? графические инструменты, это не вызовет они предпочитают вступить в Mandriva в соответствующих проектах и занимаются
Какое-то время назад вы совместно с особых проблем и, конечно, будет плюсом Club и получать мгновенный доступ к ими в свое рабочее время. У нас долго
TransGaming выпускали коробочный Mandriva. новейшим коммерческим продуктам. В работал Дэвид Фаур (David Faure), который
дистрибутив с WineX, а также Mandrake других местах, коробки успешно продаются. много сделал для KDE.
для Xbox. Это не настольный Linux и не LXF: Планирует ли Mandriva выйти в те
ваши основные продукты. Они будут же сегменты рынка, что Red Hat и SUSE? LXF: Что вы думаете о патентах на ПО? LXF: Как вы думаете, слияние Mandrake
развиваться? У Red Hat есть Enterprise Linux, который и Conectiva может привести к
работает на мэйнфреймах IBM – очень ГД: Патенты вредят большинству малень- увольнениям?
ГД: Ах да, Mandriva Move будет развивать- высокоуровневых машинах. Собирается ких компаний, производящих закрытое ПО.
ся, поскольку это – самый простой способ ли Mandriva конкурировать с ними? В то же самое время я уверен, что ГД: У нас нет таких планов. Если мы... кто
попробовать Linux для неискушенного Европарламент примет поправки, в резуль- знает, что случится в будущем, но пока у
пользователя: каждый, кто способен вклю- ГД: Да, если нам представится такая тате которых мы получим приемлемое нас нет таких планов.
чить компьютер, сможет запустить возможность. законодательство.
Mandriva Move, просто вставив диск в при- LXF: В какой момент Mandrake перестал
вод CD-ROM. Так что здесь ответ утверди- LXF: Кроме того, Red Hat предлагает LXF: Конечно, вы не производите закры- быть хобби и превратился в истинную
тельный. Но я не думаю, что мы станем длительную программу поддержки. Они тое ПО, но все же: классифицируете ли карьеру?
развивать игровые решения. Да, у нас гарантируют поддержку в течение семи вы Mandriva как небольшую компанию?
была версия для Xbox, но это.. как бы вам лет – всего срока жизни продукта. Сколько у вас сотрудников? ГД: Я думаю, это случилось 15 декабря
сказать... было не рыночным решением. Mandriva способна на такое? 1998 года, когда я стал первым сотрудни-
ГД: Сотрудников... В настоящий момент ком только что появившейся на свет ком-
«Я никогда не планировал примерно 60 во Франции и столько же в пании Mandrakesoft! В любом случае, я не
делать карьеру, я хотел Бразилии. В итоге получается 120. знаю, стоит ли называть это карьерой. Я
делать то, что мне нравится» никогда не планировал делать карьеру, я
LXF: И сколько из них инженеров? хотел делать то, что мне нравится и это
Если вы найдете Xbox, работающий под ГД: Мы предлагаем поддержку в течение было одной из причин, побудивших меня
управлением Mandriva Linux, я уверен, что минимум двух или трех лет, но собираемся ГД: 35 во Франции и 30 в Бразилии. после окончания университета открыть
наш исполнительный директор не будет удлиннить данный период, поскольку это собственное дело, а не пойти работать в
ничего знать о нем. откроет для нас новые возможности на LXF: Тридцать пять только в одном существующую фирму.
корпоративном рынке. Париже? Ничего себе! Над какими про-
LXF: А в чем Mandriva проигрывает кон- ектами они работают? Исправляют LXF: Вы собираетесь всегда работать в
курентам? В чем они лучше Mandriva? LXF: Будущее вашей компании – в про- ошибки или создают пакеты? Mandriva? Вам она нравится?
даже коробочных решений?
ГД: Если речь идет о технологии, то глав- ГД: Вы имеете в виду программные проек- ГД: Да, конечно. Я начинал проект
ное – это Linux. Выбор дистрибутива подо- ГД: Зависит от того, что вы имеете в виду. ты? Обычно инженеры, обнаружившие Mandrakesoft в одиночку и когда он пре-
бен выбору машины: вы указываете марку Продажи падают в тех местах, где люди ошибку в коде или еще что-то, сообщают о вратился в компанию, я занимался разра-
и цвет, но компоненты внутри примерно ней авторам и предлагают исправление. боткой, поддерживал web-сайт и так
одинаковы. Это верно и в отношении мно- Так происходит с любым свободным ПО – далее. Сейчас я отвечаю за коммуникации,
гих дистрибутивов. Существуют кое-какие это наше основное участие как разработчи- потом переключусь на что-нибудь еще...
вещи, делающие Mandriva проще других. ков. Кроме того, ребята, собирающие для кто знает?
Однако, вы можете случайно обнаружить в
другом дистрибутиве такую функцию, кото-
рая сделает его более подходящим для
вас, чем Mandriva.

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

ГД: Я думаю, будет лучше, если все дист-
рибутивы Linux будут использовать общий
конфигурационный слой, например, раз-
мещать файлы настроек в одном и том же
месте и так далее. Это определяется раз-
личными стандартами, таким как LSB
(Linux Standards Base). Тогда, если у каж-

www.linuxformat.ru LXF1(70) сентябрь 2005  7 1

www.linuxformat.co.uk LXF1(70) сентябрь 2005  7 2

Учебник >>

Наши эксперты помогут вам и поделятся своим мнением обо всех приложениях Linux

Даешь Torrent’ы! В этом месяце мы учим...

В последнее время Первые шаги

BitTorrent привлекает Энди Ченнелл рассказывает о лучших
чертах Gnome 2.10 c.74
к себе все больше
Gimp
внимания, в основ-
Не повезло с дантистом? Подправьте
ном в связи с неле- свою улыбку с помощью Gimp и Майкла
Дж. Хэммела c.78
Грэхем Моррисон не гальным обменом
думает возвращаться в музыкой и фильма- Perl
Париж в ближайшее ми. Я ни в коем слу-
время. Он просто не чае не одобряю Первый эпизод саги Марка Фиоретти
может себе этого подобное поведение. расскажет вам, откуда берутся перемен-
позволить. ные и операторы языка Perl c.82

Я просто поражаюсь числу статей, вопрошаю- Оберегайте друзей от регулярных
выражений – по крайней мере,
щих: «А может ли вообще у BitTorrent быть пока те не прочитают второй эпизод
популярной саги c.84
легальное применение?» Миру Open Source
Subversion
нужно больше таких решений. Программы
Собрались запустить свой проект?
начинают существенно зависеть от Сети. Это Грэхем Моррисон расскажет вам, с чего
начать c.86
прекрасно, но кто тогда должен платить за
Репозитарий готов, но... что мне с ним
канал? делать? Ищите ответ здесь! c.90

Именно здесь технологии, подобные PHP

BitTorrent, имеют вполне легальное и жизнен- Математические загадки – удовольствие
знатока и кошмар дилетанта. Кем из них
но важное для Linux приложение. Они снима- окажется Пол Хадсон? с.94

ют груз с плечей провайдера и позволяют

пользователям принять посильное участие в

распространении, внести свой вклад в общее

дело. Если такие идеи будут признавать неза- 78 Gimp: не боитесь зубных врачей!

конными просто потому, что их можно

использовать во вред, мы далеко не уедем.

Когда я слышу такие вещи, я вспоминаю луд- подсказка месяца! Разберитесь с кодеками

дитов и цитирую слова Уильяма Гибсона:

«Улица находит свое применение всем

вещам». Чем больше видеофайлов в вашей mencoder использует четыре основных его параметрами. В данном случае,
[email protected] коллекции, тем больше кодеков для ключа, указывающих, как именно вы мы выбрали MPEG4 (эквивалент DivX)
работы с аудио и видео придется хотите преобразовать файл. Первый из с переменным битрейтом, равным
Код в этом разделе постоянно держать в системе. Вы уже, них – входные данные, второй – 1200. -oac copy указывает MEncoder
скорее всего, знакомы с прекрасной выходной видеокодек, третий – выходной аудиокодек. В данном случае,
Печатать в журнале код не так легко, но мы программой MPlayer. Однако, мало кто выходной аудиокодек и последний – имя мы просто копируем звуковую дорожку
надеемся, что некоторые простые правила догадывается, что у него есть и результирующего файла. Типичный исходного файла в output.avi, который и
позволят избежать недоразумений. Если партнерский проект – MEncoder. Он пример вызова MEncoder выглядит так: является результирующим файлом.
строка кода оказывается слишком длинной, использует ту же самую кодовую базу и, $ mencoder input.avi -ovc lavc -ovc -
она переносится на следующие, причем все таким образом, умеет конвертировать все lavcopts vcodec=mpeg4:vhq:vbitrate=1200 Приятной чертой MEncoder является
они обрамляются синим прямоугольником: поддерживаемые MPlayer форматы друг -oac copy -o output.avi умение использовать преимущества
в друга. MEncoder управляется из вашей Linux-системы. Например,
procedure командной строки, что может Сложновато, не правда ли? На в качестве исходного файла можно
TfrmTextEditor.mniWordWrapClick представлять некоторую трудность для самом деле, все не так уж страшно. использовать телевизионный вход или
(Sender: TObject); начинающих: у него так много input.avi – это файл, который мы хотим пропустить видеопоток через фильтр.
параметров! Только посмотрите на преобразовать. -ovc lavc указывает Вы даже можете убрать черные края с
В противном случае, между строками будет страницу руководства MEncoder! Команда выходной кодек, а следующие за эти широкоформатных пленок, используя
небольшой промежуток: ключи командной строки являются команду crop.

mniWordWrap.Checked := false
end;

Как правило, весь код можно найти на
прилагаемом к журналу диске.

www.linuxformat.co.uk LXF1(70) сентябрь 2005  7 3

УЧЕБНИК пЕРВЫЕ ШАГИ: ОБНОВЛЕНИЯ

Первые шаги по обслуживанию системы

Обновления
Получите максимум от Gnome 2.10

Энди Чэннел (Andy Channel) надевает красный колпак и берет свою игрушечную удочку, чтобы
посмотреть на некоторые из новых возможностей Gnome 2.10.

Пока KDE постепенно завоевывает мир Linux, не предлагая заставляет вас использовать только те приложения, которые были
вам разве что Кухонную мойКу, проект GNU Object Model одобрены разработчиками, равно как не существует и рекомендован-
Environment или, сокращено, Gnome, остается популярным ного способа работы с самим Gnome.
выбором за свой ясный интерфейс, инновационность подхода и
замечательные цели, пропагандирующие простоту на рабочем столе. Одна из наиболее «проблемных» новинок, появившихся в Gnome
Gnome является средой по умолчанию в нескольких дистрибутивах, не так давно, это пространственный режим файлового менеджера
включая Fedora, Ubuntu и, похоже, со временем будет играть значи- Nautilus. В этой статье мы обсудим плюсы и минусы “пространствен-
тельную роль в настольных планах Novell, поскольку после приобре- ной” навигации и покажем вам, как быстро переключиться обратно в
тения Ximian эта компания стала одним из самых больших спонсоров более традиционный режим управления файлами. Я также рассмот-
данного проекта. рю некоторые опции настройки и новые возможности, появившиеся в
В прошлом Gnome критиковали за его упрощенческий подход и версии 2.10. Успешное рабочее окружение – это то, что не требует от
довольно спорное именование. Однако Linux – это, прежде всего, пользователя делать сложные действия для выполнения простых
возможность выбора и данное утверждение остается в силе даже задач, то, что легко адаптируется под нужды пользователя, а не
после того, как вы предпочли тот или иной рабочий стол. Ничто не наоборот.

74  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

УЧЕБНИК пЕРВЫЕ ШАГИ: ОБНОВЛЕНИЯ

Часть I. Настройка рабочего стола

Типичный рабочий стол Gnome 2.10 до каких-либо изменений имели возможность Gnome
настроек выглядит довольно голым. Например, Ubuntu поставляется с выставления фона для индивидуальных вирту- поставляется с
совершенно пустым рабочим столом, в котором даже корзина переме- альных рабочих столов, но теперь она отсутствует. обширным набором
щена на нижнюю панель задач. В SUSE корзина, иконки Home и аплетов,
Computer убраны с рабочего стола, а на них оставлена только ссылка. Практически без ограничений предназначенных
для помещения на
В верху экрана расположена панель задач, на которой приютились Виртуальные рабочие столы позволяют нам, к примеру, запустить ком- панель.
Gnome-эквивалент KDE kpanel, системный лоток и часы. Вторая панель муникационные приложения в одном месте, а какой-нибудь текстовый
задач внизу экрана позволяет в один щелчок мышью добраться до редактор – в другом без необходимости иметь дело со сбивающей с Самый простой способ
всех запущенных приложений. Как и в KDE, у вас не так много спосо- толку сотней открытых окон. Рабочие столы полезны и в тех случаях, переместить окно на другой
бов изменить внешний вид этих панелей или полностью их удалить. когда ваша супруга или шеф прерывают игру в Frozen Bubble и вам рабочий стол – через его
Небольшое предупреждение: наличие трех меню в верхней линейке срочно требуется переключиться на рабочий экран. Большинство дист- контекстное меню.
(см. часть 2) означает, что попытка перенести ее на любую из сторон рибутивов поставляются с четырьмя виртуальными рабочими столами,
экрана приведет к тому, что панель станет довольно некрасивой и доступ к которым осуществляется с помощью аплета Pager, который >>
неудобной, а вернуть все обратно будет не так-то просто. обычно размещается где-то на нижней панели. Конечно, четыре рабо-
чих стола – это не какое-то существенное ограничение. Если вы думае-
Начнем с щелчка левой кнопкой мыши по верхней панели. В те, что вам достаточно только двух (или 10-ти, или 16-ти), просто щел-
этом случае мы получим доступ к различным ресурсам, приложе- кните правой кнопкой на Pager и выберите опцию Preferences, чтобы
ниям быстрого запуска, системному лотку и часам. Щелчок правой открыть соответствующий диалог.
кнопкой мыши покажет нам новое меню, в котором мы можем
добавлять или удалять элементы с панели, менять их размер или вне- Существует три способа перемещения окна приложения на конкрет-
шний вид и перемещать относительно друг друга. Существует порядоч- ный рабочий стол. Наиболее очевидный из них – выбрать нужный
ное число элементов, которые мы можем добавить на панель, напри- экран мышью и затем открыть окно там. Второй вариант – щелкнуть
мер, мини-командная строка, ящик для хранения файлов и папок, мышью по иконке Properties окна приложения, которая обычно распо-
которые в противном случае должны были быть помещены на рабочий ложена в верхнем левом углу рамки. Просто выберите опцию «Move To
стол и быстрый доступ к заметкам Tomboy (см. стр. 77). Просто выбери- Another Workspace» и укажите нужную рабочую область. Однако, самый
те пункт «Add To Panel» и укажите требуемый аплет. Он должен доба- интересный способ – это схватить мышью иконку окна в Pager’е и
просто перенести её на нужный рабочий стол. Это здорово, но немного
Настройка Pager сложно, если у вас открыто множество окон.
довольно проста.

виться прямо туда, где вы щелкнули правой кнопкой мыши. Если вы
хотите переместить его, щелкните правой кнопкой на иконке и выберите
пункт «Move».

Более значительные изменения могут быть сделаны с любой пане-
лью в диалоге Panel Properties. Их можно заставить использовать сти-
ли выбранной темы Gnome, указать фоновое изображение или цвет, а
также различные опции прозрачности, включая возможность выставле-
ния различных уровней прозрачности для каждой панели.

Смените фон рабочего стола, щелкнув правой кнопкой на любом
открытом пространстве и выбрав опцию «Change Desktop Background».
Все изображения или текстуры, присутствующие в системе, будут отоб-
ражены в списке. Тут же размещаются опции для добавления картинок
и смены способа их отображения: черепицей (для текстур), в центре
или заполняя весь экран. Изображение можно и убрать – просто выбе-
рите опцию No Image, и затем укажите какой-нибудь цвет рабочего сто-
ла в нижней секции диалога.

Утилиты управления фоном демонстрируют один из путей настрой-
ки Gnome, а также его подход “просто = хорошо”. Более ранние версии

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  75

УЧЕБНИК пЕРВЫЕ ШАГИ: ОБНОВЛЕНИЯ

Часть 2. Навигация по системе

Gnome способен обрабатывать Начинать работу с Gnome лучше всего с меню, расположенных Здесь вы можете как-то задействовать клавишу Windows
любые комбинации клавиш в верхней линейке. Они называются Applications (приложения), Places
(местоположения) и System (или Desktop в дистрибутиве SUSE). • Theme. Это то место, где мы можем выбрать визуальную тему
Gnome, включая бордюры окон и виджетов – кнопок, меню, ползунков
Первый пункт меню не содержит никаких сюрпризов – это просто и так далее. Каждый дистрибутив поставляется с набором предустанов-
точка доступа ко всем установленным в системе приложениям. ленных тем, включая и темы самого дистрибутива. Но, вообще говоря,
Программы благоразумно разбиты по подменю в соответствии с эти темы служат просто отправной точкой для ваших собственных
выполняемыми ими функциями. Например, в пункте меню Internet мы настроек, поскольку все три главные части – элементы управления,
найдем почтовый клиент Evolution и службу обмена сообщениями рамки окон и иконки – могут быть индивидуально настроены с помо-
Gaim. Чтобы запустить эти приложения, достаточно просто выбрать их щью вкладки Theme Details.
в меню. Для обеспечения более быстрого доступа можно также перета-
щить пиктограмму мышью на рабочий стол или панель задач. Меню Данная вкладка поделена на три части. Новые элементы могут
Places описывается ниже, поэтому сейчас мы сосредоточимся на треть- быть загружены и легко установлены с таких сайтов, как http://art.
ем пункте меню – System (система), поскольку это то место, где мы gnome.org (который, кстати, полезен и при подборе заставки для рабо-
сможем изменить настройки Gnome, изначально установленные созда- чего стола). После завершения всех операций, ваши настройки можно
телями вашего дистрибутива. сохранить под каким-нибудь подходящим именем с помощью опции
Save Theme в главном диалоге.
Наиболее важный пункт в этом меню называется Control Panel или
Preferences; здесь мы можем поменять большинство настроек Gnome. • Font. Этот диалог позволяет настроить внешний вид текста рабо-
Ниже этого пункта меню вы можете обнаружить утилиты, специфичные чего стола, приложений (меню и тому подобное), заголовков окон и
для конкретного дистрибутива, например YaST. Если в вашем дистрибу- терминала. Здесь же можно включить сглаживание шрифтов, чтобы
тиве выбран нестандартный способ изменения настроек, вы, тем не наш рабочий стол выглядел просто великолепно; существуют специаль-
менее, можете запустить панель управления Gnome, выбрав пункт Run ные настройки для монохромных мониторов, LCD-дисплеев и так
Applications из меню Applications и набрав команду далее.
gnome-control-center.
• Desktop. Я уже упоминал эту секцию. Если вкратце, здесь мы
Внешний вид можем настроить фоновое изображение для рабочего стола. В этом же
диалоге в разделе Personal вы обнаружите опцию Shortcuts, которая
Среди всех опций, представленных в этой большой утилите, нас позволяет определить порядок быстрого запуска приложений с помо-
больше всего интересует раздел Look щью заданных «горячих клавиш». Чтобы изменить их, выберите поле
And Feel, который позволит нам ввода в левой части диалога и нажмите нужную вам комбинацию.
выбрать тему для рабочего стола и Нестандартную клавиатуру можно настроить для доступ к различным
настроить шрифты. мультимедийным возможностям Gnome: изменению уровня громкости,
• Windows. Этот раздел позволит
нам указать, как мышь будет взаимо-
действовать с окнами. Например, окна
можно делать “активными” при наве-
дении на них курсора мыши и
задержке его на определенное вре-
мя, или сворачивать по двойному
щелчку на заголовке. Здесь вы так-
же можете настроить, какая клавиша
будет использоваться вместе с
мышью для перетаскивания окна.
По умолчанию это Alt, но неплохим
вариантом, если ваша клавиатура

его поддерживает, будет задействовать для этих целей
кнопку Super/Windows, поскольку в противном случае она окажется
совсем бесполезной.

Часть 3. Навигация по файлам

Разработчики Gnome вызвали некоторый испуг у пользователей, рискуете получить десяток открытых окон, и это довольно сильно
изменив то, как Nautilus предоставляет доступ к файлам. Большим раздражает.
изменением является добавление так называемого пространственного
режима навигации, при котором всякий раз при открытии каталога Есть и хорошая новость – это поведение довольно легко изменить,
открывается и новое окно. сразу и везде или индивидуально. Раньше глобальное изменение этого
поведения было связано с запуском редактора GConf, который является
Времена Windows 3.1 опять вернулись, однако Nautilus стал аналогом Windows Registry (мы прекрасно знаем насколько он интуити-
немного умнее. Он, например, умеет запоминать позицию и режим вен …). Но в последних версиях все стало несколько проще.
просмотра, выбранные для окна, перед его закрытием. В то время,
как папку с изображениями имеет смысл просматривать в режиме Чтобы изменить это раздражающее поведение, откройте любое окно
Thumbnails, каталог, заполненный файлами электронной таблицы Nautilus двойным щелчком мыши на каком-нибудь каталоге. Перейдите
удобнее видеть как список с информацией о датах создания и пос- в Edit > Preferences и выберите закладку Behaviour. Интересующая нас
ледней модификации. Обратная сторона медали состоит в том, что в опция называется Always Open In Browser Windows. Выберите ее, закрой-
случае перемещения к документу, спрятанному в самой глубине, вы те диалог и все последующие окна будут вести себя как в обычном
браузере.

76  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

УЧЕБНИК пЕРВЫЕ ШАГИ: ОБНОВЛЕНИЯ

рите подходящий тег. Gnome автоматически учтет ваши подсказка

изменения. Быстрый просмотр
Поскольку эмблемы - это просто PNG файлы (обычно с Вы можете ускорить операцию
просмотра каталогов в Gnome,
прозрачным фоном), вы вполне можете создавать и свои если заглянете в Edit > Preferences
собственные. Если вы нарисовали свою эмблему, то доба- и убедитесь, что все опции в
вить ее можно либо перенеся ее в каталог /.nautilus/

emblems/ в вашей домашней директории, либо открыв закладке Preview выставлены в

окно, выбрав Edit > Backgrounds And Emblems, вкладку значение Local Files Only. В случае
Emblems и затем щелкнув на Add A New Emblem. Вы обна- не очень быстрого компьютера
ружите, что здесь же вы можете поменять цвет фона или имеет смысл отключить фоновое
указать текстуру для окон. В этом случае в игру вступает изображение и оставить только
пространственный режим, поскольку изменения, сделан- заливку цветом.

ные в определенных окнах (таких как /

home/Documents) сохраняются.

Другая приятная возможность – ути-

лита Zoom, позволяющая нам узнать

Навигация по сетевому диску может привести к заполнению больше о содержимом файла без необхо-
окнами всего рабочего стола.
димости его открывать. Эта возможность
Существует еще несколько вещей, которые мы можем настроить,
чтобы сделать Gnome более похожим на Windows/KDE. В основном, это имеет вполне очевидный смысл, если
добавление панели, с помощью которой мы можем получить доступ к
полному дереву файлов. Чтобы это сделать выберите пункт View > применяется к файлам с изображениями (в таком
Sidepane. По умолчанию эта панель показывает информацию о текущем
выбранном каталоге или файле, но мы можем это изменить, выбрав случае, почему же ни Windows, ни OS X не делают то
выпадающий список Information и поменяв его значение на Tree.
же самое?). Однако Nautilus может выполнять такие
Если вас вполне устраивает пространственный режим, но вам хочет-
ся, чтобы рабочий стол был в меньшей степени захламлен окнами, вы же действия и с текстовыми файлами. По умолча-
можете щелкнуть правой кнопкой мыши на каталог и вместо Open
выбрать Browse Folder. В этом случае каталог будет открыт в режиме нию Nautilus масштабирует пред-просмотр на
браузера.
100%. Но, как и в случае с окнами, мы можем
Одна из возможностей, про которую часто забывают или не знают
– это эмблемы Gnome. Эмблемы (emblems) могут быть добавлены изменить это поведение либо для конкретного
определенным файлам, чтобы предоставить возможность дополни-
тельной сортировки. Например, можно добавить эмблему ‘Art’ на кар- окна, либо повсеместно. Проще всего оставить
тинки в каком-то каталоге, затем выбрать пункт View > Arrange Items >
By Emblem, чтобы собрать все картинки вместе. Конечно, вы могли бы настройки по умолчанию, а затем, когда понадо-
ранжировать их и по типу, но в этом случае GIF и PNG-файлы потенци-
ально могут оказаться довольно далеко от файлов JPEG. Удобство бится воспользоваться опциями Zoom изменить их
использования эмблем (как и многие другие вещи) зависит от того,
насколько аккуратно вы их расставляете. Чтобы добавить эмблему, для конкретных окон. В пространственном режиме
выберите картинку или файл правым щелчком мыши и перейдите к
пункту меню Properties. Щелкните по вкладке Emblems и затем подбе- вы можете увеличивать или уменьшать масштаб с

помощью меню View, а в режиме браузера тоже самое делается с Повторяйте за мной:
помощью иконок «+» и «–», расположенных на панели инструментов. пространственная навигация – всего
Nautilus запомнит и эти настройки, так что можно вполне безопасно лишь ОПЦИЯ!

оставить больший масштаб для каталогов с картинками и мень-

ший для других каталогов.

Одна из последних идей Gnome 2.10 - меню Places, которое через
обеспечивает быстрый доступ к устройствам хранения данных,
сетевым каталогам и другим важным точкам системы. Тут есть месяц
все, что вы могли ожидать: пункт Floppy относится к дисково-
ду, Desktop открывает каталог с содержимым рабочего стола, Мы погрузимся в мир утилит
и тому подобное. Пункт меню Computer открывает окно Nautilus для сжатия файлов
с иконками подмонтированных файловых систем. LXF

TOMBOY: продолжение традиций F SPOT и BEAGLE

Включенный во множество основанных на Gnome 2.10 F-Spot, а также поисковая машина Beagle - это примеры двух Теперь у нас есть две заметки, Start Here и Tomboy. Закройте
дистрибутивов, Tomboy является одним из новых приложений других подобных программ. заметку Tomboy, так чтобы Start Here стала активной и начните
Gnome, пришедших в на ваш рабочий стол благодаря проекту вводить текст. А теперь небольшая хитрость: если во время ввода
Mono. Великолепное приложение для управления фотографиями Tomboy– приложение для хранения заметок с мускулами текста вы наберете Tomboy, эта строка символов автоматически
и простотой бодибилдера мирового класса. Это что-то вроде превратится в ссылку на вторую заметку. Обратную ссылку можно
Настало время выбрать нового лауреата конкурса персональной Wiki-системы, позволяющей связывать заметки создать, просто набрав Start Here где-нибудь на странице Tomboy.
«Мое любимое приложение» и мысли удивительно просто. Более того, он интегрируется с
панелью Gnome, так что вы можете открывать, просматривать и Доступ к заметкам обеспечивается через иконку Tomboy на
искать свои заметки прямо с рабочего стола. панели задач. Удивительно, но приложение запоминает позицию
каждой заметки на экране, так же как это делает Nautilus.
При первом запуске в Tomboy есть только одна заметка,
названная Start Here. При поверхностном взгляде Tomboy Tomboy предоставляет обычный набор опций форматирования
выглядит как множество других приложений редактирования текста, а также быструю утилиту поиска, упрощающую управление
заметок, однако, в его глубинах спрятано гораздо больше. заметками.
Чтобы продемонстрировать его мощь, создадим новую заметку
и назовем ее Tomboy. Просто наберите Tomboy где-нибудь на По-моему, Tomboy уже достаточная причина для того, чтобы
странице Start Here и подсветите его с помощью мыши. Теперь у вас был установлен Gnome и Mono, независимо от того, какой
выберите иконку Link в верхней части окна. Будет создана новая дистрибутив вы предпочитаете. В будущем он может быть связан
заметка с именем Tomboy и сразу после этого вы можете начать с Beagle и F-Spot, а также другими приложениями Gnome, и
добавлять туда текст. Нет никаких сохранений или загрузок. Все полностью изменить наше видение повседневной работы с
делается автоматически. компьютером.

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  77

УЧЕБНИК Gimp

НА ДИСКЕ

Редактирование изображений и иллюстраций

Коррекция улыбки в Gimp

Майкл Дж. Хэммел (Michael J Hammel) поможет вам достичь совершенства в использовании
масок, «ножниц», инструмента клонирования и других методах работы с Gimp для создания
безупречной, с точки зрения дантиста, улыбки.

Самый простой способ начать использовать Gimp в неболь- подходящее изображение в одной из коллекций, именно его я и буду
шом бизнесе – это создавать печатную рекламу для мест- использовать здесь. Я сделал несколько коррекций, чтобы подчистить
ных газет и журналов. На самом деле, большинство рекла- улыбку и она отослала получившееся объявление, вместе с другими
модателей не знают, как выглядит изображение, которое повысит вни- вариантами дизайна своему клиенту.
мание к рекламе и, в конечном счете, доходность бизнеса. Вы легко
встретите плохой дизайн, сделанный местными изданиями, в котором Ему очень понравилось полученное изображение, но, в итоге, он
изображение слишком придавлено текстом, купается во всех цветах отклонил его в пользу совершенно другого дизайна, в котором улыбаю-
радуги, стоит весьма значительных усилий при выводе на печать, и, в щейся личности не было (кстати, как раз этот вариант она рекомендо-
конце концов, выглядит выцветшим и потекшим на дешевой бумаге. вала с самого начала). Однако, откорректированное изображение полу-
Выявление плохого дизайна в рекламе и попытки предложить альтер- чилось настолько хорошим, что я почувствовал, что процесс его созда-
нативные подходы при условии лояльности рекламодателя часто при- ния достоин того, чтобы поделиться им с читателями Linux Format.
водят к установлению длительных деловых отношений.
Моя жена создавала рекламу для местной службы доставки еды, Это более продвинутое руководство, нежели те, что я опубликовал
которая как раз обслуживала вечеринки одну стоматологическую кли- ранее. Здесь вы не сможете просто следовать моим указаниям и
нику. Врач этой клиники только что начал работать в этом районе, и ему делать то же, что и я. Пора применить на практике то, в чем вы трени-
тоже нужно было создать несколько рекламных объявлений, так что он ровались все это время. В какой-то момент колеса должны коснуться
нанял мою жену. Одно из требований к рекламе включало использова- земли и это руководство - хороший пример того, как это происходит. И,
ние изображения мужчины со сверкающей улыбкой. Жена приобрела что более важно, Gimp как раз и предназначен для выполнения настоя-
щей работы. В конечном счете, нужно когда-то перестать исследовать
инструмент и просто начать использовать его. Сейчас самое время.

7 8   LXF1(70) Сентябрь 2005 www.linuxformat.ru

УЧЕБНИК Gimp

Проект 2

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

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

С верхним рядом зубов связаны три проблемы:
•Они не симметричны
•Они не выровнены по нижним границам
•Они не белые
Ни одна из этих проблем не представляет особой сложности, одна-
ко потребуется некоторое умение, чтобы создать исходное выделение.
Чтобы сделать зубы симметричными, я буду использовать большие
склейки, созданные из более мелких выделений. Чтобы подправить
нижние границы, я воспользуюсь инструментом клонирования (Clone
tool) на отдельном слое. Отбеливание зубов должно быть сделано пос-
ле коррекции и клонирования и только после слияния всех слоев, кото-
рые образуют видимый верхний ряд зубов. Если все это сделать перед
отбеливанием, то можно гарантировать, что вы не получите результат, в
котором изменения цвета будут неоднородными.

Решение

1

1) Используйте “ножницы” для точного 2) Создание нового слоя для выделения
копирования части изображения
Ограничьте выделение границей в пять пикселей и затем вставьте его копию как
Первое, что мы хотим получить – копия верхнего ряда зубов. Для этого мы воспользу-
емся инструментом «ножницы». Этот инструмент работает, определяя естественные гра- новый слой. Окно слоя будет близко по размерам к размерам выделения, а вам понадо-
ницы между заданными точками. В этом примере я выбрал много точек, расположенных
очень близко друг к другу, что позволило создать выделение, очень точно повторяющее бится дополнительное пространство для работы, поэтому немного расширьте размер слоя
контуры верхних зубов. В то же время нам не нужно точное совпадение, поскольку далее
мы выполним альфа-смешение скопированных зубов с оригинальным изображением. (Layer -> Layer Boundary Size). Отключите слой фона, и вы увидите над чем вам придется

Создав контур (пока вы не создали выделение, точки еще можно перемещать), щелкни- трудиться. Я заметил, что левая часть верхнего ряда зубов немного лучше, чем правая, >>
те мышью внутри него, чтобы преобразовать в выделение, а затем сохраните его в канале. так что сначала мы скопируем левую часть на правую и затем продолжим работать
дальше.

www.linuxformat.ru LXF1(70) Сентябрь 2005  7 9

УЧЕБНИК Gimp

>> 3) Замена несовершенных зубов 3

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

Мы получили изображение с зеркально отраженным и замаскиро-
ванным слоем, в котором копия зубов наложена с маской поверх ори-
гинальных зубов. Чтобы завершить этот процесс, нам нужно скопиро-
вать правую часть зубов на левую сторону и снова применить маску. В
результате мы получим более сбалансированный вариант контура
зубов.

4 4) Подравнивание зубов

Теперь нам нужно слить все три слоя (оригинальную копию, зер-
кально отраженную правую и левую части) вместе. Для выравнивания
нижней границы передних зубов воспользуйтесь инструментом клони-
рования. Возьмите кисть с мягкими контурами, чтобы придать вес ниж-
ней границе зубов, затем кисть с жесткими контурами, чтобы клониро-
вать ровную границу. Выберите начальную точку чуть выше того места,
где начнется клонирование и прочертите прямую линию (удерживая
клавишу Shift и одновременно перетаскивая курсор мыши) с помощью
инструмента клонирования. Немного снизьте прозрачность кисти, чтобы
придать эффект альфа-наложения процессу клонирования.

5) Приведение в порядок нижнего ряда 5

Та же процедура применяется и к нижнему ряду зубов:
1 Выделение.
2 Копирование.
3 Вставка в новый слой.
4 Копирование правой стороны.
5 Отражение.
6 Перемещение на левую часть.
7 И в, конце концов, слияние.
Вам не нужно много работать с нижними зубами, поскольку их
режущая кромка спрятана за верхними. Теперь видно, что размер верх-
ней десны в левой части сильно уменьшился, уменьшился и промежу-
ток между зубами справа. Нижние зубы теперь не выглядят отступив-
шими от передней части рта.
После всех этих процедур зубы выглядят гораздо более ровными.
Далее мы сосредоточимся на их цвете.

8 0   LXF1(70) Сентябрь 2005 www.linuxformat.ru

УЧЕБНИК Gimp

6 подсказка

6) Коррекция цвета зубов Подправляем изображения
• Копирование. Вставка. Добавление маски …
До сего момента я был сосредоточен только на зубах и игнорировал контекст изображения. Однако, для коррекции цвета Работайте с копиями слоев и затем сливайте их с
улыбки нам понадобится смотреть на нее в контексте изображения в целом. Если этого не сделать, вы рискуете слишком сильно оригиналом
выбелить зубы, что приведет к тому, что изображение начнет выглядеть как подделка. • Используйте альфа-смешение. Маски, сниженная
прозрачность на операциях клонирования и кисти с
Желтый оттенок и темные пятна на зубах могут быть исправлены целым рядом способов. Можно довольно просто откоррек- мягкими контурами помогут соединить части изображе-
тировать кривые цвета, но в этом случае мы получим слишком яркие верхние зубы. Но мы также можем откорректировать и ний вместе
нижние зубы, так что они будут иметь такой же яркий вид, как и верхние, что должно будет вывести их из тени и привести в • Раскрашивайте в контексте. Коррекции цвета на порт-
соответствие с верхней челюстью. Все, что нужно - это произвести небольшие изменения в насыщенности цвета (ее следует ретах, особенно на теле, должны быть нежными.
немного уменьшить, чтобы убрать пятна и желтый оттенок) и сделать зубы немного ярче, чтобы они выглядели более белыми. Уменьшение желтого на зубах достигается за счет сни-
жения насыщенности и увеличения яркости.
Совершенство достигается одним последним штрихом. Нижняя губа имеет небольшие выпуклости на обеих сторонах. Они • Симметрия идеальна, но не реальна. Копирование
легко исправляются с помощью расширения IWarp после слияния всех слоев. Чтобы применить IWarp, нажмите правую кнопку левой части изображения на правую в этом проекте по-
мыши на окне с изображением и выберите пункт: Filters > Distorts > IWarp. могло привнести некоторую симметрию в форму зубов,
однако наложение полученных копий на оригинальное
изображение обеспечило достаточно вариаций, чтобы
сделать менее явным наличие самих коррекций. Там,
где отсутствует хотя бы небольшая случайность, нет и
природы.
• Почему мы сохранили выделение? Потому, что мы
просто не знали, когда наши эксперименты с копирова-
нием, клонированием и слиянием дадут правильный
результат. Могло потребоваться довольно много попы-
ток, прежде чем что-то получилось бы. И все эти по-
пытки (по крайней мере, в данном проекте) начинались
бы с копирования верхнего ряда зубов. Я об этом осо-
бенно не говорил, но теперь вы знаете, почему иногда
нужно делать вещи, которые не кажутся необходимыми.
Если вы не делаете их с самого начала, то довольно
скоро становится очевид-
но, насколько
они полезны.

Результат

до

Результат вполне очевиден: небольшая

зубная коррекция иногда требует зна- через
месяц
чительных усилий. Эта статья показы-
В следующем месяце я приглашаю вас
вает, насколько важна прозрачность прогуляться по текстовым эффектам,
выходящим за рамки создания простых
для художника, работающего с
логотипов.
Gimp, но мы использовали и после
несколько простых техник во вре- LXF1(70) СЕНТЯБРЬ 2005  81
мя выполнения данного проекта.

Подобные примеры из реальной

жизни являются хорошим подспо-

рьем для практического закрепления

того, что вы уже изучили.

www.linuxformat.ru

учебник Perl

УРОКИ ПРОГРАММИРОВАНИЯ НА PERL

Perl Переменные и операторы

Часть 1 В «эпизоде 1» нашей серии Марко Фиоретти (Marco Fioretti) объясняет основные компоненты языка Perl.

подсказка Языки сценариев стали так популярны потому, что ценой зашифровки. И если вы не знаете структуры программы на Perl, то так
небольшого падения производительности они берут на себя для вас и будет. Давайте рассмотрим компоненты этого языка.Первая
Руководства по Perl такую скучную работу, как определение переменных, выде- вещь, которая раздражает новичков, когда они смотря на Perl-код – это
Perl – зрелый язык, и его пользо- ление памяти, возвращение её операционной системе и так далее. тот факт, что все переменные имеют неалфавитный префикс.
ватели имеют доступ к большому Придуманный в конце восьмидесятых Practical Extraction and Report Клевещут, что из-за это экран заполняется нечитаемым мусором. Но
количеству различной документа- Language или Perl исходно предназначался для работы с большими мне эти маркеры кажутся очень полезными, так как они сразу же сооб-
ции. Книга Тома Кристиансена, объёмами текста. И хотя он не является самым популярным языком щают о структуре соответствующей переменной и о том, что я могу
Джона Орванта, Ларри Уолла сценариев двадцать первого века, он остаётся лучшим инструментом сделать с нею. Вот пример:
“Программирование на Perl” для решения многих задач. Знаете ли вы, например, что Perl спас про- $NAME = ‘Johnny’;
(Programming Perl by Larry Wall, Jon ект «Геном человека» (Human Genome Project)?Целиком эту историю $AGE = 33;
Orwant and Tom Christiansen, можно прочитать по адресу: http://bioperl.org/GetStarted/tpj_ls_bio.html. @BOOK = (‘Introduction’, ‘First Chapter’, ‘Second Chapter’);
O’Reilly) является прекрасным В девяностые годы Perl стал получил широкое распространение, %STAR_WARS_FAMILY = (‘Father’, ‘Anakin’,
началом, если вам нужна более благодаря своему умению генерировать html-страницы. Сейчас эту
подробная информация – к вашим нишу занял PHP, однако у Perl всё еще есть много поклонников, а так ‘Mother’, ‘Padme’,
услугам http://perl.oreilly.com. Для же большая база унаследованного кода, расширений (называемых ‘Male Twin’, ‘Luke’,
доступа к онлайновой документа- модулями) и документации, которую легко приспособить для любых ‘Female Twin’, ‘Leia’);
ции, полной коллекции модулей, нужд. Первые две переменные – это скаляры. Скаляр Perl способен
руководств и примеров посетите Вам вовсе не обязательно быть системным администратором или содержать один кусочек информации, будь то строка, число или ссыл-
Comprehensive Perl Archive Network профессиональным программистом для того, чтобы получить пользу от ка. Их имена всегда начинаются с символа доллара ($). Строковые ска-
(www.cpan.org). Отдельные вопро- этого языка . Perl может помочь, когда вам нужно быстро обработать ляры всегда заключаются в единичные(‘), двойные(“) или обратные
сы можно задавать в новостной текст или даже картинки. Независимо от того, находятся ли эти файлы кавычки(`), так же как и их эквиваленты из оболочек Unix, а числа, по
группе comp.lang.perl.misc. на вашем жестком диске или в Интернете, Perl обладает модулями, аналогии, обходятся без кавычек.
способными прозрачно работать и с тем, и с другим. $A = ‘Hello’;
$B = ‘$A Johnny!’;
Используй переменные, Люк! $C = “$A Johnny!”;
$D = `ls /usr/bin`;
Почти все основные правила синтаксиса Perl (такие как правила Здесь переменная $B содержит именно то, что мы указали в коде,
обрамления строк кавычками) очень напоминают или даже идентичны $C (благодаря двойным кавычкам) равняется «Hello Johnny!», а $D,
правилам оболочек Unix. Документации по оболочкам существует поскольку для его значения использовались обратные кавычки, содер-
огромное количество, она не ограничивается учебником из предыду- жит результат выполнения команды ls /usr/bin/.
щих выпусков Linux Format. Поэтому, так как общую информацию мож- Упорядоченный список скаляров, проиндексированный номерами,
но найти в других местах, в эта серия сосредоточена на специфических называется массивом и начинается с символа @. Он полезен для хра-
особенностях языка, начиная с неудобочитаемых переменных. Я нежно нения чего-либо в последовательном порядке. Один элемент массива
люблю Perl, и использую его изо дня в день для решения самых раз- обозначается так: символ $, имя массива и номер элемента (начиная с
ных задач. Но я должен предупредить вас: критики говорят, что это 0) в квадратных скобках. В приведенном выше примере, второй эле-
единственный язык, код на котором выглядит одинаково до и после мент массива @BOOK – это $BOOK[1] и он равен «First Chapter».

82  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

учебник Perl

Ассоциативные массивы, или коротко говоря хэши (hash) – это Скаляры можно сравнивать между собой многими разными спосо-
последняя из основных категорий переменных языка Perl. Хэш – это бами. Давайте попробуем некоторые из них и посмотрим, что
группа скаляров, которые проиндексированы, или другими словам к получится:
которым можно обратиться не по номерам, а при помощи других ска- $A < $B; # число $A больше, чем число $B?
ляров, так называемых ключей. Другими словами, Perl позволяет $A lt $B; # строка $A располагается в словаре до $B?
сказать нам без излишних синтаксических конструкций, что в «семье $A <=> $B; # какое число меньше, $A или $B?
Звёздных войн»(STAR_WARS_FAMILY) отцом (Father) является $A cmp $B; # какая строка располагается раньше, $A или $B?
Энакин (Anakin):$STAR_WARS_FAMILY{‘Father’} = ‘Anakin’. Каждый
ключ или значение хэша могут быть скаляром любого типа. Некоторые сравнения имеют смысл, только если обе переменные
являются или строками, или числами. Например, оператор ‘Эта строка
Итак, даже самый короткий скрипт на Perl может быть заполнен в алфавитном порядка стоит перед другой’, всегда используется для
символами $, @ и %. Но при этом мы можем создавать очень слож- сортировки в алфавитном порядке. Даже если одна или обе сравнива-
ные структуры данных, используя минимальное количество префик- емые переменные содержат только числа, использование строковых
сов, почти не заботясь об именовании, и при этом всегда понимая, операторов сравнения приведёт к сортировке в алфавитном порядке.
каков смысл каждого кусочка. Это возможно благодаря мощной и Чтобы увидеть это в действии, введите следующую команду в команд-
немного опасной возможности вкладывать массивы и хэши друг в ной строке и проверьте, какие из операторов сравнения вернут истину?.
друга: perl -e ‘if (“dude” lt “hello”) {print “dude!\n”;} if (“dude” < “hello”) {print
%STAR_WARS_FAMILY = ( “Hello!\n”;}’

‘Father’, {‘Name’, ‘Anakin’, Фактически только первый тест должен завершиться успешно. Его
‘Height (cm)’, 210, смысл таков: “Верно ли, что строки переданы в алфавитном порядке?”.
‘jobs’, [‘Slave’, ‘Podracer pilot’, ‘Jedi Knight’. ‘Darth Vader’]}, Во втором операторе, используя < вместо lt, мы спрашиваем Perl,
правда ли что число “dude” меньше числа “hello”? Конечно, это абсур-
‘Mother’, {} # другие такие же данные... дный вопрос, и ответ на него предсказуемо непредсказуемый.
);
print “$STAR_WARS_FAMILY{‘Father’}{‘jobs’}[2]\n”; Еще одна особенность Perl, о которой стоит знать – это его посто-
янные преобразования строк в числа и обратно, в зависимости от кон-
Это хэш, в котором каждый из элементов первого уровня является текста. Они могут быть огромным подспорьем или же постоянным
в свою очередь хэшем, содержащим элементы Name (имя), Height источником недоразумений, в зависимости от того как часто вы забы-
(рост) and jobs (должность), причём значением элемента jobs является ваете про это.
массив. Обратите внимание, как мы различаем массивы и хэши при
помощи квадратных и фигурных скобок, даже если они вложены друг Я думаю, что на этом достаточно разговоров про скалярные опера-
в друга. В результате у нас получится, что оператор print в последней торы. Когда речь заходит об операторах, работающих с массивами, Perl
строке отобразит строчку Jedi Knight (Джедай). может сделать многое. Приведённый ниже пример показывает, как
отдельный элемент может быть добавлен к массиву, а затем удалён
Существует одна встроенная скалярная переменная, о которой вам оттуда:
надо знать. Иногда программисты на Perl забывают указать, какую @Jedi = (“Yoda”, “Obi Wan”); # несколько рыцарей-джедаев
переменную они имели ввиду, например: push(@Jedi, “Anakin”); # Юный Энакин встаёт в строй
print if условие $gone_to_the_dark_side = pop(@Jedi); # Энакин уже не джедай

Эта инструкция указывает, что надо выполнять оператор print при Существуют специальные операторы для работы с хэшами.
некотором условии, но не говорит, что именно надо напечатать – зна- Инструкции, подобные следующим, встречаются в коде на Perl очень
чение какой переменной? В этом случае интерпретатор Perl использует часто:
текущее значение переменной по умолчанию, $_. Её значение опреде- while (($Actor, $Character) = each(%STAR_WARS_CAST));
ляются предыдущими выражениями, или она может выступать в качес- # или даже
тве переменной цикла. Если вы помните об этой особенности, большое @ACTORS_ONLY = keys(%STAR_WARS_CAST);
количество кода на Perl покажется вам гораздо понятнее.
Первая строка будет циклически перебирать элементы хэша
Помоги мне, Падме %STAR_WARS_CAST, каждый раз присваивая ключ очередного эле-
мента и его значение паре скаляров $Actor и $Character, которые вы
Perl понимает большое число разных операторов. Некоторые из затем можете обработать, как вам захочется. Оператор key используется
них применимы только к какому-то одному классу переменных, будь то в том случае, когда нужно сохранить только ключи хэша в отдельном
скаляры, массивы или хэши, тогда как другие изменяют свой смысл в массиве и работать с ними независимо от значений.
зависимости от того, к какой переменной они относятся. В этой статье
осталось место только для нескольких вариантов. Основные числовые В Perl существует ещё очень много операторов, но у меня не оста-
операторы имеют тот же смысл, что и в языке C. лось места для их описания. Однако того, что мы уже успели рассмот-
$A =10 * 7.5 - 16; реть, с лихвой хватит для понимания структуры простого сценария.
$B = $A % 4; # деление по модулю 4 Свою силу и истинную ценность Perl особенно ярко проявляет в работе
с массивами и хэшами. LXF
И номера, и строки можно увеличивать при помощи оператора
инкремента ПРОДОЛЖЕНИЕ
$A = 4;
$B = ‘ab’; НА ОБОРОТЕ
$A++; # теперь $A равен 5...
$B++; # а $B равен ‘ac’!!

Не правда ли это здорово, что буквы тоже можно инкрементиро-
вать? Вы также можете соединять строки из нескольких частей:
$FIRST_NAME = ‘Luke’;
$LAST_NAME = ‘Skywalker’;
$COMPLETE_NAME = $FIRST_NAME.’ ‘.$LAST_NAME;
$REPEATED_NAME = $FIRST_NAME x 3;

Теперь $COMPLETE_NAME равняется «Luke Skywalker», a
$REPEATED_NAME содержит «LukeLukeLuke».

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  83

учебник Perl

уроки программирования на perl

Perl Сортируем наш код

часть 2 Напуганы непостижимыми операторами Perl и регулярными выражениями? Еще больше
напуганы словом «непостижимые»? Марк Фиоретти (Marco Fioretti) может всё объяснить!

подсказка Перед тем, как отправиться в путешествие по королевству Perl, метра передается «0». Последний, необязательный элемент – это список,
вы должны запомнить три типа переменных: скаляр, массив и который будет добавлен в позицию, номер которой вы только что указали.
Подсчёт числа элементов хэш. Отмеченные символом $ скаляры содержат один кусочек Если этот агрумента не указан, то splice() не добавит в массив ничего.
массива. информации, например строку. В нашем втором руководстве мы узнаем,
Как можно узнать, сколько как работать с более сложными величинами, массивами и хэшами, а затем Если вы хотите упорядочить содержимое массива в алфавитном
элементов содержится в массиве покажем вам настоящую черную магию Perl – регулярные выражения. порядке, то вам понадобится функция sort(). По умолчанию она рассмат-
или хэше? Очень просто, присвоить ривает содержимое переданного массива как строки, даже если там содер-
их скалярной переменной! Сортировка и перечисление жатся числа. Например, если вы введёте в командной строке следующее
Поскольку она может содержать выражение:
только одно число, Perl поместит Вы помните, как массивы упорядочивают скаляры? Оператор списка perl -e “@A_LIST = (‘Dominions’, 180, 3, ‘10, Downing St.’,’Admiralty’);
туда число элементов массива. Тот Perl действует похожим образом. Это безымянная последовательность print join( \”\n\”, sort @A_LIST), \”\n\”;”
же способ работает с хэшами. скаляров в круглых скобках. Хорошими вариантами использования то получите отсортированный по алфавиту список:
Функция keys возвращает массив, оператора списка является присвоение значений двум или более пере- 10, Downing St.
содержащий только ключи хэша, менным в одной инструкции или обмен значениями переменных тем 180
так что его размер можно узнать или иным способом. 3
следующим образом: ($X,$Y,$Z) = ($Y,$Z,$X); # Circular shift Admiralty
($Name,$Surname,$Phone) = (‘John’, ’Smith’,5556791); Dominions
$HOW_MANY_JEDI = @JEDI; ($DARTH_VADER,@JEDI) = (‘Anakin Skywalker’, ‘Yoda’, ‘Obi-Wan’, ‘Mace Однако функция sort() может руководствоваться и другими
$HOW_MANY_ITEMS_INTO_AN_ Windu’); критериями:
HASH = keys %SOME_HASH; @SORTED_LIST = sort AS_I_WANT @UNORDERED_LIST;
Две первые строчки говорят сами за себя. В третьей строки список
из левой части присваивания состоит из скаляра ($DARTH_VADER) и AS_I_WANT – это функция, принимающая два скаляра в качестве
именованного массива (@JEDI). Все знают, что случится после такого аргументов и возвращающая -1, 0 или 1 в зависимости от того, какой
присвоения: на Тёмную Сторону Силы юный Энакин перейдёт в одино- параметр оказался меньше согласно вашему критерию. Мы рассмотрим
честве. И поскольку вторым элементом списка является массив @JEDI, такие функции в последующих выпусках.
все остальные рыцари из правой части выражения попадут в него, в
том же самом порядке. Последнее замечание про массивы. Есть одна вещь, без которой не
может жить ни один Perl-хакер, хотя она вовсе не выглядит как массив.
Давайте теперь посмотрим на функцию splice(), которая использу-
ется для удаления, добавления или замены элементов массива. Для Как разрушить свою жизнь
начала определим несколько планет: регулярными выражениями
@STAR_WARS_PLANETS = (‘Naboo’, ‘Tatooine’, ‘Geonosis’);
Используем splice() для того, чтобы добавить Coruscant и Alderaan Perl, вероятно, содержит гораздо больше регулярных выражений, чем все дру-
сразу после Tatooine: гие языки программирования. Для того, чтобы своими глазами увидеть,
splice (@STAR_WARS_PLANETS, 2,0, (‘Coruscant’, ‘Alderaan’)); насколько мощными и неудобными они могут быть, посмотрите на самое длин-
ное из всех, что я видел – http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.
Первым аргументом этой функции является имя массива, STAR_WARS_ html. Говорят, что оно проверяет правильность адреса e-mail, но я не могу это
PLANETS. Затем идёт индекс элемента (считая с нуля!), с которого мы хотим проверить. Если хотите научиться создавать такие же, прочитайте книгу Джефри
начать склейку, в нашем случае это Tatooine. Третьим параметром является Фридла «Регулярные выражения» ( Jeffrey Friedl, «Mastering Regular
число элементов для удаления. Сейчас мы не хотим ничего удалять, нам Expressions», O’Reilly, 2002).
надо только добавить несколько планет, поэтому в качестве третьего пара-

8 4   LXF1(70) сентябрь 2005 www.linuxformat.ru

учебник Perl

Я говорю о нашем возлюбленном STDIN, стандартном потоке ввода Регулярные выражения через
любой «правильной» Unix-программы. К счастью, им очень просто месяц
пользоваться. Я упомянул здесь STDIN потому, что он может быть Perl был создан для обработки большого количества текстовой информа-
превращен в массив одним мановением руки: ции, поэтому он имеет самый богатый набор инструментов работы с регу- Организация ввода/вывода и способы
@LINES = <STDIN>; лярными выражениями. Регулярное выражение – это описание структу-
Вот так, одной единственной инструкцией вы внесли каждую строчку ры текстовой строки, созданное с помощью особого синтаксиса. Оно представления данных в наиболее
ввода в отдельный элемент массива @LINES. Удобно, не правда ли? состоит из обычного текста и метасимволов, описывающих свойства
строки. Основные метасимволы описаны в Шпаргалке по регулярным читабельном виде.
Чистый хэш выражениям, приведённой в левом нижнем углу страницы.

В первой части нашего руководства я вам рассказывал про хэши и их Красота и универсальность этого механизма проявляется в том, что
концепцию индексирования доступа к одним скалярам другими скаляра- вы можете как описать любую строку в деталях, так и дать указание
ми (ключами). Как вы знаете, хэш состоит из ключей, связанных со сво- скрипту найти в тексте нужные элементы и автоматически отредактиро-
ими значениями. Если у вас есть хэш, гораздо проще работать с ним с вать их. Лучше всего это объяснять на примерах:
помощью ключей, а не их значений. В конце концов, если бы вы просто /Jedi/
хотели собрать все эти значения вместе в определённом порядке, вы бы /\bJedi\b/
взяли обычный массив, не правда ли? /^Jedi$/
/Jedi/i
В отличие от массивов, хэши в Perl никак не отсортированы – ни в /Jedi|Sith/
порядке возрастания ключей, ни в порядке добавления элементов. Это
значит, что к элементу хэша нельзя обращаться по его порядковому Первое выражение будет истинно, если в анализируемом тексте
номеру, можно только по ключу. Это верно, даже если вы собрались уда- содержится подстрока Jedi, возможно в виде части более длинного сло-
лить какой-то элемент хэша и его ключ. Для этого существует функция ва. Если вам нужно найти только отдельное слово ‘Jedi’, нужно обрамить
delete(), которая принимает в качестве параметра ключ элемента, подле- его символами границы слова (\b), как это было сделано во втором
жащего забвению. Пользоваться этой функцией необходимо, так как выражении. Третье выражение еще более строгое, оно требует чтобы Jedi
если вы, например, просто присвоите пустое значение соответствующему с находилось одновременно в начале (^) и в конце ($) строки, то есть,
элементу хэша, то он не будет удалён, хотя значение этого элемента и другими словами, чтобы «Jedi» было единственным словом. Регулярные
станет равным null. выражения Perl зависят от регистра символов, так что если вам не хочет-
ся писать что-то вроде JEDI|jedi|JedI, то используйте модификатор i, как
Первой вещью, которую приходится делать с элементом хэша, явля- это сделано в четвёртом примере. Последнее выражение будет истинным,
ется выяснение того, присутствует ли он в хэше, и соответствует ли его если в тексте встретится хотя бы одно вхождение Jedi или Sith.
ключу какое-нибудь значение. Для этих целей в Perl существуют две
функции, названные (вы уже догадались?) exists() и define(). Всё это ценные знания, так как после того, как Perl смог распознать
Используют их следующим образом: текст, описываемый регулярным выражением, он может выполнить
if exists ($STAR_WARS_ACTORS{‘Leia’}) { # do something...}; любые действия, какие вы захотите, или сможет изменить найденную
if defined ($STAR_WARS_ACTORS{‘Leia’}) { # do something else...}; строку, руководствуясь вашими инструкциями. Вот соответствующие
выражения:
Первая команда выполнится, только если в хэше есть ключ ‘Leia’ вне if ($STRING =~ m/some regex here/) {do something}
зависимости от того, какое значение присвоено этому ключу. Второе $STRING =~ s/some regex here/some other text pattern/;
выражение идёт еще дальше, оно истинно только в том случае, если в
хэше есть ключ ‘Leia’ и если ему явно было присвоено какое-то значение. Собственно регулярные выражения обрамлены косыми чертами (/).
Строки связаны с ними при помощи оператора =~. Когда перед косыми
регулярные выражения: шпаргалка чертами присутствует буква m, это значит: «Соответствует ли строка регу-
лярному выражению?». Когда вместо m наличествует s, и добавлен
Здесь приведён список основных метасимволов, используемых в регулярных какой-то текст между второй и третьей косыми чертами, это значит
выражениях Perl. Скопируйте его и держите поближе к клавиатуре, он дейс- «Взять $STRING, и заменить в ней то, что соответствует регулярному
твительно помогает сэкономить время. выражению, на строку, взятую из последней пары черточек».
. .................. Любой символ за исключением перевода строки
^ ................. Начало строки Регулярные выражения могут содержать скаляры и сохраняют
$ ................. Конец строки результаты своей работы в специальных переменных. Так что это очень
* ................. Ноль или более предыдущих символов гибкий инструмент.
+ ................. Один или более предыдущий символ $JEDI = ‘Anakin’;
? ................. Ноль или один предыдущий символ s/Master $JEDI/The future Darth Vader/g;
\n ................ Перевод строки s/Master (Obi-Wan|Yoda)/The Jedi Knight $1/;
\t ................. Табуляция
\w ............... Числа и алфавитные символы, вне зависимости от регистра Тут мы начинаем с того, что заменяем все фразу «Master Anakin»
\W ............... Все символы, кроме букв или цифр на «The future Darth Vader» (именно «Anakin» потому, что при обработ-
\d ................ Старые добрые цифры: 0, 1 и так до 9. ке регулярного выражения переменная $JEDI будет заменена её теку-
\D ............... Всё, кроме цифр. щим значением). Модификатор g обозначает, что замена должна быть
\s ................ Пробельные символы: пробел, табуляция, перевод строки. глобальной, без него изменение произошло бы только с самым пер-
\S ................ Любой не пробельный символ. вым вхождением искомой фразы.
\b ................ Граница слова.
| .................. Выбор из двух вариантов (например A|B). Второе регулярное выражение демонстрирует еще одну интересную
[] ................ Квадратные скобки определяют диапазон символов. особенность. Оно находит все случаи, в которых перед именами
() ................ Круглые скобки сохраняют соответствующую им подстроку. «Obi-Wan» или «Yoda» стоит слово «Master». Поскольку имена
Примечания: Когда вам необходимо вставить в регулярное выражение один из взяты в круглые скобки, после удачного поиска они не забывают-
этих символов в его буквальном смысле, например знак «+», нужно поставить ся, а сохраняются в специальной переменной $1, так что одно и
перед ним обратную косую черту (\). то же регулярное выражение может заменить ‘Master Yoda’ на
A+ # Одна или несколько букв A ‘The Jedi Knight Yoda’, а ‘Master Obi-Wan’ на ‘The Jedi Knight Obi-
\+ # один знак «+» Wan’. Если нужно запомнить более одного элемента регулярного
\++ # Один или несколько знаков «+» выражения, используются переменные $2, $3 и так далее до $9.
LXF

www.linuxformat.ru LXF1(70) сентябрь 2005  8 5

учебник Subversion

Система контроля версий

Subversion Установка репозитария

 Часть 1  Subversion (англ. «ниспровержение», «подрыв») – это отличное решение open-source для управления
процессом разработки вашего проекта. Соответственно, в LXF всегда под рукой собственный «подрывник», Грэхем
Моррисон, который расскажет вам об этом.

НА ДИСКЕ В старые добрые времена программисты имели обыкнове- па и интеграции с сервером Apache. В следующем месяце мы охватим
ние скрываться в своих лабораториях, записывая ленты на клиентскую часть Subversion, и третий урок покажет вам более «про-
машинах размером с орган Кавайе-Колля, что установлен в двинутые» особенности, такие как ветвления (branching) и теггинг
соборе Сердца Христова в Париже. Результаты их работы, вместе с (tagging). Я очень надеюсь, что это улучшит совместную работу, но не в
программами, которые эти результаты генерировали, можно было том смысле, что мы обсудим печать ваших собственных копий
сохранять только на бумажных лентах, что делало совместную работу Манифеста Коммунистической партии для последующего распростра-
несколько затруднительной. Тим Бернерс-Ли (Tim Berners-Lee) разом нения среди друзей и коллег.
изменил это. Теперь компьютеры объединены в сети, и в разрабатыва-
емые проекты вовлекаются сотни или даже тысячи людей, активно Наследие CVS
поддерживающих друг друга. Без такого сетевого сотрудничества у нас
не было бы Linux. Сперва - немного истории, которая объяснит, как мы получили
Магической основой совместной разработки проекта можно назвать Subversion из RCS. Хотя первоначально RCS была очень полезна, в ней
контроль версий. При этом используется программа для отслеживания имелись довольно большие «дыры». В частности, она не позволяла
каждого единичного изменения или исправления в проекте – это слож- оперировать с проектом в целом, только с отдельными файлами, и
нее сделать, чем сказать. Как вы поступите, если сразу несколько разра- лишь один пользователь мог работать с файлом в данное время. Дик
ботчиков будут редактировать один и тот же участок кода? Или если оче- Гран (Dick Grune), расстроенный тем, что не может использовать RCS
редное дополнение тем или иным образом повредит проекту? Первому для совместной работы со студентами над проектом компилятора,
приложению контроля версий, Revision Control System, или RCS, напи- занялся разработкой альтернативы, и в 1986-м году свет увидела пер-
санному Вальтером Тичи (Walter Tichy), были присущи многие эти про- вая версия программы Concurrent Version System (CVS).
блемы. Сегодня RCS в большинстве случаев заменено другими про-
граммами, среди которых присутствует пакет Subversion, о котором и В основу CVS положена весьма простая идея. Дерево исходного
пойдет речь. кода проекта сохраняется на сервере, называемом «репозитарий».
Я буду исследовать Subversion в серии из трех уроков. В этом Каждый разработчик должен извлечь собственную копию этого дерева,
выпуске вы получите представление об администрировании сервера, скачав исходный код на свою локальную машину. Эта копия становится
от импорта проектов разработки до предоставления удаленного досту- «рабочей». Любые изменения, которые разработчик выполняет в своей
рабочей копии, должны быть занесены назад в репозитарий и зафик-
сированы. Если более чем один разработчик изменял одну и ту же

86  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

учебник Subversion

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

как сервер позволит выполнить его фиксацию (commit). ность потерять соединение на полпути. В

Как вы могли заметить, CVS использует клиент-серверную случае с CVS, результатом этого станет

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

ментов сервера. CVS не всегда используется для исходных текс- другая половина – нет, что не оставит адми-

тов приложений: на самом деле, есть несколько странных нистратору никакой возможности разо-

людей, которые пытаются использовать CVS для управления ........ браться, какие файлы изменялись, а какие
........
всей своей жизнью, но это уже совсем другая история. ........ остались старыми. Решение, которое пред-
........
CVS– это, по сути, многодокументное расширение к RCS, и лагает Subversion, заключается в том, что

оно унаследовало некоторые проблемы, связанные с его роди- все изменения в репозитарии выполняются

телем, и даже добавило немного своих собственных. В этом 1 2 3 4 «атомарно». Это означает, что все измене-
смысле у Subversion есть все шансы отличиться. ния вносятся как единая транзакция,
CVS и Subversion имеют один и тот же цикл разработки. [1] исключающая «полуобновление» файлов и
Новое решение Первоначальная версия в репозитарии. [2] Файл извлечен двумя двойную фиксацию. Это, наряду с другими
разработчиками. [3] Каждый разработчик редактирует свою существенными добавлениями («дешевые»
Система Subversion была разработана как непосредственная часть файла. [4] Файла фиксируются в репозитарии, объединяя ветвления и тэггинг, отличная поддержка
открытая замена для CVS, выстроенная «с нуля», чтобы оба изменения.

решить многие проблемы своей предшественницы. Версия двоичных форматов), сделает обновление

1.01 была выпущена в марте 2004-го года, а как раз сейчас начинается тестирование до Subversion почти обязательным для пользователей CVS уже в ближайшем будущем.

версии 1.2.0 Во главе списка ее отличительных особенностей – контроль версий катало- Subversion доступна для загрузки с сайта http://Subversion.tigris.org под лицензией

гов, который не может обеспечить . Это ключевой момент, поскольку Subversion поз- CollabNet/Tigris.org, которая аналогична лицензии Apache; ее разработчики

воляет вам манипулировать каталогами таким же образом, как и файлами – переносить, рекомендуют версию 1.1.4. Как только вы установите эту программу, вам захочется

переименовывать, копировать и удалять. Основанная на файлах структура CVS – причи- задействовать ее для использования в своем собственном проекте.

Часть 1 – Установка репозитария

Первый шаг при администрировании репозитария Subversion – создание структуры и Этими директориями являются: conf, dav, db, hooks и locks. Conf содержит специфи-

заполнение ее файлами. Subversion использует базу данных Berkeley, которая ограничи- ческий файл конфигурации репозитария – svnserver.conf. Каталог dav содержит систем-

вает инсталляцию локальной файловой системой потому, что Berkeley полагается на ную «бухгалтерскую» информацию, особым образом используемую модулями доступа

файловую систему, которая поддерживает относительно «продвинутые» особенности, не Apache. Директория db хранит все системные файлы базы данных Berkeley. «Ловушки»

доступные в настоящий момент в сетевых аналогах (таких как Samba или NFS). Как толь- (hooks) – это скрипты, которые могут выполняться при возникновении некоторого события

ко будет выбрано место для размещения репозитария, вы можете создать его, используя (см. врезку «Ловушки Subversion»). Таким событием может являться, например, фиксация

команду svnadmin, предназначенную для внесения значительных изменений в или изменение версии, и каталог hooks содержит скрипт-пример для каждой операции,

репозитарий. которую осуществляет SVN. Директория locks содержит данные блокировок, ответственные

Чтобы создать собственный репозитарий с именем subres, выполните следующую за отслеживание доступа к репозитарию.

команду Для начала теории достаточно. Прежде чем приступить к использованию репозитария,

в каталоге, в котором вы хотите разместить его (я буду использовать /usr/share): нам нужно импортировать в него дерево исходного кода. Как и в случае с CVS, это можно

$ svnadmin create subres сделать, используя команду svn import. Subversion использует URL, чтобы ссылаться на

Управление репозитарием Subversion не очень отличается от CVS. Самое главное для размещение, причем локальные директории предваряются тремя прямыми слэшами, что-

администратора - это понять файловую систему, используемую в Subversion. Имеется в бы показать, что это не Интернет-адрес. Позже, когда мы будем настраивать модули

виду не файловая система типа ext3 или Reiser, а структура и организация файлов, кото- Apache, мы будем использовать HTTP, чтобы вернуться к более знакомому использованию

рую ожидает получить SVN. Приведенная выше команда генерирует структуру в каталоге прямых слэшей.

subres, который теперь должен содержать пару файлов и несколько директорий. $ svn import -m “Initial project import”

Adding helloworld/helloworld.cpp

«Ловушки» Subversion Adding helloworld/Makefile

Committed revision 1.

«Ловушки» выполняются при наступлении определенного как транзакция будет зафиксирована. Subversion даже Как вы видите на выводе, команда import берет содержимое
каталога helloworld и помещает в репозитарий два файла; вложен-
события в репозитарии. Каждое событие соответствует включает пример как раз для этих целей (см.

одному из следующих сценариев из каталога hooks: Subversiontools/hook-scripts/commit-email.pl). ные каталоги также будут включены. То, что вы видите, - концепту-

Start-commit. Он запускается перед началом транзакции и Pre-revprop-change. Свойства собственной ревизии альное отличие Subversion от CVS: номер ревизии используется для
проверяет, обладает ли пользователь соответствующими Subversion являются единственными данными в репозита- всего обновления, а не для каждого файла. Зафиксированный номер
полномочиями для ее фиксации. рии Subversion, версии которых не отслеживаются. Это оз- ревизии отражает каждое атомарное обновление.
Pre-commit. Этот скрипт выполняется после завершения начает, что изменения этих свойств будут потеряны, если
транзакции в репозитарии, но, что важно, до того как будет администратор не предпримет никаких действий по сохра- Чтобы убедиться, что файлы успешно добавлены в репозитарий,
выполнена окончательная фиксация. Он нужен, чтобы убе- нению предыдущих значений. Именно для этого предна- вы можете вывести список содержимого, используя команду ls:
диться, что вся транзакция придерживается политики значен данный скрипт - он выполняется перед изменени- $ svn ls file:///usr/share/subresMa`kefile

фиксации в репозитарии. Эта политика может быть доста- ем свойств, позволяя легко автоматизировать необходи- helloworld.cpp >>
точно простой, например, проверка места назначения, но мые операции. Чтобы извлечь рабочую копию проекта, используется команда
скрипт может также быть полезен для запросов авториза- Post-revprop-change. В зависимости от наличия сценария
ции или для занесения результата фиксации в инструмент pre-revprop-change, этот скрипт выполняется после того, «co» в каталоге, в который вы хотите поместить проект:
отслеживания ошибок. как свойства ревизии будут изменены. И снова напомню, $ svn co Ошибка! file:///usr/share/subres
Post-commit. Этот сценарий часто используется, чтобы что пакет Subversion включает пример, показывающий, как A subres/helloworld.cpp
предоставлять информацию о новой ревизии в список сообщить команде разработчиков о произошедших изме- A subres/Makefile

рассылки, посвященный разработке проекта, после того нениях свойств. Checked out revision 1

Все очень просто! И на этом мы завершим первую часть.

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  87

учебник Subversion

Часть 2 – Миграция с CVS

>> Единственной проблемой при таком импортировании проекта явля- D 4 4 graham helloworld.cpp
ется то, что вы потеряете всю историю изменений, накопленную в
CVS релизы вашей текущей системе контроля версий. К счастью, есть способ пере- A+ - ? ? welcome.cpp
История Subversion нести вашу историю изменений в новый репозитарий Subversion.
3 1 graham Makefile
Простейший путь сохранить историю вашего проекта – экспорт
каждого значимого релиза из вашей старой системы в Subversion. Приведенный пример показывает текущее состояние файлов,
Сначала вы импортируете самую раннюю версию проекта, которую
содержит ваша нынешняя система контроля версий, после чего вам содержащихся в рабочей копии. Буквы D и A в первом столбце показы-
следует извлечь рабочую копию. Для каждого релиза, который вы
хотите экспортировать в Subversion, вам нужно скопировать файлы в вают, что helloworld.cpp был удален (D), в то время как welcome.cpp
вашу рабочую копию, удалить все необходимые файлы и каталоги, и
обновить каждую версию. был добавлен (A). Символ «+» указывает, что добавление файла

Менять файлы и каталоги в вашей рабочей копии достаточно welcome.cpp включает историю изменений для этого файла. Это
просто, если придерживаться следующей процедуры добавления:
сперва в репозитарий, затем – обновление и фиксация изменений. результат использования команды copy, в отличие от ручного копиро-
Стоит учесть, что Subversion обрабатывает файлы не так, как : ког-
вания. Числа указывают рабочую ревизию и последнюю зафиксиро-

ванную версию. Первое число – текущая ревизия, а второе – последняя

зафиксированная ревизия, за которой указывается автор фиксации.

Фиксация изменений и проверка статуса репозиратия должны сге-

нерировать вывод, подобный приведенному ниже:

$ svn commit –m “Copied and removed cpp files”

Deleting helloworld.cpp

Вместо того, чтобы Adding welcome.cpp
импортировать всю
ВЕРСИЯ 1 историю проекта в Committed revision 6.
Subversion, иногда
ВЕРСИЯ 2 проще выбрать $ svn status –v
несколько важных
релизов, и 3 3 graham .
импортировать только
ВЕРСИЯ 3 их. 6 graham welcome.cpp

3 1 graham Makefile

Используя приведенные выше команды, можно выстроить достой-

ную историю изменений из истории релизов проекта. Правда, это пот-

ребует много работы, и было бы намного проще, если бы процесс был

несколько автоматизирован, или хотя бы имелся инструмент для кон-

вертирования истории изменений из других систем контроля версий. К

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

переноса вашего старого репозитария в репозитарий Subversion.

В вопрос миграции с CVS на Subversion разработчики внесли боль-

шой вклад – cvs2svn, сценарий Python, в частности, показывает хоро-

шие результаты, когда выполняет перенос старых файлов из репозита-

да вы используете в Subversion команды rename и copy, будет сохра- рия. Процесс, в первую очередь, «вынюхивает» в системе CVS все
няться история переименований и копирования файлов.
данные, касающиеся управления ревизиями, которые затем извлекают-
Общие операции работы с файлами, для которых есть эквивалент
в Subversion, - copy, rename и move, и они используются, в общем-то, ся и используются для перестроения истории изменений в Subversion.
таким же образом, как их аналоги в командной строке:
$ svn cp helloworld.cpp welcome.cpp Есть несколько возможных уровней сложности для конвертирующего
A welcome.cpp
$ svn rm helloworld.cpp сценария, которые распространяются не только на само конвертирова-
D helloworld.cpp
ние, но также и на производительность/объем вашего репозитария.
Наиболее важная команда в Subversion для всех файловых операций
и, вероятно, вообще для использования Subversion, это команда status. Наиболее часто используемая опция включает только главную ветвь
Вы можете проверить статус всех файлов в репозитарии (это особенно
полезно перед фиксацией изменений), используя флаг verbose для (так называемый trunk) репозитария CVS, (cvs2svn --trunk-only),
подробного вывода:
$ svn status –v игнорируя все исторические данные в любых ветвях и тэгах, какие у вас
3 3 graham .
могут быть. Если такое использование кажется слишком ограниченным,

вы можете установить только ветви и тэги, которые наиболее важны для

вашего проекта (например, вы могли бы без последствий проигнориро-

вать ночные сборки). Это выполняется с помощью флага --exclude,

определяющем, какие ветви и тэги следует игнорировать. Наконец, вы

можете просто импортировать залпом все сразу, и использовать скрипт

cvs2svn для конвертирования репозитария в Subversion полностью.

Часть 3 – Обеспечение удаленного доступа

Очевидно, что пользователи, имеющие доступ к репозитарию что эти модули подгружаются. В файл httpd.conf нужно включить
Subversion, могут находиться в разных частях света, и поэтому требует- особую информацию о настройках Subversion:
ся возможность работы в сети. Это особенно верно для открытых про- <Location /svn>
ектов. Subversion использует Apache и особый протокол WebDAV, чтобы DAV svn
обеспечить доступ к репозитарию для сетевых клиентов. Установка и SVNPath /usr/share/subres
настройка достаточно проста, с единственным требованием, что нужен SVNAutoversioning on
работающий Apache версии 2.0 или выше. AuthName “LXF Subversion Repository”
AuthTypeBasic
В этом случае установка будет состоять в простом добавлении </Location>
нескольких строк в исходный файл конфигурации Apache. Нужны два
модуля – mod_dav и mod_dav_svn, которые менеджер пакетов должен Опция DAV просто информирует Apache, какой модуль
был добавить автоматически. Тем не менее, вам следует убедиться, используется (svn), а SVNPath указывает на репозитарий. Поскольку

88   LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

учебник Subversion

Subversion использует web-сервер, поддерживающий WebDAV, то Subversion против CVS
существует возможность использовать другие совместимые с DAV
клиенты для доступа к репозитарию Subversion. Теоретически, такие Не секрет, что Subversion была разработана, чтобы заменить CVS, и поэтому работа с обоими приложениями очень
клиенты могут рассматривать репозитарий как разновидность
файловых систем, так же как мы получаем доступ к объектам Samba похожа. С точки зрения клиента многие команды идентичны, и вы можете зачастую просто заменить cvs на svn в
или NFS с помощью своего файлового менеджера.
командной строке. Обработка происходит в фоновом режиме, и серверные и сетевые протоколы, которые имеют
Пока что осуществление этого требует значительных усилий, если
нужно добиться истинной совместимости. Функция SVN auto- различия, остаются, по большей части, скрыты от конечного пользователя. Здесь приводится список некоторых команд,
versioning – это компромисс, разрешающий делать обновления с
основных клиентов, без записей в журналах или комментариев, которые слегка отличаются:
добавляемых Subversion автоматически в общем виде. Это далеко от
идеала, но предоставляет дополнительную возможность выбора. CVS Subversion Функция

Последняя строка в нашем примере задает тип аутентификации, в cvsadmin svnadmin Оболочка к административным функциям
настоящее время используется базовая аутентификация протокола
HTTP. Доступ на запись может контролироваться путем ограничения cvsannotate svn blame Выводит информацию о ревизиях для файлов
HTTP командами, на которые Subversion может положиться как на
обеспечивающие только возможность чтения: cvsco –j svn merge Объединяет два источника в рабочую копию
<LimitExcept GET PROPFIND OPTIONS REPORT>
cvshistory svn log Выводит журнальные сообщения
Используя этот пример, вы разрешите пользователям доступ на
запись только через выделение отдельных учетных записей и cvsinit svnadmin create Создает новый репозитарий
соответствующий файл .htpasswd, как это было бы при нормальной
конфигурации Apache. Безопасные соединения также возможны при cvsrdiff svn dirr Составляет список отличий для патча

cvsremove svn delete Удаляет объект из репозитария

cvsrtag svn copy Копирует объект, включая историю его ревизий

помощи доступа к репозитарию через HTTPS вместо HTTP, и в этом
случае приходится полагаться на предварительно настроенный модуль
mod_ssl. После того как Apache будет настроен, вы должны получить
возможность управлять репозитарием удаленно, используя URL своего
сервера, вместо прежнего указателя на файлы:
$ svn co http://localhost/subres

Часть 4 – Поддержка

Раз репозитарий запущен, вам понадобится несколько команд для под- версию, и по умолчанию имеет доступ только для чтения, так что подсказка
держания его в рабочем состоянии. Наиболее важная из них – можно не беспокоиться, что будут сделаны какие-то катастрофические
svnadmin, команда, в общих чертах аналогичная cvs admin, которая изменения. Каждая команда с svnlook может быть применена как ко Документация по Subversion
предоставляет несколько жизненно важных подкоманд. Мы уже встре- всему репозитарию, так и к определенной ревизии. Лучший способ понять Subversion
чались с svnadmin create, которая отвечала за генерацию репозитария. $ svnlook info /usr/share/subres --revision 1 – это воспользоваться ее замеча-
Вы можете воспользоваться командой svnadmin dump как частью про- graham тельной встроенной документаци-
цесса резервного копирования, но она полезнее для переноса содер- 2005-04-15 16:33:44 _0100 (Fri, 15 Apr 2005) ей. Чтобы добраться до нее,
жимого между репозитариями. Команда копирует содержимое репози- 22 выполните svn help в командной
тария в стандартный поток вывода, используя переносимый формат Initial project import строке. В результате вы получите
dump-файла. Команда dump также позволяет вам определять диапазон список внутренних команд
ревизий репозитария, которые должны быть включены в вывод, вместо Svnlook info – мощная команда, позволяющая получить общий Subversion, по которым вы можете
того чтобы выводить все сразу, как это происходит по умолчанию. обзор репозитария. Приведенный пример показывает автора, дату, получить дополнительную инфор-
$ svnadmin dump /usr/share/subres > dump.txt комментарий и размер первой ревизии, сделанной в репозитарии. мацию, указав имя в конце коман-
Каждое поле может быть получено независимо, если заменить info на ды help, например, так: $ svn help
Партнер команды dump – svnadmin load, которая может импорти- author, date или log, так что команда может быть использована при co. Также в сети имеется книга
ровать вывод в формате dump. Однако, чтобы создать резервную разработке скриптов для использования в качестве «ловушек», издательства O’Reilly, озаглавлен-
копию репозитария, вам нужна другая команда – hotcopy. Благодаря упомянутых ранее. ная «Version Control with
базе данных Berkley, становится возможным копировать содержимое Subversion» (Контроль версий с
репозитария без его остановки. Стандартная инсталляция Subversion На данный момент вы должны понимать основы работы сервера помощью Subversion), которую
также предоставляет сценарий на Python в каталоге tools/backup, кото- Subversion. Следующим этапом должен быть либо старт проекта в можно скачать в формате PDF или
рый вы можете использовать для автоматического исполнения (напри- Subversion, либо спасение CVS-проекта, увядающего на вашем диске. HTML с сайта http://svnbook.red-
мер, как задание cron), вместо ручного запуска svmadmin hotcopy. Поскольку ваш репозитарий поднят и настроен, следующий шаг для bean.com.
вас и ваших коллег по разработке – использовать его, но об этом мы
Лучший способ проверить статус работающего репозитария – поговорим в следующий раз! LXF
использование команды svnlook. Svnlook проверяет самую свежую

ПРОДОЛЖЕНИЕ
НА ОБОРОТЕ

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  89

учебник Subversion

Система контроля версий

SUBVERSION Используем клиент

 ЧАСТЬ 2 У вас уже есть репозитарий Subversion – теперь попробуем работу с
Subversion в качестве клиента. Грехэм Моррисон расскажет, что надо делать

Надеемся, после введения в работу с Subversion, вы вполне Использование клиента Subversion – это также и заманчивый спо-
можете избавить себя от старых CVS-серверов, которые, долж- соб скачать последние исправления в каком-нибудь программном про-
но быть, пылятся в какой-нибудь темной комнате. Мы показали, дукте, например, обновления безопасности и новые возможности, кото-
что перейти на новое поколение программного обеспечения для контроля рые только-только появились в основной ветке. Вам придется быть вни-
версий достаточно легко (а почему бы и нет, когда уже не существует сво- мательным, так как все, что доступно в репозитарии Subversion, постоян-
бодно распространяемой версии BitKeeper). Тем не менее, настройка и но находится «в движении». Каждый день можно наблюдать некоторые
администрирование сервера Subversion потребуют определенных навы- изменения, порой достаточно значительные. Это даже похоже на чтение
ков, которые должны пригодится каждому менеджеру проектов. В этом книги, которую еще не закончил писать ее автор.
номере мы предоставим наиболее распространенное решение для боль-
шинства разработчиков – использование Subversion в качестве клиента. В этом обзоре мы сконцентрируемся на использовании клиента на
Итак, клиент – это та часть, которая получает доступ к серверу и разби- этапе кодирования проекта в цикле разработке ПО, где Subversion,
рается со всеми сложными деталями, например, решает, какую версию кода несомненно, примененяется наиболее часто. Руководство будет содер-
выбрать, и как лучше будет исправить проблемы с конфликтами версий. Это жать те же примеры, что и в предыдущем случае. На страницах обзора
некий интерфейс между локальной копией проекта, копиями, которые также вы сможете узнать о том, как загружать, изменять, добавлять файлы, а
находятся у других разработчиков, и главной версией на сервере Subversion. также анализировать проделанную работу, что, будет вполне достаточно
для того, чтобы сделать свой личный вклад в ваш любимый проект.

90  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

учебник Subversion

ЧАСТЬ 1 – ЗАГРУЗКА ПРОЕКТА С СЕРВЕРА SUBVERSION

Первое, что надо сделать, если вы работаете над проектом, который Repository UUID: 6319a556-cbf4-0310-b561-de3fb53aee82
находится под управлением сервера Subversion, - загрузить вашу Revision: 1
собственную рабочую копию исходных текстов. Эту тему мы уже обсуж- Node Kind: directory
дали в прошлый раз, и все, что вам потребуется вспомнить - это то, Schedule: normal
что мы использовали команду svn co: Last Changed Author: graham
$ svn co file:///usr/share/subres. Last Changed Rev: 1
A subres/helloworld.cpp Last Changed Date: 2005-04-15 16:33:44 +0100 (Fri, 15 Apr
A subres/Makefile 2005)
Checkedout revision 1
Если вас интересует, как Subversion справляется с различиями
Путь к хранилищу исходных текстов обычно начинается с ‘svn://’, между вашей работающей копией и той, которая содержится в репози-
что говорит о внешнем соединении с репозитарием, расположенным тарии, вы будете приятно удивлены, узнав, что ответ кроется в папке
где-то в недрах сети Интернет. Но вы также можете указать локальный .svn – административной директории. Здесь содержится вся необходи-
репозитарий (используя ‘file://’), который мы вместе создали в про- мая Subversion информация для управления различиями 2-х версий
шлый раз. Работа на локальном уровне значительно упрощает процесс дерева исходных текстов, например, расширения файлов и даты их
экспериментирования, особенно в плане обновления данных. В случае модификации. Практически каждое ваше действие касательно
работы с удаленными репозитариями получить права на запись слож- Subversion отражается в административной директории, а ее редакти-
ней, по вполне понятным причинам. Так что ради того, чтобы поэкспе- рование вручную приведет только к лишним проблемам.
риментировать, стоит создать и настроить собственное локальное хра-
нилище исходных текстов абстрактного проекта. Добираемся до репозитория

Если у вас, как вы думаете, осталась работающая копия репозита- Путь к репозитарию зависит от протокола, который указывается в начале адреса:
рия Subversion с прошлого раза, вы можете запросто проверить это при
помощи команды svn info: file:// используется для прямого доступа к файлам, хранящимся в вашей файловый системе
$ cd subres; svn info
Path: . http:// протокол WebDAV, сконфигурированный на сервере Apache
URL: file:///usr/share/subres
https:// тоже самое, что и в предыдущем случае, но с добавлением SSL-шифрования.

svn:// родной протокол Subversion, поддерживаемый демоном svnserve

Svn+ssh:// протокол Subversion, дополненный SSH для обеспечения безопасности

ЧАСТЬ 2 – ИЗМЕНЯЕМ ФАЙЛЫ return(0); подсказка
}
После того, как вы загрузили собственную рабочую копию проекта, Графическое сравнение
вы можете использовать команду svn status для проверки каких-либо Строка «Это дополнение» была помечена символом ‘+’ как изме- модификаций
изменений в репозитарии. Любой из модифицированных файлов будет ненная версия. По мере изменения файла, мы будем копировать новую Не трудно заметить пару отличий
представлен с буквой ‘M’, стоящей в первой колонке. Мы отредактирова- версию в основной репозитарий, чтобы другие разработчики тоже могли между двумя файлами, но ведь
ли простой пример helloworld.cpp, который скачали с нашего репозита- пользоваться нашими нововведениями. Так же, как и в CVS, это делается изменения могут быть и более
рия, и теперь, команда svn status должна отразить новый статус файла: командой svn commit, сопровождаемой комментарием для описания сложными, и их может быть намного
$ svn status вносимых вами изменений. Хорошим тоном считается вносить как можно больше. В этом случае вы можете
M helloworld.cpp больше мелких изменений, используя вышеупомянутые комментарии облегчить себе жизнь, используя
для описания их сути. Таким образом, в дальнейшем будет проще отсле- графический просмотрщик отличий.
В приведенном выше примере, файл helloworld.cpp был модифи- дить изменения, которые привели к неправильной работе программы, Программа KDiff3 может показывать
цирован в локальной копии. Вы можете проверить изменения между если что-то пойдет не так (а когда-нибудь это неизбежно произойдет). отличия нескольких файлов за один
вашей локальной копией и копией в репозитарии, набрав команду svn $ svn commit раз и даже поддерживает слияние. У
diff. Эта команда работает в точности так же, как и всем известная Sending helloworld.cpp KDE есть собственный просмотрщик
команда diff, отображая также пути к двум деревьям исходных текстов. Transmitting file data . под названием Kompare, который
$ svn diff Committed revision 2. автоматически загружается при
Index: helloworld.cpp попытке открыть файл-патч. Для
========================================== Любому разработчику, который работает с этим же репозитарием и ясности, программа также показывает
--- helloworld.cpp (revision 1) хотел бы получить файл с учетом ваших изменений, потребуется обно- оригинальный файл с левой стороны,
+++ helloworld.cpp (working copy) вить свою рабочую копию, используя команду svn update. После этого и подсвечивает, в каком именно
@@ -5,6 +5,7 @@ у него будет точно такая же копия дерева исходных текстов, что и у вас. месте он был модифицирован. С
int main(int argc, char *argv[]) $ svn update другой стороны показывается новая
{ U helloworld.cpp версия того же самого файла.
cout << “Hello World!” << endl; Updated to revision 2.
+ cout << «Это дополнение» << endl;

www.linuxformat.ru >>

LXF1(70) СЕНТЯБРЬ 2005  91

учебник Subversion

>> РЕАЛЬНЫЙ ПРИМЕР: ОБНОВЛЯЕМ KOPETE ПРИ ПОМОЩИ SUBVERSION

Kopete – клиент для мгновенного обмена сообщениями, KDE/ как у нас сейчас нет локальной версии, результатом этой
предлагаемый по умолчанию в KDE. Проблема в том, что kdenetwork команды будет загрузка всей директории kopete. Каждый
его часто приходится обновлять. Несколько протоколов файл или директория отражаются в стандартном потоке
обмена сообщениями, используемых Kopete для связи с Вы получите много страниц кода, которые сопровож- вывода по мере их загрузки, обозначенные буквой ‘A’ в
сервером и другими клиентами, разрабатываются путем даются следующими строками: начале строки (‘U’ при обновлении файла и ‘D’ при удале-
инженерного анализа. Это единственный способ предо- Checked out revision 416028. нии). Конечное сообщение всегда содержит номер ревизии,
ставить совместимость с такими протоколами, как AOL которую вы только что загрузили.
или MSN Messenger, которые порой таинственно и без Программа Kopete является частью kdenetwork, а зна-
огласки изменяются. Разработчики Kopete анализируют чит, она может быть найдена в соответствующей директо- В репозитариях программного обеспечения обычно
поток трафика между клиентом и сервером, впоследствии рии. Флаг –N в команде выше используется для скачива- уже содержатся готовые сценарии, необходимые для ком-
выпуская очередные обновления, которые сразу становят- ния отдельного каталога, а не всей ветки KDE со всеми ее пиляции и установки проекта, так что следующим шагом
ся доступными в репозитарии Subversion, а не в виде поддиректориями. В результате загружаются файлы, отно- будет загрузка необходимых скриптов с директории kde-
отдельных пакетов, так как на их организацию и сборку сящиеся только к директории kdenetwork. Следующим common. После этого мы можем вызвать команды для
требуется определенное время. шагом будет получение исходных текстов самой Kopete: компиляции локальной копии программы Kopete:
$ cd kdenetwork $ svn co svn://anonsvn.kde.org/home/kde/trunk/KDE/kde-
Первое, что надо сделать для получения обновления $ svn update kopete common/admin
к Kopete – подключиться к анонимному серверу KDE A kopete $ make -f Makefile.cvs
Subversion, который доступен для всех, кто осмелится ... $ ./configure --prefix=/usr
ввести следующие команды: Updated to revision 416064. $ make
$ svn co -N svn://anonsvn.kde.org/home/kde/trunk/ $ su -c “make install”
Команда svn update загружает любые изменения меж-
ду локальной копией и той, что хранится в репозитарии. Так

ЧАСТЬ 3. ВНОСИМ ИЗМЕНЕНИЯ

РАЗРАБОТЧИК 1 1 ........ 3 ........ ........3 int main(int argc, char *argv[])
........ 2 ........ ........2 {
cout << “Hello World!” << endl;
РАЗРАБОТЧИК 2 1 ........ ........ - cout << “Это дополнение.” << endl;
........ ........ + cout << “Еще одно дополнение” << endl;
return(0);
........1 ........ ........ }
........ ........ ........
Конфликт расположен во второй строке cout, которая была изменена
........ первым разработчиком независимо от второго. Для разрешения пробле-
........ мы следует обновить локальную копию второго разработчика командой
РЕПОЗИТОРИЙ 223 svn update. Чтобы сделать жизнь проще, вы можете просмотреть ком-
ментарии к каждому изменению, используя команду svn log, а также
A БВГ Д копии файлов с расширениями, в которых отражена версия исправления,
например r1, r2, и так далее:
ВРЕМЯ Если два разработчика работают над одним и тем же файлом- $ ls
источником (так обычно и бывает), и второй пытается добавить свои helloworld.cpp helloworld.cpp.r2 Makefile
Как Subversion предотвращает изменения, в то время как первый уже это сделал, Subversion выдаст helloworld.cpp.mine helloworld.cpp.r3 svn-commit.tmp
конфликты в процессе слияния. сообщение о конфликте версий.
[A] У обоих разработчиков (1 $ svn commit Файл helloworld.cpp существует в различных версиях: версия репо-
и 2) есть абсолютно Sending helloworld.cpp зитария и версии с исправлениями, например helloworld.cpp.r2 – пре-
одинаковые версии, такие же svn: Commit failed (details follow): дыдущая версия перед обновлением, а helloworld.cpp.r3 – версия,
как и в репозитарии Subversion svn: Out of date: ‘helloworld.cpp’ in transaction ‘4’ которая в настоящее время хранится в репозитарии. Subversion не позво-
[Б] Разработчик 2 изменяет svn: Your commit message was left in a temporary file: лит вам добавить файл в репозитарий, пока не устранится конфликт
свою локальную копию файла svn: ‘/home/graham/build/svn2/subres/svn-commit.tmp’ версий.
[В] Разработчик 2 фиксирует
свои изменения на сервере, в На этом примере мы видим ошибку, так как файл, который мы пыта- Вы также можете выбрать следующий вариант: скопировать один из
то время как Разработчик 1 лись обновить на сервере, уже был обновлен кем-то еще. Как вы видите, временных файлов поверх helloworld.cpp, что позволит сделать локаль-
редактирует тот же самый Subversion сделал копию комментария, описывающего изменение, так ную версию эквивалентной пре- или пост- обновленной версии (в нашем
исходный файл. что вам, по крайней мере, не придется печатать ваш комментарий снова. случае это файлы helloworld.cpp.r2 и helloworld.cpp.r3). Вы можете
[Г] Разработчик 1 не может Используя команду svn diff, Subversion покажет в каком именно месте использовать команду ‘svn revert’ для того, чтобы вернуть локальную
зафиксировать свою версию в происходит конфликт версии: копию к предыдущей версии, либо же вручную разрешить этот конфликт.
репозитарии по причине $ svn diff
конфликта с версией, которую Index: helloworld.cpp Итак, на нашем примере содержимое файла helloworld.cpp выгля-
только что модифицировал ========================================== дит следующим образом;
Разработчик 2. --- helloworld.cpp (revision 2) #include <iostream>
[Д] Разработчику 1 +++ helloworld.cpp (working copy) using namespace std;
необходимо обновить свою @@ -5,7 +5,7 @@ int main(int argc, char *argv[])
рабочую копию изменениями {
Разработчика 2, перед тем как cout << “Hello World!” << endl;
разрешить конфликт версий и <<<<<<< .mine
зафиксировать свои изменения cout << “Второе дополнение.” << endl;
на сервере. ==========================================
cout << “Первое дополнение.” << endl;

92  LXF1(70) СЕНТЯБРЬ 2005 www.linuxformat.ru

учебник Subversion

>>>>>>> .r3 return(0);
return(0); Следующий шаг - дать Subversion знать, что мы разрешили конф-
}
ликт, используя команду ‘svn resolved’ вместе с самим файлом. Это так-
Символы ‘<’,’>’ и ‘=’ - маркеры, обозначающие конфликт. Текст же должно удалить два временных файла, что приведет вашу рабочую
между символами ‘<’ и ‘=’ представляет собой локальное изменение, копию в состояние, достаточное для фиксации.
которое и послужило причиной для конфликта, потому он помечен как $ svn resolved helloworld.cpp
‘mine’ (мое). В секции после символов ‘=’ показан номер версии, кото- Resolved conflicted state of ‘helloworld.cpp’
рая сейчас доступна в репозитарии (согласно метке, это третья реви- $ svn commit
зия). Нам потребуется отредактировать код, чтобы постараться совмес- Sending helloworld.cpp
тить оба изменения – вероятно, изменив текст на что-то вроде “Оба Transmitting file data .
дополнения”: Committed revision 4.
cout << “Hello World!” << endl; $ svn update
cout << “Оба дополнения.” << endl; At revision 4.

ЧАСТЬ 4. КОНТРОЛЬ НАД ИЗМЕНЕНИЯМИ В ПРОЕКТЕ

Существует много методов получения из репозитария информации о using namespace std;

статусе проекта. Одна из наиболее употребимых команд при возникно- int main(int argc, char *argv[])

вении конфликта – ‘svn log’, которая выводит на экран список коммен- {

тариев к последним изменениям. Например, журнал для файла cout << “Hello World!” << endl;

helloworld.cpp выглядит так: cout << “Это добавление.” << endl;

$ svn log return(0);

--------------------------------------------------------- }

r4 | graham | 2005-05-23 14:49:53 +0100 (Mon, 23 May Выше, мы попросили сервер Subversion показать вторую ревизию

2005) | 2 lines файла helloworld.cpp (состояние перед конфликтом). Используйте

Конфликт решен путем совмещения двух изменений. опцию --revision вместе с командой ‘svn list’ для того, чтобы вывести

--------------------------------------------------------- на экран файлы, содержащиеся в репозитарии для каждой ревизии.

r3 | rebecca | 2005-05-23 12:39:56 +0100 (Mon, 23 May Однако, лучше всего использовать эту опцию вместе с командой ‘svn

2005) | 2 lines diff’ – это позволит вам сравнить две ревизии. Мы могли бы, напри-

Изменился текст во второй строке вывода. мер, увидеть, что именно изменилось в четвертой модификации файла

----------------------------------------------------------- helloworld.cpp по сравнению с первой.

r2 | graham | 2005-05-23 12:19:36 +0100 (Mon, 23 May $ svn diff --revision 1:4 helloworld.cpp

2005) | 2 lines Index: helloworld.cpp через
Добавление второй строки вывода. ======================== месяц
--- helloworld.cpp (revision 1)
Использование комментариев для каждого изменения позволит +++ helloworld.cpp (revision 4)
вам быстро и точно опознать, что могло пойти не так. Вы можете @@ -5,6 +5,7 @@
вычислить, на ком лежит ответственность за неправильную работу про-

граммы, или к кому вам следует обратиться для решения возникшей int main(int argc, char *argv[]) Теперь, разобравшись с серверным и
проблемы. Каждая запись в журнале начинается с номера изменения, { клиентским вопросами, посвятим

затем следует имя разработчика, время внесения изменений и коммен- cout << “Hello World!” << endl; последнее занятие таинственной

тарий к ним. + cout << “Оба модифицированных дополнения.” << endl; территории тегов и ветвей

Еще одна команда, которая будет вам полезна при разрешении кон- return(0);

фликтов – ‘svn cat’. Подобно двойнику из командной строки – команде }

‘cat’, которая выводит содержимое файла, ‘svn cat’ отображает содержи- И так, различие между первой и четвертой ревизиями файла

мое файла, который на данный момент используется на сервере helloworld.cpp – это строка “Оба дополнения”, добавленная в преды-

Subversion, чтобы вы могли проверить все отличия между этим файлом и дущем этапе данного руководства. Так как вывод команды ‘svn diff’

вашей локальной копией. Самое интересное, что вы также можете явно такой же, как и у команды ‘diff’, первая могла бы быть использована

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

$ svn cat --revision 2 helloworld.cpp наподобие Kompare из KDE – для графического сравнения различий

#include <iostream> между двумя модификациями файлов:

$ svn diff --revision 1:4 helloworld.

Работа с патчами cpp | kompare -o -
Теперь вы должны чувство-

Патч (patch) - это список изменений между двумя версия- другому файлу. Вы можете с легкостью создать файл- вать себя вполне уверено в работе
ми одного проекта, который бывает полезен по двум при- патч, используя Subversion, направив выходной поток от над проектом, находящимся под
чинам: во-первых, он позволяет работать над проектом, команды svn diff в файл: управлением Subversion. Проект
когда у вас нет прав на его запись; во-вторых, с помощью $ svn diff > имя_файла-патча KDE, например, недавно перешел

патча можно дать протестировать проект с вашими изме- Теперь вы можете послать результат работы этой с CVS на Subversion. Теперь мож-

нениями без их внесения в основную ветвь разработки. команды в виде файла-патча какому-нибудь разработчи- но смело загружать исходные тек-
По сути, патч не представляет из себя что-то действи- ку, которому требуются ваши изменения, либо просто сты KDE и смотреть что к чему -
тому, кто хочет их протестировать. Разработчик в дальней- это поможет вам без труда войти в
тельно сложное – это всего лишь обычный вывод коман- шем может применить ваши изменения к его локальной цикл его развития. LXF
ды diff, которая сравнивает два различных файла. версии, используя команду patch, находясь в том же ката-
Интересной представляется программа под названием

patch, изначально написана Ларри Уоллом (Larry “Perl” логе, где был создан патч:

Wall), которая применяет изменения из файла-патча к $ patch –p0 < имя_файла-патча

www.linuxformat.ru LXF1(70) СЕНТЯБРЬ 2005  93

учебник PHP

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

PHP Загадка Монти Холла НА ДИСКЕ

У вас возникли сложности с загадкой из последнего выпуска LXF? Пол Хадсон (Paul Hudson) покажет вам, как
решать такие задачи методом грубой силы, с помощью разума и команды тренированных коз.

месяц Все, кто когда-либо изучал высшую математику, за редким ином виде эта ситуация повторялась каждый раз. Сама загадка звучит
Назад исключением, относятся к числам с большим уважением. так: вы участвуете в игре, и ведущий предлагает вам выбрать одну из
Посмотрите, с какой нежностью мы даём названия отде- трёх дверей. За одной из них дорогая машина, главный приз! За дру-
Прошлый месяц был целиком льным классам чисел, выражая своё восхищение их магией! гими двумя дверями находятся козы. После того, как вы выбрали
посвящен curses – сложной, но Гармонические числа, совершенные числа, полусовершенные числа, дверь случайным образом, ведущий (который, конечно, знает, за какой
полезной графической библиотеке. гиперсовершенные числа, дружественные числа, и даже, верите или дверью приз) открывает одну из оставшихся дверей, за который обна-
нет, сверхъестественные числа. Мы любим их за предсказуемость, руживается коза. Затем он предлагает вам или остаться у прежней две-
неизменность и точность. Это даёт уверенность в их логичности, поз- ри, или изменить свой выбор и указать на другую, оставшуюся закры-
воляет стоить сложные доказательства и делать с ними почти всё что той. Итак, вы смените дверь или останетесь на месте?
угодно, кроме оплаты счёта в ресторане.
В те редкие моменты, когда я рискую выглядывать во внешний Правильный ответ, конечно же, сменить дверь, так как за второй
мир, я замечаю что несведущие в математике люди не имеют той люб- дверью шанс получить машину гораздо выше. В этом выпуске мы
ви и уважения к числам, которые испытывают остальные. Числа пугают напишем программу на PHP, которая доказывает правильность этого
их, а как известно страх приводит к злости, злость к ненависти, а нена- решения загадки Монти Холла. После чего я добавлю несколько
висть – к страданиям. Как они ошибаются! Но мы можем посочувство- настроек, чтобы чуть-чуть увеличить сложность нашего примера.
вать их иррациональному ужасу, ведь мы тоже можем вспомнить как в
начале своего романа с числами были потрясены их невероятной Ломаем голову
силой или или смущены их экзотической притягательностью.
Возьмём, к примеру, загадку Монти Холла. Этот относительно Перед тем, как писать какой-либо код, важно понять почему загадка
простой вопрос приводит многих людей в ужас до тех пор, пока они не Монти Холла причиняет людям такие страдания. Для начала опреде-
примут магию чисел. Загадка носит имя Монти Холла (Monty Hall), лим несколько моментов, чтобы не ввести никого в заблуждение.
ведущего старого американского игрового шоу под названием Победой мы будем называть выбор двери, за которой находится маши-
«Давайте заключим сделку» (Let’s make a Deal), в котором в том или на. Поражение – выбор двери с козой. Двери будем различать по
номерам: 1, 2 и 3. Ведущий – это ведущий игрового шоу, а игрок – это
«Этот относительно простой участник игры. Уф! Теперь можно приступить к анализу проблемы. В
вопрос приводит многих в ужас» игре вы должны вначале выбрать дверь, и поскольку дверей три и воз-
можность мошенничества мы не рассматриваем, вероятность угадать с
первого раза равна одной трети.

Предположим, вы выбрали дверь номер 1. Существует один шанс
из трёх (то есть 1/3), что за этой дверью находится приз. Ведущий точ-
но знает, где машина, и он открывает дверь номер 2, чтобы показать
козу. При этом двери номер 1 и номер 3 остаются закрытыми. И вот тут
большинство людей совершает ошибку, так как они думают, что шансы

9 4   LXF1(70) сентябрь 2005 www.linuxformat.co.uk

учебник PHP

найти машину за 1 и 3 дверями равные. «В конце концов, - объясняют Если, не
они,-есть две двери на выбор, мошенничество мы не учитываем, зна- сменив дверь, я получу
чит мы можем следовать первому закону теории вероятностей, так как 2 из 3 шансов выиграть козу –
это та же самая задачка, какая была при трёх закрытых дверях». то я так и сделаю. Ведь мне

Кончено, это колоссальная ошибка. Первый закон теории вероят- нужна коза!
ностей тут вам не поможет. Вместо него необходимо воспользоваться
правилами для ситуации, в которой уже что-то случилось, выражением 1-3 - это двери,
для условной вероятности. Если вы выбрали первую дверь, то вероят- A-C - это возможности
ность найти за ней приз равняется 1/3. Однако точно так же можно ска-
зать, что вероятность обнаружения машины за одной из оставшихся >>
дверей равна 2/3.

Итак, теперь когда ведущий открывает одну из оставшихся дверей
(в нашем примере он открыл дверь номер 2), вероятность найти маши-
ну за одной из оставшихся дверей по прежнему равна 2/3, однако вы
теперь точно знаете, за которой из этих дверей находится коза! А это
значит, что теперь вероятность найти машину за дверью номер 3 равна
2/3, тогда как у 1 двери остались прежние шансы 1/3. Итак, измените
вы свой выбор или будете стоять на своём? Конечно, измените!

Диаграмма в правом нижнем углу наглядно демонстрирует ситуа-
цию. Если вы выбрали третью дверь, существует три различных вари-
анта развития событий. В случае A дверь номер 3 содержит козу, и
ведущий откроет дверь номер два. Если мы останемся с дверью номер
3, то проиграем, а изменение выбора (на дверь номер 1) сулит выиг-
рыш. В случае B за третьей дверью снова коза, а ведущий откроет
дверь номер 1. Значит, останутся закрытыми третья дверь (наш выбор)
и дверь номер 2. Если мы останемся с дверью номер 3, то проиграем,
а победа нам достанется при изменении решения. Итак, и в случаях A
и B для победы нам нужно изменить своё решение, в случае C при
изменении своего выбора мы проиграем. Таким образом, вероятность
выигрыша в случае изменения решения равна 2/3, тогда как настойчи-
вость сулит победу только в 1/3 ситуаций.

Ломаем код 123

Для того, чтобы эмпирически доказать наш вывод, можно написать A
небольшую программку, которая будет открывать двери тысячи и тыся-
чи раз, менять или не менять изначальное решение и говорить, что B
получилось в итоге. Нам потребуется PHP-скрипт, который восприни-
мает указания пользователя (изменять решение или нет, сколько раз C
проводить проверку), запускает вычисления и выводит результат.
?>>Нет</option></select></p>
В терминах программирования нам потребуются три функции: <p><input type=”submit” value=”Докажите!” /></p>
Функция для запуска загадки Монти Холла, нечто для анализа полу- </form>
ченных от пользователя данных, многократного запуска функции, а
затем - печати результатов и небольшой HTML-код, позволяющий ука- Ну да, я немножко слукавил, это чуть больше чем просто HTML.
зать, какой тест нужно запустить. Всего у нас получится порядка сотни
строк кода, но мы будем писать его по частям и начнём с самого лёгко-
го – с HTML.
<form method=”post”>
<p>Число итераций: <select name=”iterations”>
<?php

/// Сгенерируем все варианты автоматически
for ($i = 50; $i <= 10000; $i += 50) {
if (isset($_POST[“iterations”]) && ($_POST[“iterations”] == $i)) {

print “<option value=\”$i\” selected>$i</option>”;
} else {

print “<option value=\”$i\”>$i</option>”;
}
}
?>
</select></p>
<!--Тут мы выберем “Нет”, если давали этот ответ раньше-->
<p>Нужно ли изменять выбранную дверь?
<select name=”DoSwitch”>
<option value=”Yes”>Да</option>
<option value=”No” <?php
if (isset($_POST[“DoSwitch”]) && ($_POST[“DoSwitch”] == “No”))
print “selected”;

www.linuxformat.ru LXF1(70) сентябрь 2005  9 5

учебник PHP

>> дого запуска функции мы, в зависимости от возвращаемого ею резуль-
Однако, это в самом деле самая лёгкая часть программы. Я написал тата, увеличиваем соответствующий счётчик. Вы всё еще со мной?
два комментария, чтобы показать что происходит, но это всё очень
просто: только вывод формы, с помощью которой пользователь может Пора приступать к серьёзному коду – к функции MontyHall(). Как
указать, как много раз мы должны решить загадку Монти Холла и дол- вы уже видели, она принимает параметр, указывающий, будет ли игрок
жен ли игрок изменять свой выбор. изменять выбор двери, но это простая часть. А вот остальное:
Двигаемся дальше. Нам надо обработать данные, полученные из
формы, которую мы только что написали, и запустить игру нужное чис- function MontyHall($DoSwitch) {
ло раз: /// Создадим массив дверей и перемешаем в случайном порядке
if (isset($_POST[“DoSwitch”])) { $doors = array(1=>”Goat”, 2=>”Goat”, 3=>”Car”);
/// запускаем этот код, только если форма была заполнена shuffle($doors);
$wins = 0; /// выберем дверь и удалим её из массива
$losses = 0; $our_choice = array_rand($doors);
/// Многократный вызов функции $our_door = $doors[$our_choice];
/// Она возвращает “Win” (победа) или “Lose” (поражение) unset($doors[$our_choice]);
for ($i = 0; $i < $_POST[“iterations”]; ++$i) { /// а теперь “откроем” дверь
$result = MontyHall($_POST[“DoSwitch”]); /// Берём первую из оставшихся дверей и проверяем, там ли коза
/// Сохраняем результат if (reset($doors) == “Goat”) {
if ($result == “Win”) { // Первая же дверь из оставшихся содержит козу,
++$wins; // удалим её из списка доступных!
} else { // получаем ключ текущей позиции
++$losses; $cur_key = key($doors);
} unset($doors[$cur_key]);
} } else { // первая дверь не содержит козу, так что удалим вторую
/// Печать результатов next($doors);
print “<h1>Потрясающее устройство для экспериментального $cur_key = key($doors);
решения загадки Монти Холла</h1>”; unset($doors[$cur_key]);
print “<p>Число итераций: {$_POST[“iterations”]}</p>”; }
print “<p>Игрок изменял выбор?: {$_POST[“DoSwitch”]}</p>”;
print “<p>Число побед: $wins</p>”; /// Должен ли игрок изменить выбор?
print “<p>Число поражений: $losses</p>”; if ($DoSwitch == “Yes”) {
} /// Да, должен. Есть ли машина за оставшейся дверью?
Снова довольно простой код. Если форма была отправлена, то if (reset($doors) == “Car”) {
инициализируем счётчики нулями и выполняем функцию MontyHall()
много раз (указывая ей, должен ли игрок сменить дверь). После каж- // Да - мы выиграли!
return “Win”;
всем, кто решает задачи Sudoku } else {
// коза :(
В прошлом месяце мы объявили конкурс по написанию написать программу, которая использует прямой перебор return “Lose”;
программ для решения задач Sudoku. К сожалению, никто вариантов, но гораздо интереснее приобрести опыт в }
из команды LXF не может в нём участвовать (в конце кон- работе с алгоритмами, имитирующими человеческое } else {
цов, мы же являемся судьями!). Но я по крайней мере поведение. // игрок не должен изменять решение
могу дать вам несколько подсказок. • Только получив сценарий, способный решать задачи if ($our_door == “Car”) {
• Создайте графический интерфейс (GUI) для своего «человеческим» способом, вы можете перейти к генера- // мы с первого раза выбрали верную дверь
приложения. Ничего страшного, на PHP можно запросто ции новых паззлов. Это важно, так как вы должны суметь return “Win”;
реализовывать GUI при помощи библиотеки GTK. Если у а) пропустить новые задачки через вашу программу, чтобы } else {
вас нет полного набора прошлых выпусков журнала, зна- убедиться, что они имеют решение б) определить слож- // опять коза! :(
чит вы пропустили 8-страничное руководство по созданию ность. Решая задачу подобно реальному человеку, ваш return “Lose”;
GTK-приложений на PHP, опубликованное в LXF40. Мы скрипт может подсчитать число шагов, которые ему потре- }
любим людей, поэтому мы поместили PDF с этим руко- бовались – чем больше шагов, тем сложнее. }
водством на диск этого номера, так что вы можете поду- • Используйте Glade, и вы сможете создавать гораздо }
чить его. более красивые интерфейсы. И снова я написал очень подробные комментарии и даже исполь-
• Не придумывайте сложный формат файлов. Если вы зовал понятные имена переменных, так что вам нет прощения, если вы
используете PHP 5, то гораздо лучше воспользоваться Думаю, на первое время подсказок достаточно. этого не поймёте! Единственная вещь, которая может остаться неясной –
XML, читая и сохраняя его при помощи SimpleXML. Использование PHP даёт вам огромное преимущество это работа с массивом $doors. В коде используются вызовы не слиш-
• Думайте, как человек решал бы эту задачу. Люди в перед программистами на других языках, так как лучший ком часто используемых функций reset(), next() и keys(). Первая из них
первую очередь ищут очевидные ответы, затем проверяют способ выиграть приз – это больше времени проводить за устанавливает внутренний указатель массива (определяющий, какая
пары, отмечая возможные варианты на черновике, потом придумыванием алгоритма решения, а не за собственно позиция является текущей) на первый элемент и возвращает его значе-
пробуют завершать колонки и строки и т.д. Любой может программированием. Удачи! Если вы победите, не забудь- ние. Так что строка if (reset($doors) == “Goat”) значит перейти к
те поделиться со мной выигрышем.

«Чтобы на практике показать, как работает Монти
Холл, можно написать скрипт, который будет
открывать двери тысячи и тысячи раз.»

9 6   LXF1(70) сентябрь 2005 www.linuxformat.ru

учебник PHP

Домашнее задание

Настало время отделить коз от овец. Если для вас уже довольно выигрышей или проигрышей на основе полученных данных. Для победу при смене двери, равный 99/100. Наш скрипт не может
программирования, идите и наслаждайтесь расцветом чисел со простых значений это просто сделать в уме. Например, если вы обработать эту ситуацию, но вы можете расширить интерфейс
своими друзьями. Но если вы настоящий программист, то вы сделали 1000 тестовых запусков, то вы с первого взгляда пользователя еще одним элементом, позволяющим задать число
можете подумать о том, как улучшить этот скрипт. распознаете ситуацию. Но сли у вас было 19350 тестов, то дверей, передавать затем это значение в функцию MontyHall() и
результат уже не настолько очевиден. создавать в функции массив из множества коз и одной машины в
Существует как минимум три изменения, которые вы можете конце.
попробовать, чтобы накачать свои программистские мускулы: Подсчитайте число побед и поражений в процентном соотно-
• Облегчить... заставьте скрипт n раз запускать тест со сменой шении и выведите полученные значения. • Добить! Представьте себе, что ведущий шоу не знает, где
двери и еще n раз – сохраняя изначальный выбор, для того чтобы • Расширить... Загадку Монти Холла можно обобщить. находится машина. Что случится тогда с вашими шансами на
избавить пользователя от необходимости переключать кнопки. Теоретически, мы можем рассмотреть сотню дверей, с 99 козами победу и почему? Я жду ваших ответов на открытках, как обычно.
Результаты надо показать в разных частях экрана. и 1 машиной – и ведущий должен будет открыть 98 дверей после
• Схитрить... Наш скрипт даже не пытается подсчитать проценты того, как мы выберем одну. В этой ситуации мы получим шанс на

первому элементу массива $doors, получить его значение, и если оно к началу программы. Без такого вызова PHP может не озаботиться
равно “Goat”(коза), то условие истинно. Затем мы используем функцию генерацией достаточно случайных чисел, и получаемые результаты
key(), которая возвращает ключевое значение для текущего элемента будут повторяться из раза в раз.
массива (т.е. для первого, так как мы вызвали reset()). После чего
полученное значение мы используем для удаления этого элемента из Всё, что нам осталось – это скопировать полученный скрипт из
массива. Это выглядит как странный трюк, но помните, у нас нет друго- вашего домашнего каталога в /var/www/html (этот путь может менять-
го способа узнать индекс первого элемента, так как мы по сути не зна- ся в зависимости от дистрибутива) и вызвать его через web-браузер.
ем, который элемент подлежит удалению. Если значение первого эле- Можете сравнить ваш скрипт с моим, хотя бы для того, чтобы убедить-
мента не равно “Goat”, то мы удалим второй, перейдя к нему с помо- ся, что вы соединили кусочки в правильном порядке.
щью функции next() (она просто перемещает указатель массива на
одну позицию вперёд). Вот и всё на этот месяц. Я надеюсь, что вы узнали кое-что о числах
и вероятности, кое-что о функциях PHP для работы с массивами и
Начало и конец многое о том, как можно использовать PHP для тестирования всех воз-
можностей и поиска верного решения задачи. Более того, в процессе
Итак, у нас осталась одна дверь в переменной $our_door и одна дверь поиска решения ни одна коза не пострадала. Изумительно.
в массиве $doors. Финальный вопрос – стоит ли игроку изменить
свой выбор. Конечно, мы получили ответ на него в качестве аргумента Многие люди не согласны с решением о выгоде изменения своего
функции, так что мы просто проверяем его и действуем соответствую- выбора после того, как ведущий показал первую козу. Конечно, они
щим образом. Если мы должны переменить дверь, то мы возвращаем ошибаются и достойны публичного осмеяния. Но если этим непросве-
«Win», когда в последнем элементе $doors содержится слово «Car» щенным человеком является кто-то из ваших близких, то гораздо луч-
(машина), в противном случае возвращаем «Lose». Если же игрок дол- ше было бы показать ему, где он ошибается, и привить немного любви
жен стоять на своём, то «Win» или «Lose» определяется содержимым к числам. Итак, используйте этот скрипт, чтобы показать как работает
переменной $our_door («Car» или «Goat» соответственно). Просто. загадка Монти Холла, и подбросьте им «Флатландию» Эббота (Abbott,
«Flatland»), чтобы они поняли, чего они лишены. LXF
Чего мы с вами еще не сделали? Необходимо добавить в наш сце-
нарий начало и конец HTML-файла, чтобы он выглядел приятнее, и,
что более важно, надо включить вызов функции srand() где-то ближе

DOOR 2

Машина ваша, если вы её отыщете! через
Итак, вы меняете свой выбор? месяц

В следующем месяце я собираюсь
помаленьку продолжать подсказывать

вам решение задачи Sudoku,
рассмотрев работу с XML-

файлами.

ответы

Вопрос? Ответ!

Если вы завязли в какой-то проблеме и ничего не помогает, почему бы не написать нам?
Наши постоянные эксперты разрешат даже самые сложные из ваших проблем.

Наши эксперты ВМагия пасует DSL-модемы трудно заставить работать, но со вспомогательными утилитами,
Не так давно я установил Fedora такими как предлагаемые для BT Voyager, можно избежать большинства проблем.
Наши эксперты найдут ответ, Core 3 на свой ноутбук Dell 510M в
независимо от того, в чем состоит ваш режиме двойной загрузки с ОПоскольку вы используете разделы, файлы и сможете обновлять или переуста-
вопрос. Если у вас проблемы с Windows XP и это привело к про- а не тома, изменить их размер, не навливать ОС, не рискуя потерять важную
установкой, настройкой модема, сетью блемам. Один из разделов Linux (/) практи- трогая данные будет весьма информацию.
или еще чем-нибудь – просто чески полон, тогда как другой (/home1) почти непросто. Правильным решением
напишите нам и мы позаботимся обо пуст. будет произвести резервное копирование Если QtParted не работает, вы можете
всем остальном данных перед изменением таблицы разделов попробовать урезать файловую систему ext2
Перед установкой FC 3 я изменил размер или даже перенести все необходимое на вто- или ext3 с помощью утилиты resize2fs, а
Дэвид Коулсон, член раздела XP при помощи Partition Magic 8.0, рой диск (или на раздел Windows, если он не затем изменить структуру разделов. К сожа-
команды LFX Answers но когда я попробовал использовать эту про- использует NTFS), а затем начать все сначала лению, сказать наверняка, что у вас получит-
– гуру в настройке грамму для изменения размера раздела и переустановить Linux. ся корректно разместить раздел в данном
сети и вопросах Linux (на другой машине), она привела его в случае, нельзя.
безопасности, с бога- непригодное состояние (система не загружа- Я бы порекомендовал создать отдельный
тым опытом систем- лась и мне пришлось переустанавливать все раздел /home, в добавление к обязательному Чтобы установить размер файловой сис-
ного администрирования с нуля), так что у меня нет особого желания корневому (/) и разделу подкачки еще во темы на /dev/hda1 равным 512 Мб, следует
применять PM еще раз. время первой установки Linux. Таким обра- подать следующую команду (выполняется от
Ник Вейтч – редак- зом, вы разграничите данные и системные имени root):
тор этого журнала, и Я установил на своем ноутбуке QtParted, resize2fs /dev/hda1 512M
он с радостью отве- но он не позволяет работать с подмонтиро-
тит на ваши простые ванными разделами. Я могу прочитать пара- Не забывайте отмонтировать раздел
вопросы. Ведь он метры, но не изменить их. Каким образом перед любыми изменениями, затрагиваю-
знает все: GRUB, можно переместить неиспользуемое про- щими структуру файловой системы. Д.К.
LILO, netatalk, vi,... странство с раздела /home1 в /, не уничтожая
инсталляцию Linux и не рискуя потерять дан-
Ганс Хаберленд – ные? Я потратил много времени, устанавли-
Linux-эксперт из вая и конфигурируя все, что нужно, и я нис-
компании Rackspace колько не хочу начинать все с начала.
Managed Hosting. Он
работает системным Винсент Борро
администратором и
рад помочь вашей беде.

Присылайте свои письма по адресу:
[email protected]

ВЛовушка для radeon
Я столкнулся с проблемой при
использовании дистрибутива
Linspire 5.0 Live. Я могу запустить
Live CD, но когда я пытаюсь начать
установку, введя команду startx в момент,
когда появляется курсор и экран становится
серым – все застывает. Я не знаю, что

делать, чтобы заставить его работать. Буду
благодарен за любую помощь. Вот кон-
фигурация моего компьютера:

ответы

Pentium 4 3.00 GHz Knoppix tar -jxvf eciadsl-usermode-0.10-nortek-alpha. Теперь необходимо сконфигурировать
512MB DDR2 RAM из №63 может не распознать ADSL- tar.bz2 драйвер с помощью настроек, предоставлен-
Жесткий диск 200GB ATA модем Voyager cd eciadsl-usermode-0.10-nortek-alpha ных вам BT. VPI равняется 0, VCI – 38, а
Материнская плата ABIT ./configure пароль может быть любым. Когда вам будет
AA8 DuraMAX ВОтправляемся в вояж make install предложено выбрать модем, введите 10 и
Видеокарта ATI PCIE Radeon vGuru Я попробовал Knoppix Live CD с make cfg укажите GS7470 в качестве чипсета.
series RX600 обложки вашего журнала [LXF63] и cp GS7470_SynchFiles/gs7470_synch01*.bin
он определил практически все обо- /etc/eciadsl >>В качестве файла синхронизации используй-
Linspire предоставляет голосовое руко- рудование, кроме ADSL-модема –
водство о том, как работать в Linux – но не о на мой взгляд, самого полезного устройства те gs7470_synch01.bin. В архиве содержится
том, как установить его! на милю вокруг.

ОPJ Я использую модем BT Voyager 100 USB
Похоже, что Linspire не нравится ADSL Modem, который достался мне, когда я
ваша видеокарта. Возможно, она впервые подключался к AOL. Я использую
некорректно распознается или не его и с моим текущим провайдером, Central
поддерживается вовсе. Point. Я не имею понятия, куда идти за драй-
Поскольку вы используете высококлас- верами к модему и как их устанавливать.
сный и достаточно новый чипсет Radeon,
существует вероятность того, что Linspire Те драйвера, что у меня уже есть, запус-
даже не подозревает о его существовании. каются из диалога для ввода пароля. Linux-
Свежие драйвера видеокарт для X появляют- драйвера будут вести себя так же? Я бы хотел
ся сравнительно регулярно, но некоторые настроить этот модем в Fedora Core или SUSE.
дистрибутивы отстают на несколько ревизий,
а другие обновляются не так часто. ОДжеймс
Voyager 100 – популярный модем,
Вы можете попробовать другой дистри- однако, он не поддерживается во
бутив Linux, например SUSE (для которого многих дистрибутивах Linux,
ваша карта помечена как полностью подде- Впрочем, вы можете загрузить
рживаемая в версиях 9.2 и 9.3), Fedora или драйвера, которые будут работать с боль-
Mandriva, просто чтобы проверить, как они шинством систем.
обходятся с вашим видеоадапетром. Эти
дистрибутивы, как правило, обновляются Я рекомендую вам посетить страницу
чаще Linspire. Кроме того, они обладают луч- http://eciadsl.flashtux.org/download.
шей поддержкой со стороны сообщества и php?lang=en и прокрутить ее вниз до секции
раньше подхватывают различные новшества. EciAdsl Nortek. Загрузите файл .bz2 и пере-
загрузитесь в Linux. Скопируйте файл .bz2
Для Linspire также выпускаются обновле- куда-нибудь в каталог /usr/src и введите
ния, однако, если вы не можете запустить следующие команды в ответ на приглашение
графическую среду, ими будет тяжело вос- оболочки:
пользоваться. Д.К.

краткая справка: SSH

В течении многих лет администраторы системы никогда не вводится на компьютере- любой Сервис sshd – надежный и безопасный
использовали для доступа к своим системам клиенте. Это позволяет повысить безопасность в системы, способ для обеспечения удаленного
старый добрый Telnet или даже rsh. По мере случаях, когда пароли могут оказаться которая может доступа к Unix-системам через сети
роста важности Интернет-безопасности в глазах скомпрометированными, т.к. авторизация по прийти вам в общего пользования.
индивидуальных пользователей и корпораций, паролю может быть полностью заблокирована, голову, в том
стало недопустимым??? использовать что вынудит всех клиентов использовать ключи. числе,
платформы и протоколы, применяющие мобильных
аутентификацию по открытому тексту. В rsh, как Через SSH-соединение можно передавать устройств и
и в Telnet, обмен данными между клиентом и другие TCP-сессии, шифруя всю проходящую по Windows.
сервером происходит без какого-либо ним информацию – по сути, создать
шифрования и верификации, так что атаки с защищенный прокси-сервер. В ситуации, когда Стандартная
использованием промежуточной системы, почтовый сервер недоступен или все, что вы реализация SSH
собирающей данные и подменяющей их можете – это установить исходящее SSH- для Unix носит
нужными злоумышленнику, становятся реальной соединение, передача TCP-сессии с SSH- имя OpenSSH и входит практически в любой
проблемой. сервера или изнутри сети, где он расположен, дистрибутив Linux. В мире Windows особенно
может помочь в решении проблем с локальными популярна утилита PuTTY, поддерживающая все
Протокол SSH является прекрасной брандмауэрами или неправильными возможности OpenSSH, включая переадресацию
альтернативой, поскольку он применяет настройками. Все, что вы посылаете через SSH, TCP-портов и авторизацию по ключу.
шифрование как на стадии аутентификации, так адресуется на TCP-порт в локальной системе,
и в ходе всей терминальной сессии. SSH также что позволяет обойтись без существенных
может аутентифицировать пользователей не по изменений в конфигурации клиента.
паролям, а по ключам, так что пароль удаленной
Клиенты SSH доступны практически для

www.linuxformat.ru LXF1(70) сЕНТЯБРЬ 2005  99

ответы

Frequently asked questions: ЯДРО

FAQ Как узнать, какая версия ядра FAQ Должен ли я использовать cd linux
используется в моей системе? ядро, поставляемое в комп- make mrproper xconfig dep clean bzlilo
modules modules_install
Большая часть современных дистрибутивов лекте с моим дистрибутивом или же
В первую очередь, необходимо
построена на ядре 2.6, хотя некоторые все могу собрать свое собственное? настроить ядро. Конфигурация по умол-
чанию, в принципе, работоспособна, но
еще используют 2.4. Вы можете узнать вер- Ответ на этот вопрос лучше всего пояснить на вам, вероятно, потребуется выбрать неко-
торые опции, для ваших устройств, таких
сию ядра, работающего в вашей системе, с примере. Red Hat распространяет ядра, на как звуковые карты или интерфейсы SCSI.
Сохраняя резервную копию старой версии
помощью команды uname. Введите: которые наложено множество исправлений, и ядра доступной для загрузки через LILO, вы
можете без опаски экспериментировать с
$ uname –a некоторые из предлагаемых ими утилит не настройками, чтобы найти те, что обеспечи-
вают необходимые возможности системы.
Вы увидите строки, напоминающие будут работать с ядрами, не содержащими
Вызов bzlilo собирает ядро и копирует
приведенные ниже: данных изменений. Аналогично, исправления его в /vmlinuz. Чтобы установить новое ядро,
выполните команду lilo. Необходимо также
Linux cr2 2.6.11.6 #1 SMP Mon сторонних разработчиков могут войти в кон- указать LILO использовать образ /vmlinuz
вместо /boot/vmlinuz. При необходимости
Mar 28 18:48:32 BST 2005 i686 GNU/Linux фликт с исходными текстами ядра Red Hat, можно также скорректировать файлы
Makefile ядра таким образом, чтобы образ
Данная система работает с ядром поскольку они подразумевают наличие немо- устанавливался сразу же в каталог /boot.

2.6.11.6, шестой ревизией версии 2.6.11. дифицированного ядра. Последние два параметра команды
make в приведенном выше примере созда-
Создатели вашего дистрибутива могли вне- В случае, если вам не нужны специфи- ют подгружаемые модули и размещают их в отсутствующие в стандартной версии. Один
соответствующем месте. из основных проектов, распространяющих
сти в ядро свои изменения, так что его ческие возможности ядра, отсутствующие в пакеты патчей к ядру – это WOLK (Working
После сборки ядра с поддержкой под- Overloaded Linux Kernel). Вместо того, чтобы
номер может не соответствовать простейшей редакции Red Hat, лучше использовать ядра гружаемых модулей, вы в любой момент накладывать исправления по одному, вы
можете изменить его конфигурацию, просто можете загрузить с WOLK (http://sf.net/
схеме «2.6.x.y». из состава вашего дистрибутива. Конечно, установив новый модуль. projects/wolk) и применить к своему ядру
один-единственный патч, объединяющий в
Откуда я могу загрузить ядро, если вам не требуются никакие исправления, себе множество более мелких исправлений.
и что получу в конечном
FAQ включенные в ядро разработчиками дист- Алан Кокс (Alan Cox) поддерживает
линейку ядер, известную как -ac. Эти ядра
итоге? рибутива, чистое ядро (также называемое содержат некоторые функции, которые
еще не включены в основную версию ядра
«vanilla kernel») должно прекрасно работать. Linux, а также базовые исправления для
ошибок, обнаруженных в стандартном
Вы можете загрузить tar-архив последней Я получил tar-файл с моим ядре. Многие люди используют ядра -ac
ядром. Как мне вместо официальных, однако, как и
версии ядра с сайта Linux Kernel Archives, FAQ в случае с ядрам, подготовленными
разработчиками дистрибутивов,
расположенного по адресу www.kernel.org. скомпилировать его? наложение некоторых патчей на ядра
серии -ac может привести к конфликту.
Скорее всего, вы захотите загрузить файл

linux-2.6.11.6.tar.gz или аналогичный из Сборка ядра обычно производится в ката-

каталога linux/pub/linux/kernel. В нем логе /usr/src/linux, поэтому перейдите в

содержатся все исходные тексты ядра Linux /usr/src и распакуйте ядро командой

соответствующей версии. Если в вашей сис- tar xzf ~/linux-2.6.11.6.tar.gz

теме уже установлено дерево исходных тек- После этого в каталоге linux будет Могу ли я добавить в ядро
новые возможности?
стов ядра Linux, вы можете загрузить изме- содержаться исходный код ядра, предна- FAQ

нения (patch) между ним и следующей значенного для компиляции.

ревизией. Это избавит вас от необходимос- Стандартная последовательность Для ядра Linux имеется множество патчей,

ти загружать все дерево исходных текстов. настройки, сборки и установки ядра такова: которые добавляют в него возможности,

>> дополнительная информация на тот случай, ить Apache из Linux на доступ к Windows- Настройка Apache может быть сложна для начинающих, но хорошо прокомментированный
разделу и что конкретно я должен написать в файл httpd.conf – прекрасная отправная точка.
если у вас возникнут проблемы, однако, при- конфигурационном файле httpd.conf.
веденных здесь сведений должно вполне используются пробелы, а в Linux, кроме Файл httpd.conf расположен в каталоге
хватить для того, чтобы все работало. Д.К. Я обратил внимание, что httpd.conf для того, чувствителен к регистру символов. /etc/apache. В случае с Linux он, как правило,
Linux гораздо короче, чем для Windows, и Таким образом, ваши существующие web- хорошо прокомментирован, так что вы смо-
ВПриручаем Apache поэтому я не могу решить, как лучше вносить сайты могут не работать в Linux в точности, жете легко выставить нужные параметры, не
Я новичок в Linux и в настоящий изменения в данный файл. Редактирование как в Windows. особенно заботясь о том, что они делают. Д.К.
момент тестирую дистрибутив файлов с символом перевода строки в стиле
Mandriva, собираясь перейти на Linux из Windows – не проблема, у меня есть
него с Windows. В моей инсталля- программа, которая читает и пишет текстовые
ции Windows установлены Apache, PHP и файлы как в формате Windows, так и в фор-
MySQL – я использую их для локального тес- мате Linux.
тирования web-сайтов перед публикацией он-
лайн. Все работает прекрасно. В Linux, Apache ОC форумов LXF
стартует автоматически (я заметил это в пре- Вы можете отредактировать кон-
дыдущей инсталляции Mandrake). Я также фигурационный файл httpd.conf
установил PHP и MySQL. и изменить параметр
DocumentRoot так, чтоб он ука-
До сих пор все было хорошо. Проблема зывал на ваш web-каталог, находящийся на
состоит в том, что все мои данные располо- смонтированном разделе FAT32. Чтобы
жены на диске FAT32 / Windows и я не хочу узнать, в какую точку смонтирована эта
переносить их на раздел Linux, поскольку файловая система, используйте команду
тогда я потеряю возможность работать с ними mount. Имейте в виду, что Apache не осо-
из Windows. Я хочу узнать, можно ли настро- бенно любит файлы, в именах которых

100  LXF1(70) сЕНТЯБРЬ 2005 www.linuxformat.ru


Click to View FlipBook Version