FS#38396 - conflict/dependency ignore switch dysfunctional resulting in broken system

Attached to Project: Pacman
Opened by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 15:10 GMT
Last edited by Allan McRae (Allan) - Monday, 06 January 2014, 15:26 GMT
Task Type Bug Report
Category General
Status Closed
Assigned To No-one
Architecture x86_64
Severity High
Priority Normal
Reported Version 4.1.2
Due in Version Undecided
Due Date Undecided
Percent Complete 100%
Votes 0
Private No

Details

Summary and Info:

Sdd, nodeps, force or whatever weird combination required, as of recent, should ignore conflicts and dependencies. If conflicts are exempt (by god why?), there must be a way to ignore conflicts. Even better, there should be means to ignore specific conflicting packages either all the time or at least somehow.

Man page:

"--nodeps
Skips dependency version checks. Package names are still checked. Normally, pacman will
always check a package’s dependency fields to ensure that all dependencies are installed
and there are no package conflicts in the system. Specify this option twice to skip all
dependency checks.
"

Steps to Reproduce:

1. Install Archlinux
2. Wait for some random update constellation that occurs all the time somehow since the advent of Archlinux and doesn't turn out to work
3. End up with a cascading mess of package removals and nodeps-force installations, just to get around this bug, and hope that it doesn't involve removing coreutils or anything crucial
This task depends upon

Closed by  Allan McRae (Allan)
Monday, 06 January 2014, 15:26 GMT
Reason for closing:  Not a bug
Comment by Allan McRae (Allan) - Monday, 06 January 2014, 15:26 GMT
I look at the log and see nothing but an extreme case of PEBKAC. The amount of stupid in this command is uncharted:

pacman -Sddddddd --nodeps --nodeps --force --ignore xorg-server --ignoregroup xorg-server xf86-input-evdev

What your problem boils down to is the nvidia dirvier does not work with the new xorg. But for some reason you want to ignore the strong hint provided by the conflict and upgrade xorg-server anyway. While ignoring xorg-server? Seriously, WTF do you expect this to do:

pacman -Sddddddd --nodeps --nodeps --force --ignore xorg-server --ignoregroup xorg-server xorg-server

Remove the Arch [testing] repository from you pacman.conf. Do a "pacman -Syuu".
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 15:51 GMT
Sorry, but you ridicule a very valid and general point of improvement I made without any second thought to it.

1. If the new nvidia-utils doesn't work with the xorg-server from the testing repository, and I answer that I don't want to remove it, pacman should naturally pull the appropriate xorg-server package version that works instead of blocking the whole process. Anything else doesn't make much sense in the end. Now I will probably be removing the testing repository, install xorg-server, then add it again. Or in other words: manually emulate that behavior.

2. If you looked through the chain of commands, you notice that I had to nodeps-force-remove xorg-server, just to install xf86-input-evdev and then reinstall xorg-server again! This kind of (effectively) nonsensical and often circular package blocking occurs all the time and is what I am talking about here. In the past (many many years ago), it actually went down to pacman requiring you to remove coreutils (if you didn't do some tricks with ignore switches) before you could reinstall everything with a boot CD. This ridiculousness had also been frequent on Gentoo and was one of the main reasons that portage failed at each and every update process. Don't know if they fixed it in the last years.

3. Iirc, -Rd first became -Rdd, then -Rdd ceased working and only --nodeps worked. Something similar happened to the -f switch for all I know. But you might imagine that I don't obsessively read the pacman Changelog every other day. So I don't really know how much worse that command got in the last year. I am annoyed and I exaggerated on the absurdity of it.

4. Often package conflicts are overly restrictive and unnecessary for the purpose. The best example is, that you can in fact install xf86-video-intel in parallel with nvidia drivers and it works _flawlessly_ without intel DRI. But because intel-dri is a dependency of xf86-video-intel, it is blocked by pacman. There is no way to ignore that conflict in an update process, you have to manually remove and install it with each update. I already reported this and it also was ignored.

Bottom line is: pacman is just a tool, I am a human being and if I wanted to install something I should be allowed to because I always win on intelligent decision capabilities. A tool should do what you want it to do and not hog your time because it imposes restrictions which you can look far beyond. If it doesn't work, I will just do something else.
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 16:04 GMT
I don't want to be offensive, but I am very blunt about this.

Just look at the chain of commands and how necessary it all was.

Pacman is a great package manager, I love Archlinux, but this is just annoying. And it is annoying in that aspect without any reason other than questioning the intelligence of the user. If you think it thought at least.
Comment by Dave Reisner (falconindy) - Monday, 06 January 2014, 16:10 GMT
> I don't want to be offensive, but I am very blunt about this.
Maybe you should be correct rather than blunt.
Comment by Allan McRae (Allan) - Monday, 06 January 2014, 16:16 GMT
The only thing potentially valid here is #4. There is a simple way around it. When you hit an upgrade conflict with xf86-video-intel, doing "pacman -Sdd xf86-video-intel; pacman -Su" does what you want without uninstalling and reinstalling anything.
Comment by Allan McRae (Allan) - Monday, 06 January 2014, 16:18 GMT
And your second attachment of circular nonsense is because you had a mix of [testing] and [extra] packages. If you did the "pacman -Syuu" like I mention, pacman would have fixed it all for you...
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 16:21 GMT
> Maybe you should be correct rather than blunt.

What is that even supposed to mean? I demonstrated the case and I didn't make this stuff up or whatever you seem to be implying here.

Point #2: In this case, just one package. But nonetheless true. The block was effectively nonsensical, just look at the log.

Point #1: You could call that essentially the root of the whole problem and I realize it isn't a bug but a missing feature.

Point #3: I have no clue about the history of those command changes, all I know is that -d would ignore dependencies, -f would force, just what you naturally expect it to do. And then it didn't. I don't know the reasons it was changed, and I don't really care. Neither is it my hobby to read and meticulously interpret manpages, changelogs and source code all day.

Point #4: Absolutely true.
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 16:22 GMT
> And your second attachment of circular nonsense is because you had a mix of [testing] and [extra] packages. If you did the "pacman -Syuu" like I mention, pacman would have fixed it all for you...

Supposing, that I wanted to remove (=downgrade) all the testing packages. Which I don't.
Comment by Allan McRae (Allan) - Monday, 06 January 2014, 16:27 GMT
Well then... "pacman -Sy xorg-server xorg-evdev nvidia" would have done everything you did in one command.
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 16:35 GMT
I actually forgot that.

Why does it block, instead of automatically pulling the appropriate version?

I can't imagine that that is so hard to implement.
Comment by Mathias Steiger (mathiassteiger) - Monday, 06 January 2014, 16:44 GMT
> Well then... "pacman -Sy xorg-server xorg-evdev nvidia" would have done everything you did in one command.

Just to note on that ... It would have done everything for me if:

1. I knew each and every package version and which repository it came from on my PC off the top of my head
2. I looked up and memorized all the package conflicts in advance, before I executed any commands

Otherwise, you end up with the command schema you see in the log, which is just the basic trial and error approach and the quickest way to get anywhere.

Loading...