I don't know if there's a native way to do it, but what I've done in the past is have all the packages check in %pre
if the target service is running (e.g. httpd
). If it is, shut it down and use at
to have it restart in a reasonable amount of time in the future (like two minutes). Each RPM also checks if the restart is already in the queue (I used a random queue like "n" or something), and if it is, it bumps it out for another two minutes. The end result should be the server comes up only one time, two minutes after the final package is installed.
Drawback: Even though at
is in the LSB, for some reason a handful of machines didn't have it installed, so I had to add it to my Requires
tag.