Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 2. Основы функционирования ОС Linux.
Необходимо уметь собирать и устанавливать программы из исходных текстов. Для этого также нужно уметь распаковывать файл с исходными текстами и выполнять простые модификации в файле сборки (Makefile), например, для того, чтобы изменять пути или добавлять дополнительные каталоги файлов заголовков.
Еще одним обязательным навыком является умение определять разделяемые библиотеки, от которых зависят исполняемые файлы и устанавливать их в случае необходимости. Нужно уметь точно определить местоположение системных библиотек.
В результате изучения данного раздела также необходимо овладеть навыками управления пакетами в Debian. Под этим подразумевается умение использовать инструменты командной строки и интерактивные утилиты для установки, обновления и удаления пакетов, а также поиска пакетов, содержащих определённые файлы (такие пакеты могут быть установлены или не установлены). Сюда также входит умение получать различную информацию о пакете, такую как версия, содержимое, зависимости, целостность и статус установки (установлен пакет или нет).
Также необходимо уметь управлять пакетами программ в дистрибутивах Linux, использующих пакетную систему RPM. Навыки управления пакетами включают в себя установку, переустановку, обновление и удаление пакетов программ, а также умение получить информацию о статусе и версии пакетов. Навыки управления также включают в себя получение информации о пакете, такой как: версия, статус, зависимости от других пакетов, целостность пакета, и цифровая подпись. Соискатели должны уметь получить список файлов в пакете, а также найти пакет соответствующий определённому файлу.
2.1 Сборка и установка программ из исходных текстов
Установка программы из исходных текстов может потребоваться по одной из следующих причин:
• Требуется программа, не входящая в ваш дистрибутив.
• Нужна программа, которая доступна только в виде исходных текстов.
• Нужна некая функция программы, которая может быть включена только после перекомпиляции программы из исходных текстов.
• Узнать о том, как программа работает или принять участие в ее разработке.
В этом подразделе будут рассмотрены пакеты программ, распространяемые в виде так называемых сжатых tar-файлов (tarball). Команда tar (от Tape ARchive − ленточный архив) используется для создания архивов с файлами из древа каталогов. Несмотря на название, tar-файлы могут располагаться на любом носителе. Хранение их на диске позволяет выполнять такие операции, как например удаление части архива, что невозможно сделать на ленте. Команда tar сама по себе не сжимает данные, она просто соединяет их в один файл в специальном формате, позволяющем сохранить как сами файлы, так и все права доступа, запреты и структуру каталогов. Команда tar может быть использована совместно с программой сжатия, обычно gzip или bzip2, для создания сжатого архива, который экономит дисковое пространство, а также уменьшает время передачи файла. Вот этот получившийся архив и называют tarball. Помимо простых архивов исходные тексты отдельных программ могут быть упакованы для вашего дистрибутива в пакеты с исходными текстами (source package), такие как RPM с исходными текстами (или SRPM).
Перед загрузкой узнайте как можно больше о пакете. Если доступна информация по сборке или установке, то просмотрите ее на предмет необходимости других пакетов, чтобы было возможно скомпилировать этот. Часто вам необходимо установить еще и несколько библиотек, а возможно и инструмент разработки, чтобы успешно скомпилировать выбранную программу. Это особенно часто бывает, если ваша программа использует любые графические инструментарии. Иногда только после запуска процесса сборки выясняется, что необходим еще какой-то пакет. В этом случае нужно найти и установить отсутствующий пакет и продолжать попытки пока все требуемые пакеты не будут установлены.
Пакет, вероятно, будет иметь имя, имеющее одно из перечисленных окончаний: tar, tar.gz, tar.Z, tgz, или tar.bz2. Можно также загружать пакеты, используя CVS (Concurrent Version System). В этом случае загруженные исходные тексты будут уже распакованы. Изредка можно найти файлы с расширением zip.
Сжатый tar файлы или tarball − это наиболее популярная форма распространения исходных текстов, если не используется система управления пакетами вроде RPM от Red Hat или управление пакетами в Debian. Они создаются при помощи команды tar, архивирующей древо каталогов и все файлы из него в один архивный файл.
Обычно результат может быть сжат при помощи некой программы сжатия, как правило, используется одна из следующих: compress, gzip или bzip2. Поскольку архивирование и сжатие это наиболее общие операции, команда GNU tar, имеющаяся во многих дистрибутивах Linux, может также самостоятельно применять сжатие и развертывание с использованием compress, gzip или bzip2.
Предположим, что мы загрузили проект Dr. Geo interactive geometry, имя файла − drgeo-1.1.0.tar.gz. Расширение gz говорит о том, что этот файл сжат при помощи gzip. Рассмотрим получение tar файла из сжатого файла, а затем извлечение оттуда отдельных файлов. Затем рассмотрим, как распаковать и извлечь файлы одной командой или при помощи конвейера. Для того, чтобы просто извлечь tar-архив мы используем команду gunzip:
gunzip drgeo-1.1.0.tar.gz
Файл .tar.gz теперь заменен исходным .tar файлом. Чтобы распаковать tar-файл для других упомянутых расширений, следует использовать следующие команды (соответственно):
uncompress drgeo-1.1.0.tar.Z
gunzip drgeo-1.1.0.tar.Z
gunzip drgeo-1.1.0.tar.gz
gunzip drgeo-1.1.0.tgz
bunzip2 drgeo-1.1.0.tar.bz2
gunzip может работать с .Z, .tar.gz и .tgz. В действительности же, в системе может вообще не быть программ compress и uncompress. Для извлечения файлов из tar архива используется команда tar. Стандартная форма:
tar -xvf имя_файла.tar
Опционально, можно ограничить вывод, используя малый фильтр для разбивки вывода на страницы, добавив в конце команды |more.
Опция -x говорит tar, что нужно извлечь файлы из архива. Опция -v говорит tar, что нужно вывести подробный листинг обрабатываемых файлов. И опция -f вместе с именем файла (в данном случае drgeo-1.1.0.tar) говорит tar, что архивные файлы извлекаются из файла.
Правильно сделанный пакет в процессе разархивирования создаст каталог, в котором будут сохранены файлы пакета. В примере это каталог drgeo-1.1.0.
Иногда пакет этого не делает, и потому можно посмотреть структуру пакета перед тем, как выполнить его распаковку с риском получить огромное количество файлов прямо в домашнем каталоге. Чтобы выполнить проверку используйте команду tar с опцией -t, отображающей таблицу содержимого, вместо -x, производящей разархивирование. Если опустить опцию -v, то все равно полученного листинга будет достаточно для того, чтобы понять какие файлы будут созданы и будет ли создан новый каталог или все будет выгружено в текущий.
Теперь, когда мы увидели как разархивировать сжатые архивы tar в два шага, рассмотрим как все это можно сделать за один шаг. Если добавить опцию -z к команде tar, то она сможет распаковать и разархивировать архивы, сжатые gzip при помощи одной команды. Например:
tar -zxvf drgeo-1.1.0.tgz
или
tar -zxvf drgeo-1.1.0.tar.Z
Для выполнения того же для архивов, сжатых при помощи bzip2, вместо опции -z используйте опцию -j. Например:
tar -jxvf drgeo-1.1.0.tar.bz2
Можно также использовать опцию -c с любой из указанных выше команд сжатия для направления распакованных файлов в стандартный вывод, который затем преобразуется в стандартный вход для команды tar. Отметим, что это оставляет оригинальный файл неизменным, а не распаковывает его в большой .tar файл. Вот несколько примеров:
bunzip2 -c drgeo-1.1.0.tar.bz2 | tar -xvf −
uncompress -c drgeo-1.1.0.tar.Z | tar -xvf −
gunzip -c drgeo-1.1.0.tar.Z | tar -xvf −
gunzip -c drgeo-1.1.0.tar.gz | tar -xvf −
gunzip -c drgeo-1.1.0.tgz | tar -xvf −
Значение “-“ вместо имени архивного файла заставляет tar использовать стандартный ввод для архивов. Если Ваша версия tar может делать это по умолчанию, нет нужды указывать опцию -f вообще. Просто опустите в конце вышеперечисленных команд завершающие f −. Команда zcat выполняет те же функции, что и gunzip -c.
Изредка можно обнаружить пакеты с исходными текстами в виде zip файлов. Это может иметь место для пакетов, которые работают в Windows также как и в Linux системах. Для распаковки можно использовать команду:
unzip имя_архива.zip
Когда исходные тексты распакованы в древо каталогов, рассмотрим, как скомпилировать программу или программы. Перед тем, как запустить компиляцию, необходимо просмотреть, что было распаковано. В частности, просмотреть документацию по установке. Обычно это файл README или INSTALL, возможно, что и оба, расположенные в каталоге нового проекта. Если пакет разработан для нескольких платформ, можно найти файлы, специфичные для некой платформы, такие как README.linux или INSTALL.linux.
Весьма часто в главном каталоге исходных текстов встречается скрипт configure. Это скрипт разработан для настройки Makefile, который подгоняется под систему. Он обычно генерируется разработчиком с использованием программы GNU autoconf. Скрипт configure проверяет систему на наличие всех нужных инструментов и на совместимость. Полученный в результате Makefile или несколько таких файлов, позволяют скомпилировать проект на конкретной системе.
Сложный конфигурационный скрипт может проверять множество аспектов системы, включая такие вещи, как тип процессора, является ли он 32-х или 64-х битным и так далее. Простой конфигурационный сценарий не делает почти ничего, кроме создания файлов Makefile.
Если нет файла с именем configure в главном каталоге проекта, то просмотрите документацию на предмет другого способа настройки параметров сборки. Если же такой файл есть, то перейдите в главный каталог проекта и выполните:
./configure --help
Эта команда выдаст справку о доступных опциях конфигурации. Многие из них, такие как --prefix, встречаются в большинстве конфигурационных скриптов.
Некоторые, скорее всего, будут специфичны для конкретного компилируемого проекта. Найдите те, который нужно изменить.
Если ваш проект не имеет конфигурационного скрипта, то возможно он имеет файл Makefile, работающий на большинстве платформ, или установочный процесс в какой-то другой форме. Например, пакет, использующий только скрипты Python файлы с данными может не требовать сборки, так что он может иметь просто сценарий для установки.
Локальные программы должны иметь исполняемые файлы, сохраненные в древе /usr/local в /usr/local/bin и man-страницы в /usr/local/man. Скрипты configure, вероятно, имеют опцию --prefix, указывающую место установки. Если программа не совместима с FHS, то может потребоваться указать эту опцию при запуске скрипта configure. При компилировании программы для замены установленной версии, может потребоваться установить ее, указав каталог в /opt или /usr в качестве префиксов.
Вдобавок к возможному указанию префиксов можно обнаружить другие опции, связанные с размещением специфичных компонентов, таких как --mandir или --infodir для указания расположения man и info страниц, соответственно.
После просмотра возможных опций и определения того, что следует изменить, выполните скрипт configure, добавив все необходимые опции. Добавьте ./ перед командой configure, поскольку каталог проекта, вероятно, не будет указан в переменной path. Например, можно выполнить ./configure или ./configure --prefix /usr/local.
После запуска configure обычно отображаются сообщения, рассказывающие о типе используемой системы и о том, какие необходимые инструменты установлены, а какие нет. Если все идет хорошо, то к концу процесса конфигурирования будет сформирован Makefile.
По завершении выполнения скрипта configure, он сохраняет информацию о конфигурации в файле с названием config.cache, расположенном в том же каталоге, что и сам скрипт configure. Если необходимо запустить ./configure вновь, то убедитесь, что прежде удалили файл config.cache (используйте команду rm), поскольку configure будет использовать настройки из config.cache, если он существует, не производя повторной проверки системы.
По завершении конфигурирования, должен получиться файл в каталоге проекта с именем Makefile. Он называется сборочный файл проекта, программа с именем make используется для его обработки и сборки программы. Может также иметься несколько make-файлов в подкаталогах.
Make-файл содержит правила, являющиеся инструкциями, которые сообщают программе make как собирать различные компоненты приложения. Файл также содержит targets (цели), которые сообщают программе make, что именно компилировать. Программа make анализирует make-файл и определяет порядок, в котором следует производить компиляцию (сборку). Например, если исполняемый файл создается из трех объектных файлов, то объектные файл должны быть скомпилированы до того, как они будут объединены в исполняемый код. Мake-файл может выполнять как компиляцию, так и инсталляцию приложения. Назначения (targets) make-файла обычно доступны для нескольких функций, таких как:
make − без опций просто компилирует программу. Говоря технически, таким образом компилируется назначение по умолчанию, что обычно означает просто компиляцию программы из исходных текстов.
make install − устанавливает скомпилированную программу. Если производится установка в /usr/local, то могут потребоваться права суперпользователя (root).
make clean − удаляет файлы, созданные в процессе сборки.
make all − иногда используется для выполнения всех функций make-файла за раз.
Когда главный Makefile создан, используйте команду make, обычно без опций, для сборки выполняемых файлов, man-страниц и других частей программы. В зависимости от быстродействия компьютера и сложности процесса, сборка может занять от одной-двух минуты до нескольких часов для сложных проектов.
Иногда сборка может не работать. Наиболее общие причины:
• Отсутствие необходимых пакетов
• Не та версия необходимых пакетов
• Неверные значения параметров, которые должно быть пропустили в configure или make.
• Отсутствие компилятора.
• Ошибки в скрипте configure или созданном Makefile.
• Ошибки в исходном коде.
Если при сборке все прошло хорошо, то вы готовы к установке. На этапе компиляции были собраны все необходимые файлы, но они все еще расположены не в том месте, чтобы быть готовыми к использованию. Например, бинарные файлы необходимо скопировать в /usr/local/bin, а man страницы в /usr/local/man и т.д.
Если не была указана опция --prefix, то несколько файлов и каталогов скорее всего будут скопированы в древо /usr/local. Потребуются права суперпользователя для записи в древо /usr/local файловой системы. Если Вы вошли не как суперпользователь (root), то используйте команду su для получения прав суперпользователя. Будет запрошен ввод пароля root. Затем используйте команду make install, чтобы установить только что собранную программу. Установка занимает от нескольких секунд до минут, в зависимости от размера программы.
После копирования файлов, команда make install должна также убедиться, что все установленные файлы имеют корректные права доступа и разрешения. После завершения установки программа считается установленной и готовой к использованию, или готовой к предварительной настройке перед использованием.
Не забудьте завершить режим суперпользователя командой exit или нажатием ctrl-d в командной оболочке bash.
2.2 Совместно используемые библиотеки
В системах Linux имеется два типа исполняемых программ.
• Исполняемые файлы статической компоновки (Statically linked) содержат все функции библиотек, которые необходимы им для работы. Все библиотечные функции включены в исполняемый файл. Это полные программы, которым не нужны внешние библиотеки для запуска. Одним из преимуществ статически скомпонованных программ является то, что они будут работать без установки зависимостей.
• Исполняемые файлы динамической компоновки (Dynamically linked) намного меньше по размеру, поскольку они не полные, в том смысле, что для запуска им необходимы функции из внешних совместно используемых (shared) библиотек. Кроме того, что они меньше по размеру, динамическая компоновка позволяет пакету указать от каких библиотек он зависит, без необходимости включения этих библиотек в пакет.
Использование динамической компоновки также позволяет многим рабочим программам совместно использовать одну копию библиотеки, вместо того, чтобы занимать память множеством копий одного и того же кода. По этим причинам большинство программ на сегодняшний день используют динамическую компоновку.
Для того, чтобы узнать является ли программа скомпонованной статически и какие библиотеки нужны динамически скомпонованной программе используется программа ldd. Например, команда ldd /bin/ln отобразит имена совместно используемых библиотек, а также где их можно найти. Отметим, что .so указывает на то, что такие библиотеки являются совместно используемыми объектами (shared objects) или динамическими библиотеками. Совместно используемые библиотеки часто используют символические ссылки между универсальным именем и конкретной версией библиотеки.
Хотя ld-linux.so выглядит как библиотека совместного использования, на самом деле по своей природе является исполняемым файлом. Это код, отвечающий за динамическую загрузку. Он читает информацию заголовка исполняемого файла, приведенный в формате Executable and Linking Format (ELF). Из этой информации можно определить какие библиотеки необходимы и какие следует загрузить. Затем он осуществляет динамическое связывание для согласования указателей на адреса в вашем исполняемом файле и загруженных библиотеках, для того, чтобы программа запустилась. Вы не сможете найти man страницы для ld-linux.so, но вы можете обнаружить их для ld.so, выполнив man ld.so.
Как же динамический загрузчик узнает где искать исполняемые файлы? Как и для многого в Linux, в /etc имеется конфигурационный файл (configuration file). Фактически два конфигурационных файла: /etc/ld.so.conf и /etc/ld.so.cache.
Необходимо, чтобы загрузка программ проходила быстро, поэтому файл ld.so.conf обрабатывается командой ldconfig для обработки всех библиотек из ld.so.conf.d, а также из надежных каталогов, /lib и /usr/lib. Динамический загрузчик использует файл ld.conf.cache для определения файлов, которые необходимо динамически загрузить и связать. Если вы измените ld.co.conf (или добавите новые включаемые (included) файлы в ld.so.conf.d, то вы должны выполнить команду ldconfig (от имени суперпользователя) чтобы перестроить файл ld.conf.cache.
Обычно команду ldconfig используется без параметров для перестройки ld.so.cache. Имеется также несколько параметров, которые можно указать для переопределения этого поведения по умолчанию. Выполните man ldconfig для получения большей информации.
Если вы запускаете старое приложение, которому требуется некая старая версия библиотеки или если вы разрабатываете новую библиотеку или новую версию библиотеки, то вам может понадобиться переопределить путь для поиска по умолчанию, используемый загрузчиком. Это может также понадобиться скриптам, использующим специфичные для продукта библиотеки, устанавливаемые в древо /opt.
Также как вы устанавливаете переменную PATH, вы можете указать путь поиска для исполняемых файлов, задав переменную LD_LIBRARY_PATH со списком каталогов, разделенных двоеточием, в которых следует искать библиотеки перед тем, как система станет искать их в ld.so.cache. Например, вы можете использовать команду:
export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/ AgentController/lib
2.3 Управление пакетами Debian
В этом и следующем подразделах мы рассмотрим управление пакетами, сфокусировавшись на двух наиболее распространенных системах управления пакетами. Это Advanced Packaging Tool или APT, разработанная Debian и Red Hat Package Manager или RPM, разработанная Red Hat.
Инструменты управления пакетами формализуют указание требований и версий, стандартизируют их размещение в системе, а также обеспечивают механизм отслеживания, помогающий определить установленные пакеты. В результате получаем облегчение установки программного обеспечения, его поддержки и удаления.
С точки зрения пользователя, основные функции управления пакетами обеспечиваются на уровне команд. Поскольку Linux-разработчики стараются сделать использование Linux легче, то основные инструменты снабжаются другими надстройками, включая графический интерфейс, скрывающий сложность базовых средств от конечного пользователя.
Мы можем установить необходимую программу используя команду apt-get. Ее использование требует прав суперпользователя (root). Например:
sudo apt-get install guile
При этом apt-get читает список пакетов, строит дерево зависимостей, определяет, что guile-doc рекомендовано устанавливать вместе с guile, и загружает пакет guile из сети Интернет. Затем пакет guile распаковывается, устанавливается и настраивается. Отметим, что расширение, используемое для пакетов Debian, это .deb. Полное имя нашего пакета guile выглядит так: guile-1.6_1.6.7-1ubuntu1_i386.deb.
Если apt-get обнаруживает, что пакет, который пытаются установить зависит от других пакетов, то он автоматически загружает и устанавливает также и их. В примере устанавливается только guile, потому что все зависимости уже удовлетворены.
Предположим, что вместо установки guile-doc, нужно узнать зависит ли пакет guile-doc от других пакетов. Для этого можно использовать опцию apt-get -s (для симулирования). Имеется и несколько других опций со сходными функциями, такие как --just-print и --dry-run. Обратитесь к man страницам за подробностями.
apt-get читает список пакетов из /etc/apt/sources.list. Это список, который можно изменять самостоятельно, но также можно его настроить командой apt-setup.
Команда apt-setup − это интерактивный инструмент, который знает расположение главных APT репозиториев.
Если дистрибутив установил файл /etc/apt/sources.list, то он может и не содержать CD-ROM в качестве источника пакетов. В этом случае можно воспользоваться командой apt-cdrom add, чтобы добавить CD-ROM к списку источников пакетов.
apt-get использует локальную базу данных для определения установленных пакетов. Он может сверять установленные версии с доступными. Для этого информация о доступных версиях загружается с указанного в списке /etc/apt/sources.list источника и сохраняется на компьютере локально. При обновлении файла /etc/apt/sources.list, следует выполнить apt-get update. Это приведет сохраненные данные о доступных пакетах в актуальное состояние. Желательно всегда делать это перед тем, как установить новый пакет.
Для удаления установленного пакета используйте опцию apt-get remove. Например:
sudo apt-get remove guile
Другой опцией, которую нужно упомянуть, является опция upgrade. Эта опция обновляет все установленные пакеты в системе до новейших версий. Не путайте ее с опцией update, которая просто обновляет информацию о доступных пакетах.
Опции по умолчанию можно изменить в файле /etc/apt/apt.conf. Программа apt-config доступна в виде скриптов для опроса файла apt.conf.
Еще один инструмент являющийся частью системы APT это dpkg. Это инструмент среднего уровня для управления пакетами, который может устанавливать и удалять пакеты, а также отображать их информацию. Конфигурирование dpkg может выполняться при помощи /etc/dpkg/dpkg.cfg. Отдельные пользователи могут также найти файл .dpkg.cfg в своем собственном домашнем каталоге, что обеспечивает дополнительное конфигурирование. Если у вас нет ни одного из этих файлов, то проверьте, например, /usr/share/doc/dpkg/dpkg.cfg.
Инструмент dpkg использует многие файлы в ветке /var/lib/dpkg файловой системы. В частности, файл /var/lib/dpkg/status содержит статус информации о пакетах системы. Можно использовать dpkg -s для отображения статуса пакета guile после его установки. Действительно был установлен guile-1.6, т.е. нужно указывать полное имя, а не сокращенное.
Чтобы узнать, что находится в пакете или к какому пакету принадлежит тот или иной файл, необходимо запустить dpkg с опцией -L для вывода списка файлов (включая каталоги). Например, для пакета guile:
dpkg -L guile-1.6
Чтобы найти пакет, содержащий какой-то конкретный файл, используйте опцию dpkg -S. Имя пакета выводится слева. Например:
dpkg -S /usr/share/guile/1.6/scripts/lint
Вернет в качестве результата:
guile-1.6: /usr/share/guile/1.6/scripts/lint
APT содержит функцию с именем debconf, которая используется для настройки пакетов после их установки. Пакеты, использующие эту функцию (а используют не все) могут быть перенастроены после того, как они уже установлены. Самый легкий способ сделать это − использовать команду dpkg-reconfigure.
Статус пакетов хранится в /var/lib/dpkg/status. dpkg может делать больше, чем просто отображать информацию о пакете. Теперь кратко рассмотрим команду dselect, предоставляющую текстовый полноэкранный интерфейс (используя ncurses) к функциям dpkg для управления пакетами. Можно использовать dselect (от имени root) для установки или удаления пакетов, а также для управления флагами статуса, показывающими должен ли пакет поддерживаться в актуальном состоянии или оставить его в текущем состоянии. Можно просматривать и изменять статус каждого пакета выбрав опцию Select. Вы увидите окно справки. Для выхода из справки в любой момент нажмите Пробел. Затем появится список пакетов и групп пакетов. Можно искать пакеты, используя / в конце строки поиска.
Состояние выбора для каждого пакета может быть определено по скрытому заголовку EIOM. Эти буквы расшифровываются как Error (ошибка), Installed state (состояние Установлен), Old mark (помечен как старый) и Mark (помечен). Вы можете использовать клавишу "v" для переключения между краткой формой отображения этой информации и отображением этого в виде слов.
Четвертую колонку M рассмотрим повнимательнее. Она описывает что случится после того, как мы закончим работу с окном выделения и перенесемся в окно установки.
Пометки имеют следующее значение:
* Установить или обновить до последней версии
= Оставить пакет с текущим статусом и версией
- (дефис) Удалить пакет, но оставить его настройки для случая повторной переустановки позднее
_ (подчеркивание) Удалить пакет вместе с настройками.
Для изменения пометок нажмите соответствующую клавишу, за исключением того, что следует нажимать клавишу "+" чтобы пометить пакет для установки или обновления. По завершении нажмите Enter для подтверждения сделанных изменений или нажмите "X" (заглавную X) для отмены изменений без сохранения. Это вернет Вас к окну, с выбранной опцией Install (Установка). Нажмите Enter для установки или обновления вашей системы. Если понадобится помощь, то в любой момент нажмите "?" (знак вопроса). Нажмите Пробел для выхода из справки.
dselect может помочь установить или удалить отдельные пакеты, а также обновить все пакеты вашей системы до последних версий. Чтобы сделать это из командной строки, выполните apt-get dselect-upgrade, что обработает пометки, которые, настраиваются при помощи dselect. Кроме dselect существует несколько других интерактивных интерфейсов управления пакетами для систем Debian, включая aptitude, synaptic, gnome-apt и wajig.
Команда, которую мы еще не использовали − это apt-cache, она полезна для поиска информации о пакете в вашей системе. apt-cache может искать регулярные выражения . Для поиска пакета, содержащего загрузчик Linux, можно, например, выполнить команду:
apt-cache search "linux loader"
Если Вы выполнили поиск и загрузили .deb файл, то можете установить его, используя dpkg -i. Например:
sudo dpkg -i drgeo_1-1.0.0-1_i386.deb
Иногда архив с исходными текстами имеет большую версию, нежели deb пакет.
Существует еще один возможный источник пакетов. Предположим, что Вы нашли программу, упакованную в RPM, а не .deb. Вы можете использовать программу alien, которая может осуществлять преобразование из одного формата пакетов в другой.
2.4 Менеджер пакетов Red Hat (RPM)
RPM и APT во многом схожи. Оба могут устанавливать и удалять пакеты. Оба хранят базу данных установленных пакетов. Оба имеют основные функции для командной строки, а также другие инструменты, предоставляющие более дружественный для пользователя интерфейс. Оба могут загружать пакеты из Интернет. Вообще говоря, RPM-пакетов не так много, как пакетов для APT, хотя команда rpm обладает большими возможностями. Другим отличем является то, что RPM не хранит информацию об установленных пакетах в вашей системе в той же расширенной форме, что и dpkg.
В настоящее время RPM это система управления пакетами используемая для создания пакетов в Linux Standard Base (LSB). Опции команды rpm сгруппированы в три подгруппы для:
• Опроса и проверки пакетов
• Установки, обновления и удаления пакетов
• Выполнения других функций.
При установке пакета опция -i отвечает за установку пакета, опция -v предоставляет подробный вывод, а опция -h показывает знак "решетка" (#), для индикации прогресса. Если пакет уже установлен, следует использовать опцию -e для удаления (или стирания) rpm-пакета перед его повторной установкой. Это также следует сделать, если необходимо переустановить rpm-пакет, из-за того, что Вы случайно удалили его некоторые файлы.
Иногда удаление rpm-пакета неудобно, особенно если имеются некоторые программы, зависящие от него. Решением данной проблемы является принудительная установка rpm-пакета при помощи опции --force. Существует альтернатива принудительной установке при помощи опции --force, что может понадобиться в некоторых случаях. Вы можете удалить rpm-пакет, используя опцию --nodeps, отключающую внутреннюю проверку зависимостей. Команда, которую следует использовать для удаления пакета guile без проверки зависимостей, выглядит так:
rpm -e --nodeps guile
Опцию --nodeps можно также использовать и при установке rpm-пакета. И опять, это не рекомендуется, но иногда необходимо.
Теперь, когда Вы знаете, как устанавливать и удалять RPM-пакеты, обратим свой взор на обновление до новых версий. Это похоже на установку, за тем исключением, что мы используем опцию -U или -F вместо опции -i. Различие между двумя этими опциями состоит в том, что опция -U обновляет существующие пакеты или устанавливает пакет, если он не был установлен, тогда как опция -F только обновляет уже установленные пакеты. Вследствие этого опция -U используется чаще, особенно когда командная строка содержит список RPM-пакетов. Таким образом, удаленные пакеты устанавливаются, а установленные − обновляются. Например:
rpm -Uvh guile-devel-1.6.7-2.i386.rpm
Установка rpm-пакетов требует указания полного имени файла (или URL), вроде guile-devel-1.6.7-2.i386.rpm. С другой стороны, удаление rpm-пакета требует только имени пакета, вроде guile-devel. Также как и с APT, RPM хранит внутреннюю базу установленных пакетов, позволяющую манипулировать установленными пакетами, используя имя пакета. Рассмотрим какая же информация из этого хранилища доступна при помощи опции -q (от query) для команды rpm.
Базовый запрос просто узнает, установлен ли пакет или нет. Добавьте опцию -i и получите информацию о пакете. Отметим, что для установки, обновления и удаления пакетов потребуются права суперпользователя (root), но не-root пользователи могут выполнять запросы к базе данных rpm-пакетов.
Чтобы узнать, что же находится внутри пакета, или к какому пакету принадлежит некоторый файл, используйте опцию -ql. Можно ограничить список выводимых файлов, до списка настроечных файлов, добавлением опции -c к запросу. Подобно этому, опция -d ограничивает вывод только файлами документации. Приведенная выше команда − это запрос к базе данных RPM установленных пакетов. Если Вы только что загрузили пакет и хотите получить ту же информацию, то можно воспользоваться опцией -p (для файла пакета) в запросе с указанием имени файла пакета (также как при установке пакета). Запрос будет происходить к файлу пакета вместо базы данных RPM.
Опция -a применяет запрос ко всем установленным пакетам. Это приводит к очень большому выводу информации, поэтому обычно его используют вместе с одним или несколькими фильтрами, таким как sort для сортировки листинга, more или less для разбивки на страницы, wc для получения количества пакетов или файлов, или grep для поиска пакетов, имя которых Вы знаете не точно. Примеры запросов:
rpm -qa | sort | more # Отсортированный список всех пакетов в системе.
rpm -qa | wc -l # Количество всех пакетов в системе.
rpm -qal | wc -l # Количество всех файлов во всех пакетах системы.
rpm -qald | wc -l # Количество всех файлов документации установленных при помощи RPM.
rpm -qa | grep -i "guile" # Поиск всех пакетов с именем, содержащим "guile" (с учетом регистра).
Используя rpm -qa можно облегчить администрирование нескольких систем. Если Вы перенаправите отсортированный листинг в файл на одной из машин, то выполнив то же самое на другой машине, при помощи программы diff, сможете найти различия.
Учитывая, что теперь Вы можете вывести список всех пакетов и всех файлов пакета, можно сказать, что теперь у Вас есть все, чтобы обнаружить к какому пакету принадлежит некий файл. Однако команда rpm предоставляет опцию -f для помощи в обнаружении пакета, являющегося владельцем файла.
Ранее мы не могли стереть пакет guile из-за зависимостей. Вдобавок к файлам, RPM пакет может содержать различные функции, от которых могут зависеть другие пакеты. В примере многим другим пакетам требуются функции, предоставляемые пакетом guile. И мы не сможем установить guile-devel, если еще не установили в системе guile. А как только guile-devel будет установлен, он станет еще одной причиной, почему guile не может быть удален. Обычно все это работает хорошо.
Если вам необходимо установить несколько пакетов одновременно, некоторые из которых могут зависеть от других, просто предоставьте полный список вашей команде rpm -Uvh и она проанализирует зависимости и выполнит установку в верном порядке. Вместо попыток стереть установленный пакет и получения сообщения об ошибке, команда rpm предоставляет опцию для опроса установленных пакетов или файлов пакетов для поиска от чего они зависят или что требуют. Это опция --requires, которая может быть сокращена до -R. Добавьте опцию -p и используйте полные RPM-имена, если хотите опросить файл пакета вместо базы данных RPM. Пример команды:
rpm -qR guile-devel
Чтобы убедиться в целостности RPM-пакетов, они содержат MD5 или SHA1 суммы, а также могут иметь цифровую подпись. Пакеты с цифровой подписью обычно требуют публичный ключ для проверки. Чтобы проверить целостность файла RPM-пакета используйте опцию rpm --checksig (сокращенно -K). Обычно будет полезно добавление опции -v для подробного вывода.
Вы можете получить строку вывода, похожую на:
V3 DSA signature: NOKEY, key ID 16a61572
Это означает, что этот пакет подписан, но у Вас в базе данных RPM нет необходимого публичного ключа. Ранние версии RPM могли обеспечивать другую верификацию. Если пакет подписан, и Вы хотите проверить соответствует ли он подписи, то вы должны найти файл соответствующей подписи и импортировать его в базу данных RPM. Сначала следует загрузить ключ, а затем проверить его слепок, перед тем как импортировать его с использованием команды rpm --import.
Подобно проверке целостности rpm-пакета можно проверить целостность установленных файлов, используя rpm -V. Эти шаги необходимы, чтобы убедиться в том, что файлы не изменились с тех пор, как были установлены из rpm-пакета.
Если пакет все еще не был изменен, то ничего не выводится. Пример команды:
rpm -V guile-devel
Если в этом примере удалить /usr/bin/guile-config и заменить /usr/bin/guile-snarf копией /bin/bash, а затем снова запустить проверку:
missing /usr/bin/guile-config
S.5....T /usr/bin/guile-snarf
Вывод показывает, что /usr/bin/guile-snarf имеет неверную MD5-сумму, размер файла и не прошел проверку mtime. Это можно исправить, стерев пакет и переустановив его, или принудительно переустановив. При удалении пакета, появится сообщение об ошибке, поскольку один из его файлов отсутствует.
RPM редко требует настройки. В старых версиях rpm можно было производить изменения в /etc/rpmrc для управления операциями во время работы. В последних версиях этот файл был перенесен в /usr/lib/rpm/rpmrc, где он автоматически заменяется, при обновлении rpm-пакета, что приводит к потере любых сделанных изменений. Если требуется некая специфичная для системы конфигурация, то она все еще может быть добавлена в /etc/rpmrc, а индивидуальная конфигурация для пользователей должна находиться в .rpmrc.in в домашнем каталоге пользователя.
Для просмотра конфигурации rpmrc используйте команду:
rpm rpm --showrc
Если у Вас дистрибутив, основанный на RPM (RPM-based), то скорее всего он содержит репозиторий (repository) пакетов. Ваш дистрибутив может также предоставлять инструменты для установки пакетов из репозитория или обновления исходной системы. Эти инструменты могут быть как графическими, так и работать в командной строке. Примерами могут быть:
• YaST (SUSE)
• up2date (Red Hat)
• yum − Yellow Dog Updater Modified (Fedora и другие)
• Mandrake Software Management (Mandriva)
Обычно эти инструменты выполняют обновления многих пакетов в автоматическом или полуавтоматическом режиме. Они могут также обеспечивать возможности отображения содержимого репозиториев или поиска пакетов.