Slackware: плагин slackpkg+ для сторонних репозиториев (README)

Маттео Россини (Matteo Rossini aka zerouno)
Перевод Алексея Федорчука
Оригинал: /usr/share/doc/slackpkg+-1.3.1/

Программа slackpkg — менеджер пакетов для Slackware, slackpkg+ — плагин для slackpkg. Он добавляет поддержку сторонних репозиториев. Вы можете устанавливать, обновлять и искать пакеты в нескольких репозиториях.

Благодарю alienbob и phenixia2003 за содействие, добавления и патчи.

Отмазка

Это НЕ официальный инструмент. Используйте его на свой ​​страх и риск.
Сторонние репозитории НЕ являются официальными.
Авторы этих репозиториев не несут ответственности
за любой ущерб, который может быть причинен к компьютеру.

Настройка

Для базовой настройки требуется:

  • Отредактировать файл /etc/slackpkg/slackpkgplus.conf;
  • Снять комментарии с одного или нескольких зеркал и добавить их в список REPOPLUS; следует помнить, что пакеты из этих репозиториев не выводятся, если они присутствуют в репозиториях официальных (см. ниже).
  • При желании можно установить значения в PKGS_PRIORITY для определения приоритета единичного пакета, присутствующего в нескольких репозиториях, или позволить репозиториям перекрывать официальные пакеты Slackware.

Список поддерживаемых репозиториев — в файле repositories.txt, но можно добавлять и собственные репозитории.

Если вы подключаете репозитории, которые не поддерживают GPA-ключи, в файле /etc/slackpkg/slackpkg.conf необходимо установить значение

CHECKGPG=off

Запуск (от root’а):

# slackpkg update gpg
# slackpkg update

Для поддержания slackpkg+ в актуальном состоянии следует снять комментарий с репозитория slackpkgplus и выполнять

# slackpkg upgrade-all

для обновления slackpkg+ после выпуска каждой новой его версии.

MIRRORPLUS

Массив MIRRORPLUS определяет все подключаемые зеркала. Он использует протоколы:

1) http/ftp/https: например,

     MIRRORPLUS['slacky']=http://repository.slacky.eu/slackware64/

Зеркало должно содержать все файлы метаданных (CHECKSUMS.md5 и так далее).
Необходимо запускать команду slackpkg update после добавления и удаления репозиториев.

2) Локальное зеркало: например,

     MIRRORPLUS['alienlocal']=file://mirrors/alienbob/x86/14.0/

Этот каталог должен содержать все файлы метаданных (CHECKSUMS.md5 и так далее).

Необходимо запускать команду slackpkg update после добавления и удаления репозиториев.

3) Локальный каталог пакетов: например,

     MIRRORPLUS['mypackages']=dir://mypackages/

Все пакеты должны храниться в едином каталоге (подкаталоги не допускаются).
Помните, что команда slackpkg update игнорирует такие репозитории. При каждом запуске slackpkg содержание каталога перечитывается заново.

Применение

Для начала смотрите man slackpkg.

Используйте команду

# slackpkg upgrade-all

для поддержания актуальности системы. Эта команда отыскивает все пакеты с доступными обновлениями во всех подключённых репозиториях.

Используйте команду

# slackpkg install-new

(при использовании Slackware -current) для проверки обновлений пакетов. Эта команда ищет новые пакеты ТОЛЬКО в официальных репозиториях Slackware.

Команда

# slackpkg {install,upgrade,remove,reinstall}

требует одного из следующих аргументов:

1) имя пакета (просматриваются все репозитории), например

   # slackpkg install bsd-games

2) часть имени пакета (просматриваются все репозитории), например

   # slackpkg install alsa

3) серия пакетов в репозитории (просматриваются все репозитории), например

   # slackpkg install xap

4) имя репозитория, например

   # slackpkg upgrade alienbob

обновит все пакеты из репозитория alienbob, а

   # slackpkg install ktown

установит все пакеты из репозитория ktown

5) имя репозитория:имя пакета, например

   # slackpkg install slacky:openjdk

установит openjdk из репозитория slacky, даже если пакет openjdk имеется и в другом репозитории

6) file:локальное имя файла (txz или tgz), например

   # slackpkg install file:mypackage-1.0-noarch-1my.txz

установит пакет mypackage, хотя путь к нему не определён в slackpkgplus.conf (можно указывать как абсолютный, так и относительный путь)

7) dir:каталог, например

   # slackpkg {install|upgrade} dir:/root/myrepo

установит или обновит все пакеты из /root/myrepo/
(Завешнающий слэш / не обязателен)
Примечание: slackpkg install . — псевдоним для slackpkg install dir:./, но slackpkg install ./ — не тот же самый псевдоним; см. раздел FILE в man slackpkg.

Настройка приоритетов

Если пакет имеется более чем в одном репозитории, он поиск его будет проходить в следующем порядке:

1) как описано в PKGS_PRIORITY (имеет приоритет над официальными пакетами);
2) как описано в официальном репозитории Slackware (настраивается в /etc/slackpkg/mirrors);
3) в порядке перечисления в REPOPLUS (не может опередить официальные пакеты);
4) во всех остальных репозиториях, перечисленных в MIRRORPLUS.

Синтаксис PKGS_PRIORITY таков:

  PKGS_PRIORITY=( имя репозитория:имя пакета ... и так далее)

например:

  PKGS_PRIORITY=( alienbob:openjdk )

В качестве имени пакета может выступать регулярное выражение, например

  PKGS_PRIORITY=( restricted:.* )

означает: все пакеты из репозитория restricted.

MULTILIB

При желании использовать в системе multilib, можно автоматически насторить репозиторий multilib в slackpkgplus.conf и установить multilib, просто запустив сценарий:

# /usr/doc/slackpkg+-1.2.0/setupmultilib.sh

Для ручной настройки multilib (если она была установлена ранее),
нужно раскомментировать MIRRORPLUS['multilib']=... с правильным значением, снять комментарий PKGS_PRIORITY=( multilib:.* ), и добавить multilib в список REPOPLUS.

Для ручной установки multilib, запустить:

# slackpkg update gpg
# slackpkg update
# slackpkg upgrade-all
# slackpkg install multilib

После этого можно актуализировать multilib, запустив:

# slackpkg update
# slackpkg upgrade-all

И перезапустить slackpkg install multilib, если команда slackpkg install-new обнаружила новые пакеты.

Для удаления multilib нужно удалить multilib:.* из PKGS_PRIORITY и REPOPLUS (но не удалять соответствующую строку из MIRRORPLUS), а затем запустить:

# slackpkg update
# slackpkg remove multilib

Примечание: это НЕ удаляет оксновные пакеты multilib, потому что они связаны со всей 64-битной системой. Для их удаления нужно запустить:

# slackpkg upgrade-all

затем удалить или закрыть комментарием соответствующую строку в MIRRORPLUS, и, наконец, запустить

# slackpkg update

KTOWN (последняя версия KDE)

Если вы хотите установить пакеты KDE последней версии из репозитория ktown AlienBOB’а (ныне 4.12.5 — А.Ф.), добавьте

PKGS_PRIORITY=( ktown:.* )

а затем запустите:

# slackpkg update gpg
# slackpkg update
# slackpkg install ktown
# slackpkg upgrade-all

Не забудьте прочитать специальную инструкцию, потому что вам, возможно, потребуется удалить некоторые пакеты из Slackware KDE. В момент написания этих строк нужно сделать так:

# slackpkg remove kdeadmin kdenetwork kdesdk kdetoys

После этого можно поддерживать KDE из ktown в актуальном состоянии, запуская:

# slackpkg update
# slackpkg upgrade-all

Для восстановления KDE из Slackware нужно удалить ktown:.* из PKGS_PRIORITY и REPOPLUS (но не соответствующую строку из MIRRORPLUS), после чего запустить:

# slackpkg update
# slackpkg upgrade-all
# slackpkg install kde
# slackpkg remove ktown

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

# slackpkg update

Личные пакеты

Если вы собираете собственные пакеты, можно устанавливать их, не прибегая к installpkg, а используя slackpkg+. Это поможет отслеживать установки и обновления, а также снизит вероятность ошибки. НЕТ необходимости создавать персональный репозиторий с GPG-клёчом и метаданные каждый раз при сборке пакета; также НЕ нужно редактировать файл slackpkgplus.conf file или запускать slackpkg update.

Вы можете:

1) установить, обновить или переустановить единичный пакет с указанием полного пути к имени файла (абсолютноого или относительного), например

   # slackpkg install file:package-1.0-noarch-1my.txz

или

   # slackpkg upgrade file:../repo/package-2.0-noarch-1my.txz

2) установить, обновить или переустановить все пакеты из единичного каталога (но не из его подкаталогов), с указанием пути (абсолютного или относительного) к этому каталогу, например

   # slackpkg install dir:/myrep

или

   # slackpkg upgrade dir:./test/package/

или

   # slackpkg reinstall .

Примечание: . — псевдоним для dir:./, но только если он существует.
Команда slackpkg install ./ (илиr /myrepo/, или ./package.txz) выдаст сообщение об ошибке, потому что в стандартной команде slackpkg можно указать FILE на входе, так что в случае slackpkg install ./list.txt файл list.txt должен быть простым текстовым файлом, содержащим список пакетов для установки (см. man slackpkg).

Если каталог содержит один и тот же пакет двух разных версий, slackpkg покажет их в «алфавитном» порядке, поэтому pkg-9.1 будет выведен вместо pkg-8, но pkg-9 будет выведен вместо pkg-10.
Пардон… это ограничение slackpkg!

Совет: если вы хотите использовать dir:/myrepo для отслеживания установок ваших пакетов, и оригинальный файл txz/tgz был утерян, можно просто создать пустой файл; этот глупый slackpkg+ ищет только имя, а не содержание (если, конечно, не запускать slackpkg для переустановки этого пакета). Так, выполнив

   # touch mypkg1-1.0-noarch-1my.tgz
   # touch mysecondpkg-1.1-noarch-2my.txz

(где mypkg1 and mysecondpkg — ранее установленные пакеты), slackpkg install . (или upgrade) не покажет эти пакеты, но slackpkg reinstall . сделает их видимыми (но не продолжит установку).

Примечание: slackpkg+ пропустит проверку GPG и md5 для личных пакетов!!

Удалённые пакеты без метаданных

Некоторые пользователи делают свои пакеты доступными на личных сайтах, но не создают файлов метаданных (в частности, если они собрали лишь несколько пакетов). Для установки одного из таких пакетов вы можете скачать его и установить вручную. Но теперь, используя slackpkg+, можно указать прямой URL для пакета, который будет автоматически скачан и установлен или обновлён.

Вы можете:

1) установить, обновить или переустановить единичный пакет, указав его полный URL:

   # slackpkg install http://site/path/package-1.0-noarch-1my.txz

Например, можно использовать эту функцию для установки снапшота самого slackpkg+ (что невозможно для команды slackpkg upgrade slackpkg+, потому что это бета-версия):

   # slackpkg upgrade http://www.slakfinder.org/slackpkg+/pkg/slackpkg+-20130905.2-noarch-1mt.txz

2) установить, обновить или переустановить все пакеты из единичного каталога (но не из его подкаталогов), даже если хозяин сайта не создаёт метаданных для пакетов:

   # slackpkg install http://site/path/

Примечание: эта функция требует наличия lftp и может не сработать, если сервер не поддерживает список каталогов или путь к файлу содержит index.html.

Примечание: slackpkg+ пропускает проверку GPG-ключей и md5 для удалённых пакетов без метаданных!!

Уведомления

Некоторые пакеты требуют специальных пост-инсталляционных действий для обновления связанных пакетов, или перестроения модулей ядра, или переконфигурирования. Пользователь может забыть про это, особенно при массовом обновлении. Функции уведомлений помогут ему про это вспомнить. В файле /etc/slackpkg/notifymsg.conf можно указать некое пользовательское событие (см. документацию в этом файле). События могут быть очень специфическими (при обновлении KDE мне напоминают позвонить моим друзьям), или более полезным: после обновления ядра не забудьте перекомпилировать все модули драйверов.

Чтобы включить эту функцию, нужно в файле slackpkgplus.conf установить значение

ENABLENOTIFY=on

Опции wget

Плагин slackpkg+ использует wget для скачивания пакетов и метаданных.

Вы можете использовать значения WGETOPTS для передачи параметров wget.

По умолчанию, если URL недоступен, wget, после долгого ожидания, повторяет попытку скачивания из репозитория. Так что если последний опят недоступен, то приходится удалять его из файла конфигурации.
Как временное решение, можно добавить в slackpkgplus.conf опции

WGETOPTS="--timeout=5 --tries=1"

Разрешение 32-разрядности

По умолчанию slackpkg+ запрещает устанавливать 32-битные пакеты в 64-битную систему.

Установка значения

ALLOW32BIT=on

позволит slackpkg+ инсталлировать 32-битные пакеты в 64-битную Slackware (что может быть небезопасным). Пожалуйста, не устанавливайте 32- и 64-битные версии одного и того же пакета, чтобы избежать проблем. И никогда не обновляйте 64-битные пакеты 32-битными версиями.
package.

Не забудьте установить multilibs.

«Серый список»

Иногда бывает, что slackpkg+ не устанавливает некий пакет в ходе выполнения операции upgrade-all. Это каждый раз требует снятия отметки с такого пакета или бобавления его в «чёрый список». Но первый способ может быть обременительным при постоянном выполнении upgrade-all.

Способ же второй не позволяет узнать, какая версия пакета доступна. Но есть и третий способ — внести пакет в «серый» список.
Все пакеты, включённые в «серый список», доступны для установки и видны в диалоге slackpkg, но не отмечены по умолчанию, так что не будут установлены по ошибке.

Можно установить один «серый список» на весь репозиторий. Оптимально включить в «серый список» все сторонние репозитории, чтобы upgrade-all автоматически выполнялось для обновления официальных пакетов Slackware, но заставит просмотреть все сторонние пакеты для уверенности в том, что их нужно устанавливать.

Лог установки

Плагин slackpkg+ ныне создаёт журнал всех установленных пакетов в /var/lib/slackpkg/install.log и пытается отметить в нём, из какого репозитория были загружены файлы. Это помогает отслеживать установки Slackware.

Вам предлагается запустить сценарий /usr/lib/slackpkg/makeinstlog.sh -t (что может занять некоторое время) для инициализации журнала (это создаёт временный файл /var/lib/slackpkg/install.log.tmp). Опция -t добавляет имя репозитория, из которого был загружен файл, но не всегда удачно. Так что желательно проверить этот временный файл перед переименованием его в install.log. Помните, что его можно редактировать вручную для изменения или добавления информации.

При каждом исполнении команды slackpkg install|upgrade|remove будет добавляться новый журнал. При выполнении каждой команды slackpkg update список будет перестраиваться.

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

Команда slackpkg check-updates сообщает, какие репозитории были изменены с момента последнего обновления. Подробности и некоторые примеры с использованием crontab можно видеть здесь.

Дополнительная информация

Статья AlienBOB’а о slackpkg+

С вопросами, предложениями и дополнениями пишите мне на email zerouno@slacky.it или обращайтесь на Форум linuxquestions:

Плагин slackpkg+ можно найти на Sourceforge.