Bug in mergemaster(8) when used in service jails (scheme
described in chapter 15.6.1 of the handbook)
Doug Barton
dougb at FreeBSD.org
Mon May 11 04:50:05 UTC 2009
Very interesting, thanks. I will have to educate myself a little bit
more about this issue.
Doug
Jeremie Le Hen wrote:
> Hi Doug,
>
> In the chapter 15.6.1 of the handbook, "Service jails", the last part
> explains how to upgrade jails. The last step is to run mergmaster(8) in
> each jail.
>
> The problem is that in service jails /etc is a symlink to /s/etc, /s
> being the readable/writable filesystem. mtree(8) stumbles on /etc being a
> symlink instead of a directory and doesn't proceed futher down into /etc to
> check files. Consequently, ${CHANGED} is empty and all customized
> configuration are overwritten with their default version.
>
> I've fixed mergemaster(8) with the following patch:
>
> % Index: mergemaster.sh
> % ===================================================================
> % RCS file: /mnt/space/cvsroot/src/usr.sbin/mergemaster/mergemaster.sh,v
> % retrieving revision 1.69
> % diff -u -r1.69 mergemaster.sh
> % --- mergemaster.sh 23 Mar 2009 14:42:41 -0000 1.69
> % +++ mergemaster.sh 10 May 2009 11:05:32 -0000
> % @@ -461,7 +461,7 @@
> % #
> % CHANGED=
> % if [ -n "${AUTO_UPGRADE}" -a -f "${DESTDIR}${MTREEFILE}" ]; then
> % - for file in `mtree -eq -f ${DESTDIR}${MTREEFILE} -p ${DESTDIR}/ \
> % + for file in `mtree -eqL -f ${DESTDIR}${MTREEFILE} -p ${DESTDIR}/ \
> % 2>/dev/null | awk '($2 == "changed") {print $1}'`; do
> % if [ -f "${DESTDIR}/$file" ]; then
> % CHANGED="${CHANGED} ${DESTDIR}/$file"
>
> Regards,
More information about the freebsd-current
mailing list