[2025-jun-17] The SlackDocs mailing lists at https://lists.alienbase.nl/mailman/listinfo have been retired. No one has been using these lists for years and it's time to say goodbye. The list archives remain available at https://scalzi.slackware.nl/mailman/listinfo/slackdocs

[2025-jun-17] The SlackDocs Wiki has moved to a new server, in order to make it more performant.

Welcome to the Slackware Documentation Project

Управление пакетами: практическое объяснение

Анатомия пакета Slackware

Пакет Slackware представляет собой простой сжатый архив TGZ или TXZ, содержащий:

  • древовидную структуру файлов и каталогов ;
  • сценарии постустановки ;
  • описание пакета.

Имя каждого пакета содержит ряд сведений:

  • имя программы ;
  • версию программы ;
  • архитектуру пакета ;
  • номер сборки.

Вот несколько примеров:

  • emacs-24.2-i486-1
  • mozilla-firefox-15.0.1-i486-1
  • vim-7.3.645-x86_64-1

Управление пакетами Slackware с помощью традиционных инструментов

Начиная с первых выпусков, Slackware предоставляет набор простых инструментов — pkgtools, позволяющих пользователю устанавливать, обновлять и удалять пакеты программного обеспечения, а также собирать их:

  • installpkg
  • removepkg
  • upgradepkg
  • explodepkg
  • makepkg

Установка пакетов программного обеспечения

Установим редактор Emacs с DVD-диска Slackware 1):

# mount /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom/slackware/e
# installpkg emacs-24.2-i486-1.txz
Verifying package emacs-24.2-i486-1.txz.
Installing package emacs-24.2-i486-1.txz [ADD]:
PACKAGE DESCRIPTION:
# emacs (GNU Emacs)
#
# Emacs is the extensible, customizable, self-documenting real-time
# display editor. If this seems to be a bit of a mouthful, an
# easier explanation is that Emacs is a text editor and more. At
# its core is an interpreter for Emacs Lisp, a dialect of the Lisp
# programming language with extensions to support text editing.
# This version supports X.
#
# http://www.gnu.org/software/emacs/
#
Executing install script for emacs-24.2-i486-1.txz.
Package emacs-24.2-i486-1.txz installed.
Если вы используете набор компакт-дисков, Emacs находится на первом компакт-диске.

Проверка установки пакета

Процесс установки пакета создал новую запись в /var/log/packages:

# ls /var/log/packages/em*
/var/log/packages/emacs-24.2-i486-1

Проверка установки пакета сводится к проверке существования соответствующей записи в /var/log/packages. Пример:

# ls /var/log/packages/*firefox*
/var/log/packages/mozilla-firefox-15.0.1-i486-1

Firefox установлен в системе в версии 15.0.1. Ещё один пример:

# ls /var/log/packages/kdebase*
ls: cannot access /var/log/packages/kdebase*: No such file or directory

В системе не установлен пакет kdebase-*.

Удаление пакета

Для удаления установленного пакета используйте removepkg. В качестве аргумента команда может принимать простое базовое имя пакета. Пример:

# removepkg emacs

Также можно указать в качестве аргумента полное имя. В этом случае лучше выполнить команду из каталога /var/log/packages и использовать автодополнение клавишей Tab

# cd /var/log/packages
# removepkg emacs-24.2-i486-1

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

Slackware предоставляет обновления безопасности для своих последних выпусков. Посетите официальный сайт, чтобы узнать больше о последних обновлениях:

# links http://www.slackware.com
  1. Перейдите по ссылке ChangeLogs
  2. Откройте Slackware-stable ChangeLog.
  3. Прочитайте файл ChangeLog.txt, соответствующий архитектуре вашей системы.

Вы также можете вручную загружать обновления с помощью браузера Links. Перед запуском Links создайте каталог /root/updates 2) для хранения загруженных обновлений:

# cd
# mkdir updates
# cd updates/
# links mirrors.slackware.com
  1. Перейдите по ссылке Slackware File Tree*
  2. Откройте каталог, соответствующий вашему выпуску и архитектуре.
  3. Перейдите в каталог patches/packages.
  4. Загрузите все доступные обновления*

Выйдите из Links и установите обновления следующим образом :

# upgradepkg bind-9.9.1_P4-i486-1_slack14.0.txz

+==============================================================================
| Upgrading bind-9.9.1_P3-i486-1 package using ./bind-9.9.1_P4-i486-1_slack14.0.txz
+==============================================================================
Pre-installing package bind-9.9.1_P4-i486-1_slack14.0...
Removing package /var/log/packages/bind-9.9.1_P3-i486-1-upgraded-2012-11-21,12:14:32...
  --> Deleting /usr/doc/bind-9.9.1-P3/CHANGES
  --> Deleting /usr/doc/bind-9.9.1-P3/COPYRIGHT
  --> Deleting /usr/doc/bind-9.9.1-P3/FAQ
  ...
Verifying package bind-9.9.1_P4-i486-1_slack14.0.txz.
Installing package bind-9.9.1_P4-i486-1_slack14.0.txz:
PACKAGE DESCRIPTION:
bind (DNS server and utilities)
#
# The named daemon and support utilities such as dig, host, and
# nslookup.  Sample configuration files for running a simple caching
# nameserver are included.  Documentation for advanced name server
# setup can be found in /usr/doc/bind-9.x.x/.
#
Executing install script for bind-9.9.1_P4-i486-1_slack14.0.txz.
Package bind-9.9.1_P4-i486-1_slack14.0.txz installed.
  
Package bind-9.9.1_P3-i486-1 upgraded with new package
./bind-9.9.1_P4-i486-1_slack14.0.txz.

Ещё один пример :

# upgradepkg iptables-1.4.14-i486-2_slack14.0.txz

Дополнительные сведения о содержимом пакета

Каждому пакету соответствует запись в /var/log/packages. Это обычные текстовые файлы, содержащие сведения о содержимом соответствующих пакетов. Пример:

# less /var/log/packages/wget-1.14-i486-1
PACKAGE NAME:     wget-1.14-i486-1
COMPRESSED PACKAGE SIZE:     478.5K
UNCOMPRESSED PACKAGE SIZE:     2.0M
PACKAGE LOCATION: /var/log/mount/slackware/n/wget-1.14-i486-1.txz
PACKAGE DESCRIPTION:
wget: wget (a non-interactive network retriever)
wget:
wget: GNU Wget is a free network utility to retrieve files from the 
wget: World Wide Web using HTTP and FTP, the two most widely used Internet
wget: protocols.  It works non-interactively, thus enabling work in the
wget: background after having logged off.
wget:
wget: The author of Wget is Hrvoje Niksic <hniksic@srce.hr>.
wget:
wget:
wget:
FILE LIST:
./
install/
install/slack-desc
install/doinst.sh
usr/
usr/bin/
usr/bin/wget
usr/man/
usr/man/man1/
usr/man/man1/wget.1.gz
usr/info/
usr/info/wget.info.gz
...

Управление пакетами Slackware с помощью slackpkg

Утилита slackpkg официально включена в Slackware начиная с выпуска 13.0. Она позволяет пользователю значительно удобнее управлять пакетами Slackware

Несколько замечаний:

  1. slackpkg работает только с официальными пакетами Slackware.
  2. Пакетами сторонних разработчиков можно управлять с помощью плагина slackpkg+ от Маттео Россини.
  3. Зависимостями по-прежнему необходимо управлять вручную

Первоначальная настройка

Отредактируйте /etc/slackpkg/mirrors и раскомментируйте только один источник пакетов, например:

# /etc/slackpkg/mirrors
...
# FRANCE (FR)
ftp://mirror.ovh.net/mirrors/ftp.slackware.com/slackware-14.0/
# http://mirror.ovh.net/mirrors/ftp.slackware.com/slackware-14.0/
Если вы используете стабильный выпуск Slackware, не перепутайте раздел и не раскомментируйте зеркало из Slackware-current. В этом случае вы обновитесь до разрабатываемой версии Slackware!

Если вы предпочитаете управлять пакетами локально, без получения обновлений, вы всё ещё можете использовать установочный DVD Slackware в качестве источника пакетов. В этом случае необходимо настроить стандартную точку монтирования:

# /etc/slackpkg/mirrors 
...
#----------------------------------------------------------------
# Local CD/DVD drive
#----------------------------------------------------------------
cdrom://mnt/cdrom/
...

Не забудьте смонтировать DVD перед вызовом slackpkg:

# mount /dev/cdrom /mnt/cdrom

Обновите сведения о доступных пакетах:

# slackpkg update
Обратите внимание, что приведённая выше команда не устанавливает обновления пакетов. Она лишь обновляет внутренний список пакетов, которые вы можете установить.
Перед поиском, установкой или обновлением пакета всегда рекомендуется выполнять slackpkg update, чтобы сведения системы о доступных пакетах были актуальными.

Установка пакетов

Пример с одним пакетом:

# slackpkg install mplayerplug-in

Подтвердите установку на следующем экране — пакет будет автоматически загружен и установлен.

Также можно указать несколько пакетов в качестве аргументов:

# slackpkg install mplayerplug-in bittorrent

Можно также управлять целыми группами пакетов:

# slackpkg install kde

Ещё один пример группы пакетов:

# slackpkg install xfce

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

Пример с одним пакетом:

# slackpkg remove mplayerplug-in

Как и выше, подтвердите удаление пакета на следующем экране.

Удаление нескольких пакетов одновременно:

# slackpkg remove mplayerplug-in bittorrent

Аналогично можно удалить целую группу пакетов:

# slackpkg remove kde

Или:

# slackpkg remove xfce

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

Когда доступно обновление пакета, его можно установить следующей командой:

# slackpkg upgrade iptables

Обновление нескольких пакетов одновременно:

# slackpkg upgrade mozilla-firefox mozilla-thunderbird

Обычно рекомендуется поддерживать всю систему в актуальном состоянии:

# slackpkg upgrade-all

Поиск определённых пакетов или файлов

Поиск определённого пакета:

# slackpkg search k3b    
Looking for k3b in package list. Please wait... DONE
The list below shows all packages with name matching "k3b".
[uninstalled] - k3b-2.0.2_20120226.git-i486-1

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

# slackpkg search Terminal
Looking for Terminal in package list. Please wait... DONE
The list below shows all packages with name matching "Terminal".
[ installed ] - Terminal-0.4.8-i486-1

Также можно искать отдельные файлы. В результате поиска будут показаны один или несколько пакетов, содержащих нужный файл:

# slackpkg file-search libncurses.so
Looking for libncurses.so in package list. Please wait... DONE
The list below shows the packages that contains "libncurses\.so" file.
[ installed ] - aaa_elflibs-14.0-i486-4
[ installed ] - ncurses-5.9-i486-1

Если вы хотите узнать больше о содержимом пакета:

# slackpkg info mesa

PACKAGE NAME:  mesa-8.0.4-i486-1.txz
PACKAGE LOCATION:  ./slackware/x
PACKAGE SIZE (compressed):  19208 K
PACKAGE SIZE (uncompressed):  83930 K
PACKAGE DESCRIPTION:
mesa: mesa (a 3-D graphics library)
mesa:
mesa: Mesa is a 3-D graphics library with an API very similar to that of
mesa: another well-known 3-D graphics library.  :-)  The Mesa libraries are
mesa: used by X to provide both software and hardware accelerated graphics.
mesa:
mesa: Mesa was written by Brian Paul.
mesa:

Очистка системы

Удаление всех пакетов сторонних разработчиков:

# slackpkg clean-system

Если вы решите сохранить некоторые пакеты, просто снимите их выделение на следующем экране.

Вы также можете использовать slackpkg для восстановления повреждённого пакета. Допустим, я случайно удалил файл /usr/bin/glxgears. Сначала нужно найти пакет, предоставляющий этот файл:

# slackpkg file-search glxgears
Looking for glxgears in package list. Please wait... DONE
The list below shows the packages that contains "glxgears" file.
[ installed ] - mesa-8.0.4-i486-1

Получив эту информацию, можно просто переустановить пакет:

# slackpkg reinstall mesa

Пересборка официальных пакетов

Slackware предоставляет исходный код всей системы в каталоге source. Для каждого двоичного системного пакета существует соответствующий каталог с исходным кодом. Эти каталоги обычно содержат:

  • исходный код приложения или библиотеки;
  • рецепт сборки в виде файла *.SlackBuild;
  • описание пакета в файле slack-desc;
  • при необходимости сценарий постустановки с именем doinst.sh;
  • различные другие файлы, например исправления, пользовательские пункты меню и т. д..

Сборка пакета из исходного кода

В приведённом ниже примере мы соберём приложение Terminal из исходного кода, предоставленного Slackware. Если пакет уже установлен, его можно удалить.

Пакет Terminal — это терминал Xfce. В Slackware 14.1 пакет был переименован в xfce4-terminal.
# removepkg Terminal

Выберите подходящее место в системе для хранения исходного кода и сценариев, например:

# cd
# mkdir -pv source/Terminal
mkdir: created directory 'source'
mkdir: created directory 'source/Terminal'
# cd source/Terminal/
# links mirrors.slackware.com

Загрузите содержимое каталога source/xfce/Terminal с зеркала Slackware. В результате получим:

# ls -lh 
total 1,4M
-rw-r--r-- 1 root root  821 nov.  24 15:09 slack-desc
-rw-r--r-- 1 root root 1,4M nov.  24 15:11 Terminal-0.4.8.tar.xz
-rw-r--r-- 1 root root 3,6K nov.  24 15:10 Terminal.SlackBuild

Сделайте файл Terminal.SlackBuild исполняемым и запустите процесс сборки:

# chmod +x Terminal.SlackBuild
# ./Terminal.SlackBuild

Сценарий запускает компиляцию пакета. Если всё проходит ожидаемым образом, операция завершается следующим сообщением:

Slackware package /tmp/Terminal-0.4.8-i486-1.txz created.

Теперь можно установить получившийся пакет:

# installpkg /tmp/Terminal-0.4.8-i486-1.txz

Изменение официального пакета Slackware

Основная причина пересборки официального пакета — необходимость изменить его, например добавить или отключить определённые функции. В следующем примере мы пересоберём пакет audacious-plugins, чтобы изменить аудиопроигрыватель Audacious. Исходное приложение предоставляет два разных графических интерфейса, и мы отключим один из них.

Начнём с удаления пакета, если он установлен:

# removepkg audacious-plugins

Теперь создадим подходящий каталог для хранения исходного кода:

# cd /root/source
# mkdir audacious-plugins
# cd audacious-plugins
# links mirrors.slackware.com 

Загрузите содержимое каталога /source/xap/audacious-plugins и сделайте сценарий audacious-plugins.SlackBuild исполняемым:

# chmod +x audacious-plugins.SlackBuild
# ls -lh
total 1,4M
-rw-r--r-- 1 root root 1,4M nov.  24 15:28 audacious-plugins-3.3.1.tar.xz
-rwxr-xr-x 1 root root 4,0K nov.  24 15:28 audacious-plugins.SlackBuild*
-rw-r--r-- 1 root root  892 nov.  24 15:28 slack-desc

Теперь отредактируйте audacious-plugins.SlackBuild и добавьте один параметр:

...
# Configure:
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --sysconfdir=/etc \
  --mandir=/usr/man \
  --enable-amidiplug \
  --disable-gtkui \          -> add this option
  --program-prefix= \
  --program-suffix= \
  ${ARCHOPTS} \
  --build=$ARCH-slackware-linux
...

Соберите и установите пакет:

# ./audacious-plugins.SlackBuild
...
Slackware package /tmp/audacious-plugins-3.3.1-i486-1.txz created.
# installpkg /tmp/audacious-plugins-3.3.1-i486-1.txz

Выбор параметров конфигурации для компиляции

Сценарий настройки исходного кода (точнее, иногда очень длинная строка в SlackBuild, начинающаяся с ./configure) часто отображает обзор активированных и/или деактивированных параметров. Чтобы прервать процесс создания пакета и вывести этот обзор, можно временно отредактировать SlackBuild следующим образом:

...
# Configure:
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
  --prefix=/usr \
  --libdir=/usr/lib${LIBDIRSUFFIX} \
  --sysconfdir=/etc \
  --mandir=/usr/man \
  --enable-amidiplug \
  --program-prefix= \
  --program-suffix= \
  ${ARCHOPTS} \
  --build=$ARCH-slackware-linux

exit 1          -> add this option to interrupt the script

# Build and install:
make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
... 

Теперь запустите сценарий и подождите несколько секунд, пока появится обзор конфигурации:

# ./audacious-plugins.SlackBuild
...
Configuration:
  
...

Interfaces
----------
GTK (gtkui):                            yes
Winamp Classic (skins):                 yes

Используйте параметр ./configure –help, чтобы вывести список всех возможных параметров:

# tar xvf audacious-plugins-3.3.1.tar.xz
# cd audacious-plugins-3.3.1
# ./configure --help | less
...
--disable-speedpitch    disable Speed and Pitch effect plugin
--disable-gtkui         disable GTK interface (gtkui)
--disable-skins         disable Winamp Classic interface (skins)
--disable-lyricwiki     disable LyricWiki plugin (default=enabled)
...
Сценарий SlackBuild уже автоматически распаковывает архив с исходным кодом в каталог /tmp. Поэтому можно просто выполнить ./configure –help | less из этого каталога, не распаковывая архив с исходным кодом вручную в текущий каталог.
В данном случае активация некоторых функций, например поддержки проприетарных аудиоформатов, будет зависеть от наличия соответствующих библиотек в вашей системе.

После выбора всех параметров конфигурации удалите временную команду exit 1 из сценария и запустите процесс сборки и установки:

# ./audacious-plugins.SlackBuild
...
Slackware package /tmp/audacious-plugins-3.3.1-i486-1.txz created.
# installpkg /tmp/audacious-plugins-3.3.1-i486-1.txz

Сборка пакетов сторонних разработчиков

Slackware предлагает лишь ограниченный выбор пакетов по сравнению с такими гигантскими дистрибутивами, как Ubuntu или Debian. Рано или поздно вам захочется установить пакет, который не предоставляется дистрибутивом. Что же в таком случае делать?

Сайт [blocked] SlackBuilds.org — вероятно, лучшее место для поиска программного обеспечения сторонних разработчиков. Пакетов вы там не найдёте, поскольку SlackBuilds.org не является репозиторием двоичных пакетов и никогда им не станет. Это чрезвычайно аккуратно организованная коллекция сценариев сборки, каждый из которых прошёл проверку и тестирование. С помощью этих сценариев можно собрать практически любое стороннее программное обеспечение.

Сборка пакетов с помощью сценариев SlackBuilds.org

В следующем примере мы соберём и установим пакет cowsay с помощью сценария сборки, предоставленного SlackBuilds.org.

Для начала перейдите с помощью cd в каталог сборки, который мы определили ранее:

# cd /root/source

Загрузите в этот каталог следующие компоненты :

  1. сжатый архив со сценариями для сборки пакета;
  2. сжатый архив с исходным кодом.

В нашем случае:

# links http://slackbuilds.org
  1. В поле Search в верхней левой части экрана введите cowsay, переместите курсор на Search (клавиша CursorDown) и подтвердите, нажав Enter.
  2. Перейдите по ссылке cowsay на странице результатов поиска.
  3. Оказавшись на странице cowsay, загрузите SlackBuild (cowsay.tar.gz) и исходный код (cowsay-3.03.tar.gz), затем выйдите из Links.
В качестве альтернативы можно использовать lynx вместо links.

Вот два загруженных нами архива:

# ls -l cowsay*
-rw-r--r-- 1 root root 15136 nov.  25 08:14 cowsay-3.03.tar.gz
-rw-r--r-- 1 root root  2855 nov.  25 08:14 cowsay.tar.gz

Распакуйте архив со сценариями:

# tar xvzf cowsay.tar.gz 
cowsay/
cowsay/cowsay.SlackBuild.patch
cowsay/README
cowsay/slack-desc
cowsay/cowsay.SlackBuild
cowsay/cowsay.info

При необходимости можно немного навести порядок и удалить архив:

# rm -f cowsay.tar.gz

Теперь переместите архив с исходным кодом во вновь созданный каталог cowsay/:

# mv -v cowsay-3.03.tar.gz cowsay/
« cowsay-3.03.tar.gz » -> « cowsay/cowsay-3.03.tar.gz »

Вот что у нас получилось:

# tree cowsay
cowsay
|-- cowsay-3.03.tar.gz
|-- cowsay.info
|-- cowsay.SlackBuild
|-- cowsay.SlackBuild.patch
|-- README
`-- slack-desc

Теперь перейдите в этот каталог с помощью cd. Проверьте, является ли SlackBuild-файл cowsay исполняемым, а затем запустите его, чтобы начать создание пакета:

# cd cowsay/
# ls -l cowsay.SlackBuild
-rwxr-xr-x 1 kikinovak users 1475 mai   27  2010 cowsay.SlackBuild*
# ./cowsay.SlackBuild
...

Если всё пройдёт успешно, процесс создаст пакет в каталоге /tmp, или, точнее, в каталоге $OUTPUT, определённом сценарием:

...
Slackware package /tmp/cowsay-3.03-noarch-1_SBo.tgz created.

Остаётся только установить пакет с помощью installpkg:

# installpkg /tmp/cowsay-3.03-noarch-1_SBo.tgz 
# cowsay Hi there ! 
 -------------
< Hi there ! >
 ------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Управление зависимостями пакетов

Некоторые пакеты требуют наличия других пакетов, чтобы корректно собираться (зависимости сборки) и/или чтобы запускаться (зависимости среды выполнения). В некоторых случаях необходимый пакет сам может зависеть от одного или нескольких других пакетов — и так далее.

В качестве примера рассмотрим страницу libgnomeprint на SlackBuilds.org. После описания пакета приведено следующее замечание:

This requires: libgnomecups.

Кроме того, каждый архив со сценариями содержит файл *.info, в котором явно указаны все необходимые зависимости пакета. Если посмотреть файл libgnomeprint.info, мы найдём поле REQUIRES:

PRGNAM="libgnomeprint"
VERSION="2.18.8"
HOMEPAGE="http://www.gnome.org"
...
REQUIRES="libgnomecups" ----> package dependency
...
Поле REQUIRES было введено в Slackware 14.0

Это просто означает, что перед сборкой пакета libgnomeprint необходимо собрать и установить пакет libgnomecups.

Помимо строго обязательных зависимостей, пакет также может иметь необязательные зависимости, обеспечивающие дополнительную функциональность. Например, текстовый редактор Leafpad можно собрать с поддержкой необязательных зависимостей libgnomeprint и libgnomeprintui.

В РАБОТЕ

Источники

1)
если он ещё не установлен
2)
Это, конечно, лишь пример. Вы можете использовать любое удобное место в своей системе.
QR Code
QR Code ru:slackware:package_management_hands_on (generated for current page)
Перевод этой страницы?: