# Set the backup parameters if they are not already defined
#
-WORLD_BACKUP?= /var/backups/world_binaries
-DAYS_BACKUP?= 28
-.if exists(${WORLD_BACKUP}/lastbackup)
-BK_REFERENCE!= date +'%s'
-BK_EXPIRES!= expr ${DAYS_BACKUP} \* 86400 + `cat ${WORLD_BACKUP}/lastbackup`
-. if ${BK_REFERENCE} > ${BK_EXPIRES}
-BACKUP_EXPIRED= yes
-. endif
-.else
-NEVER_BACKED_UP= yes
-.endif
+WORLD_BACKUP?= /var/backups/world_backup
+AUTO_BACKUP= ${OBJTREE}/world_backup
# temporary until everybody has converted to x86_64
.if ${MACHINE_ARCH} == "amd64"
.ORDER: ${WMAKE_TGTS}
.ORDER: _obj _includes
.ORDER: _mtreetmp _obj
+.ORDER: installcheck backupworld-auto
#
# installcheck
#
# Installs everything compiled by a 'buildworld'.
#
-installworld: installcheck
+installworld: installcheck backupworld-auto
cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}
${INSTALL} -o root -g wheel -m 644 ${.CURDIR}/Makefile_upgrade.inc ${DESTDIR}/etc/upgrade/
@rm -rf ${WORLD_BACKUP}/sbin ${WORLD_BACKUP}/bin \
${WORLD_BACKUP}/usr.sbin ${WORLD_BACKUP}/usr.bin \
${WORLD_BACKUP}/usr.libexec
- cp -a /sbin ${WORLD_BACKUP}/sbin
cp -a /bin ${WORLD_BACKUP}/bin
- cp -a /usr/sbin ${WORLD_BACKUP}/usr.sbin
+ cp -a /sbin ${WORLD_BACKUP}/sbin
cp -a /usr/bin ${WORLD_BACKUP}/usr.bin
+ cp -a /usr/lib ${WORLD_BACKUP}/usr.lib
+ cp -a /usr/sbin ${WORLD_BACKUP}/usr.sbin
cp -a /usr/libexec ${WORLD_BACKUP}/usr.libexec
- @date +'%s' > ${WORLD_BACKUP}/lastbackup
+
+backupworld-auto:
+ @mkdir -p ${AUTO_BACKUP}
+ @chflags -R noschg ${AUTO_BACKUP}
+ @rm -rf ${AUTO_BACKUP}/sbin ${AUTO_BACKUP}/bin \
+ ${AUTO_BACKUP}/usr.sbin ${AUTO_BACKUP}/usr.bin \
+ ${AUTO_BACKUP}/usr.libexec
+ cp -a /bin ${AUTO_BACKUP}/bin
+ cp -a /sbin ${AUTO_BACKUP}/sbin
+ cp -a /usr/bin ${AUTO_BACKUP}/usr.bin
+ cp -a /usr/lib ${AUTO_BACKUP}/usr.lib
+ cp -a /usr/sbin ${AUTO_BACKUP}/usr.sbin
+ cp -a /usr/libexec ${AUTO_BACKUP}/usr.libexec
restoreworld:
.if !(exists(${WORLD_BACKUP}/sbin) && exists(${WORLD_BACKUP}/bin) && \
exists(${WORLD_BACKUP}/usr.sbin) && exists(${WORLD_BACKUP}/usr.bin) && \
- exists(${WORLD_BACKUP}/usr.libexec))
+ exists(${WORLD_BACKUP}/usr.lib) && exists(${WORLD_BACKUP}/usr.libexec))
@echo "There does not seem to be a valid archive present."
.else
- @echo "Restoring system binaries from backup archive..."
+ @echo "Restoring system binaries from manual backup archive..."
@rm -f /tmp/rs.tmp
-.for BX in sbin bin usr.sbin usr.bin usr.libexec
+.for BX in sbin bin usr.sbin usr.bin usr.lib usr.libexec
@chflags -R noschg /${BX:S/./\//}
@cd ${WORLD_BACKUP}/${BX} && find * -type f -perm +700 -exec \
echo cp ${WORLD_BACKUP}/${BX}/{} /${BX:S/./\//}/{} >> /tmp/rs.tmp \;
@echo " /usr/libexec/ld-elf.so.2"
.endif
+restoreworld-auto:
+.if !(exists(${AUTO_BACKUP}/sbin) && exists(${AUTO_BACKUP}/bin) && \
+ exists(${AUTO_BACKUP}/usr.sbin) && exists(${AUTO_BACKUP}/usr.bin) && \
+ exists(${AUTO_BACKUP}/usr.lib) && exists(${AUTO_BACKUP}/usr.libexec))
+ @echo "There does not seem to be a valid archive present."
+.else
+ @echo "Restoring system binaries from auto-backup archive..."
+ @rm -f /tmp/rs.tmp
+.for BX in sbin bin usr.sbin usr.bin usr.lib usr.libexec
+ @chflags -R noschg /${BX:S/./\//}
+ @cd ${AUTO_BACKUP}/${BX} && find * -type f -perm +700 -exec \
+ echo cp ${AUTO_BACKUP}/${BX}/{} /${BX:S/./\//}/{} >> /tmp/rs.tmp \;
+.endfor
+ @grep -Ev ' (/bin/sh|/bin/cp|/sbin/init.bak|/usr/bin/make|/usr/libexec/ld-elf.so.2|/usr/libexec/ld-elf.so.2.old)$$' \
+ /tmp/rs.tmp > /tmp/restore.script
+ @/bin/sh /tmp/restore.script
+ @rm /tmp/rs.tmp /tmp/restore.script
+ @echo "These files were not restored from ${AUTO_BACKUP}:"
+ @echo " /bin/cp"
+ @echo " /bin/sh"
+ @echo " /usr/bin/make"
+ @echo " /usr/libexec/ld-elf.so.2"
+.endif
+
# Take advantage of bmake error response
#
MAKE_PRINT_VAR_ON_ERROR= \
.CURDIR \
.OBJDIR \
- .MAKE \
- MAKE_VERSION \
LD_LIBRARY_PATH \
MACHINE_ARCH \
MACHINE \
MAKEFILE \
.TARGETS \
.ERROR_TARGET \
- .ERROR_META_FILE \
- .MAKE.LEVEL \
- .MAKE.MODE
+ .MAKE.LEVEL
.include <bsd.subdir.mk>