paru
paru copied to clipboard
Install order wrong with multiple packages providing the same dependency
Affected Version
paru -V paru v2.0.4 - libalpm v15.0.0
Description
Have you checked previous issues? Yes
It looks to me like paru
has a problem with installation order when updating a package that has a dependency that is provided by multiple packages. I will explain with an example:
I have mozc-ut and ibus-mozc installed. Every time there is an update for both mozc-ut
and ibus-mozc
, paru
tries to install mozc
instead of updating mozc-ut
, even though the most up-to-date version of these packages both provide mozc
in the same version.
I think this happens because of this logic (see paru
output below):
-
mozc-ut
andibus-mozc
are installed in the previous version -
ibus-mozc
depends on the newmozc
version, which is not provided by the installed one (provided bymozc-ut
) -> add installingmozc
-
mozc
now conflicts with the installed previous version ofmozc-ut
I might very well be wrong with this and either me or the mozc
/mozc-ut
packagers messed something up, but the same constellation can be resolved and updated correctly by yay
. This happens on both my work and private system.
A workaround is first updating mozc-ut
explicitly by paru -S mozc-ut
and then running paru
again.
Output of pacman -Qi ibus-mozc
└─$ pacman -Qi ibus-mozc
Name : ibus-mozc
Version : 2.30.5595.102-1
Description : Mozc module for IBus
Architecture : x86_64
URL : https://github.com/google/mozc
Licenses : Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND NAIST-2003 AND Unicode-3.0 AND LicenseRef-Okinawa-Dictionary
Groups : None
Provides : None
Depends On : ibus>=1.4.1 mozc>=2.30.5595.102
Optional Deps : None
Required By : None
Optional For : mozc-ut
Conflicts With : None
Replaces : None
Installed Size : 4,57 MiB
Packager : Unknown Packager
Build Date : Fr 20 Sep 2024 01:17:13 CEST
Install Date : Fr 20 Sep 2024 01:24:40 CEST
Install Reason : Explicitly installed
Install Script : No
Validated By : None
Snippet from the PKGBUILD
of mozc
and mozc-ut
:
pkgname='mozc-ut'
pkgver=2.30.5618.102.20241010
pkgrel=1
pkgdesc='The Open Source edition of Google Japanese Input bundled with the UT dictionary'
arch=('x86_64')
url='https://github.com/google/mozc'
license=('Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND CC0-1.0 AND CC-BY-SA-3.0 AND CC-BY-SA-4.0 AND GPL-2.0-only AND GPL-2.0-or-later AND MIT AND NAIST-2003 AND Unicode-3.0 AND LicenseRef-Okinawa-Dictionary')
depends=('qt6-base')
makedepends=('bazel' 'git' 'python' 'qt6-base')
optdepends=('fcitx5-mozc-ut: Fcitx5 integration'
'ibus-mozc: IBus integration'
'emacs-mozc: Emacs integration')
provides=('mozc=2.30.5618.102')
conflicts=('mozc')
pkgname='mozc'
pkgver=2.30.5618.102
pkgrel=1
pkgdesc='The Open Source edition of Google Japanese Input'
arch=('x86_64')
url='https://github.com/google/mozc'
license=('Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND MIT AND NAIST-2003 AND Unicode-3.0 AND LicenseRef-Okinawa-Dictionary')
depends=('qt6-base')
makedepends=('bazel' 'git' 'python' 'qt6-base')
optdepends=('fcitx5-mozc-ut: Fcitx5 integration'
'ibus-mozc: IBus integration'
'emacs-mozc: Emacs integration')
conflicts=('mozc-ut')
Output
Include the FULL output of any relevant commands/configs
Don't cut parts of the input always include the FULL thing
paru.conf and pacman.conf are usually always relevant
:: Synchronizing package databases...
core downloading...
extra downloading...
community downloading...
multilib downloading...
:: Starting full system upgrade...
there is nothing to do
:: Looking for PKGBUILD upgrades...
:: Looking for AUR upgrades...
:: Resolving dependencies...
:: Calculating conflicts...
:: Calculating inner conflicts...
:: Inner conflicts found:
mozc: mozc-ut (mozc)
mozc-ut: mozc (mozc-ut)
:: Conflicting packages will have to be confirmed manually
:: marked out of date: fluffychat-bin httptoolkit-bin ida-free
Aur (3) mozc-2.30.5618.102-1 ibus-mozc-2.30.5618.102-1 mozc-ut-2.30.5618.102.20241010-1
:: Proceed to review? [Y/n]:
:: Downloading PKGBUILDs...
PKGBUILDs up to date
nothing new to review
==> Making package: mozc 2.30.5618.102-1 (Fr 11 Okt 2024 18:41:14 CEST)
==> Retrieving sources...
-> Updating mozc git repo...
-> Updating abseil-cpp git repo...
-> Updating breakpad git repo...
-> Updating googletest git repo...
-> Updating gyp git repo...
-> Updating japanese-usage-dictionary git repo...
-> Updating protobuf git repo...
From https://github.com/protocolbuffers/protobuf
- [deleted] (none) -> test_684569471
- [deleted] (none) -> refs/pull/18776/merge
f64d63ca7a..2e82a2d7bf main -> main
+ 185106cd4e...2e82a2d7bf refs/pull/18776/head -> refs/pull/18776/head (forced update)
-> Updating wil git repo...
==> Validating source files with sha256sums...
mozc ... Passed
abseil-cpp ... Passed
breakpad ... Passed
googletest ... Passed
gyp ... Passed
japanese-usage-dictionary ... Passed
protobuf ... Passed
wil ... Passed
==> Making package: mozc 2.30.5618.102-1 (Fr 11 Okt 2024 18:41:19 CEST)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving sources...
-> Updating mozc git repo...
-> Updating abseil-cpp git repo...
-> Updating breakpad git repo...
-> Updating googletest git repo...
-> Updating gyp git repo...
-> Updating japanese-usage-dictionary git repo...
-> Updating protobuf git repo...
-> Updating wil git repo...
==> Validating source files with sha256sums...
mozc ... Passed
abseil-cpp ... Passed
breakpad ... Passed
googletest ... Passed
gyp ... Passed
japanese-usage-dictionary ... Passed
protobuf ... Passed
wil ... Passed
==> Removing existing $srcdir/ directory...
==> Extracting sources...
-> Creating working copy of mozc git repo...
Cloning into 'mozc'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of abseil-cpp git repo...
Cloning into 'abseil-cpp'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of breakpad git repo...
Cloning into 'breakpad'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of googletest git repo...
Cloning into 'googletest'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of gyp git repo...
Cloning into 'gyp'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of japanese-usage-dictionary git repo...
Cloning into 'japanese-usage-dictionary'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of protobuf git repo...
Cloning into 'protobuf'...
done.
Switched to a new branch 'makepkg'
-> Creating working copy of wil git repo...
Cloning into 'wil'...
done.
Switched to a new branch 'makepkg'
==> Starting prepare()...
Submodule 'src/third_party/abseil-cpp' (https://github.com/abseil/abseil-cpp.git) registered for path 'third_party/abseil-cpp'
Submodule 'src/third_party/breakpad' (https://github.com/google/breakpad.git) registered for path 'third_party/breakpad'
Submodule 'src/third_party/gtest' (https://github.com/google/googletest.git) registered for path 'third_party/gtest'
Submodule 'src/third_party/gyp' (https://github.com/chromium/gyp.git) registered for path 'third_party/gyp'
Submodule 'src/third_party/japanese_usage_dictionary' (https://github.com/hiroyuki-komatsu/japanese-usage-dictionary.git) registered for path 'third_party/japanese_usage_dictionary'
Submodule 'src/third_party/protobuf' (https://github.com/protocolbuffers/protobuf.git) registered for path 'third_party/protobuf'
Submodule 'src/third_party/wil' (https://github.com/microsoft/wil.git) registered for path 'third_party/wil'
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/abseil-cpp'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/breakpad'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/gtest'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/gyp'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/japanese_usage_dictionary'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/protobuf'...
done.
Cloning into '/home/peet/.cache/paru/clone/mozc/src/mozc/src/third_party/wil'...
done.
Submodule path 'third_party/abseil-cpp': checked out '4447c7562e3bc702ade25105912dce503f0c4010'
Submodule path 'third_party/breakpad': checked out '216cea7bca53fa441a3ee0d0f5fd339a3a894224'
Submodule path 'third_party/gtest': checked out 'b514bdc898e2951020cbdca1304b75f5950d1f59'
Submodule path 'third_party/gyp': checked out '9ecf45e37677743503342ee4c6a76eaee80e4a7f'
Submodule path 'third_party/japanese_usage_dictionary': checked out 'e5b3425575734c323e1d947009dd74709437b684'
Submodule path 'third_party/protobuf': checked out '7cc670c1809e704ebeba90fb430d50e009f36727'
Submodule path 'third_party/wil': checked out 'fc5dbf55989fe20351c71d038a8d12de4b397a6d'
==> Sources are ready.
mozc-2.30.5618.102-1: parsing pkg list...
:: mozc-2.30.5618.102-1 is up to date -- skipping build
loading packages...
resolving dependencies...
looking for conflicting packages...
:: mozc-2.30.5618.102-1 and mozc-ut-2.30.5595.102.20240918-1 are in conflict. Remove mozc-ut? [y/N]
Interrupt signal received
[?25h
loading packages...
resolving dependencies...
looking for conflicting packages...
:: mozc-2.30.5618.102-1 and mozc-ut-2.30.5595.102.20240918-1 are in conflict. Remove mozc-ut? [y/N]
Interrupt signal received
[?25h
loading packages...
resolving dependencies...
looking for conflicting packages...
:: mozc-2.30.5618.102-1 and mozc-ut-2.30.5595.102.20240918-1 are in conflict. Remove mozc-ut? [y/N]
Interrupt signal received
[?25h
error: packages failed to build: ibus-mozc-2.30.5618.102-1 mozc-ut-2.30.5618.102.20241010-1
paru.conf
#
# $PARU_CONF
# /etc/paru.conf
# ~/.config/paru/paru.conf
#
# See the paru.conf(5) manpage for options
#
# GENERAL OPTIONS
#
[options]
PgpFetch
Devel
Provides
DevelSuffixes = -git -cvs -svn -bzr -darcs -always -hg -fossil
#AurOnly
#BottomUp
#RemoveMake
#SudoLoop
#UseAsk
#SaveChanges
#CombinedUpgrade
#CleanAfter
#UpgradeMenu
#NewsOnUpgrade
#LocalRepo
#Chroot
#Sign
#SignDb
#KeepRepoCache
#
# Binary OPTIONS
#
#[bin]
#FileManager = vifm
#MFlags = --skippgpcheck
#Sudo = doas
pacman.conf
#
# /etc/pacman.conf
#
# See the pacman.conf(5) manpage for option and repository directives
#
# GENERAL OPTIONS
#
[options]
# IgnorePkg =
# The following paths are commented out with their default values listed.
# If you wish to use different paths, uncomment and update the paths.
#RootDir = /
#DBPath = /var/lib/pacman/
CacheDir = /var/cache/pacman/pkg/
#LogFile = /var/log/pacman.log
#GPGDir = /etc/pacman.d/gnupg/
#HookDir = /etc/pacman.d/hooks/
HoldPkg = pacman glibc manjaro-system
#XferCommand = /usr/bin/curl -C - -f %u > %o
#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u
#CleanMethod = KeepInstalled
#UseDelta = 0.7
Architecture = auto
# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
#IgnorePkg =
#IgnoreGroup =
#NoUpgrade =
#NoExtract =
# Misc options
#UseSyslog
Color
#TotalDownload
# We cannot check disk space from within a chroot environment
CheckSpace
#VerbosePkgLists
# By default, pacman accepts packages signed by keys that its local keyring
# trusts (see pacman-key and its man page), as well as unsigned packages.
SigLevel = Required DatabaseOptional
LocalFileSigLevel = Optional
#RemoteFileSigLevel = Required
# NOTE: You must run `pacman-key --init` before first using pacman; the local
# keyring can then be populated with the keys of all official Manjaro Linux
# packagers with `pacman-key --populate archlinux manjaro`.
#
# REPOSITORIES
# - can be defined here or included from another file
# - pacman will search repositories in the order defined here
# - local/custom mirrors can be added here or in separate files
# - repositories listed first will take precedence when packages
# have identical names, regardless of version number
# - URLs will have $repo replaced by the name of the current repo
# - URLs will have $arch replaced by the name of the architecture
#
# Repository entries are of the format:
# [repo-name]
# Server = ServerName
# Include = IncludePath
#
# The header [repo-name] is crucial - it must be present and
# uncommented to enable the repo.
#
# The testing repositories are disabled by default. To enable, uncomment the
# repo name header and Include lines. You can add preferred servers immediately
# after the header, and they will be used before the default mirrors.
[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.
[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist
# An example of a custom package repository. See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs