Вступление Управление пакетами Slackware - одно из самых простых для понимания и использования. Все пакеты представляют собой обычные архивы tar, поскольку в Slackware 14.2 tar-архивы сжимаются с помощью компрессора xz. Все файлы в пакете уже на своих местах, кроме слэша в начале. Симлинки на файлы создаются во время установки пакета. Для просмотра содержимого пакета вы можете использовать консольный архиватор tar. Сначала убедитесь, что у вас есть доступ к пакетам, например, смонтируйте образ ISO CD/DVD:
Во всех последующих примерах будет подразумеваться, что образ DVD iso уже смонтирован, чтобы больше не показывать команды монтирования. Теперь заглянем в пакет:
В приведенном выше листинге показан каталог usr/games и два бинарных файла cfscores и cribbage. Вы можете перейти в корневой каталог системы и извлечь пакет, после чего будет создан каталог /usr/games и бинарные файлы в нём. Недостатком этого метода является то, что пакет не будет отображаться в базе данных пакетов. База данных пакета - это отдельный каталог, содержащий текстовый файл (метаданные) для каждого пакета с его содержимым. База данных пакетов находится в каталоге /var/log/packages:
База данных пакета необходима для удаления пакета, только для пакета и его содержимого. Таким образом, вам не нужно самостоятельно отслеживать содержимое вашей установки Slackware. При удалении пакета, будет считан соответствующий файл метаданных в базе данных пакетов, его содержимое будет удалено с жёсткого диска, а сам файл метаданных будет удален. В Slackware есть несколько инструментов для установки и удаления пакета:
Как видите, большинство названий скриптов говорят сами за себя. Команды находятся в каталоге /sbin/ и представляют собой обычные скрипты shell:
Установка пакета Установка пакета с помощью installpkg не слишком сложна, просто нужно запустить installpkg с именем нужного пакета:
Если вы боитесь, что при установке пакета могут быть перезаписаны уже существующие файлы, используйте параметр --warn:
Опция --warn проверит, есть ли в системе такой же файл, который должен быть установлен на ваш жесткий диск. Будет выдан список, всех уже имеющихся или установленных в составе пакетов, файлов. Пакет в с опцией --warn установлен не будет. Для установки пакета в альтернативный корневой каталог, используйте параметр --root. Корнем по умолчанию является / конечно. Сначала нужно создать альтернативный корневой каталог, а затем в него устанавливать пакет:
Теперь просмотрите альтернативный корневой каталог с помощью команды ls:
При посмотре каталога /a/var, обратите внимание, что в альтернативном корневом каталоге так же была создана ещё одна база данных пакетов:
Опции --warn и --root не могут быть объединены в одной команде. Если вы удалите пакет bsd-games из основной системы, но оставите пакет установленный в альтернативный корневой каталог /a, то опция --warn работать не будет:
После команды ничего не произойдет, никакой записи не будет. При установке Slackware с CD/DVD, вы можете видеть эти модные псевдографические информационные окна во время установки пакета. Этот режим можно воспроизвести с помощью опции --infobox:
С опцией --menu вы получите необычное диалоговое окно, в котором вас попросят подтвердить, действительно ли нужно пакет устанавливать: Вместо увеличенного объёма вывода информации вы так же можете уменьшить вывод с помощью опции --terse:
В управлении пакетами Slackware такая штука, известная как приоритеты. Устанавливая приоритеты, вы можете влиять, будет ли пакет установлен в систему или нет. Есть 4 приоритета:
Приоритеты устанавливаются в файле тегов(tagfile). Каждый каталог с пакетами на DVD имеет свой файл тегов:
Конечно, пакет bsd-games не является обязательным для системы, но теперь в качестве примера мы его установим. Для этого создайте новый файл тегов в домашнем каталоге /root:
Теперь установите пакет bsd-games с DVD с опциями --menu и --tagfile:
Вместо того, чтобы спрашивать вас, должен ли пакет быть установлен, он будет просто установлен напрямую (обычно с опцией --menu вам будет предложено установить пакет или нет). Теперь измените приоритет на SKP:
И снова установите пакет:
Как вы видите, пакет не был установлен, произошёл возврат в командную строку. Если вы измените приоритет внутри файла тегов на REC или OPT, вас снова спросят, хотите ли вы установить пакет. Так в чем же разница? Попробуйте и посмотрите на заголовок меню, когда вы измените приоритет на REC, заголовок будет отображаться так:
Обратите внимание на [REC] в конце заголовка. То же самое поизойдёт, если вы измените приоритет на OPT:
Название изменится на [OPT]. Это информация для пользователя, из которой он должен решить, устанавливать пакет или нет. Приоритет ADD может быть переопределен с помощью параметра --ask. Сначала измените приоритет на ADD внутри вашего файла тегов:
Теперь установите пакет с опциями --menu, --tagfail и --ask:
Независимо от того, установлен ли приоритет ADD, вам будет предложено установить пакет. Название снова изменилось:
При установке пакета вы можете создать контрольную сумму md5sum пакета. Это делается с помощью опции --md5sum:
Теперь взгляните на файл метаданных для пакета:
Обратите внимание на строку PACKAGE MD5SUM между PACKAGE LOCATION и PACKAGE DESCRIPTION. Если вы устанавливаете пакет без --md5sum, строка PACKAGE MD5SUMM не появляется:
Помните, что генерация md5sum во время установки замедлит сам процесс установки. Для получения быстрой справки по всем опциям, дайте команду installpkg без опций:
Или просто используйте справочную страницу:
Удаление пакета Удалить пакет намного проще. Самый простой способ удалить пакет:
В качестве имени пакета вы можете использовать различные имена, подобные этим:
Если файл принадлежит другому пакету, он не будет удален. Пустые каталоги будут удалены. Непустые каталоги не будут удалены. Как и в installpkg в removepkg тоже есть опция -warn:
Пакет не будет удален, опция -warn показывает вам только те файлы и каталоги, которые будут удалены. Прежде чем окончательно удалить пакет, вы можете сохранить содержимое, но не в каталоге (каталогах) для этого пакета. Затем используйте опцию -preserve. Опция -preserve создаст всю структуру пакета в /var/log/setup/tmp/preserved_packages:
В /var/log/setup/tmp/preserved_packages будет создан новый каталог с именем пакета, в данном случае bsd-games-2.13-i486-11. В этом каталоге вы можете найти полное содержание оригинального пакета. Пакет удаляется из исходных каталогов на жёстком диске, а также из метаданных в /var/log/packages. Но вы все равно можете иметь доступ к файлам в каталоге /var/log/setup/tmp/preserved_packages. Для создания копии пакета, без удаления из системы, используйте параметр -copy:
С опцией -copy установленный пакет останется нетронут, просто его все файлы будут скопированы в каталог /var/log/setup/tmp/preserved_packages:
Для того, чтобы отследить, что же было удалено и т. д., используйте опцию -keep. Во время удаления пакета будет создан отдельный список для файлов, которые должны быть удалены или другое. Эти списки динамически генерируются в каталоге /var/log/setup/tmp:
Например, файл delete_list10187 содержит список файлов, которые были удалены:
Как и с installpkg, вы можете удалять пакеты установленные в другой корневой каталог. В отличие от всех параметров для removepkg (обратите внимание, что всем параметрам в installpkg предшествует двойной дефис(--), в removepkg же перед параметром ставится один дефис), здесь нет опции -root. Вместо этого вы должны определить переменную ROOT:
Теперь каталог /a будет использоваться в качестве корневого каталога, а пакет будет удален. При выполнении removepkg без каких-либо опций или имён пакетов будет выведена на экран краткая справка:
Или просто вызовите man-страницу:
Извлечение пакета Перед установкой пакета вы можете извлечь его в безопасное место. Вот что такое explodepkg. У explodepkg нет опций или чего-то еще, он просто извлечёт пакет в каталог откуда вы дали команду. Для тестирования создайте новый каталог и перейдите в него:
Теперь дайте команду explodepkg с именем пакета на примонтированом DVD:
Просмотрите текущий каталог с помощью команды ls:
Паккет, который устанавливается в корневой каталог системы, извлечён в текущий каталог. Обновление пакета Для обновления пакета используйте upgradepkg. В качестве примера сначала установим в систему пакет bsd-games-2.13-i486-11.txz:
Затем создадим новый каталог и скопируем в него пакет bsd-games, изменив версию паковки на другую(11=>12):
Обратите внимание на тэги 11 и 12 в конце имён обоих пакетов. Это будет исходная ситуация для следующих нескольких примеров с пакетами - bsd-games-2.13-i486-11.txz уже установленого в системе, и bsd-games-2.13-i486-12.txz - новым пакетом для обновления. Теперь просто обновим установленный пакет:
Сначала будут установлены все файлы и каталоги. Затем будут удалены все файлы и каталоги, которые были в старом пакете, но отсутствуют в новом. Будут ли удалены каталоги, зависит от того, были ли они пустыми и т. д. (См. removepkg). В этом случае никаких файлов удалено не было, потому пакеты полностью идентичны. Чтобы выполнить пробный прогон и посмотреть, что произойдет, воспользуйтесь параметром --dry-run (перед этим воссоздайте исходную ситуацию):
Скрипту больше нечего сказать, потому как пакеты полностью идентичны. Если вы хотите обновить пакет, который не был ранее установлен вообще, используйте параметр --install-new. Скрипт upgradepkg установит пакет вместо его обновления. Сначала удалите все установленные пакеты bsd-games:
Затем установите новый пакет, с помощью upgradepkg с параметром --install-new:
Если вы попытаетесь обновить пакет тем же пакетом, который уже установлен, вы получите сообщение об ошибке:
Также upgradepkg имеет опцию --verbose для более подробного вывода информации, но в руководстве этот пример не показан, вы можете проверить это самостоятельно. Чтобы увидеть небольшую справку для upgradepkg, запустите upgradepkg без какой-либо опции или имени пакета:
Или взгляните на man-страницу:
Создание простого пакета Создание пакета в Slackware не очень тяжелая работа. В отличие от rpm или deb это очень просто. Я покажу вам, как скомпилировать небольшую (но очень классную) часть программного обеспечения, как создать подходящую структуру каталогов и, наконец, как создать пакет Slackware, который вы можете устанавливать и удалять с помощью стандартных инструментов installpkg и removepkg. При демонстрации создания пакета для Slackware, я буду использовать Lua, но вы можете использовать любую другую программу. Lua- это очень маленькая и простая в компиляции программка, которая должна работать из коробки. Сначала скачайте исходники программы:
Затем распакуйте пакет и перейдите в каталог с исходниками:
Теперь соберите программу, используя команду make, но не устанавливайте её:
В каталоге src у можно обнаружить несколько файлов: два бинарных файла (lua и luac), заголовки (lua.h, luaconf.h, lualib.h и lauxlib.h), библиотека (liblua.a) и две man-страницы для lua и luac (lua.1 и luac.1). Теперь нужно создать структуру каталогов, которая будет соответствовать стандарту вашей системы. Бинарные файлы хранятся в /usr/bin, заголовки в /usr/include, библиотеки в /usr/lib и man-страницы в /usr/man:
Выше приведенные команды создали дерево каталогов, необходимых для пакета в каталоге /usr/src/build. Каталог install будет задействован позже. Теперь скопируйте все файлы в предназначенные для них каталоги. Бинарные файлы в /usr/src/build/usr/bin, заголовки в /usr/src/build/usr/include и так далее:
Убедитесь, что все файлы находится в своих каталогах (tree по-прежнему является одной из моих любимых утилит):
Произведите переход в неиспользуемый каталог install. В нём вы должны создать так называемый файл slack-desc, который содержит описание выводимое при установке пакета Slackware. Это может выглядеть так (исходный файл был взят из пакета ppp, а все тексты взяты с http://www.lua.org/about.html):
Сохраните файл и выйдите из редактора. Наконец, создайте пакет:
Вот и все. Сейчас можно установить пакет:
Протестировать работу программы, дав команду lua:
И удалить пакет (при необходимости):
Как видите, создавать пакеты для Slackware очень просто. Создание сложного пакета Для сборки более сложного пакета, можно скачать и скомпилировать почтовый сервер dovecot:
Затем распакуйте исходный код и сделайте переход в каталог с исходниками:
Далее, запустите скрипт настройки условий компилирования(configure) и скомпилируйте исходники командой make:
Затем создайте каталог для размещения там файлов и каталогов собираемого пакета:
Установите созданные файлы в каталог для сборки пакета:
В каталоге /usr/src/build у вас должен быть полный комплект файлов пакета dovecot. Структура каталогов почти такая же, как и в корневом каталоге вашей системы /:
Перейдите в каталог сборки пакета и скопируйте пример конфигурационного файла программы:
Переименуйте файл dovecot.conf в dovecot.conf.new (ниже я объясню зачем):
В каталоге /etc хранятся конфигурацинные файлы, в каталоге /usr каталоги для бинарных файлов (/bin и /sbin) и т. д. Теперь перейдите в каталог /build и создайте каталог /install, в котором будет храниться информация о пакете Slackware:
В каталоге install создайте текстовый файл slack-desc:
Затем в каталоге install создайте скрипт doinst.sh (исходный скрипт был взят из другого пакета):
Скрипт doinst.sh будет выполнен после установки пакета slackware. При работе скрипта функция config() пытается выяснить, есть ли в системе конфигурационный файл /etc/dovecot/dovecot.conf. Если такой файл найден, то новый файл конфигурации останется в системе с приставкой .new. Если файл конфигурации dovecot.conf не обнаружен, установленный файл dovecot.conf.new будет переименован в dovecot.conf. Перед созданием пакета, название конфигурационного файла, который необходимо защитить таким способом, вы должны отредактировать в строке (config etc/dovecot/dovecot.conf.new) скрипта doinst.sh. Создайте пакет:
Теперь можно сделать тест установки пакета. Создайте любой каталог в корне системы, в который можно будет произвести тестовую установку вновь созданного пакета dovecot:
Теперь сымитируйте, как будто бы установленный ранее, файл конфигурации dovecot:
Проверьте результат своей работы:
Установите новый пакет dovecot в альтернативный корневой каталог(...--root /a...):
Это как раз тот случай, когда исходный файл doevcot.conf был не тронут, а новый файл конфигурации хранится в каталоге под именем dovecot.conf.new:
Теперь удалите все содержимое из альтернативного корневого каталога /a:
И установите в него пакет снова:
Проверьте каталог /a/etc на предмет наличия файлов doevcot.conf*:
Каталог содержит только один файл - dovecot.conf, файл dovecot.conf.new распакованный из пакета был переименован в dovecot.conf. |