Установка программ в Linux - GameHub менеджер игр: Steam, GOG, эмуляторы приставок…


Менеджеры пакетов

GUI-оболочки

как установить пакет

обновить систему

…базу пакетов

любой - packagekit

Apper Discover

pkcon -y install pkg-name

pkcon update

pkcon refresh

Arch Linux

Octopi, Pamac

pacman -S pkg-name

pacman -Su

pacman -Sy

Debian и производные

Synaptic

apt-get -y install pkg-name

apt-get upgrade

apt-get update

RedHat, CentOS, Fedora

Yumex, Pirut

dnf install, yum -y install name

dnf upgrade, yum update

yum check-update

openSUSE

YaST

zypper --non-interactive in pkg

zypper dist-upgrade

zypper refresh

Slackware: сбойная

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

slackpkg install pkg

slackpkg upgrade-all

slackpkg update

Gentoo, Calculate

Kuroo, himerge

emerge -y pkg-name

emerge -auDv world

emerge --sync


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

  1. AppImage формат переносимых приложений, создаёт Upstream - среду развёртывания бинарных файлов для любого Linux-дистрибутива
  2. Flatpak самодостаточный пакет графического приложения, выполняющийся в контейнере, изолирующем приложение от системы. Содержит лишь специфичные зависимости, а базовые системные и графические библиотеки оформлены в виде подключаемых runtime-окружений.
  3. Snappy система развёртки и управления пакетами Ubuntu. Разработано для интернета вещей, облачных решений, пользовательских задач.
  4. LXC Linux Containers, Docker, rkt, OpenVZ и подобные технологии создания контейнеров.
  5. Эмулятор - Виртуальная машина


Системы портабельных приложений: примеры команд bauh управление пакетами AppImage, Flatpak, Snap, AUR, Web…

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo #добавить репозиторий flathub

flatpak remote-ls flathub #список пакетов в репозитории flathub

flatpak --user install flathub com.valvesoftware.Steam #установка пакета в домашнюю директорию

flatpak override com.valvesoftware.Steam --filesystem=$HOME #разрешить доступ в хомяк для Steam

flatpak run com.valvesoftware.Steam #запуск


Управление пакетами - википедия, примеры команд, заметки pacman, неофициальные репозитории


octopi менеджер пакетов, в параметрах указать инструмент AUR (yay, trizen, pikaur, pacaur)

pamac менеджер пакетов с категориями, полная автоматизация усложняет устранение ошибок, капризен при запуске

vpacman графический интерфейс, поддержка AUR, тестирование баз и пакетов

tkpacman управление пакетами без AUR, поиск пакета по файлу, удобные описания (стиль Амига-OS)

gnome-packagekit менеджер пакетов с группировкой по окружениям Рабочего стола

appset-qt менеджер пакетов с категориями, скриншоты в описании, ссылки

webman-git web interface для pacman, поиск пакетов http://localhost:1436

pacvis интерактивный 3D-обзор дерева пакетов, вся информация (using Vis.js, inspired pacgraph)

pip система управление пакетами языка программирования Python

RubyGems система управления пакетами для языка Руби

npm менеджер пакетов Java, использующих интерпретатор Node.js

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

Helm System Packages - Emacs-based interface to package manager: dpkg pacman portage guix


Консольные утилиты для pacman добавляют AUR-репозиторий, упрощая управление пакетами


PackageKit использует пакетную систему вашего дистрибутива. package-query ALPM and AUR. pkcon install «name»

cylon CLI для trizen, auracle. backup на гуглодиск, сведения о системе, аудит безопасности, погода…

pacui Bash Frontend for Yay/Pikaur/Aurman/Pakku/Trizen/Pacaur удобный откат пакетов

trizen консольная оболочка для pacman. trizen -Su --movepkg # копировать в кэш pacman

yay самая популярная утилита. Pacman wrapper and AUR helper written in go

yaourt консольная оболочка для pacman и пользовательского репозитария AUR.

pacman wrapper работает с AUR: trizen yay aurman aura pacaur pakku pikaur

yaourt -Syua - обновляет все установленные пакеты (официальные репозитории + AUR)

/etc/yaourtrc: EXPORT=1 # Export to 1: EXPORTDIR or PKGDEST # 2: pacman cache (as root)

hai Home Arch Install скрипт, позволяющий установить пакет без привилегий администратора.

paclan Share pacman packages on the LAN, replacement for pacserve, PkgD.

remakepkg скрипты для задач, связанных с управлением пакетами pacman

systemd-system-update-pacman scheduling and performing system updates with pacman using systemd's system update mechanism

grub-hook Pacman hook to update GRUB after a kernel update.

snap-pac-grub Pacman hook to update GRUB entries for grub-btrfs after snap-pac made snapshots

pacman-kernel-install-git pacman hooks for kernel-install

systemd-boot-pacman-hook предоставляет Pacman hook, при каждом обновлении пакета systemd выполняя bootctl update

pacman-parallelizer minimal package downloader for pacman, using aria2

pikaur при update может скачать/собрать все пакеты, но прервать установку из-за ошибки любого пакета.

argon GUI для установки, удаления одного пакета

pkgfile поиск имёни файла на соответствие пакету из репозиториев, ведёт свою базу, не зависящую от pacman -F

pkgbrowser просмотр пакетов, удобная сортировка - размер, дата, версия

debtap конвертировать deb в arch-пакет

прочие утилиты: pkgtools, pacman-contrib, whoneeds, pactree, paccache, clyde-server, packer, paktahn, pkg_scripts

Search and build bacman pacsearch aurget aurutils bauerbill repofish rua spinach

Search and download auracle-git pbget repoctl yaah aurel

pacman-contrib содержит backman позволяющий завернуть установленные файлы обратно в пакет, pacdiff, paclist показывающий пакеты в репозитории

pacfolder generate folder for each package managed by pacman containing symlinks to all files belonging to that package

pacscripts показывающий пре-,пост-установочные скрипты (в том числе и в файлах пакетов).
srcpac pacman-wrapper для сборки из исходников, namcap для анализа пакетов…

xstow устанавливает пакет в отдельный каталог, создает символьные ссылки в каталоги системы.


Как избежать ошибок при обновлениях Arch Linux - прочитайте RSS-ленту или вывод yay -Pw перед pacman -Syu

Рассылки Arch, например arch-announce для обновлений, требующих ручного вмешательства, чтобы система не была сломана.

Безопасность пакетов - есть риск установки из пользовательского репозитория AUR, где каждый может опубликовать свой сценарий сборки пакета.
перед сборкой проверяйте PKGBUILD, где могут быть случайные или преднамеренные ошибки, во время сборки/установки могущие нанести вред! Проверяйте источники исходных кодов на официальность, в других велика вероятность, что зловред может быть вшит в исходные коды. такой же риск несут и собранные пакеты других дистров из непроверенных источников. Вывод: не доверяешь - проверяй или собирай всё сам!


Откат системы или пакета при возникновении проблем после обновления. Arch Linux Archive - "слепки" репозиториев


Server = http://archlinux.arkena.net/archive/repos/2017/12/01/$repo/os/$arch #установить в имени сервера желаемую дату отката (альтернатива)

pacman -Syyuu обновить базу данных на выбранную дату, принудительно переустановить все пакеты, версии которых не соответствуют этой дате.

Определение нужной даты, если система обновлялась недавно: пошагово уменьшать дату в mirrorlist, откатить всё: pacman -Syyuu и проверить, не исчезла ли проблема. Такой подход позволит вычислить конкретный пакет и добавить его в /etc/pacman.conf в IgnorePkg — до исправления.


Откат системы, используя снимки btrfs | zfs: в .zshrc добавить алиас update, где делается снапшот, затем pacman -Syu.

sudo snapper -v undochange 0..НОМЕР РАБОЧЕГО СНАПШОТА

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

pacman -D опция пакет #man pacman Database


откат пакета: выяснив проблему c конкретным паетом, в chroot понизить его через downgrader и убрать пакет из IgnorePkg, когда баг пофиксят.

env DOWNGRADE_PAGE_SIZE=50 downgrade wine-staging


Запрет обновлений старых пакетов в обход IgnorePkg (плюсы: заработает octopi, прочие GUI. Может я изобрёл велосипед, в сети это не искал)

сделать downgrade (например deadbeef), изменить версию/имя папки в базе /var/lib/pacman/local, изменить имя папки: вместо deadbeef-0.7.2-5 на deadbeef-9.7.2-5 и записать в deadbeef-9.7.2-5/desc, т.е. сделать версию пакета выше всех последующих его ненужных обновлений.

Запрет обновления пакетов Arch Linux ставится в исключительных случаях:

1) если пакет собираешь сам с отличиями от официального,
2) новая версия оказалась глючной. После отката версии на старую, его обновления временно замораживают до исправления.


Примеры команд pacman, решения проблем /etc/pacman.d/hooks, /usr/share/libalpm/hooks запуск сервисов при операциях pacman

sudo pacman -Su #update system, в дальнейшем подразумевается, что pacman запускается через sudo или под суперпользователем

pacman -Sy #обновить базы /-Syy принудительно pacman -Sy pacman #обновить самого себя


обновление после длительного оффлайна:

sudo bash -c 'pacman-key --init && pacman-key --populate archlinux && pacman-key --refresh-keys && pacman -Syy && pacman -Su'

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

pacman -Qqe | grep -v "$(pacman -Qmq)" > pkglist # список пакетов доступных в репозиториях (без AUR):

pacman -Qqem > pkgaur # список AUR и других внешних пакетов, которые были установлены явно.
comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist-mq # список пакетов (не удаляет частичные совпадения)
pacman -S $(cat pkglist) # установка пакетов из списка (на новой системе)

pacman -Rsn $(pacman -Qdtq) # удалить пакеты "сироты"


установленные пакеты - сортировка по размеру

expac -H M "%09m\t%-24n\t%-10d" | sort -hk 1

expac -H M "%09m\t%-24n\t%-10d" | grep mc

pacman -Quq|xargs expac -S -H M '%k\t%n' | sort -sh # список пакетов, которым требуется обновление, с размером загрузки


Если не будет использована опция --needed, то при установке группы будут переустановлены все ранее установленные в систему и принадлежащие этой группе пакеты (даже если установленные в системе пакеты будут иметь последнюю доступную версию). При установке недостаточно одного обновления списка пакетов (например pacman -Sy имя_пакета) - могут возникнуть проблемы с зависимостями. В первую очередь, перед установкой новых пакетов, выполняйте полное обновление системы.

Список файлов пакета: pacman -Fl <pkgs..>

более полезная опция: -o, --owns <файл> найти пакет, содержащий <файл>

pacman -Qo /path/to/file

поиск по имени файла: требуется обновить базы: pacman -Fy или pkgfile -z --update

pacman -F <имя файла> или pkgfile <имя файла>

Сведения и файлы выбранного пакета из всех установленных, быстрый фильтр (scroll правой части списка)

pacman -Qsq | fzf -m --preview 'cat <(pacman -Si {1}) <(pacman -Ql {1} | awk "{print \$2}")' | xargs -ro

Поиск в репозиториях с выводом информации и установкой выбранного пакета

pacman -Slq | fzf -m --preview 'cat <(pacman -Si {1}) <(pacman -Fl {1} | awk "{print \$2}")' | xargs -ro sudo pacman -S

LC_ALL=C pacman -Si mc # описание пакета - вся информания

pacman -Sg kdebase # список пакетов, принадлежащих какой-либо группе

pacman -Qs условие # искать пакеты, установленные по названию

paclist core или comm -12 <(pacman -Qq|sort) <(pacman -Slq core|sort) # содержание репозитория use '-q' switch instead of awk


pactree -lu name # дерево зависимостей пакета без дубликатов

pactree -r пакет # или whoneeds — обратное дерево зависимостей: пакеты, зависящие от указанного


Создание пакетов

поле md5sum может быть сгенерировано при помощи makepkg -g


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

pacman -Rdd [имя пакета] # пакет заново подтянется по новым зависимостям, и это выявит пакеты, которые требуют старую версию.

pacman -S --overwrite=* package #принудительная установка to force pacman to overwrite files that match glob.


Обслуживание системы
pacman -Qkk #проверка целостности системы — вывод несоответствий с файлами в пакетах - флаги и т.п.

/etc/pacman.conf опция CleanMethod = KeepCurrent очищающая устаревшие пакеты, чтобы кэш не рос после обновления.


/var/lib/pacman - база данных пакетов

/var/cache/pacman/pkg - скачанные пакеты, (!) данный каталог не должен быть ссылкой, только bind

списки файлов: /var/lib/pacman/sync, octopi использует /var/cache/pkgfile


/etc/makepkg.conf

BUILDDIR=/tmp/makepkg #-- каталог сборки пакетов


сборка и установка пакета из AUR, не используя pacman wrapper:

pkg=trizen; mkdir -p tmp/$pkg; cd tmp/$pkg

wget -O PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=$pkg

grep -q pkgname=$pkg <PKGBUILD || echo $pkg not Found!

sudo makepkg --syncdeps --install --noconfirm


pacman -Ql pacman | awk -F"[/ ]" '/\/usr\/bin/ {print $5}' # список всех утилит pacman

pacman флаги с буквами прописью означают команды, имеющие дополнительные флаги, которые пишутся в нижнем регистре.


После сообщений об ошибках прочитайте RSS-ленту, сначала рекомендуется обновить ключи:

sudo pacman -S archlinux-keyring # archlinuxcn-keyring debian-archive-keyring ubuntu-keyring и прочих подключенных репозиториев…

или

pacman-db-upgrade
pacman-key --init
pacman-key --populate archlinux
pacman-key --refresh-keys


Решение проблемы "is corrupted (invalid or corrupted package (PGP"signature)):
sudo pacman-key --refresh-keyssudo pacman -Syyu


Добавить ключ репозитория: sudo pacman-key -r 65A4AC99 && sudo pacman-key --lsign-key 65A4AC99

СБОЙ (неизвестный открытый ключ ... Добавить ключ исходника (AUR): gpg --keyserver keys.gnupg.net --recv-keys 4793916113084025

другой сервер ключей: gpg --keyserver keyserver.ubuntu.com --recv-keys 865E6C87C65285EC 40481E7B8FCF9CEC


Сборка с пропуском проверки ключа:

curl -o PKGBUILD https://aur.archlinux.org/cgit/aur.git/plain/PKGBUILD?h=lib32-ncurses5-compat-libs

makepkg PKGBUILD --skippgpchecksudo

pacman -U *.tar.xz

или:

yaourt -G pkgname

cd pkgname

makepkg -c --skippgpcheck

makepkg -i


ошибка неверный или поврежденный пакет(PGP-подпись): mono-addins: key "Daniel Isenmann <daniel@archlinux.org>" is disabled
:: Файл /var/cache/pacman/pkg/mono-addins-1.1-1-x86_64.pkg.tar.xz поврежден (неверный или поврежденный пакет(PGP-подпись))

Решение: выставить в pacman.conf SigLevel=Never на время установки для репозитария, которому принадлежит пакет:

[extra]

SigLevel = Never

Include = /etc/pacman.d/mirrorlist

sudo pacman-key --edit-key "Daniel Isenmann <daniel@archlinux.org>" # этот способ не помогает…

> enable > save


При обновлении появляется сообщение об ошибке: "file exists in filesystem" ("файл существует в файловой системе")!
pacman при обнаружении конфликтующих файлов, по умолчанию, не будет их перезаписывать автоматически, так сделано специально.
Сначала проверьте не принадлежит ли файл другому пакету: (pacman -Qo /path/to/file). Если принадлежит - создайте отчет об ошибке. Если проблемный файл не нужен другим пакетам - переименуйте его и перезапустите команду обновления. Если в дальнейшем проблем не возникнет, старый файл можно удалить.

При обнаружении "конфликтующих файлов", чтобы их не перезаписывать вручную, используйте ключ -f (pacman -Sf)


Ошибка: не удалось завершить транзакцию nss: '/usr/lib/p11-kit-trust.so' существует в файловой системе

lib32-nss: '/usr/lib32/p11-kit-trust.so' существует в файловой системе
pacman -Syu --overwrite /usr/lib\*/p11-kit-trust.so

pacman -S --force xfdesktop # принудительная установка, перезаписывать конфликтующие файлы


ошибка обновления: не удалось подготовить транзакцию (не удалось удовлетворить зависимости)
Решение: удалить пакеты в порядке зависимостей


pacman падает при обновлении Если pacman завершает свою работу с ошибкой "database write" ("записи в базу данных"), и после этого попытки переустановки или обновления пакетов завершаются неудачей, загрузитесь с Arch live CD:
Смонтируйте корневую файловую систему, обновите базу данных и всю систему с помощью pacman -Syyu.
Переустановите поврежденный пакет через pacman -r /путь/к/корневому_разделу -S имя_пакета.


Если pacman не работает - способы восстановления:

pacman -Scc

распакуйте пакеты openssl libarchive pacman в корень. pacman'a будет восстановлен с настройками по умолчанию. Для поддержания целостности базы данных пакетов, переустановите скачанные пакеты стандартными средствами pacman, подробнее здесь


Заметки об установке/настройке пакетов

AppImage Hub - FocusWriter 30 мб работает быстрее штатного пакета, правильно с дефолтными темами.

Flatpak - установка игрушки добавит 400 мб мусора, запрос пароля 14 раз для скачивания зависимостей.


Скорость зеркал (данный сборник может содержать устаревшие примеры)

rankmirror -n 7 /etc/pacman.d/mirrorlist > ~/Documents/mirrorlist

sudo reflector --sort score --score 25 --save /etc/pacman.d/mirrorlist2 # только для конкретной страны

reflector --verbose -l 100 --sort rate --save /etc/pacman.d/mirrorlist # рейтинг зеркал по пингу, запись 100 из них в mirrorlist


список зеркал только для какой-то конкретной страны вместо того, чтобы выполнять замер скорости загрузки для каждого:Cnt="Russia";
awk -v GG=$Cnt '{if(match($0,GG) != "0")AA="1";if(AA == "1"){if( length($0) != "0" )print $3 ;else AA="0"} }' \
/etc/pacman.d/mirrorlist.pacnew | grep ':'

mirror=/etc/pacman.d/mirrorlist

cp $mirror /tmp/mirrorlist && mirror=/tmp/mirrorlist

sed -i 's/^#Server/Server/' $mirror

rankmirrors -n 10 $mirror > ${mirror}_new #долгая проверка всех зеркал


Ускоряем менеджер пакетов pacman

  1. параллельная и сегментированая загрузка пакетов через powerpill, используя Aria2, reflector и rsync для зеркал, которые его поддерживают.
  2. Загрузка пакета в несколько потоков, используя aria2c. Чтобы загружать сразу несколько пакетов, рекомендуется какой-либо pacman wrapper.
  3. Сортировка зеркал с помощью rankmirrors (аналогично reflector, плюс сортировка зеркала по статусу)
  4. Экономия трафика: использование delta обновлений ArchLinux, но не все зеркала это поддерживают.
  5. из-за большого числа мелких файлов и фрагментации pacman-cage ускоряет список установленных пакетов.