Making 'make upgrade' work from LiveCD, without sources
Chris Pressey
cpressey at catseye.mine.nu
Sat Aug 6 15:40:01 PDT 2005
Hi,
Per the conversation in users@ a while ago, attached is a patch which
allows 'make upgrade' to work without a src directory, i.e. from the
LiveCD. It's still pretty rough, so consider it a first cut posted for
feedback.
- src/nrelease/Makefile installs a couple of extra things into /etc on
the install image. (Namely the Makefiles from src/etc, src/etc/isdn,
src/etc/periodic, and the arch-specific etc subdir.)
- src/etc/Makefile is substantially modified, especially the upgrade_etc
and preupgrade targets. Two new make variables have been added:
BINARY_UPGRADE - defined only when src is unavailable
UPGRADE_SRCDIR - directory from which to get upgrade files
(defaults to .CURDIR)
All of the places in upgrade_etc that used to refer to .CURDIR now
refer to UPGRADE_SRCDIR instead, and many commands are conditional
upon BINARY_UPGRADE. The upgrade can be invoked from the LiveCD
by:
make -f /etc/Makefile \
__MAKE_CONF=${BASE}/etc/make.conf \
BINARY_UPGRADE=YES \
UPGRADE_SRCDIR=/etc/ \
DESTDIR=${BASE}
where ${BASE} is where the target system is mounted, generally /mnt.
A couple of the things that 'make upgrade' upgrades, like /dev and
/usr/share, can just be copied from the CD using 'cpdup', so the
commands to install them are skipped in the Makefile.
Upgrading /etc/mail using the Makefiles would be quite ugly/hackish, so
likewise I've left it outside the scope of this. The files
etc/mail/helpfile, etc/mail/dragonfly.mc, and
etc/mail/dragonfly.submit.mc can be copied manually. There seems to be
an existing problem here, though: etc/mail/README suggests that the
administrator alter the file dragonfly.submit.mc, directly, but 'make
upgrade' in src/etc/sendmail overwrites dragonfly.submit.mc. This
suggests that something somewhere needs to be rethought, but since I've
never used sendmail, I couldn't say what that would be.
Comments?
-Chris
Index: etc/Makefile
===================================================================
RCS file: /servhome/dcvs/src/etc/Makefile,v
retrieving revision 1.82
diff -u -r1.82 Makefile
--- etc/Makefile 6 Aug 2005 11:36:13 -0000 1.82
+++ etc/Makefile 6 Aug 2005 19:19:36 -0000
@@ -14,9 +14,13 @@
rc rc.firewall6 \
rc.sendmail rc.shutdown \
rc.subr rpc services \
- etc.${MACHINE_ARCH}/disktab \
- ${.CURDIR}/../usr.bin/mail/misc/mail.rc \
+ etc.${MACHINE_ARCH}/disktab
+.if defined(BINARY_UPGRADE) # Binary upgrade gets these from a diff place
+BINUPDATE+=mail.rc locate.rc
+.else
+BINUPDATE+=${.CURDIR}/../usr.bin/mail/misc/mail.rc \
${.CURDIR}/../usr.bin/locate/locate/locate.rc
+.endif
# Initial distribution files are installed read-write (644)
#
@@ -29,8 +33,12 @@
pf.conf phones printcap profile \
remote \
shells sysctl.conf syslog.conf usbd.conf \
- etc.${MACHINE_ARCH}/ttys \
- ${.CURDIR}/../gnu/usr.bin/man/manpath/manpath.config
+ etc.${MACHINE_ARCH}/ttys
+.if defined(BINARY_UPGRADE) # Binary upgrade gets these from a diff place
+BIN1+= manpath.config
+.else
+BIN1+= ${.CURDIR}/../gnu/usr.bin/man/manpath/manpath.config
+.endif
.if exists(${.CURDIR}/../crypto) && !defined(NO_OPENSSL)
.if !defined(NO_OPENSSH)
@@ -70,69 +78,88 @@
# from /usr/lib.
COMPAT_LIBS != cd ${DESTDIR}/usr/lib/compat; ls
+# Use this directory as the source for new configuration files when upgrading
+UPGRADE_SRCDIR?=${.CURDIR}
+
distribute:
cd ${.CURDIR} ; ${MAKE} distribution DESTDIR=${DISTDIR}/${DISTRIBUTION}
preupgrade:
.if !defined(NO_SENDMAIL)
- (pw groupshow smmsp -q > /dev/null) || \
- pw groupadd smmsp -g 25
- (pw usershow smmsp -q > /dev/null) || \
- pw useradd smmsp -u 25 -c "Sendmail Submission User" \
+ (pw -V ${DESTDIR}/etc groupshow smmsp -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc groupadd smmsp -g 25
+ (pw -V ${DESTDIR}/etc usershow smmsp -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc useradd smmsp -u 25 \
+ -c "Sendmail Submission User" \
-d /var/spool/clientmqueue -s /sbin/nologin
.endif
- (pw usershow _pflogd -q > /dev/null) || \
- pw useradd _pflogd -u 64 -c "pflogd privsep user" \
+ (pw -V ${DESTDIR}/etc usershow _pflogd -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc useradd _pflogd -u 64 \
+ -c "pflogd privsep user" \
-d /var/empty -s /sbin/nologin
- (pw usershow _ntp -q > /dev/null) || \
- pw useradd _ntp -u 65 -c "ntpd privsep user" \
+ (pw -V ${DESTDIR}/etc usershow _ntp -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc useradd _ntp -u 65 \
+ -c "ntpd privsep user" \
-d /var/empty -s /sbin/nologin
- (pw groupshow authpf -q > /dev/null) || \
- pw groupadd authpf -g 63
- (pw groupshow _pflogd -q > /dev/null) || \
- pw groupadd _pflogd -g 64
- (pw groupshow _ntp -q > /dev/null) || \
- pw groupadd _ntp -g 65
+ (pw -V ${DESTDIR}/etc groupshow authpf -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc groupadd authpf -g 63
+ (pw -V ${DESTDIR}/etc groupshow _pflogd -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc groupadd _pflogd -g 64
+ (pw -V ${DESTDIR}/etc groupshow _ntp -q > /dev/null) || \
+ pw -V ${DESTDIR}/etc groupadd _ntp -g 65
upgrade_etc: preupgrade
- cd ${.CURDIR}/../share/mk; ${MAKE} install
- cd ${.CURDIR}; \
+.if !defined(BINARY_UPGRADE) # already handled by binary upgrade
+ cd ${UPGRADE_SRCDIR}/../share/mk; ${MAKE} install
+.endif
+ cd ${UPGRADE_SRCDIR}; \
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${BINUPDATE} ${DESTDIR}/etc; \
cap_mkdb ${DESTDIR}/etc/login.conf; \
${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 555 \
${BIN2} ${DESTDIR}/etc;
- cd ${.CURDIR}/defaults; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
+ cd ${UPGRADE_SRCDIR}/defaults; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${DEFAULTS} ${DESTDIR}/etc/defaults
- cd ${.CURDIR}/periodic; ${MAKE} install
- cd ${.CURDIR}/rc.d; ${MAKE} install
- cd ${.CURDIR}/../share/termcap; ${MAKE} etc-termcap
- cd ${.CURDIR}/../usr.sbin/rmt; ${MAKE} etc-rmt
+ cd ${UPGRADE_SRCDIR}/periodic; ${MAKE} install
+ cd ${UPGRADE_SRCDIR}/rc.d; ${MAKE} install
+ # ../share/termcap/make etc-termap expanded inline here:
+ ${LN} -fs ${BINDIR}/misc/termcap ${DESTDIR}/etc/termcap
+ # ../usr.sbin/rmt/make etc-rmt expanded inline here:
+ rm -f ${DESTDIR}/etc/rmt
+ ${LN} -s ${BINDIR}/rmt ${DESTDIR}/etc/rmt
.for pamconf in README convert.sh
.if !exists(${DESTDIR}/etc/pam.d/${pamconf})
- ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 ${.CURDIR}/pam.d/${pamconf} ${DESTDIR}/etc/pam.d
+ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 644 \
+ ${UPGRADE_SRCDIR}/pam.d/${pamconf} ${DESTDIR}/etc/pam.d
.endif
.endfor
+# XXX Binary upgrade currently handles this by copying all of /etc/mail
+.if !defined(BINARY_UPGRADE)
.if !defined(NO_SENDMAIL)
- cd ${.CURDIR}/sendmail; ${MAKE} upgrade
+ cd ${UPGRADE_SRCDIR}/sendmail; ${MAKE} upgrade
+.endif
.endif
.if !defined(NO_I4B)
- cd ${.CURDIR}/isdn; ${MAKE} install
+ cd ${UPGRADE_SRCDIR}/isdn; ${MAKE} install
.endif
+.if !defined(BINARY_UPGRADE) # already handled by binary upgrade
.if !defined(NO_MAKEDEV)
- cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 555 \
+ cd ${UPGRADE_SRCDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 555 \
MAKEDEV.local MAKEDEV ${DESTDIR}/dev
.if !defined(NO_MAKEDEV_RUN)
cd ${DESTDIR}/dev; sh MAKEDEV all
.endif
.endif
- cd ${.CURDIR}/mtree; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
+.endif
+ cd ${UPGRADE_SRCDIR}/mtree; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${MTREE} ${DESTDIR}/etc/mtree
- cd ${.CURDIR}/..; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
+.if !defined(BINARY_UPGRADE) # already handled by binary upgrade
+ cd ${UPGRADE_SRCDIR}/..; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${FREEBSD} ${DESTDIR}/
.if !defined(NOMAN)
cd ${.CURDIR}/../share/man; ${MAKE} makedb
.endif
+.endif
rm -f ${DESTDIR}/usr/include/machine/ioctl_meteor.h
rm -f ${DESTDIR}/usr/include/machine/ioctl_bt848.h
${LN} -s "../dev/video/bktr/ioctl_bt848.h" ${DESTDIR}/usr/include/machine/ioctl_bt848.h
Index: nrelease/Makefile
===================================================================
RCS file: /servhome/dcvs/src/nrelease/Makefile,v
retrieving revision 1.39
diff -u -r1.39 Makefile
--- nrelease/Makefile 2 Aug 2005 17:57:14 -0000 1.39
+++ nrelease/Makefile 6 Aug 2005 18:27:16 -0000
@@ -160,6 +160,17 @@
rm -rf `find ${ISOROOT} -type d -name CVS -print`
rm -rf ${ISOROOT}/usr/local/share/pristine
pwd_mkdb -p -d ${ISOROOT}/etc ${ISOROOT}/etc/master.passwd
+.for UPGRADE_ITEM in Makefile \
+ etc.${MACHINE_ARCH} \
+ isdn/Makefile \
+ rc.d/Makefile \
+ periodic/Makefile \
+ periodic/daily/Makefile \
+ periodic/security/Makefile \
+ periodic/weekly/Makefile \
+ periodic/monthly/Makefile
+ cp -R ${.CURDIR}/../etc/${UPGRADE_ITEM} ${ISOROOT}/etc/${UPGRADE_ITEM}
+.endfor
pkgcleaniso:
rm -f ${ISOROOT}/tmp/chrootscript
More information about the Submit
mailing list