ports/162049: The Ports tree lacks a framework to restart services

Miroslav Lachman 000.fbsd at quip.cz
Thu Oct 27 16:00:24 UTC 2011



Wesley Shields wrote:
> On Thu, Oct 27, 2011 at 11:15:00AM +0200, Ed Schouten wrote:
>> Hi folks,
>>
>> As crees@ suggested, I'm sending an email to ports@ about this.
>>
>> What really bothers me when I use the FreeBSD Ports tree on one of my
>> systems, is that the behaviour of dealing with services is quite
>> inconsistent. As mentioned in the PR:
>
> I agree inconsistency is a problem that could be addressed, but I don't
> particularly agree with some of your statements.
>
>> - If I upgrade Apache, MySQL or PostgreSQL, it does not restart the
>>    service, meaning it won't use the freshly installed daemon. This has
>>    potential security issues.
>
> I'd prefer that no services are started or stopped automatically, unless
> absolutely necessary for the upgrade.
>
>> - If I upgrade Dovecot, it shuts it down during the upgrade, but won't
>>    restart it. This means that I have to watch portmaster to complete and
>>    must not forget to restart Dovecot afterwards.

Also Smartd from SmartMonTools and MySQL are stopped during upgrade process.

- There are some ports touching user modified files on install / 
uninstall. For example some Apache modules are touching httpd.conf which 
is not good in some cases. If I upgrade mod_bw or mod_proctitle, it 
removes (comment out) the LoadModule line on uninstall phase and not 
enable it again on install phase of new version. So I must manually edit 
httpd.conf after each upgrade before Apache restart.

> Unless it is absolutely necessary to stop and restart dovecot during an
> upgrade I would like to see this removed.

I think the main problem is that there is no difference between 
Uninstall and Upgrade (from ports perspective).
It can be OK to shutdown daemon on uninstall. But somebody wants to 
restart services on upgrade and somebody wants to keep them running. 
Both have pros and cons.

As mentioned above with Apache modules case, if there will be way to 
distinguish between uninstall and upgrade, then there will be ways to 
handle this problems more carefully.
But intil then I vote for removing all custom "stop" / "restart" / "edit 
files" on per port basis - because it is inconsistent and unpredictable.

>> My question is whether anyone has ever attempted to improve the
>> integration with rc-scripts? In the PR I propose something along these
>> lines:
>>
>> 	We know exactly which ports install rc scripts (USE_RC_SUBR).
>> 	Why not run `/usr/local/etc/rc.d/${FOO} status' and
>> 	`/usr/local/etc/rc.d/${FOO} stop' prior to installation. Based
>> 	on the return value of the first, we can run
>> 	`/usr/local/etc/rc.d/${FOO} start' after installation.
>
> I'm of the opinion that ports/packages should not touch running services
> unless absolutely necessary.

I think that the best would be to do some user configurable hooks on 
install / uninstall / upgrade actions in similar way as portupgrade does 
it. (e.g. somebody may want to stop another service before upgrade 
[restart] of mysql-server)

Miroslav Lachman


More information about the freebsd-ports mailing list