Различия между версиями 4 и 6 (по 2 версиям)
Версия 4 от 2008-07-23 22:22:33
Размер: 22708
Редактор: ArtemSerebriyskiy
Комментарий:
Версия 6 от 2008-07-30 14:20:07
Размер: 27081
Редактор: DmitryChistikov
Комментарий: строка для sources.list
Удаления помечены так. Добавления помечены так.
Строка 2: Строка 2:
'' Здесь не совсем 20% - в эту часть необходимо вставит иллюстрацию того как выглядит конфиг репозитория в Альте. Место я оставил и постараюсь выложить иллюстрацию в ближайшие 5 часов. За исключением этого модуль имхо расшифрован. ''
##1:32:15
Для того, чтобы пакет установить, удалить или просмотреть информацию о нём(или чтобы собрать пакет из исходников) используется так называемый установщик пакетов. Почему установщику традиционно вменяется необходимость уметь собирать пакеты является загадкой. Для работы с одним пакетом (будь то установленный файл или неустановленный пакет) используется программа -установщик, которая называется RPM (RedHat Package Manager). Мы уже видели, что умеет установщик делать
{{{
rpm -qlp
}}}
ключ '-q' --- query(покажи информацию), '-l' --- file list(покажи список файлов), '-p'--- package (все это не к установленному пакету, а к пакету, лежащему в файле) ) показывает список файлов в пакете. Точно также можно посмотреть список файлов находящихся внутри уже установленного пакета --- без ключа -p.
rpm -qi --- просмотреть информацию о пакете.

Для того, чтобы пакет установить, удалить или просмотреть о нем информацию, используется специальная программа --- установщик пакетов. (Заметим, что эта же программа по традиции отвечает за сборку пакета из исходных текстов по заранее составленной "инструкции".) Установщик пакетов всегда работает ровно с одним пакетом, который может быть как установлен в системе, так и нет. Установщик пакетов в ПСПО ALT Linux называется RPM (RPM Package Manager, ранее Red Hat Package Manager, то есть установщик пакетов дистрибутивов Red Hat Linux).

Возьмем уже скачанный нами пакет zip-2.32-alt2.S40.1.i586.rpm и воспользуемся утилитой rpm для просмотра списка файлов в этом пакете (ранее мы уже проделывали такую операцию "вручную" --- с помощью программы rpm2cpio):

{{{
$ rpm -qlp zip-2.32-alt2.S40.1.i586.rpm
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipnote
/usr/bin/zipsplit
/usr/share/doc/zip-2.32
/usr/share/doc/zip-2.32/BUGS
/usr/share/doc/zip-2.32/CHANGES
/usr/share/doc/zip-2.32/LICENSE
/usr/share/doc/zip-2.32/MANUAL
/usr/share/doc/zip-2.32/README
/usr/share/doc/zip-2.32/TODO
/usr/share/doc/zip-2.32/WHATSNEW
/usr/share/doc/zip-2.32/WHERE
/usr/share/man/man1/zip.1.bz2
}}}

Ключ -q означает query (выполнить запрос), -l --- file list (список файлов), -p --- package (работать не с установленным в системе пакетом, а с пакетом, лежащим в указанном файле). (Заметим, что запрос можно было осуществить и с помощью команды `rpmquery -lp zip-2.32-alt2.S40.1.i586.rpm`.) Если же мы хотим посмотреть на список файлов, относящихся к уже установленному пакету, ключ -p использовать не следует (в этом случае достаточно использовать краткое имя пакета --- `zip`).

Какие еще возможности есть у RPM? Просмотрим информацию об установленном в системе пакете tar (tape archiver):
Строка 30: Строка 49:
##1:36:20 - дописать к скриншоту
rpm -q --changelog --- лог версий. Это некое требование относительно полиси сборки --- вы должны указать изменения.
Посмотрим теперь историю изменений (changelog) в сборке tar:
Строка 43: Строка 62:
 ...
}}}

Попробуем установить пакет --- rpm -i.
 ...
}}}

Отметим еще раз, что запросы можно осуществлять как с помощью `rpm -q`, так и с помощью `rpmquery`.

Займемся теперь установкой пакетов из файлов. Скачаем несколько архивов из хранилища и используем утилиту `rpm` с ключом -i (install) --- для этого, естественно, потребуются права суперпользователя:
Строка 52: Строка 74:

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

Как видно, установщик отказывается устанавливать пакет: для установки xvfb-run-1.2-alt2 оказались нужны отсутствующие в системе xorg-x11-xvfb и fakeroot. Возьмем теперь пакет без неудовлетворенных зависимостей:
Строка 57: Строка 80:
[root@class305 george]# rpm -qpl vim-plugin-moin-syntax-1.8-alt2.noarch.rpm }}}

Утилита `rpm` молча завершает работу, что свидетельствует об успешном выполнении запрошенной операции. Какие же файлы появились в нашей системе?

{{{
[root@class305 george]# rpm -ql vim-plugin-moin-syntax
Строка 63: Строка 91:
Посмотрим, какие зависимости и какой состав у неустановившегося пакета: Давайте вернемся к неустановившемуся пакету xvfb-run-1.2-alt2. Отметим, что его установка привела бы к появлению в системе лишь одного нового файла:
Строка 67: Строка 96:
}}}

Посмотрим, наличия чего требует (requires) для установки этот пакет:

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

Утилита `rpm` с ключом -R выдает список зависимостей пакета. В нашем случае неудовлетворенными остались, как мы помним, две (а для того, чтобы `rpm` отказалась устанавливать пакет, достаточно было и одной).

Попробуем теперь выполнить удаление (erase) пакета vim-plugin-moin-syntax: его мы установили только что, поэтому никакой другой из имеющихся в системе пакетов от него не зависит.
Строка 78: Строка 117:
}}} А вот если попробовать  удалить пакет от которого зависят другие пакеты- например coreutils, то это не удастся. }}}

Как
видим, удаление прошло успешно. Если же попробовать удалить пакет, от которого зависят другие установленные пакеты, то `rpm` откажется это делать:
Строка 88: Строка 130:
Как видно установщик это утилита техническая, и обычный пользователь ей пользоваться не может и не должен.

Для того , чтобы с одной стороны обеспечить более разумный интерфейс к работе с пакетами для пользователя, а с другой стороны сюда включить дополнительную функциональность, есть другой класс утилит --- диспетчер пакетов. Диспетчер пакетов работает с хранилищами. На самом деле пользователь(администратор) работает не с каким-то конкретным пакетом- ему из конкретных вещей надо знать только название- он работает с одним или несколькими хранилищами. Хранилищем может быть ветка, дистрибутив, диски... Можно добавить в качестве хранилища например ещё одну ветку. Это всё разные хранилища, с которыми обязан работать диспетчер пакетов, чтобы делать три главных действия:
 * рекурсивная установка пакетов - т.е. автоматически удовлетворять зависимости доставляя нужные пакеты. RPM не может сделать этого, поскольку не знает, откуда взять дополнительные пакеты.
 * рекурсивное удаление. Точно также, как рекурсивная установка происходит путём просмотра индексов в хранилищах, удаление происходит путём просмотра локальных индексов.
 * обновление - установка более новой версии уже установленного пакета. Этот случай выделяется из-за специфичных особенностей при обработке индексов.
В АльтЛинуксе используется традиционно диспетчер apt, который взят из Gnu/Debian. Альт -- единственный в мире дистрибутив, который используется rpm и apt.

Комплект утилит apt --- комплект утилит работы с хранилищами. В нем есть две главных компоненты:
 * утилита apt-get, которая работает непосредственно с хранилищами.
 * утилита apt-cache, которая работает с индексами, с информацией о том, что именно находится в хранилище.
Смысл разделения на apt-get и apt-cache следующий: apt-get обычно лезет в сеть и скачивает информацию о пакетах и формирует индексы, а apt-cache не требует для работы в сети, а работает с локальными копиями индексов, в частности ищет информацию и прочее.
##1:54:20
Установим таки xvfb-run
Как видно, установщик --- это сугубо техническая утилита. Обычный пользователь не может и не должен к ней обращаться. С одной стороны, требуется более разумный интерфейс для работе с пакетами для пользователя, с другой --- полезно обеспечить дополнительную функциональность. Эти задачи решаются другими классом утилит --- диспетчерами пакетов. Главное отличие диспетчера от установщика в следующем: установщик работает с отдельным пакетом, а диспетчер --- с целым хранилищем. Дело в том, что для выполнения пользовательских (административных) действий, как мы уже видели, часто приходится использовать различные хранилища: диски, ветку, дистрибутив. Диспетчер пакетов должен уметь работать с разными типами хранилищ, чтобы обеспечивать возможность выполнения следующих действий:

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

В ПСПО ALT Linux традиционно используется диспетчер APT (Advanced Package Tool), портированный из Debian GNU/Linux (изначально APT был ориентирован на использование установщика dpkg и формата пакетов deb).

APT предоставляет целый комплект утилит для работы с хранилищами. Рассмотрим две из них:
 * утилита apt-get работает с хранилищами непосредственно;
 * утилита apt-cache работает с индексами --- информацией о том, что находится в хранилище.
Смысл разделения на apt-get и apt-cache состоит в следующем: apt-get при своей работе обыкновенно использует сеть, скачивая информацию о пакетах и формируя индексы, apt-cache же сети для своей работы не требует, используя информацию из локальных копий индексов.

Установим-таки xvfb-run, воспользовавшись возможностями APT:
Строка 125: Строка 168:
Обратите внимание, как работает команда apt-get с параметром install. Сначала вспомним, что есть место, где указаны хранилища, которыми надо пользоваться для установки\удаления пакета. apt-get install делает следующее:
 1. просмотривает все индексы
 2. строит дерево зависимостей
 3. находит соответствующего кандидата тому пакету, который мы хотим
 4. предупреждает, что помимо этого надо установить ещё два пакета.
 5. скачивает их из хранилища
 6. устанавливает все в правильном порядке

С рекурсивной установкой и удалением есть свои проблемы. Предположим мы поставили пакет, который рекурсивно потянул за собой еще пакеты и т.д. Вот у нас в итоге набралось сколько-то пакетов. Мы все это поставили и теперь хотим удалить. Как это сделать? Ответ - в общем случае никак. Дело в том, что при рекурсивном удалении удаляются пакеты которые зависят от выбранного. Т.е. те которые не могут существовать без него. Но те пакеты, от которых зависел выбранный могут и не удалятся,
поскольку их существование ничему не противоречит. Т.е. мы получаем что в системе остаются пакеты, которые на самом деле не нужны, просто невозможно определить действительно ли они не нужны. Есть вариант решения этой проблемы --- он используется в Debian - есть флаг, который ставится каждому пакету и соответствует тому, поставлен ли этот пакет по требованию пользователя или для автоматического удовлетворения зависимостей. Тогда при удалении очередного пакета проверяется,
остались ли в системе пакеты, которые помечены флагом "установлен по зависимостям" и если от них больше ничего не зависит, то они удаляются. Но в этом случае возникают проблемы. Пусть у нас есть виртуальный пакет- т.е. пакет который не содержит в себе ничего кроме зависимостей- таким например является пакет kde. предположим теперь что мы хотим удалить одну из автономных составляющих системы, которая ставилась с помощью виртуального пакета -например удалить все игры из kde. Однако удаление пакета, отвечающего за игры приведет к удалению пакета верхнего уровня (того самого kde) и окажется что все остальные компоненты системы помечены как "установленный по зависимостям" и система предложит удалить их все. Так что решение с такими флагами это палка о двух концах.

Рассмотрим как происходит рекурсивное удаление

Обратим внимание, как именно работает команда `apt-get` с параметром install. В некотором специальном месте записано, какими хранилищами надо пользоваться при установке и удалении пакетов. В нашем случае `apt-get install` выполнила следующие операции:

 1. Просмотрела все индексы.
 1. Построила дерево зависимостей.
 1. Нашла пакет --- кандидат на установку (заметим, что мы могли потребовать установить сразу несколько пакетов).
 1. Предупредила, что помимо этого (для удовлетворения зависимостей) надо установить еще два пакета.
 1. Запросила подтверждение на установку дополнительных пакетов.
 1. Скачала все необходимые пакеты из хранилища.
 1. Установила их в правильном порядке.

Заметим, что с рекурсивной установкой и рекурсивным удалением есть свои проблемы. Предположим, мы установили пакет, который рекурсивно потянул за собой много дополнительных пакетов. Через некоторое время после этого мы решаем все установленные таким образом пакеты удалить. Как это сделать? Увы, в общем случае ответ --- никак. Дело в том, что при рекурсивном удалении удалятся лишь те пакеты, которые зависят от выбранного (те, которые не могут существовать без него). Пакеты же, от которых зависел выбранный пакет, удалены не будут. В результате в системе останется довольно много пакетов, которые на самом деле никому не нужны.

Одно из решений описанной проблемы используется в дистрибутивах Debian. Каждому пакету сопоставляется специальное поле, в котором записывается, был ли пакет установлен по явному требованию пользователя или для автоматического удовлетворения зависимостей. При удалении любого пакета происходит просмотр всех установленных по зависимостям пакетов. В случае, если от какого-либо из них уже не зависит ни один из оставшихся в системе пакетов, пользователю (администратору) будет предложено такой пакет удалить.

Однако и такой подход имеет свои недостатки. Допустим, мы установили виртуальный пакет (то есть пакет, не имеющий собственных файлов, однако имеющий содержательный список зависимостей) --- таким является, например, пакет kde. Пусть теперь мы хотим удалить одну из автономных составляющих системы, которая была установлена по зависимостям этого виртуального пакета --- к примеру, мы желаем удалить все игры из KDE. Однако удаление пакета, отвечающего за игры, приведет к удалению виртуального пакета kde, после чего окажется, что все остальные компоненты KDE помечены как установленные по зависимостям, но никем не используются, а следовательно, система предложит их удалить. Как видно, решение об использовании такой схемы может привести к нежелательным последствиям.

Рассмотрим теперь, как происходит рекурсивное удаление. Попробуем избавиться от пакета fakeroot, от которого зависит установленный нами xvfb-run:
Строка 151: Строка 200:
Теперь попробуем удалить пакет coreutils  - это пакет который жизненно необходим системе. Здесь, увидев, что xvfb-run тоже придется удалить, мы одумались и отменили запрошенные действия. Попробуем теперь удалить пакет coreutils --- это пакет, который жизненно необходим системе:
Строка 173: Строка 223:
Мы видим что диспетчер предупреждает что некоторые пакеты из тех, которые будут удалены помечены как 'essential' - жизненно важные для системы и продолжать удаление надо только в том случае если вы уверены что вы делаете.

Рассмотрим еще возможности диспетчера:
 * д
ля поиска пакетов используется apt-cache с ключом search.
 
{{{
 [root@class305 george]# apt-cache search search
 basket - multi-purpose note-taking application
 beagle - The Beagle Search Infrastructure
 beagle-crawl-system - Indexing subsystem for system files
 ...
 
}}}
 apt-cache search ищет ключевое слово  не только в коротком описании пакета, но и в длинном описании. Как уже говорилось используются не хранилища, а локальные индексы.
 * Для просмотра информации о пакете можно использовать apt-cache с ключом show
 
{{{
 [root@class305 george]# apt-cache show xword
 Package: xword
 Section: Text tools
 Installed Size: 63480
 Maintainer: Vitaly Lipatov <lav@altlinux.ru>
 Version: 1.0-alt1
 Pre-Depends: rpmlib(PayloadFilesHavePrefix) (<= 4.0-1), rpmlib(CompressedFileNames) (<= 3.0.4-1)
 Depends: python-module-pygtk, coreutils
 Provides: gedam, xword (= 1.0-alt1)
 Obsoletes: gedam
 Architecture: noarch
 Size: 21742
 MD5Sum: 5d9baebcbbb103782b3918d7c555742c
 Filename: xword-1.0-alt1.noarch.rpm
 Description: Xword is a GNOME crossword puzzle program
 Gedam is a GNOME program I wrote for doing crossword puzzles. It is
 similar to the AcrossLite program for Windows, and it can read and write
 the file format of that program. Consequently, it works well for doing
 puzzles from The New York Times. Although there is an existing version
 of AcrossLite for Linux, it has several glaring problems: poor support,
 the use of Motif, and the lack of a clock.

 For crossword files search in Google by "AcrossLite", f.i.
 http://puzzles.about.com/library/weekly/aa040697.htm
 }}}
 * для обновления индексов используется команда apt-get с ключом update. Она скачивает со всех хранилищ все индексы и  заново формирует кеш из индексов.
 
{{{
 [root@class305 george]# apt-get update
 Get:1 ftp://updates.altlinux.org i586 release [720B]
 Get:2 ftp://ftp.altlinux.org i586 release [1005B]
 Get:3 ftp://ftp.altlinux.org i586 release [730B]
 Get:4 ftp://ftp.altlinux.org noarch release [728B]
 Get:5 ftp://ftp.altlinux.org i586 release [702B]
 Fetched 3885B in 0s (7192B/s)
 Hit ftp://updates.altlinux.org i586/updates pkglist
 Hit ftp://ftp.altlinux.org i586/classic pkglist
 Hit ftp://updates.altlinux.org i586/updates release
 Hit ftp://ftp.altlinux.org i586/classic release
 Hit ftp://ftp.altlinux.org i586/classic pkglist
 Hit ftp://ftp.altlinux.org i586/classic release
 Hit ftp://ftp.altlinux.org noarch/classic pkglist
 Hit ftp://ftp.altlinux.org noarch/classic release
 Hit ftp://ftp.altlinux.org i586/backports pkglist
 Hit ftp://ftp.altlinux.org i586/backports release
 Reading Package Lists... Done
 Building Dependency Tree... Done
 }}}

 *Для обновления системы целиком используется apt-get dist-upgrade.


Конфигурационные файлы к системе  apt лежат в /etc/apt/. Там лежит файл apt.conf - это настройки самой системы apt. Важные здесь файл  sources.list - он может быть  пустым  и файлы в каталоге sources.list.d. В этом каталоге много файлов, в каждом из них может хранится информация о различных хранилищах  в разных местах. Большинство этой информации изначально закоментированно. Формат файла таков:
{{{
Вставить вид строки
}}}
'#' в начале строки означает комментарий.
тип пакета
, подпись(если есть), url хранилища, название хранилища, одно или несколько названий веток.
Почему файлов так много? Есть несколько зеркал, и возможно по сетевым соображениям некие зеркала вам ближе. Для того чтобы ими воспользоваться надо расскоментировать
соответствующие строчки в соответствующих файлах.
##2:27:00

Д
испетчер предупреждает, что некоторые из пакетов, которые придется удалить, помечены как essential, то есть жизненно важные для системы и просит для подтверждения набрать не просто '''y''' (yes --- да), а целую фразу 'Yes, do as I say!' ("Да, сделай так, как я говорю!"). Естественно, подтверждать удаление надо только в случае абсолютной уверенности в своих действиях. Откажемся теперь от удаления coreutils.

Рассмотрим еще некоторые возможности
диспетчера. Для поиска пакетов используется apt-cache с параметром search:

{{{
[root@class305 george]# apt-cache search search
basket - multi-purpose note-taking application
beagle - The Beagle Search Infrastructure
beagle-crawl-system - Indexing subsystem for system files
...
}}}

Заметим, что `
apt-cache search` ищет ключевое слово не только в коротком, но и в длинном описании пакета. Естественно, при поиске используются не сами хранилища, а локальные индексы.

{{{
[root@class305 george]# apt-cache show xword
Package: xword
Section: Text tools
Installed Size: 63480
Maintainer: Vitaly Lipatov <lav@altlinux.ru>
Version: 1.0-alt1
Pre-Depends: rpmlib(PayloadFilesHavePrefix) (<= 4.0-1), rpmlib(CompressedFileNames) (<= 3.0.4-1)
Depends: python-module-pygtk, coreutils
Provides: gedam, xword (= 1.0-alt1)
Obsoletes: gedam
Architecture: noarch
Size: 21742
MD5Sum: 5d9baebcbbb103782b3918d7c555742c
Filename: xword-1.0-alt1.noarch.rpm
Description: Xword is a GNOME crossword puzzle program
Gedam is a GNOME program I wrote for doing crossword puzzles. It is
similar to the AcrossLite program for Windows, and it can read and write
the file format of that program. Consequently, it works well for doing
puzzles from The New York Times. Although there is an existing version
of AcrossLite for Linux, it has several glaring problems: poor support,
the use of Motif, and the lack of a clock.

For crossword files search in Google by "AcrossLite", f.i.
http://puzzles.about.com/library/weekly/aa040697.htm
}}}

Скажем теперь несколько слов об ин
дексах. Для их обновления используется команда apt-get с параметром update. Она скачивает с используемых хранилищ все индексы и заново формирует локальный кэш:

{{{
[root@class305 george]# apt-get update
Get:1 ftp://updates.altlinux.org i586 release [720B]
Get:2 ftp://ftp.altlinux.org i586 release [1005B]
Get:3 ftp://ftp.altlinux.org i586 release [730B]
Get:4 ftp://ftp.altlinux.org noarch release [728B]
Get:5 ftp://ftp.altlinux.org i586 release [702B]
Fetched 3885B in 0s (7192B/s)
Hit ftp://updates.altlinux.org i586/updates pkglist
Hit ftp://ftp.altlinux.org i586/classic pkglist
Hit ftp://updates.altlinux.org i586/updates release
Hit ftp://ftp.altlinux.org i586/classic release
Hit ftp://ftp.altlinux.org i586/classic pkglist
Hit ftp://ftp.altlinux.org i586/classic release
Hit ftp://ftp.altlinux.org noarch/classic pkglist
Hit ftp://ftp.altlinux.org noarch/classic release
Hit ftp://ftp.altlinux.org i586/backports pkglist
Hit ftp://ftp.altlinux.org i586/backports release
Reading Package Lists... Done
Building Dependency Tree... Done
}}}

Для обновления системы целиком используется команда `apt-get dist-upgrade`.

Конфигурационный файлы к системе APT лежат в каталоге /etc/apt. Там располагается файл apt.conf, содержащий настройки самой системы apt. Наиболее важным для нас здесь является файл sources.list (он вполне может быть пустым) вместе со всеми файлами каталога sources.list.d. В этом каталоге может лежать довольно много файлов, содержащих информацию о различных хранилищах пакетов в разнообразных местах. Типичная строка в этом файле выглядит примерно так:

{{{
rpm [updates] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.0/branch noarch classic
}}}

Символ решетки
в начале строки является маркировкой комментария --- иными словами, соответствующая запись в данный момент не используется вовсе. Формат записи таков: вначале --- тип пакета (rpm), затем --- идентификатор цифровой подписи в прямых скобках (иногда пропускается), далее --- URL хранилища, название хранилища, одно или несколько названий веток.

Отметим, что наличие большого количества файлов в /etc/apt/sources.list.d объясняется существованием большого числа зеркал различных хранилищ. Использование того или иного зеркала может оказаться более или менее удобным по сетевым соображениям. Чтобы воспользоваться хранилищем, необходимо раскомментировать
соответствующие строки в нужном файле, удостовериться, что других раскомментированных строк нет, и дать команду `apt-get update` для обновления локальных индексов.
Строка 253: Строка 307:
|| 20 || 1 || 1 || 1 || || 1 || ArtemSerebriyskiy, DmitryChistikov, MaximByshevskiKonopko || || || || 40 || 1 || 1 || 1 || || 1 || ArtemSerebriyskiy, DmitryChistikov, MaximByshevskiKonopko || || ||

Утилиты для работы с пакетами

Для того, чтобы пакет установить, удалить или просмотреть о нем информацию, используется специальная программа --- установщик пакетов. (Заметим, что эта же программа по традиции отвечает за сборку пакета из исходных текстов по заранее составленной "инструкции".) Установщик пакетов всегда работает ровно с одним пакетом, который может быть как установлен в системе, так и нет. Установщик пакетов в ПСПО ALT Linux называется RPM (RPM Package Manager, ранее Red Hat Package Manager, то есть установщик пакетов дистрибутивов Red Hat Linux).

Возьмем уже скачанный нами пакет zip-2.32-alt2.S40.1.i586.rpm и воспользуемся утилитой rpm для просмотра списка файлов в этом пакете (ранее мы уже проделывали такую операцию "вручную" --- с помощью программы rpm2cpio):

$ rpm -qlp zip-2.32-alt2.S40.1.i586.rpm
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipnote
/usr/bin/zipsplit
/usr/share/doc/zip-2.32
/usr/share/doc/zip-2.32/BUGS
/usr/share/doc/zip-2.32/CHANGES
/usr/share/doc/zip-2.32/LICENSE
/usr/share/doc/zip-2.32/MANUAL
/usr/share/doc/zip-2.32/README
/usr/share/doc/zip-2.32/TODO
/usr/share/doc/zip-2.32/WHATSNEW
/usr/share/doc/zip-2.32/WHERE
/usr/share/man/man1/zip.1.bz2

Ключ -q означает query (выполнить запрос), -l --- file list (список файлов), -p --- package (работать не с установленным в системе пакетом, а с пакетом, лежащим в указанном файле). (Заметим, что запрос можно было осуществить и с помощью команды rpmquery -lp zip-2.32-alt2.S40.1.i586.rpm.) Если же мы хотим посмотреть на список файлов, относящихся к уже установленному пакету, ключ -p использовать не следует (в этом случае достаточно использовать краткое имя пакета --- zip).

Какие еще возможности есть у RPM? Просмотрим информацию об установленном в системе пакете tar (tape archiver):

[george@class305 ~]$ rpm -qi tar
Name        : tar                          Relocations: (not relocateable)
Version     : 1.15.1                            Vendor: ALT Linux Team
Release     : alt8                          Build Date: Сбт 14 Апр 2007 20:01:52
Install date: Втр 15 Июл 2008 21:23:38      Build Host: ldv.hasher.altlinux.org
Group       : Архивирование/Резервное копирование   Source RPM: tar-1.15.1-alt8.src.rpm
Size        : 1213918                          License: GPL
Packager    : Dmitry V. Levin <ldv@altlinux.org>
URL         : http://www.gnu.org/software/tar/
Summary     : Утилита проекта GNU для архивации файлов
Description :
The GNU tar program saves many files together into one archive and
can restore individual files (or all of the files) from the archive.
tar can also be used to add supplemental files to an archive and to
update or list files in the archive.  tar includes multivolume support,
automatic archive compression/decompression, the ability to perform
remote archives and the ability to perform incremental and full backups.

Посмотрим теперь историю изменений (changelog) в сборке tar:

[george@class305 ~]$ rpm -q --changelog tar
* Сбт Апр 14 2007 Dmitry V. Levin <ldv@altlinux.org> 1.15.1-alt8

- Reduced macro abuse in specfile.

* Втр Ноя 28 2006 Dmitry V. Levin <ldv@altlinux.org> 1.15.1-alt7

- Disabled GNUTYPE_NAMES handling by default and
  added --allow-name-mangling option to re-enable it.
  (CVE-2006-6097, patch from Kees Cook).
 ...

Отметим еще раз, что запросы можно осуществлять как с помощью rpm -q, так и с помощью rpmquery.

Займемся теперь установкой пакетов из файлов. Скачаем несколько архивов из хранилища и используем утилиту rpm с ключом -i (install) --- для этого, естественно, потребуются права суперпользователя:

[root@class305 george]# rpm -i xvfb-run-1.2-alt2.noarch.rpm
error: failed dependencies:
        xorg-x11-xvfb is needed by xvfb-run-1.2-alt2
        fakeroot is needed by xvfb-run-1.2-alt2

Как видно, установщик отказывается устанавливать пакет: для установки xvfb-run-1.2-alt2 оказались нужны отсутствующие в системе xorg-x11-xvfb и fakeroot. Возьмем теперь пакет без неудовлетворенных зависимостей:

[root@class305 george]# rpm -i vim-plugin-moin-syntax-1.8-alt2.noarch.rpm

Утилита rpm молча завершает работу, что свидетельствует об успешном выполнении запрошенной операции. Какие же файлы появились в нашей системе?

[root@class305 george]# rpm -ql vim-plugin-moin-syntax
/etc/alternatives/packages.d/moinmoin.vim
/usr/share/vim/ftplugin/moin.vim
/usr/share/vim/syntax/moinmoin.vim

Давайте вернемся к неустановившемуся пакету xvfb-run-1.2-alt2. Отметим, что его установка привела бы к появлению в системе лишь одного нового файла:

[root@class305 george]# rpm -qpl xvfb-run-1.2-alt2.noarch.rpm
/usr/bin/xvfb-run

Посмотрим, наличия чего требует (requires) для установки этот пакет:

[root@class305 george]# rpm -qRp xvfb-run-1.2-alt2.noarch.rpm
xorg-x11-xauth
xorg-x11-xvfb
fakeroot
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
coreutils
sh

Утилита rpm с ключом -R выдает список зависимостей пакета. В нашем случае неудовлетворенными остались, как мы помним, две (а для того, чтобы rpm отказалась устанавливать пакет, достаточно было и одной).

Попробуем теперь выполнить удаление (erase) пакета vim-plugin-moin-syntax: его мы установили только что, поэтому никакой другой из имеющихся в системе пакетов от него не зависит.

[root@class305 george]# rpm -e vim-plugin-moin-syntax

Как видим, удаление прошло успешно. Если же попробовать удалить пакет, от которого зависят другие установленные пакеты, то rpm откажется это делать:

[root@class305 george]# rpm -e coreutils
error: removing these packages would break dependencies:
        coreutils   is needed by dmsetup-1.02.22-alt1
        coreutils   is needed by less-394-alt1
        coreutils   is needed by module-init-tools-compat-3.3-alt0.5.pre6
        ...

Как видно, установщик --- это сугубо техническая утилита. Обычный пользователь не может и не должен к ней обращаться. С одной стороны, требуется более разумный интерфейс для работе с пакетами для пользователя, с другой --- полезно обеспечить дополнительную функциональность. Эти задачи решаются другими классом утилит --- диспетчерами пакетов. Главное отличие диспетчера от установщика в следующем: установщик работает с отдельным пакетом, а диспетчер --- с целым хранилищем. Дело в том, что для выполнения пользовательских (административных) действий, как мы уже видели, часто приходится использовать различные хранилища: диски, ветку, дистрибутив. Диспетчер пакетов должен уметь работать с разными типами хранилищ, чтобы обеспечивать возможность выполнения следующих действий:

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

В ПСПО ALT Linux традиционно используется диспетчер APT (Advanced Package Tool), портированный из Debian GNU/Linux (изначально APT был ориентирован на использование установщика dpkg и формата пакетов deb).

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

  • утилита apt-get работает с хранилищами непосредственно;
  • утилита apt-cache работает с индексами --- информацией о том, что находится в хранилище.

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

Установим-таки xvfb-run, воспользовавшись возможностями APT:

[root@class305 george]# apt-get install xvfb-run
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  fakeroot xorg-x11-xvfb
  The following NEW packages will be installed:
    fakeroot xorg-x11-xvfb xvfb-run
    0 upgraded, 3 newly installed, 0 removed and 0 not upgraded.
    Need to get 1708kB of archives.
    After unpacking 4341kB of additional disk space will be used.
    Do you want to continue? [Y/n]
    Get:1 ftp://ftp.altlinux.org i586/classic fakeroot 1.9.4-alt2 [48.5kB]
    Get:2 ftp://ftp.altlinux.org i586/classic xorg-x11-xvfb 2:1.3.0.0-alt21.M40.10 [1656kB]
    Get:3 ftp://ftp.altlinux.org noarch/classic xvfb-run 1.2-alt2 [4107B]
    Fetched 1708kB in 0s (3963kB/s)
    Committing changes...
    Preparing...                 ####################################################### [100%]
    1: fakeroot                  ####################################################### [ 33%]
    2: xorg-x11-xvfb             ####################################################### [ 66%]
    3: xvfb-run                  ####################################################### [100%]
    Done.

Обратим внимание, как именно работает команда apt-get с параметром install. В некотором специальном месте записано, какими хранилищами надо пользоваться при установке и удалении пакетов. В нашем случае apt-get install выполнила следующие операции:

  1. Просмотрела все индексы.
  2. Построила дерево зависимостей.
  3. Нашла пакет --- кандидат на установку (заметим, что мы могли потребовать установить сразу несколько пакетов).
  4. Предупредила, что помимо этого (для удовлетворения зависимостей) надо установить еще два пакета.
  5. Запросила подтверждение на установку дополнительных пакетов.
  6. Скачала все необходимые пакеты из хранилища.
  7. Установила их в правильном порядке.

Заметим, что с рекурсивной установкой и рекурсивным удалением есть свои проблемы. Предположим, мы установили пакет, который рекурсивно потянул за собой много дополнительных пакетов. Через некоторое время после этого мы решаем все установленные таким образом пакеты удалить. Как это сделать? Увы, в общем случае ответ --- никак. Дело в том, что при рекурсивном удалении удалятся лишь те пакеты, которые зависят от выбранного (те, которые не могут существовать без него). Пакеты же, от которых зависел выбранный пакет, удалены не будут. В результате в системе останется довольно много пакетов, которые на самом деле никому не нужны.

Одно из решений описанной проблемы используется в дистрибутивах Debian. Каждому пакету сопоставляется специальное поле, в котором записывается, был ли пакет установлен по явному требованию пользователя или для автоматического удовлетворения зависимостей. При удалении любого пакета происходит просмотр всех установленных по зависимостям пакетов. В случае, если от какого-либо из них уже не зависит ни один из оставшихся в системе пакетов, пользователю (администратору) будет предложено такой пакет удалить.

Однако и такой подход имеет свои недостатки. Допустим, мы установили виртуальный пакет (то есть пакет, не имеющий собственных файлов, однако имеющий содержательный список зависимостей) --- таким является, например, пакет kde. Пусть теперь мы хотим удалить одну из автономных составляющих системы, которая была установлена по зависимостям этого виртуального пакета --- к примеру, мы желаем удалить все игры из KDE. Однако удаление пакета, отвечающего за игры, приведет к удалению виртуального пакета kde, после чего окажется, что все остальные компоненты KDE помечены как установленные по зависимостям, но никем не используются, а следовательно, система предложит их удалить. Как видно, решение об использовании такой схемы может привести к нежелательным последствиям.

Рассмотрим теперь, как происходит рекурсивное удаление. Попробуем избавиться от пакета fakeroot, от которого зависит установленный нами xvfb-run:

root@class305 george]# apt-get remove fakeroot
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
  fakeroot xvfb-run
0 upgraded, 0 newly installed, 2 removed and 0 not upgraded.
Need to get 0B of archives.
After unpacking 77.9kB disk space will be freed.
Do you want to continue? [Y/n] n
Abort.

Здесь, увидев, что xvfb-run тоже придется удалить, мы одумались и отменили запрошенные действия. Попробуем теперь удалить пакет coreutils --- это пакет, который жизненно необходим системе:

[root@class305 george]# apt-get remove coreutils
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
 GConf ImageMagick SysVinit Thunar a2ps abiword acpid alsa-utils alt-docs-genextras
 alt-docs-main alterator alterator-aptgroups alterator-auth alterator-backend-x11
 alterator-browser-qt alterator-control alterator-datetime alterator-lookout
 ...
WARNING: The following essential packages will be removed
This should NOT be done unless you know exactly what you are doing!
 apt rpm (due to apt) gnupg (due to apt) basesystem coreutils (due to basesystem) etcskel
 (due to basesystem) service (due to basesystem) shadow-utils (due to basesystem) startup
 (due to basesystem) SysVinit (due to basesystem) util-linux (due to basesystem) vitmp
 (due to basesystem)
0 upgraded, 0 newly installed, 562 removed and 0 not upgraded.
Need to get 0B of archives.
After unpacking 1494MB disk space will be freed.
You are about to do something potentially harmful
To continue type in the phrase 'Yes, do as I say!'

Диспетчер предупреждает, что некоторые из пакетов, которые придется удалить, помечены как essential, то есть жизненно важные для системы и просит для подтверждения набрать не просто y (yes --- да), а целую фразу 'Yes, do as I say!' ("Да, сделай так, как я говорю!"). Естественно, подтверждать удаление надо только в случае абсолютной уверенности в своих действиях. Откажемся теперь от удаления coreutils.

Рассмотрим еще некоторые возможности диспетчера. Для поиска пакетов используется apt-cache с параметром search:

[root@class305 george]# apt-cache search search
basket - multi-purpose note-taking application
beagle - The Beagle Search Infrastructure
beagle-crawl-system - Indexing subsystem for system files
...

Заметим, что apt-cache search ищет ключевое слово не только в коротком, но и в длинном описании пакета. Естественно, при поиске используются не сами хранилища, а локальные индексы.

[root@class305 george]# apt-cache show xword
Package: xword
Section: Text tools
Installed Size: 63480
Maintainer: Vitaly Lipatov <lav@altlinux.ru>
Version: 1.0-alt1
Pre-Depends: rpmlib(PayloadFilesHavePrefix) (<= 4.0-1), rpmlib(CompressedFileNames) (<= 3.0.4-1)
Depends: python-module-pygtk, coreutils
Provides: gedam, xword (= 1.0-alt1)
Obsoletes: gedam
Architecture: noarch
Size: 21742
MD5Sum: 5d9baebcbbb103782b3918d7c555742c
Filename: xword-1.0-alt1.noarch.rpm
Description: Xword is a GNOME crossword puzzle program
Gedam is a GNOME program I wrote for doing crossword puzzles. It is
similar to the AcrossLite program for Windows, and it can read and write
the file format of that program. Consequently, it works well for doing
puzzles from The New York Times. Although there is an existing version
of AcrossLite for Linux, it has several glaring problems: poor support,
the use of Motif, and the lack of a clock.

For crossword files search in Google by "AcrossLite", f.i.
http://puzzles.about.com/library/weekly/aa040697.htm

Скажем теперь несколько слов об индексах. Для их обновления используется команда apt-get с параметром update. Она скачивает с используемых хранилищ все индексы и заново формирует локальный кэш:

[root@class305 george]# apt-get update
Get:1 ftp://updates.altlinux.org i586 release [720B]
Get:2 ftp://ftp.altlinux.org i586 release [1005B]
Get:3 ftp://ftp.altlinux.org i586 release [730B]
Get:4 ftp://ftp.altlinux.org noarch release [728B]
Get:5 ftp://ftp.altlinux.org i586 release [702B]
Fetched 3885B in 0s (7192B/s)
Hit ftp://updates.altlinux.org i586/updates pkglist
Hit ftp://ftp.altlinux.org i586/classic pkglist
Hit ftp://updates.altlinux.org i586/updates release
Hit ftp://ftp.altlinux.org i586/classic release
Hit ftp://ftp.altlinux.org i586/classic pkglist
Hit ftp://ftp.altlinux.org i586/classic release
Hit ftp://ftp.altlinux.org noarch/classic pkglist
Hit ftp://ftp.altlinux.org noarch/classic release
Hit ftp://ftp.altlinux.org i586/backports pkglist
Hit ftp://ftp.altlinux.org i586/backports release
Reading Package Lists... Done
Building Dependency Tree... Done

Для обновления системы целиком используется команда apt-get dist-upgrade.

Конфигурационный файлы к системе APT лежат в каталоге /etc/apt. Там располагается файл apt.conf, содержащий настройки самой системы apt. Наиболее важным для нас здесь является файл sources.list (он вполне может быть пустым) вместе со всеми файлами каталога sources.list.d. В этом каталоге может лежать довольно много файлов, содержащих информацию о различных хранилищах пакетов в разнообразных местах. Типичная строка в этом файле выглядит примерно так:

rpm [updates] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.0/branch noarch classic

Символ решетки в начале строки является маркировкой комментария --- иными словами, соответствующая запись в данный момент не используется вовсе. Формат записи таков: вначале --- тип пакета (rpm), затем --- идентификатор цифровой подписи в прямых скобках (иногда пропускается), далее --- URL хранилища, название хранилища, одно или несколько названий веток.

Отметим, что наличие большого количества файлов в /etc/apt/sources.list.d объясняется существованием большого числа зеркал различных хранилищ. Использование того или иного зеркала может оказаться более или менее удобным по сетевым соображениям. Чтобы воспользоваться хранилищем, необходимо раскомментировать соответствующие строки в нужном файле, удостовериться, что других раскомментированных строк нет, и дать команду apt-get update для обновления локальных индексов.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

40

1

1

1

1

ArtemSerebriyskiy, DmitryChistikov, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080720/03PackageUtils (последним исправлял пользователь MaximByshevskiKonopko 2008-10-09 21:50:53)