Установка программ в Linux - GameHub менеджер игр: Steam, GOG, эмуляторы приставок…
GUI-оболочки |
…базу пакетов | |||
pkcon -y install pkg-name |
pkcon update |
pkcon refresh | ||
Arch Linux |
Octopi, Pamac |
pacman -S pkg-name |
pacman -Su |
pacman -Sy |
Debian и производные |
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 |
Технологии переносимых приложений, работающих в любом окружении системы и содержащих все необходимые зависимости и компоненты:
Системы портабельных приложений: примеры команд 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