it thinks that if the metalog init script still exists, then even though it isn't loaded, it's still proviging logger service. So it refused to replace metalog with syslog-ng in the dependency tree. I had to remove the metalog init script and retry adding syslog-ng in place. Reproducible: Didn't try Steps to Reproduce: 1. rc-update del metalog default && /etc/init.d/metalog stop && emerge unmerge metalog 2.emerge syslog-ng && cp /etc/syslog-ng/syslog-ng.conf.sample /etc/syslog-ng/syslog-ng.conf && rc-update add syslog-ng default && /etc/init.d/syslog-ng start 3.after the rc-update adding syslog-ng you see a PROVIDE: error stating it's a bad idea to have two things perform the same service. Then on reboot not all services load and same error is given.
Note - friend of the reporter, actually discovered and worked around this bug for her. This report *is* a reproduction of a bug I encountered on her other computer a few days previously, also while attempting to replace metalog with syslog-ng.
Check the 'need' dep type. If the script for example 'need logger', then it will have to find the script that provide logger, and thus this 'feature'. This bug is invalid ... you NEED to remove the script that you do not want to provide logger, or at least edit it. This is so that there will be no confusion.
On the contrary, I believe this bug is still serious. The workaround (deleting the "obsolete" init script) is not obvious to someone who doesn't know (and is not experienced enough to guess) the internal workings of the rc-script system. The metalog script has been removed from the requested set of loaded scripts, and the syslog-ng script has been requested in it's place. Given that there is therefore a tie between the two when "searching for a dependency resolution", surely it can use the fact that one is requested (and the other isn't) to resolve that tie? Even better, make scripts that PROVIDE the same virtual service, explicitly mutually exclusive, so that adding one to the requested set will remove the other, and loading one manually will unload the other. The combination of these two suggestions would resolve this bug and make rc-scripts more user-friendly.
Read up on 'need' and how it works, and then please comment again. Ill go for a more clear warning, but that is it.