Smart almost stable on SUSE
There are many reports around about Smart freezing on SUSE. Niemeyer (Smart’s main coder) and I are working to solve this and here’s what we’ve found out so far.
SUSE runs a non-pached RPM 4.1.1 (old) with a known bug that makes child threads to not return SIGCHLD in very specific cases (some strange specific %post scripts), which makes it very difficult to track from Smart. This is a known issue, and has been corrected on many other distros when they were using this same version, although most are now using newer releases, which don’t have the bug. We think it’s not easy to solve that way, since we couldn’t find strong arguments to justfy the upgrade of RPM on SUSE.
There are a few workarounds for that, and the easiest one is using Smart into stepped mode (option “–stepped” on the command line). This can be explained because the more packages you enqueue on the same transaction, the more you raise the probability of a missing thread somewhere. So breaking each transaction into smaller sub-transactions would slow down thread creation and possibly avoid freezing. There are other tricks that can be done on the code level, but we prefer not to suggest them since we’re not sure about long term results using it.
The fact is that YaST and YOU won’t have the same problem since they work on a higher level from RPM. Smart threats packages on a more refined way, and deals directly with the rpm libraries, while YaST works almost like a wrapper, so it doesn’t see the same level of details as Smart does. Maybe that’s why SUSE never bothered upgrading RPM.
So, we’re absolutely sure that it’s NOT an Smart issue (no way). It’s really a problem on how RPM works with many concurrent threads on the same transacion, and this bug only exist on RPM 4.1 and older, but SUSE didn’t bother upgrading yet, and we haven’t asked it since we want to avoid biger problems that could possibly be caused by such upgrade on a stable release.
Bottom line, it’s just a matter of time for us to come up with a solution. Meanwhile, patience is a virtue. 😉