1
0
mirror of https://github.com/tiyn/wiki.git synced 2025-10-09 09:27:53 +02:00
wiki/wiki/linux/package_manager.md

11 KiB

Package Managers

Package managers are important programs to get software onto your system.

Arch Linux: Pacman and Yay

In Arch Linux there are 2 main types of package managers. The first is pacman, the default package manager.

For the second type there are many different managers to chose from. Those managers are handling for the Arch User Repositories (AUR). In this article yay is used as the go to AUR manager. yay is also a wrapper for pacman so yay can be used instead of pacman to install and update both AUR and main repository programs. It features the same syntax.

Usage

This section addresses various usages of the arch linux package managers.

Ignoring Packages

Packages can be ignored by adding the package in /etc/pacman.conf under IgnorePkg. In the following example waybar is ignored from updates. To add more packages just add them separated by spaces.

IgnorePkg = waybar

To unignore the package from updates remove it from this line.

Downgrading Packages

Packages of the AUR can be downgraded by using the Downgrade program. This program can then easily be used to an AUR package. This works like the following assuming the package v4l2loopback-dmks needs to be downgraded.

sudo downgrade v4l2loopback-dmks

Afterwards the target version can be selected and the downgrading process will conclude. After the downgrade of a package you will get asked if you want to ignore future updates.

Manual Installation of a PKGBUILD File

A PKGBUILD file is a shell script that contains the installation information that is required by the Arch Linux. Using the makepkg command it can be installed like the following command shows.

makepkg -sirc

Afterwards it is installed on the system and can be further managed (especially uninstalled) by the Pacman package manager.

Installing an AUR Program with a Specific Version

The installation of a specific version of an AUR program can be easily achieved. For this navigate to the AUR page of the program to install. On the right-hand side click on View Changes and select the version you want to install in the commit list. Next to download a .tar.gz file can be downloaded which includes a PKGBUILD file. Afterwards it needs to be uncompressed.

Clear Cache

The cache of all packages except the one installed can be deleted by running the following command.

pacman -Sc

Alternatively the pacman cache can be deleted partly by running the following command which will clear the cache of pacman except for the latest version. The amount of versions to keep can be specified by changing the number in the following command accordingly.

paccache -rvk1

And finally the following command will remove all cached files that belong to uninstalled packages. Again the number can be changed to keep a specific number of versions.

paccache -rvuk0

Since yay mirrors the usage of pacman it can be used the same way and will clean both caches.

yay -Sc

Similar to paccache a command called yaycache can be used. It follows the same options as paccache.

The clearing of the cache can be automated by using a hook.

Enabling multilib

multilib is a repository that contains 32-bit software and libraries. By default it is not enabled. To enable it search and uncomment the following lines in the file /etc/pacman.conf.

[multilib]
Include = /etc/pacman.d/mirrorlist

Hooks

Hooks are commands that are run before or after installation of one or more packages. They are needed to have the .hook extension and can be found inside two directories. The first one is /usr/share/libalpm/hooks/. The second one is defined in HookDir inside the file /etc/pacman.conf. By default it points towards /etc/pacman.d/hooks.

Examples of hooks can be found in the following sections.

Hook: List Orphans

The following hook will display orphans after any package is update. It was found in a reddit post by IBNash which references a gist by Strykar.

[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = *

[Action]
Description = Searching for orphaned packages...
When = PostTransaction
Exec = /usr/bin/bash -c "/usr/bin/pacman -Qtd || /usr/bin/echo '==> no orphans found.'"
Hook: Clear Cache

The following hook will clear the pacman cache except for the last version of a package. It was found in a reddit post by IBNash which references an AUR comment by itaranto.

[Trigger]
Type = Package
Operation = Remove
Operation = Install
Operation = Upgrade
Target = *

[Action]
Description = Removing unnecessary cached files (keeping the latest one)...
When = PostTransaction
Exec = /usr/bin/paccache -rvk1 && paccache -ruvk0
Hook: Informant

The following hook will use informant to check for Arch News that may require manual intervention and not allow the update if there are news unread. It was found in a reddit post by IBNash which references the informant Github.

[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = *
Target = !informant

[Action]
Description = Checking Arch News with Informant...
When = PreTransaction
Exec = /usr/bin/informant check
Depends = informant
AbortOnFail
Hook: Update Package Mirrorlist

The following hook will use reflector to update the pacman mirrorlist. It will use german mirrors (-c de), will list the fastest 15 mirrors (-n 15) and only do so if the mirror was online in the last 24 hours (-a 24). It was found in a reddit post by IBNash which references the pacman-hooks Github.

[Trigger]
Operation = Upgrade
Type = Package
Target = pacman-mirrorlist

[Action]
Description = Updating pacman-mirrorlist with reflector...
When = PostTransaction
Depends = reflector
Exec = /bin/bash -c 'reflector -c de -n 15 -a 24 > /etc/pacman.d/mirrorlist ; test -f /etc/pacman.d/mirrorlist.pacnew && mv -v /etc/pacman.d/mirrorlist.{pacnew,orig} || true'
Hook: Kernel Reboot Needed

The following hook will use determine if a reboot is needed because the kernel was updated. It was found in a reddit commend by progandy.

[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = File
Target = usr/lib/modules/*

[Action]
Description = Check for upgrade of running kernel...
When = PostTransaction
Exec = /bin/bash -c "[[ -f \"/proc/modules\" && ! -d \"/usr/lib/modules/$(uname -r)\" ]] && printf '==> WARNING: %s\n  -> %s\n' 'Running kernel has been updated or removed!' 'A reboot is required!' || true"

Troubleshooting

This section will focus on errors and the fixing of errors of package managers.

/usr/lib/firmware/nvidia/ad104 exists in filesystem linux-firmware-nvidia

This error comes from a decision to split the firmware modules into different parts. An easy way to fix it is by simply reinstalling the linux-firmware package and updating the packages of the system.

pacman -Syu linux-firmware

Update Mirrorlist

After a while not updating the system it is possible for the mirrorlist to be outdated. This can be fixed by updating it with the following command:

curl -o /etc/pacman.d/mirrorlist https://archlinux.org/mirrorlist/all/

Error While Importing Keys

Both yay and pacman use GPG keys. It is possible that it runs into errors when importing new keys. If this happens you should try to restart the GPG key server as explained in the GPG entry.

Unknown Public Key

If the error ERROR: One or more PGP signatures could not be verified!, you have to manually receive the key and trust it. This can be done as explained in the GPG entry.

The identifier of the key usually gets gets printed in the line above the error looking like FAILED (unknown public key <KEYID>).

Error During Updating is marginal trust

If the error [...] Key [...] is marginal trust (also of unknown trust) occurs while updating the system, it can be fixed by running the following commands and then restarting the update process of the package manager.

pacman -Sy archlinux-keyring
pacman-key --populate archlinux
pacman-key --refresh-keys

Error During Updating the following untracked working tree files would be overwritten

The error the following untracked working tree files would be overwritten can happen when the cache features a changed version of the files used by yay to update the package. This can easily be fixed by removing the cache of the corresponding package.

Python ModuleNotFoundError: No module named...

This section is based on a StackOverflow post by Helen.

In this case the error stems from a missing package. Normally it can easily be fixed by installing that corresponding package. But please note that pyenv can hide packages if the global Python version is set to something other than system. This is especially the case on Arch Linux-systems because Python packages are also installed via Pacman or Yay. In this case the global Version has to be changed to system or the package installed to the non-system Python version.

Error exists in filesystem

This section is based on a reddit post by 194668PT.

If an error shows up that describes that a file of a package exists in filesystem usually a permission/owner error happened. This can happen when running pacman -Syyu. To update the package either way the following command can be used. <package name> should be exchanged for the package that throws the error.

sudo pacman -S --overwrite "*" <package name>