Секреты пакетного менеджмента
Илья Шпаньков
🕛 25.08.2006, 10:24
Компьютер - уникальный инструмент, его универсальность не знает границ. В зависимости от пристрастий владельца электронно-вычислительная машина может быть игровой станцией, рабочим местом дизайнера или менеджера, студией видеомонтажа и цифровой обработки звука - всё зависит лишь от установленного программного обеспечения. Канули в прошлое времена, когда для использования даже небольшой программы требовалась долгая и скрупулёзная работа по подготовке перфокарт и введения данных в память компьютера. Сейчас всё дело сводится к "паре кликов".Возможно, со временем мы бы вообще перестали задумываться о данной процедуре не больше, чем о смахивании пыли с экрана монитора, но в мире софта произошли некоторые изменения, заставившие по-новому взглянуть на весь процесс установки и удаления софта. Как только экстравагантные операционные системы семейства GNU/Linux начали своё осторожное продвижение на десктопы обычных пользователей, последние с удивлением обнаружили, что привычный и освоенный до автоматизма механизм водружения в систему очередного творения неуёмных программистов не является единственно возможным. Оказывается, можно делать и по-другому.
Казалось бы, зачем и кому это нужно, если привычные для Windows-систем процедуры установки и удаления программ доведены практически до совершенства? Пользователь вообще ни о чём не должен беспокоиться: достаточно ответить на несколько наводящих вопросов, после чего "умная" техника всё сделает самостоятельно, без какого-либо вмешательства извне. Но на самом деле любое удобство имеет оборотную сторону медали. По причине полного отстранения от процесса установки вы совершенно не в курсе, какие файлы и куда "разбрелись". В общем, ничего страшного в этом нет. При желании можно запустить процесс удаления программы, и машина самостоятельно ликвидирует установленные ранее файлы и папки. Только весь фокус в том, что удаляется как раз не всё. Сохраняемые пользовательские настройки - это ещё полбеды, но в системных каталогах зачастую остаётся немного "мусора", который с течением времени способен значительно увеличивать объём данных на диске. Случаются и более неприятные казусы: не всегда программисты ответственно относятся к работе своих изделий в окружении других программ. Желание показать максимальные возможности своего детища похвально, но когда ради этой цели при установке заменяются динамические библиотеки, используемые другими приложениями, результат нетрудно предугадать: после удаления этих файлов при "сносе" программы-соседки лишаются некоторых порой критичных функций.
Ещё один момент зачастую просто не принимается во внимание, но при этом людей дотошных может значительно огорчать. Одна из причин беспроблемности установки софта кроется в том, что требуемые для его функционирования библиотеки уже присутствуют в системе. С одной стороны, приятно, что о вас заботятся и заблаговременно готовят "почву" для программ, которые вы будете использовать. А если не будете? Получается, что вместе с операционной системой вы устанавливаете "балласт", который вам никогда, возможно, и не пригодится. Если же некие специфические для новой программы библиотеки и устанавливаются вместе с "хозяйкой", то часто после удаления оной остаются в системе, переходя в разряд "мусора", о котором говорилось в предыдущем абзаце. В любом совершенстве можно найти изъяны, даже "Джоконда", говорят, не соответствует канонам гармонии.
Не побоюсь гневных обличений в, мягко говоря, неточности, и осмелюсь сказать, что существует более близкая к идеалу система установки и удаления программ, и обнаружить различные способы её реализации можно в тех самых упомянутых в начале статьи операционных системах GNU/Linux. Называются они просто - менеджеры пакетов, а их основное предназначение - дать пользователю полный контроль над всей процедурой установки и удаления программ.
После прочтения данных строк некоторые читатели, обладающие неоднозначным опытом общения со свободными системами, разразятся бранью, кто-то просто скажет: "Ну-ну, плавали - знаем". Найдутся и те, кто обрадуется: "Конечно! Ведь это же Linux!". Не исключены и другие эмоции, являющиеся результатом того или иного опыта (или его отсутствия) работы с данными менеджерами. Я предлагаю всем взять небольшую паузу, вернуть гармонию уравновешенного состояния души и спокойно разобраться в вопросе, который многие из нас (включая ярых сторонников свободных систем) знают, скажем так, недостаточно хорошо.
Одна из отличительных черт свободно распространяемых операционных систем GNU/Linux - их модульность. В зависимости от требуемых функций можно из одного и того же "строительного материала" собирать как мощные настольные системы, так и миниатюрные операционки для наладонников или специализированных устройств, обладающих очень скромным аппаратным обеспечением. Используется только то ПО, которое действительно необходимо, и этот принцип целесообразности по наследству передался системе установки и удаления бинарных пакетов (как в среде пользователей GNU/Linux принято называть файлы, подготовленные к работе в операционной системе и сжатые в архив).
Другими словами, мы можем установить на компьютер только минимальную, базовую часть операционной системы, а всё остальное (графические оболочки, приложения и требуемые для них библиотеки) выбрать по собственному усмотрению. Звучит просто, но на самом деле задача эта далеко не тривиальная. Вместе с приложениями необходимо устанавливать и так называемые "зависимые" пакеты, включающие наборы библиотек, графические средства управления и т.д. Выучить наизусть все хитросплетения взаимосвязей между десятками тысяч пакетов просто невозможно, поэтому ответственная задача по соблюдению зависимостей ложится на плечи специально созданных программ - пакетных менеджеров.
Принцип их работы прост: как только вы даёте указание на установку новой программы, менеджер просматривает помещённые разработчиками в её установочный пакет списки необходимых дополнений, проверяет их наличие в установленной системе и по результатам проверки предлагает вам доустановить отсутствующие. Если вы предварительно указали ресурсы (локальные или сетевые), где могут находиться требуемые пакеты, после вашего подтверждения процедуры установки менеджер самостоятельно загрузит необходимые файлы на компьютер и установит всё необходимое для работы новой программы. При этом вы можете просмотреть подробный список всех файлов, входящих как в саму программу, так и в зависимые пакеты, каталогов будущего размещения, нередко можно ознакомиться с перечнем изменений, произведённых в более ранних сборках пакетов к данной версии и даже со списком программистов, эти изменения вносивших.
Более того, многие (если не все) менеджеры пакетов позволяют одной командой производить групповую установку программ, относящихся, например, к одной категории по функциональной принадлежности или являющихся более новыми версиями по отношению ко всем уже установленным приложениям и библиотекам. После начала выполнения команды можно заняться своими делами - компьютер сам найдёт и установит всё необходимое без вашего участия. Делается это практически теми самыми пресловутыми "двумя кликами". Впрочем, можно обойтись и без них: менеджеры могут работать в полностью автономном режиме, отслеживая появление новых версий для уже установленных пакетов и устанавливая их без участия пользователя. Причём подобная практика распространяется не только на системные компоненты, но и на пользовательские приложения, установленные ранее. Это позволяет всегда работать в современной операционной системе и использовать только новейшие программные решения.
Налицо явные плюсы: гибкость настройки (от полностью автоматического обновления до поштучного выбора пакетов), предоставление исчерпывающей информации, полный контроль над составом установленного софта, масса сервисных возможностей. В теории всё до того красиво, что непонятно, почему до сих пор подобная практика не стала стандартом для всего ПО? И почему все форумы пестрят вопросами пользователей, сталкивающихся с постоянными проблемами установки нового софта в GNU/Linux? Вывод напрашивается один - что-то работает не так, как задумано. Давайте вспомним старую русскую традицию и поищем виноватых.
Рискну ещё раз навлечь гнев на свою голову и скажу, что, в первую очередь, ответственность несут... нет, не пользователи, а сами разработчики. Дело в том, что одной из уникальных черт свободных систем является практически полное отсутствие границ между этими двумя классами околокомпьютерного сообщества. Для того чтобы обычный "юзер" стал "девелопером", достаточно одного лишь желания. Нередко же пользователь вообще не замечает, что уже занялся "не своим" делом: никаких предостерегающих знаков или хотя бы предупреждений нет, полная свобода перемещения из одного стана в другой. Например, обнаружив в интернете RPM-пакет новой версии интересной программы, пользователь смело скачивает его и пытается установить в свою RPM-based систему. Или ещё экзотичней - самостоятельно компилирует и устанавливает программу из исходных кодов. И тот, и другой вариант не относятся к стандартным действиям: для так называемого пресловутого «обычного пользователя» предусмотрен штатный системный менеджер, который использует архивы пакетов, подготовленных и протестированных для работы именно в данной операционной системе. Любой другой способ установки не гарантирует корректной работы как устанавливаемого приложения, так и всей системы в целом.
Да, собранные из RPM-пакетов операционные системы очень похожи, но всё-таки они разные. В зависимости от предназначения, целевой аудитории и (чего уж греха таить) личных пристрастий разработчиков внутреннее устройство систем имеет некоторые отличия, мешающие, например, RPM-пакету от Mandriva корректно устанавливаться и работать в SuSE, и наоборот. При нарушении этого правила и возникают ситуации, когда устанавливаемый пакет тянет за собой массу зависимых, которые, в свою очередь, начинают конфликтовать с уже установленными, и всё заканчивается гневными обвинениями в недружелюбности Linux, излитыми на страницах форумов. И гнев этот небеспочвенный: мы уже привыкли жить по правилу "разрешено всё, что не запрещено". Запрещать установку "неродных" пакетов, конечно, не стоит, но выводить на экран предупреждение соответствующего содержания в начале процедуры явно не помешало бы, и кто, как не разработчик, должен позаботиться об этом?
Справедливости ради нужно сказать, что некоторые подвижки в этой области всё-таки есть. Разработчики популярных дистрибутивов GNU/Linux различными способами указывают, что данный пакет не совсем "свой", но если вы не используете штатный менеджер пакетов, а пробуете другой способ установки, то, как правило, никто вам слова поперёк не скажет. Для надёжности систему предупреждения желательно внедрять непосредственно в каждый пакет, чтобы в дальнейшем у пользователей не возникало иллюзий по причине молчаливого согласия. Тем более, подобная практика никак не противоречит общественной лицензии GPL. Пока же большинству начинающих пользователей GNU/Linux систем приходится учиться на собственных ошибках (как в своё время и автору этих строк).
Следующий шаг по дискредитации GNU/Linux систем в глазах начинающих пользователей делают многочисленные "Linux-гуру", зачастую являющиеся лишь более продвинутыми пользователями, прошедшими различные "грабли" своими силами. Нередко предлагаемые ими советы по установке "неродных" пакетов с использованием "хитрых" команд или даже посредством ручной раскладки (sic!) по каталогам пакетных файлов напоминают забивание шурупа кувалдой в розетку. Собранная подобным образом машина долго не протянет, операционная система - тоже. Результат - испорченные нервы и тихая ненависть к "недоделанному Линуксу".
То, что подобные способы нештатной установки софта существуют, ещё не означает, что они предназначены для широкого использования. Только опытный разработчик, понимающий все последствия и способный восстановить всё, "как было", может баловаться подобной экзотикой в процессе тестирования и отладки. То же относится и к установке программ из исходных кодов. Пользователь может это делать, но это не значит, что он должен, и уж, тем более, подобный способ не является стандартной пользовательской процедурой - пользователь просто не может знать всех тонкостей устройства операционной системы, поэтому неизбежно сделает ошибки, приводящие впоследствии к непредсказуемым результатам. Исходный код - удел разработчика, а кажущаяся простота работы с ним обманчива и требует хорошей базы специфических знаний.
Наконец, пришло время бросить камень и в огород самих пользователей. Так уж повелось, что большинство из нас впервые открывают для себя компьютерный мир, глядя на него через одни и те же "Окна". Естественно, все приобретаемые навыки откладываются в памяти и подсознательно считаются единственно верными. Поэтому, приступая к работе в другой операционной системе, мы нередко начинаем выполнять привычные действия и очень удивляемся, когда не получаем ожидаемого результата. Учиться повторно нам не позволяет или гордость ("я же столько лет работаю за компьютером!"), или желание поскорее воспользоваться всеми преимуществами нового виртуального дома, или ещё какой-нибудь не менее важный фактор. Результат-то всегда один: натолкнувшись на некую проблему и не решив её с ходу, ставим крест на всей системе в целом.
Между тем, попав в страну с правосторонним движением, мы не стесняемся пройти курс переподготовки, не взирая на весь предыдущий стаж. Новые условия требуют новых навыков, и ещё не факт, что всё получится с первого раза. Поэтому, как бы ни были доступны различные способы установки ПО в свободных GNU/Linux-системах, и каким бы авторитетом ни обладали сторонние советчики, в первую очередь, необходимо уметь пользоваться штатными средствами, позволяющими избавиться от большинства возможных проблем.
Предвосхищая непременные вопросы, скажу, что давно и успешно использую в работе именно GNU/Linux-системы. Полагаю, я вправе указывать на некоторые недочёты в этих удобных и красивых программных продуктах. В конце концов, здоровая критика поможет исправить ошибки, тем самым, позволив будущим пользователям избежать различных проблем. Если уж Linux взял курс на десктопы обычных домашних пользователей и постепенно становится полноправным участником рыночных отношений, то рыночный девиз "клиент всегда прав" стоит учитывать.
В свою очередь, сами пользователи должны понять, что мир программного обеспечения не ограничен правилами, выдаваемыми за единственно верные. Свобода выбора - величайший дар человека, и её воплощение в мире ПО говорит о том, что развитие виртуального сообщества идёт в правильном направлении.
Только не следует забывать, что свободный выбор должен быть осознанным.