Open manuel-192 opened 5 years ago
I like the 3rd one. Maybe @lots0logs would you be so kind to make a script that checks that? No rush...
I wrote a little bash script to check packages inside packages.xml. If it helps anything, feel free to use or modify it. It uses pacman and yay to get package info, and probably could be much faster by reading all package databases instead of using pacman or yay for each package.
#!/bin/bash Main() { local file=/usr/share/cnchi/data/packages.xml local pkg line lines ix local okcount=0 failcount=0 local failedpkgs failreasons readarray -t lines <<< "$(grep '' $file)" for line in "${lines[@]}" ; do pkg=$(echo "$line" | sed -e 's|.*$||' -e 's|^.*>||') case "$pkg" in base | base-devel) continue ;; esac echo "$pkg" if [ "$(pacman -Si "$pkg")" != "" ] ; then ((okcount++)) else if [ "$(yay -Si "$pkg" 2>/dev/null | grep "^Repository " | grep ": aur")" != "" ] ; then echo "Package '$pkg' is in AUR." failreasons+=("AUR") else failreasons+=("missing") fi failedpkgs+=("$pkg") ((failcount++)) fi done echo "$okcount succeeded, $failcount failed." if [ $failcount -ne 0 ] ; then echo "Failed packages:" ix=0 for pkg in "${failedpkgs[@]}" ; do echo " $pkg: ${failreasons[$ix]}" ((ix++)) done fi } Main "$@"
Noticed a minor bug in the end of the script. Should be fixed now.
For the current cnchi 0.16.21-2 package the script gives the following failure output after all package names. Hopefully I haven't misunderstood the package list.
679 succeeded, 7 failed. Failed packages: xorg-mkfontdir: missing gamin: AUR kdesudo: AUR deepin-grub2-themes: missing thermald: AUR gtk3-print-backends: missing vivaldi: AUR
Tried to edit the script above to ignore commented lines in packages.xml, but github's editor trashes all changes...
Problem
Official packages from time to time get moved to AUR. Sometimes this causes problems for cnchi if packages.xml includes the package just moved to AUR.
Solution alternatives
This could be solved/worked around in cnchi by at least the following alternative ways:
Ignore the missing package, and don't fail the install. Just warn the user. Often the removed package has been included into another existing package, so this probably works in many cases. If the install succeeds, remove the missing package from the master packages.xml, automatically if possible?
Check if the package exists in AUR and use it. But this may lead to security issues? Probably not so great idea after all.
On some Antergos server, create a process that checks the true existence of the packages listed in packages.xml. When a package is no more available, update (or prepare the update) the master packages.xml accordingly. This would speed up required changes for packages.xml.
Maybe the alternative 3. is the best. Alternative 1. is also possible and quite easy (I guess) to implement.
Caveats
Automatic removal of packages from packages.xml may still cause problems if the a package is only temporarily missing. So I guess manual intervention is always needed at some stage.