On 09/27/2014 02:13 AM, Ralf Mardorf wrote:
On Sat, 2014-09-27 at 10:02 +0200, Florian Pelz wrote:
Same here. With only NoExtract, I linked /bin/sh to dash, reinstalled
bash, and /bin/sh was gone. With both NoExtract and NoUpgrade, I did
the same and /bin/sh was still a link to dash.
My bad, until now I'm using NoExtract for files I don't want to have, I
wasn't aware that a file or link we want to have gets lost.
Okay, so I wasn't *completely* losing my mind (what little of it there is!).
Here's what I think is happening (probably wrong, but this is what I've
deduced from further reading and some strace fun):
Since (re)installing over an existing package first removes its
constituent files, NoExtract alone results in the reinstallation process
removing bash (and the /usr/bin/sh link). But, since the file is
specified as NoExtract, the link/file isn't recreated during package
extraction (it's skipped). NoUpgrade, on the other hand, prevents the
file from being removed (reinstallation must therefore be considered as
an "upgrade" for this purpose) but if it's not also specified by
NoExtract, it's immediately overwritten by the new copy.
So, if my understanding is correct, this would explain why both options
must be used in order to keep something relatively unscathed. NoUpgrade
prevents its removal (or more accurately it "prevents its upgrade");
NoExtract prevents it from being overwritten.
Disclaimer: I haven't looked at the pacman sources yet. This is
exclusively from observation and what my (admittedly very limited)
understanding of pacman provides.
Benjamin