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

Программы сборки и установки программ

make

Программа make, традиционная для UNIX-систем, служит для управления файловыми проектами и позволяет формализовать правила обновления целевых файлов при изменении исходных файлов. Наибольшее распространение эта программа получила в области программирования — при создании программы из множества исходных файлов невозможно обойтись без специальных средств управления проектом.

Основой для работы программы make является файл проекта, называемый «make-файлом», который описывает правила работы. По умолчанию этот файл называется Makefile, при запуске команды make без параметров используется файл проекта с таким именем. Рассмотрим структуру make-файла на следующем примере:

Пример 7.1. Пример make-файла

.PHONY: clear

book.html: book.xml image.png
	xsltproc xsl/current/html/docbook.xsl book.xml
	-rm -rf result
	mkdir result
	mv book.html image.png result/

clean:
	-rm *~
	-rm -rf result


Основным элементом make-файла является описание правила:

<цель 1> <цель 2> ... <цель n>: <зависимость 1> <зависимость 2> ... <зависимость m>
	<команда 1>
	<команда 2>
	...
	<команда k>
		

Каждое правило состоит из целей, зависимостей и команд. Цели — это файлы, которые должны быть получены в результате работы правила, зависимости — «исходные» файлы, которые необходимы для получения целей, команды — описывают механизм получения целей из зависимостей.

Проанализируем пример «Вопросы». Основной целью этого проекта является создание файла book.html из файла book.xml. Если в файлах book.xml или image.png будут произведены какие-то изменения, запуск команды make приведет к выполнению проекта, т.е. в данном случае к запуску нескольких команд.

Помимо целей, связанных с файлами, существуют служебные цели, такие как «clean» в данном примере. С помощью специальной опции «.PHONY» указывается, что цель clean служит не для получения файла clean на диске, а просто может быть использована как параметр запуска команды: make clean, чтобы в процессе выполнения правила удалить ненужные файлы.

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

rpm

Рассмотрим основные операции, выполняемые с помощью программы rpm. Любые действия по изменению состава пакетов в системе требуют прав суперпользователя.

  1. Установка пакета:

    rpm -i имя_пакета

    Менеджер пакетов проверяет зависимости и конфликты для данного пакета, а затем разворачивает его в операционной системе.

  2. Обновление пакета:

    rpm -U имя_пакета

    Менеджер пакетов проверяет возможность обновления установленного в системе пакета данным пакетом, затем разворачивает новые файлы в системе. При этом используется специальный механизм для сохранения старых версий изменённых файлов (например, конфигурационных).

  3. Удаление пакета:

    rpm -e имя_пакета

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

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

    1. Список установленных пакетов:

      rpm -qa

      Менеджер пакетов выводит список всех пакетов, установленных в системе. Вот пример вывода такой команды:

      Пример 7.2. Получение списка установленных пакетов

      [user@localhost ~]$ rpm -qa
      rpm -qa
      apt-0.5.15lorg2-alt3
      nvidia_glx_1.0.7676-1.0.7676-alt17
      gnupg-1.4.2.2-alt1
      libpcap0.8-0.9.4-alt1
      printer-drivers-base-2.1-alt5
      ...


    2. Поиск пакета по файлу:

      rpm -qf имя_файла

      Полезной функцией является поиск пакета, который содержит заданный файл.

      Пример 7.3. Получение пакета по имени файла

      [user@localhost ~]$ rpm -qf /var/log/messages
      syslog-common-1.4.1-alt23


    3. Информация о пакете:

      rpm -qi имя_пакета

      С помощью этой команды можно узнать сведения о пакете: название и версию программы, организацию и человека, собравших этот пакет, время создания пакета, лицензию и т. п. В примере «Вопросы» показана информация о пакете bash, установленном в системе.

      Пример 7.4. Получение информации о пакете

      [user@localhost ~]$ rpm -qi bash
      Name        : bash                         Relocations: (not relocateable)
      Version     : 3.1.17                            Vendor: ALT Linux Team
      Release     : alt1                          Build Date: Птн 14 Апр 2006 00:38:44
      Install date: Птн 12 Май 2006 03:24:15      Build Host: ldv.hasher.altlinux.org
      Group       : Интерпретаторы команд   Source RPM: bash-3.1.17-alt1.src.rpm
      Size        : 1019953                          License: GPL
      Packager    : Dmitry V. Levin <ldv@altlinux.org>
      URL         : http://www.gnu.org/software/bash/
      Summary     : The GNU Bourne Again SHell (Bash)
      Description :
      Bash is an sh-compatible command language interpreter that executes
      commands read from the standard input or from a file.  Bash also
      incorporates useful features from the Korn and C shells (ksh and csh).
      Most sh scripts can be run by bash without modifiation.
      
      Bash is ultimately intended to be a conformant implementation of the
      IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2).


    4. Список файлов в пакете:

      rpm -ql имя_пакета

      С помощью этой команды можно увидеть полный список файлов в пакете.

      Пример 7.5. Получение информации о пакете

      [user@localhost ~]$ rpm -ql gzip
      /bin/gunzip
      /bin/gzip
      /bin/zcat
      /usr/bin/gunzip
      /usr/bin/gzip
      /usr/bin/zcat
      /usr/share/doc/gzip-1.3.5
      /usr/share/doc/gzip-1.3.5/AUTHORS
      /usr/share/doc/gzip-1.3.5/ChangeLog.bz2
      /usr/share/doc/gzip-1.3.5/NEWS
      /usr/share/doc/gzip-1.3.5/README
      /usr/share/doc/gzip-1.3.5/THANKS
      /usr/share/doc/gzip-1.3.5/TODO
      /usr/share/info/gzip.info.bz2
      /usr/share/man/man1/gunzip.1.gz
      /usr/share/man/man1/gzip.1.gz
      /usr/share/man/man1/zcat.1.gz


    5. Файлы, изменённые после установки: Во время обновления пакетов часто бывает нужно узнать изменения, произошедшие с момента установки пакета. Это можно сделать, выполнив следующую команду:

      rpm -V имя_пакета

      При этом выводится информация об изменениях в файлах пакета. Показываются следующие изменения:

      • S — размер файла;
      • M — тип файла и права доступа;
      • 5 — MD5-сумма;
      • D — старший/младший номер устройства;
      • L — содержание ссылки;
      • U — владелец файла;
      • G — группа владельцев файла;
      • T — время последнего изменения.

      В данном примере из пакета был изменен только один файл:

      Пример 7.6. Получение информации о пакете

      [user@localhost ~]$ rpm -V joe
      S.5....T  c /etc/joe/joerc


Команды по работе с репозиторием пакетов

apt-get

Установка или обновление пакета

Установка пакета с помощью APT выполняется командой

[root@localhost ~]# apt-get install имя_пакета

apt-get позволяет устанавливать в систему пакеты, требующие для работы другие, пока ещё не установленные пакеты. В этом случае он определяет, какие пакеты необходимо установить, и устанавливает их, пользуясь всеми доступными репозиториями.

Установка пакета clanbomber командой apt-get install clanbomber приведёт к следующему диалогу с APT:

Обработка файловых зависимостей... Завершено
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
clanlib clanlib-mikmod clanlib-sound libmikmod
Следующие НОВЫЕ пакеты будут установлены:
clanbomber clanlib clanlib-mikmod clanlib-sound libmikmod
0 пакетов будет обновлено, 5 будет добавлено новых,
0 будет удалено(заменено) и 0 не будет обновлено.
Необходимо получить 0B/2577kB архивов. После распаковки 3862kБ будет
использовано.
Продолжить? [Y/n] y
Выполняется программа RPM (/bin/rpm -Uv --replacepkgs -h)...
Подготовка... ##########################################
libmikmod ##########################################
clanlib ##########################################
clanlib-mikmod ##########################################
clanlib-sound ##########################################
clanbomber ##########################################

Команда apt-get install имя_пакета используется и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get дополнительно проверяет, не обновилась ли версия пакета в репозитории по сравнению с установленным в системе.

При помощи APT можно установить и отдельный двоичный rpm-пакет, не входящий ни в один из репозиториев (например, полученный из Интернет). Для этого достаточно выполнить команду apt-get install путь_к_файлу. При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.

Иногда, в результате операций с пакетами без использования APT, целостность системы нарушается, и apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выдаваемыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

Удаление установленного пакета

Для удаления пакета используется команда apt-get remove имя_пакета. Для того, чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого: если отсутствует необходимый для работы приложения компонент (например, библиотека), то само приложение становится бесполезным. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительного подтверждения производимой операции с целью предотвратить возможную случайную ошибку.

Если вы попробуете при помощи apt-get удалить базовый компонент системы, вы увидите такой запрос на подтверждение операции:

[root@localhost ~]# apt-get remove filesystem
Обработка файловых зависимостей... Завершено
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
basesystem filesystem ppp sudo
Внимание: следующие базовые пакеты будут удалены:
В обычных условиях этого не должно было произойти, надеемся, вы точно
представляете, чего требуете!
basesystem filesystem (по причине basesystem)
0 пакетов будет обновлено, 0 будет добавлено новых, 4 будет
удалено(заменено) и 0 не будет обновлено.
Необходимо получить 0B архивов. После распаковки 588kБ будет
освобождено.
Вы собираетесь совершить потенциально вредоносное действие
Для продолжения, наберите по-английски 'Yes, I understand this may be
bad'
(Да, я понимаю, что это может быть плохо).

Каждую ситуацию, в которой APT выдаёт такое сообщение, необходимо рассматривать отдельно. Однако вероятность того, что после выполнения этой команды система окажется неработоспособной, очень велика.

Обновление всех установленных пакетов

Для обновления всех установленных пакетов используется команда apt-get upgrade. Она позволяет обновить те и только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии; при этом из системы не будут удалены никакие другие пакеты. Этот способ полезен при работе со стабильными пакетами приложений, относительно которых известно, что они при смене версии изменяются несущественно.

Иногда, однако, происходит изменение в именовании пакетов или изменение их зависимостей. Такие ситуации не обрабатываются командой apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Например, переименование пакета MySQL-shared, содержащего динамически загружаемые библиотеки для работы с СУБД MySQL, в libMySQL (отражающая общую тенденцию к наименованию библиотек в дистрибутиве) не приводит к тому, что установка обновлённой версии libMySQL требует удаления старой версии MySQL-shared. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.

В случае обновления всего дистрибутива APT проведёт сравнение системы с репозиторием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, а также отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get, которым APT предварит само обновление.

apt-cache

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

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

Команда apt-cache search подстрока позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:

[user@localhost ~]$ apt-cache search master
xcdroast - A GUI program for burning Cds
bluefish - A WYSIWYG GPLized HTML editor
xmess - X-Mess Multi Emulator Super System
mkisofs - Creates an image of an ISO9660 filesystem

Для того, чтобы подробнее узнать о каждом из найденных пакетов и прочитать его описание, можно воспользоваться командой apt-cache show, которая покажет информацию о пакете из репозитория:

Пакет: bluefish
Секция: Networking/WWW
Размер установленных пакетов: 2018
Упаковщик: AEN <aen@logic.ru>
Версия: 1:0.7-alt0.1
..
Предоставляет: bluefish
Архитектура: i586
..
Имя файла: bluefish-0.7-alt0.1.i586.rpm
Описание: A WYSIWYG GPLized HTML editor
Bluefish is a programmer's HTML editor, designed to save the
experienced webmaster some keystrokes.
It features a multiple file editor, multiple toolbars, custom menus,
image and thumbnail dialogs, open from the web, HTML validation and
lots of wizards.
It is in continuous development, but it's already one of the best
WYSIWYG HTML editors.

Как можно заметить, в кратком описании этого пакета нет слова «master», которое было задано в качестве подстроки для поиска. Однако здесь присутствует слово «webmaster», что объясняет наличие этого пакета в результате поиска по слову «master».

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

Резюме

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

Ключевые термины: «Вопросы», «Вопросы», «Вопросы», «Вопросы»

Дополнительные материалы

  1. Курячий Г.В. Операционная система UNIX. — М.:Интуит.Ру, 2004. — 292 с.: ил.
  2. Владимир Игнатов Эффективное использование GNU Make. — http://www.opennet.ru/docs/RUS/gnumake/