bin/54446: pkg_delete doesn't honour symlinks, portupgrades leads to failing services (i.e. squid)

Andreas Klemm andreas at klemm.apsfilter.org
Sun Jul 13 10:00:35 PDT 2003


>Number:         54446
>Category:       bin
>Synopsis:       pkg_delete doesn't honour symlinks, portupgrades leads to failing services (i.e. squid)
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Jul 13 10:00:32 PDT 2003
>Closed-Date:
>Last-Modified:
>Originator:     Andreas Klemm
>Release:        FreeBSD-current
>Organization:
FreeBSD
>Environment:
System: FreeBSD titan.klemm.apsfilter.org 5.1-CURRENT FreeBSD 5.1-CURRENT #0: Sat Jul 12 16:46:09 CEST 2003 root at titan.klemm.apsfilter.org:/usr/src/sys/i386/compile/TITAN i386

FreeBSD 5.2-current and all other FreeBSD releases

Always happended to me when upgrading squid on a machine, since
I always use symlinks to move the cache to a larger directory than
/usr/local ...

>Description:

Upgrade of squid port brings squid into non operational state,
if the toplevel of the data directory (/usr/local/squid) is a symlink
(to /var/squid for example) and not a real directory.

I assume the reason is, that pkg_delete doesn't honor symlinks.

The toplevel directory of squid data and logs (/usr/local/squid)
would normally not being removed by pkg_delete, if there are additional
files under /usr/local/squid/{cache, logs}. This is the case, if you
use squid for a while and then upgrade the port.

But if its a symlink then /usr/local/sqzid will be deleted and
the upgrade of the port installs the usual fresh/empty /usr/local/squid
data directory ...

The result is a dying squid that doesn't find its data directory.

This behaviour should be changed in pkg_delete to make upgrade of
ports more smoothly / reliable, if part of a large tree had to be moved
away.

Since this could also be a subtree somewhere under /usr/local/squid,
pkg_delete should alway check, if file is a symlink and follow.

>How-To-Repeat:

	install squid from ports
	mv /usr/local/squid /var/squid
	ln -s /var/squid /usr/local/squid
	squid -z
	Then remove and reinstall the squid port or
	perform:
	portupgrade -af
	All squid ports of today and in the past have the negativ side
	effect, that the symlink /usr/local/squid to the real data
	directory /var/squid simply gets removed.

>Fix:

	no fix available at this time.

	I assume, that the pkg_delete is the culprit, it doesn't know about
	symlinks ....
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list