tag:blogger.com,1999:blog-29863071056222755262024-03-13T23:43:43.500+03:00Вся правда о пингвинах!strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.comBlogger47125tag:blogger.com,1999:blog-2986307105622275526.post-20115917497060645832011-08-29T16:33:00.002+04:002011-08-30T09:18:24.411+04:00Mandriva/ROSA 2011 - что можно сделать после установки<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div style="margin-bottom: 0cm;"><i>Решил вкратце собрать тут ту инфу, что смог собрать, пользуясь свежей Mandriva (которая сегодня зарелизилась) уже месяц. Как всегда, приводимая здесь информация на свой страх и риск. Приведенные советы могут взорвать ваш компьютер, съесть вашего хомяка, начальник лишит вас премии, а лучший друг обидится на вас. Если все это вас не пугает - вперед!</i></div><div style="margin-bottom: 0cm;"></div><a name='more'></a><br />
<div style="margin-bottom: 0cm;">1. Инсталлятор Mandriva, который до сих пор используется, представляет собой старый и почти заброшенный инсталлер доставшийся «по наследству». Новый инсталлятор есть, но оттестировать к релизу его не успели. К чему это я? Во время установки ставится много лишних пакетов (поддержка оборудования, дополнительные локали). Причем, в Mandriva этот список еще больше, чем в Росе. Удалить лишнее из системы можно скриптом, специально предназначенным для таких целей разработчиками:</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[root@host13 ~]# remove-unused-packages</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">2. Удаляем лишнее модули из initrd. В Mandriva/Роса для генерации initd используется dracut. Список запускаемых модулей можно посмотрев, просто запустив его:</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[root@host13 ~]# dracut /boot/initrd-$(uname -r)-test.img</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Затем открываем в любимом текстовом редакторе файл /etc/dracut.conf и прописываем туда такую строку:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">omit_dracutmodules+="network ifcfg btrfs crypt dmsquash-live mdraid fcoe nfs resume aufs-mount"</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Список приведен для моей машины, выбирайте «лишние» модули на свой страх и риск. Скажем, удалять из списка модуль mdraid не рекомендуется, если ваша система грузится с софтового raid'а. Если используется btrfs - модуль удалять так же не стоит. Перезапускаем dracut еще раз:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[root@host13 ~]# dracut -f /boot/initrd-$(uname -r)-test.img</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Добавляем новый initrd в grub (отдельным пунктом!). Последнее предупреждение: если вы не знаете как это сделать и не понимаете всего, что приведено в этом пункте, этот совет не для вас. Я предупредил! </div><div style="margin-bottom: 0cm;">Если перезагрузка пройдет успешно, то можно убрать из названия образа initrd слово «test» и прописать его в загрузчик насовсем.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">3. Владельцы карт Nvidia и ATI должны установить (при желании) свой проприетарный драйвер. Сделать это лучше через Центр Управления Mandriva или (что быстрее) сразу запустить drakx11 (работает и без графики совсем). Попакетная установка драйверов через пакетный менеджер, увы, не сработает. Также нелишним для владельцев Nvidia будет прописать открытый драйвер nouveau в blacklist:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[root@host13 ~]# vim /etc/modprobe.d/blacklist-mdv </span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">В этот файл надо добавить строчку:</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">blacklist nouveau</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">4. Далее открываем модуль настройки загружаемых при старте системы сервисов. Из консоли это - drakxservices. Либо через «Настройка Компьютера» - «Система» - «Включение и отключение системных сервисов». Здесь нужно отключить те службы, которые вам не нужны. Если вы не знаете этого - лучше будет закрыть этот модуль сразу. Лично я отключил: <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">abrtd</span>, <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">atd</span>, <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">avahi-daemon</span>, <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">iptables</span> и <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">ip6tables</span> (они нужны при ручной настройке firewall, если используете «родной» firewall от Mandriva - их можно смело выключить), <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">lvm2-monitor</span> и <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">mdadm</span> (если не используете LVM и RAID), <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">netfs</span> (если не монтируете через /etc/fstab сетевые файловые системы), <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">network</span> и <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">network-up</span> (если будете использовать networkmanager), <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">nfs-server</span>, <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">nfs-common</span> и <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">rpcbind</span> (я не использую NFS).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">5. Те, кто испытывает мало объяснимое отрицательное отношение к systemd, может заменить его на sysvinit, который по-прежнему есть в репозиториях:</div><div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">[root@host13 ~]# urpmi sysvinit</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Разработчики системы и служба поддержки отрицательно относятся к данному шагу, поэтому делайте это на свой страх и риск! Работоспособность системы не гарантируется (но грузиться будет).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">6. Если кому-то не подходит ядро версии 2.6.38, которое используется в системе, тот может поставить себе более новое «ванильное» ядро версии 3.0.3 от проекта <a href="http://mib.pianetalinux.org/">MIB</a>.</div><div style="margin-bottom: 0cm;">[root@host13 ~]# urpmi kernel-linus-latest</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">7. Доустановить в систему adobe flash player можно командой:</div><div style="margin-bottom: 0cm;">[root@host13 ~]# urpmi flash-player-plugin-preview</div><div style="margin-bottom: 0cm;"><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://i060.radikal.ru/1108/48/fb32a9325d78.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="http://i060.radikal.ru/1108/48/fb32a9325d78.png" width="400" /></a></div><br />
</div><div style="margin-bottom: 0cm;">Вроде ничего не забыл :) . Удачной работы с Mandriva!</div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com4tag:blogger.com,1999:blog-2986307105622275526.post-49855463457919052672011-07-08T20:51:00.001+04:002011-07-09T10:21:00.963+04:00Авторы, отзовитесь!Привет всем!<br />
<br />
Если у вас есть возможность поделиться своим опытом по поводу использования Linux дома или на работе, приглашаю сделать это на страницах этого дневника. Тематика статей может быть любой.<br />
<br />
Об условиях. Для того чтобы получить право публикации здесь - необходимо написать не менее трех статей. Желательно, чтобы они были грамотными, но это не проблема. Главное - интересное содержание. Три статьи - для того, чтобы я мог убедиться, что автор не иссякнет после написания одной-двух статей. <b>Все присланные статьи будут опубликованы от имени тех авторов</b>, которые пришлют эти статьи и в том виде, в котором они сами пожелают указать себя (или ники или полное имя). Адрес электронной почты приведен в моем профиле.strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com6tag:blogger.com,1999:blog-2986307105622275526.post-80616100994456320822011-07-05T09:00:00.007+04:002011-07-10T09:37:54.870+04:00Дистрибутивы Linux. Часть II<div dir="ltr" style="text-align: left;" trbidi="on"><i>Хоть Virens частично и раскрыл эту тему в своем <a href="http://mydebianblog.blogspot.com/2011/07/linux.html">последнем посте</a>, пост, приведенный ниже уже был наполовину готов. И я подумал - а не буду я отменять выкладывание этого поста. Что лучше, что хуже пусть судят остальные ;). Вопросы, касающиеся пакетного менеджмента я, в свое время, тоже опишу.</i><br />
<br />
<style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { color: #000080; text-decoration: underline }
A.western:link { so-language: zxx }
A.ctl:link { so-language: zxx }
-->
</style> <br />
<div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://tux-the-penguin.blogspot.com/2011/06/linux.html">В первой части</a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> были рассмотрены основные определения, касающиеся понимания дистрибутива Linux. Теперь, собственно, я попытаюсь собрать это все воедино. </span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Как получается очередной дистрибутив Linux?</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
<a name='more'></a><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Первый этап - это появление человека, которого не устраивают существующие дистрибутивы. По этому поводу у него будут обоснованные аргументы. Вопрос этих аргументов достаточно тонкий и лежит обычно в области "нравится - не нравится", поэтому тут сильно углубляться не стоит. Обычно, чтобы дистрибутив не был очередной однодневкой, у этого человека должны быть определенные харизматические качества (он становится во главе нового сообщества и должен сплотить его) и организаторские способности (мир свободного ПО слабо поддается деспотическому управлению, поэтому тут применяются иные методы руководства). </span></span> </div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Чтобы понять, о чем я тут пишу, достаточно посмотреть на таких ярких личностей, как Патрик Фолькердинг (основатель, архитектор и пожизненный лидер Slackware), Ян Мердок (основатель Debian, хоть он в настоящее время и не имеет отношения к этому проекту, но заложенные им идеи живут по сей день) и Марк Шаттлворт (основатель Canonical и Ubuntu).</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Второй этап - этот человек и сообщество вокруг него принимает решение о том, будет ли дистрибутив базироваться на существующем или будет самостоятельным. У любого подхода есть свои преимущества и недостатки. </span></span> </div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Дистрибутив, претендующий на независимость:</span></span></div><ul><li><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Берет исходные коды для своих пакетов непосредственно на сайтах разработчиков открытого ПО.</span></span></div></li>
<li><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Обладает своей собственной системой пакетного менеджмента (чтоб не зависеть от других). Имеется в виду, конечно же, не совсем и не всегда разработка с нуля. Дистрибутив может использовать, допустим </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">rpm</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">, со своими расширениями, но высокоуровневый пакетный менеджер (такой как </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">yum</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">, </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">zipper</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> или </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">apt</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">) у независимого дистрибутива будет свой. Можно, конечно, взять имеющийся пакетный менеджер, но если вдруг его бросят оригинальные разработчики, то можно огрести кучу проблем. Пример, который сходу приходит на ум, - это ALT Linux со своим apt-rpm, который заброшен оригинальными разработчиками и поддерживается теперь только альтовцами.</span></span></div></li>
<li><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Обладает собственным сообществом разработчиков. Это тоже большая проблема, потому что свободные разработчики они на то и свободные, что заставить их сделать что-то невозможно. Если им что-то не понравится - они уйдут в другой проект. И отдельная проблема - это убедить их в том, что новый проект будет нужен другим и к нему действительно стоит прикладывать руки и время.</span></span></div></li>
<li><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Обладает критическим числом </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><b>квалифицированных</b></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> разработчиков. Я это выделил в отдельный пункт, </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial;">потому что квалифицированные кадры - это отдельная проблема, ведь их всегда не хватает. Р</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">азработчики могут просто упаковывать необходимый софт в пакеты дистрибутива (как это делают в </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">ArchLinux</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">), а могут и сопровождать подконтрольные пакеты, самостоятельно портируя для них необходимые исправления. Первое может делать кто угодно, а вот для второго уже необходимо наличие определенных знаний. Ряд системных пакетов (компилятор, сборочная среда, Х-сервер, ядро) все равно придется сопровождать на уровне, отличном от просто упаковки нужного софта, для чего и нужны такие разработчики.</span></span></div></li>
</ul><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Для дистрибутива производного все обычно намного проще. Пакетный менеджмент и пакеты берутся из репозитория исходного дистрибутива (причем это легко автоматизируется с помощью скриптов). Это все поясняет, почему производных дистрибутивов значительно больше.</span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Например, Ubuntu берет бОльшую часть пакетов из репозитория Debian, не модифицируя их, что примерно показано <a class="western" href="http://tux-the-penguin.blogspot.com/2010/09/ubuntu-debian.html">вот здесь</a>. Все свои улучшения вносятся набором дополнительных пакетов, таких как ubuntu-artwork, ubuntu-branding. А Linux Mint, в свою очередь, делает то же самое (но в значительно меньшем объеме) с Ubuntu, потому что является даже не производным дистрибутивом, а надстройкой над Ubuntu.</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Итак, дело за третьим этапом - разработк</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial;">а архитектуры дистрибутива (ничего общего с поддержкой архитектур процессоров тут нет). Архитектура - это изначальное проектирование проекта как такового, и это именно то, чт</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">о делает дистрибутив отличным от других. Это те идеи, цели и критерии, которые закладываются в его существование, и изменить потом что-либо достаточно трудно. Это все то, что формирует дистрибутив и отношение к нему тех, кто пользуется им. Вопрос выбора дистрибутива лежит обычно в сфере личных пристрастий, и именно поэтому на тему «Какой дистрибутив Linux лучший?» на форумах раздуваются жуткие холивары :). Тех кого не забанили на популярных форумах, за вопрос «Что лучше rpm или deb?» вполне могут попробовать испытать терпение модераторов спросив про дистрибутив :).</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Ниже приведен примерный список всего того, что делает дистрибутив Linux особенным (и одновременно это набор показателей оценки его качества и серьезности задела):</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"></div><ul style="text-align: left;"><li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">То, ради чего создается дистрибутив, - его миссия. У Debian - это создание максимально свободной универсальной операционной системы для всех. У Red Hat - примерно то же самое, только для корпоративных заказчиков. У Archlinux и Slackware - это создание дистрибутива на основе </span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://en.wikipedia.org/wiki/KISS_principle">принципа KISS</a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> (максимально возможная простота), то есть отсутствие (либо минимальное наличие) каких-либо средств конфигурирования дистрибутива и ПО, в него входящего. Сюда же относится лицензионная политика для ПО дистрибутива. Есть ряд дистрибутивов, относимых к максимально свободным, – из них удален весь проприетарный софт, закрытые прошивки для устройств. Какой выбирать по данному критерию – каждый решает самостоятельно. Найти всю интересующую информацию по данному вопросу для конкретного дистрибутива нетрудно. Чтобы узнать ее, достаточно знать английский язык и название официального сайта дистрибутива.</span></span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Анонсируемая сфера применения дистрибутива - встроенные системы, десктопы, сервера, облачные вычисления, роутеры или «и то и другое, и можно без хлеба» (</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">c</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">). Сходу сделать самостоятельный проект, рассчитанный на универсальность, вряд ли у кого получится (а если кто обещает это сделать – или дурак, или маркетолог :) ), поэтому многие проекты идут на то, что поддерживают определенную часть репозитория, оставляя сообществу другую часть - например, как в Ubuntu, где есть репозитории main и restricted, поддерживаемые Canonical, и multiverse и universe, поддерживаемые сообществом. Примерно та же схема у Red Hat/Fedora. Fedora - фарм-дистрибутив, в который сообщество собирает пакеты, а Red Hat отбирает из их репозитория то, что подходит для Red Hat Enterprise Linux, чтобы потом поддерживать это все безобразие максимально возможный срок. Плюс во всему часть пакетов Fedora пересобирается сообществом для пользователей RHEL в рамках проекта EPEL.</span></span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Список поддерживаемых дистрибутивом архитектур. Обычно это вездесущие x86-совместимые - i386/i686 и x86_64. Сейчас в список широко поддерживаемых архитектур все чаще добавляется ARM. Самый большой список поддерживаемых архитектур – у </span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.debian.org/ports/"><span style="font-family: 'Times New Roman', serif;"><span lang="ru-RU">Debian</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> и </span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.gentoo.org/proj/en/base/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Gentoo</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">.</span></span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Объем пакетов во всех репозиториях дистрибутива. Большинство проектов позволяют выполнять поиск пакетов через обычный веб-интерфейс без необходимости установки дистрибутива. Таковы</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US"> </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://packages.gentoo.org/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Gentoo</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">, </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="https://admin.fedoraproject.org/pkgdb/acls/list/a*?_csrf_token=082043a7cc67b68dbfaab8c7c641a8ffa2dd592f"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Fedora</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">, </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.archlinux.org/packages/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">ArchLinux</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">, </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://software.opensuse.org/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">openSUSE</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">, </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.debian.org/distrib/packages"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Debian</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">, </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://packages.ubuntu.com/ru/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Ubuntu</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US"> </span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">и</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US"> </span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">даже</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US"> </span></span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://sisyphus.ru/ru/packages/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">ALT Linux</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">. Это позволяет оценить наличие в дистрибутиве нужного ПО и его версию.</span></span></span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Анонсируемый уровень пользователей дистрибутива. В данном случае под пользователями понимаются все, кто будет эксплуатировать этот дистрибутив, будь то десктопные пользователи или администраторы серверов. Есть дистрибутивы для очень опытных пользователей (например, новичок в мире Linux просто не сможет поставить Gentoo) и для не искушенных пользователей, как, например Ubuntu.</span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Конечная форма доставки пакетов пользователям - поставляется ли дистрибутив в бинарном виде или, как Gentoo, собирается на локальной машине. Тут могут быть и смешанные варианты. </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">ArchLinux</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">, например, имеет репозиторий бинарных пакетов и свою собственную систему для их сборки – </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">ABS</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">. Если пакета нет в базовых репозиториях, то можно легко найти файл спецификации для сборки пакета </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">PKGBUILD</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> в пользовательском репозитории </span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="https://aur.archlinux.org/"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">AUR</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> и собрать его самостоятельно. Та же схема и у </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Slackware. В этом дистрибутиве есть базовый репозиторий, подерживаемый на основе релизов. Все дополнительное ПО, по каким-то причинам не включенное Патриком в дистрибутив его пользователям предлагается собирать с помощью специальных скриптов SlackBuild.</span></span></span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Политика релизов дистрибутива - выпускаются ли релизы или дистрибутив безрелизный. Обычно анонсируется срок жизни релиза (срок поддержки, за время которого выпускаются обновления) и примерные или точные сроки выхода новых релизов. Например, у Debian релиз выходит по готовности (примерно раз в два-три года), Ubuntu выпускает релизы точно в срок: релизы с долгим временем поддержки – раз в два года, с коротким – раз в полгода.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Немаловажный фактор, отражающий качество сборки пакетов и квалификацию их майнтейнеров, – это стабильность репозитория для выпущенного релиза (и пакетов в нем). К сожалению, это познается только на собственном опыте. В некоторых дистрибутивах есть тенденции, что обновления нет-нет да и ломают что-нибудь. Не так серьезно, конечно, как в дистрибутивах со скользящими релизами, но все равно неприятно.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Для дистрибутивов, выходящих на основе релизов, огромную важность несет скорость выхода обновлений, связанных с безопасностью ПО. Это тоже показывает уровень квалификации разработчиков дистрибутива. Серьезные дистрибутивы выпускают такие обновления оперативно, несерьезные берут исправления у серьезных :).</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Уровень модификации пакетов апстрим. Некоторые проекты, типа Archlinux, Gentoo, Slackware используют авторские пакеты без каких-либо серьезных модификаций. Другие проекты, типа Fedora и openSUSE обычно сильно патчат все свои пакеты. Иногда это сказывается на стабильности этих дистрибутивов, иногда нет... Ubuntu, например, также сильно модифицирует все пакеты, связанные с рабочим столом пользователя, потому что компания Canonical оплачивает труд профессиональных дизайнеров, которые и улучшают ее внешний вид. Это причина того, что в одних дистрибутивах интерфейс оконной среды сделан в стиле «разработано профессиональными программистами», а в других – любо-дорого посмотреть.</span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Системные компоненты, включенные в дистрибутив по умолчанию. Также важна возможность предоставления вариантов этих компонентов и легкость их смены. Кто-то предоставляет эту возможность, кто-то нет. Например, в Fedora, начиная с 15-й версии, система инициализации systemd приколочена к системе намертво, а в openSUSE по-умолчанию используется старый добрый sysvinit, а systemd предоставляется как вариант. Еще один пример - во все дистрибутивы включается ядро Linux :). И во всех дистрибутивах перед разработчиками встают такие вопросы - нужно ли использовать какие-то дополнительные патчи для него, типа bfs, или нет? Нужно ли предоставлять пользователям несколько вариантов «вкуса» (flavours) ядра, как делают openSUSE, Ubuntu и Mandriva или стоит обойтись одним универсальным вариантом? Другие примеры – это возможность выбора различных вариантов сетевых служб, имеющих аналогичный функционал (например, sendmail/postfix), Java-сред по умолчанию, вариантов рабочего стола, офисного пакета (Openoffice.org или Libreoffice), оконной среды - </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">KDE</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">/</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">GNOME</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">/</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">XFCE</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">/</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Openbox</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">/</span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">WindowMaker</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> и т.п.</span></span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Принципы построения сообщества вокруг дистрибутива. Обычно это вопросы иерархии тех, кто дистрибутив разрабатывает: кто будет принимать технические решения, кто будет обладать правом арбитра при решении споров и правом вето, как будут приниматься пожелания. Не менее важно - как построена обратная связь с пользователями дистрибутива - только через систему отслеживания ошибок или нечто подобное OpenFATE в openSUSE, brainstorm в Ubuntu и GLEP в Gentoo. Важны вопросы приема в проект новых участников, условия этого вступления. В нормальных и серьезных проектах такие вещи определяются политиками и руководящими документами. Легкость нахождения этих документов и их полнота - отличный показатель серьезности проекта.</span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Доступность документации для конкретного дистрибутива. Все серьезные проекты имеют не менее серьезные wiki-страницы. По уровню wiki и ее проработанности лидирует, на мой взгляд, </span></span><span style="color: navy;"><span lang="zxx"><u><a class="western" href="https://wiki.archlinux.org/index.php/Main_Page"><span style="font-family: 'Times New Roman', serif;"><span lang="ru-RU">wiki.archlinux.org</span></span></a></u></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">, неплохие страницы документации у Gentoo и Ubuntu. Для администраторов Red Hat кладезь информации - сайт docs.redhat.com.</span></span></li>
<li><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Еще один показатель качества дистрибутива - это наличие на сайте с документацией правил сборки пакетов для него с </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><b>обязательными требованиями</b></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> по качеству их сборки. У дистрибутивов, относящих себя к серьезным проектам, всегда есть в свободном доступе скрипты для выполнения такой проверки (deblint для Debian/Ubuntu, rpmlint в Fedora/openSUSE, sisyphus_check в ALT Linux). Эти скрипты используются в сборочной системе для контроля качества собранного пакета. Уровень серьезности таких проверок варьируется от дистрибутива к дистрибутиву, например, OBS проверяет исходный код на наличие утечек памяти, а в Debian в репозиторий не попадет пакет без man-страницы.</span></span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Тяжелый вопрос для каждого из проектов - вопрос инфраструктуры. У серьезного дистрибутива должен быть свой web-сайт, на котором размещаются основные документы, касающиеся дистрибутива, приема новых участников команды, сайт с документацией, формы для приема пожеланий по его развитию, и, конечно же, форум для общения и обмена мнениям. Помимо этого - сборочный сервер, сервер с репозиторием дистрибутива и репозиториями отдельных разработчиков. Инфраструктура никак не может быть виртуальной и требует для своей работы определенного количества денег. Крупным проектам технику обычно дарят, а список дарителей висит на веб-странице проекта в явном виде.</span></li>
</ul><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">По приведенным критериям каждый может оценить свой любимый дистрибутив на предмет отношения его разработчиков к пользователям. Конечно же, этот набор критериев не полный, но определенные выводы сделать позволит.</span><br />
<div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;"><br />
</span><br />
<span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Возможно ли на основе данной информации сделать какой-то выбор? Не знаю, если честно. Вопрос выбора дистрибутива – это как вопрос выбора автомобиля (если опустить финансовую сторону дела): человек может долго обсуждать технические аспекты вопроса, а потом выберет себе тот, где пепельница на удобном месте :).</span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><br />
</div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Выбор дистрибутива можно делать примерно так:</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Допустим, нам нужен дистрибутив с красивым десктопом из коробки, обладающий хорошей стабильностью и огромным количеством софта. Скорее всего, это будет </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Ubuntu</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">LTS</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">.Нужен дистрибутив под базу данных </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Oracle</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">. Тут выбор маленький, и с вероятностью 95% ими будут </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Red</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Hat</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Enterprise</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Linux</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> или </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">SUSE</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">.</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Нужен дистрибутив под </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">LAMP-</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">сервер – хороший выбор тут </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Debian</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> или </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Ubuntu</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Server</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">.</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Нужен дистрибутив под какой-нибудь маршрутизатор – скорее всего, это будет опять </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Debian</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> из-за огромного количества поддерживаемых архитектур.</span></span></div><div style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Если вы опытный пользователь, любите экспериментировать с системой, ставить несколько версий одного ПО «на потестить», цените огромную гибкость системы, любите, чтоб все было по-вашему и готовы платить за это своим временем, – однозначный выбор </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Gentoo</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;">.</span></span></div><div lang="en-US" style="margin-bottom: 0cm; orphans: 2; widows: 2;"><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><br />
</span></span><br />
<span style="color: black;"><span style="font-family: 'Times New Roman', serif;">Естественно, что это все приблизительно и приведено для примерных схем выбора, а не для очередного холивара :). Приведенная статья не может охватить все дистрибутивы </span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"><span lang="en-US">Linux</span></span></span><span style="color: black;"><span style="font-family: 'Times New Roman', serif;"> и сразу рассказать про них все (в ней тогда будет «многабукав» и читать ее мало кто рискнет :) ). Но если у меня получилось дать некую базу для дальнейшего гугления интересующей информации по сайтам конкретных проектов, думаю, что я достиг поставленной цели.</span></span></div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com17tag:blogger.com,1999:blog-2986307105622275526.post-63231117976099776272011-07-04T10:00:00.001+04:002011-07-04T10:00:09.377+04:00Прощай, Учебный Центр!<div dir="ltr" style="text-align: left;" trbidi="on">Пришло время сказать "прощай" тому месту, где я провел почти три года. За это время я значительно вырос и как преподаватель, и как Linux-специалист, но все хорошее имеет тенденцию рано или поздно заканчиваться... И тогда приходит время искать новые горизонты.<br />
<br />
А тому что ушло - самое время сказать два слова: Прощай и Спасибо за все!<br />
<br />
Что касается данного блога - бросать я его не намерен. Буду его вести, по-прежнему, в меру своих сил. И постараюсь не бросать его больше на такой большой срок, как последние полгода :). </div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com6tag:blogger.com,1999:blog-2986307105622275526.post-43237233149906101572011-06-30T09:00:00.005+04:002011-07-09T13:45:19.986+04:00Из чего состоят дистрибутивы Linux. Часть I<div dir="ltr" style="text-align: left;" trbidi="on"><style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style> <br />
<div style="margin-bottom: 0cm;"><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;"><i>Дистрибутивов Linux огромное количество. Откуда они берутся, как получаются и почему именно такие — этому и посвящена статья. Статья адресована прежде всего новичкам в мире Linux, поскольку большинство из тех, кто начинал им пользоваться раньше появления Ubuntu, обычно знают все, что приведено ниже.</i></span></div><br />
<span style="font-family: 'Times New Roman', serif;">Представьте себе огромное количество разного ПО от маленьких (но важных) проектов по отдельным библиотекам до огромных типа KDE, GNOME, Libre- и OpenOffice, ядра Linux. Все эти отдельные проекты развиваются каждый сам по себе, иногда с оглядкой на остальные, иногда нет. Конечно, каждый может собрать это все ПО вместе и объявить дистрибутивом Linux, но в случае серьезных дистрибутивов (я к ним отношу те, что занимают первые 10 мест в рейтинге <a href="http://distrowatch.com/">Distrowatch</a>) все обычно гораздо сложнее.</span><br />
<span style="font-family: 'Times New Roman', serif;"></span><br />
<a name='more'></a><br />
<span style="font-family: 'Times New Roman', serif;">Немного о терминах. </span> <br />
<span style="font-family: 'Times New Roman', serif;"><b>Разработчиками дистрибутива</b> (или майнтейнерами) обычно называют тех, кто берет какое-то ПО и упаковывает его в пакет для конкретного дистрибутива (пакетная система, для чего она нужна и что делает - отдельный большой вопрос). </span> <br />
<span style="font-family: 'Times New Roman', serif;">Место, откуда это ПО берется - называется <b>апстрим</b> (от английского upstream). Адекватного перевода на русский язык я пока не нашел, да и слово апстрим стало уже устоявшимся термином. Для серьезных дистрибутивов апстримом являются конкретные проекты свободного (и не очень) ПО. Для производных дистрибутивов - другие дистрибутивы Linux. Например, для CentOS - апстримом является Red Hat Enterpise Linux, для Ubuntu - Debian, для Debian - оригинальные разработчики ПО. Еще раз - апстрим это или разработчик конкретной программы, или родительский дистрибутив.</span><br />
<span style="font-family: 'Times New Roman', serif;"><b>Пакетом</b> называется отдельный атом дистрибутива (в смысле неделимости), который несет в себе конкретную программу (или набор программ), библиотеку (или набор библиотек), документацию, темы оформления или что-то еще. Короче говоря, все, что составляет дистрибутив Linux - это меньшее или большее количество пакетов. Пакет - это обычно:</span><br />
<br />
<ul style="text-align: left;"><li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">архив дерева файлов в том виде, в котором они должны лежать на диске после установки;</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">набор метаданных, содержащих информацию о пакете (имя майнтейнера, описание пакета, зависимости);</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">набор скриптов, облегчающих установку пакета для пользователя и/или производящих те или иные настройки.</span></li>
</ul><br />
<span style="font-family: 'Times New Roman', serif;"><b>Пакетная система</b> - то, что помогает пользователям дистрибутива искать, ставить, обновлять пакеты и автоматически отслеживать зависимости между ними. Пакетные системы в мире Linux делятся на три больших и хорошо очерченных класса: </span> <br />
<br />
<ul style="text-align: left;"><li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">пакетная система Debian и ее deb-пакеты.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">пакетная система rpm, придуманная в свое время Red Hat и теперь имеющая не всегда совместимые между собой пакеты разных rpm-дистрибутивов (Red Hat/Fedora, SUSE, Mandriva и т.п.). Имеется в виду, что, например, пакет для Mandriva может и встанет на SUSE (зависит от положения звезд на небе), но работать скорее всего откажется.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">все остальные пакетные системы. В качестве примера сюда можно отнести и пакеты ArchLinux, и Slackware, и отчасти Gentoo.</span></li>
</ul><br />
<span style="font-family: 'Times New Roman', serif;">Важный составляющих элемент пакетной системы - <b>менеджер пакетов</b>. Это программа, позволяющая управлять пакетами на конкретной машине. И обычно она имеет только текстовый интерфейс, но разработчики большинства дистрибутивов, как правило, поставляют графические утилиты, взаимодействующие с пакетным менеджером и таким образом значительно облегчающие жизнь тех, кто еще не познакомился с консолью Linux или не хочет с ней знакомится вовсе.</span><br />
<span style="font-family: 'Times New Roman', serif;">Вопрос какая пакетная система лучше, какая хуже - относится к сфере личных пристрастий и потому спорный. Желающие могут в этом убедиться, открыв на каком-нибудь Linux-форуме тему «Что лучше rpm или deb?». Если Вас сразу не забанят модераторы форума за провокацию, то флейм по этому поводу займет не один десяток страниц.</span><br />
<span style="font-family: 'Times New Roman', serif;"><b>Зависимости</b> - это следующая непонятная новичкам штука. Бывают <i>жесткие</i> и <i>мягкие</i>. Жесткая зависимость в общем виде - это все то, без чего содержимое пакета работать не будет. Обычно это какие-то библиотеки, обеспечивающие функционал конкретной программы. Мягкая зависимость - это то, что обеспечивает дополнительный функционал для программы. Такой тип зависимостей есть, по большому счету, только в deb-пакетах. </span> <br />
<span style="font-family: 'Times New Roman', serif;">Следующее непонятное определение - <b>репозиторий пакетов</b>. Это место, откуда пользователи берут ПО для своего дистрибутива. Обычно это некое сетевое (но может быть и локальным) хранилище пакета, в котором помимо собственно пакетов для дистрибутива находится набор метаданных, которые используются пакетным менеджером для управления ПО на машине пользователя. Именно благодаря этим метаданным пользователям достаточно легко найти нужные пакеты в репозитории, а пакетному менеджеру выяснить, какое ПО требует обновлений.</span><br />
<span style="font-family: 'Times New Roman', serif;">По способу поддержки репозитория можно выделить три типа дистрибутивов:</span><br />
<br />
<ol style="text-align: left;"><li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Дистрибутивы со скользящим релизом (или безрелизные). На английском они обычно называются rolling release. Типичный (и достаточно популярный) тут - Archlinux. В таких дистрибутивах после обычно малого периода тестирования пакеты попадают к пользователям практически сразу после релиза конкретного пакета его разработчиком. Главное преимущество таких дистрибутивов - то, что в репозитории находится очень свежее ПО. Это имеет и обратную сторону (за все в жизни приходится платить) - в этом ПО зачастую имеются ошибки, которые с переменным успехом отлавливаются пользователями такого дистрибутива. По причине того, что большая часть проектов развивается без оглядки друг на друга, иногда встречается какая-либо несовместимость между какими-то пакетами, вызывающая неработоспособность определенной программы. Иногда (при серьезных изменениях) меняется формат конфигурационного файла программы или демона, что требует работы руками. Но те, кто используют такие дистрибутивы, обычно знают, на что идут, и достаточно квалифицированы для того, чтобы решить все возникающие проблемы. Тут из всех дистрибутивов, на мой взгляд, самый выдержанный подход у Gentoo, который представляет собой дистрибутив с rolling release-моделью, но тем не менее все пакеты попадают в его стабильную ветвь после значительного периода тестирования, что обеспечивает достаточно высокую надежность его работы.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Дистрибутивы с релизной моделью. Проблема получения стабильного дистрибутива давно уже решена и используется большинством разработчиков разных дистрибутивов Linux, таких как Debian, Ubuntu, Red Hat, SUSE и проч. У таких дистрибутивов есть обычно тестовая ветвь с rolling release-моделью, на которой обкатываются (и решаются) разные проблемы несовместимости и нестабильной работы конкретного ПО. Периодически эту ветвь замораживают, блокируя попадание туда новых пакетов. Затем в таком репозитории вычищают по максимуму все имеющиеся в нем проблемы и ошибки. Когда ошибок, по мнению разработчиков, уже достаточно малое количество, выпускается очередной релиз, на протяжении жизни которого в нем не будут уже меняться версии имеющегося ПО. Обновления такого дистрибутива включают в себя исправление оставшихся ошибок и устранение возникающих время от времени уязвимостей. Иногда ошибки устраняют и разработчики апстрима. Тогда задача майнтейнера пакета проанализировать исходный код разработчиков ПО (он же открыт) и выделить из него только те изменения, которые отвечают за исправление ошибок. Затем эти изменения накладываются на те программы и библиотеки, которые находятся в стабильном релизе. Бл<span style="background-color: transparent;">агодаря этому получается, что версия ПО в стабильном дистрибутиве старая, но тем не менее в ней исправлено большинство уязвимостей, найденных к этому моменту. </span>Другое дело, что длительная поддержка ПО по такой схеме - вещь трудная. Ведь чем больше проходит времени с момента релиза, тем более высокая квалификация требуется от разработчика, чтобы выделить только то, что исправляет ошибки и ни в коем случае не ломает совместимость с другими программами и библиотеками. Именно по этой причине длительную поддержку релиза могут позволить себе немногие. По сути лишь те, кто имеет большое количество квалифицированных программистов, то есть коммерческие компании Red Hat и Novell. Такие дистрибутивы прекрасно подходят для консервативной корпоративной среды, где редко происходят сильные изменения и поэтому нужна высокая стабильность работы.</span></li>
<li><span class="Apple-style-span" style="font-family: 'Times New Roman', serif;">Дистрибутивы со смешанным циклом. В таких дистрибутивах стабилизируется (замораживается) только одна часть репозитория. Как правило, это все, что относится к сборочной среде, - компилятор, библиотека C, разные важные библиотеки, ядро Linux. А ПО, относящееся к десктопам (типа Firefox, OpenOffice, разные игры), обновляется регулярно (но обязательно после продолжительного тестирования).</span></li>
</ol><br />
<span style="font-family: 'Times New Roman', serif;">Для таких популярных дистрибутивов как openSUSE и Ubuntu есть выбор - либо использовать стабильную базу конкретного релиза их дистрибутива, или подключить дополнительные репозитории (репозитории OBS для SUSE и ppa для Ubuntu), получая таким образом более свежее ПО для своей системы.</span><br />
<span style="font-family: 'Times New Roman', serif;">Вроде как все, что хотелось бы сказать по данному поводу. Если что осталось неясно, постараюсь ответить в комментариях на вопросы, <u>касающиеся данной статьи</u>. В меру сил и наличия свободного времени постараюсь внести все необходимые изменения, если потребуется в приведенный текст статьи.</span></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com15tag:blogger.com,1999:blog-2986307105622275526.post-49813502093989838992011-04-13T13:27:00.000+04:002011-04-13T13:27:56.554+04:00По следам прошедшего Open Source Summit'а<div dir="ltr" style="text-align: left;" trbidi="on"><style type="text/css">
p { margin-bottom: 0.21cm; }
</style><br />
<div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">Календарь существующих курсов позволил мне побывать на этом прекрасном мероприятии. Организация была на высоте, было много чего интересного. На всех секциях побывать не удалось, главным образом, потому что не получилось разорваться :). </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Сначала о выступлениях в торжественной части.</div><a name='more'></a>Первым выступал директор Департамента государственной политики в области информационных технологий и координации информатизации Минкомсвязи России с докладом на тему - «Создание национальной программной платформы. Разработка приложений, основанных на использовании СПО» - <b>г-н Милашевский И.А</b>. На доклад, естественно, он вышел с ноутбуком от Apple и презентациями, сделанными в самом популярном офисном приложении (к слову, из всех выступающих только у Марка Шаттлворта были слайды в PDF :) ). Доклад был посвящен основным вопросам, которые необходимо будет решить для создания национальной операционной системы. В частности:<br />
<br />
<ul style="text-align: left;"><li>создание на базе организуемых дата-центров эталонной сборочной среды, в которой можно будет гарантировать целостность и воспроизводимость сборки конкретных приложений;</li>
<li>организация публичного репозитория, где будут находиться собираемые приложения.</li>
</ul><br />
<div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">Было также много других вопросов, но они ничем не отличались от публичных заявлений других чиновников по поводу Национальной платформы, так что я сразу перейду к самому интересному - выступлению <b>Марка Шаттлворта</b>. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Марк начал с обращения к присутствующим по-русски, сказав, что немного знает русский язык, но поскольку он его знает не в том объеме, чтобы читать на нем доклад - он продолжит по-английски. Само выступление касалось множества политических и организационных вопросов (я предвижу, что его за это будут «пинать» многие линуксоиды, которые вечно всем недовольны). Доклад начался с того, что на сегодняшний день Linux и все, что его окружает (движение Open Source), становится мейнстримом всей IT-сферы. Все технологические новинки появляются в первую очередь здесь - это виртуализация, новомодные облачные вычисления. Linux неумолимо пробирается на телефоны, встраиваемые устройства, начинает предустанавливаться на новые ноутбуки. </div><div style="margin-bottom: 0cm;">В то же время, если мы хотим ориентироваться на что-то большее, чем серверные решения, - в этом случае необходимо предложить решения «из коробки». Огромный недостаток Linux в том, что пока таких решений мало. И Canonical пытается решить именно эти вопросы. Что нужно большинству людей - чтобы после установки система просто работала, находила все необходимые драйвера для подключаемых устройств (естественно, что для этого необходимо, чтоб они были :) ). В частности, Марк упомянул, что, например, при внедрении Linux в российские школы многие столкнулись с тем, что не со всеми версиями дистрибутива работал драйвер «электронной доски». И именно проблема с недостатком драйверов пока является самой большой и самой «неудобной» для массового внедрения Linux.</div><div style="margin-bottom: 0cm;">Следующее перспективное направление - снижение «фрагментации» Linux-сообщества путем создания глобальной экосистемы. Ни для кого не секрет, что сейчас сообщество сильно разделено. Многие работают над одним и тем же одновременно, распыляя усилия и плодя множество однотипных проектов. Ведь OpenSource, как движение, и создавался для того, чтобы можно было по максимуму использовать уже существующие решения, доводя их до ума, а не изобретать каждый раз велосипед заново. Не поддается сомнению и то, что помимо глобального сообщества, работающего над мейнстримом, необходимо учитывать локальные проблемы. Тут Марк опять упомянул российские проблемы с «электронной доской». </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующая проблема - это то, что существующая инфраструктура компаний-продавцов «железа» и программного обеспечения построена вокруг проприетарного ПО. Это одно из самых перспективных направлений. И акцент тут нужно делать не на бесплатности Linux, а на предложении пользователям тех возможностей, которых нет у «конкурирующих» систем: гибкость, простота использования, открытые стандарты и т.п.</div><div style="margin-bottom: 0cm;">И, конечно же, самое главное - это не повторить ситуацию 80-х годов и путь Microsoft. Сейчас в мире многое меняется и нельзя замыкаться в рамках каких-то границ (будь-то государственные границы или социальные), интересов. Необходимо сохранить то, чем всегда отличалось движение программ с открытым исходным кодом. - глобальная совместная работа над многими проектами. Соответственно, нужно менять и бизнес-подходы, позволяющие получать прибыль на свободном ПО, не повторяя историю успеха всеми «любимой» корпорации. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующим выступлением было «Информационно безопасные технологии на основе свободно распространяемых исходных кодов». Доклад читал первый заместитель начальника Центра ФСБ России <b>Баранов А.П</b>. Его выступление было, скажем так, очень спорным. В основном оно касалось вопросов государственной сертификации операционных систем ФСТЭК и создания на их основе решений для обеспечения безопасности государственной информации. По затратам на сертификацию и последующую доработку ОС под государственные требования нет никаких различий между Windows, Linux и BSD. Более того, докладчик посчитал, что в Linux серьезные проблемы с драйверами устройств, даже P'n'P там работает не так хорошо, как в Windows. Он объяснил это так - все производители «железа» работают прежде всего с Microsoft, поэтому и драйвера для Windows появляются раньше. Еще одна проблема Linux - недостаток прикладного ПО. А все потому, что Microsoft лучше стимулирует и направляет разработчиков своего ПО, поэтому оно у них и лучше и качественнее. Поэтому по прикладному ПО Linux так и будет отставать, потому что курировать разработку некому. <span style="background: none repeat scroll 0% 0% transparent;">В свете программы создания национальной платформы необходимо создать государственную структуру, которая будет курировать разработку такого прикладного ПО, необходимого госкомпаниям.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующая проблема для массового внедрения Linux - во многих государственных компаниях есть свое ПО, которое они не хотят переписывать под другую систему.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">По возможностям, связанным с обеспечением безопасности данных, г-н Баранов считает, что система, «созданная из кусочков», гораздо менее безопасна, чем целостная и монолитная система от одного производителя. Для госцелей и для Windows и для Linux была создана своя система мандатного доступа. Для Windows она существует в виде отдельного диска, доустанавливающего все после установки базовой системы. Сама компания Microsoft не возражает против такой модификации своей операционной системы (<i>еще бы она возражала - прим. автора.</i>). Докладчик также отметил, что вследствие открытой модели разработки программисты под Linux и BSD-системы менее квалифицированы, чем их коллеги, пишущие программы под сами знаете что. Именно поэтому, затраты на создание мандатной системы доступа для Linux были гораздо больше, чем под Windows.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующий доклад читал директор ИПИ РАН <b>Соколов И.А. </b><span style="font-weight: normal;">на тему</span><b> </b>«ТП НПП в контексте общих задач разработки ПО в России». Свое выступление он начал со слов, что несогласен со многими положениями предыдущего докладчика, но формат встречи не позволяет дискутировать и если кто хочет поучаствовать в дискуссии - то следует это сделать в специальное время в отдельной секции. Основные тезисы его выступления:</div><br />
<ul style="text-align: left;"><li>Многие организации хотят участвовать в разработке национальной ОС, поэтому необходимо с самого начала решить проблему координации усилий, для чего необходимо создать регулирующий госорган.</li>
<li>Программирование, как таковое, давно стало отдельной отраслью научного знания.</li>
<li>Производительность труда программистов выросла в несколько раз, благодаря новым языкам программирования, множеству существующих алгоритмов и повторному использованию кода.</li>
<li>Разработка ПО глобализуется, потому что компьютер и программы становятся неотъемлемой частью нашей жизни и потребность в ПО растет.</li>
</ul><br />
<div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Последним докладом, на котором я присутствовал, было выступление г-на <b>Петренко А.К.</b>, заведующего отделом технологий программирования ИСП РАН на тему «Свободное программное обеспечение, открытые технологии и открытые стандарты». Начал он с того, что из себя представляет свобода ПО в понимании Free Software Foundation и положений GPL. Я не буду это тут писать, потому что, думаю, многие с этим знакомы. Главным преимуществом свободного ПО докладчик считает возможность изучать код, учиться и учить других, зарабатывать на распространении и экономить на лицензиях, строить международные партнерства. </div><div style="margin-bottom: 0cm;">При создании национальной ОС необходимо разработать адекватную систему оценки качества создаваемого ПО - по результату, а не по статусу компании-разработчика. В качестве основного критерия результативности предлагается принять количество патчей, принятых международным сообществом. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Основные риски свободного ПО (по мнению заказчиков) - его низкое качество и технологическое отставание, что не является истиной. На сегодняшний день многие крупные компании, включая Microsoft, курируют проект, связанные с ПО с открытым исходным кодом. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Планируемые результаты, которые планируется получить от использования национальной ОС:</div><br />
<ul style="text-align: left;"><li>Экономия государственных затрат за счет повторного использования программного обеспечения;</li>
<li>Приоритетная поддержка проектов, занимающихся научными исследованиями в области разработки программного обеспечения. Для этого необходимо разработать новую систему оценки конкурентных заявок по IT-проектам. По мнению докладчика, тут самым главным должна быть открытость полученных результатов, что позволит оценивать результат честно.</li>
<li>Государственная поддержка центров компетенции по ключевым направлениям.</li>
</ul><br />
<div style="margin-bottom: 0cm;">После перерыва я переместился в секцию, где состоялась встреча Марка Шаттлворта с участниками сообщества Ubuntu. Ему задавали множество вопросов. Попробую тут привести некоторые из них по памяти:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Вопрос:</b> Зачем нужна разработка Unity, если есть GNOME/KDE/что-то еще? Какова на сегодняшний день стабильность Unity?</div><div style="margin-bottom: 0cm;"><b>Ответ: </b>Пользователям системы нужно простое и удобное решение «из коробки». Имеющиеся среды не удовлетворяют таким требованиям. Например, если есть прекрасное решение, которое чтобы довести до ума нужно долго настраивать - оно не будет никому нужно. На настоящий момент Unity находится в активной разработке, именно поэтому разработчики Ubuntu до сих пор не решили - стоит ли включать ее в грядущий релиз. При разработке активно используется помощь простых людей «с улицы», которых сажают за систему и просят выполнить какую-то простейшую операцию, например, подключить веб-камеру, сделать с ее помощью снимки и выложить их на Facebook. Если человеку это удалось, значит интерфейс прост и удобен.</div><div style="margin-bottom: 0cm;">В качестве бета-тестеров Unity и Ubuntu участвуют и родители Марка. Он привел такой пример, что у его родителей на протяжении 6 лет стояла Ubuntu и когда он купил им новый ноутбук с Windows 7 - они сказали ему: «Убери эту неудобную гадость и поставь нам Ubuntu».</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>В: </b>Что думает Марк Шаттлворт о конкуренции с Google Chrome OS? Какие будут его действия, если победит Google?</div><div style="margin-bottom: 0cm;"><b>О:</b> Конкуренция идет на пользу конечным пользователям и ее Марк не боится. Пусть пользователи выберут то, что считают нужным. Но лично для него хранить свои приватные данные где-то в облаке Google - странно. Он не может доверять кому-либо свои данные, в обмен на честные глаза. Но это лично его мнение и пусть каждый решает за себя сам.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>В: </b>Планирует ли компания Canonical выпускать планшеты и наладонники с Ubuntu на борту?</div><div style="margin-bottom: 0cm;"><b>О: </b>Да, если будет такой спрос.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Молодые люди с форума Ubuntu снимали все на камеру и потом обещали выложить видео, так что думаю, желающие смогут найти позже в сети эти записи.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Затем я переместился в секцию, где директор по продажам компании Canonical Пол Хольт и инженер по политике продаж Борис Девоуг делали доклад о корпоративных решениях для закачиков. Небольшой нестыковкой было то, что слайды были переведены на русский язык, поэтому докладчики выступали «вслепую» :). Но свой текст они знали на пять баллов, поэтому не ошиблись ни разу. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">С саммита мне пришлось уйти раньше, о чем я сильно сожалею, но надеюсь, что подобное событие произойдет и на будущий год :). </div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com1tag:blogger.com,1999:blog-2986307105622275526.post-58055495883360381342010-12-29T20:21:00.000+03:002010-12-29T20:21:03.625+03:00С наступающим!Поздравляю всех читателей этого дневника с наступающим Новым Годом! Желаю в наступающем году безглючного железа, безпроблемных пользователей! Также хочется пожелать успехов и в остальных сторонах жизни - материальной, личной, карьерной.<br />
<br />
Надеюсь, что будущий год будет не хуже прошедшего по насыщенности событиями Linux-тематики. У нашего учебного центра тоже есть много интересных задумок, которые планируется реализовать. Но об этом я пока писать не могу :).<br />
<br />
Еще раз успехов! И помните, пингвин птица полярная :)<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_zHyeYQyYSXw/TRtt5mnF_TI/AAAAAAAAAPY/ETrQGfzlZm4/s1600/pingvin_polar.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_zHyeYQyYSXw/TRtt5mnF_TI/AAAAAAAAAPY/ETrQGfzlZm4/s1600/pingvin_polar.jpg" /></a></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com0tag:blogger.com,1999:blog-2986307105622275526.post-30417229703742815942010-12-09T13:53:00.003+03:002011-01-07T19:15:59.286+03:00Введение в использование LVM<div style="margin-bottom: 0cm;"><b>LVM</b> - (Logical Volume Manager - менеджер логических дисков) средство гибкого управления дисковым пространством. Позволяет динамически менять размер логических разделов на лету, создавать снимки (снапшоты) и т.д.</div><div style="margin-bottom: 0cm;"><br />
<a name='more'></a><br />
</div><div style="margin-bottom: 0cm;"><b>Дисклеймер/отмазка</b></div><div style="margin-bottom: 0cm;"><span style="color: red;">LVM это <b>очень(!!!)</b> мощный инструмент, который требует аккуратного с собой обращения. Любая самодеятельность с ним может обернуться потерей всей(!!!) информации на диске. Поэтому прежде, чем использовать LVM на рабочих машинах (и уж тем более на «боевых» серверах), следует потренироваться на кошках. Лучше всего это делать на виртуальных машинах. Начинать использовать LVM следует <b>только</b> (и только!!!) тогда, как почувствуете уверенность и понимание принципов его работы.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Зачем нужен LVM</b></div><div style="margin-bottom: 0cm;">Установка системы прямо на разделы диска зачастую приводит к следующей проблеме.</div><div style="margin-bottom: 0cm;">Нужно каким-то образом «правильно» разбить жесткий диск. Слово «правильно» стоит в кавычках, потому что «правильного» разбиения диска для всех возможных ситуаций <span lang="ru-RU">и применений </span>не существует. В сети есть много советов по данному поводу, но они не учитывают потребностей конкретного пользователя (в случае настольной системы) или конкретного администратора (в случае сервера). Обычно рекомендуют разделы /home, /var, /usr, какие-то еще выносить на отдельные разделы диска. Но если разбивающий ошибется в размерах этих разделов, возникает очень не хорошая ситуация - на одних разделах место подходит к концу, в то время как на остальных места еще много. Приехали! Дисковое пространство нужно переразмечать. Для этого есть много способов:</div><div style="margin-bottom: 0cm;">1. Тотальный backup, затем переустановка системы с переразбиением диска.</div><div style="margin-bottom: 0cm;">2. Переразметка с помощью parted с риском потерять данные.</div><div style="margin-bottom: 0cm;">3. Изначальная установка системы на LVM, который позволяет изменять размеры своих разделов прямо на работающей системе.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Терминология</b></div><div style="margin-bottom: 0cm;">LVM предусматривает три логических уровня работы с дисковым пространством:</div><div style="margin-bottom: 0cm;">1. Самый нижний - <i>физические тома</i> (physical volumes). Это собственно физические диски. Это могут быть диски целиком (/dev/sda, /dev/sdb и т.д.) или отдельные разделы (/dev/sda1, /dev/sdb5 и т.п.).</div><div style="margin-bottom: 0cm;">2. <i>Группы томов</i> - volume groups. В группы томов объединяются физические тома. Таким образом группы томов представляют собой пул дискового пространства, необходимый для следующего уровня. Группы томов могут иметь человеческие названия, говорящие администратору системы об их предназначении: system, sales, database и т.д.</div><div style="margin-bottom: 0cm;">3. <i>Логические тома</i> (logical volumes) - это аналог разделов физического диска и то, ради чего вообще существуют диски - именно на них хранятся данные. Пользователи (и процессы) системы работают только с логическими томами. Таким образом LVM создает для них всех слой абстракции, скрывая, с какими именно физическими дисками они в данный момент работают. Администратор системы может добавлять физические тома в LVM и удалять их из него (см. ниже), но процессы (и пользователи) об этом знать не будут.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Примечание по названиям утилит </b><span lang="en-US"><b>LVM</b></span></div><div style="margin-bottom: 0cm;">Следует запомнить сразу - названия утилит для работы с разными уровнями <span lang="en-US">LVM </span><span lang="ru-RU">совпадают. Различие только в первых двух буквах этого названия. Это:</span></div><ul><li><div lang="en-US" style="margin-bottom: 0cm;">pv* - <span lang="ru-RU">для работы с физическими томами;</span></div></li>
<li><div lang="en-US" style="margin-bottom: 0cm;">vg* <span lang="ru-RU">- для работы с группами томов;</span></div></li>
<li><div lang="en-US" style="margin-bottom: 0cm;">lv* <span lang="ru-RU">- для работы с логическими томами.</span></div></li>
</ul><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Не стоит также пытаться зазубрить названия этих утилит и их ключи. Действовать стоит так:</div><div style="margin-bottom: 0cm;">1. Думаете, с каким уровнем <span lang="en-US">LVM </span><span lang="ru-RU">надо работать - физические тома, группы томов или логические тома.</span></div><div style="margin-bottom: 0cm;"><span lang="ru-RU">2. Выбираете в зависимости от этого первые буквы названия: </span><span lang="en-US">pv, vg </span><span lang="ru-RU">или </span><span lang="en-US">lv, </span><span lang="ru-RU">соответственно.</span></div><div style="margin-bottom: 0cm;"><span lang="ru-RU">3. Набираете их в консоли и нажимаете два раза </span><span lang="en-US">TAB. </span><span lang="ru-RU">Срабатывает автодополнение, которое показывает команды, начинающиеся с указанных букв.</span></div><div style="margin-bottom: 0cm;"><span lang="ru-RU">4. Выбираете команду по ее названию, например, </span><span lang="en-US">pvcreate </span><span lang="ru-RU">для создания физических томов. Если вы ее запустите с ключом </span><span lang="en-US">--help , </span><span lang="ru-RU">она вам покажет все возможные ключи. За более подробной информацией стоит залезть в </span><span lang="en-US">man </span><span lang="ru-RU">конкретной команды.</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="ru-RU">По мере набора опыта работы с </span><span lang="en-US">LVM </span><span lang="ru-RU">нужда в такой последовательности отпадет. Необходимые команды и их опции запомнятся сами собой.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Создание</b></div><div style="margin-bottom: 0cm;">Я буду рассматривать создание LVM на уже установленной системе. Знание терминологии и принципов работы с ним в дальнейшем позволит найти в инсталляторе нужные пункты для создания логических томов на этапе установки системы.</div><div style="margin-bottom: 0cm;">Первый этап - это создание правильных разделов. Это такие разделы, которые LVM признает за свои и сможет при загрузке их корректно инициализировать. «Родной» тип разделов для LVM - 8E Linux LVM. Все, что будет дальше, не будет работать, если при создании разделов не указать приведенный корректный тип. <span lang="ru-RU">Итак, создаем несколько разделов типа </span><span lang="en-US">8E </span><span lang="ru-RU">с помощью любимого средства разбиения диска:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# fdisk -l /dev/sdb</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Disk /dev/sdb: 2147 MB, 2147483648 bytes</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">255 heads, 63 sectors/track, 261 cylinders</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Units = cylinders of 16065 * 512 = 8225280 bytes</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Sector size (logical/physical): 512 bytes / 512 bytes</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">I/O size (minimum/optimal): 512 bytes / 512 bytes</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Disk identifier: 0x00000000</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Device Boot Start End Blocks Id System</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/sdb1 1 61 489951 8e Linux LVM</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/sdb2 62 261 1606500 5 Extended</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/sdb5 62 122 489951 8e Linux LVM</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/sdb6 123 261 1116486 8e Linux LVM</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Еще раз. Пример я привожу с виртуальной машины, чего и вам советую на этапе обучения. </div><div style="margin-bottom: 0cm;">Я создал три раздела для работы с <span lang="en-US">LVM. </span><span lang="ru-RU">Сколько их создавать и какого размера решает сам администратор. Например, никто не мешает отдать целиком весь диск (/</span><span lang="en-US">dev/sdb </span><span lang="ru-RU">в данном случае) под власть </span><span lang="en-US">LVM. </span><span lang="ru-RU">В том, как это сейчас сделал я, смысла искать не стоит :). Мой пример преследует только цели демонстрации работы с </span><span lang="en-US">LVM.</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><b>ВНИМАНИЕ! Форматировать созданные разделы НЕ надо!</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующее, что мы должны сделать - это инициализировать созданные разделы как физические тома:</div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvcreate /dev/sdb1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Physical volume "/dev/sdb1" successfully created</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvcreate /dev/sdb5</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Physical volume "/dev/sdb5" successfully created</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvcreate /dev/sdb6</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Physical volume "/dev/sdb6" successfully created</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Если нет сообщений об ошибках, можно смело шагать вперед. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующий шаг - это создание группы томов. Делается это командой <span lang="en-US">vgcreate (</span><span lang="ru-RU">еще раз подчеркиваю похожесть названия утилит для работы с </span><span lang="en-US">LVM</span><span lang="ru-RU">). Самое трудное тут - это придумать имя группы томов, которое будет отражать ее назначение:</span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgcreate fileserver /dev/sdb1 /dev/sdb5</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Volume group "fileserver" successfully created</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="font-family: inherit; margin-bottom: 0cm;"><span lang="ru-RU">Аргументы </span><span lang="en-US">vgcreate </span><span lang="ru-RU">это название группы томов (</span><span lang="en-US">fileserver) </span><span lang="ru-RU">и те физические тома, которые мы включаем в эту группу. В данном случае я включил в нее только</span><span lang="ru-RU"> </span><span style="font-size: small;"><span lang="ru-RU">/dev/sdb1 /dev/sdb5, что нам и покажет утилита </span></span><span style="font-size: small;"><span lang="en-US">pvscan:</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvscan </span></span> </div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb1 VG fileserver lvm2 [476.00 MiB / 476.00 MiB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb5 VG fileserver lvm2 [476.00 MiB / 476.00 MiB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb6 lvm2 [1.06 GiB]</span></span></div><div lang="en-US" style="margin-bottom: 0cm;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Здесь мы видим созданные нами физические тома, их размер и к какой группе томов они относятся. Последний физический том (/<span lang="en-US">dev/sdb6</span>) у нас пока сам по себе. Для обнаружения наличия групп томов <span lang="en-US">LVM </span>(это нужно, например, если вы загрузились с <span lang="en-US">Live CD, </span>который не активирует <span lang="en-US">LVM </span>по умолчанию) есть аналогичная команда - <span lang="en-US">vgscan:</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgscan </span></span> </div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Reading all physical volumes. This may take a while...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Found volume group "fileserver" using metadata type lvm2</span></span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Активировать неработающий <span lang="en-US">LVM </span>можно командой <span lang="en-US">vgchange -ay:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgchange -ay</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">0 logical volume(s) in volume group "fileserver" now active</span></span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Это все для того же примера с <span lang="en-US">LiveCD. </span>Сейчас это делать было не обязательно. Вывод приведенной команды показывает наличие отсутствия логических томов, значит сейчас самое время создать их :). Для создания логических томов испольузется команда <span lang="en-US">lvcreate:</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvcreate -L 300M -n samba fileserver</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Logical volume "samba" created</span></span></div><div lang="en-US" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Вуаля! Вы только что создали свой первый логический том. Синтаксис команды прост до безобразия:</div><ul style="font-family: inherit;"><li><div lang="ru-RU" style="margin-bottom: 0cm;">ключ -<span lang="en-US">L </span>указывает размер создаваемого тома. Поддерживаются суффиксы <span lang="en-US">K (</span>килобайты<span lang="en-US">), M (</span>мегабайты),<span lang="en-US"> G </span>(гигабайты).</div></li>
<li><div lang="en-US" style="margin-bottom: 0cm;"><span lang="ru-RU">ключ -</span>n <span lang="ru-RU">указывает название для тома (</span>samba <span lang="ru-RU">в данном случае)</span></div></li>
<li><div lang="ru-RU" style="margin-bottom: 0cm;">последний аргумент <span lang="en-US">fileserver </span>указывает группу томов, в которой мы создаем логический том (теоретически, групп может быть несколько).</div></li>
</ul><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Что важно - логические тома именуются системой следующим образом: </div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">/<span lang="en-US">dev/</span>имя_группы_томов/имя_тома</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">В нашем примере это:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvscan </span></span> </div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">ACTIVE '/dev/fileserver/samba' [300.00 MiB] inherit</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Одно только это - хороший аргумент для использования <span lang="en-US">LVM. </span>Ведь не надо помнить что находится на /<span lang="en-US">dev/sda3, /dev/sdb5 </span>и т. п. Имена логических томов имеют вполне человеческое название (если их правильно назвать).</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Еще несколько замечаний.</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">В группе томов можно создать столько томов, сколько будет нужно. Но не больше, чем есть дискового пространства в этой группе томов. Посмотреть, сколько его у нас есть (и самое главное сколько его еще осталось) можно командой <span lang="en-US">vgdisplay:</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgdisplay fileserver</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">--- Volume group ---</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Name fileserver</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">System ID</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Format lvm2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Metadata Areas 2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Metadata Sequence No 2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Access read/write</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Status resizable</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">MAX LV 0</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Cur LV 1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Open LV 0</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Max PV 0</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Cur PV 2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Act PV 2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Size 952.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PE Size 4.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Total PE 238</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Alloc PE / Size 75 / 300.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Free PE / Size 163 / 652.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG UUID SZLgLK-b9V8-RiZV-gH5i-N0pA-2ppf-axLqfO</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Сейчас для нас тут самое ценное - это VG Size 952.00 MB (общий размер дискового пространства группы томов), <span style="font-weight: normal;">Alloc PE / Size 75 / 300.00 MB (уже выделенное для создания логических томов дисковое пространство), Free PE / Size 163 / 652.00 MB (свободное и еще не распределенное дисковое пространство - наш резерв).</span></div><div lang="ru-RU" style="font-family: inherit; font-weight: normal; margin-bottom: 0cm;"><br />
</div><div lang="en-US" style="font-family: inherit; margin-bottom: 0cm;"><span style="font-weight: normal;">PE </span><span lang="ru-RU"><span style="font-weight: normal;">тут - это физические экстенты. Они представляют собой нечто вроде кусков дискового пространства, на которые </span></span><span style="font-weight: normal;">LVM </span><span lang="ru-RU"><span style="font-weight: normal;">«нарезает» физические тома. Все размеры логических томов </span></span><span lang="ru-RU"><b>всегда</b></span><span lang="ru-RU"><span style="font-weight: normal;"> содержат целое число этих физических экстентов и </span></span><span lang="ru-RU"><b>всегда</b></span><span lang="ru-RU"><span style="font-weight: normal;"> кратны их размеру (как видно из приведенных цифр размер экстента - 4Мб).</span></span></div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Теперь созданный том можно отформатировать и примонтировать:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# mkdir /mnt/data</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# mkfs.ext4 /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# mount /dev/fileserver/samba /mnt/data/</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# df -h</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Filesystem Size Used Avail Use% Mounted on</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/mapper/fileserver-samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">291M 11M 266M 4% /mnt/data</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;">Как мы видим, наш логический том готов к использованию!</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Увеличение логических томов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Самая мощная возможность <span lang="en-US">LVM - </span><span lang="ru-RU">это то, что размеры логических томов можно менять на лету. Правда, чтобы их уменьшить, «полет» придется прервать (об этом ниже), а вот увеличение размеров томов - это практически безопасная операция.</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="ru-RU">Предположим, что нам перестало хватать места на нашем логическом томе </span><span style="font-family: Times New Roman,serif;"><span style="font-size: x-small;"><span lang="ru-RU">/dev/fileserver/samba.</span></span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;">Последовательность действий такая:</div><div style="margin-bottom: 0cm;"><span lang="ru-RU">1. Сначала нужно убедиться в наличии необходимого нам дискового пространства в группе томов. Делается это командой </span><span lang="en-US">vgdisplay. </span><span lang="ru-RU">Допустим, мы хотим добавить к нашему логическому тому еще 300 Мб. Как мы видим (см. вывод команды </span><span lang="en-US">vgdisplay </span><span lang="ru-RU">выше), у нас еще достаточно свободного места в группе.</span></div><div style="margin-bottom: 0cm;"><span lang="ru-RU">2. Увеличиваем логический том командой </span><span lang="en-US">lvextend:</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvextend -L +200M /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Extending logical volume samba to 500.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Logical volume samba successfully resized</span></span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Новый размер тома (ключ -<span lang="en-US">L) </span>можно указывать и в относительных единицах (как в примере), и в абсолютных.</div><div lang="ru-RU" style="margin-bottom: 0cm;">3. Если мы теперь посмотрим на вывод команды <span lang="en-US">df -h </span>мы увидим, что пока ничего не изменилось:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# df -h</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Filesystem Size Used Avail Use% Mounted on</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/mapper/fileserver-samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">291M 11M 266M 4% /mnt/data</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">несмотря на то, что <span lang="en-US">lvscan </span>показывает верный размер:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvscan</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">ACTIVE '/dev/fileserver/samba' [500.00 MB] inherit</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Это произошло потому, что мы увеличили размер логического тома, но пока «забыли» сказать об этом файловой системе, расположенной «этажом выше». Давайте же изменим размер файловой системы. Делается это командной <span lang="en-US">resize2fs </span><span lang="ru-RU">(для </span><span lang="en-US">ext2/ext3/ext4</span><span lang="ru-RU">) или </span><span lang="en-US">resize_reiserfs </span><span lang="ru-RU">для одноименной системы:</span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# resize2fs /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">resize2fs 1.41.5 (23-Apr-2009)</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Filesystem at /dev/fileserver/samba is mounted on /mnt/data; on-line resizing required</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">old desc_blocks = 2, new_desc_blocks = 2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Performing an on-line resize of /dev/fileserver/samba to 512000 (1k) blocks.</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">The filesystem on /dev/fileserver/samba is now 512000 blocks long.</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Теперь все правильно:</div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# df -h</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Filesystem Size Used Avail Use% Mounted on</span></span></div><div style="margin-bottom: 0cm;">...</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/mapper/fileserver-samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">485M 11M 450M 3% /mnt/data</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Обратите внимание, что все показанное производилось на смонтированной файловой системе. То есть, все операции не требуют остановки серверов, приостановки работы пользователей и т. п. </div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Уменьшение логических томов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Уменьшение размера логического тома уже не такая тривиальная операция. Она требует специального подхода, четкой последовательности действий и размонтирования файловой системы (по крайней мере на момент написания).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b><span style="color: red;">ВНИМАНИЕ! </span></b> </div><div style="margin-bottom: 0cm;"><b><span style="color: red;">Шаги 2 и 3 очень часто путают местами, что приводит к потере данных, хранящихся на логическом томе.</span></b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Делается это все так:</div><div style="margin-bottom: 0cm;">1. Размонтируем файловую систему: <span lang="en-US">umount /dev/fileserver/samba</span></div><div style="margin-bottom: 0cm;"><span lang="en-US">2. </span><span lang="ru-RU">Уменьшаем размер файловой системы. Для этого сначала сделаем проверку самой файловой системы. Утилита </span><span lang="en-US">resize2fs </span><span lang="ru-RU">не даст изменить размер до выполнения проверки. Конечно, у нее есть ключ </span><span lang="en-US">-f, </span><span lang="ru-RU">который заставит ее это сделать, но лучше перестраховаться и все-таки выполнить проверку:</span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# fsck.ext4 -f /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">e2fsck 1.41.5 (23-Apr-2009)</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Pass 1: Checking inodes, blocks, and sizes</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Pass 2: Checking directory structure</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Pass 3: Checking directory connectivity</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Pass 4: Checking reference counts</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Pass 5: Checking group summary information</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/fileserver/samba: 11/127512 files (0.0% non-contiguous), 26603/512000 blocks</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# resize2fs /dev/fileserver/samba 300M</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">resize2fs 1.41.5 (23-Apr-2009)</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Resizing the filesystem on /dev/fileserver/samba to 307200 (1k) blocks.</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">The filesystem on /dev/fileserver/samba is now 307200 blocks long</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">3. <b>Только</b> после корректного выполнения двух предыдущих шагов уменьшаем размер логического тома:</div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvreduce -L 300M /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">WARNING: Reducing active logical volume to 300.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">THIS MAY DESTROY YOUR DATA (filesystem etc.)</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Do you really want to reduce samba? [y/n]: y</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Reducing logical volume samba to 300.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Logical volume samba successfully resized</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">В качестве размера тома (ключ -<span lang="en-US">L</span><span lang="ru-RU">), как и в случае с </span><span lang="en-US">lvextend </span><span lang="ru-RU">можно указывать и абсолютные и относительные единицы. Здесь мы также видим страшное предупреждение о потере данных. Несмотря на это (если вы не используете тестовые версии программ), ваши данные будут в целости и сохранности (скорее всего :) , 100% гарантии вам все равно никто не даст).</span></div><div lang="ru-RU" style="margin-bottom: 0cm;">После этого монтируем файловую систему и смотрим что поменялось:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# mount /dev/fileserver/samba /mnt/data/</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# df -h</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Filesystem Size Used Avail Use% Mounted on</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">...</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/mapper/fileserver-samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">291M 11M 266M 4% /mnt/data</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Итак, если вы все делаете в указанной последовательности, вашим данным скорее всего ничего не грозит. Но лучше перед уменьшением тома все-таки сделать его резервную копию. Я сам многократно уменьшал физические тома без каких-либо потерь данных, но наличие резервной копии - это наличие резервной копии :).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Увеличение и уменьшение группы томов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующая возможность <span lang="en-US">LVM </span><span lang="ru-RU">- это возможность дополнять группу томов новыми физическими томами (например, если уже не хватает имеющихся) и выводить из группы не нужные больше физические тома (например, скорая поломка диска или замена оборудования). Лично я видел на форумах, что некоторые таким образом даже переносят работающую систему с одного диска на другой.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Давайте вернемся к нашему примеру. Допустим нам перестало хватать места в нашей группе томов и мы ее хотим дополнить новыми физическими томами. Делается это командой <span lang="en-US">vgextend:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgextend fileserver /dev/sdb6</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Volume group "fileserver" successfully extended</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgdisplay fileserver</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">--- Volume group ---</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Name fileserver</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">System ID</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Format lvm2</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Metadata Areas 3</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Metadata Sequence No 5</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Access read/write</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Status resizable</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">MAX LV 0</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Cur LV 1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Open LV 1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Max PV 0</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Cur PV 3</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Act PV 3</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG Size 1.99 GB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PE Size 4.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Total PE 510</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Alloc PE / Size 75 / 300.00 MB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Free PE / Size 435 / 1.70 GB</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">VG UUID SZLgLK-b9V8-RiZV-gH5i-N0pA-2ppf-axLqfO</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Как мы видим (выделено), пул дискового пространства, которым мы располагаем, увеличился. Теперь его тоже можно использовать для увеличения существующих логических томов данной группы и для создания новых.</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Следующая операция, которую тоже можно делать с <span lang="en-US">LVM</span> - это уменьшение группы томов. Прежде чем вывести физический том из группы - его необходимо освободить от данных. Первое, что тут следует сделать в данном случае - это убедиться, что дискового пространства, которое останется в группе, хватит для размещения этих данных. Разработчики <span lang="en-US">LVM </span>пока не владеют методами размещения данных в астральном пространстве, но работа над этим ведется :). Итак, посмотреть это можно командой <span lang="en-US">pvscan:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvscan</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb1 VG fileserver lvm2 [476.00 MB / 176.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 1.06 GB free]</span></span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Здесь мы видим, что реально сейчас используется только первый физический том - /<span lang="en-US">dev/sdb1. </span>И еще мы тут видим один интересный аспект работы <span lang="en-US">LVM: </span>если какой-то логический том можно разместить на отдельном физическом целиком - <span lang="en-US">LVM </span>выберет именно этот путь.<span lang="en-US"> </span> </div><div lang="ru-RU" style="margin-bottom: 0cm;">Кстати, под словом <span lang="en-US">free </span>команда <span lang="en-US">pvscan </span>подразумевает не свободное от данных пространство, а пространство не выделенное в логические тома. </div><div lang="ru-RU" style="margin-bottom: 0cm;">Итак, для освобождения физических томов от данных и размещения их на других физических томах <b>той же</b> группы есть команда <span lang="en-US">pvmove:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvmove /dev/sdb1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">/dev/sdb1: Moved: 100.0%</span></span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">По умолчанию данная программа требует только одного аргумента - имени освобождаемого тома. Также ей можно указать (вторым аргументом) и имя тома, на который нужно поместить данные. </div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Вывод команды <span lang="en-US">pvscan </span>теперь выглядит вот так:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvscan</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb1 VG fileserver lvm2 [476.00 MB / 476.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 788.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Как мы видим, теперь наш логический том «уехал» на другой раздел диска. Причем этот том смонтирован и с ним в этот момент могут работать пользователи.</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Убрать освобожденный том из группы можно командой <span lang="en-US">vgreduce:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# vgreduce fileserver /dev/sdb1</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Removed "/dev/sdb1" from volume group "fileserver"</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# pvscan</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb5 VG fileserver lvm2 [476.00 MB / 476.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb6 VG fileserver lvm2 [1.06 GB / 788.00 MB free]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">PV /dev/sdb1 lvm2 [478.47 MB]</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Теперь мы видим, что наш физический том /<span lang="en-US">dev/sdb1 «</span>осиротел» и больше не принадлежит ни одной группе.</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><b>Снапшоты/Снимки</b></div><div lang="ru-RU" style="margin-bottom: 0cm;">Следующая полезная возможность <span lang="en-US">LVM - </span>это снапшоты или снимки. Снимок - это как бы фотография дискового пространства оригинального тома. После выполнения снимка все изменения, происходящие на томе-оригинале, никак не видны на снимке. Все программы будут продолжать работать с оригинальным томом как ни в чем не бывало. </div><div lang="ru-RU" style="margin-bottom: 0cm;">Сферы применения снапшотов могут быть самыми разнообразными. Например, резервное копирование базы данных. Если не использовать <span lang="en-US">LVM </span>- базу данных необходимо останавливать, копировать ее файлы куда-нибудь для последующего резервного копирования, а затем запускать ее заново. То есть делать это придется в нерабочее время. С <span lang="en-US">LVM </span>все проще - следует сделать снимок раздела с файлами базы данных и уже можно начинать делать резервную копию. Остановка базы данных не нужна.</div><div lang="ru-RU" style="margin-bottom: 0cm;">Самая интересная особенность <span lang="en-US">LVM </span>при работе со снимками - это то, что снимок может занимать меньше дискового пространства, чем оригинал. Для этого используется режим <span lang="en-US">Copy-on-Write, </span>при котором реальное использование дискового пространства начинается только при изменении данных на томе-оригинале. То есть при попытке модификации файла на томе-оригинале неизмененный файл сначала сохраняется на томе-снимке, а уж затем модифицируется. </div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="color: red;">ВНИМАНИЕ! При заполнении тома-снимка до конца, происходит его уничтожение. То есть том продолжает существовать, но ни смонтировать его, ни просмотреть его содержимое (если он был смонтирован до этого) уже не получится. Эту особенность следует <b>обязательно</b> учитывать при задании размера тома-снимка в момент его создания.</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Создание снимка делается хорошо известной командой <span lang="en-US">lvcreate:</span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvcreate -s -L 100M -n backup /dev/fileserver/samba</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">Logical volume "backup" created</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Ключ -<span lang="en-US">s </span>указывает, что создаем мы именно снапшот, <span lang="en-US">-n </span>указывает имя создаваемого тома, а <span lang="en-US">/dev/fileserver/samba </span>показывает с какого именно тома мы делаем снимок.</div><div lang="ru-RU" style="margin-bottom: 0cm;">Команда <span lang="en-US">lvscan </span>покажет нам, что мы создали снапшот:</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">[root@localhost ~]# lvscan</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">ACTIVE Original '/dev/fileserver/samba' [300.00 MB] inherit</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">ACTIVE Snapshot '/dev/fileserver/backup' [100.00 MB] inherit</span></span></div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Теперь можете убедиться в том, что изменения, происходящие с оригиналом, никак не повлияют на снапшот.</div><div lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Полезные советы для работы с LVM</b></div><div style="margin-bottom: 0cm;">1. В руководстве по администрированию <span lang="en-US">RHEL </span><span lang="ru-RU">встретился один замечательный совет. При использовании </span><span lang="en-US">LVM </span><span lang="ru-RU">не следует стараться распределить все имеющееся дисковое пространство в логические тома. Гораздо лучше другой путь. При распределении дискового пространства следует сделать это по своему опыту, ориентируясь на минимально необходимые потребности пользователей системы или работающих сервисов. Оставшееся в группе пространство будет «горячим» резервом, который администратор сможет добавить при нехватке места. Как было видно выше - добавление дискового простраства (увеличение логических томов) операция легкая и быстрая, в отличие от уменьшения.</span></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;"><b>Полезные источники (которые было бы неплохо посмотреть):</b></div><div lang="ru-RU" style="margin-bottom: 0cm;"><a href="http://www.blogger.com/goog_1916868980">Сайт </a><span lang="en-US"><a href="http://xgu.ru/wiki/LVM">Xgu.ru</a></span><a href="http://xgu.ru/wiki/LVM"></a></div><div lang="ru-RU" style="margin-bottom: 0cm;"><span lang="en-US"><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/index.html">RHEL6 Logical_Volume_Manager_Administration</a></span><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Logical_Volume_Manager_Administration/index.html"></a></div><div lang="en-US" style="margin-bottom: 0cm;"><br />
</div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com17tag:blogger.com,1999:blog-2986307105622275526.post-44686642390860004912010-12-02T13:05:00.003+03:002010-12-10T13:09:14.289+03:00Краткое введение в программирование на Bash - часть II<div align="LEFT" style="font-family: inherit; font-style: normal; margin-bottom: 0cm;"><i>Выкладываю перевод второй часть статьи про введение в программирование на bash, начатое <a href="http://tux-the-penguin.blogspot.com/2010/10/bash-1.html">здесь</a>. </i></div><div align="LEFT" style="font-family: inherit; font-style: normal; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; font-style: normal; margin-bottom: 0cm;">В своей второй статье Гарольд продолжает свое первоклассное введение в программирование на bash. На этот раз он объясняет, как выполнять арифметические операции в скриптах bash, как определить функции в своих программах. Завершается статья введением в такие продвинутые вещи как чтение пользовательского ввода, обработка скриптом аргументов, перехватывание сигналов и обработка кодов завершения программ. </div><div align="LEFT" style="font-style: normal; margin-bottom: 0cm;"><a href="http://www.blogger.com/post-edit.g?blogID=2986307105622275526&postID=4468664239086000491" name="more-2665"></a> </div><a name='more'></a><br />
<br />
<div align="LEFT" style="font-family: inherit; font-style: normal; margin-bottom: 0cm;">Безусловно, результаты прочтения превзойдут все ожидания! После этой статьи вас уже нельзя будет назвать новичком. Ведь вы на пути к тому, чтоб называться мастером программирования на bash! </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="font-family: Liberation Serif,serif;">Арифметика и bash</span></b><span style="font-family: Liberation Serif,serif;"> </span> </div><div align="LEFT">bash позволяет выполнять арифметические операции. Как вы уже видели в предыдущей статье, арифметика выполняется с помощью команды <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">expr</span></span>. Однако, подобно команде <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">true</span></span>, этот вариант считается медленным. Причина кроется в том, что для использования <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">true</span></span> и <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">expr</span></span> оболочка должна предварительно запустить их. Лучше всего использовать встроенную в <span lang="en-US">bash </span>функцию, которая работает быстрее. Аналогично тому, что альтернативой <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">true</span></span> является команда ":", альтернатива <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">expr </span></span>- заключение арифметического выражения в конструкцию вида <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$((...))</span></span>. Будьте внимательны, она отличается от <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$(...</span></span>). Отличие тут в количестве скобок. Так давайте же испробуем это:</div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
x=8 # присваиваем x значение 8 <br />
y=4 # присваиваем y значение 4 </span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># результат сложения x и y сохраняем в z: <br />
z=$(($x + $y)) <br />
echo «Сумма $x и $y равна $z» </span></span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Как обычно, выбор используемого метода вычислений за вами. Если использование <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">expr</span></span> для вас более комфортно и привычнее, чем <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$((…))</span></span>, используйте его. </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">bash умеет выполнять сложение, вычитание, умножение, целочисленное деление и получение остатка от деления. Каждое арифметическое действие имеет соответствующий ему оператор: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><br />
<br />
<br />
<center> <table cellpadding="3" cellspacing="3"><col width="128*"></col> <col width="128*"></col> <tbody>
<tr bgcolor="#ebebeb"> <td style="border-color: rgb(236, 236, 236) -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: double none double double; border-width: 2.6pt medium 2.6pt 2.6pt; padding: 0.08cm 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">Действие</span></div></td> <td style="border: 2.6pt double rgb(236, 236, 236); padding: 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">Оператор</span></div></td> </tr>
<tr> <td style="border-color: -moz-use-text-color -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none none double double; border-width: medium medium 2.6pt 2.6pt; padding: 0cm 0cm 0.08cm 0.08cm;" width="50%"><div align="LEFT"><span style="font-family: Liberation Serif,serif;">Сложение</span></div></td> <td style="border-color: -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none double double; border-width: medium 2.6pt 2.6pt; padding: 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">+ </span> </div></td> </tr>
<tr> <td style="border-color: -moz-use-text-color -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none none double double; border-width: medium medium 2.6pt 2.6pt; padding: 0cm 0cm 0.08cm 0.08cm;" width="50%"><div align="LEFT"><span style="font-family: Liberation Serif,serif;">Вычитание </span> </div></td> <td style="border-color: -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none double double; border-width: medium 2.6pt 2.6pt; padding: 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">- </span> </div></td> </tr>
<tr> <td style="border-color: -moz-use-text-color -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none none double double; border-width: medium medium 2.6pt 2.6pt; padding: 0cm 0cm 0.08cm 0.08cm;" width="50%"><div align="LEFT"><span style="font-family: Liberation Serif,serif;">Умножение</span></div></td> <td style="border-color: -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none double double; border-width: medium 2.6pt 2.6pt; padding: 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">* </span> </div></td> </tr>
<tr> <td style="border-color: -moz-use-text-color -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none none double double; border-width: medium medium 2.6pt 2.6pt; padding: 0cm 0cm 0.08cm 0.08cm;" width="50%"><div align="LEFT"><span style="font-family: Liberation Serif,serif;">Целочисленное деление</span></div></td> <td style="border-color: -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none double double; border-width: medium 2.6pt 2.6pt; padding: 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">/ </span> </div></td> </tr>
<tr> <td style="border-color: -moz-use-text-color -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none none double double; border-width: medium medium 2.6pt 2.6pt; padding: 0cm 0cm 0.08cm 0.08cm;" width="50%"><div align="LEFT"><span style="font-family: Liberation Serif,serif;">Остаток от деления</span></div></td> <td style="border-color: -moz-use-text-color rgb(236, 236, 236) rgb(236, 236, 236); border-style: none double double; border-width: medium 2.6pt 2.6pt; padding: 0cm 0.08cm 0.08cm;" width="50%"><div align="CENTER"><span style="font-family: Liberation Serif,serif;">% </span> </div></td> </tr>
</tbody></table></center> <br />
<div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Большинство из вас должно быть знакомо с первыми четырьмя операциями. <span style="font-size: x-small;">Если вы не знаете, что такое деление по модулю, то это просто число равное остатку от деления одного целого числа на другое.</span><span style="font-size: x-small;"> Ниже приведен пример выполнения арифметических операций в bash:</span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
x=5 # устанавливаем x равным 5 <br />
y=3 # устанавливаем y равным 3</span></span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># сохраняем сумму x и y в переменную add<br />
add=$(($x + $y)) </span></span> </div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># сохраняем разность x и y в переменную sub</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">sub=$(($x – $y)) </span></span> </div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># умножаем x на y и сохраняем результат в переменную mul<br />
mul=$(($x * $y))</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
# в переменную div сохраняем результат деления x на y</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">div=$(($x / $y))</span></span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># получаем остаток от деления x на y и сохраняем его в переменную mod <br />
mod=$(($x % $y))</span></span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># печатаем ответы<br />
echo «Сумма равна: $add» <br />
echo «Разность равна $sub» <br />
echo «Произведение равно $mul» <br />
echo «Результат деления $div» <br />
echo «Остаток от деления $mod»</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Код, приведенный выше, можно было бы написать с использованием <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">expr</span></span>. Например, вместо <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">add=$(($x + $y))</span></span> мы могли бы использовать <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">add=$(expr $x + $y)</span></span> или <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">add=`expr $x + $y`</span></span>. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="font-family: Liberation Serif,serif;">Чтение ввод</span></b><b><span style="font-family: Liberation Serif,serif;"><b>а</b></span></b><span style="font-family: Liberation Serif,serif;"><b> пользователя</b></span></div><div align="LEFT">А теперь - самое интересное. Мы напишем свой скрипт так, что он будет взаимодействовать с пользователем, а пользователь с ним. Команда для получения данных от пользователя - <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">read</span></span>. Это встроенная в bash команда, сохраняющая ввод пользователя в указанной переменной: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
# спросить у пользователя его имя и поздороваться с ним <br />
echo -n “Введите свое имя: ” <br />
read user_name <br />
echo “Привет $user_name!”</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Переменная здесь - это user_name. Конечно, мы могли бы назвать ее как угодно. read прервет выполнение скрипта и будет ждать, пока пользователь введет что-нибудь и нажмет клавишу ENTER. Если клавиша ENTER была нажата без ввода чего-либо, read запустит следующую строку кода. Попробуйте это сделать. Ниже приведен тот же пример, только на этот раз мы </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">проверяем, вводит ли пользователь что-либо:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
# спрашиваем имя пользователя и выводим приветствие <br />
echo -n «Введите имя: » <br />
read user_name </span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># проверка ввода пользователя <br />
if [ -z «$user_name» ]; then <br />
echo «Вы не сказали мне свое имя!» <br />
exit<br />
fi <br />
echo «Привет $user_name!» </span></span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">В приведенном примере, если пользователь нажал ENTER и не ввел при этом ничего, наша программа напишет об этом и завершит свою работу. В противном случае она напечатает приветствие. Получение пользовательского ввода полезно для интерактивных программ, которые требуют от пользователя ввести какие-то данные. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="font-family: Liberation Serif,serif;">Функции</span></b><span style="font-family: Liberation Serif,serif;"> </span> </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Использование функций делает сопровождение своих скриптов проще. Проще говоря, это хороший способ разделить программу на более мелкие куски. Функция выполняет определенное действие и может возвращать то значение, какое вы пожелаете. Прежде чем продолжать, я приведу пример скрипта, написанного с использованием функции:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
# функция hello() печатает сообщение</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">hello()<br />
{ <br />
echo «Вы находитесь в функции hello()» <br />
}</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">echo «Вызываем функцию hello()…» <br />
hello</span></span><br />
<br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Попробуйте запустить код из примера выше. Функция hello() в нем имеет только одно предназначение - просто напечатать сообщение. Но, конечно же, они могут решать и более сложные задачи. Выше мы вызвали функцию hello(), используя строку:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">hello</span></span></div><div align="LEFT"><br />
</div><div align="LEFT">Когда запускается эта строка, bash ищет скрипт для строки <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">hello()</span></span>. Он находит его в начале файла и выполняет его содержимое. Функции всегда вызываются по своему имени, что мы и видели выше. При написании функции вы можете обьявить ее, просто указав <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">имя_функции()</span></span>, как это сделано выше, или если вы хотите сделать ее объявление более явным, можете объявить ее так: <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">function имя_функции()</span></span>. Ниже представлен альтернативный способ написания функции <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">hello()</span></span> :</div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">function hello() <br />
{<br />
echo «Вы находитесь в функции hello()» <br />
}</span></span></div><div align="LEFT"><br />
</div><div align="LEFT" style="font-family: inherit;">Функции имеют в имени пустые открывающую и закрывающую скобки: "()", за ними следует пара фигурных скобок: «{...}», содержащих тело функции. Другими словами, весь код функции заключен в эти фигурные скобки. Функции <b>всегда</b> должны быть предварительно объявлены до своего вызова. Давайте попробуем в приведенном выше примере вызвать функцию до ее объявления:</div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
echo «Вызов функции hello() …» <br />
hello <br />
# функция hello() просто выводит сообщение <br />
hello()<br />
{<br />
echo «Вы находитесь в функции привет ()» <br />
}</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Вот что мы получим, когда попытаемся запустить этот скрипт: </div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ ./hello.sh <br />
Вызов функции привет () ... <br />
./hello.sh: hello: command not found</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;"><br />
<span style="font-family: inherit;">Как видите, мы получили сообщение об ошибке. Поэтому стоит всегда размещать ваши функции в начале кода или, по крайней мере, непосредственно перед вызовом функции. Еще один пример использования функции:</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
# admin.sh – инструмент для администратора</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
# функция new_user () создает новую учетную запись пользователя <br />
new_user()<br />
{ <br />
echo «Подготовка к созданию новых пользователей ...» <br />
sleep 2</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"> # запускаем программу adduser<br />
adduser<br />
}</span></span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">echo «1. Добавить пользователя» <br />
echo «2. Выход»</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">echo «Укажите, что вы хотите сделать:" <br />
read choice<br />
case $choice in <br />
1) new_user # вызов функции new_user() <br />
;;<br />
*) exit <br />
;;<br />
esac</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Для того чтобы приведенный скрипт работал правильно, вам необходимо запустить его из-под пользователя root, т. к. иначе программа <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">adduser</span></span> не сможет создать новых пользователей. Надеюсь, этот пример (хоть он и краток) показывает положительный эффект от использования функций. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;"><b>Перехват сигналов</b></span></div><div align="LEFT">Вы можете использовать встроенную в bash программу <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap</span></span> для перехвата сигналов в своих программах. Это хороший способ изящно завершать работу программы. Например, если пользователь, когда ваша программа работает, нажмет CTRL-C - программе будет отправлен сигнал <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">interrupt </span></span>(<span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">SIGINT</span></span>, <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">signal (7)</span></span>), который завершит ее. <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap</span></span> позволит вам перехватить этот сигнал, что даст возможность либо продолжить выполнение программы, либо сообщить пользователю, что программа завершает работу. Синтаксис этой команды такой:</div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap action signal</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;">Здесь:</span></div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;">action - то, что вы хотите делать, когда сигнал получен;</span></div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;">signal - сигнал, на который стоит реагировать. </span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Список сигналов можно посмотреть с помощью команды <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap -l</span></span> . При указании сигналов в своих скриптах можно опустить первые три буквы названия сигнала, т. е. SIG. Например, сигнал прерывания это - SIGINT. В вашем скрипте, в качестве его имени, можно указать просто INT. Вы также можете использовать номер сигнала, указанный рядом с его именем. Например, числовое значение сигнала SIGINT - 2. Попробуйте написать и запустить приведенный ниже пример:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
# использование команды trap</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># перехватываем нажатие CTRL-C и запускаем функцию sorry() </span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap sorry INT</span></span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># function sorry() prints a message <br />
sorry()<br />
{<br />
echo «Извини меня, Дэйв. Я не могу этого сделать» <br />
sleep 3<br />
}</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># обратный отсчет от 10 до 1:</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">echo «Подготовка к уничтожению системы» <br />
for i in 10 9 8 7 6 5 4 3 2 1; do <br />
echo «Осталось $i секунд до уничтожения...» <br />
sleep 1<br />
done <br />
echo «Запуск программы уничтожения!»</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Наберите и запустите приведенный пример. Когда программа будет работать и вести обратный отсчет, нажмите CTRL-C. Это действие отправит программе сигнал прерывания - SIGINT. Тем не менее сигнал будет перехвачен командой <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap</span></span>, которая, в свою очередь, выполнит функцию <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">sorry()</span></span>. Вы можете заставить <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap</span></span> игнорировать сигнал, указав символ кавычек вместо указания действия. Также вы можете отключить ловушку с помощью тире: "-". Например:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># запускать функцию sorry(), если получен сигнал SIGINT <br />
trap sorry INT</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
# отключение ловушки <br />
trap – INT</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
# ничего не делать при получении сигнала SIGINT <br />
trap ” INT</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">Если вы отключаете ловушку, программа работает как обычно - при получении сигнала прерывается ее исполнение и она завершает работу. Когда вы говорите <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">trap</span></span> ничего не делать при получении сигнала - она делает именно это. Ничего. Программа будет продолжать работать, игнорируя сигнал. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b style="font-family: inherit;">Логические И и ИЛИ</b><span style="font-family: Liberation Serif,serif;"> </span> </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Вы уже видели, что такое управляющие структуры и как их использовать. Для решения тех же задач есть еще два способа. Это логическое И - "&&" и логическое "ИЛИ" - « || ». Логическое И используется следующим образом:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">выражение_1 && выражение_2</span></span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Сначала выполняется выражение, стоящее слева, если оно истинно, выполняется выражение, стоящее справа. Если выражение_1 возвращает ЛОЖЬ, то выражение_2 не будет выполнено. Если оба выражения возвращают ИСТИНУ, выполняется следующий набор команд. Если какое-либо из выражений не истинно, приведенное выражение считает ложным в целом. Другими словами, все работает так:</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit;">если выражение_1 истинно И выражение_2 истинно, тогда выполнять...</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><i><b>Примечание переводчика: </b>При работе с булевыми переменными ИСТИНА и ЛОЖЬ (<span lang="en-US">True </span><span lang="ru-RU">и </span><span lang="en-US">False), bash </span><span lang="ru-RU">ведет себя отлично от других языков программирования. В других языках 0 соответствует </span><span lang="en-US">False (</span><span lang="ru-RU">Ложь), а </span><span lang="en-US">1 - True (</span><span lang="ru-RU">Истина). В </span><span lang="en-US">bash </span><span lang="ru-RU">все </span><span lang="ru-RU"><b>наоборот</b></span><span lang="ru-RU">. Связано это с такой вещью, как коды завершения программ (см. ниже). </span></i> </div><div align="LEFT" lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><i>Об этом следует всегда помнить при написании своих скриптов!</i></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;">Пример использования:</span></div><div align="LEFT"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
x=5<br />
y=10 <br />
if [ "$x" -eq 5 ] && [ "$y" -eq 10 ]; then <br />
echo «Оба условия верны» <br />
else <br />
echo «Условия не верны» <br />
fi</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Здесь мы находим, что переменные х и у содержат именно те значения, которые мы проверям, поэтому проверяемые условия верны. Если вы измените значение с х = 5 на х = 12, а затем снова запустите программу, она выдаст фразу «Условия не верны». </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Логическое ИЛИ используется аналогичным образом. Разница лишь в том, что оно проверяет ошибочность выражения слева. Если это так - оно начинает выполнять следующий оператор:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">выражение_1 || выражение_2</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Данное выражение в псевдокоде выглядит так:</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit;">если выражение_1 истинно ИЛИ выражение_2 истинно, выполняем ... </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Таким образом, любой последующий код будет выполняться, если хотя бы одно из выражений истинно: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
x=3<br />
y=2 <br />
if [ "$x" -eq 5 ] || [ "$y" -eq 2 ]; then <br />
echo «Одно из условий истинно» <br />
else<br />
echo «Ни одно из условий не является истинным» <br />
fi</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Здесь вы видите, что только одно из выражений истинно. Попробуйте изменить значение у и повторно запустите программу. Вы увидите <span lang="ru-RU">сообщение</span>, что ни одно из выражений не является истинным. </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Аналогичная реализация условия с помощью оператора <span lang="en-US">if </span><span lang="ru-RU">будет большего размера, чем вариант с использованием логического И и ИЛИ, поскольку потребует дополнительного вложенного </span><span lang="en-US">if. </span><span lang="ru-RU">Ниже приведен код, реализующий тот же функционал, но с использованием оператора </span><span lang="en-US">if:</span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash <br />
x=5 <br />
y=10 <br />
if [ "$x" -eq 5 ]; then<br />
if [ "$y" -eq 10 ]; then <br />
echo «Оба условия верны<span lang="en-US">»</span> <br />
else <br />
echo «<span lang="ru-RU">Оба условия неверны</span>» <br />
fi<br />
fi </span></span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Приведенный код менее нагляден для чтения и требует для своего написания больших усилий. Но у вас остается возможность для избавления себя от всех этих трудностей путем использования операторов логических И и ИЛИ. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="font-family: Liberation Serif,serif;">Использование аргументов</span></b><span style="font-family: Liberation Serif,serif;"> </span> </div><div align="LEFT">Возможно, вы уже заметили, что большинство программ в Linux не интерактивны. Вы должны указать им какие-то параметры, в противном случае вы получите сообщение со списком возможных аргументов. Возьмем, к примеру, команду <span lang="en-US">more</span>. Если вы не <span lang="ru-RU">укажете</span> имя файла, она выдаст краткую справку по использованию программы. Ну и конечно же возможно сделать так, чтобы ваши скрипты также могли принимать аргументы. Для этого вам нужно знать что такое переменная вида <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$#</span></span>. В ней содержится общее количество аргументов, переданных программе. Например, если вы запустите программу следующим образом: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ что-то <span lang="ru-RU">параметр</span></span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT">то значение переменной <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$#</span></span> будет равно единице, потому что программе передан только один аргумент. Для двух аргументов ее значение будет равно двум и так далее. Также стоит знать о том, что каждый параметр командной строки (включая даже имя скрипта!!!) может также сохраняться в соответствующие переменные. Так, имя нашей программы <span style="font-family: Liberation Mono,monospace;">что-то</span> будет сохранено в переменной <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$0</span></span>. Аргумент программы <span style="font-family: Liberation Mono,monospace;">параметр</span> сохранится в переменной <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$1</span></span>. Вы можете использовать до 9 переменных, начиная с <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$0</span></span> (обозначающего имя скрипта), а затем <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$1-$9</span></span>, обозначающие аргументы програмы. Давайте посмотрим, как это работает:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash<br />
# скрипт, печатающий свои аргументы<br />
# проверяем, переданы ли скрипту аргументы:</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
if [ "$#" -ne 1 ]; then <br />
echo «корректный запуск программы: <span lang="en-US">$</span>0 <параметр>» <br />
fi </span></span> </div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">echo «Переданный параметр - $1»</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Приведенный скрипт ожидает один и только один аргумент для своего запуска. Если вы не укажете ему аргументов - будет выводиться справочная информация. В противном случае, если при запуске указан какой-то аргумент - он передается в наш скрипт, который выведет его на экран. Напоминаю, что $0 это имя скрипта. Именно поэтому эта переменная используется в справочном сообщении. Последняя строка выводит переданный программе параметр - $1. </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><b>Работа с временными файлами</b></div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Довольно часто вам будет необходимо создавать временные файлы. Обычно это файл, в котором хранятся какие-то используемые скриптом данные либо что-то еще. Как только работа скрипта будет завершена, этот файл нужно удалить. При создании такого файла вы должны задать его имя. Проблема тут кроется в том, что файл, создаваемый вами, не должен случайно переписать уже существующий в той же директории, если их имена совпадут. Для того чтобы создать временный файл с гарантированно уникальным именем, вам нужно использовать символ <span lang="en-US">«$$»</span> символ, либо <span lang="ru-RU">как </span>префикс, либо как суффикс к имени создаваемого файла. Предположим, вы хотите создать временный файл с именем <span lang="en-US">h</span>ello. Возможно, что у пользователя, который работает с нашим скриптом, уже есть файл с таким именем. Создавая файл с именем <span lang="en-US">h</span>ello.$$ <span lang="ru-RU">и</span>ли <span lang="en-US">$$hello,</span> вы создадите файл с уникальным именем. Например:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ touch hello <br />
$ ls<br />
hello</span></span></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
$ touch hello.$$ <br />
$ ls <br />
hello hello.689</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;"><br />
<span style="font-family: inherit;">Примерно так и будет выглядеть имя вашего временного файла. </span></span> </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><i><b>Примечание переводчика: </b>В переменной <span lang="en-US">$$ </span><span lang="ru-RU">обычно хранится следующий свободный </span><span lang="en-US">PID</span><span lang="ru-RU">. Именно поэтому использование такой переменной гарантирует уникальные имена для вновь создаваемых файлов.</span></i></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><b>Коды завершения программ</b> </div><div align="LEFT" style="font-family: inherit;">Большинство программ возвращают в операционную систему какое-то число, показывающее, насколько удачно программа завершила свою работу. Например, <span lang="en-US">man-</span><span lang="ru-RU">страница </span><span style="font-size: x-small;"><span lang="en-US">grep</span></span><span lang="en-US"> </span><span lang="ru-RU">говорит, что </span><span style="font-size: x-small;"><span lang="en-US">grep</span></span><span lang="en-US"> </span>вернет 0, если заданный шаблон найден, и 1, если совпадений не найдено. Почему нас так волнуют эти коды завершения? По разным причинам. Допустим, мы хотим проверить - есть ли пользователь с данным именем в системе? Один из способов сделать - использовать команду вида: <span style="font-size: x-small;"><span lang="en-US">grep имя_пользователя </span></span><span style="font-size: x-small;"><span lang="ru-RU">/</span></span><span style="font-size: x-small;"><span lang="en-US">etc/passwd</span></span><span lang="en-US"> </span>. <span lang="ru-RU">Допустим, имя пользователя - </span><span lang="en-US">vasya:</span><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"></div><div align="LEFT"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ grep <span lang="en-US">vasya</span> /etc/passwd <br />
$</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span lang="ru-RU">Ничего не вывелось</span>. Это означает, что <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><span lang="en-US">grep</span></span></span> не <span lang="ru-RU">обнаружила заданного пользователя</span>. Но для нас было бы значительно лучше получить сообщение об этом. Это как раз тот случай, когда нужно использовать код завершения программы. Он сохраняется в переменной с именем <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$?</span></span> . Посмотрим на следующий фрагмент кода:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash<br />
# ищем пользователя vasya в /etc/passwd,</span></span></div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"># весь вывод перенаправляем в /dev/null</span></span></div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">grep vasya /etc/passwd > /dev/null 2>&1 </span></span> </div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
# смотрим код завершения и действуем по обстоятельствам:<br />
if [ "$? -eq 0 ]; then <br />
echo «Пользователь vasya найден» <br />
exit<br />
else <br />
echo «Пользователь vasya не найден» <br />
fi</span></span></div><div align="LEFT"><br />
</div><div align="LEFT">Теперь, когда вы запустите скрипт, он будет перехватывать и анализировать код завершения <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><span lang="en-US">grep</span></span></span>. Если он равен 0, <span lang="ru-RU">значит пользователь найден и мы выводим </span>соответствующее сообщение об ошибке. В противном случае скрипт напечатает, что пользователя найти не получилось. Это очень простой способ использования получаемого кода завершения программы. По мере практики вы сами будете понимать, для решения какой задачи вам нужно использовать эти коды завершения. </div><div align="LEFT">Если вас озадачивает конструкция вида <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><span lang="en-US">2>&1</span></span></span>, тут все довольно просто. В Linux этими числами обозначаются дескрипторы файлов. 0 - стандартный ввод (по умолчанию, клавиатура), 1 стандартный вывод (по умолчанию, монитор) и 2 - вывод стандартных ошибок (по умолчанию, монитор). Весь вывод команды идет в файл с дескриптором 1, любые ошибки отправляются в файл с дескриптором 2. Если вы не хотите, чтобы сообщения об ошибках появлялись на экране, просто перенаправьте его в <span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><span lang="en-US">/dev/null</span></span></span><span lang="en-US">.</span> <span lang="ru-RU">Но это не прекратит вывод на экран обычной </span>информации. Например, если у вас нет разрешения на чтение домашнего каталого другого пользователя, вы не сможете просмотреть список его содержимого:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ ls /root <br />
ls: /root: Permission denied</span></span></div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;"><br />
$ ls /root 2> /dev/null <br />
$ </span></span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Как видите, во второй раз информация об ошибке не была напечатана. Все то же самое относится к другим программам и дескриптору 1. Если вы не хотите видеть нормальный выход из программы, то есть хотите, чтобы она работала молча, вы можете перенаправить в /<span lang="en-US">dev/null </span><span lang="ru-RU">и его</span>. Теперь, если вы не хотите видеть вообще никакого вывода программы - добавьте в нее следующее: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">$ ls /root > /dev/null 2>&1</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Это означает, что программа будет отправлять свой вывод и ошибки, которые возникают в <span lang="en-US">/dev/null, </span><span lang="ru-RU">т. е. будет работать молча, что нам и нужно.</span></div><div align="LEFT" lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="ru-RU" style="margin-bottom: 0cm;"></div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><i><span lang="ru-RU"><b>Примечание переводчика:</b></span><span lang="ru-RU"> на самом деле все работает так:</span></i></div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><i><span lang="ru-RU">Конструкция вида 2>&1 перенаправляет вывод ошибок (дескриптор 2) на стандартный вывод (дескриптор 1). Знак «загогулины» - </span><span lang="en-US">& </span><span lang="ru-RU">- тут нужен для того, чтобы пояснить </span><span lang="en-US">bash, </span><span lang="ru-RU">что вы имеете в виду не файл с именем 1, а именно файл с дескриптором 1, т. е. стандартный вывод. Если вы укажете что-то вроде:</span></i></div><div align="LEFT" lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="ru-RU" style="margin-bottom: 0cm;"><span style="font-family: Liberation Serif,serif;"><i><span lang="en-US">$ </span>команда <span lang="en-US">2>1</span></i></span></div><div align="LEFT" lang="en-US" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="ru-RU" style="font-family: inherit; margin-bottom: 0cm;"><i>то стандартный вывод ошибок пойдет в файл с именем 1. Конструкцией 2>&1 мы «сцепляем» вывод команды и вывод ошибок вместе. А первым перенаправлением (первым символом <span lang="en-US">> </span>в коментируемой команде) мы отправляем весь вывод команды в /<span lang="en-US">dev/null. </span>Чтобы дополнительно понять, как все работает, можете поэкспериментировать, убрав 2>&1 из команды и перезапустив ее.</i></div><div align="LEFT" lang="ru-RU" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">А что если вы хотите, чтобы ваш скрипт тоже возвращал какой-нибудь код завершения при выходе? Команда <span lang="en-US">exit </span><span lang="ru-RU">может </span>принимать один аргумент - тот самый код завершения. Обычно число 0 используется для обозначения успешного завершения работы. Число, отличное от нуля означает, что произошла какая-то ошибка. Какое число возвращать - решает сам програмист. Посмотрим приведенный пример: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" lang="en-US"><span style="font-family: Liberation Mono,monospace;"><span style="font-size: x-small;">#!/bin/bash<br />
if [ -f "/etc/passwd" ]; then<br />
echo «Файл passwd существует» <br />
exit 0<br />
else <br />
echo «Нет такого файла» <br />
exit 1 <br />
fi</span></span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Задавая значение кода завершения, вы делаете возможным для других скриптов, использующих ваш скрипт, анализировать результаты его работы. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><b>Переносимость ваших скриптов на </b><b><span lang="en-US">bash</span></b></div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">При написании ваших собственных скриптов важно делать это так, чтобы они оставались переносимыми. Термин «переносимость» означает, что если ваш скрипт работает под Linux, то он должен работать в другой <span lang="en-US">Unix-</span>системе с малыми изменениями или вообще без них. <span lang="ru-RU">Ч</span>тобы добиться этого, вы должны быть осторожны при вызове внешних программ. Разработчик должен при этом ответить на вопрос: "Будет ли эта программа доступна на другом варианте Unix?" (<i>и что более важно - будет ли она там работать </i><i><b>также</b></i><i>, как на </i><span lang="en-US"><i>Linux </i></span><span lang="ru-RU"><i>- прим. перев.</i></span>). Допустим, вы используете программу <span lang="en-US">foo, </span><span lang="ru-RU">которая на </span><span lang="en-US">Linux </span><span lang="ru-RU">работает аналогично </span><span lang="en-US">echo, </span><span lang="ru-RU">поэтому вместо </span><span lang="en-US">echo </span><span lang="ru-RU">вы используете ее</span><span lang="en-US">. </span><span lang="ru-RU">Но если ваш скрипт будет работать на других системах, где нет программы </span><span lang="en-US">foo, </span><span lang="ru-RU">он начнет выдавать сообщения об ошибках. </span>Кроме того, имейте в виду, что раз<span lang="ru-RU">ные</span> версии <span lang="en-US">b</span>ash могут иметь разные методы для одних и тех же операций. Например, конструкция VAR = <span lang="en-US">$(ps)</span> делает то же самое, что <span lang="ru-RU">и </span>VAR = <span lang="en-US">`ps`</span>, но <span lang="ru-RU">на самом деле </span>старые версии оболочек, например Bourne <span lang="en-US">shell (sh)</span>, признают только последний синтаксис. Если вы собираетесь распространять свои скрипты, обязательно включайте текстовый файл README, который будет предупреждать пользователя о любых сюрпризах, в том числе и о том, что скрипт проверялся на такой-то версии <span lang="en-US">b</span>ash. Желательно также указать, какие программы и библиотеки (и каких версий) будут нужны скрипту. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><i><b>Примечание переводчика: </b></i><i>Для проверки наличия в скрипте команд и функций специфичных для bash в ALT Linux есть пакет <a href="http://prometheus.altlinux.org/en/srpm/Sisyphus/checkbashisms">checkbashisms</a>, который взят из пакета devscripts Debian.</i></div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;"><b>Заключение</b> </div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Пришла пора завершить это краткое введение в написание скриптов на bash. Однако ваше обучение этому умению еще не завершено. В тоже время, написанного вполне достаточно, чтобы вы могли модифицировать имеющиеся скрипты и писать собственные. Если вы действительно хотите стать мастером написания скриптов на bash, я рекомендую приобрести книгу «Learning the bash shell» (Изучение оболочки bash), 2-е издание издательства O'Reilly & Associates, Inc.</div><div align="LEFT" style="font-family: inherit; margin-bottom: 0cm;">Скрипты на bash идеально подходят для повседневной работы по администрированию. Но если вы планируете что-то более серьезное, следует использовать гораздо более мощный язык, такой как C или Perl. Удачи!</div><div style="margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="margin-bottom: 0cm;"><a href="http://learnbyexamples.org/linux/bash-programming-tutorial-2-more-about-bash-programming.html">Ссылка на оригинал</a><br />
<br />
<div style="text-align: left;">Также опубликована <a href="http://freeschool.altlinux.ru/?p=3610">здесь</a> </div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com1tag:blogger.com,1999:blog-2986307105622275526.post-87795132169692098942010-10-11T20:35:00.007+04:002010-12-10T13:00:51.061+03:00Краткое введение в программирование на Bash - часть I<style type="text/css">
p { margin-bottom: 0.21cm; }
</style> <br />
<div align="LEFT" style="margin-bottom: 0cm;"><i>Данное введение в программирование на bash прельстило меня своей краткостью и содержательностью. В то же время я изменил некоторые примеры, потому что они делали слегка не то, что ожидается новичками. Начинающим текст будет полезен как отправная точка для начала написания скриптов. Опытным - как справочник. Удачного чтения!</i><br />
<i>Выражаю также благодарность Владимиру Черному (начальнику отдела образовательных проектов ALT Linux) за внесенные в текст правки. </i></div><div align="LEFT" style="margin-bottom: 0cm;"></div><a name='more'></a><br />
<br />
<div align="LEFT" style="margin-bottom: 0cm;">Тема программирования на bash из разряда тех, которые могут быть рассмотрены и в пару, и в сотни страниц. Гарольд Родригес (Harold Rodriguez) объясняет эту тему в приведенном ниже руководстве из двух частей. Его прекрасный и яркий стиль позволил ему охватить все существенные черты программирования на bash буквально на нескольких страницах. </div><div align="LEFT" style="margin-bottom: 0cm;">Если вы никогда не программировали на bash ранее - сейчас самое время начать. Даже если у вас мало знаний о том, что такое bash, вы вполне можете посмотреть на множество интересных скриптов, разбираемых Гарольдом. </div><div align="LEFT" style="margin-bottom: 0cm;"><a href="http://www.blogger.com/post-edit.g?blogID=2986307105622275526&postID=8779513216969209894" name="more-2662"></a></div><div align="LEFT" style="margin-bottom: 0cm;"><b>Введение</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Подобно остальным оболочкам, доступным в Linux, Bourne Again shell (bash) является не только, собственно, командной оболочкой, но и языком для написания сценариев (скриптов) (<i>слова «сценарий» и «скрипт» обычно являются синонимами - прим. перев.</i>). Скрипты позволяют в полной мере использовать возможности оболочки и автоматизировать множество задач, которые иначе потребуют для своего выполнения ввода множества команд. Многие программы, работающие внутри вашего компьютера с Linux - это скрипты. Если вы захотите узнать, как они работают, или изменить их, важно понимать их синтаксис и семантику. Кроме того, понимая язык bash, вы сможете писать свои собственные программы, чтобы выполнять разные задачи теми способами, которые выберете сами. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Так все-таки программирование (programming) или написание скриптов (scripting)?</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Новичков в программировании, как правило, озадачивает разница между, собственно, программированием и языками скриптов. Программы, написанные на каких-то языках программирования, обычно гораздо более мощные по возможностям и работают намного быстрее, чем программы, написанные на языках сценариев. Примеры языков программирования - C, C ++ и Java. Создание программы на каком-либо языке программирования обычно начинается с написания исходного кода (текстовый файл, содержащий инструкции о том, как будет работать окончательная программа), затем его необходимо скомпилировать (собрать) в исполняемый файл. Этот исполняемый файл не так легко переносить между различными операционными системами. Например, если вы напишете на программу на C для Linux, вы не сможете запустить ее в Windows. Чтобы сделать это, вам придется перекомпилировать исходный код под Windows. Написание скрипта также начинается с написания исходного кода, который не компилируется в исполняемый файл. Вместо этого интерпретатор оболочки последовательно читает инструкции в файле исходного кода и выполняет их. К сожалению, поскольку интерпретатор должен читать каждую инструкцию, скорость исполнения скрипта обычно медленнее (<i>намного медленнее - прим. перев.</i>), чем у скомпилированной программы. Основным преимуществом скриптов является то, что вы можете легко переносить исходный файл в любую операционную систему и просто запускать их (е<i>стественно при наличии интерпретатора для это</i><i>й</i><i> операционной системы - прим. перев.</i>). </div><div align="LEFT" style="margin-bottom: 0cm;">Bash - это язык сценариев. Он отлично подходит для написания небольших программ, но если вы планируете делать какие-то мощные приложения, выбор для этого какого-либо языка программирования предпочтительнее для вас. Другие примеры скриптовых языков Perl, Lisp, и Tcl. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="color: black;">Что нужно знать для написания своих </span></b><b><span style="color: black;">скриптов</span></b><b><span style="color: black;">?</span></b><span style="color: maroon;"> </span> </div><div align="LEFT" style="margin-bottom: 0cm;">Для этого необходимо знание основных команд Linux. Например, вы должны знать, как копировать, перемещать и создавать новые файлы. Обязательно умение использовать какой-либо текстовый редактор. Существуют три основных текстовых редактора в Linux: vi, emacs и pico (<i>автор еще забыл nano, который лучше всего подходит начинающим, если не учитывать еще и mcedit. - Прим. перев.</i>). Если вы не знакомы с vi или emacs, используйте pico или другой простой в использовании текстовый редактор. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b><span style="color: #b84747;">Внимание!!!</span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><span style="color: #b84747;">Не следует учиться программировать на bash из-под пользователя <b>root</b>! В противном случае - может случиться все что угодно! Я не буду нести никакой ответственности, если вы случайно допустите ошибку и испортите вашу систему. Вы предупреждены! Используйте учетную запись обычного пользователя без каких-либо привилегий. Вы можете даже создать нового пользователя только для обучения написанию сценариев. Таким образом, худшее, что произойдет в данном случае — это исчезновение данных в каталоге этого пользователя. </span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Ваша первая программа на Bash</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Нашей первой программой будет классическая «Hello World». Конечно, если уже вы программировали раньше, вы должно быть устали от таких примеров. Однако это - традиция и кто я такой, чтобы менять ее? Программа «Hello World» просто выводит слова «Hello World» на экран. Запустите текстовый редактор и наберите в нем следующее: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><span style="font-family: Nimbus Mono L,monospace;">#!/bin/bash <br />
echo "Hello World"</span></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Первая строка сообщает Linux использовать интерпретатор bash для запуска этого скрипта. В этом случае, bash находится в каталоге /bin. Если у вас bash находится где-то еще, сделайте соответствующие изменения в данной строке. Явное указание интерпретатора очень важно, удостоверьтесь еще раз, что указали его, поскольку данная строка говорит Linux какой именно интерпретатор нужно использовать для выполнения инструкций в скрипте. Следующее, что нужно сделать, это сохранить скрипт. Назовем его hello.sh. После этого вам нужно сделать скрипт исполняемым:</div><div align="LEFT"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ chmod </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">u+x</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> hello.sh</span></span></b> </div><div align="LEFT"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Если вы не понимаете, что делает эта команда, прочтите справочную страницу команды chmod:</div><div align="LEFT"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> man chmod</span></span></b></div><div align="LEFT"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Как только это будет сделано, вы сможете запустить программу, просто набрав ее название: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ ./hello.sh</span></span></b></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">Hello World</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Получилось! Это ваша первая программа! И хотя она скучная и не делает ничего полезного, она показывает как именно все работает. Просто запомните эту простую последовательность действий: напишите код, сохраните файл, сделайте его исполняемым с помощью chmod и запустите. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Команды, команды и команды</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Что именно делает ваша первая программа? Она печатает на экран слова «Hello World». Каким образом она это делает? Она использует команды. В нашей программе мы написали только одну команду - echo «Hello World». Что именно тут команда? echo. Эта программа принимает один аргумент и печатает его на экран. </div><div align="LEFT" style="margin-bottom: 0cm;">Аргументом является все, что следует после ввода названия программы. В нашем случае «Hello World» это и есть аргумент, переданный команде echo. При вводе команды ls /home/, аргументом команды ls является /home. Ну и что это все означает? А означает это то, что если у вас есть программа, которая принимает какой-то аргумент и выводит что-то на экран, вы можете использовать ее вместо echo. Предположим, что у нас есть программа под названием foo. Эта программа будет принимать один аргумент (строку из слов) и печатать их на экран. Тогда мы можем переписать нашу программу вот так:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
foo </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">"</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">Hello World</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">"</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Сохраните ее, сделайте исполняемой и перезапустите ее (<i>примечание для новичков - этот пример работать не будет. - Прим. перев.</i>): </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ ./hello<br />
Hello World</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Точно такой же результат. Использовался ли тут какой-то уникальный код? Нет. Написали ли мы какую-то программу? Нет, если только вы не являетесь автором программы echo. Все, что вы сделали - просто встроили программу echo в наш скрипт и снабдили ее аргументом. Примером альтернативы использования команды echo в реальном программировании является команда printf, которая имеет больше возможностей, если вы знакомы с программированием на C. Ну и на самом деле, точно такой же результат можно было бы получить и без написания скрипта: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ echo "Hello World” <br />
Hello World </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Написание скриптов на bash предлагает широкий спектр возможностей и этому легко научиться. Как вы только что могли видеть, вы используете другие команды Linux, чтобы писать ваши собственные скрипты. Ваша программа-оболочка представляет собой несколько других программ, собранных вместе для выполнения какой-либо задачи. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
<b>Другие полезные программы</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Сейчас мы напишем программу, которая переместит все файлы в каталог, удалит его вместе с содержимым, а затем создаст это каталог заново. Это может быть сделано с помощью следующих команд (<span style="color: #b84747;"><i>В примере, приведенном в оригинале автор показывает, что не зря рекомендовал делать приведенные упражнения под специально созданным пользователем. Результатом выполнения данной последовательности команд будет чистый каталог, в котором вы работаете. Скорее всего это будет ваша домашняя директория. Поэтому, если вы НЕ хотите удаления всех файлов в ней - НЕ выполняйте команды </i></span><span style="color: #b84747;"><i>из оригинала статьи</i></span><span style="color: #b84747;"><i>. А лучше последуйте совету автора и создайте отдельного пользователя специально для тренировки написания скриптов. </i></span><span style="color: #b84747;"><i>Этот пример я немного расширил </i></span><span style="color: #b84747;"><i>и теперь он не такой опасный</i></span><span style="color: #b84747;"><i>. </i></span><span style="color: #b84747;"><i>Прим. перев.</i></span>):</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">touch file1</span></span></b></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ mkdir trash <br />
$ mv </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">file1</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> trash <br />
$ rm -rf trash <br />
$ mkdir trash</span></span></b><span style="font-weight: normal;"> </span> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
Вместо того, чтобы вводить это все в интерактивном режиме, напишем скрипт, выполняющий эти команды:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash</span></span></b></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">touch file1 <br />
mkdir trash <br />
mv </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">file1</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> trash <br />
rm -rf trash <br />
mkdir trash <br />
echo “</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">Ф</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">айл удален!</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">”</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Сохраните его под именем clean.sh и теперь все, что нужно сделать - это запустить его. Он переместит все файлы в каталог, удалит его, создаст его заново каталог и даже напечатает сообщение об удалении файлов. Запомните, если вы обнаружите, что регулярно делаете нечто требующее набора одной и той же последовательности команд - это вполне можно автоматизировать написанием скрипта. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Комментарии</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Комментарии помогают сделать ваш код более читабельным. Они не влияют на то, что выводит программа. Они написаны специально для того, чтобы вы их прочли. Все комментарии в Bash начинаются с хэш-символа #, за исключением первой строки (#!/bin/bash), имеющей специальное назначение. Первая строка - не комментарий. Возьмем для примера следующий код:</div><div align="LEFT"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
# Эта программа считает от 1 до 10: <br />
for i in 1 2 3 4 5 6 7 8 9 10; do <br />
echo $i<br />
done </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Даже если вы пока не понимаете скрипты на Bash, вы сразу же поймете, что делает приведенный выше пример, благодаря комментарию. Комментирование кода - хорошая практика. Со временем вы поймете, что, если вам нужно будет поддерживать ваши скрипты, то при наличии комментированного кода - делать это станет легче. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Переменные</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Переменные это просто «контейнеры», которые содержат некоторые значения. Создавать их нужно по многим причинам. Вам нужно будет как-то сохранять вводимые пользователем данные, аргументы или числовые величины. Например: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=12 <br />
echo ”</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">Значение переменной</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> x </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">-</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> $x”</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Здесь мы присвоили переменной x значение 12. Строка echo “Значение переменной х - $x” напечатает текущее значение x. При определении переменной не допускается наличие каких-то пробелов между именем переменной и оператором присваивания: "=". Синтаксис следующий: </div><div align="LEFT" style="margin-bottom: 0cm;">имя_переменной=ее_значение.</div><div align="LEFT" style="margin-bottom: 0cm;">Обращение к переменным выполняется с помощью префикса "$" перед именем переменной. Именно таким образом мы получаем доступ к значению переменной х с помощью команды echo $x. </div><div align="LEFT" style="margin-bottom: 0cm;">Есть два типа переменных - локальные и переменные окружения. Переменные окружения устанавливаются системой и имеют специальной назначение. Обычно их значение может быть выведено с помощью команды echo. Например, если ввести:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ echo $SHELL </span></span></b> </div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">/bin/bash </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Вы получили имя оболочки, запущенной в данный момент. Переменные среды задаются в файле /etc/profile и в ~/.bash_profile. Команда echo может применяться для проверки текущего значения переменной. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Примечание: </b>задание переменных среды подробно описано в <a href="http://learnbyexamples.org/linux/linux-tip-how-to-set-shell-environment-variables-bash-shell.html"><span style="color: #3333ff;">этой статье - "Как </span></a><a href="http://learnbyexamples.org/linux/linux-tip-how-to-set-shell-environment-variables-bash-shell.html"><span style="color: #3333ff;">задавать п</span></a><a href="http://learnbyexamples.org/linux/linux-tip-how-to-set-shell-environment-variables-bash-shell.html"><span style="color: #3333ff;">еременные среды"</span></a> . В статье также описаны некоторые особенности оболочки Bash. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Если вы все еще возникают проблемы с пониманием того зачем нужно использовать переменные, приведем пример:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
echo "Значение х - 12". <br />
echo "У меня есть 12 карандашей". <br />
echo "Он сказал мне, что значение х равно 12". <br />
echo "Мне 12 лет." <br />
echo "Как получилось, что значение х равно 12?</span></span></b>" </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Хорошо, теперь предположим, что вы решите поменять значение х на 8 вместо 12. Что для этого нужно сделать? Вы должны изменить все строки кода, в которых говорится, что х равно 12. Но погодите... Есть другие строки кода, где упоминается это число, поэтому простую автозамену использовать не получится. Теперь приведем аналогичный пример, только с использованием переменных:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=12 # </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">задаем переменной х значение 12</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> <br />
echo "</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">З</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">начение х </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">= </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$х" <br />
echo "У меня есть 12 карандашей" <br />
echo "Он сказал мне, что значение х </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">равно </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$х" <br />
echo "Мне 12 лет" </span></span></b> </div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">echo "Как получилось, что значение х </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">равно </span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">x</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">?"</span></span></b> </div><div align="LEFT"><br />
</div><div align="LEFT">Здесь мы видим, что $x выводит текущее значение переменной х равное 12. Поэтому теперь, если вы хотите задать новое значение х равное 8, то все что вам нужно сделать, это изменить одну строчку с х=12 на х=8, и в выводе все строки с упоминанием x также изменяться. Поэтому вам не нужно руками модифицировать остальные строки. Как вы увидите позже, переменные имеют и другие способы применения. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Управляющие </b><b>операторы</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Управляющие операторы делают вашу программу компактнее и позволяют ей принимать решения. И, что еще более важно, они позволяют нам выполнять проверку на наличие ошибок. До сих пор все, что мы сделали, это писали скрипты, которые просто исполняют набор инструкций в файле. Например:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
cp /etc/foo . <br />
echo ”</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">Готово</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">” </span></span></b> </div><div align="LEFT"><br />
</div><div align="LEFT">Это небольшой скрипт, назовем его bar.sh, копирует файл с именем /etc/foo в текущий каталог и выводит «Готово» на экране. Эта программа будет работать при одном условии - файл /etc/foo должен существовать. В противном случае вот что произойдет:</div><div align="LEFT"></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$./bar.sh <br />
cp: /etc/foo: No such file or directory<br />
Готово</span></span></b><br />
<br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Таким образом, как вы видите, есть проблема. Не у каждого, кто будет запускать вашу программу, будет файл /etc/foo. Наверное, было бы лучше, если б ваша программа сначала проверяла наличие данного файла, а затем при положительном ответе - выполняла бы копирование, в противном случае - просто бы завершала работу. В псевдо-коде это выглядит так:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">если /etc/foo существует, то <br />
скопировать /etc/</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">foo</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> в текущую директорию </span></span></b> </div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> напечатать "Готово" на экране <br />
в противном случае, <br />
напечатать на экране "Этот файл не существует" </span></span></b> </div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> выход</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Можно ли это сделать в Bash? Конечно! Набор управляющих операторов Bash включает в себя: if, while, until, for и case. Каждый из этих операторов является парным, то есть начинается он одним тегом и заканчивается другим. Например, если условный оператор if начинается с if и заканчивается fi. Управляющие операторы - это не отдельные программы в системе, они встроены в bash. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>if … else … elif … fi</b></div><div align="LEFT" style="margin-bottom: 0cm;">Это один из наиболее распространенных операторов. Он позволяет программе принимать решения следующим образом - «если условие верно - делаем одно, если нет - делаем что-то другое». Чтобы эффективно его использовать, сначала нужно научиться пользоваться командой test. Эта программа выполняет проверку условия (например, существует ли файл, есть ли необходимые права доступа). Вот переписанный вариант bar.sh :</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
if test -f /etc/foo<br />
then <br />
# Файл существует, копируем его и печатаем сообщение на экране <br />
cp /etc/foo .<br />
echo "Готово". <br />
else # Файл не существует, поэтому мы печатаем сообщение</span></span></b></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> #</span></span></b><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> и завершаем работу <br />
echo "Этот файл не существует." <br />
exit</span></span></b></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">fi</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Обратите внимание на отступы строки после then и else. Они не являются обязательными, но зато делают чтение кода гораздо более простым в том смысле, что делают логику программы более наглядной. Теперь запустите программу. Если у вас есть файл /etc/foo - он будет скопирован, в противном случае будет напечатано сообщение об ошибке. Команда test проверяет существование файла. Ключ -f проверяет, является ли аргумент обычным файлом. Ниже приведен список опций test (<i>Не стоит пытаться запомнить их все, т.к. это все равно нереально. Его всегда можно посмотреть в руководстве команды test - man test. Прим. перев.</i>): </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Ключи команды test:</div><div align="LEFT" style="margin-bottom: 0cm;">-d проверяет наличие файла и то, что он является каталогом </div><div align="LEFT" style="margin-bottom: 0cm;">-e проверяет существование файла</div><div align="LEFT" style="margin-bottom: 0cm;">-f проверяет наличие файла и то, что это обычный файл </div><div align="LEFT" style="margin-bottom: 0cm;">-g проверяет наличие у файла SGID-бита </div><div align="LEFT" style="margin-bottom: 0cm;">-r проверяет наличие файла и то, что он доступен на чтение</div><div align="LEFT" style="margin-bottom: 0cm;">-s проверяет наличие файла и то, что его размер больше нуля</div><div align="LEFT" style="margin-bottom: 0cm;">-u проверяет наличие у файла SUID-бита </div><div align="LEFT" style="margin-bottom: 0cm;">-w проверяет наличие файла и то, что он доступен на запись</div><div align="LEFT" style="margin-bottom: 0cm;">-x проверяет наличие файла и наличие у него прав на запуск</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="JUSTIFY" style="margin-bottom: 0cm;">Оператор else используется, когда вы хотите, чтобы ваша программа еще что-то делала, если первое условие не выполняется. Существует также оператор elif, который может использоваться вместо еще одного if. elif означает "else if". Он используется, когда первое условие не выполняется, и вы хотите проверить еще одно условие. </div><div align="JUSTIFY" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Если вам не нравится приведенная форма записи if и test, есть сокращенный вариант.</div><div style="margin-bottom: 0cm;">Например, код: </div><div align="LEFT"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">if test -f /etc/foo <br />
then</span></span></b> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Можно записать вот так:</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">if [ -f /etc/foo ]; then</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Квадратные скобки - это еще один вариант записи test. Если у вас есть опыт в программировании на C, этот синтаксис для вас может быть более удобным. Обратите внимание на наличие пробелов до и после каждой из скобок (<i>Наличие пробелов объясняется просто: открывающая квадратная скобка - это команда оболочки. В этом можно легко убедиться набрав в консоли команду which [ . А раз это отдельная команда, то ее нужно отделить </i><i>пробелами </i><i>от остальных опций. </i><i>- </i><i>Прим. перев.</i>). Точка с запятой: ";" говорит оболочке о завершении одного оператора и начале следующего. Все, что находится после этого символа будет работать так, как будто он находится на отдельной строке. Это делает код более удобным для чтения и, естественно, что такая запись необязательна. Если вы предпочитаете другой вариант записи - then можно сразу поместить в другой строке. </div><div align="LEFT" style="margin-bottom: 0cm;">Если вы используете переменные - их нужно помещать в кавычки. Например: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">if [ "$name" -eq 5 ]; then</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">оператор -eq будет объяснен далее в этой статье. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>while … do … done</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Оператор while используется для организации циклов. Он работает так «пока (while) условие истинно, делать что-то». Рассмотрим это на примере:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
while true; do <br />
echo "Нажмите CTRL-C для выхода." <br />
done</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">true - это тоже программа. Единственное, что она тут делает - это запускает тело цикла снова и снова. Использование true считается медленным, потому что ваш скрипт должен запускать ее раз за разом. Можно использовать альтернативный вариант:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
while :; do <br />
echo "Нажмите CTRL-C для выхода." <br />
done </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Это позволяет добиться точно такого же эффекта, но быстрее, потому что «:» - это встроенная функция bash. Единственное отличие состоит в принесении в жертву читабельности кода. Используйте из приведенных вариантов тот, который вам нравится больше. Ниже приведен гораздо более полезный вариант использования переменных: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=0; <br />
while [ "$x" -le 10 ]; do <br />
echo "Текущее значение х: $ х" <br />
# Увеличиваем значение х: <br />
x=$(expr $x + 1) <br />
sleep 1 <br />
done</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Здесь мы используем для проверки состояния переменной x запись с квадратными скобками. Опция -le означает «меньше или равно (less or equal)». Говоря обычным языком приведенный код говорит: «пока (while) х меньше или равен 10, выводить на экран текущее значение х, после чего добавлять к текущему значению х единицу». Оператор sleep 1 приостанавливает выполнение программы на одну секунду. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Ниже приведен список возможных операций сравнения целых чисел (<i>полный список приведен в man test. Прим. перев.</i>):</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">x -eq y x = y (equal)</div><div align="LEFT" style="margin-bottom: 0cm;">x -ne y x не равен y (not equal)</div><div align="LEFT" style="margin-bottom: 0cm;">x -gt y x больше, либо равен y (greater than)</div><div align="LEFT" style="margin-bottom: 0cm;">x -lt y x меньше, либо равен y (lesser than) </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Операторы сравнения строк:</div><div align="LEFT" style="margin-bottom: 0cm;">x = y строка x идентична y</div><div align="LEFT" style="margin-bottom: 0cm;">x != y строка х не совпадает y</div><div align="LEFT" style="margin-bottom: 0cm;">-n x выражение истинно, если строка х ненулевой длины</div><div align="LEFT" style="margin-bottom: 0cm;">-z x выражение истинно, если строка х имеет нулевую длину</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Скрипт, приведенный выше, нетрудно понять, за исключением, может быть, только этой строки:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">x=$(expr $x + 1)</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Комментарий приведенный выше он говорит нам, что он увеличивает х на 1. Но что означает запись $ (...)? Это переменная? Нет. На самом деле это способ сказать оболочке, что вы хотите запустить команду expr $x + 1, и присвоить результат ее выполнения - х. Любая команда, заключенная в $ (...) будет выполняться:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
me=$(whoami) <br />
echo "Привет! Меня зовут $me" </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Попробуйте сделать приведенный пример, и вы поймете, что я имею в виду. Приведенный выше код можно было бы сократить без каких-либо потерь вот так: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash<br />
echo "Привет! Меня зовут $(whoami)" </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Вы сами можете выбрать, какая из записей вам ближе и понятнее. Существует и другой способ для выполнения команд или передачи результата их выполнения переменной. Как это сделать - будет объяснено позже. Пока используйте запись вида $(...). </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>until … do … done</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Оператор until применяет способом аналогичным приведенному выше while. Разница лишь в том, что условие работает наоборот. Цикл while выполняет до тех пор<span style="font-weight: normal;"> </span><b>пока условие</b> <b>истинно</b>. Цикл until - до тех пор <b>пока условие не станет истинным</b>. Например:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=0<br />
until [ "$x" -ge 10 ]; do <br />
echo "Текущее значение х равно $ х" <br />
x=$(expr $x + 1) <br />
sleep 1 <br />
done</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Эта часть кода выглядит знакомой. Попробуйте ее набрать и посмотреть, что он делает. Приведенный цикл будет работать, пока x не станет больше или равен 10. Когда величина x достигнет значения 10, цикл остановится. Таким образом, последнее значение напечатанное значение х будет 9. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>for … in … do … done</b></div><div align="LEFT" style="margin-bottom: 0cm;">Цикл for используется, когда вам надо перебрать несколько значений переменной. Например, вы можете написать небольшую программу, которая печатает 10 точек:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
echo -n "Проверка системы на наличие ошибок" <br />
for dots in 1 2 3 4 5 6 7 8 9 10; do <br />
echo -n "." <br />
done <br />
echo "Ошибок не обнаружено"</span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Опция -n команды echo предотвращает автоматический перевод строки. Попробуйте один раз вариант с -n и вариант без этой опции, чтобы понять, что я имею в виду. Переменная dots последовательно принимает значения от 1 до 10 и одновременно скрипт печатает на экране точку. </div><div align="LEFT" style="margin-bottom: 0cm;">Приведенный дальше пример показывает, что я имею в виду под выражением «переменная последовательно принимает несколько значений»: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
for x in paper pencil pen; do <br />
echo "значение переменной х равно $х" <br />
sleep 1 <br />
done</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">При запуске программы, вы видите, что х сначала имеет значение «pencil», а затем она принимает значение «pen». Когда у переменной заканчивается список возможных значений, цикл завершается. </div><div align="LEFT" style="margin-bottom: 0cm;">Ниже приведен гораздо более полезный пример. Этот скрипт добавляет расширение .html для всех файлов в текущей директории (<i>Этот скрипт реально так поступает и вам возможно это не нужно. Поэтому все-таки создайте отдельного пользователя, если вы еще до сих пор этого не сделали, и экспериментируйте под ним. - Прим. перев.</i>): </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
for file in *; do <br />
echo "Добавляем расширение .html для файла $file ..." <br />
mv $file $file.html <br />
sleep 1 <br />
done</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Символ * имеет специальное значение, которое в данном случае означает "все в текущем каталоге", т.е. - все файлы в каталоге. Переменная file последовательно принимает значения, соответствующие именам файлов в текущем каталоге. Затем используется программа mv для переименования файла в файл с расширением .html:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>case … in … esac</b> </div><div align="LEFT" style="margin-bottom: 0cm;">Оператор case очень похож на if. Он отлично подходит для тех случаев, когда нужно проверить несколько условий, и вы не хотите для этого использовать несколько вложенных операторов if. Поясним на примере: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=5 # инициализируем х значением 5 <br />
# проверяем значение х: <br />
case $x in <br />
0) echo "значение х равно 0" <br />
;; <br />
5) echo "значение х равно 5" <br />
;;<br />
9) echo "значение х равно 9" <br />
;;<br />
*) echo "значение неизвестно" </span></span></b> </div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;"> ;; <br />
esac </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Оператор case проверяет переменную х на равенство трем значениям. В приведенном примере, он сначала проверит, равен ли х нулю 0, затем равен ли он 5, затем равен ли он 9. И, если все проверки завершились неудачно, скрипт выведет сообщение, что значение x определить не получилось. Помните, что «*» означает «все», и в этом случае, «любое другое значение, помимо указанных явно». Если х имеет любое другое значение, отличное от 0, 5 или 9, то это значение попадает во категорию «*». При использовании сase каждое условие должно заканчиваться двумя точками с запятой. </div><div align="LEFT" style="margin-bottom: 0cm;">Зачем нужно использовать case, когда вы можно использовать if? Ниже приведен пример эквивалентного скрипта, написанного с использованием if. Решение о том, что быстрее написать и легче прочесть, предлагается принять самостоятельно ;) :</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=5 # инициализируем х значением 5 <br />
if [ "$x" -eq 0 ]; then <br />
echo "Значение х равно 0" <br />
elif [ "$x" -eq 5 ]; then <br />
echo "значение х равно 5" <br />
elif [ "$x" -eq 9 ]; then <br />
echo "значение х равно 9" <br />
else<br />
echo "Значение х определить не удалось" <br />
fi </span></span></b> </div><div align="LEFT"><br />
</div><div align="LEFT"><b>Использование кавычек</b></div><div align="LEFT" style="margin-bottom: 0cm;">Кавычки играют важную роль в написании скриптов оболочки. Существует три типа кавычек. Это двойные кавычки: ", одинарные ' (апостроф) и обратные ` (<i>находятся слева от клавиши 1. Прим. перев.</i>). Имеет ли каждый из приведенных видов какое-то особое значение? Да. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><b>Примечание</b><b>:</b> Статья <a href="http://learnbyexamples.org/linux/linux-tip-how-to-use-wildcards-quotes-back-quotes-and-apostrophes-in-shell-commands.html"><span style="color: #3333ff;">Wildcards, Quotes, Back Quotes, Apostrophes in shell commands ( * ? [] ” ' ')</span></a> прекрасно описывает использование специальных символов. Пожалуйста, ознакомьтесь с ней в случае, если вы не знакомы с использованием этих специальных символов в скриптах оболочки. Ниже приведено краткое объяснение использования некоторых из них.</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Двойные кавычки используются главным образом для объединения нескольких слов в строку и сохранения в ней пробелов. Например, "Эта строка содержит пробелы". Строка, заключенная в двойные кавычки рассматривается как единое целое. Например:</div><div align="LEFT" style="margin-bottom: 0cm;"></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ mkdir hello world <br />
$ ls -F <br />
hello/ world/</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Здесь мы создали две директории. Команда mkdir принимает два слова hello и world, как два отдельных аргумента, и поэтому создает два каталога. Теперь посмотрим, а что произойдет, если написать код таким образом:</div><div align="LEFT" style="margin-bottom: 0cm;"></div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ mkdir “hello world” <br />
$ ls -F <br />
hello/ hello world/ world/</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Команда создала каталог с именем из двух слов. Кавычки объединили два слова в один аргумент.</div><div align="LEFT" style="margin-bottom: 0cm;">(<i>Главным образом, дело в том, что bash воспринимает пробел как разделитель </i><i>всего, что только можно - опций, аргументов, </i><i>отдельных команд</i><i>. Внутри двойных кавычек пробел теряет свое специальное значение. </i><i>- </i><i>Прим. перев.</i>). </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Одинарные кавычки в основном используются для работы с переменными. Если переменная находится в двойных кавычках, то к ней можно обратиться через $имя_переменной.Если переменная находится в одинарных кавычках - это не возможно. Чтобы пояснить это приведем пример: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash <br />
x=5 # задаем х равным 5 <br />
# используем двойные кавычки <br />
echo "Используем двойные кавычки, значение х равно $х" <br />
# используем одинарные кавычки <br />
echo 'Используем одинарные кавычки, значение х равно $х' </span></span></b> </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Почувствовали разницу? Вы можете использовать двойные кавычки, если вы не планируете использовать переменные для строки, которая в них находится. И да, если вам интересно, прямые кавычки также можно использовать для сохранения пробелов в строке тем же способом, что и двойные кавычки </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">$ mkdir 'hello world' <br />
$ ls -F <br />
hello world/</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Обратные кавычки сильно отличаются от двойных и одинарных. Они не могут использоваться для сохранения пробелов. Если вы помните, выше мы использовали такую строку:</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">x=$(expr $x + 1)</span></span></b></div><div align="LEFT"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Как вы уже знаете, результатом работы этой команды будет то, что выражение $х + 1 присваивается переменной x. Того же результата можно достичь и с использованием обратных кавычек: </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">x='expr $x + 1′</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Какой тип кавычек лучше использовать? Тот, что вам больше нравится. Изучая скрипты вы найдете, что обратные кавычки используются чаще, чем запись $(...) . Тем не менее, я считаю, $ (...) легче читать, особенно если у вас код наподобие этого:</div><div align="LEFT"><b><span style="font-family: Nimbus Mono L,monospace;"><span style="font-weight: normal;">#!/bin/bash<br />
echo “I am 'whoami'”</span></span></b></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><i>(На мой взгляд, лучше использовать именно запись типа $(...), потому что запись в обратных кавычках и одинарных можно легко перепутать при наборе кода и при его чтении. - Прим. перев.)</i></div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Это только начало. Вы узнаете еще много чего интересного в заключительной части этой статьи (<i>надеюсь со временем, </i><i>как только текст появится, </i><i>осилить и его перевод. - Прим. перев.</i>). А пока вы ее ждете - удачного вам написания скриптов...</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="margin-bottom: 0cm;"><a href="http://learnbyexamples.org/linux/bash-programming-tutorial-1-a-quick-introduction.html">Оригинал статьи</a><br />
<div style="text-align: left;"> Статья также опубликована <a href="http://freeschool.altlinux.ru/?p=3319">здесь</a>. </div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com9tag:blogger.com,1999:blog-2986307105622275526.post-57646873723148591402010-09-22T22:00:00.001+04:002010-09-22T22:02:12.508+04:00Поскреби Ubuntu, получишь Debian...<style type="text/css">
p { margin-bottom: 0.21cm; }
</style><br />
<div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;"><i>Относительно недавно кто-то (не помню кто) из сообщества Debian высказывался, что Ubuntu использует 75% пакетов из Debian без изменений. Вот я и решил поставить один эксперимент, результаты которого приведены ниже. </i></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Итак, берем Ubuntu Alternate CD, вставляем в диск и перезагружаемся. На всякий случай, я все свои эксперименты проводил в виртуалке в Virtualbox. В установщике выбираем режим экспертной установки и ставим только базовую систему. Можно еще в диалоге создания учетных записей разрешить учетную запись root. Меня в Ubuntu больше всего раздражает заблокированная учетка root и неправильно настроенная sudo. После перезагрузки входим в систему и ставим пакет gnome-desktop-environment. Те, кто использует Debian, наверняка знает, что этим метапакетом ставится GNOME.</div><div style="margin-bottom: 0cm;"></div><a name='more'></a><br />
<div style="margin-bottom: 0cm;">Затем пускаем службу GDM и получаем вот такую картинку:</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_zHyeYQyYSXw/TJpCntcbwTI/AAAAAAAAAO0/54YS0PwAHH0/s1600/ubuntu1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a><a href="http://s42.radikal.ru/i096/1009/c9/a40f2aef8801.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="528" src="http://s42.radikal.ru/i096/1009/c9/a40f2aef8801.png" width="640" /></a></div><br />
<div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">После входа в систему наблюдаем вот такой рабочий стол (обратите внимание на расположение кнопок окна):</div><div style="margin-bottom: 0cm;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://s006.radikal.ru/i213/1009/f8/7063e17ba6b1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="528" src="http://s006.radikal.ru/i213/1009/f8/7063e17ba6b1.png" width="640" /></a></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">А чтобы все программы, требующие административных привелегий в GNOME, спрашивали пароль root, а не пользовательский, делаем следующее. Запускаем в терминале gksu-properties и устанавливаем целых две настройки вот так:</div><div style="margin-bottom: 0cm;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://s004.radikal.ru/i205/1009/33/6a82b734985e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="528" src="http://s004.radikal.ru/i205/1009/33/6a82b734985e.png" width="640" /></a></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">Первый раскрывающийся список указывает какую программу запускать при требовании административных привелегий: su или sudo и, соответственно, от этого будет зависеть какой именно из паролей будет запрашиваться. Второй список включает или выключает принудительный захват фокуса окном, требующим привелегий.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Ну а тем, кто хочет восстановить статус-кво, нужно поставить пакет ubuntu-artwork. Получится в итоге вот такое:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://i054.radikal.ru/1009/dc/cacd0f1f8842.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="528" src="http://i054.radikal.ru/1009/dc/cacd0f1f8842.png" width="640" /></a></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Заметьте, что теперь кнопки переехали в левую часть заголовка...</div><div style="margin-bottom: 0cm;">Дальше с этой системой можно делать все, что угодно :) - доустановить нужные пакеты, оформление... Так что мы, практически, получаем почти Debian с более новыми пакетами.</div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com12tag:blogger.com,1999:blog-2986307105622275526.post-26740860641532730612010-09-21T23:07:00.002+04:002010-10-09T21:32:02.916+04:00Почему нам не нужен третий дистрибутив Linux<i>Это мой перевод еще одной статьи из блога Novell о том, нужен ли рынку решений дистрибутив Linux от Oracle. Статья мне показалась интересной, хотя бы своим тоном по отношению к недавнему покупателю Sun. Ссылка на оригинал - в конце статьи.</i><br />
<br />
<br />
<style type="text/css">
p { margin-bottom: 0.21cm; }a:link { color: rgb(0, 0, 128); text-decoration: underline; }em { font-style: italic; }
</style> <br />
<div align="LEFT"><i>Майкл Аппельбаум, директор по Linux-решениям</i></div><div align="LEFT">Хорошо известно, что <a href="http://www.novell.com/linux/">Novell</a> и <a href="http://www.redhat.com/rhel/">Red Hat</a> по-прежнему задают тон, когда речь идет о Linux для промышленных решений, но Oracle пытается прорекламировать <a href="http://www.oracle.com/us/corporate/press/173453">новое решение на Linux</a>, которым она надеется улучшить свое состояние на этом рынке. Изменят ли эти последние новости отношение этого рынка к Oracle? Эксперты с этим <a href="http://blogs.computerworld.com/16997/oracle_rips_red_hat_and_sort_of_launches_a_new_linux">не согласны</a>. </div><div align="LEFT">Лучше всего задаться таким вопросом: а нужен ли корпоративному рынку еще один дистрибутив Linux?<br />
<br />
<a name='more'></a></div><div align="LEFT">Когда дело доходит до корпоративных решений на Linux, Novell и Red Hat по-прежнему доминируют на рынке. В последних <a href="http://www.idc.com/getdoc.jsp?containerId=219380">результатах, представленных IDC</a>, Novell и Red Hat совместно получают 95% доходов от Linux, причем в прошлом году эта доля была 94%. Oracle же не достигла даже 1% о доходов рынка Linux. Несмотря на заявления Oracle о наличии тысяч клиентов по Linux-направлению, аналитикам еще предстоит увидеть ее хоть сколь-нибудь заметное влияние на рынок. Между тем, доля Novell здесь продолжает расти, увеличившись за последний год на 5<span style="color: black;"> процентов с</span> аналогичным снижением доли Red Hat. </div><div align="LEFT">Так почему только эти два дистрибутива Linux из многих существующих сегодня удерживают более 90% коммерческого рынка? <span style="color: black;">Причем, они завоевали множество сегментов рынка и имеют среди своих приверженцев много состоятельных компаний. </span> </div><div align="LEFT">Почему же есть только два успешных коммерческих поставщика Linux? Во-первых, для создания и поддержки Linux-дистрибутива корпоративного класса необходимо наличие хорошей инфраструктуры. Не так легко получить право на поддержку сертифицированных приложений, причем тут есть определенный элемент проблемы «курица-яйцо». Только Novell и Red Hat имеют каталог приложений, которые исчисляются тысячами, причем Novell <a href="http://www.slideshare.net/NOVL/suse-linux-vs-redhat-enterprise-linux">опережает Red Hat по этому показателю в два раза</a> и предлагает <a href="http://www.novell.com/partner/isv/isvcatalog">более 500 сертифицированных приложений Oracle</a>. Предоставление поддержки корпоративного класса - сложное и дорогое занятие, хоть это и не препятствие для Oracle. И, чтобы сделать такие инструменты как <a href="http://susestudio.com/">SUSE Studio</a> для развертывания приложений для облачных вычислений, требуются инновационное мышление и ресурсы. Другими словами, для входа на этот рынок есть реальные барьеры, даже если это рынок, которые может кое-кому показаться коммодитизированным (<i>Это термин, который я решил не переводить. Самое нормальное объяснение ему я нашел <a href="http://urbansheep.livejournal.com/1621671.html">здесь</a>. Вот цитата оттуда: «Коммодитизация — то, что случается с продуктами, которые становятся достаточно дешёвыми в массовом производстве, и вместо одного уникального товара возникает море из торговых марок. Различий в потребительских качествах между разными брендами не остаётся, так что прежние звёзды теряют при этом свою уникальность. «Компьютер станет также распространён, как микроволновая печь» — это коммодитизация.». - Прим. перев.</i>). </div><div align="LEFT">Давайте с вами рассмотрим - имеется ли на рынке потребность в третьем дистрибутиве Linux? Давайте посмотрим на эту ситуацию глазами клиента, купившего поддержку Linux от Oracle:</div><div align="LEFT">Будет ли это поставщик решений с б<b>О</b>льшим опытом, чем Novell и Red Hat? Нет. </div><div align="LEFT">Будет ли это поставщик, который будет привержен идее Linux-инноваций для всех физических, виртуальных и облачных платформ, которые могут понадобиться клиентам? Нет. В центре интересов Oracle находится только сам Oracle. Если вам потом понадобится купить решение VMware или для мэйнфреймов, что ж надо было думать раньше. </div><div align="LEFT">Будет ли это поставщик, заинтересованный в развитии Linux как стратегической платформы и уделяющий особое внимание ее разработке? Опять нет. (Просто попросите кого-нибудь из Oracle объяснить сегменты рынка и указать рекомендуемые области использования Solaris и Oracle Linux, а затем смотрите, как они будут выкручиваться).</div><div align="LEFT">В конечном счете, все дело в том, что рынку просто не нужен третий дистрибутив Linux. Наличие двух сильных игроков - Novell и Red Hat - делает рынок достаточно конкурентным, и наши команды по R&D совместно с талантливыми людьми из сообщества ПО с открытым исходным кодом рождают исключительные инновации в таких областях как виртуализация, облачные вычисления, кластеры и HA-решения, управление предприятиями. Хотя, безусловно, в интересах Oracle быть на рынке решений Linux, ведь их доля на рынке отстает. </div><div align="LEFT">Конечно, нужно признать историческую роль Oracle в качестве сильного партнера экосистемы Linux, включая Novell, с такими инициативами, как <a href="http://en.wikipedia.org/wiki/OCFS">OCFS</a> и <a href="http://www.oracle.com/us/corporate/press/077158">тесты баз данных Oracle</a> на разных дистрибутивах Linux, включая SUSE Linux Enterprise Server. Это ключевые элементы, которые делают нынешний Linux таким ярким. </div><div align="LEFT">Вопрос: нужен ли клиентам третий дистрибутив Linux? Пока по крайней мере, другого ответа, кроме «нет» найти нельзя.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><a href="http://www.novell.com/prblogs/?p=3070">Оригинал на английском</a></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com7tag:blogger.com,1999:blog-2986307105622275526.post-4910258661940473162010-09-19T15:33:00.006+04:002010-09-19T15:49:28.330+04:00Кто покупает Novell? Делайте ваши ставки!<i>Мой перевод статьи-размышления от Joe Brockmeier о том, кому может достаться Linux-бизнес Novell</i><br />
<br />
<style type="text/css">
p { margin-bottom: 0.21cm; }h1 { margin-bottom: 0.21cm; page-break-after: avoid; }h1.western { font-family: "Times New Roman",serif; font-size: 24pt; font-weight: bold; }h1.cjk { font-family: "DejaVu Sans"; font-size: 24pt; font-weight: bold; }h1.ctl { font-family: "DejaVu Sans"; font-size: 24pt; font-weight: bold; }a:link { color: rgb(0, 0, 128); text-decoration: underline; }em { font-style: italic; }
</style> <br />
<h1 align="LEFT" class="western" style="font-family: Verdana,sans-serif; margin-bottom: 0.2cm; margin-top: 0.2cm;"><span style="font-size: small;"><span style="font-weight: normal;">Прошел слух, </span><a href="http://www.nypost.com/p/news/business/novell_inc_reaches_two_part_sale_lZKRHKFYO5T9cKq9Dy7WQO"><span style="font-weight: normal;">что Novell достигла предварительного соглашения о продаже</span></a></span><span style="font-size: small;"><span style="font-weight: normal;">, что расколет ее бизнес на две части и продаст ее Linux-отделение "неназванному стратегическому покупателю". Предполагая, что сделка все-таки состоится, кто же </span></span><span style="font-size: small;"><span style="font-weight: normal;">этот покупатель</span></span><span style="font-size: small;"><span style="font-weight: normal;">, и что это </span></span><span style="font-size: small;"><span style="font-weight: normal;">будет </span></span><span style="font-size: small;"><span style="font-weight: normal;">означат</span></span><span style="font-size: small;"><span style="font-weight: normal;">ь</span></span><span style="font-size: small;"><span style="font-weight: normal;"> для SUSE и <a href="http://www.opensuse.org/">проекта OpenSUSE</a> ?</span></span> <br />
<br />
<a name='more'></a></h1><h1 align="LEFT" class="western" style="font-family: Verdana,sans-serif; margin-bottom: 0.2cm; margin-top: 0.2cm;"><span style="font-size: small;"><span style="font-weight: normal;">Краткая отмазка: Novell мой бывший работодатель. Я ушел из компании в конце января, и, насколько я знаю, </span><a href="http://www.networkworld.com/news/2010/030310-novell.html"><span style="font-weight: normal;">предложение в 2 млрд. долларов</span></a></span><span style="font-size: small;"><span style="font-weight: normal;"> от Elliott Associates тогда еще даже не обсуждалось. Во всяком случае у меня нет какой-либо внутренней информаци</span></span><span style="font-size: small;"><span style="font-weight: normal;">и</span></span><span style="font-size: small;"><span style="font-weight: normal;"> (позвони же мне, Ян...), так что написанное ниже - всего лишь мои размышления. У меня нет никакой заинтересованности в каком-то определенном покупателе. </span></span><span style="font-size: small;"><span style="font-weight: normal;">Я только </span></span><span style="font-size: small;"><span style="font-weight: normal;">наде</span></span><span style="font-size: small;"><span style="font-weight: normal;">юсь</span></span><span style="font-size: small;"><span style="font-weight: normal;">, что мои бывшие коллеги будут работать в компании, которая будет относиться с уважением к ним </span></span><span style="font-size: small;"><span style="font-weight: normal;">и </span></span><span style="font-size: small;"><span style="font-weight: normal;"> проекту OpenSUSE. </span></span> </h1><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Давайте рассмотрим потенциальных покупателей. Novell недавно заключила несколько стратегических соглашений с <a href="http://www.networkworld.com/news/2010/060910-vmware-novell-partner-on-linux.html">VMware</a>, и имеет давние партнерские отношения с <a href="http://www.novell.com/partners/ibm/">IBM</a> и <a href="http://www.novell.com/partners/sap/">SAP</a>. Oracle сейчас также находится в режиме постоянных приобретений, и, вполне возможно, захочет закусить бизнесом SUSE Linux после своей покупки Sun. Но зачем было разрушать нарождающееся сообщество открытого исходного кода (OpenSolaris), когда можно иметь два (OpenSUSE)? </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Давайте начнем с Oracle. Oracle имеет свою собственную платформу <a href="http://wiki.oracle.com/page/Oracle+VM">Oracle VM</a>, имеющую в основе Xen и Red Hat Enterprise Linux(RHEL). Ну хорошо, RHEL с логотипами Oracle. Oracle Unbreakable Linux <a href="http://blogs.oracle.com/sergio/2010/05/the_oracle_enterprise_linux_so.html">полностью бинарно совместим</a> с RHEL безо всяких излишних затрат на развитие, которые Red Hat фактически вкладывает свой дистрибутив. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Правда, есть одна маленькая проблема, в грядущем релизе Red Hat просто выкинет Xen в окно, предпочитая ему KVM. Oracle должен будет либо последовать ее примеру и инвестировать в такой переход, или ей придется нарушить совместимость с RHEL после релиза RHEL 6. Если Oracle останется на Xen, ей придется подумать о переходе на другой дистрибутив. Novell по-прежнему до сих пор не вкладывает свои деньги ни в одну платформу, предпочитая стратегию «и нашим и вашим», то есть поддерживая все платформы виртуализации. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Возможно, я излишне оптимистичен, но я считаю маловероятным то, что Oracle собирается поглотить бизнес SUSE. Если это произойдет, я не верю в будущее проекта OpenSUSE. Даже если Oracle все же решит поддерживать его, стиль работы Oracle с сообществом отвратителен. Покупка Oracle сильно затормозит тот прогресс, на который взял курс этот проект, и, кажется, весьма вероятно, что компания увидит «утечку мозгов» подобно той, что произошла после покупки Sun. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">IBM - другой претендент. IBM поддерживает партнерские отношения со всеми крупными Linux-компаниями: SUSE, затем Novell, Red Hat и Canonical. Покупка одного из трех и создание своего собственного дистрибутива выглядит не слишком хорошо. Это может даже сделать Red Hat одним из конкурентов IBM, чего никто не хочет. Но IBM и Novell сильно завязаны друг на друге в бизнесе мэйнфреймов, поэтому IBM <i>может</i> решить, что иметь в своем портфеле SUSE будет очень хорошо. Если IBM серьезно относится к форку OpenOffice.org - Symphony, то она также может захотеть заполучить кого-то из разработчиков Novell, участвующих в <a href="http://go-oo.org/">Go-OO.org</a>. Хотя это, вероятно, подтолкнет HP, Dell и других к Red Hat или другим дистрибутивам. IBM может быть хорошим управленцем для сообщества OpenSUSE; безусловно, гораздо более лучшим, чем Oracle. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Еще один из вариантов - SAP. У нее много стратегических соглашений с Novell/SUSE и много крупных клиентов на SUSE Linux. Но SAP использует также другие продукты Novell, что входит в противоречие со слухом, что компания покупает <i>только</i> Linux-отделение, а все остальное достанется инвестиционным фирмам. Если SAP собиралась бы купить Novell, кажется, более вероятно, что она бы просто купила компанию целиком без лишней суеты. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Все это подводит меня к наиболее вероятному выбору: VMware. VMware в последнее время уже покупала другие решения с открытым исходным (<a href="http://www.networkworld.com/news/2010/011210-vmware-buys-zimbra.html">Zimbra</a>, <a href="http://www.networkworld.com/news/2009/081009-vmware-springsource-java-merger-apache-tomcat.html">SpringSource</a>), поэтому не будет преувеличением сказать, что эта компания, возможно, захочет добавить SUSE Linux в свой портфель. VMware также может захотеть иметь свой собственный дистрибутив Linux, чтобы помочь своим клиентам и партнерам построить больше готовых решений, которые будут работать на продуктах VMware для виртуализации. И для этого на рынке нет лучшего решения, чем SUSE Studio. Мне кажется, что SUSE Studio - это действительно хорошее дополнение к VMware Appliance Marketplace. Red Hat сейчас только на пути построения своего собственного решения для виртуализации, так что это также помогло бы конкурировать VMware с поставщиком Linux номер один. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Как это отразится на проекте OpenSUSE и SUSE Linux в целом? Думаю, что все будет по крайней мере также, если не лучше, по сравнению с тем периодом, когда у руля стояла Novell. </span><span style="color: black; font-size: small;">Скорее даже лучше</span><span style="color: black; font-size: small;">, потому что Novell </span><span style="color: black; font-size: small;">временами впадает в </span><span style="color: black; font-size: small;">кризис </span><span style="color: black; font-size: small;">самоидентификации,</span><span style="font-size: small;"> когда она пытается разобраться, как все ее бизнес-единицы сочетаются друг с другом. SUSE же идеально впишется в стратегию компании VMware - по крайней мере, на взгляд со стороны.</span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">И в завершение совсем кратко - а что же Microsoft? Вот это точно вряд ли. Мне трудно представить себе, как она собирается действовать, оставаясь в рамках антимонопольного законодательства. </span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Так кто же скрывается под неизвестным «стратегическим покупателем»?</span></div><div align="LEFT" style="font-family: Verdana,sans-serif;"><br />
<span style="font-size: small;">Я ставлю все, что у меня есть, на VMware, но я вполне могу оказаться неправ. Это могут быть IBM, SAP, или (только не это!) Oracle. Или это кто-то другой, о котором я не подумал. Есть варианты? </span><br />
<br />
</div><div align="RIGHT" style="font-family: Verdana,sans-serif;"><span style="font-size: small;"><a href="http://www.networkworld.com/community/blog/whos-buying-novell-place-your-bets">Оригинал статьи</a></span><br />
<span style="font-size: small;"></span><br />
<style type="text/css">
p { margin-bottom: 0.21cm; }
</style> <br />
<div align="LEFT"><span style="font-size: small;">От переводчика. </span></div><div align="LEFT"><span style="font-size: small;">Что не удалось Novell? </span></div><div align="LEFT"><span style="font-size: small;">Первое: никакой маркетинг. Novell имеет прекрасный набор продуктов для полноценного построения инфраструктуры предприятия любого масштаба - eDirectory, ZenWorks, все сервисы OES. Причем, каждый из этих продуктов пока не имеет конкурентов по полноте охвата всех имеющихся платформ и по своему функционалу.</span></div><div align="LEFT"><span style="font-size: small;">Второе: слабая работа с сообществом. Пример такой работы следовало бы брать с конкурента номер 1. Novell участвует во многих открытых проектах, но мало кому известны масштабы этого участия.</span><br />
<span style="font-size: small;">У Novell реально классные продукты. У нас на курсах многие администраторы с теплом в глазах вспоминали Netware, надежность которой осталась непревзойденной до сих пор. И очень жаль что эта операционная система оказалась вытесненной продуктом гораздо худшего качества.</span> <span style="font-size: small;"><br />
</span></div></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com5tag:blogger.com,1999:blog-2986307105622275526.post-9274075417295760702010-09-17T11:00:00.001+04:002010-09-17T11:01:11.977+04:00Другой путь к свободе<style type="text/css">
p { margin-bottom: 0.21cm; }h3 { margin-bottom: 0.21cm; page-break-after: avoid; }h3.western { font-family: "Times New Roman",serif; font-size: 14pt; font-weight: bold; }h3.cjk { font-family: "Lucida Sans Unicode"; font-size: 14pt; font-weight: bold; }h3.ctl { font-family: "Mangal"; font-size: 14pt; font-weight: bold; }a:link { color: rgb(0, 0, 128); text-decoration: underline; }
</style><br />
<div align="LEFT"><i>Предлагаю вниманию читателей блога интересные размышления о свободе и свободном ПО, автор которых Jos Poortvliet - нынешний лидер сообщества openSUSE.</i></div><div align="LEFT"></div><div align="LEFT"><i><b>Дисклеймер</b>: политические взгляды переводчика могут не совпадать с мнением автора статьи</i></div><div align="LEFT"><br />
</div><div align="LEFT">Jos Poortvliet </div><div align="LEFT">В конце прошлой недели Нью-Йорк Таймс поместила <a href="http://www.nytimes.com/2010/09/12/world/europe/12raids.html?pagewanted=2&_r=1">историю</a> о том, как правительство России использует вопросы лицензирования программного обеспечения для борьбы с протестами и митингами несогласных. В статье объясняется, что русская милиция изымает их компьютеры под предлогом использования пиратского программного обеспечения. В результате данные, полученные из этих компьютеров, помогают органам изучить планы активистов, что в дальнейшем приводит к их арестам.<br />
<br />
<a name='more'></a></div><div align="LEFT"><span style="color: black;">И х</span><span style="color: black;">отя Microsoft отреагировала на </span><span style="color: black;">эту </span><span style="color: black;">ситуацию </span><span style="color: black;">выдач</span><span style="color: black;">ей</span><span style="color: black;"> </span><span style="color: black;">разрешительных</span><span style="color: black;"> лицензи</span><span style="color: black;">й</span><span style="color: black;"> </span><span style="color: black;">для таких организаций</span><span style="color: black;">, чита</span><span style="color: black;">я</span><span style="color: black;"> статью </span><span style="color: black;">я подумал</span><span style="color: black;">, что есть другой, </span><span style="color: black;">гораздо </span><span style="color: black;">лучший способ </span><span style="color: black;">помешать органам использовать тему </span><span style="color: black;">лицензирования </span><span style="color: black;">ПО как повод для арестов</span><span style="color: black;">. Хот</span><span style="color: black;">ь</span><span style="color: black;"> </span><span style="color: black;">этот </span>способ не остановит авторитарные правительства от борьбы с инакомыслящими, использование свободного и открытого программного обеспечения может затруднить органам узаконить этот тип действий. </div><div align="LEFT">Во-первых, философия свободы пронизывает все существо тех мужчин и женщин в сообществе, разрабатывающем программное обеспечение с открытым исходным кодом, что приводит ко многим нововведениям, препятствующим ограничениям свобод. Например, это такие вещи, как <a href="http://en.wikipedia.org/wiki/GNU_Privacy_Guard">шифрование с помощью GPG</a> и <a href="http://en.wikipedia.org/wiki/Tor_%28anonymity_network%29">технология TOR</a>, которые делают возможным использование анонимных коммуникаций для миллионов пользователей в таких странах, как Китай и Иран. Не говоря уже о том, что в мире открытого ПО у нас есть сильный акцент на безопасность и защиту от таких угроз, как вирусы или "бекдоры", помещаемые в коммерческое ПО путем давления со стороны правительств. </div><div align="LEFT"><span style="color: black;">Во-вторых, с</span><span style="color: black;">ообщество открытого ПО делает акцент на устранении существующих ограничений для людей </span><span style="color: black;">- </span><span style="color: black;">будь</span><span style="color: black;">-то </span><span style="color: black;">физические ограничения, как у </span><span style="color: black;">инвалид</span><span style="color: black;">ов</span><span style="color: black;">, или </span><span style="color: black;">для </span><span style="color: black;">те</span><span style="color: black;">х</span><span style="color: black;">, кто нуждается </span><span style="color: black;">в том</span><span style="color: black;">, чтобы защитить себя от любопытных глаз цензуры в своей стране. Мы</span> создаем для таких людей инновационные и зачастую просто выдающиеся продукты, которые при незначительных или вообще нулевых затратах за использование дают им возможность получить преимущества в условиях развивающейся экономики. Чтобы свободно использовать, чтобы изучать и чтобы строить свой бизнес вокруг свободного ПО. Открытое программное обеспечение предлагает реальную альтернативу тем, кто нуждается в экономичных и социально-значимых вычислительных решениях. </div><div align="LEFT">И да, это РЕАЛЬНО лучший продукт, чем может предложить мир проприетарного ПО - несмотря на то, что он «другой» по своей сути. Свободное ПО не совершенно — например, как Нидерланды, где я живу, совсем не совершенны. В самом деле, чтобы нормально жить в моей стране, скажем, жителю Северной Кореи, нужен какой-то срок на адаптацию, примерно также, как и пользователю Windows нужно привыкнуть к использованию <a href="http://opensuse.org/">openSUSE</a>. Но в Нидерландах и с открытым ПО реально лучше, потому что они более свободны. </div><div align="LEFT">Да, мы создаем сильные и убедительные альтернативы проприетарному ПО. Но НЕ достаточно просто иметь лучший продукт - свобода это также его неотъемлемое качество. Работающий TOR-сервер - даже если вы живете в демократической стране и вам нечего скрывать - помогает жителям других стран, имеющих репрессивные правительства, потому что вы даете им возможность использовать ваше интернет-соединение - для сокрытия от любопытных глаз своего правительства. Свободное ПО воплощает ожидания и убеждения для деятельности, связанной со свободой и организацией сообществ, например, таких групп активистов, как <a href="http://baikalwave.blogspot.com/">Baikal Wave</a>. Любому лицу, группе или организации, которые желают действовать на основе того, во что верят, следует рассмотреть возможность использования свободного программного обеспечения как способ жить и работать без ущерба для своих убеждений. </div><div align="LEFT">Я не скажу, что свободное и открытое ПО делает мир совершенным - но это шаг в нужном направлении. В конце концов, «в мире, где общение речь зависит от ПО, свобода слова зависит от свободного ПО»! (D.B. Martin) </div><div align="RIGHT" lang="ru-RU" style="margin-bottom: 0cm;"><a href="http://www.novell.com/prblogs/?p=3054">Оригинал статьи</a></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com1tag:blogger.com,1999:blog-2986307105622275526.post-79699975112813917152010-09-15T21:32:00.004+04:002010-09-16T09:28:34.371+04:00Размышления Марка Шаттлворта об Ubuntu, Canonical и внедрении свободного программного обеспечения<style type="text/css">
p { margin-bottom: 0.21cm; }a:link { color: rgb(0, 0, 128); text-decoration: underline; }a.western:link { }a.ctl:link { }
</style> <br />
<i>Те, кто регулярно читает opennet.ru, наверняка обратили внимание на горячее обсуждение письма Марка Шаттлворта о вкладе Canonical и Ubuntu в свободное ПО в целом. Почитав это письмо, я нашел в нем достаточно интересных мыслей, что сподвигло меня на перевод этого текста. Думаю, что мой перевод позволит словам Марка достичь гораздо большей аудитории.</i><br />
<i>Краткое резюме для тех, кто не хочет читать:</i><br />
<br />
<i>1. Свободное ПО - это огромная область, работы на которой хватит всем. Поэтому и надо заниматься работой, а не считать кто и сколько сделал.</i><br />
<i>2. Свободное ПО, как алмаз, который нуждается в правильной огранке, чтоб достичть своего пользователя. В истории IT есть много случаев, когда становились популярными не самые лучшие с точки зрения качества и надежности работы продукты. Поэтому, для популяризации свободного ПО нужно учитывать реальные потребности пользователей и подстраиваться под них.</i><br />
<br />
Критика в адрес Canonical по поводу ее вклада в разработку ядра <span lang="en-US">Linux</span> и GNOME заставила меня задуматься: доволен ли я тем, чем занимаюсь каждый день моей жизни. Насколько для меня важно чувствовать, что результаты моей работы служат другим людям и делают мир лучше. Явлется ли мое<span style="color: black;"> участие в проекте </span><span style="color: black;"><span lang="en-US">Ubuntu </span></span><span style="color: black;"><span lang="ru-RU">тем делом, возможность </span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">заниматься которым можно посчитать за счастье.</span></span></span><br />
<br />
<a name='more'></a><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;"></span></span></span><br />
За последний месяц у меня было два случая, позволяющих положительно ответить на данный вопрос. Первый - письмо с благодарностью из Новой Зеландии, от человека, который отметил, что Ubuntu 10.04 внесла реальные изменения в жизнь его семьи. Для них этот проект, предоставляющий целостное, интегрированное окружение для работы и существующий благодаря труду тысяч людей, похож на маленькое чудо человеческой щедрости. Второй случай - контракт на поддержку десятков тысяч рабочих станций, работающих на Ubuntu 10.04. Общее между этими двумя случаями - два столпа, на которых зиждутся проекты Ubuntu и Canonical: предоставлять всему миру результаты труда огромного сообщества свободного программного обеспечения как подарок, бесплатно, свободно, без ограничений и делать это на постоянной основе. <br />
<br />
Первая история из Новой Зеландии о тех, кто учит детей пользоваться компьютером с раннего возраста и наблюдает насколько больше они могут получить знаний от Ubuntu, чем от Windows, и насколько доступнее делать это с Ubuntu. Для них то, что Ubuntu приносит им весь мир свободного программного обеспечения как единое целое - это здорово, это - прорыв, и они очень благодарны за это. <br />
<br />
Это история, повторение которой я надеюсь увидеть 100 миллионов раз. И она делает честь и приносит удовольствие не только мне, не только тем, кто отдает Ubuntu свою любовь и энергию, но и всем тем, кто участвует в разработке свободного ПО в целом. Ubuntu в отдельности не заслуживает всеобщего признания, это часть большой и сложной экосистемы, но без <span lang="en-US">Ubuntu</span> продвижение свободного программного обеспечения просто не достигло бы таких масштабов. <br />
<br />
Мы все понимаем, что тело свободного ПО состоит из многих органов, многих клеток, каждая из которых имеет свои собственные приоритеты, интересы и назначение. Тело может существовать только благодаря их совместной работе. Мы лишь небольшая часть целого, это честь для нас - взять на себя ответственность в создании своего дистрибутива. Мы несем ответственность за выбор <span lang="en-US">Ubuntu </span>теми, кто только начинает свое путешествие в мир свободного ПО, и мы упорно работаем над тем, чтобы быть уверенными, что все ее компоненты хорошо складываются вместе. <br />
<br />
Ubuntu и то, что она делает, не могло бы произойти без усилий прекрасного <span lang="en-US">Linux</span>-сообщества, которое, в свою очередь, не могло бы существовать без сообщества GNU, которое также не смогло бы подняться на сколь-нибудь значимое место без усилий таких компаний, как IBM и Red Hat. И может быть все пошло бы совсем не так, если бы не участники проектов Mozilla и Netscape, GNOME, KDE, Google и всех остальных, кто использовал свободное ПО для разных задач, что делало его только лучше. Есть десятки тысяч людей, которые никак не связаны с Ubuntu и которые сделали эту историю - реальностью. Многие из них работали более десятка лет - и прошло много времени прежде, чем пришел неожиданный успех, в то время как Ubuntu на сцене только лишь 6 лет. Именно поэтому Ubuntu не может признаваться единственной и неповторимой лишь только для красного словца и чтобы порадовать своих поклонников :). <br />
<br />
Тем не менее проект Ubuntu делает кое-что уникальное, специфичное и важное для свободного ПО: создает у конечных пользователей устойчивый образ того, что со свободным ПО могут работать все, как с экономической точки зрения, так по легкости использования и готовности решать проблемы, возникающие то там, то здесь. И я считаю, что это подарок тем людям, которые собирают каждый из пакетов <span lang="en-US">Ubuntu</span>. Если мы сможем предложить свободное ПО аудитории в 10 раз большей чем сейчас, мы десятикратно усиливаем вашу щедрость, что делает каждый час нашей с вами жизни (который мы проводим исправляя ошибки или улучшая что-либо) в 10 раз ценнее. Я очень горжусь тем, что трачу время и силы на Ubuntu. Да, я мог бы делать множество других вещей, но я не могу себе представить что-то еще, что имело бы аналогичное влияние на мир. <br />
<br />
Я готов признать, что не каждый может видеть картину моими глазами. Передача результатов своей работы аудитории в 10 раз большей без учета усилий, затрачиваемых на двустороннюю связь с конечными пользователями и работу над новыми возможностями, может выглядеть со стороны просто как рост скачиваний или увеличение потока отчетов об ошибках в 10 раз. Другими словами, если <span lang="en-US">upstream</span> не видит ничего кроме «кода», то он и не сможет увидеть ничего кроме кода. Я действительно не знаю, что с этим делать: Ubuntu - не средство для доставки конечным пользователями всего многообразия написанного кода, мне кажется это не то, в чем нуждается мир. А нуждается он в средстве, которое позволяло бы брать этот код и следило за тем, чтобы тот код, который уже есть, оставался в состоянии высокого качества и надежности. <span lang="en-US">Все, </span><span lang="ru-RU">что нужно для рабочих станций уже есть</span><span lang="en-US"> и даже код </span><span lang="ru-RU">соответствует ожиданиям,</span><span lang="en-US"> не было </span><span lang="ru-RU">только </span><span lang="en-US">возможности вынести </span><span lang="ru-RU">область </span><span lang="en-US">его и</span><span lang="ru-RU">спользования </span><span lang="en-US">за пределы сервер</span><span lang="ru-RU">ов, чтобы</span><span lang="en-US"> представить широкой публике </span><span lang="en-US">уже </span><span lang="ru-RU">готовое решение.</span><br />
<br />
Второе письмо я не могу процитировать. Оно предполагает контракт на оказание услуг Canonical в оказании помощи по миграции более чем 20 000 настольных компьютеров с Windows на Ubuntu. В последнее время в этой области много предложений, их темп ускоряется по мере укрепления доверия к Ubuntu. Хоть Linux уже давно зарекомендовал себя прекрасным рабочим столом для вдохновленного и целеустремленного разработчика, существует разрыв между его потребностями и потребностям крупных организаций. Другой такой компании, которая была бы настолько же привержена идее свободного ПО для настольных систем в том же масштабе, как <span lang="en-US">Canonical</span>, нет и поэтому я очень горд тем, какую роль мы играем в этой экосистеме. Для меня было бы очень печально, если б все усилия, которые сообщество свободного ПО затрачивает на разработку приложений для рабочих станций, были потрачены впустую. <br />
<br />
В настольных компьютерах, которые Canonical поддерживает в крупных организациях, нет чего-то секретного или закрытого. Подлинным чудом для меня является то, что и в истории из Новой Зеландии, и в истории с миграцией компьютеров фигурирует один и тот же код. Для меня это истинное назначение свободного ПО. Когда я сам участвовал в проектах с открытым кодом, я всегда был рад, когда результаты моей работы могли служить не только моим потребностям, но и оказаться полезными многим другим. <br />
<br />
Ubuntu лишь малая часть огромной экосистемы, но я горжусь тем, как мы подошли к решению этих задач. <br />
<br />
Canonical использует различные подходы для взаимодействия с другими компаниями, которые работают с Linux, и не занимается скрытой критикой конкурентов просто потому, что у нас есть свои принципы. Сила свободного ПО именно в наличии огромного количества разных компаний, совместно работающих над различными целями. <br />
<br />
В последние несколько недель неоднократно заявлялось, что Canonical преследует какие-то свои собственные интересы и действует отнюдь не в интересах сообщества, занимающегося открытыми исходными кодами. Это все лживые заявления, потому что большинство из нас наоборот мотивировано делать все, что мы только сможем, чтобы способствовать делу свободного ПО как в интересах конечных пользователей, так и сообщества, которое его делает, и мы убеждены, что существование Ubuntu и Canonical это лучший способ для достижения этой цели. И этот пост показывает результаты размышлений над этими вопросами: это моя собственная позиция показывающая, что именно я делаю и почему я испытываю чувство гордости от тех усилий, которые затрачиваю каждый день. <br />
<br />
Что мы вместе делаем для свободного ПО? И что же я сам могу сделать для него? <br />
Во-первых, мы занимаемся доставкой его конечным пользователям. Мы снижаем влияние потребительской инерции и тех факторов, которые мешают людям попробовать бесплатное ПО и решить для себя, нравится ли оно им в той мере, чтобы начать им пользоваться. Сотни из тех, кто сейчас участвует в свободном ПО (разработчиков, переводчиков, дизайнеров, пропагандистов) получили возможность стать частью нашего движения, поскольку для них не стало проблемой слегка намочить ноги в воде. И это совсем не легко. Просто посмотрите <span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.techdrivein.com/2010/08/massive-changes-coming-to-ubuntu-1010.html">на результаты нашей многолетней работы</a></u></span></span> над упрощением инсталлятора Linux, что стало возможно только благодаря труду многих групп людей и было бы просто невозможно без участия Canonical и Ubuntu. <br />
<br />
Есть тысячи людей, которые довольствуются сборкой свободного ПО для себя, и это не преступление. Но желание облечь его в такую форму, чтобы другие могли его попробовать, изучить и затем удобно использовать, нужно тоже приветствовать. И именно этому в сообществе Ubuntu придается огромное значение: если вы почитаете planet.ubuntu.com, вы станете свидетелем радости <b>многих людей, использующих свободное ПО</b>. Как сообщество мы глубоко удовлетворены тем, чтобы люди <b>использ</b><b>овали</b><b> его</b> для решения каких-то задач в своей жизни. Это радует гораздо больше, чем истории о том, как мы «сделали это быстрее» или «добавили новую функцию». Мы, конечно, работаем и над тем и над другим, но сообщество больше ценит влияние на мир, а не на код. Люди<span lang="en-US"> </span>очень<span lang="en-US"> </span>ценят<span lang="en-US"> </span>свое<span lang="en-US"> </span>время<span lang="en-US"> </span>и<span lang="en-US"> </span>опыт<span lang="en-US">. </span>Я горжусь тем, что Ubuntu привлекает людей, вносящих свой щедрый вклад в общее дело. Поэтому мы благодарим и Kubuntu, и Xubuntu, и <span lang="en-US">Puppy</span>, и Linux Mint. Они не висят у нас на хвосте, они стоят на наших плечах, так же, как мы стоим на плечах гигантов. И это здорово. Наша работа будет более значимой и ценной, потому что их работа достигает тех пользователей, которых не достигли мы. <br />
<br />
<b>Что еще? </b> <br />
Посмотрите на проект <span style="color: navy;"><span lang="zxx"><u><a class="western" href="https://wiki.ubuntu.com/PaperCut">Papercut</a></u></span></span>, основанный на том положении, что все невероятные технологии и усилия, направленные на какой-то сложный проект (например, такой как ядро Linux) имеют нулевую ценность, если средний пользователь не может с ним работать. И, наоборот, проект ценен тогда, когда он <b>просто работает</b>. Сотни пожеланий пользователей были учтены во многих различных приложениях, пользу от чего получает не только Ubuntu, но и любые другие дистрибутивы, их использующие. Если вы думаете, что это легко, попробуйте оценить усилия, затрачиваемые на сортировку и рассмотрение каждого из тысяч предложений, координацию исправлений и их дальнейшее распространение. Результаты неустанного труда большой команды видны невооруженным взглядом. <br />
<br />
Другой пример: сохранить миллионам пользователей 1 час в неделю - это экономия энергии, которую можно получить, используя свободное ПО. Хоть команда дизайнеров Canonical играет ведущую роль в создании проекта Papercuts, настоящие звезды представлены здесь - <span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.omgubuntu.co.uk/2010/06/maverick-papercut-hunting-season-opens.html">http://www.omgubuntu.co.uk/2010/06/maverick-papercut-hunting-season-opens.html</a></u></span></span> . Каждый может внести предложение, как для версии <span lang="en-US">Desktop</span> <a class="western" href="http://ubuntuserver.wordpress.com/2010/01/20/ubuntu-server-papercuts-project/">http://ubuntuserver.wordpress.com/2010/01/20/ubuntu-server-papercuts-project/</a>, так и для <span lang="en-US">Server</span>. <br />
<br />
Лично я положил много на руководство и управление проектом и создание структуры сообщества. Когда мы только начинали Ubuntu, я потратил много времени на анализ существующих сообществ, на то как в них разрешаются неизбежные трения и разногласия, возникающие, когда у вас есть много умных и талантливых людей, взаимодействующих между собой. Для решения этого вопроса мы составили кодекс поведения, который будет гарантировать, что наша страсть к технологии и/или работе не подавит основную цель - собрать разных людей вместе, чтобы совместно работать над общей платформой. Я очень рад, что эта идея распространилась и на другие проекты: у нас нет цели тайно вынашивать идеи, проекты и мысли, которые шли бы вразрез с нашим назначением. <br />
<br />
Мы создали простейшую структуру: <i>технический совет (technical board)</i> и <i>совет сообщества (community council)</i>. Такой подход в настоящее время широко распространена и во многих других проектах. Поскольку проект Ubuntu вырос, управление претерпело изменения, в настоящее время есть несколько управляющих команд для таких групп, как Kubuntu, форумы и IRC, которые дают советы и руководят такими группами, как LoCo, модераторы, оперативный отдел, разработчики, которые, в свою очередь, стремяться к техническому совершенству и умению работать с людьми, как часть огромного мирового сообщества. Это удивительно и прекрасно. Когда люди начинают участвовать в Ubuntu, как правило, они мотивированы не только желанием быть частью замечательного сообщества, но и исправлением конкретной проблемы или внесением какой-либо идеи по улучшению. С течением времени некоторые из этих людей сознают, что они могут помочь людям быть более креативными, разрешать разногласия, организовывать работу группы так, чтобы результат был гораздо лучше, чем сможет сделать один человек. Наша структура управления проектом создает все возможности для таких людей: они составляют основу и структуру, которая делает это сообщество легко масштабируемым, производительным и довольным. <br />
<br />
Такой проект, как Ubuntu, нуждается в постоянном уходе, чтобы защищать свои ценности. Когда вы малы и поднимаете плакат с надписью «мы делаем вот это» вы, как правило, привлекаете только тех людей, которых это интересует. Когда проект перерастает в нечто мощное и <span lang="ru-RU">заметное</span>, вы, как правило, начинаете привлекать ВСЕХ, потому что люди хотят быть там, где что-то происходит. И<span lang="en-US"> </span><span lang="ru-RU">значимость проекта </span>может<span lang="en-US"> </span>легко<span lang="en-US"> </span><span lang="ru-RU">пойти </span>вниз<span lang="en-US">. </span>Так, я по-прежнему трачу много энергии на работу с советом сообщества Ubuntu и командой Canonical по взаимодействию с сообществом, и они оба являются талантливыми и трудолюбивыми, потому что эта часть моей работы приносит мне огромное удовольствие. Совет сообщества Ubuntu относится к своим обязанностям хранителя ценностей проектов сообщества очень серьезно. <span lang="ru-RU">Он </span>в основном состоит из людей, которые не связаны с Canonical, но которые тем не менее считают, что проект Ubuntu важен для свободного программного обеспечения в целом. И бесподобный <span lang="en-US">Jono Bacon</span>, восхитительный <span lang="en-US">Daniel Holbach</span>, и невозмутимый <span lang="en-US">Jorge Castro </span><span lang="ru-RU">-</span> профессионалы, которые понимают, как сделать работу сообщества продуктивной и успешной. <br />
<br />
<span lang="ru-RU">Нечто столь же большое </span>как сообщество Ubuntu не может быть только моей или чьей-то еше заслугой, но я горжусь той ролью, которую сыграл и буду продолжать играть по возможности. <br />
<br />
<span style="color: black;">В последние годы я стараюсь обращать больше внимания на соревнование за </span><span style="color: black;">наи</span><span style="color: black;">лучш</span><span style="color: black;">ее оформление</span><span style="color: black;"> в свободном ПО. Я с</span>читаю, что свободное ПО обладает лучшим качеством, но думаю, нам нужно точно знать, что мы хотим создать для наших пользователей, будь то рабочая станция, нетбук или сервер. <span lang="ru-RU">Поэтому </span>я трачу так много моего времени на вдохновление различных сообществ - и Ubuntu, и <span lang="en-US">upstream</span> -<span lang="en-US"> </span><span lang="ru-RU">чтобы приглашать в них тех, </span>кто видит ПО глазами обычного пользователя, а не опытного хакера. Это фундаментально изменит ценность открытого ПО, и я не могу надеяться, что такую задачу можно осилить в одиночку, но я тем не менее горжусь тем, что являюсь чемпионом этого подхода и рад, что все предложенное неуклонно принимается. <br />
<br />
<span lang="ru-RU">В свободном ПО уже были </span>дизайнеры и до того, как мы это <span lang="ru-RU">предложили.</span><span lang="en-US"> </span><span lang="ru-RU">Я</span> надеюсь, они чувствуют, что внимание Canonical в области концепции лидирующей роли дизайна сделало их жизнь легче, и сообщество в целом больше ценит их усилия и восприимчиво к их идеям. <span lang="en-US">И</span> все-таки, если вы <b>действительно</b> заботитесь о внешнем виде свободного ПО, команда по дизайну Canonical (<span lang="en-US">Canonical design team</span>) ждет вас. <br />
<br />
Я делаю некоторую часть работы по оформлению сам и участвую в разработке дизайна <span lang="en-US">Unity</span> <span lang="ru-RU">- интерфейс</span><span lang="ru-RU">а</span><span lang="ru-RU"> для </span>Ubuntu Netbook Edition 10.10. Это<span lang="en-US"> </span><span lang="ru-RU">следующее поколение старого интерфейса </span><span lang="en-US">UNR. </span><span lang="ru-RU">С</span>амое<span lang="en-US"> </span>главное в нем -<span lang="en-US"> </span>это<span lang="en-US"> </span>утверждение<span lang="en-US">, </span>что<span lang="en-US"> </span><span lang="ru-RU">рабочие станции </span><span lang="en-US">Linux </span>не<span lang="en-US"> </span>должны<span lang="en-US"> </span>быть<span lang="en-US"> </span>застревать в<span lang="en-US"> 90-</span>х<span lang="en-US">, </span>мы<span lang="en-US"> </span>можем<span lang="en-US"> </span>и<span lang="en-US"> </span>будем<span lang="en-US"> </span>пытаться<span lang="en-US"> </span>построить<span lang="en-US"> </span>новые<span lang="en-US"> </span>и<span lang="en-US"> </span>эффективные<span lang="en-US"> </span>способы<span lang="en-US"> </span><span lang="ru-RU">взаимодействия </span>с<span lang="en-US"> </span>компьютерами<span lang="en-US">. </span>Я был в восторге от скорости, с которой некоторые объекты <span lang="en-US">Unity </span>были приняты сотн<span lang="ru-RU">ями</span> проектов, их цель сделать использование Linux гораздо более простым и прекрасным для всех, так как скорость этой адаптации является мерой того, насколько быстро пользователи смогут лучше адаптироваться к новым способам использования своих компьютеров. <br />
<br />
Дизайн сам по себе ставит нас в положение, удобное для обвинения в желании свалить работу по его внедрению на других, так что я горжусь нашей замечательной командой, которая занята реализацией некоторых из этих основных компонентов. <span lang="ru-RU">В частности</span><span lang="en-US">, dbusmenu </span>оказалось<span lang="en-US"> </span>полезным<span lang="en-US"> </span>для<span lang="en-US"> о</span><span lang="ru-RU">рганизации</span><span lang="en-US"> </span><span lang="ru-RU">с</span>огласованности<span lang="en-US"> в</span><span lang="ru-RU">нешнего вида</span><span lang="en-US"> </span><span lang="ru-RU">приложений </span><span lang="en-US">GNOME </span>и<span lang="en-US"> KDE, </span>работающих<span lang="en-US"> </span>под<span lang="en-US"> Unity, </span>и<span lang="en-US"> </span>я<span lang="en-US"> </span>очень<span lang="en-US"> </span>надеюсь<span lang="en-US">, </span>что<span lang="en-US"> </span>оно<span lang="en-US"> </span>будет<span lang="en-US"> </span>принято<span lang="en-US"> </span><span lang="ru-RU">в </span>другие<span lang="en-US"> </span>проекты<span lang="en-US">, </span>которые<span lang="en-US"> </span>нуждаются<span lang="en-US"> </span><span lang="ru-RU">в тех интерфейсах, которые </span>оно<span lang="en-US"> </span>предоставляет<span lang="en-US">. </span>Я полностью доверяю нашей инженерной команде, нацеленной на качество готового продукта, которая предоставит разработчикам простой и ясный <span lang="en-US">API </span><span lang="ru-RU">и руководство о том, как его использовать</span>. Если вы использовали полный набор индикаторов в 10.10, то вы в курсе той работы, которая была сделана без лишнего шума и вобрала в себя результаты многих различных проектов и превратившей панель в нечто прекрасное и эффективное. Utouch также приближается к своему первому релизу и будет продолжать развиваться, так что и Ubuntu, и GNOME, и KDE получат простой способ реализации поддержки жестов Multi-Touch. <br />
<br />
<span lang="ru-RU">Помимо </span><span lang="ru-RU">этого</span>, я также занимаюсь финансовой поддержкой различных проектов. <span lang="ru-RU">Целесообразность вклада </span>денег в свободное ПО должна определяться ответом на следующий вопрос: может ли результат вложения денег в другой проект, помочь большему количеству людей? Есть много способов помогать людям: на $100 000 можно отправить многих в школу, одеть и накормить их. <span lang="ru-RU">Поэтому </span>я<span lang="en-US"> </span>действительно<span lang="en-US"> </span>должен<span lang="en-US"> </span>быть<span lang="en-US"> </span>уверен<span lang="en-US">, </span>что<span lang="en-US"> </span><span lang="ru-RU">этими </span>деньгами я привношу реальное<span lang="en-US"> </span>воздействие<span lang="en-US"> </span>на<span lang="en-US"> </span>жизнь<span lang="en-US"> </span>людей<span lang="en-US">. </span>Благодарственные письма, которые я получаю каждую неделю, помогают мне сохранить уверенность в этом. Более того, мои собственные наблюдения того каталитического эффекта, который Ubuntu дает всей экосистеме ПО с открытым исходным кодом, с точки зрения привлечения новых разработчиков, создания новых платформ, создания нового бизнеса, признания новых участников, придают мне уверенность, что обеспечиваемое мной финансирование оказывает значимые последствия. <br />
<br />
Когда мы только задумывали Ubuntu, экосистема Linux была в некотором смысле полностью сформирована. <span lang="en-US">У </span><span lang="ru-RU">нас уже было</span><span lang="en-US"> </span>ядро<span lang="en-US">. </span><span lang="ru-RU">У нас уже были </span><span lang="en-US">GNOME </span>и<span lang="en-US"> KDE. </span><span lang="ru-RU">У нас были</span><span lang="en-US"> </span>X, <span lang="en-US">l</span>ibc и <span lang="en-US">GCC</span> и <span lang="ru-RU">все остальные хорошо знакомые инструменты</span>. <span lang="en-US">Е</span><span lang="ru-RU">стественно</span>, что в них были ошибки, недостатки, были планы по их устранению. Но кое-чего не хватало: иногда это «кое-что» формулируется как «маркетинг», а иногда как «все для конечного пользователя». <span lang="ru-RU">Я п</span>омню<span lang="en-US">, </span><span lang="ru-RU">как</span><span lang="en-US"> </span>подумал<span lang="en-US"> «</span>вот<span lang="en-US"> </span>то, что<span lang="en-US"> </span>я<span lang="en-US"> </span>могу<span lang="en-US"> </span><span lang="ru-RU">сделать»</span><span lang="en-US">. </span><span lang="ru-RU">Именно поэтому </span>Ubuntu и Canonical не прикладывают усилия к тому, что и так хорошо работает, вместо этого мы сосредотачиваем свое внимание на новых идеях, новых инструментах и новых компонентах.<span lang="en-US"> </span>Я считаю это живительным взаимодействием со всей экостистемой открытого ПО, и я слышу от многих людей, что они воспринимают его точно так же. Те, кто говорят «Canonical не участвует в разработке X», правы, но упускают из вида все, что мы делаем с нуля. Конечно, есть мало того, что мы делаем в одиночку, и мало чего из того, что мы делаем, не смог бы сделать кто-то другой, но я думаю, что энергия сообщества Ubuntu и энтузиазм ее пользователей отражает тот факт, что в проекте есть кое-что отличное от других. Это «кое-что» заставляет нас торжествовать, гордиться своим трудом, и мотивирует нас продолжать. <br />
<br />
<span lang="ru-RU">Свободное ПО </span>больше, чем любой из проектов. Оно больше, чем ядро Linux, чем GNU, чем GNOME и KDE, чем Ubuntu, Fedora и Debian. Каждый из этих проектов играет свою собственную роль, но это все в целом реально меняет мир. Поэтому, когда мы начинаем спорить друг с другом о том, какая часть свободного ПО перспективнее, мы рискуем упустить картину в целом. Это немного похоже на аутоиммунные заболевания, когда организм начинает атаковать сам себя. <span lang="ru-RU">Т</span>от, кто напряженно работает в течение всего дня, чтобы донести свободное ПО до более широкой аудитории, играет на той же стороне, что и я, если уж мы применяем такую терминологию. Я восхищаюсь и уважаю всех тех, кто вкладывает свою энергию в продвижение свободного программного обеспечения, даже если он делает это по-другому. <br />
<div style="margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="margin-bottom: 0cm;"><span style="color: navy;"><span lang="zxx"><u><a class="western" href="http://www.markshuttleworth.com/archives/517">Ссылка на оригинал</a></u></span></span></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com5tag:blogger.com,1999:blog-2986307105622275526.post-86912301399103936892010-09-03T13:34:00.008+04:002011-07-07T22:37:46.873+04:00Система инициализации Systemd. Часть IIЭто продолжение <a href="http://tux-the-penguin.blogspot.com/2010/09/systemd.html">начатого тут</a>.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Собира<span lang="ru-RU">ем</span> все вместе - systemd </h4><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Выше я объяснил, что должен делать хороший процесс с PID 1 и как работают <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">существующие</span> системы инициализации. Перед тем как перейти к самому главному, давайте сделаем еще паузу. Сходите налейте себе еще кружечку кофе. Это того стоит. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Как вы, наверное, уже догадались, те требования и возможности для идеальной системы инициализации, что я предложил выше, существуют уже сейчас в системе инициализации, названной нами systemd, которую я и хочу тут представить.</span> <a href="http://git.0pointer.de/?p=systemd.git">Здесь ее код.</a> Ниже приведен краткий спис<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">ок ее особенн</span>остей и их обоснование.</div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Поскольку systemd запускает и контролирует всю систему, отсюда и ее название. Она реализует все возможности, указанные выше, и еще кое-что. Система построена на концепции модулей (<i>units</i>)<i>.</i> Модули имеют имя и тип. Поскольку их конфигурация обычно загружается из файловой системы - названия модулей на самом деле представляют собой имена файлов. Например: модуль <tt class="western"><i>avahi.service</i></tt> считывается из конфигурационного файла с тем же именем и естественно, что он реализует работу с демоном Avahi. Существует несколько видов модулей:<tt class="western"><b> </b></tt></div><div align="LEFT" style="margin-bottom: 0cm;"><ul><li><span class="western" style="font-family: Arial, Helvetica, sans-serif;"><b>service/сервис</b>:</span><tt class="western"> </tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">наиболее очевидный тип мод</span>уля: это демоны, которые могут быть запущены, остановлены, перезапущены или перезагружены. Для совместимости с SysV в systemd помимо собственных файлов конфигурации для различных сервисов имеется возможность чтения классических скриптов инициализации SysV, а также она умеет разбирать заголовок LSB, если он существует. /etc/init.d является, следовательно, не более, чем просто еще одним источником конфигурации. </li>
</ul></div><div align="LEFT" style="margin-bottom: 0cm;"></div><ul><li> <b>socket/сокет:</b> данный модуль реализует сокет, расположенный в файловой системе или в Интернете. В настоящее время поддерживаются сокеты AF_INET, AF_INET6, AF_UNIX типов stream, datagram и последовательных пакетов (sequential packet). Также поддерживаются классические буферы FIFO. Каждый модуль типа «сокет» имеет соответствующий ему модуль «сервис», который запускается при попытке установки соединения с сокетом или буфером FIFO. Пример: <tt class="western"><i>nscd.socket</i></tt> при установке соединения запускает <tt class="western"><i>nscd.service</i></tt>. <tt class="western"><b> </b></tt></li>
<li><b style="font-family: Arial,Helvetica,sans-serif;"><span class="western">device/устройство</span>:</b><span style="font-family: Arial, Helvetica, sans-serif;"> </span> этот модуль реализует устройство в дереве устройств Linux. Если устройство описано через правила <span lang="en-US">ud</span>ev, он<span lang="ru-RU">о</span> будет представлено в systemd как модуль <tt class="western"><i>устройство</i></tt>. Набор параметров устройства, установленный <span lang="en-US">u</span><tt class="western">dev, будет использоваться</tt> <span lang="en-US">systemd </span>как исходный в определении зависимостей для этого типа модулей.<tt class="western"><b> </b></tt></li>
<li><span class="western" style="font-family: Arial, Helvetica, sans-serif;"><b>mount</b><span lang="en-US"><b>/</b></span><span lang="ru-RU"><b>точка монтирования</b></span></span><b style="font-family: Arial,Helvetica,sans-serif;">:</b> модуль реализует точку монтирования в файловой системе. systemd контролирует все точки монтирования (их подключение и отключение), а также может быть использована для монтирования и размонтирования отдельных файловых систем. Файл <span lang="en-US">/etc/fstab </span>используется <span lang="ru-RU">как </span>дополнительный источник конфигурации для них, подобно тому, как сценарии инициализации SysV могут быть использованы в качестве дополнительного источника конфигурации для модулей <span lang="en-US"><i>service</i></span><span lang="en-US">.</span><tt class="western"><span style="font-style: normal;"><b> </b></span></tt></li>
<li><b><span style="font-family: Arial, Helvetica, sans-serif; font-size: small;"><span class="western"><span style="font-style: normal;">automount</span></span><span class="western"><span lang="en-US"><span style="font-style: normal;">/</span></span></span><span class="western"><span lang="ru-RU"><span style="font-style: normal;">точка монтирования с автоматическим подключением</span></span></span>:</span></b> модуль реализует точку монтирования с автоматическим подключением файловой системы. Каждый такой модуль имеет соответствующий ему модуль типа <span lang="en-US"><i>mount</i></span>, котор<span lang="ru-RU">ый</span> запускается (т.е. подключается), как только монтируемая файловая система становится доступной.<span lang="en-US"><b> </b></span></li>
<li><b><span lang="en-US" style="font-family: Arial, Helvetica, sans-serif;">target/</span><span lang="ru-RU" style="font-family: Arial, Helvetica, sans-serif;">указатель</span><span style="font-family: Arial, Helvetica, sans-serif;">:</span></b> данный тип модулей используется для логической группировки других модулей: на самом деле сам по себе он ничего не делает, он просто указывает <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">на другие модули, которыми таким </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">способом </span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">можно управлять вместе. В качестве примера можно привести модули </span><tt class="western"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">multi-user.target</span></i></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, </span><span style="color: black;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">который иг</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">рает роль 5-го уровня запуска в классической схеме SysV, и </span><tt class="western"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">bluetooth.target</span></i></tt><span style="font-style: normal;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">,</span></span><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">активируемый, как только становится доступен Bluetooth-адаптер, и запускающий сервисы, имеющие отношение к Bluetooth (которые обычно не запущены</span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> - </span><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">bluetoothd</span></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> и </span><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">obexd) (</span></tt><tt class="western"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">т. е. по сути это придет на смену традиционным уровням запуска </span></i></tt><tt class="western"><span lang="en-US"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">SysV - </span></i></span></tt><tt class="western"><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">прим. перев.</span></i></span></tt><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">)</span></tt>.<tt class="western"><b> </b></tt></li>
<li><span class="western" style="font-family: Arial, Helvetica, sans-serif;"><b>snapshot</b><span lang="en-US"><b>/</b></span><span lang="ru-RU"><b>снимок:</b></span></span><b> </b>подобно предыдущему типу модулей снимки также ничего не делают сами, и их единственное преданзначение заключается в ссылке на другие модули. Снимки могут быть использованы для сохранения состояния и возможности отката назад состояния всех служб и модулей системы инициализации. Он, главным образом, предназначен для двух случаев. Первый, чтобы позволить пользователю временно перевести систему в какое-то специфичное состояние, например, однопользовательский режим с остановкой всех работающих сервисов, а затем легко вернуться в предыдущее состояние с одновременным<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> запуском тех сервисов, которые были перед этим запущены. В</span>торой вариант его использования - поддержка режима <span lang="en-US">suspend: </span><span lang="ru-RU">достаточно </span>много сервисов<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> не мог</span>ут корректно работать с этой системой, и зачастую их лучше остановить перед засыпанием, а потом просто запустить. </li>
</ul><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Приведенные модули могут иметь зависимости друг от друга (как положительные, так и отрицательные, т. е. бывает, что одни без других не могут обойтись, а другие, наоборот, не могут терпеть друг друга): например, модуль <i>устройство</i> может<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> зависеть от как</span>ого-то модуля <i>сервис</i>, т.е. как только устройство становится доступным - запускается определенный сервис. Модули <span lang="en-US"><i>mount</i></span><span lang="en-US"> </span><span lang="ru-RU">имеют неявную </span>зависимость от устройства, которое они пытаются смонтировать. Также они наследуют неявные зависимости от префиксов путей к точкам монтирования (например, модуль, подключающий <tt class="western">/home/lennart,</tt> неявно зависит от модуля, подключающего <span lang="en-US">/home</span><tt class="western">)</tt>и так далее. </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div align="LEFT" style="margin-bottom: 0cm;">Краткий перечень <span lang="ru-RU">остальных </span>функциональных возможностей:<br />
<ol><li>Для каждого порожденного процесса<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> вы можете ко</span>нтролировать: среду исполнения, ограничения ресурсов, рабочую и корневую директории, <span lang="en-US">umask</span>, настройки OOM <span lang="en-US">killer</span>, <span lang="ru-RU">параметр </span><span lang="en-US">nice</span>, <span lang="ru-RU">класс и приоритет операций ввода-вывода, политику и </span>приоритеты использования процессора, привязку к процессору, таймер, идентификаторы пользователя, основной и дополнительных групп, списки директорий, доступных для чтения/записи, список директорий, доступ к которым запрещен, флаги монтирования, биты безопасности, параметры, относящиеся к планировщику процессора CPU, области видимости <tt class="western">/tmp</tt>, привязку к cgroup для различных подсистем. Также можно присоединить stdin/stdout/stderr сервисов к <span lang="en-US">syslog, /dev/kmsg</span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">произвольным </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">TTY. </span></span><span lang="ru-RU">Если вы присоединяете </span><span lang="en-US">TTY </span><span lang="ru-RU">ко входу </span><span lang="en-US">systemd - </span><span lang="ru-RU">удостоверьтесь в том, что</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> процесс получает эксклюзивный доступ.</span></span> </li>
<li>Каждый запущенны<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">й процесс получает с</span>обственную <span lang="en-US">cgroup (</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">в текущем состоянии разработки по умолчанию они создаются в подсистеме </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">debug,</span></span><span lang="en-US"> </span><span lang="ru-RU">поскольку она все равно не используется). С помощью </span><span lang="en-US">systemd </span><span lang="ru-RU">также легко помещать отдельные сервисы в различные </span><span lang="en-US">cgroups, </span><span lang="ru-RU">причем, это можно сделать из пользовательского пространства, например, посредством утилит </span><span lang="en-US">libcgroups.</span> </li>
<li>Файлы конфигурации <span lang="en-US">systemd </span><span lang="ru-RU">имеют синтаксис, аналогичный используемому в файлах .</span><span lang="en-US">desktop, </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">который </span></span><span lang="ru-RU">прекрасно разбирается (</span><span lang="en-US">parse</span><span lang="ru-RU">) многими имеющимися утилитами и имеет все необходимое для интернационализации. Поэтому администраторам и разработчикам не нужно учить нов</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">ый синтаксис.</span></span> </li>
<li>Как упоминалось выше, <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">мы (З</span><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">десь и далее под "мы" понимаются разработчики </span></i><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">и сама </span></i></span><span lang="en-US"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">systemd, </span></i></span><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">надо смотреть по контексту. Обычно это нормально, когда автор осознает свое единство со своим творением :)</span></i></span><span lang="en-US"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">. </span></i></span><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Список основных разработчиков приведен в конце этой статьи. Прим. перев.</span></i></span><span lang="ru-RU"><span style="font-style: normal;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">)</span></span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span>обеспечиваем совместимость со скриптами <span lang="en-US">SysV, </span><span lang="ru-RU">дополнительно к этому обрабатываются заголовки </span><span lang="en-US">LSB </span><span lang="ru-RU">и утилиты </span><span lang="en-US">chkconfig RedHat. </span><span lang="ru-RU">Если их нет, просто используется любая доступная информация (такая, как приоритеты запуска сервисов) из </span><span lang="en-US">/etc/rc.d. </span><span lang="ru-RU">Поскольку эти скрипты начинают просто читать другой источник конфигурации, обновиться с </span><span lang="en-US">SysV</span><span lang="ru-RU"> на </span><span lang="en-US">systemd </span><span lang="ru-RU">достаточно легко</span>. Дополнительно <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">мы можем чит</span>ать классические <span lang="ru-RU">PID-файлы сервисов, чтобы определить </span><span lang="en-US">PID </span><span lang="ru-RU">главного демона.</span> Также<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> мы мо</span>жем использовать информацию о зависимостях из <span lang="ru-RU">LSB-заголовка</span> скрипта и транслировать ее в <span lang="en-US">«</span>родной» формат описания зависимостей для <span lang="en-US">systemd. </span><span lang="ru-RU">Важное замечание:</span> <span lang="en-US">Upstart </span><span lang="ru-RU">не может использовать эту информацию.</span> Во время запуска <span lang="en-US">Upstart, в отличие от systemd, </span><span lang="ru-RU">не распараллеливает запуск большей части скриптов </span>LSB и/или SysV<span lang="en-US">.</span> <span lang="ru-RU">Фактически, для </span>Upstart все скрипты SysV - это одно исполняемое задание (<i>Тут опять автор немного лукавит. В </i><span lang="en-US"><i>Upstart </i></span><span lang="ru-RU"><i>просто оставлен слой совместимости со скриптами </i></span><span lang="en-US"><i>SysV, </i></span><span lang="ru-RU"><i>который действительно работает, как описано. Но это именно что </i></span><span lang="ru-RU"><i><b>слой совместимости</b></i></span><span lang="ru-RU"><i> с теми службами, управляющие скрипты которых по каким-то причинам пока не отконвертированы в </i></span><span lang="en-US"><i>"</i></span><span lang="ru-RU"><i>родной</i></span><span lang="en-US"><i>"</i></span><span lang="ru-RU"><i> формат для </i></span><span lang="en-US"><i>Upstart, </i></span><span lang="ru-RU"><i>а не "злостная недоработка" разработчиков </i></span><span lang="en-US"><i>Upstart. </i></span><span lang="ru-RU"><i>Прим. перев.</i></span><span lang="ru-RU">)</span>.</li>
<li>Аналогичным образом, существующий файл <span lang="en-US">/etc/fstab </span>читается<span lang="en-US"> </span><span lang="ru-RU">и используется как еще один источник конфигурации. А </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">с использованием опц</span></span><span lang="ru-RU">ии </span><tt class="western"><span lang="ru-RU">comment=</span></tt><span lang="ru-RU"> fstab вы даже можете отметить отдельные записи в этом файле, чтобы передать их под контроль </span><span lang="en-US">systemd (</span><span lang="ru-RU">для обеспечения работы функционала автоматического монтирования).</span> </li>
<li>Если для одного сервиса существует несколько файлов конфигурации (например, есть два файла <tt class="western">/etc/systemd/system/avahi.service и /etc/init.d/avahi), тогда "родной" формат файлов имеет преимущество. Устаревший формат файлов игнорируется, позволяя легко провести обновление.</tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></li>
<li><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы также п</span>оддерживаем механизм использования шаблонов. Например, вместо того, чтобы иметь шесть одинаковых конфигурационных файлов для шести <span lang="en-US">getty, </span><span lang="ru-RU">у нас есть только один файл </span><tt class="western"><span lang="ru-RU"><i>getty@.service</i></span></tt><tt class="western"><span lang="ru-RU">, который используется сервисом </span></tt><tt class="western"><span lang="ru-RU"><i>getty@tty2.service</i></span></tt><tt class="western"><span lang="ru-RU"> и аналогичными ему. Интерфейсная часть также может наследоваться выражениями, описывающими зависимости, т. е. легко понять, что сервис </span></tt><tt class="western"><span lang="ru-RU"><i>dhcpcd@eth0.service</i></span></tt><tt class="western"><span lang="ru-RU"> запускается сервисом </span></tt><tt class="western"><span lang="ru-RU"><i>avahi-autoipd@eth0.service</i></span></tt><tt class="western"><span lang="ru-RU">.</span></tt> </li>
<li>Д<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">ля активации сервисов посредством сокетов, мы поддерживаем полную совместимость с традиционной моделью </span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">inetd, </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">а также простой режим, имитирующий работу </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">launchd, </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">который ре</span></span><span lang="ru-RU">комендуется к использованию для вновь создаваемых сервисов. </span>Режим совместимости с <span lang="en-US">inetd </span><span lang="ru-RU">позволяет передавать запускаемому демону только один сокет, в то время как "родной" режим работы позволяет передавать произвольное количество дескрипторов файлов. </span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы поддерживаем как режим с одним экземпляром сервиса на одно соединение, так и с одним экземпляром на все соединения.</span> Например: <tt class="western"><i>sshd.socket</i></tt><tt class="western"> может запускать сервис </tt><tt class="western"><i>sshd@192.168.0.1-4711-192.168.0.2-22.service</i></tt><tt class="western"> с </tt><tt class="western"><span lang="en-US"><i>cgroup sshd@.service/192.168.0.1-4711-192.168.0.2-22</i></span></tt><tt class="western"><span lang="en-US"> (</span></tt><tt class="western"><span lang="ru-RU">т. е. </span></tt><tt class="western"><span lang="en-US">IP-</span></tt><tt class="western"><span lang="ru-RU">адрес и номера портов используются в качестве имен). Для сокетов AF_UNIX, используется </span></tt><tt class="western"><span lang="en-US">PID </span></tt><tt class="western"><span lang="ru-RU">и идентификатор пользователя присоединяющегося клиента. Это предоставляет администратору </span></tt>прекрасный инструмент для определения различных экземпляров одного и того же демона и контроля за ним. «Родной режим» передачи сокета легко реализовать в приложениях: переменная <tt class="western">$LISTEN_FDS,</tt> если она установлена, содержит количество передаваемых сокетов, и демон может найти их в файле <tt class="western">.service</tt>, начиная с файлового дескриптора 3 (хорошо написанный демон также может использовать <tt class="western">fstat()</tt> и <tt class="western">getsockname()</tt> для идентификации сокетов в случае, если их больше одного). В дополнение мы устанавливаем переменную <tt class="western">$LISTEN_PID</tt>, содержащую PID главного демона, который получает сокеты, потому что переменные сре<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">ды о</span>бычно наследуются дочерними процессами, что может несколько запутать процессы, находящиеся далее в цепочке. Поскольку логика передачи сокетов очень прост<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">а</span><span style="color: black;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, мы п</span></span><span style="color: black;">р</span>едоставляем примерную реализацию этого процесса под лицензией <span lang="en-US">BSD. </span><span lang="ru-RU">Также </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">мы п</span></span><span lang="ru-RU">ортировали множество существующих демонов на эту схему</span>.<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></li>
<li><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы пр</span>едоставляем совместимость с интерфейсом <span lang="en-US">/dev/initctl. </span><span lang="ru-RU">Эта совместимость фактически реализована с помощью сервиса, активируемого посредством </span><span lang="en-US">FIFO, </span><span lang="ru-RU">который просто транслирует устаревшие</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> запросы в запросы </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">D-B</span></span><span lang="en-US">us. </span><span lang="ru-RU">На практике это означает, что старые команды</span><span lang="ru-RU"> </span><tt class="western"><span lang="ru-RU">shutdown</span></tt><span lang="ru-RU"> , </span><tt class="western"><span lang="ru-RU">poweroff</span></tt><span lang="ru-RU"> и анал</span><span lang="ru-RU">огичные им из </span><span lang="en-US">Upstart </span><span lang="ru-RU">и </span><span lang="en-US">sysvinit </span><span lang="ru-RU">будут работать с </span><span lang="ru-RU">systemd.<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></span></li>
<li><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы</span></span><span lang="ru-RU"> предоставляем совместимость с </span><span lang="en-US">utmp </span><span lang="ru-RU">и </span><span lang="en-US">wtmp. </span><span lang="en-US">Код, который это делает, выглядит гораздо более жизнеспособным, чем эти файлы :).</span></li>
<li><span lang="en-US">systemd </span><span lang="ru-RU">поддерживает несколько типов зависимостей между модулями. </span><span lang="en-US"> </span><span lang="en-US"><i>After/Before</i></span><span lang="en-US"> </span><span lang="ru-RU">могут использоваться для определения последовательности запуска. Requires</span><span lang="en-US"><i>/Wants</i></span><span lang="en-US"> </span><span lang="ru-RU">определяет статус зависимости, является она обязательной или опциональной</span>. И наконец, <tt class="western"><i>Conflicts</i></tt> определяет отрицательный характер зависимости (<i>т. е. две и более службы, у которых в зависимостях указан</i><span lang="ru-RU"><i>а</i></span><i> </i><span lang="en-US"><i>Conflicts, </i></span><span lang="ru-RU"><i>не смогут быть запущены одновременно</i></span><span lang="en-US"><i> </i></span><span lang="ru-RU"><i>- прим. перев.</i></span>). Есть также еще три, менее часто используемые типы-зависимостей.<span lang="en-US"> </span></li>
<li><span lang="en-US">systemd </span><span lang="ru-RU">построена как система с минимумом транзакций. Это означает: если модуль запросил запуск или остановку, мы добавляем его и все его зависимости во временную транзакцию. Затем проверяем целостность этой транзакции, т.е. последовательности обработки зависимостей </span><span lang="en-US"><i>After/Before</i></span> для всех модулей на возможность появления циклических зависимостей. Если они есть, <span lang="en-US">systemd </span><span lang="ru-RU">пытается исправить ситуацию путем удаления из транзакции «</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">несущественных» (</span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">non-essential</span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">) </span></span><span lang="ru-RU">заданий. Также </span><span lang="en-US">systemd </span><span lang="ru-RU">пытается убрать из транзакции такие из «несущественных» заданий, которые могут остановить како</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">й-либо другой сервис (не имеющий отношение к останавливаемому модулю)</span></span><span lang="ru-RU">. «</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Несущественными» являются такие задания, которые</span></span><span style="color: black;"><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> не относятся к </span></span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">оригинальному запросу, но при этом помещены в очередь на основе зависимостей </span></span><span lang="en-US"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Wants</span></i></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">. </span>В заключение проверяется, могут ли задания в транзакции противоречить заданиям, которые уже находятся в очереди и, если возникла такая ситуация, транзакция отменяется. Если все сработало корректно, транзакция целостна и минимизирована по количеству операций, она ставится в очередь на исполнение. В сухом остатке это означает, что перед запуском запрошенной операции мы проверяем, имеет ли смысл ее вообще выполнять, если возможно, исправляем возникшие ошибки, и затем ничего не делаем, если операцию выполнить невозможно.<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></li>
<li><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы записываем время запуска/остановки, <span lang="en-US">PID </span><span lang="ru-RU">и статус завершения для каждого из порождаемых и/или контроллируемых процессов. Эти данные позволяют увязать демоны с их данными в abrtd, auditd и syslog и создать интерфейс, который выделял бы упавшие демоны и предоставлял бы всю необходимую о них информацию.</span></span></li>
<li><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы также реализовали самостоятельный перезапуск процесса </span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">init</span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> в любое время по требованию. Состояние демона замораживается перед этим и размораживается после. </span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Таким образом мы упрощаем онлайнового обновления с </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">SysV </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">init </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">на </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">systemd, </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">а также передачу полномочий от остановленного к перезапущенному демону</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">.</span> Запросы к открытым сокетам и точкам монтирования autofs, как уже отмечалось выше, будут корректно упорядочены и поставлены в очередь ядром, поэтому клиенты даже не почувствуют, <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">что что-то вообще произошло. </span>Поскольку большая часть информации о состоянии обслуживаемых <span lang="en-US">systemd </span>процесс<span lang="ru-RU">ов</span> хранится в виртуальной файловой системе <span lang="en-US">cgroup</span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">это позволяет нам н</span></span><span lang="ru-RU">е прерывать их исполнения из-за невозможности доступа к данным </span><span lang="en-US">init. </span><span lang="ru-RU">Код, реализующий перечитывание конфигурации </span><span lang="en-US">init, </span><span lang="ru-RU">является общим с кодом его перезапуска</span><span lang="en-US">.</span> </li>
<li>Избавляясь от <span lang="en-US">shell-</span><span lang="ru-RU">скриптов в процессе запуска системы</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, мы переписали основную их часть на </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">C </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">и поместили непосредственно в </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">systemd. </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">В частности, это код таких операций как </span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">монтирование виртуальных файловых систем </span><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">/proc</span></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, </span><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">/sys</span></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> and </span><tt class="western"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">/dev</span></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> и </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">уст</span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">ановка</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> имени хоста.</span> </li>
<li>Состояние сервиса доступно и может к<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">онтроллироваться через </span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">D-Bus </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">(</span></span><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">за это </span></i></span><span lang="en-US"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Upstart </span></i></span><span lang="ru-RU"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">не пинал только самый ленивый - прим. перев.</span></i></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">)</span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">. </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Правда, эта возможность пока не реализована и находится в стадии активной разработки.</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> </span></li>
<li><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Мы придаем особое значение активации сервисов посредством </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">сокетов либо через </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">D-Bus </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">(и, следовательно, поддерживаем обработку соответсвующих зависимостей). В то же время мы поддерживаем традиционные зависимости только между сервисами.</span></span><span lang="ru-RU"> Так</span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">же поддерживается несколько способов, которыми сервис может сообщить о своей готовности: путем вызова </span></span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">for</span></span><span lang="en-US">k() </span><span lang="ru-RU">и завершением родительского процесса (традиционное поведение </span><span lang="en-US">daemonize()) </span><span lang="ru-RU">и посредством публикации своего имени на </span><span lang="ru-RU">D-Bus.</span></li>
<li><span lang="ru-RU">Существует интерактивный режим, который запрашивает подтверждения для каждого из процессов, порождаемого </span><span lang="en-US">systemd. </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Вы можете включить это, передав </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">параметр </span></span><tt class="western"><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">systemd.confirm_spawn=1 в строке параметров ядра.</span></span></tt></li>
<li>С помощью параметра <tt class="western">systemd.default=</tt> в строке параметров ядра вы можете указывать, какой из модулей systemd нужно запускать при загрузке системы. Обычно здесь находится что-то вроде <tt class="western"><i>multi-user.target</i></tt>, но можно <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">указать и </span>какой-то один сервис вместо модулей типа «указатель», к примеру, «из коробки» <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">мы п</span>оставляем сервис <tt class="western"><i>emergency.service</i></tt><span style="font-style: normal;">, который по своему назначению подобен параметру </span><tt class="western">init=/bin/bash</tt>, но по сравнению с ним имеет то преимущество, что можно запустить полнофункциональную систему прямо из оболочки восстановления от сбоев (emergency shell). </li>
<li>Также есть минимальный пользовательский интерфейс, позволяющий запускать/останавливать сервисы и наблюдать за ними. Правда, он еще далек от завершения, но вполне может использоваться как утилита для поиска ошибок. Он написан на Vala и называется <tt class="western"><i>systemadm</i></tt>. </li>
</ol></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следует также заметить, что systemd использует много специфичных для Linux возможностей, не ограничиваясь стандартами POSIX<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">. Это позволяет использовать огромное количество возможностей </span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Linux</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, </span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">разработанных</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> для портируемости, которые ост</span>альные системы не предоставляют. </div><div style="margin-bottom: 0cm;"><br />
</div><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Состояние разработки</h4><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Значительная часть перечисленных выше возможности уже реализована. В настоящее время systemd уже может использоваться как полноценная замена для Upstart и sysvinit (по крайней мере, пока не все сервисы еще отконвертированы в формат Ups<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">tart, за что спасибо разработчикам основных дистрибутивов). </span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Однако объем тестирования </span><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">systemd </span></span><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">минимальный, поэтому</span></span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> номер версии, которую мы имеем на сегодняшний день - это абсолютный и великолепный НОЛЬ.</span> Так что, если решитесь использовать ее в таком виде, как она есть, ждите появления некоторого количества неожиданных проблем (<i>автор намекает на необходимость обязательного наличия бубна при использовании </i><span lang="en-US"><i>systemd </i></span><span lang="ru-RU"><i>на рабочих машинах - прим. перев.</i></span><span lang="ru-RU">)</span>. Другими словами, все должно работать почти стабильно. Кое-кто из нас был настолько смел, что загружа<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">л наши рабочие машины с помощью systemd (не только виртуальные, но и те, которые мы обыч</span>но используем для разработки). В общем, тут как повезет, особенно если пробовать systemd на дистрибутивах, которые мы - разработчики - не используем.</div><div style="margin-bottom: 0cm;"><br />
</div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Предполагаемые направления развития</span></h4><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">С набором возможностей, описанным выше, все понятно. Однако у нас в планах есть еще кое-что. Я на самом деле не люблю много говорить о больших планах, но ниже приведу небольшой обзор того, что мы еще планируем сделать.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Мы хотим добавить, по крайней мере, два типа модулей. Первый - это <i>swap</i>, который будет контролировать раз<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">делы подкачки теми же способами, которыми мы контролируем точки монтирования, т. е. автоматическое разрешение зависимостей для тех устройств, на которых они расположены. Второй - это </span><tt class="western"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">timer</span></i></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">,</span><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> обеспечивающий функционал, подобный </span><tt class="western"><i><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">cron</span></i></tt><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">, т. е. возможность запуск</span>ать сервисы по определенным време<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">нным событиям, используя как обычные временные интервалы, так и календарные даты (т. е. «запустить через 5 часов после последнего запуска» и «запускать каждый понедельник </span>в 5 часов»).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Более важно часть наших планов -<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> это не только экспериментировать с systemd для оптимизации времени запуска, но также сделать из него полноценный и идеальный менеджер сессий, чтобы заменить (или, по к</span>райней мере, попытаться) <tt class="western"><i>gnome-session</i></tt>, <tt class="western"><i>kdeinit</i></tt><span class="western" style="font-family: Arial, Helvetica, sans-serif;"> и подобные демоны.<span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> Набор проблем и задач, которые надо решить для менеджера сессий и системы инициализации по большому счету один и тот же: макси</span>мально быстрый запуск жизненно важных частей и выполнение функций няньки по отношению к запущенным процессам. Для этого можно использовать тот же код.<span style="color: black;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;"> В Apple для этого похожим образом используется </span></span><span style="color: black;"><span lang="en-US"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">l</span></span></span><span style="color: black;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">aunchd. Поэтому мы </span></span><span style="color: black;"><span lang="ru-RU"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">хотим </span></span></span><span style="color: black;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">использовать описанные выше способы активации сервисов через сокеты и D-Bus и максимальную </span></span>параллелизацию запуска процессов и для менеджера сессий и для системных сервисов.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Надо отметить, что все эти возможности уже частично доступны (но реализованы не до конца) в существующей кодовой базе. Например, запускать systemd из-под обычного пользователя уже можно; он даже определяет, что запущен именно таким способом. Поддержка этого режима доступна <span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">с самого начала его разработки (Этот режим полезно использовать для отладки! Для его работы нет необходимости полностью конвертировать систему в формат systemd).</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="background-attachment: scroll; background-clip: initial; background-color: transparent; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat;">Однако есть некоторые вещи, которые мы должны предварительно исправить в ядре и в пользовательском пространстве, прежде чем закончить работу над systemd: нам нужны извещения об изменениях состояния подкачки, способом подобным тому, как сейчас работает с монтирование файловых систем; мы также хотим реализовать извещения когда CLOCK_REALTIME перескакивает на CLOCK_MONOTONIC; мы хотим позволить <a href="http://lkml.org/lkml/2010/2/2/165">обычным процессам получить часть возможностей init</a>; нам нужно <a href="http://lists.freedesktop.org/archives/xdg/2010-April/011446.html">хорошо документированное и общепризнанное место, куда </a><a href="http://lists.freedesktop.org/archives/xdg/2010-April/011446.html">нам</a><a href="http://lists.freedesktop.org/archives/xdg/2010-April/011446.html"> нужно положить сокеты</a>. Ничего из этого не является жизненно необходимым для systemd, но может здорово ее улучшить.</span></div><div style="margin-bottom: 0cm;"><br />
</div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"><span style="color: black;">Вы хотите увидеть <span lang="en-US">systemd </span><span lang="ru-RU">в действии?</span></span></h4><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Мы пока еще не выпускали релизов, поэтому у нас нет готовых тарболов. Но если вам очень хочется, вы всегда можете сделать снимок <a href="http://git.0pointer.de/?p=systemd.git">с нашего текущего репозитория (git)</a>. В дополнение, чтобы вы вообще могли что либо запустить, <a href="http://0pointer.de/public/etc-systemd-system.tar.gz">здесь можно скачать тарбол</a> с конфигурационными файлами для модулей, которые позволяют немодифицированной <span lang="en-US">Fedora13 </span><span lang="ru-RU">работать с </span><span lang="en-US">systemd</span>. <span lang="ru-RU">У нас пока нет готовых </span><span lang="en-US">RPM, </span><span lang="ru-RU">чтобы их предложить вам</span>. </div><div style="margin-bottom: 0cm;">Самый легкий путь - это скачать этот <a href="http://surfsite.org/f13-systemd-livecd.torrent">образ Fedora 13 для qemu</a><span lang="en-US">, </span><span lang="ru-RU">который специально приготовлен для </span><span lang="en-US">systemd. </span><span lang="ru-RU">В меню </span><span lang="en-US">grub </span><span lang="ru-RU">вы сможете выбрать - будете ли вы грузиться с помощью </span><span lang="en-US">Upstart </span><span lang="ru-RU">или с помощью </span><span lang="en-US">systemd. </span><span lang="ru-RU">Эта система имеет минимальный набор модификаций. Информация о сервисах читается исключительно из существующих скриптов </span><span lang="en-US">SysV. «</span><span lang="ru-RU">Благодаря</span><span lang="en-US">» </span><span lang="ru-RU">этому мы не получаем всех преимуществ от активации сервисов посредством сокетов и </span><span lang="en-US">D-Bus. </span><span lang="ru-RU">Но особенности </span><span lang="en-US">systemd </span><span lang="ru-RU">позволяют параллелизовать запуск сервисов только на основе чтения заголовков </span><span lang="en-US">LSB </span><span lang="ru-RU">и уже только это позволяет нам грузиться быстрее, чем через </span><span lang="en-US">Upstart. </span><span lang="ru-RU">Образ сконфигурирован таким образом, чтобы выдавать информацию для отладки на последовательную консоль и в буфер ядра для ведения логов (просматриваемый с помощью </span><span lang="en-US">dmesg). </span><span lang="ru-RU">Поэтому необходимо сконфигурировать для </span><span lang="en-US">qemu </span><span lang="ru-RU">поддержку виртуального последовательного терминала. В качестве всех паролей установлен </span><span lang="en-US">systemd.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm;">Еще более простой путь - это посмотреть на эти прекрасные скриншоты. На первом приведен интерфейс утилиты <span lang="en-US">systemadm:</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><div class="separator" style="clear: both; text-align: center;"><a href="http://0pointer.de/public/systemadm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="533" src="http://0pointer.de/public/systemadm.png" width="640" /></a></div><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="ru-RU">Здесь показан список загруженных модулей и вывод детальной информации об одном из экземпляров </span><span lang="en-US">getty.</span></div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;"><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://0pointer.de/public/pscgroups.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="532" src="http://0pointer.de/public/pscgroups.png" width="640" /></a></div><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Это вывод команды <tt class="western">ps xaf -eo pid,user,args,cgroup</tt>, показывающей насколько аккуратно все процессы отсортированы по своим <span lang="en-US">cgroups</span> (Э<span lang="ru-RU">то показывает четвертая колонка с префиксом </span><tt class="western">debug:</tt> такой префикс используется по той причине, что мы пока используем специальный контроллер <span lang="en-US">cgroup </span><span lang="ru-RU">для отладки. Это описывалось выше.</span>)</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">К сожалению, у нас пока еще нет графиков загрузки или еще каких-то данных по времени запуска системы. Мы их опубликуем, как только сможем полностью параллелизовать запуск всех сервисов, поставляемых в <span lang="en-US">Fedora. </span><span lang="ru-RU">В тоже время, мы приветствуем проведение ваших собственных тестов и публикацию их результатов.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="ru-RU">У меня пока есть только две цифры, которые я могу вам привести. Но они пока не заслуживают доверия, поскольку измерялись по времени загрузки виртуальной машины (один процессор). </span><span lang="en-US">Fedora 13 </span><span lang="ru-RU">грузится с помощью </span><span lang="en-US">Upstart </span><span lang="ru-RU">27 секунд, с помощью </span><span lang="en-US">systemd - 24 (</span><span lang="ru-RU">от </span><span lang="en-US">grub </span><span lang="ru-RU">до </span><span lang="en-US">gdm, </span><span lang="ru-RU">с одними и теми же настройками, цифры измерены один раз, один запуск следовал за другим). Следует помнить, что цифры показывают только преимущество от использования параллелизации запуска скриптов на основе информации из их </span><span lang="en-US">LSB</span><span lang="ru-RU"> заголовка. Поскольку не использовалась активация сервисов посредством сокетов или </span><span lang="en-US">D-Bus </span><span lang="ru-RU">- эти цифры по сути ничего не показывают.</span></div><div style="margin-bottom: 0cm;"><br />
</div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Написание демонов</h4><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Идеальный демон, полноценно использующий возможности <span lang="en-US">systemd </span><span lang="ru-RU">должен делать некоторые вещи способами, отличными от традиционного поведения. Позже, мы опубликуем подробное руководство по написанию демона для использования с </span><span lang="en-US">systemd</span>. <span lang="ru-RU">Ниже приведено краткое описание того, что нужно для разработчиков демонов:</span><br />
<ul><li>Мы просим разработчиков не вызывать <span lang="en-US">fork () (</span><span lang="ru-RU">или даже двойной </span><span lang="en-US">fork()) </span><span lang="ru-RU">в своих процессах, используя цикл событий основного процесса, который </span><span lang="en-US">systemd </span><span lang="ru-RU">вызывает для вас. Также не вызывайте </span><tt class="western">setsid()</tt>.</li>
<li>Не стоит сбрасывать привилегии (<i>имеется в виду, когда демон не должен быть запущен с </i><span lang="ru-RU"><i>root-привилегиями, прим. перев.</i></span>) с помощью самого демона, предоставьте сделать это <span lang="en-US">systemd </span><span lang="ru-RU">и настраивайте это в ее конфигурационных файлах </span>(Тут есть несколько исключений. К примеру, для некоторых демонов нужно сбрасывать привилегии только посредством самого демона после стадии инициализации, которая требует повышенных полномочий). </li>
<li>Не надо создавать <span lang="en-US">PID</span><span lang="ru-RU">-файлы.</span> </li>
<li>Имя демона следует получать с <span lang="en-US">D-Bus.</span></li>
<li>Если вы хотите использовать возможности <span lang="en-US">systemd </span><span lang="ru-RU">для ведения логов, сбрасывайте все, что нужно включить в логи, на </span>stderr.</li>
<li>Предоставьте systemd создать и обслуживать сокет для вас, благодаря чему будет работать активация посредством сокетов. Для этого нужно использовать <tt class="western">$LISTEN_FDS</tt> и <tt class="western">$LISTEN_PID</tt> как описывалось выше.</li>
<li>Используйте SIGTERM для остановки своего демона. </li>
</ul></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><a href="http://www.blogger.com/post-create.g?blogID=2986307105622275526" name="result_box"></a><span lang="ru-RU">Все что приведено выше аналогично тому, что </span><a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/LaunchOnDemandDaemons.html"><span lang="en-US">Apple </span><span lang="ru-RU">рекомендует для демонов</span></a><span lang="ru-RU">, совместимых с </span><span lang="en-US">launchd. </span><span lang="ru-RU">В то же время демоны, поддерживающие </span><span lang="en-US">launchd </span><span lang="ru-RU">легко портировать на </span><span lang="en-US">systemd. </span><span lang="ru-RU">Заметьте, что </span><span lang="en-US">systemd </span><span lang="ru-RU">(для совместимости) поддерживает и демоны, которые не поддерживают того, что описано выше. Демоны, совместимые с </span><span lang="en-US">inetd, </span><span lang="ru-RU">для активации посредством сокетов</span><span lang="en-US"> </span><span lang="ru-RU">можно использовать без каких-либо модификаций. </span>И, конечно же, как только <span lang="en-US">systemd </span><span lang="ru-RU">подтвердит свою жизнеспособность в наших экспериментах и начнет адаптироваться дистрибутивами - будет необходимо портировать на нее, по крайней мере, те сервисы, которые должны быть запущены по умолчанию. Мы уже пишем <a href="http://people.freedesktop.org/~kay/LISTEN_FDS/">концепцию патчей</a> и тогда процесс портирования станет очень легким. Кроме того, в определенной степени, мы можем использовать ту работу, которая уже была проделана для </span><span lang="en-US">launchd</span><span lang="ru-RU">. И, более того, демон, поддерживающий активацию посредством сокетов, не становится от этого несовместимым с системами отличными от </span><span lang="en-US">systemd.</span></div><div style="margin-bottom: 0cm;"><br />
</div><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Часто задаваемые вопросы </h4><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><dl><dt><i><b><span lang="ru-RU">Кто основные разработчики?</span></b></i></dt>
<dd style="margin-left: 0cm;">Большая часть кодовой базы - моя собственная работа, Lennart Poettering (Red Hat). Однако, общий дизайн и его отдельные детали - это результат моего взаимодействия с Kay Sievers (Novell). Также в проекте участвуют Harald Hoyer (Red Hat), Dhaval Giani (бывший сотрудник IBM), и многие другие из таких компаний как Intel, SUSE and Nokia. </dd><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Это проект Red Hat? </b></i> </dt>
<dd style="margin-left: 0cm;">Нет, это мой персональный проект. И позвольте мне подчеркнуть: мнение, отраженное в данной статье - <i><u>это только мое мнение</u></i>. Это ни мнение моего работодателя, ни Рональда МакДональда, ни кого бы то ни было еще. </dd><dd style="margin-left: 0cm;"></dd>
<dt> <span lang="ru-RU"><i><b> </b></i></span></dt>
<dt><span lang="ru-RU"><i><b>Увидим ли мы это в Fedora?</b></i></span> </dt>
<dd style="margin-left: 0cm;">Если наши эксперименты покажут что наши подходы работают, если сообщество <span lang="en-US">Fedora </span><span lang="ru-RU">выскажется в поддержку, тогда да, мы увидим </span><span lang="en-US">systemd </span><span lang="ru-RU">в </span><span lang="en-US">Fedora.</span> <span lang="en-US"> </span> <span lang="en-US"> </span> </dd><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Увидим ли мы это в OpenSUSE? </b></i> </dt>
<dd style="margin-left: 0cm;">Этим занимается Kay, но думаю, что все<span lang="ru-RU"> </span>будет также же, как и в Fedora. </dd><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Увидим ли мы это в Debian/Gentoo/Mandriva/MeeGo/Ubuntu/[Моем_любимом_дистрибутиве]? </b></i> </dt>
<dd style="margin-left: 0cm;">Это вопрос к их разработчикам. Мы можем только приветствовать их интерес и помочь с интеграцией. </dd><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Почему бы не добавить все вышеперечисленное в Upstart, зачем было изобретать что-то новое?</b></i> </dt>
<dt lang="ru-RU">Недостатки Upstart приведены выше, так же было показано, что ее основной дизайн, по нашему мнению, ущербен. Этот проект выглядит, как имеющий кучу недостатков в своей основе. Однако, имейте в виду, что это не помешало нам найти много идей для вдохновения в кодовой базе Upstart. </dt>
</dl><dl><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Если вам так нравится launchd, почему было бы просто не адаптировать ее? </b></i> </dt>
<dd lang="en-US" style="margin-left: 0cm;">launchd - <span lang="ru-RU">прекрасное изобретение, но я не уверен, что она хорошо впишется в </span>Linux, <span lang="ru-RU">более того, она вообще никак не вяжется по своему дизайну ни с его (</span>Linux<span lang="ru-RU">) масштабируемостью, ни с его гибкостью.</span> <span lang="ru-RU"> </span> <span lang="ru-RU"> </span> </dd><dd style="margin-left: 0cm;"></dd>
<dt> <span lang="ru-RU"><i><b>Это проект <a href="http://en.wikipedia.org/wiki/Not_Invented_Here">NIH</a>? </b></i></span> </dt>
<dt> <span lang="en-US">(</span><span lang="ru-RU"><i>Тонкий укол, намекающий на то, что разработчики пошли по собственному пути только по причине того, чтобы начать свой собственный проект. Проект ради проекта. Прим. перев.</i></span><span lang="ru-RU"><span style="font-style: normal;">)</span></span></dt>
<dd style="margin-left: 0cm;">Я надеюсь, что ясно пояснил текстом выше, почему мы пошли по своему собственному пути, вместо того, чтобы использовать как основу <span lang="en-US">Upstart </span><span lang="ru-RU">или </span><span lang="en-US">launchd. </span><span lang="ru-RU">Мы начали разработку по техническим, а не политическим причинам. И не забывайте, что это </span><span lang="en-US">Upstart, </span><span lang="ru-RU">а не </span><span lang="en-US">systemd, </span><span lang="ru-RU">включает <a href="https://launchpad.net/libnih">библиотеку </a></span><a href="https://launchpad.net/libnih"><span lang="en-US">NIH</span></a><span lang="en-US"> </span><span lang="ru-RU">(которая является, своего рода, новой релизацией </span><span lang="en-US">glib).</span> <span lang="en-US"> </span> <span lang="en-US"> </span> </dd><dd style="margin-left: 0cm;"></dd>
<dt> <span lang="ru-RU"><i><b> </b></i></span></dt>
<dt><span lang="ru-RU"><i><b>Будет ли systemd работать на [моей_любимой_операционной_системе_отличной_от_ Linux]?</b></i></span> </dt>
<dd style="margin-left: 0cm; text-align: left;">Маловероятно. <span lang="ru-RU">Выше мы отметили </span>systemd использует много специфичных для Linux API (таких как as epoll, signalfd, libudev, cgroups и т.п.), поэтому портирование его на другую операционную систему выглядит (по нашему мнению), как не стоящий своих затрат. Мы, разработчики проекта, не заинтересованы в работе, предполагающей портирование на другие платформы. Для тех, кто заинтересован в этом, мы можем только сказать, что <span lang="en-US">git </span><span lang="ru-RU">хорошо поддерживает концепцию ветвей </span><span lang="en-US">(branches)</span>. </dd><dd style="margin-left: 0cm;">Скажу больше, портируемость ограничивается не только окружением, в котором работает <span lang="en-US">systemd: </span><span lang="ru-RU">нам нужны самые последние версии ядра </span>Linux, glibc, libcgroup и libudev. </dd><dd style="margin-left: 0cm;">Если кто-либо хочет сделать нечто подобное для других операционных систем, можем предложить приемлемый режим взаимодействия: мы поможем вам определить какие интерфейсы являются общими с вашей системой, сделаем немножко легче жизнь тех, кто будет писать демоны для <span lang="en-US">systemd </span><span lang="ru-RU">и ее аналога. Мы можем помочь идеями, но не кодом.</span> <span lang="ru-RU"> </span> <span lang="ru-RU"> </span> <span lang="ru-RU"></span></dd><dd style="margin-left: 0cm;"></dd>
<dt lang="ru-RU"> <i><b> </b></i></dt>
<dt lang="ru-RU"><i><b>Я слышал, что [система загрузки Gentoo, initng, Solaris SMF, runit, uxlaunch, что-то еще] - это реально классная система инициализации, которая также позволяет параллелизовать запуск, почему бы не использовать ее как основу? </b></i> </dt>
<dd style="margin-left: 0cm;">Прежде чем начать разрабатывать <span lang="en-US">systemd </span><span lang="ru-RU">мы изучили имеющиеся системы и ни одна из них не зацепила нас (естественно, за исключением </span><span lang="en-US">launchd</span><span lang="ru-RU">). Если вы этого никак не можете заметить - прочтите приведенный выше текст еще раз.</span></dd><dd style="margin-left: 0cm;"></dd></dl><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Помощь проекту </h4><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;"> </h4><div style="margin-bottom: 0cm;">Мы очень заинтересованы в патчах и <span lang="ru-RU">другой </span>помощи. В этом смысле наш проект ничем не отличается от любых других проектов свободного ПО, основные преимущества которых заключаются в как можно более широком взаимодействии с сообществом. И это, действительно, большей частью правда для такой фундаментальной части системы, как система инициализации. Нам ценно взаимодействие с вам, поэтому мы не требуем передачи прав (в отличие от <a href="http://www.ebb.org/bkuhn/blog/2010/02/01/copyright-not-all-equal.html">Canonical/Upstart</a>!). Мы также используем <span lang="en-US">git, </span><span lang="ru-RU">как всеми любимую систему контроля версий</span>! </div><div style="margin-bottom: 0cm;">Мы сильно заинтересованы в том, чтобы <span lang="en-US">systemd </span><span lang="ru-RU">заработал на других дистрибутивах, отличных от </span><span lang="en-US">Fedora </span><span lang="ru-RU">и </span><span lang="en-US">openSUSE </span>(Эй, кто-нибудь из Debian, Gentoo, Mandriva, MeeGo, не хотите ли заняться этим?). Ну и помимо перечисленного, нам нужны коллеги любого уровня: мы приглашаем программистов на С, майнтейнеров пакетов, заинтересованных в написании документации или разработке логотипа.</div><div style="margin-bottom: 0cm;"><br />
</div><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Сообщество </h4><h4 align="LEFT" class="western" style="margin-bottom: 0cm; margin-top: 0cm;"> </h4><div style="margin-bottom: 0cm;">В настоящее время, все что у нас есть - это <a href="http://git.0pointer.de/?p=systemd.git">репозиторий с исходным кодом</a> и IRC-канал (<tt class="western">#systemd</tt> на Freenode). Нет списков рассылки, веб-сайта или системы отслеживания ошибок. Возможно, что скоро у нас будет нечто подобное на freedesktop.org. Если у вас есть некоторые вопрос, которые вы хотите задать нам, мы приглашаем вас к нам на <span lang="en-US">IRC</span><span lang="ru-RU">-канал</span>! </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="margin-bottom: 0cm;"><a href="http://0pointer.de/blog/projects/systemd.html">Оригинал статьи на английском</a></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com8tag:blogger.com,1999:blog-2986307105622275526.post-46523389184145652192010-09-01T20:42:00.012+04:002011-07-07T22:37:17.588+04:00Система инициализации Systemd. Часть I<div style="margin-bottom: 0cm;"><i>Наверное, все уже слышали о новой системе инициализации systemd, которая разрабатывается под опекой Red Hat и Novell. Я решил перевести описание работы этой системы от ее автора из его же блога. Сама статья оказалась слишком большой, поэтому выкладываю пока только ее первую часть. Вторую часть я выложу в течение пары дней. Ссылка на оригинал традиционно приведена в конце поста. Также традиционно, мои комментарии по тексту приведены курсивом.</i></div><div style="margin-bottom: 0cm;"><br />
<a name='more'></a><br />
</div><div style="margin-bottom: 0cm;">Если вы в теме и умеете хорошо читать между строк, то уже знаете, о чем пойдет речь. Но, думаю, все равно вам будет интересна эта статья. Поэтому налейте себе чашечку кофе, садитесь и читайте о том, что грядет. </div><div style="margin-bottom: 0cm;">История долгая, а для тех, кто не хочет читать целиком, скажу вкратце: мы экспериментируем с новой системой инициализации, и это весело!</div><div style="margin-bottom: 0cm;"><a href="http://git.0pointer.de/?p=systemd.git">Здесь код.</a> А вот сама история:<br />
<br />
<br />
</div><div style="margin-bottom: 0cm;"><b>Роль процесса с PID 1 </b></div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"> </h4><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"></h4><h4 class="western" style="font-weight: normal; margin-bottom: 0cm; margin-top: 0cm;">Каждая Unix-система имеет процесс со своим специальным идентификатором, равным 1. Этот процесс запускается ядром прежде всех остальных и является родительским процессом для всех процессов, которые не имеют собственного родителя. Благодаря этому он может делать много чего такого, что не могут остальные процессы. Например отвечает за такие вещи, как инициализация и поддержка работы пользовательского пространства в процессе загрузки системы. </h4><div style="margin-bottom: 0cm;">Исторически на Linux в качестве такого процесса выступает старый добрый sysvinit, преклонный возраст которого сказывается все чаще и чаще. Многие пытались предложить ему замену, но реально прижился только <a href="http://upstart.ubuntu.com/">Upstart</a> (<i>что интересно, один из вариантов перевода слова «upstart» - «выскочка» - прим. перев.</i>), который уже нашел свое место во всех основных дистрибутивах. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Как уже отмечалось выше, главная обязанность init'а - максимально быстро инициализировать и сделать доступным пользовательское пространство. К сожалению, традиционная схема инициализации SysV делает это не так быстро, как хотелось бы.</div><div style="margin-bottom: 0cm;">Для организации быстрого и эффективного процесса загрузки системы решающее значение имеет следующее: </div><ul><li>Запустить <b>минимум необходимого</b>. </li>
<li>Попытаться запустить параллельно <b>всё остальное</b><i>.</i></li>
</ul><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Что это означает на практике? </div><div style="margin-bottom: 0cm;"><i>Запустить минимум необходимого</i> означает запустить лишь самые необходимые сервисы либо отложить запуск каких-либо из них до тех пор, пока они реально не понадобятся. Иногда мы заранее знаем, какие сервисы нам понадобятся (syslog, системная шина D-Bus и т.п.), но так бывает не всегда. К примеру, демон bluetoothd не должен быть запущен то тех пор, пока не будет подключен Bluetooth-адаптер либо пока какое-то из приложений не захочет установить с ним соединение через интерфейс D-Bus. Аналогично для системы печати: если машина физически не подключена к принтеру, и/или никакие приложения не пытаются напечатать что-нибудь, то необходимости запускать демон печати, такой как CUPS, нет. Так же и для <a href="http://avahi.org/">Avahi</a>: если машина не подключена к сети, или пока никакое из приложений не захочет использовать его API, его также нет необходимости запускать. Это справедливо даже для SSH: пока кто-либо не захочет зайти на машину - в нем нет необходимости, его нужно запустить лишь тогда, когда кто-то захочет установить первое соединение (и это же относится ко многим машинам, где может быть запущен ssh, в тех случаях, когда к нему присоединяются раз месяц или реже). </div><div style="margin-bottom: 0cm;"><i>Параллельный запуск всего остального</i> означает, что если нужно что-либо запустить, то мы должны делать это не последовательно, а пытаться запустить все одновременно, чтобы максимально нагрузить имеющиеся ресурсы системы, сократив время ее запуска.</div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"></h4><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"> </h4><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Динамическое изменение аппаратного и программного обеспечения</h4><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Современные системы (в частности операционные системы общего назначения) являются весьма динамичными в плане своей конфигурации и использования: они мобильны, запускают и останавливают различные приложения, к ним подключают всевозможное оборудование. Система инициализации, отвечающая за работу сервисов, должна обнаруживать изменения в аппаратном и программном обеспечении, запускать (а иногда и останавливать) сервисы, поскольку они необходимы для запуска программ и/или для обеспечения поддержки определенного оборудования. </div><div style="margin-bottom: 0cm;">Большинство современных систем, которые пытаются распараллелить процесс запуска, по-прежнему пытаются синхронизировать запуск различных демонов: например, Avahi для работы требуется D-Bus, поэтому сначала запускается D-Bus и только потом - Avahi. Аналогично для других служб: для libvirtd и X11 необходим HAL (да, я знаю, что на Fedora 13 службы игнорируют устаревший HAL), поэтому сначала запускается HAL, а уж потом libvirtd и X11. А поскольку для libvirtd нужен Avahi, он ждет еще и запуска Avahi. К тому же всем упомянутым службам нужен Syslog, они все ждут его запуска. И так далее. </div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"></h4><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"> </h4><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Параллелизация запуска сервисов, зависящих от сокетов (socket service)</h4><div style="margin-bottom: 0cm;"><br />
Такого рода синхронизация запуска служб приводит к тому, что значительная часть запуска системы проводится последовательно. Правда было бы здорово избавится от описанных требований такой синхронизации? На самом деле, нет ничего невозможного! Для этого мы должны понять, что именно демоны требуют друг от друга и почему их запуск откладывается. Что касается традиционных демонов Unix, на этот вопрос есть только один ответ: они ждут, пока сокет другого демона станет доступен для соединения. Обычно это сокет AF_UNIX в файловой системе либо это может быть AF_INET [6]. К примеру, клиенты D-Bus ждут возможности подключения к /var/run/dbus/system_bus_socket, клиенты syslog - /dev/log, клиенты CUPS - /var/run/cups/cups.sock, NFS-клиенты ожидают /var/run/rpcbind.sock и открытия порта portmapper и т. д. Только подумайте - это единственное, чего они ждут.</div><div style="margin-bottom: 0cm;">Таким образом, если причина задержки только в этом, если мы сможем добиться того, чтобы перечисленные сокеты стали доступны ранее запуска соответствующих демонов, мы сможем серьезно ускорить процесс запуска системы и запустить намного больше процессов одновременно. Как же этого добиться? На самом деле в Unix-подобных операционных системах все довольно просто: мы можем создать слушающие сокеты, <b>задолго</b> до реального запуска демона, а затем (когда он запустится) просто передать ему сокет посредством в exec(). Таким образом, мы можем создать <b>все</b> нужные нам сокеты для <b>всех</b> демонов на первом шаге системы инициализации, а затем на втором шаге просто запустить все демоны одновременно. Если одна служба нужна другой - ничего страшного не случится, даже если требуемая служба еще не запущена: единственное что произойдет - требуемое соединение встанет в очередь на ожидание и клиент будет ждать этого соединения (будет блокирован запросом). Но заблокирован будет только один клиент и только одним запросом. Кроме того, чтобы обеспечить необходимую параллелизацию запуска, теперь совсем не обязательно конфигурировать зависимости между службами, ведь мы запускаем все сокеты одновременно и запущенный сервис будет уверен в том, что он сможет присоединиться к нужному ему сокету. </div><div style="margin-bottom: 0cm;">Это ключевой момент, и без него все остальное понять будет нельзя, поэтому я попробую пояснить все то же самое, но другими словами и с примерами. Допустим, вы запускаете демон syslog и его клиенты одновременно. При этом все сообщения его клиентов будут добавлены в буфер сокета /dev/log. Пока этот буфер не заполнится, клиентам не придется ждать, и они смогут запуститься. Как только syslog завершит процесс своего запуска, он обработает накопившуюся очередь сообщений. Другой пример: мы запускаем D-Bus и ее несколько клиентов одновременно. Если отправляется синхронный запрос (запрос, требующий мгновенного ответа) и поскольку ожидается ответ, клиент будет блокирован ожиданием, но только этот конкретный клиент и только до тех пор, пока D-Bus поймает этот запрос и обработает его. </div><div style="margin-bottom: 0cm;">По сути, буферы сокетов ядра работают на нас, помогая нам максимально распараллелить запуск служб, причем обработка последовательности запросов и их синхронизация выполняется ядром системы без какой-либо надобности вмешиваться в этот процесс из пользовательского пространства! И если все сокеты становятся доступными прежде реального запуска демонов, управление зависимостями также становится излишним (или, по крайней мере, вторичным): если демону нужен другой демон, он просто подключится к нему. И если целевой демон уже запущен, то первый сразу же обратится к последнему. А если нет, то обратившийся демон не будет ждать его запуска, если только он не отправил синхронного запроса. И даже если этот другой демон вообще не запущен, это может быть сделано автоматически. С точки зрения первого демона в описанных случаях нет никакой разницы, следовательно управление зависимостями становится не нужно или, по крайней мере, вторично. Процесс запуска происходит с оптимальной параллелизацией запуска демонов либо с их запуском по требованию. Кроме того, такой путь обеспечивает большую надежность, так как сокеты остаются доступны независимо от фактического состояния демона, который может иногда быть недоступным (например из-за своего падения). В самом деле, вы можете легко написать демон, который будет запускаться, останавливаться (или падать) и запускаться снова и т. п., причем клиенты не почувствуют остановок демона и ни один запрос не потеряется. </div><div style="margin-bottom: 0cm;">Ну что ж, теперь самое время для паузы - налейте себе еще кофе и будьте уверены, что дальше будет еще интереснее. </div><div style="margin-bottom: 0cm;">Только сначала давайте проясним несколько вещей: это какая-то новая идея? Нет, определенно нет. Я назову вам одну из самых известных систем, работающих как описано: это launchd от Apple - на MacOS прослушивание сокетов всех демонов осуществляется launchd. Сами сервисы могут все запускаться одновременно, и для них не надо настраивать никаких зависимостей. Это на самом деле действительно интересная идея, и именно в ней кроется причина того, почему MacOS удается обеспечить фантастическую скорость загрузки. Я настоятельно рекомендую одно <a href="http://video.google.com/videoplay?docid=1781045834610400422">видео</a> , где разработчики launchd объясняют, как она работает. К сожалению, предложенная идея так и не получила распространения вне лагеря поклонников Apple. </div><div style="margin-bottom: 0cm;">Хотя она, на самом деле, даже старше, чем launchd. До нее хорошо известный почтенный inetd работал аналогичным образом: сокеты централизованно создавались демоном, который запускал необходимый сервис, передавая ему дескриптор файла сокета посредством exec(). Однако центральной идеей inetd, конечно же, были не локальные, а интернет-сервисы (хотя более поздняя реализация поддерживала и сокеты AF_UNIX). Также он не являлся инструментом для распараллеливания процесса загрузки системы или какого-либо управления зависимостями между сервисами. Для TCP-сокетов inetd, в первую очередь, использовался таким образом, что для каждого входящего соединения новый экземпляр порождался новый экземпляр демона. Это означает, что для каждого соединения порождался и инициализировался новый процесс, что не очень хорошо для высокопроизводительных серверов. Тем не менее, с самого своего рождения inetd также поддерживает и другой режим, где демон порождался первым соединением и потом тот же экземпляр принимал последующие соединения (опция wait/nowait в файле inetd.conf , которая, к сожалению, плохо документирована). Запуск демона для каждого соединения, вероятно, создал для inetd репутацию медленного сервера, что не совсем справедливо.</div><div style="margin-bottom: 0cm;"><br />
<b>Параллелизация запуска служб, зависящих от D-Bus (d-bus services)</b><br />
<div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><br />
Современные демоны на Linux, как правило, предоставляют услуги посредством D-Bus, а не простого сокета AF_UNIX. Таким образом, появляется вопрос - а можем ли мы применить для них ту же логику распараллеливания запуска сервисов, что и для для традиционных сокетов? Да можем! В D-Bus уже есть все необходимое для этого: с помощью активации посредством D-Bus служба может быть запущена при первом же обращении к ней. Такой способ запуска дает нам минимальную возможность синхронизации на запрос, которая нам нужна для одновременного запуска служб-потребителей и служб-поставщиков: если мы хотим запустить Avahi одновременно с CUPS (CUPS использует Avahi для поиска mDNS/DNS-SD принтеров), то так и следует сделать, и если CUPS запустится раньше, то с помощью логики активации сервисов посредством шины мы заставляем D-Bus создать очередь запросов, пока Avahi запускается.<br />
<br />
</div><div style="margin-bottom: 0cm;"><b>Резюме:</b> активация демонов посредством сокетов и шины D-Bus позволяет нам запустить <b>все</b> демоны параллельно, без какой-либо синхронизации. Это позволяет нам получить «ленивые» сервисы: если сервис используется редко, можно просто загрузить его по потребности, вместо того, чтобы запускать его во время загрузки.</div><div style="margin-bottom: 0cm;">И если это не круто, тогда я не знаю, что круто! </div><div align="LEFT" style="margin-bottom: 0cm;"><br />
</div><br />
<b>Параллелизация заданий, имеющих отношение к файловой системе </b><br />
<div style="margin-bottom: 0cm;"><br />
Если вы посмотрите на <a href="http://picasaweb.google.com/betsubetsu43/Fedora">графики визуализации загрузочного процесса</a> текущих дистрибутивов, то увидите множество точек, требующих синхронных операций: самое важное - это задания, связанные с файловыми системами. Обычно при загрузке системы много времени тратится на ожидание инициализации всех устройств, перечисленных в файле /etc/fstab, затем на проверку файловых систем, инициализацию квот. Только после того как это все закончится, мы сможем продолжить процесс загрузки. </div><div style="margin-bottom: 0cm;">Можем ли мы как-то решить эту проблему? Оказывается, можем! Harald Hoyer выдвинул идею использования для этого старой доброй autofs. Системный вызов connect() показывает, что одна служба заинтересована в другой, аналогичным образом вызов open() (или подобный ему) показывает, что служба заинтересована в конкретном файле или файловой системе. Таким образом, чтобы улучшить параллелизацию запуска, можем заставить программы ждать, пока файловая система будет готова (смонтирована). Добиваемся мы этого следующим образом - мы создаем точки монтирования autofs, а затем, когда завершатся разные проверки целостности, инициализируются квоты и т.п., мы заменим ее реальной файловой системой. Когда работает autofs, попытки обращения к ней будут поставлены в очередь ядром системы и обратившийся процесс будет заблокирован (но - только этот демон, и только эта конкретная попытка доступа). И таким образом мы сможем начинать запускать наших демонов задолго до того, как наши файловые системы станут доступны, без каких-либо потерь файлов и с максимальной параллелизацией. </div><div style="margin-bottom: 0cm;">Распараллеливание заданий, связанных с файловой системой и с запуском сервисов, не имеет смысла для корневой системы, поскольку именно там хранятся бинарники всех сервисов. Однако по отношению к файловым системам, таким как, например, /home, которые обычно намного больше, а иногда даже зашифрованы, возможно даже находятся на удаленном компьютере, такой подход может серьезно оптимизировать время загрузки системы. И уж конечно стоит отметить, что такие виртуальные файловые системы, как procfs или sysfs, никогда не должны монтироваться с помощью autofs. </div><div style="margin-bottom: 0cm;">Я не удивлюсь, если кто-то из читателей может посчитать, что интеграция autofs с системой инициализации ухудшит стабильность и что это решение вообще какое-то странное, страшное и уродливое. Однако, неоднократно опробовав это решение, я могу вам сказать, что оно совершенно правильное. Использование autofs позволяет, нам создать точку монтирования без необходимости обеспечить наличие самой файловой системы. На практике это влечет за собой только задержку доступа к ФС. Если приложение пытается получить доступ к файловой системе, находящейся под опекой autofs и мы очень долго не заменяем ее реальной файловой системой, оно будет находиться в состоянии interruptible sleep. Отметим также, что в любой момент, если точка монтирования так и не становится доступной к концу запуска (например, если fsck не удалось удачно проверить файловую систему), мы можем просто попросить autofs вернуть приложению код ошибки (например ENOENT). Поэтому я полагаю, что хоть на первый взгляд включение <span lang="en-US">autofs </span>в систему инициализации может показаться чересчур смелым, наш экспериментальный код показал, что эта идея работает на удивление хорошо на практике. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Сокращение количества вызываемых во время запуска системы скриптов</b><br />
<b> </b> </div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">Еще один момент, который вытекает из логики загрузки MacOS: <span lang="en-US">shell-</span>скрипты <span lang="en-US">- </span>зло<span lang="en-US">.</span> </div><div style="margin-bottom: 0cm;"><span lang="en-US">Shell-</span>скрипты имеют свои преимущества и недостатки. Их можно быстро писать и отлаживать, но они медленно работают. Классическая логика загрузки sysvinit построена вокруг скриптов. Будь то <span lang="en-US">/bin/bash </span>или любая другая оболочка (написанная, чтобы сделать работу скриптов быстрой), в конце концов этот подход все равно упирается в медлительность работы. В моей системе скрипты, находящиеся в <span lang="en-US">/etc/init.d/, </span>вызывают <span lang="en-US">grep </span>по крайней мере 77 раз, <span lang="en-US">awk - </span>92 <span lang="en-US">раз</span>а<span lang="en-US">,</span> <span lang="en-US">cut - </span>23 и <span lang="en-US">sed -</span> 74. Каждый раз, когда вызываются эти команды (или какие-то другие), порождаются новые процессы, производится поиск библиотек и т.д. А затем, когда запущенный процесс выполняет какую-то простейшую операцию с текстовыми строками - он завершается. Естественно, что это все работает ужасно медленно. Ни один другой язык, кроме оболочки, не работает, как описано. Кроме того, работа скриптов сильно зависит от различных переменных среды и тому подобного, причем это все трудно контролировать. </div><div style="margin-bottom: 0cm;">Итак, давайте избавимся от скриптов в процессе загрузки! Прежде чем мы сможем это сделать, нам нужно выяснить, как они используются сейчас: по большому счету картина такова - большую часть времени они заняты рутинными операциями. Большинство сценариев производит элементарные операции и вызов сервисов, поэтому эти операции можно переписать на С, либо отдельные исполняемые файлы, либо сами демоны, либо сделать конкретную операцию частью системы инициализации.</div><div style="margin-bottom: 0cm;">Маловероятно, что мы в ближайшее время полностью сможем избавиться от скриптов при старте системы. Переписывание их на C занимает много времени, в ряде случаев игра вообще не стоит свеч, а иногда, наоборот, без скриптов вообще трудно обойтись. Но мы, безусловно, можем уменьшить их влияние на процесс загрузки. </div><div style="margin-bottom: 0cm;">Хороший показатель для измерения количества вызова скриптов в течение запуска системы - это PID процесса, который он получает сразу после запуска системы. Загрузитесь, войдите в систему, откройте терминал и введите <span lang="en-US">echo $$. </span>Попробуйте сделать это на вашей <span lang="en-US">Linux-</span>системе, а затем сравните результат с MacOS! (Подсказка: на Linux PID будет порядка 1823; на MacOS примерный PID - 154).</div><div style="margin-bottom: 0cm;"><br />
</div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;">Слежение за процессами</h4><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Центральная часть системы инициализации - это выполнение обязанностей няни по отношению к сервисам: она должна следить за ними. Перезапускать их, если они завершают свою работу. Если они падают, нужно собирать всю необходимую информацию о них и сохранить ее для администратора, предоставлять ее аварийным системам сбора информации (<span lang="en-US">crash dump systems) и</span> системам ведения журнала (например syslog) и/или системе аудита. </div><div style="margin-bottom: 0cm;">Также она должна позволять полностью завершать сервис со всеми своими потомками. Это, наверное, проще сказать, чем сделать. Традиционно в Unix процесс, который дважды вызывает <span lang="en-US">fork(), </span>может избежать контроля своего родителя, и родитель ничего не узнает об отношении нового процесса к тому, что он запустил. Например: неправильно написанный CGI скрипт, который вызван двойным <span lang="en-US">fork(), </span>не прерывает свою работы при завершении Apache. Кроме того, вы даже не сможете выяснить его отношение к Apache, если не знаете его имя и назначение. </div><div style="margin-bottom: 0cm;">Итак, как же мы сможем уследить за процессами, чтобы они не убежали от нашей няни, и контролировать их как единое целое, даже если они форкаются огромное количество раз (<i>в оригинале gazilion times :) - прим. перев.</i>) ? </div><div style="margin-bottom: 0cm;">Разные люди предлагают различные решения. Скажу вкратце, что есть подходы, основанные на использовании интерфейса ptrace или <span lang="en-US">netlink</span> (интерфейс ядра, который позволяет получить сообщение <span lang="en-US">netlink</span> каждый раз, когда любой процесс в системе вызывает <span lang="en-US">fork</span>() или <span lang="en-US">exit</span>()), которые подвергались критике за топорность, неповоротливость и плохую масштабируемость. </div><div style="margin-bottom: 0cm;">А что же мы можем предложить? В ядре уже достаточно долго существует такая вещь, как <a href="http://git.kernel.org/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=Documentation/cgroups/cgroups.txt;hb=HEAD">Control Groups</a> (aka "cgroups"). В основном они позволяют создавать иерархию групп процессов, которая непосредственно доступна через виртуальную файловую систему. Названия групп - это обычно названия директорий в этой файловой системе. Если процесс, принадлежащий к определенной группе, вызывает <span lang="en-US">fork(</span>), его потомок становится членом той же группы. Если он не имеет привилегированного статуса, он никак не сможет этого избежать. Первоначально cgroups были добавлены в ядро для организации контейнеров: различные подсистемы ядра могут устанавливать лимиты на ресурсы (ограничение использования процессора и/или памяти) для определенных групп. Традиционные ограничения ресурсов (как реализовано <span lang="en-US">setrlimit()) </span>устанавливаются (в основном) только для каждого процесса. cgroups, с другой стороны, позволяют устанавливать ограничение на целые группы процессов. cgroups полезны также для обеспечения соблюдения ограничений в других случаях. Вы можете использовать его, например, для ограничений общего объема памяти или ресурсов процессора для Apache и всех его дочерних процессов. Поэтому неправильный CGI-скрипт не сможет сбежать от установленных ограничений ресурсов путем вызова <span lang="en-US">fork()</span>. </div><div style="margin-bottom: 0cm;">В дополнение к своим функциям по созданию контейнеров и использованию для ограничения ресурсов cgroups являются очень полезными как средство для слежения за демонами: членство в cgroup надежно наследуется дочерними процессами и избежать этого невозможно. Существует система уведомлений, которая ставит в известность главный процесс, когда cgroup становится пустой. Вы можете найти cgroups для процесса путем чтения файла <span lang="en-US">/proc/$PID/cgroup,</span> следовательно, это очень хороший выбор средства для отслеживания процессов. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Контроль за средой исполнения процесса</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Хорошая няня должна не только следить за демонами и контролировать их, но и создавать для них хорошее и безопасное окружение. Это означает, что мы не ограничиваемся очевидными параметрами, такими как настройка ограничений ресурсов для процесса посредством <span lang="en-US">setrlimit()</span>, идентификаторы пользователя и групп. Ядро Linux дает пользователям и администраторам достаточно контроля над процессами (некоторые из них в настоящее время используются редко). </div><div style="margin-bottom: 0cm;">Для каждого процесса нам нужно устанавливать контроль над использованием процессора, планировщика ввода-вывода, набор функциональных ограничений, привязку к процессору и, конечно же, дополнительные ограничения посредством cgroup. Самое главное здесь - это высокоуровневый контроль, такой как, например, монтирование файловой системы в режиме только чтения при вызове <span lang="en-US">mount </span>с опцией <span lang="en-US">bind</span>. Таким образом, можно запускать отдельные демоны так, что все (или некоторые) файловые системы будут ему доступны только для чтения. Это можно использовать для контроля за тем, что делают отдельные демоны, нечто вроде бюджетного варианта SELinux (хотя это, конечно, не призвано заменить SELinux). </div><div style="margin-bottom: 0cm;">Наконец, ведение логов является важной составной частью запуска сервисов: в идеале каждый бит информации, выдаваемый сервисом, должен записываться в журнал. Следовательно, система инициализации должна обеспечить процесс ведения логов для демонов, с которыми она работает, подключая стандартный вывод <span lang="en-US">(stdout)</span> и вывод ошибок <span lang="en-US">(stderr)</span> к демону <span lang="en-US">syslog. </span>А иногда даже к <span lang="en-US">/dev/kmsg</span>, который во многих случаях очень полезная замена <span lang="en-US">syslog </span>(те, кто делает встроенные системы, прислушайтесь, пожалуйста, к этому!). </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Upstart, внимание, марш!</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Во-первых, я бы хотел подчеркнуть, что мне на самом деле нравится код <span lang="en-US">Upstart</span>, он очень хорошо комментирован и его легко изучать. Другим проектам в этом отношении еще учиться и учиться (в том числе и моим собственным). В то же время я не могу согласится с общим подходом, который реализован в <span lang="en-US">Upstart. </span>Но сначала несколько слов о проекте.</div><div style="margin-bottom: 0cm;">Upstart не разделяет код с sysvinit, а его функциональные возможности перекрывают возможности <span lang="en-US">sysvinit</span>, и обеспечивает совместимость с какой-то частью хорошо известных скриптов SysV. Его основная особенность - управление сервисами на основе событий: запуск и остановка процессов связаны с "событием", которое происходит в системе, где "событием" может быть все что угодно: доступность сетевых интерфейсов, запуск какого-то ПО и т.п. </div><div style="margin-bottom: 0cm;">Upstart обрабатывает последовательность запуска служб посредством событий: если срабатывает событие <i>syslog-started</i> - оно используется как индикатор для запуска <span lang="en-US">D-Bus, </span>т. к. шина теперь сможет использовать <span lang="en-US">syslog</span>. А затем, когда срабатывает событие <i>dbus-started</i>, запускается NetworkManager, после чего он может использовать <span lang="en-US">D-Bus, </span>и так далее. </div><div style="margin-bottom: 0cm;">Можно сказать, что логическое дерево зависимостей, которое существует и хорошо понимается администратором или разработчиком, транслируется в систему событий и набор правил, описывающих реакции на события: каждое логическое «для a нужно b» становится «запустить а, когда нужно b» плюс «остановить а, когда останавливается b». Это своего рода упрощение, особенно для кода самого Upstart. Тем не менее я утверждаю, что такое упрощение на самом деле вредно. Прежде всего, система логических зависимостей никуда не девается, и тот, кто пишет файлы для <span lang="en-US">Upstart, </span>теперь должен транслировать эти правила в формате «события/действия» (два правила для каждой зависимости). Таким образом, вместо того, чтобы позволить компьютеру выяснить, что нужно делать на основе зависимостей, пользователь должен вручную перевести зависимости в простое правило «событие - реакция на него». Кроме того, поскольку информация о зависимостях не может быть декодирована, она не доступна во время работы системы, фактически это означает, что у администратора, который пытается разобраться, почему что-то произошло, нет на это никаких шансов. </div><div style="margin-bottom: 0cm;">Кроме того, в случае Upstart логика работы с зависимостями переворачивается с ног на голову. Вместо того чтобы <i>свести к минимуму</i> объем работы (что является признаком и целью хорошей системы инициализации), на самом деле происходит <i>увеличение количества</i> работы, выполняемой во время операций. Другими словами, вместо того, чтобы имея четко поставленную цель, проделать все необходимые шаги сразу, она делает сначала один шаг, а потом делает все остальные шаги, которые к ней ведут. Или еще проще: то, что пользователь запустил D-Bus, ни в коей мере не означает, что NetworkManager должен быть также запущен (но это то, что будет делать Upstart). А должно быть с точностью до наоборот: когда пользователь обращается к NetworkManager, это признак того, что D-Bus также должна быть запущена (это, безусловно, именно то, что ожидают большинство пользователей, не так ли?). Хорошая система инициализации должна запускать только то, что нужно, и по требованию. Либо по потребности, либо максимально параллелизуя запуск. Однако она не должна запускать больше, чем необходимо, в частности не все из установленного, для чего может понадобится этот сервис </div><div style="margin-bottom: 0cm;">(<i>Честно говоря, и это только мое мнение, без претензии на истинность, что тут автор пытается притянуть за уши аргументы против Upstart. Тем более, что приведенные автором примеры относительно D-Bus и NetworkManager не соответствуют реальности. Прим. перев.</i>). </div><div style="margin-bottom: 0cm;">Наконец я не вижу реальной ценности от логики, основанной на событиях. Мне кажется, что большинство событий, обрабатываемых Upstart, фактически не мгновенны, а имеют некоторую продолжительность: сервис запускается, работает и останавливается. Устройство подключается, подключено и отключается. Точка монтирования находится в состоянии монтирования, полностью смонтирована, или же она размонтирована. Кабель питания подключен, система работает от сети переменного тока, кабель питания отключен. Лишь немногие из событий системы инициализации должны обрабатываться точно в срок, большая часть из них - это старт, запуск и остановка. Информации об этом также нет в <span lang="en-US">Upstart</span>. </div><div style="margin-bottom: 0cm;">Мне известно, что некоторые проблемы, на которые я указал выше, в некоторой степени решаются последними изменениями в конфигурационных правилах <span lang="en-US">Upstart,</span> такими как, например, <span lang="en-US"><i>s</i></span><i>tart on (local-filesystems and net-device-up IFACE=lo)</i>. Тем не менее, я считаю, что это выглядит как попытка исправить систему (<i>автор считает, что такое решение - «костыль» - прим. перев.</i>), основной дизайн которой является некорректной. </div><div style="margin-bottom: 0cm;">Кроме того, Upstart вполне подходит на роль няни для демонов, хотя что-то она делает сомнительными способами (см. выше). </div><div style="margin-bottom: 0cm;">Есть и другие системы инициализации, кроме sysvinit, <span lang="en-US">Upstart </span>и <span lang="en-US">launchd</span>. В большинстве из них подходы намного серьезнее, чем в Upstart или sysvinit. Наиболее интересной является Solaris SMF, которая поддерживает надлежащую обработку зависимостей между службами. Тем не менее, во многих отношениях она чрезмерно усложнена и, скажем так, несколько академична, чрезмерно использует XML и новые термины для известных вещей. Она также сильно завязана на специфичных для Solaris функциями, такими как <span lang="en-US"><i>contract system</i></span>.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><a href="http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html">Продолжение статьи</a></div><h4 class="western" style="margin-bottom: 0cm; margin-top: 0cm;"><br />
</h4><div align="RIGHT"><a href="http://0pointer.de/blog/projects/systemd.html">Оригинал статьи на английском</a></div><div style="margin-bottom: 0cm;"><br />
</div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com9tag:blogger.com,1999:blog-2986307105622275526.post-91014703173599665692010-09-01T18:50:00.000+04:002010-09-01T18:50:13.621+04:00Бесплатный вебинар по UbuntuНаш учебный центр (то место, где я имею честь работать) проводит 16 сентября модный ныне бесплатный веб-семинар (или как их сокращенно называют <i>вебинар</i>) . Вебинар будет посвящен одному из главных событий, случившихся в нашем УЦ в этом году - партнерству с хорошо известной всем компанией Canonical.<br />
<br />
В рамках данного вебинара планируются выступления:<br />
<ul><li>Владимира Крюкова - менеджера Canonical по контактам с OEM-партнерами в регионе EMEA;</li>
<li>Вашего покорного слуги с информацией о том, какие вообще направления обучения предлагает Canonical;</li>
<li>И в заключение Torsten Splinder (Canonical <em></em>Senior System Engineer) поведает всем присутствующим об изменениях в достаточно популярном направлении Ubuntu Enterprise Cloud. Как вы, наверное, догадываетесь, Торстен не говорит по-русски, поэтому задать ему вопросы можно будет только на английском языке :). Ну или на его родном немецком ;).</li>
</ul><br />
Тем, кто захочет присутствовать, желательно пройти <a href="http://www.r-study.ru/news/2010-06-30/ubuntu-webinar/">по ссылке</a> для регистрации на вебинар. Также по ней можно ознакомится с системными требованиями. Предвосхищая вопрос, на Linux все должно работать. Я все тестировал на последней версии Adobe Flash, теперь там нет былых проблем с русским языком.strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com0tag:blogger.com,1999:blog-2986307105622275526.post-20063547874542235482010-08-19T12:19:00.002+04:002010-08-19T12:21:13.004+04:00Важные инновации в области ПО. Часть I<div style="text-align: left;"><i> Жара в Москве идет на спад и наконец-то возвращается работоспособность :). Те, кто читал мой предыдущий дневник, наверное, помнит серию переводных статей о наиболее важных инновациях в мире ПО. Потом я затеял перенос блога сюда и эти статьи оттуда удалил. Но сюда их не выкладывал потому, что еще раз прочел и ужаснулся качеству перевода :). По мере наличия свободного времени я буду вычитывать тот самый текст и выкладывать его тут по частям. Пока готова самая первая часть. По мере вычитывания остального текста, я буду этот пост дополнять ссылками на остальные части. Итак, поехали...</i><style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
H1 { margin-bottom: 0.21cm; page-break-after: avoid }
H1.western { font-family: "Liberation Serif", serif; font-size: 24pt; font-weight: bold }
H1.cjk { font-family: "DejaVu LGC Sans"; font-size: 24pt; font-weight: bold }
H1.ctl { font-family: "DejaVu LGC Sans"; font-size: 24pt; font-weight: bold }
A:link { color: #000080; so-language: zxx; text-decoration: underline }
TT { font-family: "Liberation Mono", monospace }
-->
</style> </div><br />
<a name='more'></a><br />
<h1 class="western" style="page-break-after: avoid; text-align: left;"><span style="font-size: medium;"><b></b></span></h1><div align="CENTER" style="margin-bottom: 0cm;"><b>David A. Wheeler</b> </div><div align="CENTER" style="margin-bottom: 0.5cm;"><b>Первая версия от 1 августа 2001 с дополнениями от 26 мая 2009</b> </div><h1 align="JUSTIFY" class="western"><span style="font-size: large;">Введение</span></h1><div align="JUSTIFY">В последнее время слишком многие путают термин «инновации в области ПО» с другими факторами, такими как увеличение скорости работы компьютеров и сетевого оборудования. В этой статье я попытался положить конец этой путанице, выявив наиболее важные нововведения в области ПО, путем отсева тех из них, которые относятся к сфере аппаратного обеспечения (hardware), и таких программных продуктов, которые не привнесли ничего нового. Также представлены критерии оценки и определение понятия <i>наиболее важных инноваций в ПО</i>, источники информации, что именно привнесли эти инновации, обсуждаются патенты на ПО и почему некоторые из инноваций в ПО не упомянуты в этой статье. В заключение статьи представлены выводы.</div><div align="JUSTIFY">Результаты вас могут удивить. </div><h1 align="JUSTIFY" class="western"><span style="font-size: large;">Критерии оценки </span> </h1><div align="JUSTIFY">В этой статье приводится список <i>наиболее важных инноваций в области ПО</i>, поэтому в первую очередь необходимо дать точное определение каждому из этих слов:<br />
<ul><li>Чтобы удостоиться звания <i><u>наиболее важной</u></i><span style="font-style: normal;"><span style="text-decoration: none;">,</span></span> инновация должна заключать в себе идею, которая очень широко используется и/или имеет большое значение для той области, где применяется. То, что не получило широкого распространения, не было включено в такой список.</li>
<li>Инновация <i><u>в области ПО</u></i><span style="text-decoration: none;"> (software) — это то, что </span>привносит технологические новшества, которые оказывают непосредственное влияние как на процесс программирования, так и на использование компьютера. Я намеренно не упоминаю инновации в аппаратном обеспечении (innovation in hardware), которые не связаны с инновациями в области ПО. Например, согласно судебному решению, John Vincent Atanasoff <a href="http://www.cs.iastate.edu/jva/court-papers/">является изобретателем электронной вычислительной машины</a>, поэтому к инновациям в ПО это изобретение не относится. По той же причине я также не включил в список другие нововведения, такие как транзисторы (1947) и интегральные микросхемы (1958), а также стандарт Ethernet, разработанный Бобом Меткалфом (Bob Metcalfe) в 1973. Я пропустил изобретения, которые не являются технологическими (например, социальные или правовые нововведения), даже если они имеют важное значение для технологии программного обеспечения и/или широко распространены. Например, концепция copyleft - это инновационный подход к лицензированию программного обеспечения, который разрешает модификацию ПО с невозможностью затем сделать его опять проприетарным. Она используется широким спектром ПО, благодаря <a href="http://www.gnu.org/copyleft/gpl.html">General Public License (GPL).</a> Первая такая лицензия <a href="http://www.dsl.org/copyleft/timeline">(Emacs Public License)</a> была разработана Ричардом Столлманом в 1985 году - но, поскольку copyleft это все-таки инновация в социальной и правовой сфере (а не в сфере технологий), она не включена в этот список. Кроме того, также сюда не включено изобретение смайлика ":<tt>-)". </tt><tt><span style="font-family: Times New Roman,serif;">Б</span></tt><span style="font-family: Times New Roman,serif;">е</span>зусловно, он широко используется повсюду, однако его существование не критично для компьютерной сферы и больше относится к социальной сфере.</li>
<li>Также тщательно нам необходимо определить само понятие <i><u>инновация</u></i>. <i>Инновация</i> - это не просто объединение двух функций в одном продукте (это <i>интеграция</i>, а не инновация, и требует для своей реализации только значительного объема работы). В частности, интеграция множества функций в один продукт для предотвращения использования клиентами конкурирующих продуктов - это хищничество, а не инновация. Инновация это НЕ конечный продукт, хотя, конечно же, этот продукт может содержать или воплощать какую-то революционную идею. Новая реализация существующего продукта для того, чтобы он делал то же самое, но на другом компьютере или операционной системе, также НЕ является новшеством. Инновация это новая идея<i>.</i> И применительно к данному документу это означает новую идею в <i>области</i><i> ПО.</i></li>
</ul></div><div align="JUSTIFY">В результате вы удивитесь тому количеству событий в компьютерной истории, которые <i>НЕ входят</i> в этот список. Большинство программных продуктов - это не инновации в ПО, поскольку они просто повторяют реализации других идей. Например, WordStar стал первым текстовым процессором для персональных компьютеров, но он не был первым - WordStar всего лишь новая реализация уже существовавшего продукта для других компьютеров. Более поздние текстовые процессоры (такие как Word или Word Perfect) также представляли собой следующие реализации аналогичных продуктов, а не инновации. Ряд значительных событий в компьютерной индустрии - это просто презентация новых продуктов или оборудования и не имеет никакого отношения к инновациям. Хотя появление IBM PC и Apple было важно для компьютерного мира, оно не представляло никаких инноваций в области ПО - это просто было очередное снижение стоимости компьютеров, с некоторым количеством ПО, написанным специально для них с использованием уже хорошо известных в то время технологий. </div><div align="JUSTIFY">Иногда продукт является первой реализацией какой-либо инновации (например первая программа работы с электронными таблицами), в этом случае дата релиза продукта является датой публичного объявления какой-то идеи. Некоторые инновации порождают технологии, которые хотя и не являются явными для пользователей программного обеспечения, но они оказывают чрезвычайно важное влияние на разработку ПО (например, подпрограммы и объектно-ориентированное программирование), и тогда <span style="font-style: normal;">они </span>включены в приведенный ниже список. В спорных случаях я привожу свои комментарии, поясняющие, почему тот или иной пункт присутствует в данном списке. </div><div align="JUSTIFY">Я пытался определить дату и первую публичную презентацию идей, а не их воплощение в некоторые продукты. По возможности я пытался разделить даты первого внедрения и широкого признания инновации. "Публичность" в данном случае означает, по крайней мере, объявление для широкой аудитории. В некоторых случаях определить конкретную дату или событие трудно, и я буду рад, если кто-то укажет мне на более ранние работы. К примеру, иногда бывает трудно установить первую презентацию, поскольку с каждой последующей реализацией идея постепенно меняет форму. </div><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><a href="http://www.blogger.com/post-create.g?blogID=2986307105622275526" name="sources"></a> <span style="font-size: large;">Источники информации</span></h1><div align="JUSTIFY">Поскольку я не нашел никакого общепризнанного единого мнения о том, какие инновации наиболее важные, я составил данный список, проанализировав несколько источников. Я старался использовать много источников, чтобы не пропустить ничего важного. В частности, <a href="http://www.computer.org/50/history">информацию об истории компьютеров IEEE</a> (за последние 50 лет), <a href="http://vlmp.museophile.com/computing.html">виртуальный музей вычислительной техники,</a> <a href="http://info.isoc.org/guest/zakon/Internet/History/HIT.html">интернет-историю Гоббса</a>, <span style="font-style: normal;">«</span><i>A History of Modern Computing</i><span style="font-style: normal;">» </span>Paul E. Ceruzzi<span style="font-style: normal;"> и «</span><i>A Brief History of the Future</i><span style="font-style: normal;">» John Naughton</span><i>.</i> Для описания некоторых инноваций я также использовал «<i>Inventing the Internet» </i>Janet Abbate, тщательно перепроверяя данные из этого источника, т.к. к сожалению Abbate иногда ошибается, что делает его использование в качестве авторитетного источника затруднительным. Например, Abbate (стр. 22) не понимает, что хотя Strachey и John McCarthy для описания своих идей использовали один и тот же термин ("timesharing" - разделение времени, см.ниже) - он обозначает разные понятия. Я также проверил ряд других источников, таких как «History-Making Components» James Durham и «A History and Future of Computing». Стоит также отметить, что большинство источников смешивают события из области ПО аппаратного обеспечения. Другим источником является конференция “Software Pioneers” (28-29 июня 2001 года, Бонн). Также было проверено множество специализированных источников, таких как <a href="http://www.groklaw.net/article.php?story=20050219170121955">“OSI and TCP: A History” by Peter H. Salus</a>. </div><div align="JUSTIFY">Со времени первой публикации этого документа я получил ряд дополнительных сведений, которые вошли в данную статью. Я благодарю тех, кто предоставил мне эту информацию. В то же время, вполне возможно, что в ней обделены вниманием некоторые важные инновации. Поэтому, если у вас есть замечания или дополнения, пожалуйста, свяжитесь со мной (dwheeler at dwheeler.com). </div><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: large;">Наиболее важные инновации в области ПО:</span><span style="font-size: large;"> </span></h1><h1 align="JUSTIFY" class="western" style="font-weight: normal; page-break-after: avoid;"><span style="font-size: small;">Часть 1 (1837-1960)</span><span style="font-size: small;"> </span></h1><h1 align="JUSTIFY" class="western" style="font-weight: normal; page-break-after: avoid;"><span style="font-size: small;">Часть 2 (1960-1970)</span><span style="font-size: small;"> </span></h1><h1 align="JUSTIFY" class="western" style="font-weight: normal; page-break-after: avoid;"><span style="font-size: small;">Часть 3 (1970-1980)</span><span style="font-size: small;"> </span></h1><h1 align="JUSTIFY" class="western" style="font-weight: normal; page-break-after: avoid;"><span style="font-size: small;">Часть 4 (1980-2004)</span></h1><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: medium;"> </span></h1><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: large;">Патенты на ПО</span></h1><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: large;">Какие инновации в ПО не самые главные? </span> </h1><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: large;"><a href="http://www.blogger.com/post-create.g?blogID=2986307105622275526" name="conclusions"></a></span> <span style="font-size: large;">Выводы </span> </h1><h1 align="JUSTIFY" class="western" style="page-break-after: avoid;"><span style="font-size: large;">Приложение: Инновации в ПО, которые стоит принять во внимание</span></h1><br />
<div style="text-align: right;"></div><div style="text-align: right;"><a href="http://www.dwheeler.com/innovation/innovation.html">Ссылка на оригинальный текст</a></div><br />
<div align="JUSTIFY"><br />
</div><div align="JUSTIFY"><span style="color: red;"><span style="color: black;"><span style="font-weight: normal;">Оригинальный текст: Copyright </span></span><span style="color: black;"><span style="font-size: small;"><span style="font-weight: normal;">© </span></span></span><span style="color: black;"><span style="font-weight: normal;"> <a href="http://www.dwheeler.com/">David A. Wheeler</a></span></span></span></div><div align="JUSTIFY"><span style="color: red;"><span style="color: black;"><span style="font-size: small;">Перевод: Copyright © Чернышов Антон, <a href="http://r-study.ru/">УЦ R-Style</a></span></span></span></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com0tag:blogger.com,1999:blog-2986307105622275526.post-16361936551880399912010-08-15T20:31:00.000+04:002010-08-15T20:31:41.593+04:00Флаги процессора<div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><span style="color: black;"><i><span style="background: none repeat scroll 0% 0% transparent;">Часто встает вопрос о том, что означают те или иные флаги процессора, которые показывает команда <span lang="en-US">cat /proc/cpuinfo. </span><span lang="ru-RU">Я заинтересовался этим и нашел по этому поводу материал, перевод которого предлагаю.</span></span></i></span></div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><br />
<a name='more'></a><br />
</div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">3DNOW </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Расширение мультимедиа, созданное AMD для своих процессоров, основанных на MMX. </span></span><br />
<span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">3DNOWEXT</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
3DNOW Extensions. Расширенный вариант 3DNow! . <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">ACPI</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Поддержка </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">ACPI (</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">Автоматического управления конфигурацией и питанием</span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">)</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">APIC </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">Расширенный контроллер прерываний (</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">Advanced Programmable Interrupt Controller). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CID+</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Скорее всего, это означает </span></span>Certified Interconnect Designer <span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">(Сертификация для разработчиков дизайна печатных плат) <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CLFSH/CLFlush </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Cache Line Flush . <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CMOV</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Условные инструкции "переместить/сравнить" (Conditional Move/Compare Instruction). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CMP_Legacy </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Показывает, что процессор не совместим с технологией Hyper-Threading. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">Constant_TSC</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
На процессорах Intel P4, </span></span><a href="http://en.wikipedia.org/wiki/Time_Stamp_Counter"><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">Time Stamp Counter</span></span></span></a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> работает с постоянной частотой, которая не зависти от частоты процессора, когда используется технология </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">EIST (Enchanced Intel Speedstep)</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">- </span></span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">технология позволяющая снизить энергосбережение процессоров, путем снижения их тактовой частоты при низкой нагрузке</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CX8 </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Набор инструкций CMPXCHG8B. (Сравнение и обмен 8 байтов. Также известен как f00f (произносится как "FOOF"), аббревиатура для </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">F0 </span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">0F C7 C8 шестнадцатеричное </span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">обозначение </span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">инструкций, выявляющая дефекты в большинстве процессоров Intel Pentium, Pentium MMX, Pentium и OverDrive). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">CX16</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Набор инструкций CMPXCHG16B. (Позволяет выполнять атомарные операции над 128-битными двойными учетверенными словами (128-bit double quadword (or oword) data types). Это полезно для счетчиков высокого разрешения, которые могут обновляться несколькими процессорами (или ядрами). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">DE </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Debugging Extensions. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">DS</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Debug Store. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">DTS</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Цифровой термодатчик (Digital Thermal Sensor). <br />
или <br />
Хранение отладочных данных трассировки (Debug Trace Store). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">EM64T</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Intel Extended Memory 64 Technology - технология Intel, аналогичная 64-битной технологии для процессоров AMD. Использует 64-битные регистры процессора и 64-битные физические адреса памяти (адреса страниц), чтобы позволяет поддерживать до 1 </span></span><a href="http://en.wikipedia.org/wiki/Tebibyte">тебибайта</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> оперативной памяти, который впоследствии может быть увеличен (в будущих релизах процессоров) до 1 пебибайта. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">EIST </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Enhanced Intel SpeedStep - </span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">технология позволяющая снизить энергосбережение процессоров, путем снижения их тактовой частоты при низкой нагрузке</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">.. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">FID </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Frequency IDentifier - идентификатор частоты. <br />
</span></span><span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span></span><br />
<span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;">FPU</span></b></span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Блок </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">x87 </span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">вычислений с плавающей точкой, встроенный в процессор. Именно здесь выполняются все математические расчеты. Использовался в качестве отдельной микросхемы на процессорах 80486SX и ранее (так называемый 80487 или 80387 и т.д. на процессоре 80486DX FPU уже был встроенным). На всех более поздних процессорах Pentium этот блок является встроенным. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">FXSR</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Инструкции FXSAVE/FXRSTOR. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">HT </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><a href="http://ru.wikipedia.org/wiki/HyperTransport">Hyper-Transport</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. Поддержка HyperTransport (AMD) или HyperThreading (Intel).<br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">HTT </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Hyper-Threading Technology. Возможность использования одного физического процессора как двух отдельных логических процессоров, воспользовавшись неиспользуемыми регистрами процессора во время обычной операции, чтобы попытаться повысить эффективность процессора. Если несколько программ используют те же регистры обоих логических процессоров, известны случаи, когда Hyper-Threading снижал общую производительность системы. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">LM</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> </span></span><a href="http://en.wikipedia.org/wiki/Long_mode">Long Mode</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> (64bit Extensions) - режим в котором 64-битные приложения могут получать доступ к 64-битными инструкциям и регистрам процессора. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MCA </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><a href="http://en.wikipedia.org/wiki/Machine_check_architecture">Machine Check Architecture</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> - механизм, посредством которого процессор информирует программы или операционную систему об ошибках в аппаратном обеспечении.<br />
</span></span><span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span></span><br />
<span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;">MCE</span></b></span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><a href="http://en.wikipedia.org/wiki/Machine_Check_Exception">Machine Check Exception</a><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;"> - </span></span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">тип ошибки, которая возникает, когда центральный процессор обнаруживает проблему в аппаратном обеспечении</span></span></span></div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MMX </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Ходят слухи что это расширения мультимедия (MultiMedia eXtension) или Multiple Math или Matrix Math eXtension, но формально это бессмысленный акроним, являющийся торговой маркой Intel. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MMXEXT </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
MMX Extensions - расширения </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">MMX.</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MNI</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Модульный сетевой интерфейс </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">(Modular Network Interface )</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
или <br />
Merom New Instruction </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">(c</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">м SSSE3</span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">)</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. <br />
</span></span><span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span></span><br />
<span style="color: black;"><span lang="en-US"><b><span style="background: none repeat scroll 0% 0% transparent;">MON</span></b></span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">Монитор п</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">роцессора. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MSR</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Поддержка </span></span><a href="http://www.intel.com/software/products/documentation/vlin/mergedprojects/analyzer_ec/mergedprojects/reference_olh/mergedprojects/instructions/instruct32_hh/vc273.htm">RDMSR</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> и WRMSR. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">MTRR</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> </span></span><a href="http://ru.wikipedia.org/wiki/MTRR">Memory Type Range Register</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> - поддержка диапазонных регистров памяти.<br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">NNI</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Nehalem New Instructions (см. SSE4). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">NX </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><br />
<span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">Поддержка технологии </span></span><a href="http://ru.wikipedia.org/wiki/NX-%D0%B1%D0%B8%D1%82"><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">No Execute</span></span></span></a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">PAE</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Physical Address Extensions - расширения физических адресов. Добавляет возможность 32-битным процессорам адресовать более 4 ГБ физической памяти с помощью 36-битных адресов </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">Intel</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> вместо стандартных 32 бит, получая доступ к памяти до 64 </span></span><a href="http://en.wikipedia.org/wiki/Gibibyte">гибибайтов</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> оперативной памяти. Большинство чипов от AMD также поддерживает эту технологию. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">PAT </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><a href="http://en.wikipedia.org/wiki/Page_Attribute_Table">Page Attribute Table</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> - технология управления памятью на </span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">x86 </span></span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">и </span></span></span><span style="color: black;"><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">x86-64 </span></span></span><span style="color: black;"><span lang="ru-RU"><span style="background: none repeat scroll 0% 0% transparent;">процессорах</span></span></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">PNI</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Prescott New Instruction - кодовое имя для набора инструкций SSE3, до выпуска чипов семейства Intel Prescott (которые позже были добавлены в семейство Pentium-4). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">PSE</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Page Size Extensions (см. PSE36). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">PSE36 </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
</span></span><a href="http://ru.wikipedia.org/wiki/PSE">Page Size Extensions 36</a><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">. IA-32 поддерживает два метода доступа к памяти свыше 4 ГБ (32 бит). PSE (Page Размер Extension) была первым методом, который использовался Pentium II. Этот метод дает преимущество совместимости, поскольку он сохранил размер PTE (page table entry) 4 байта. Однако, практическая реализация этого возможна только через драйвер. Такой подход страдает от значительного ограничения производительности, из-за буферных операций копирования, необходимых для чтения и записи выше 4 Гб. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SS</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Self-Snoop. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SSE</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Поддержка набора 70 новых потоковых <a href="http://ru.wikipedia.org/wiki/SIMD">SIMD</a> (Single Instruction, Multiple Data) инструкций встроенных в процессор. Впервые появился на процессорах Intel Pentium III, первым чипом AMD с поддержкой SSE был Athlon XP. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SSE2</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Поддержка 144 дополнительных потоковых <a href="http://ru.wikipedia.org/wiki/SIMD">SIMD</a> инструкций. Впервые появился на процессорах Intel Pentium 4. Первым чипом AMD с поддержкой SSE2 был Athlon 64. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SSE3</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Третья версия набора потоковых расширений <a href="http://ru.wikipedia.org/wiki/SIMD">SIMD</a> (13 дополнительных инструкций). Впервые появился на чипах Prescott процессоров Intel Pentium 4. AMD включил поддержку этой технологии на процессорах Athlon 64 "Venice". <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SSSE3 </span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><br />
Дополнительный набор потоковых расширений <a href="http://ru.wikipedia.org/wiki/SIMD">SIMD</a> 3. (SSSE3 содержит 16 новых дискретных инструкций по сравнению с SSE3. Каждая из них может выполняться на 64-разрядных регистрах MMX или 128-битных регистрах XMM. Однако, документация Intel содержит 32 новые инструкции.) Дебютировал на процессорах Intel Core 2 Duo. Чипы AMD пока не поддерживают данную технологию. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SSE4</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Четвертая версия потоковых расширений <a href="http://ru.wikipedia.org/wiki/SIMD">SIMD</a>. Следующая версия SSE-инструкций от Intel, содержащя 50 дополнительных инструкций, которая дебютировала на процессорах Intel семейства «Nehalem». Также известна как "Nehalem New Instructions (NNI)". <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SVM</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Secure Virtual Machine - расширения AMD для виртуализации. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">SYSCALL</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Системный вызов - механизм, используемый приложением для запроса операционной системы. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TNI</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Tejas New Instruction (cм. SSSE3). <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">ТМ</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Thermal Monitor. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TM2</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Thermal Monitor 2. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TPR</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Task Priority Register - регистры приоритета задач, используются операционной системой для планирования исполнения множества задач. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TS</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Thermal Sensor. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TSC</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Time Stamp Counter — используется для повышения точности измерения скорости вычислений. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">TTP</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Thermal Trip. <br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">VME</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Дополнительный режим эмуляции 8086.<br />
</span></span><span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;"> </span></b></span><br />
<span style="color: black;"><b><span style="background: none repeat scroll 0% 0% transparent;">VMX</span></b></span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"> <br />
Технология аппаратной виртуализации от Intel <br />
</span></span><br />
<span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;"><b>XTPR </b><br />
TPR chipset update control messenger. Часть кода APIC.</span></span></div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><br />
</div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;"><a href="http://boincfaq.mundayweb.com/index.php?language=1&view=176"><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">Ссылка на оригинальный материал</span></span></a></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com3tag:blogger.com,1999:blog-2986307105622275526.post-26476152531535354752010-07-21T10:15:00.001+04:002010-07-21T10:16:32.601+04:00KVM и/или Xen? Выбор платформы виртуализации<i>Читая новости, я обнаружил статью с кратким обзором имеющихся решений виртуализации от небезызвестного Joe Brockmeier. Статья показалась мне интересной, привожу свой перевод. Ссылка на оригинал традиционно приводится в конце статьи.</i><br />
<br />
<div style="text-align: right;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Понедельник, 12 Июля 2010 00:00 <a href="http://www.linux.com/community/profile?userid=107">Joe 'Zonker' Brockmeier</a></span></span></div><br />
<div align="LEFT" style="margin-bottom: 0cm;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span> </div><div align="LEFT"></div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Когда <a href="http://www.xen.org/">Xen</a> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">появился</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> в 2002 году, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">он,</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">выпущенный под лицензией GPL, выглядел основным претендентом на «корону» основной </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">платформ</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ы</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> виртуализации для Linux. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Если же мы быстро п</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">еренесемся в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">настоящее время</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">то увидим что <a href="http://www.linux-kvm.org/page/Main_Page">новичок в этой области</a> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">полностью вытеснил Xen, как основу виртуализации </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">по умолчанию в дистрибутивах </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Red Hat и, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">более того, вполне себе комфортно обосновался </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">основном </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ядр</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">е</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> Linux. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Что же выбрать из них? </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><span style="background: none repeat scroll 0% 0% transparent;">Xen </span></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><span style="background: none repeat scroll 0% 0% transparent;">или </span></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><span style="background: none repeat scroll 0% 0% transparent;">KVM? </span></span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Область виртуализации развивается довольно быстро. Поэтому если у вас нет времени следить за разработкой KVM или Xen, то у вас неизбежно появятся затруднения в выборе лучшего для вас варианта. Ниже приведен беглый обзор состояния текущего рынка решений виртуализации на основе Xen и KVM. </span></span> </div><div align="LEFT"><br />
<a name='more'></a></div><div align="LEFT"><b><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM и Xen</span></span></b><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Xen </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">это </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">гипервизор, поддержива</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ющий</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">следующие архитектуры: </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">x86, x86_64, Itanium, и ARM. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Он</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> может запускать Linux, Windows, Solaris, и некоторые из BSD</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">-систем</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> в качестве госте</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">вых ОС</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">(</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на поддерж</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">иваемых </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">гостевой системой </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">процессорных архитектур</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ах</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">)</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Он </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">поддерж</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ивается</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> ряд</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ом</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> компаний, в первую очередь <a href="http://www.citrix.com/xenserver">Citrix</a> , также используется <a href="http://wiki.oracle.com/page/Oracle+VM">Oracle</a> для Oracle VM, и други</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">х</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. Xen может </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">реализовать режим </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">полн</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ой</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> виртуализаци</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">и</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на тех </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">систем</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ах</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, которые </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">имеют поддержку технологии аппаратной </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">виртуализаци</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">и (таки</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">е</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> как Intel-VT и AMD-V)</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">а</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> может работать как </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">обычный </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">гипервизор на машинах, которые не имеют </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">таких расширений.</span></span></div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">это</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> гипервизор, который находится в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">основном </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ядр</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">е</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> Linux. Ваш</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ей родительской системой в случае его использования, естественно, обязана быть </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Linux, но </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">в качестве гостевых систем </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">поддержива</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ю</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">т</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ся</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><a href="http://www.linux-kvm.org/page/Guest_Support_Status"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Linux, Windows, Solaris и BSD-системы</span></span></a><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. Он работает на </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">архитектурах </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">x86 и x86-64 с аппаратной поддержкой виртуализации. Это означает, что KVM </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">не может использоваться </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на старых процессорах </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">не имеющих такой поддержки</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">а также на некоторых новых CPU (</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">например, процессоры Intel </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Atom</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">). По большей части, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">это</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> не проблем</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">а</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> для </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">дата-</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">центров, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">которые, так или иначе, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">все равно </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">мен</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">яют</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> оборудование </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">раз в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">несколько лет. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Н</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">о это </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">также </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">означает, что KVM не вариант </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">для ряда узкоспециализированных систем, таких например, как </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><a href="http://www.linux.com/news/enterprise/cloud-computing/323061-lets-get-small-linux-enables-low-power-space-saving-systems">SM10000</a>, которые пытаются использовать </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">процессоры </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Atom в центра</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">х</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> обработки данных. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Если вы </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">хотите </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">использовать виртуализацию </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на основе </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Xen</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">то вам </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">нужно </span></span><a href="http://wiki.xensource.com/xenwiki/XenDom0Kernels"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ядро, собранное с его поддержкой</span></span></a><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Хоть Linux и может запускаться в качестве <a href="http://wiki.xensource.com/xenwiki/Kernel.org_Linux_on_Xen">гостевой системы </a></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><a href="http://wiki.xensource.com/xenwiki/Kernel.org_Linux_on_Xen">под Xen</a> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">с ядра версии 2.6.23, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">использовать ее «из коробки» в качестве родительской системы н</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">е</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> получится</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Э</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">то означает, что </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">не каждый </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">дистрибутив </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Linux можно использовать </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">для запуска </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">виртуальных машин под </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Xen. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Поэтому</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> вам нужно выбрать дистрибутив Linux, который поставляется с поддерж</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">кой Xen</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> или </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">собрать </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">собственное ядро </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">(</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>П</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>оследний совет не самый легкий путь, поскольку патчей для поддержки Xen очень много, накладываются они не на каждое ядро и даже если они все наложатся </i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>успешно</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>, не факт, что ядро корректно соберется. </i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>Проще найти дистрибутив, ядро которого уже пропатчено для поддержки Xen. </i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>Поскольку Novell поддерживает решения на Xen, то, </i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>например,</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i> все ядра openSUSE собираются с его поддержкой. Найти их можно <a href="http://download.opensuse.org/repositories/Kernel:/">здесь</a>.</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i> </i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>П</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><i>рим. перев.</i></span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">)</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Еще один путь - использовать</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">одно </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">из коммерческих решений на базе Xen, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">такое </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">как Citrix XenServer. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Единственная п</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">роблема в том, что эти решения </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">зачастую </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">не являются </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">решениями </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">с </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">полностью открыт</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ым</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> исходн</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ым</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> код</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ом</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Поэтому </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">многие </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">собирают собственные ядра или ищут того, кто может это сделать</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. Xen </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">используется </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на довольно </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">большом количестве </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">серверов: от недорогих </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">провайдеров </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Virtual Private Server (VPS) </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">(</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">как <a href="http://www.linode.com/index.cfm">Linode</a> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">)</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">до таких</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> «больших мальчиков», как Amazon EC2.</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Статья на </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><a href="http://searchservervirtualization.techtarget.com/news/article/0,289142,sid94_gci1516376,00.html">TechTarget</a> показывает, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">что</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> провайдеры, которые вложили значительные средства в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">решения на </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Xen </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">совсем не собираются переключаться на что-либо еще</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. Даже если KVM </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">и </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">превосходит Xen технически, они вряд ли будут </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ломать </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">и </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">перестраивать</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> существующие решения </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">только </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">для того, чтобы </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">получить </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">незначительн</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ый выигрыш</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Но </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">у </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">в любом случае </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">пока </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">еще </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">не</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">т</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">таких </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">техническ</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">их</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> преимуществ. По</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">скольку </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Xen </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">используется </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">немн</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">огим </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">д</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ольше</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">у него было </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">больше времени </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">для достижения </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">зрело</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">сти</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">, чем </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">у </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM. Вы </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">можете </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">найт</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">и</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> некоторые </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">возможности</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> в Xen, которые еще не появились в KVM, хотя </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><a href="http://www.linux-kvm.org/page/TODO">этот проект имеет длинный список TODO</a> (то, что приведено в этом списке - просто набор идей над которыми планируют работать разработчики KVM, а не идеи по достижению паритета с Xen). </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">У </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">на самом деле </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">есть пока только одно </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">небольшое преимущество, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">которое может позволить ему </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">стать основным гипервизором в Linux.</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> Если вы </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">используете </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">последние ядра Linux, у вас уже есть KVM. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">В </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Red Hat Enterprise Linux </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">с версии </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">5.4 <a href="http://press.redhat.com/2009/09/02/innovation-without-disruption-red-hat-enterprise-linux-5-4-now-available/">включена поддержка KVM</a> и </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">эта компания предполагает отказаться от Xen в пользу решений на </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM в RHEL 6. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Это, в частности, может служить указанием того, чего достиг KVM в техническом плане. Мало того, что Red Hat имеет преимущество в наличии значительного количества талантливых программистов для разработки KVM, у них есть еще одно преимущество, выражающееся в появлении дополнительных препятствий для компаний, которые клонировали Red Hat Enterprise Linux и инвестируют значительные средства в Xen. Исключая Xen из планов своего развития, они заставляют эти компаний также отказаться от Xen или брать поддержку Xen-решений на себя и отказаться от клонирования RHEL. Это означает дополнительные расходы на инженеров, больше усилий для ISV-сертификаций и т.д. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">KVM в настоящее время не может тягаться с Xen, хоть и быстро его догоняет. Он достиг достаточной степени зрелости для того, чтобы многие организации комфортно использовали его в своей работе. Значит ли это, что Xen'у пора на выход? Не так быстро. </span></span> </div><h3 align="LEFT" class="western"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Останется только один? </span></span> </h3><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Выбор «KVM или Xen» скорее всего будет диктоваться вашим вендором. Если вы используете RHEL в течение длительного времени, ставьте на KVM. Если вы используете Amazon EC2, вы уже используете Xen, и т. д. Основные Linux-вендоры, по-видимому, будут предлагать решения на основе KVM, но есть и достаточное количество коммерческой поддержки для Xen. Весьма вероятно, что Citrix не собирается в ближайшее время уходить с этого рынка. </span></span> </div><div align="LEFT"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Бывает очень соблазнительно рассматривать технологию в ИТ-индустрии как игру с нулевой суммой (<i>игра, в которой выигрыш одного означает аналогичный проигрыш другого - прим. перев.</i>), где одно решение выигрывает, а другое - проигрывает. Но истина заключается в том, что Xen и KVM в ближайшее время будут сосуществовать. Рынок виртуализации достаточно велик, чтобы на нем хватило места нескольким решениям, у каждого из них имеется серьезный тыл, что также гарантирует их совместное сосуществование. </span></span> </div><div dir="LTR" id="authorlink"><div align="LEFT" style="border-color: -moz-use-text-color -moz-use-text-color rgb(0, 0, 0); border-style: none none double; border-width: medium medium 1.1pt; margin-top: 0.08cm; padding: 0cm 0cm 0.07cm;"><br />
</div><div align="LEFT" style="margin-top: 0.08cm;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Автор оригинального текста -</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> <a href="http://www.linux.com/community/profile?userid=107">Joe 'Zonker' Brockmeier</a></span></span></div><div align="LEFT" style="margin-bottom: 0cm; margin-top: 0.26cm;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Joe 'Zonker' Brockmeier </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">- </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">свободны</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">й</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> писател</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ь</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> и редактор </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">с опытом </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">более 10 лет </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">в сфере IT</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">В прошлом занимал пост менеджера по работе с сообществом openSUSE в компании Novell, ныне имеет множество публикаций в </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Linux Magazine, Sys Admin, Linux Pro Magazine, IBM DeveloperWorks, Linux.com, CIO.com, Linux Weekly News, ZDNet и многих других издани</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">ях</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">. Brockmeier is also a FLOSS advocate and participates in several projects, including GNOME as the PR team lead. Brockmeier также выступа</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">е</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">т </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">защитником</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> <a href="http://ru.wikipedia.org/wiki/FLOSS">FLOSS</a> и участвует в нескольких проектах, </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">включая</span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"> GNOME, в качестве </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">лидера команды </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">PR. </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">Вы всегда можете связаться с ним по электронной почте </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">jzb </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">at </span></span><span style="font-family: Times New Roman,serif;"><span style="font-size: small;">zonker.net</span></span></div></div><div align="RIGHT" style="margin-bottom: 0cm;"><br />
</div><div align="RIGHT" style="margin-bottom: 0cm;"><span style="font-family: Times New Roman,serif;"><span style="font-size: small;"><a href="http://www.linux.com/news/enterprise/systems-management/327628-kvm-or-xen-choosing-a-virtualization-platform">Оригинал статьи на английском</a></span></span></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com6tag:blogger.com,1999:blog-2986307105622275526.post-78459358258244480822010-07-20T09:44:00.000+04:002010-07-20T09:44:06.156+04:00Неожиданное обновление :)Обновляя вчера свою домашнюю систему (openSUSE 11.2), испытал приятный шок. На своем домашнем компьютере как основная среда у меня стоит KDE4 (он жене больше нравится :) ). До вчерашнего дня в основном репозитории openSUSE 11.2 был KDE версии 4.3.5. А с последним обновлением приехала версия 4.4.4 и Qt версии 4.6. Достаточно неожиданное решение разработчиков openSUSE.<br />
<br />
Все мы привыкли к тому, что, в так называемых, стабильных дистрибутивах версии ПО остаются теми же, что и на момент релиза, зато на них накладываются исправления, связанные с безопасностью и ошибками (чтоб не мешать стабильности). Но, что интересно, разработчики openSUSE обновляют версии ПО прямо на протяжении жизни релиза. Насколько я помню, версия 11.2 вышла с KDE версии 4.3.1, который затем обновился до 4.3.5, а теперь до 4.4.4 (вместе с Qt). Решение в общем-то правильное с учетом того, что сил на поддержку более старых версий приходится тратить больше, в то время как есть уже более свежая и поддерживаемая основным разработчиком версия (и что немаловажно, гораздо более стабильная). Обновление прошло достаточно гладко и безпроблемно (спасибо zypper'у).<br />
<br />
Ну и следует отметить, что такие обновления происходят не со всем ПО, входящим в текущий релиз openSUSE. На моей памяти это касалось только KDE, Qt, zypper и yast.strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com4tag:blogger.com,1999:blog-2986307105622275526.post-58966664024647479102010-06-29T13:19:00.004+04:002010-07-22T12:06:49.302+04:00Linux-cертификации Novell<i>Мой дневник включили в ленту блогов русскоязычной планеты SUSE, и этот пост — первый в сообществе openSUSE. Приветствую всех участников и читателей ленты!</i><br />
<br />
<div style="margin-bottom: 0cm;">В рамках данной статьи я решил сделать описание имеющихся сертификаций Novell по Linux. Linux — это основная, продвигаемая и рекомендуемая операционная система для всех продуктов Novell, поэтому эта компания достаточно давно разработала набор курсов для подготовки специалистов и экзамены, подтверждающие этот уровень. Как показывает проведенное мной беглое исследование линуксовых форумов, данный вопрос, к сожалению и несмотря на долгую историю своего существования, недостаточно известен в рамках сообщества. Я построю свое изложение следующим образом: сначала сделаю обзор имеющейся сертификации, затем скажу пару слов про то, как проходит экзамен. Если у кого будут вопросы — постараюсь по возможности ответить на них в комментариях. Просьба задавать вопросы в моем основном <a href="http://tux-the-penguin.blogspot.com/">дневнике</a>, поскольку мониторить что-то еще у меня не хватает времени.</div><div style="margin-bottom: 0cm;"><br />
<a name='more'></a></div><div style="margin-bottom: 0cm;"><br />
Описание сертификаций и курсов я буду приводить по самой последней поддерживаемой версии SUSE Linux Enterprise 11. Для этого есть несколько причин. Первая заключается в том, что все имеющиеся сертификации по своим названиям, требованиям к знаниям и навыкам совместимы между имеющимися версиями SUSE за некоторыми исключениями, которые я отмечу. Вторая в том, что курсы по SLE 11 проработаны учебным отделом Novell значительно лучше по отношению к предыдущим версиям. Последовательность преподавания тем существенно улучшена (теперь все гораздо более логично), дополнены упражнения. И, естественно, что обучившись по SLE11, знаний хватит на то, чтобы администрировать все предыдущие версии SUSE :). Ради политкорректности я буду приводить ссылки на описание курсов на сайте Novell, а не учебного центра, где работаю :) . Те, кто заинтересуются — легко найдут описание приводимых ниже курсов и экзаменов на сайтах авторизованных учебных центров на русском языке. Материал, приводимый на сайте <span lang="en-US">Novell, </span><span lang="ru-RU">содержит также </span><span lang="en-US">Certification Path </span><span lang="ru-RU">- специальную схему, отражающую в графическом виде рекомендуемый процесс обучения и сертификации.</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Итак, на данный момент по SUSE 11 имеются три ступеньки сертификации Linux-специалистов (требующих сдачи соответствующих экзаменов):</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">1. <a href="http://www.novell.com/training/certinfo/cla/"><b>Novell </b><span lang="en-US"><b>Certified</b></span><b> Linux </b><span lang="en-US"><b>Administrator</b></span> <span lang="en-US">(CLA)</span></a><span lang="en-US"> </span>— самая первая ступенька для Linux-специалистов. На сегодняшний день ситуация такова: те, у кого уже есть сертификат LPIC-<span lang="en-US">1</span>, могут бесплатно получить сертификат от Novell. Данный сертификат, применительно к SUSE, удостоверяет следующие ваши знания и практические навыки:<br />
<ul><li>базовый уровень владения системой, возможность использовать ее на рабочей станции и умение выполнять базовый набор задач;</li>
<li>умение пользоваться встроенной в систему справкой (страницы man и info), а также возможность находить необходимую информацию на сайте вендора дистрибутива;</li>
<li>знание структуры файловой системы Linux (FHS);</li>
<li>умение работать в консоли Linux;</li>
<li>умение работать со средствами пакетного менеджмента;</li>
<li>умение работать с правами доступа в системе;</li>
<li>умение добавлять в систему пользователей и группы;</li>
<li>умение работать с текстовыми редакторами;</li>
<li>умение ставить систему;</li>
<li>знание и понимание последовательности инициализации системы;</li>
<li>умение работать с процессами и сервисами системы;</li>
<li>знание и умение способов работы со средствами хранения файлов — создание разделов диска, файловых систем на них, работа с LVM и software RAID;</li>
<li>умение конфигурировать сеть средствами дистрибутива и командной строки, а также умение диагностировать и решать проблемы;</li>
<li>понимание того, как Linux работает с аппаратным обеспечением, умение администрировать udev;</li>
<li>умение настраивать и использовать средства удаленного доступа к системе;</li>
<li>умение использовать средства мониторинга системы;</li>
<li>умение работать с cron;</li>
<li>умение работать со средствами резервного копирования.</li>
</ul></div><div style="margin-bottom: 0cm;"><br />
По SLE 11 для подготовки к сдаче данного экзамена рекомендуется прослушать курсы <a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=37063">3101</a> и <a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=37066">3102</a>.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">2. <a href="http://www.novell.com/training/certinfo/clp/"><b>Novell Certified Linux Professional</b> <span lang="en-US">(CLP)</span></a><span lang="en-US"> </span>— следующая, гораздо более серьезная сертификация. Она, естественно, включает в себя предыдущий уровень знаний и <b>практических</b> навыков плюс знание следующих тем:<br />
<ul><li>установка и конфигурирование базовых сетевых сервисов, к которым относятся: NTP, xinetd, ftp;</li>
<li>установка и конфигурирование системы печати CUPS;</li>
<li>установка и конфигурирование OpenLDAP;</li>
<li>установка и конфигурирование Samba (в том числе настройка ее работы в связке с OpenLDAP);</li>
<li>установка и конфигурирование Web-сервера Apache (в том числе настройка openssl и Tomcat);</li>
<li>настройка и использование IPv6;</li>
<li>базовые знания по использованию средств мониторинга системы, умение находить и устранять проблемы производительности;</li>
<li>умение писать shell-скрипты;</li>
<li>умение пользоваться средствами автоматической установки SUSE для массового развертывания системы внутри предприятий (AutoYast и методы сетевой установки);</li>
<li>виртуализация с помощью Xen.</li>
</ul></div><br />
<div style="margin-bottom: 0cm;">Для подготовки к сдаче экзамена рекомендуется прослушать (или иметь аналогичный объем знаний) курсы<a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=37063"> 3101</a>, <a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=37066">3102</a>, <a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=29885">3103</a>. Сдавать данный экзамен можно и без наличия предыдущей сертификации.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="en-US">2.5</span>. <b>Novell Certified Linux Desktop Professional</b> (<span lang="en-US">CLDP, </span>пока на сайте <span lang="en-US">Novell </span><span lang="ru-RU">информации о нем нет</span>) — это новая сертификация, которая появилась для 11-й версии SUSE. Она отражает умение администратора системы решать большинство проблем и задач, возникающих при поддержке рабочих станций пользователей SUSE Linux Enterprise Desktop. Для подготовки к сдаче экзамена и получению соответствующего сертификата имеется курс <a href="http://www.novell.com/training/courseware/ts_proj_info.jsp?pid=29886">3104</a>, включающий в себя следующие темы:<br />
<ul><li>базовые знания по настройке графического интерфейса в SUSE Linux Enterpise Desktop;</li>
<li>базовая настройка безопасности рабочей станции;</li>
<li>использование Netw<span style="background: none repeat scroll 0% 0% transparent;">or</span><span style="color: black;"><span style="background: none repeat scroll 0% 0% transparent;">kM</span></span><span style="background: none repeat scroll 0% 0% transparent;">an</span>ager;</li>
<li>настройка и использование IPv6;</li>
<li>умение интегрировать SLED 11 в окружение Active Directory;</li>
<li>умение интегрировать SLED 11 в окружение Novell Open Enterprise Server;</li>
<li>умение интегрировать SLED 11 в окружение UNIX-систем (настройка клиентов NFS, OpenLDAP и CUPS);</li>
<li>настройка удаленного рабочего стола;</li>
<li>использование Multimedia и Email;</li>
<li>умение писать shell-скрипты;</li>
<li>умение пользоваться средствами автоматической установки SUSE для массового развертывания системы внутри предприятий (AutoYast и методы сетевой установки).</li>
</ul></div><div style="margin-bottom: 0cm;"></div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm;">Данное звание (и курс) на схемах сертификации Novell расп<span style="background: none repeat scroll 0% 0% transparent;">оложены параллельно </span><span lang="en-US"><span style="background: none repeat scroll 0% 0% transparent;">3103</span></span>, что заметно даже по тому, что некоторые из тем повторяются в обоих курсах.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span lang="en-US">3</span>. <a href="http://www.novell.com/training/certinfo/cle/11/"><b>Novell Certified Linux </b><span lang="en-US"><b>Engineer</b></span></a> <span lang="en-US">(CLE)</span>— данная сертификация является самой высокой ступенькой. Для сдачи экзамена <b>необходимо</b> иметь сертификат предыдущего уровня (CLP) по предыдущей версии SUSE. Например, для сдачи экзамена на звание CLE11, кандидат <b>обязан</b> иметь сертификат CLP11 или CLP10. Для подготовки к сдаче данного экзамена рекомендуется курс <a href="http://www.novell.com/training/courseware/catalog.jsp?srch=3107">3107</a>, включающий следующий набор тем:<br />
<ul><li>продвинутая настройка сет<span lang="ru-RU">евых интерфейсов</span> (сетевые мосты, bonding, VLAN);</li>
<li>настройка и использование сетевых хранилищ файлов (SCSI, iSCSI);</li>
<li>продвинутое использование виртуализации XEN;</li>
<li>настройка безопасности сервера;</li>
<li>установка и настройка централизованного сервера обновлений;</li>
<li>подготовка сервера к возможным негативным ситуациям;</li>
<li>использование средств мониторинга системы.</li>
</ul></div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
Теперь пара слов про сами экзамены Novell. Это практические экзамены, которые содержат набор заданий, требующих своего решения. Для каждого экзамена есть набор курсов, которые <b>рекомендуются</b> к прослушиванию. Обязательного требования к предварительному обучению нет. Задание экзамена обычно описано достаточно детально в плане того, что именно нужно достичь. Не стоит тут пытаться показать все свои умения — достаточно просто выполнить то, что написано. Например, если указано, что необходимо настроить виртуальный хост Apache, запаролив доступ к нему, то так и следует сделать. Понятно, что кто-то из вас может знать, что самый правильный путь с точки зрения безопасности — это еще настроить SSL для доступа к нему. Но если вы решите сделать так — ваши усилия (и, что немаловажно, время) пропадут даром. Оценка задания производится бездушным скриптом, который вряд ли оценит красоту ваших решений. К слову, этому скрипту абсолютно не важно как именно вы будете решать поставленные задачи - настраивать что-то через средства командной строки или через Yast.</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;">Экзамен сдается в учебных центрах, которые имеют необходимую авторизацию. Если вы решили сдать экзамен, то для этого вам необходимо сначала зарегистрироваться на сайте Novell, затем выбрать экзамен и тот учебный центр, в котором вы намерены его сдавать. На почту вам придет вся необходимая для сдачи экзамена информация. Ее лучше всего распечатать и принести с собой. Естественно, администратор центра тестирования сможет найти эту информацию, даже если вы ее не принесете, просто это займет время.</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm; margin-left: 0.02cm;">Сдача экзамена происходит путем удаленного доступа к виртуальным машинам через браузер с использованием Flash и Java-апплетов к нему. Я это пишу только для того, чтобы те кто хочет сдавать экзамен были морально готовы к зад<span style="background: none repeat scroll 0% 0% transparent;">ержкам ("тормозам", простыми словами) в его процессе </span>(те, кто уже сдавал, легко поймут о чем я). Пока, на сегодняшний момент, они неустранимы, даже с учетом мощности машин, на которых происходит сдача экзамена, и широкого канала в сеть. Хорошие новости тут только в том, что это не повод для нервов, поскольку время на сдачу экзамена отводится с учетом этих задержек, и его (времени) обычно более чем достаточно. По моим личным наблюдениям, у большинства не сдавших экзамен сдавали (пардон за тавтологию) именно нервы, в то время как знаний у них хватало. Поэтому, готовясь к экзаменам, следует взять себя в руки, чтобы в процессе выполнения заданий у вас была холодная голова. </div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div style="background: none repeat scroll 0% 0% transparent; margin-bottom: 0cm; margin-left: 0.02cm;">Иногда (очень-очень редко) случается такая страшная вещь, что соединение с удаленной машиной падает. Страшного тут тоже ничего нет, потому что в этом случае разрыв соединения фиксируется серверами Novell и отсчет обратного времени экзамена останавливается. После восстановления соединения экзамен продолжится с того момента, на котором вы остановились.</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;">По выполнении заданий следует щелкнуть в браузере кнопку «End Exam» и согласиться с тем, что вы его действительно заканчиваете. После этого начнется процесс оценки выполнения вами контрольных заданий, по окончании которого на экране появится Score report, отражающий степень решения вами предложенных проблем с итоговым баллом. Там же будет написано сдали вы экзамен или нет. В случае успешной сдачи спустя день-два вам на почту придет сертификат в PDF-формате, который можно распечатать, повесить на стенку и гордиться им :). Что еще важно, после регистрации на сайте Novell у вас появляется собственный профиль, в котором будут указаны все ваши текущие сертификации и те сертификации, экзамены по которым вы можете сдавать.</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;">Успехов в подготовке и сдаче экзаменов!</div><div style="margin-bottom: 0cm; margin-left: 0.02cm;"><br />
</div><div lang="ru-RU" style="margin-bottom: 0cm; margin-left: 0.02cm;">Полезные ссылки:</div><div lang="ru-RU" style="margin-bottom: 0cm; margin-left: 0.02cm;">1. <a href="http://www.novell.com/training/certinfo/">Все сертификации <span lang="en-US">Novell</span></a></div><div lang="ru-RU" style="margin-bottom: 0cm; margin-left: 0.02cm;"><span lang="en-US">2. </span><a href="http://www.novell.com/training/i7login/autoauth?action=login">Профиль, где можно посмотреть свои сертификации</a> (требует наличия аккаунта <span lang="en-US">Novell). </span>На сайт можно найти следующим образом: зайти на сайт <span lang="en-US">novell.com, </span>затем в раскрывающемся меню "<span lang="en-US">Services & Support</span>" <span lang="en-US"> </span>разделе "<span lang="en-US">Technical Training</span>" найти пункт <span lang="en-US">"Certification and Testing". </span>Затем в меню слева выбрать "<span lang="en-US">Certification</span>"<span lang="en-US">-"Certification db (login)"</span></div><div lang="ru-RU" style="margin-bottom: 0cm; margin-left: 0.02cm;"><span lang="en-US">3. </span><a href="http://www.novell.com/training/courseware/">Список всех авторизованных курсов <span lang="en-US">Novell</span></a><span lang="en-US"> </span>(с возможностью поиска).</div><div lang="ru-RU" style="margin-bottom: 0cm; margin-left: 0.02cm;">4. <a href="http://www.novell.com/training/testinfo/locator.html">Регистрация на сертификационный экзамен <span lang="en-US">Novell</span></a><span lang="en-US">.</span></div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com6tag:blogger.com,1999:blog-2986307105622275526.post-90590430434751978542010-05-27T09:32:00.001+04:002010-05-27T09:33:08.259+04:00Обновление openSUSE 11.2 до 11.3 M7Прогнав несколько раз обновление openSUSE с 11.2 до очередной "вехи" (очередного Milestone) на виртуалке, я таки решился обновить систему на своем ноутбуке. Напомню, на всякий случай, релиз openSUSE 11.3 <a href="http://en.opensuse.org/Roadmap">выйдет 15 июля</a>, но уже сейчас те, кто хочет - могут обновиться до очередного тестового выпуска. То, что выпуск тестовый означает, что его работа не гарантируется в каждый из моментов времени. Другими словами поломаться может все что угодно в любой момент времени ;).<br />
<br />
Несколько тестовых прогонов на виртуалке позволили выявить несколько подводных камней, на которые можно наткнуться при выполнении обновления "живой" системы. О них я расскажу по ходу дела.<br />
<br />
<a name='more'></a><br />
<br />
На моей openSUSE подключено много дополнительных репозиториев: это конечно же разные репозитории, позволяющие воспроизводить multimedia-файлы. К ним относятся Packman, libdvdcss и Videolan. Поскольку этих репозиториев под openSUSE 11.3 нет - я их оставил нетронутыми. Интересно было посмотреть - будут ли проблемы с зависимостями при обновлении.<br />
<br />
Зато я отключил следующие репозитории:<br />
<ul><li>Mozilla - в котором всегда есть сборка последнего Firefox;</li>
<li>OpenOffice - назначение аналогично;</li>
<li>Virtualization - последние версии kvm и qemu.</li>
</ul>Причина банальна - все последние версии перечисленных программ включаются в основной репозиторий openSUSE 11.3. Естественно, что позже, после релиза стоит подключить эти репозитории обратно.<br />
<br />
Затем я просто перебил номер версии openSUSE с 11.2 на 11.3 в файлах репозиториев OSS (opensource ПО), Non-OSS и Updates. Затем выполнил команду zypper ref , чтобы обновить информацию о репозиториях.<br />
<br />
Теперь об обещанном подводном камне. В процессе обновления, при изменении файлов в /etc/sysconfig , zypper вызывает SuSEconfig, для генерации разных системных файлов в /etc . В то же время в процессе обновления в системе меняются некоторые утилиты, которые вызываются из SuSEconfig'a, что иногда вызывает его временную неработоспособность. Эта "неработоспособность" приводит к тому, что процесс обновлений прерывается и не факт, что его затем можно будет продолжить корректно. Возможно, что к релизу этот баг подправят. Но пока работает именно так, как я описал. К счастью, SuSEconfig можно отключить. Делается это редактированием файла /etc/sysconfig/suseconfig. Достаточно в этом файле изменить значение переменной ENABLE_SUSECONFIG="yes" на ENABLE_SUSECONFIG="no" . После этого SuSEconfig работать больше не будет. На обновленной системе его затем будет необходимо включить обратно.<br />
<br />
Затем, рекомендуется изменить в файле /etc/zypp/zypp.conf (если не сделали этого раньше) параметр commit.download.mode в значение DownloadInAdvance. Это заставит zypper выполнить обновление после предварительного выкачивания всех пакетов.<br />
<br />
Последний шаг перед обновлением - это убедиться, что у вас на жестком диске достаточно места, для всех выкачиваемых пакетов. У меня объем скачивания составил 1,4Gb. Пакеты скачиваются в каталог /var/cache/zypp.<br />
<br />
Ну а теперь просто выполняем обновление командой zypper dup . Перед выполнением обновления он предложит вам разрешить конфликты между пакетами. У меня это почему-то были пакеты, связанные с NetworkManager. Я предпочел удалить все эти пакеты. Их потом можно поставить из обновленной системы. Затем, zypper выкачивает необходимые пакеты и начинает выполнять обновление. У меня весь процесс обновления (без учета времени выкачивания пакетов) занял около 40 минут (Core 2 Duo 2,1 GHz). Достаточно быстро! По окончании процесса можно убедиться в том, что мы действительно обновили систему:<br />
<br />
host13:/etc/X11 # cat /etc/SuSE-release <br />
openSUSE 11.3 Milestone 7 (x86_64)<br />
VERSION = 11.3<br />
<br />
<br />
После завершения обновления включаем обратно SuSEconfig и запускаем его из командной строки: SuSEconfig (обратите внимание, что буква 'u' маленькая). После того, как он отработал, я решил перестраховаться и запустил еще раз mkinitrd - это скрипт, выполняющий пересборку initrd (образа, критичного для загрузки системы). Также желательно запустить zypper ve для дополнительной проверки системы на целостность зависимостей.<br />
<br />
Если вывод этих команд не содержал информации об ошибках, вводим reboot и перезагружаем систему. После удачной (я надеюсь!) загрузки мы попадаем в обновленную систему. В последнем Milestone разработчики openSUSE потихоньку начинают внедрять новое оформление. Новые обои по умолчанию видно на этом скриншоте:<br />
<a href="http://radikal.ru/F/s48.radikal.ru/i120/1005/70/f55cf960750c.jpg.html" target="_blank"><img src="http://s48.radikal.ru/i120/1005/70/f55cf960750ct.jpg" /></a><br />
<br />
Примерно такая же картинка в графическом меню grub и в GDM.<br />
<br />
Система вроде бы пока работает достаточно стабильно. Замеченые пока ошибки:<br />
1. Иногда при загрузке системы разрешение внезапно устанавливается в 640х480 . У меня подозрение, что это пока KMS подглючивает.<br />
2. Немного косячит неправильно настроенный PolicyKit - система постоянно спрашивает root'овый пароль для перезагрузки, монтирования флешек и перехода в спящий режим. Насколько я разобрался - причины кроются в том, что из системы убрана поддержка HAL, а новые политики пока не написаны.<br />
3. При выходе из спящего режима включается на полную вентилятор процессора.<br />
Все эти ошибки терпимые и до релиза вполне можно жить.<br />
<br />
После обновления haldaemon остается работать в системе и его необходимо принудительно отключить:<br />
host13:/etc/X11 # chkconfig haldaemon off<br />
<br />
Х-сервер теперь собран с поддержкой udev вместо HAL:<br />
host13:~ # ldd $(which X)<br />
linux-vdso.so.1 => (0x00007fff401ff000)<br />
<b>libudev.so.0 => /lib64/libudev.so.0 (0x00000036e8600000)</b><br />
libcrypto.so.1.0.0 => /usr/lib64/libcrypto.so.1.0.0 (0x00000036d2800000)<br />
libdl.so.2 => /lib64/libdl.so.2 (0x00000036d4600000)<br />
libpciaccess.so.0 => /usr/lib64/libpciaccess.so.0 (0x00000036d3000000)<br />
libXfont.so.1 => /usr/lib64/libXfont.so.1 (0x00000036d5200000)<br />
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00000036d6200000)<br />
libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0 (0x00000036dee00000)<br />
libXdmcp.so.6 => /usr/lib64/libXdmcp.so.6 (0x00000036da200000)<br />
libm.so.6 => /lib64/libm.so.6 (0x00000036d3e00000)<br />
librt.so.1 => /lib64/librt.so.1 (0x00000036d4e00000)<br />
libc.so.6 => /lib64/libc.so.6 (0x00000036d3a00000)<br />
libz.so.1 => /lib64/libz.so.1 (0x00000036d4a00000)<br />
/lib64/ld-linux-x86-64.so.2 (0x00000036d2400000)<br />
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00000036d7600000)<br />
libfontenc.so.1 => /usr/lib64/libfontenc.so.1 (0x00000036d3400000)<br />
libpthread.so.0 => /lib64/libpthread.so.0 (0x00000036d4200000)<br />
<br />
Теперь для его настроек используется каталог /etc/X11/xorg.conf.d:<br />
<br />
host13:~ # ls /etc/X11<br />
.qtrc.lock Xmodmap.remote fs proxymngr rstart xdm xim.d <b>xorg.conf.d</b><br />
Xmodmap Xresources lbxproxy qtrc x11perfcomp xim xinit xs<br />
<br />
host13:~# ls /etc/X11/xorg.conf.d/<br />
10-evdev.conf 20-synaptics.conf 50-device.conf 50-screen.conf 90-keytable.conf<br />
11-mouse.conf 20-wacom.conf 50-monitor.conf 50-vmmouse.conf<br />
<br />
В данном каталоге лежат файлы, настраивающие отдельные аспекты настройки Х-сервера. Вот, например, файл для evdev:<br />
<br />
host13:~ # cat /etc/X11/xorg.conf.d/10-evdev.conf <br />
#<br />
# Catch-all evdev loader for udev-based systems<br />
# We don't simply match on any device since that also adds accelerometers<br />
# and other devices that we don't really want to use. The list below<br />
# matches everything but joysticks.<br />
<br />
Section "InputClass"<br />
Identifier "evdev pointer catchall"<br />
MatchIsPointer "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Driver "evdev"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "evdev keyboard catchall"<br />
MatchIsKeyboard "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Driver "evdev"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "evdev touchpad catchall"<br />
MatchIsTouchpad "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Driver "evdev"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "evdev tablet catchall"<br />
MatchIsTablet "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Driver "evdev"<br />
EndSection<br />
<br />
Section "InputClass"<br />
Identifier "evdev touchscreen catchall"<br />
MatchIsTouchscreen "on"<br />
MatchDevicePath "/dev/input/event*"<br />
Driver "evdev"<br />
EndSection<br />
<br />
В общем и целом все пока нравится, вроде все работает.strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com9tag:blogger.com,1999:blog-2986307105622275526.post-77439436239621208622010-05-26T10:43:00.007+04:002010-05-28T10:53:46.538+04:00Управление пакетами в (open)SUSE с помощью zypper<div class="separator" style="clear: both; text-align: center;"><a href="http://en.opensuse.org/images/thumb/e/e6/OpenSUSE.png/120px-OpenSUSE.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://en.opensuse.org/images/thumb/e/e6/OpenSUSE.png/120px-OpenSUSE.png" /></a></div><style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
A:link { color: #000080; so-language: zxx; text-decoration: underline }
-->
</style><br />
<div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;">Данная статья не претендует на попытку написать документацию на zypper. Скорее это попытка познакомить читателя со средством пакетного менеджмента, используемым в дистрибутивах компании Novell. Данный пакетный менеджер является незаслуженно игнорируемым многими. Естественно, что охватить все его функции в рамках такой короткой статьи не представляется возможным, хотя бы потому, что для этого есть исчерпывающая документация ;), с которой трудно конкурировать. Ниже приведено вольное изложение об его основных и часто используемых возможностях. Более полный вариант документации и все возможные опции можно посмотреть в man zypper и <a href="http://en.opensuse.org/Zypper">здесь</a>, <a href="http://ru.opensuse.org/Zypper">здесь</a> и <a href="http://ru.wikipedia.org/wiki/Zypper">здесь</a>.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Для управления пакетами в разных версиях SUSE как самое высокоуровневое средство используется Yast, который на самом деле использует zypper (а если еще точнее, то его библиотеку libzypp). Причем, обратите внимание на то, что вторая буква в его названии это "Y", а то почему-то его название многие порываются написать, как zipper. Zypper - средство для управления пакетами в текстовом режиме. С SUSE версии 11 (включая энтерпрайзовые версии) zypper существенно прибавил в скорости. По данному теперь он легко уделывает yum (в отличие от yum zypper написан на С) и не уступает (по субъективному ощущению) apt. Синтаксис его конфигурационных файлов достаточно прост, например, чтобы управлять разными репозиториями не нужно ломать голову в отношении их приоритетов (это камень в огород apt). Также zypper достаточно «всеяден» в плане подключения разных репозиториев - он понимает:<br />
<a name='more'></a><br />
<ul><li>«родной» формат репозиториев yast;</li>
<li>репозитории yum (rpm repo-md);</li>
<li>iso-образы репозиториев (да-да, не нужно их распаковывать!) ;</li>
<li>локальный каталог с rpm-пакетами;</li>
<li>то, что писать уже практически не обязательно - разные сетевые источники репозиториев — http, ftp, nfs.</li>
</ul></div><div style="margin-bottom: 0cm;"><br />
<br />
Oб остальных интересностях я расскажу по ходу дела.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">С версии openSUSE 11.2 в zypper наконец-то была добавлена опция, которая давно в него просилась, а именно, опции предварительного выкачивания пакетов при обновлении. Ранее zypper работал так. Например, нужно обновить с десяток пакетов. Zypper выкачивал их все и устанавливал по одному. В принципе, ничего страшного. Если канал в сеть хороший и надежный. А это в наших широтах не всегда встречается. В основном конфигурационном файле /etc/zypp/zypp.conf данное поведение описывается опцией commit.download.mode (опция закоментирована по умолчанию), которая имеет следующие варианты:</div><div style="margin-bottom: 0cm;"></div><ul><li><i>DownloadOnly</i> — опция, которая легко заменяется ключом --dry-run, т. е. выкачивание всех пакетов необходимых для обновления без их установки.</li>
<li><i>DownloadInAdvance</i> — сначала выкачать все пакеты, требующие обновления, затем начать процесс их установки.</li>
<li><i>DownloadInHeaps</i> — опция аналогичная представленной выше, но в данном случае закачка и установка пакетов выполняется «порциями», не нарушающими целостность системы. Примерно также ведет себя пакетный менеджер в Mandriva.</li>
<li><i>DownloadAsNeeded</i> — традиционное поведение. Закачка и установка осуществляется по одному пакету.</li>
</ul><div style="margin-bottom: 0cm;">Следующей интересной возможностью zypper является сокращенный вариант его опций, т. е. для установки пакета можно написать zypper install foopackage, а можно zypper in foopackage. Далее я буду приводить именно сокращенный вариант опций, а полный вариант писать в скобках.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Поиск пакетов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Для того, чтобы найти нужный пакет в подключенных репозиториях используется следующая команда:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">zypper se foopackage — выполнить поиск (se - search) пакета foopackage.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Если вы хотите найти какую-то программу, но не знаете в каком пакете ее искать, можно сделать так:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">booka:/etc/zypp # zypper wp vi</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Loading repository data...</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Reading installed packages...</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">S | Name | Type | Version | Arch | Repository</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">--+--------------+---------+----------+------+------------------</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">| gvim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">i | vim | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss</span></div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">| vim-enhanced | package | 7.2-16.7 | i586 | openSUSE-11.2-Oss</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Опция wp (what-provides) позволяет искать пакет по любому возможному параметру: имя исполняемого файла, путь до исполняемого файла, любой набор символов из описания пакета. В данном случае я попросил найти пакет, содержащий редактор vi. </div><div style="margin-bottom: 0cm;"><br />
Еще примеры:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Попробуем поискать в каком пакете у нас находится библиотека libpng:</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # zypper wp libpng </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Loading repository data... </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Reading installed packages... </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">S | Name | Type | Version | Arch | Repository </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">--+------------+---------+------------+--------+------------------ </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">i | libpng12-0 | package | 1.2.39-2.2 | x86_64 | openSUSE-11.2-Oss </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">v | libpng12-0 | package | 1.2.39-2.2 | i586 | openSUSE-11.2-Oss</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Интересно, а в каком пакете находится файл /bin/bash?</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Host13:~ # zypper wp /bin/bash </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Loading repository data... </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Reading installed packages... </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">S | Name | Type | Version | Arch | Repository </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">--+------+---------+------------+--------+---------------------------- </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">i | bash | package | 4.0-18.4.1 | x86_64 | Updates for openSUSE 11.2-0 </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">v | bash | package | 4.0-18.4.1 | i586 | Updates for openSUSE 11.2-0 </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">v | bash | package | 4.0-18.3 | x86_64 | openSUSE-11.2-Oss </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">v | bash | package | 4.0-18.3 | i586 | openSUSE-11.2-Oss </span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Первый столбик показывает статус пакета, где i означает - установлен.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Просмотреть информацию о пакете можно командой zypper info <имя пакета></div><div style="margin-bottom: 0cm;"></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Установка и удаление пакетов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Установка пакетов из подключенных репозиториев выполняется командой:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper in foopackage</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Данная команда (in - install) установит пакет foopackage со всеми его зависимостями.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Для удаления пакетов используется опция rm/remove:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper rm foopackage</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Данная команда удалит пакет foopackage из вашей системы. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Для проверки целостности системы на предмет удовлетворения зависимостей существует команда verify:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper ve</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Если чего-то не будет хватать - zypper предложит доустановить нехватающие пакеты (или даже удалить ненужные).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Также есть еще два ключа, которые не являются обязательными, но могут здорово помочь, если вы вызываете zypper из скриптов. Первый ключ «-y» заставляет пакетный менеджер отвечать на все вопрос «да»/«yes». Второй ключ «-l» (маленькая L) - имеет похожее значение, она заставляет zypper соглашаться с лицензионными соглашениями отдельных пакетов (например, таких как Adobe Flash).</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Обновление</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Выполнять обновление системы zypper позволяет двумя способами — на основе патчей и на основе пакетов. Первый способ рекомендуется для серверов. В данном случае производится только наложение патчей, исправляющих ошибки безопасности на установленное ПО, причем этот способ обновлений должен поддерживаться теми, кто ведет репозиторий, из которого вы обновляетесь. Стандартные репозитории openSUSE поддерживают данный способ. Второй способ выполняет установку новых пакетов в систему. Понятно, что в данном случае все определяется способом ведения репозитория майнтейнерами пакетов. Стандартные репозитории openSUSE «замораживают» номера версий ПО, так что в принципе эти два способа равноценны (но только для них). Это все была теория. Теперь немного практики.<br />
Обновить метаданные репозитория можно командой zypper ref и это необходимо делать всякий раз перед выполнением обновления (либо включить autorefresh для всех репозиториев - см.ниже). </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Просмотреть список доступных патчей (list-patches) можно командой:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper lp </span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Просмотреть информацию о конкретном патче можно командой (про опцию -t ниже):</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper info -t patch foopatch</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Установить патчи можно командой zypper patch .</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Обновление системы на основе пакетов выполняется командой:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper up [имя пакета]</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Данная команда (up/update) выполняет обновление либо указанного пакета, либо всей системы.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Вторая команда предназначается для обновления системы между релизами (dist-upgrade):</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">zypper dup</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Последняя команда имеет несколько интересных эффектов. Как известно все пакеты rpm имеют поле Vendor, в котором указан сборщик пакета. Пакеты из стандартных репозиториев имеют в данном поле openSUSE (или просто SUSE для энтерпрайзовых версий). Пакеты собранные на openSUSE Build Service имеют в данном поле слово obs с указанием вида репозитория. Так вот команда zypper up выполняет обновление таким образом, чтобы поле Vendor не менялось при обновлении. zypper dup, наоборот, может предпочесть изменить вендора пакета при обновлении. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Следующая интересная возможность касается тех, кто как я любит поэкспериментировать с системой. Допустим, вы хотите поставить последнюю версию KDE, подключаете репозиторий (об этом ниже) KDE4:Factory (данный репозиторий для разработчиков и тестеров), выполняете zypper dup (при этом Vendor меняется с openSUSE на что-то вроде obs://build.opensuse.org/KDE/KDE4:Factory) и получаете ее. Но потом, вы обнаруживаете, что в ней еще куча ошибок и вы хотели бы вернуться обратно. Что же делать? Неужели ничего нельзя поправить?!!! А ничего страшного! Убираете данный репозиторий (удаляете файл с его описанием или просто выключаете его) и опять выполняете zypper dup. При этом zypper вам предложит выполнить downgrade всех обновленных ранее пакетов. Т. е. zypper dup выполняет обновление системы таким образом, чтобы она всегда соответствовала подключенным репозиториям. Справедливости ради, стоит отметить, что downgrade не всегда проходит гладко. Иногда, при неблагоприятном положении звезд и планет, в системе остаются библиотеки от новых репозиториев, которые могут помешать работе программ. Так что возможно, придется затем позаниматься таким «увлекательным» занятием, как troubleshooting.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Управление репозиториями</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Как отмечалось выше zypper всеяден в плане возможных репозиториев. Посмотреть что же у вас подключено в данный момент можно следующей командой:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;"><span style="font-size: xx-small;">host13:~ # zypper lr </span></span> </div><br />
В первой колонке приведен порядковый номер репозитория, во второй и третьей его название и описание. Четвертая и пятая колонки показывают включен ли данный репозиторий и включено ли его автообновление (autorefresh). Если последняя возможность включена, то при каждом своем запуске zypper будет проверять нужно ли обновление метаданных репозитория и, если нужно, выполнять его. В противном случае, вам нужно будет делать это собственноручно командой zypper ref (refresh).<br />
<div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Добавить репозиторий можно командой: zypper ar URI alias <repouri> <alias> <repo ur=""> <alias>, где <repo uri=""> - URI<repouri> идентификатор репозитория. <alias>alias<alias> - это любое понятное вам имя репозитория, позволяющее идентифицировать его и отличить от других. ar — сокращенный вариант addrepo. Пример команды:</alias></alias></repouri></repo></alias></repo></alias></repouri></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # zypper ar nfs://192.168.0.254/srv/ftp/sles11 sles11 </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Adding repository 'sles11' [done] </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Repository 'sles11' successfully added </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Enabled: Yes </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Autorefresh: No </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">URI: nfs://192.168.0.254/srv/ftp/sles11</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Удалить репозиторий можно командой zypper rr <id><alias>. Например:</alias></id></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13: ~# zypper rr 13 </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Removing repository 'sles11' [done] </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Repository 'sles11' has been remove</span>d.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Здесь я удалил репозиторий, указав его ID (то есть номер). Его можно увидеть в выводе команды zypper lr . Аналогичного эффекта я бы добился, указав <span style="font-family: 'Nimbus Mono L', monospace;">zypper rr sles11</span> . То есть в данном случае указывать нужно или ID репозитория, или его псевдоним.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Модификация параметров репозитория выполняется командой: zypper mr [options] . Список опций можно получить следующим образом:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # zypper mr </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Alias or an aggregate option is required. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">modifyrepo (mr) <options> <alias|#|uri> ... </alias|#|uri></options></span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">modifyrepo (mr) <options> <--all|--remote|--local|--medium-type> </options></span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Modify properties of repositories specified by alias, number, or URI, or by the </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">'--all, --remote, --local, --medium-type' aggregate options. </span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">Command options: </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-d, --disable Disable the repository (but don't remove it). </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-e, --enable Enable a disabled repository. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-r, --refresh Enable auto-refresh of the repository. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-R, --no-refresh Disable auto-refresh of the repository. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-n, --name Set a descriptive name for the repository. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-p, --priority <integer> Set priority of the repository. </integer></span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-k, --keep-packages Enable RPM files caching. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-K, --no-keep-packages Disable RPM files caching. </span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-a, --all Apply changes to all repositories. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-l, --local Apply changes to all local repositories. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-t, --remote Apply changes to all remote repositories. </span> </div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">-m, --medium-type <type> Apply changes to repositories of specified type. </type></span> </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Например, следующая команда включит параметр autorefresh для все репозиториев:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # zypper mr -ra</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Опция -r просит включить автообновление для репозиториев (а -R выключит его), а опция -a говорит применить это ко всем репозиториям. </div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Репозитории могут иметь приоритеты, которые могут дополнительно указывать zypper ваши предпочтения (меньшее значение - больший приоритет). Работа с приоритетами аналогична тому, что происходит в yum. Только здесь не нужно ставить никаких дополнительных плагинов. Чтобы задать приоритет репозиторию можно воспользоваться командой zypper mr, но на мой взгляд, гораздо проще открыть файл .repo репозитория и дописать в нем, например, такую строчку - priority=100. Стандартные репозитории openSUSE имеют приоритет 90, а репозиторий Updates приоритет 20. Имейте это в виду, когда будете задавать собственные приоритеты. После изменения приоритетов репозиториев обязательно необходимо запустить, сначала zypper ref (если не включен autorefresh для репозиториев), а затем zypper dup, для того, чтобы zypper установил пакеты в соответствии с высказанными вами предпочтениями.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Но, по-моему, гораздо удобнее для управления репозиториями использовать соответствующий модуль yast:</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # yast repositories</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Любители графического интерфейса Yast могут воспользоваться либо его графическим меню, либо набрав в консоли:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # yast2 repositories</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Ну и самый простой способ подключения репозиториев - это скачать файл с его описанием <a href="http://download.opensuse.org/repositories/">отсюда</a>. В каждом из репозиториев есть текстовый .repo файл, например, для репозитория со свежими версиями Apache он лежит <a href="http://download.opensuse.org/repositories/Apache/openSUSE_11.2/">здесь</a>. Затем нужно поместить его в каталог /etc/zypp/repos.d/. Ну и подредактировать на предмет приоритетов, если это нужно.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><b>Типы пакетов</b></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Ну и самая интересная возможность zypper в том, что он позволяет использовать разные типы «пакетов» при установке. В данном случае под «пакетами» понимаются:<br />
<ul><li>собственно, пакеты (и если ничего не указывать специально, то имеются в виду именно они);</li>
<li>патчи (patch) (репозитории могут содержать просто патчи, а не пакеты с обновлениями);</li>
<li>шаблоны (pattern) - группы пакетов, устанавливающие ту или иную функциональность;</li>
<li>продукты (product) - совсем редко встречающийся зверь - это группы пакетов для работы того или иного продукта;</li>
<li>пакет с исходниками (srcpackage) - это обычный src.rpm.</li>
</ul></div><div style="margin-bottom: 0cm;"><br />
Тип пакета указывается опцией -t . Например, получить список доступных шаблонов можно командой <span style="font-family: 'Nimbus Mono L', monospace;">zypper patterns</span>. И поставить тот, что нужен, командой:</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;"><span style="font-family: 'Nimbus Mono L', monospace;">host13:~ # zypper in -t pattern x11</span></div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Здесь pattern это тип устанавливаемого пакета, то есть мы указываем, что имеем в виду именно шаблон. x11 - имя устанавливаемого шаблона. Самое плохое при использовании шаблонов это то, что удалять пакеты шаблонами zypper пока не умеет.</div><div style="margin-bottom: 0cm;"><br />
</div><div style="margin-bottom: 0cm;">Это, пожалуй, все, что я хотел рассказать про zypper на данном этапе. Я не ставил целью написать полный обзор данного пакетного менеджера, но надеюсь, что после этого хотя бы кто-то прочтет его полную документацию ;).</div><br />
<div style="margin-bottom: 0cm;"><br />
</div>strangerhttp://www.blogger.com/profile/16134734102142649273noreply@blogger.com8