mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-27 05:21:08 +01:00
6f74911f7e
is current-enough (or is that beta-enough?). Add a NOCONFIRM test for those brave souls who are game to upgrade a system in blind faith.
296 lines
11 KiB
Makefile
296 lines
11 KiB
Makefile
#
|
|
# $Id: Makefile.upgrade,v 1.5 1998/09/09 06:02:31 jb Exp $
|
|
#
|
|
# This makefile contains rules for preforming upgrades that are outside
|
|
# the scope of the normal build world process.
|
|
#
|
|
|
|
#
|
|
# Build things relative to the user's preferred object directory,
|
|
# defaulting to /usr/obj if not defined.
|
|
#
|
|
MAKEOBJDIRPREFIX?=/usr/obj
|
|
|
|
#
|
|
# The installed operating system release gives us the hint as to whether
|
|
# we need to build a kernel too.
|
|
#
|
|
INSTALLEDVERSION!=uname -r
|
|
|
|
#
|
|
# Upgrade the installed make to the current version using the installed
|
|
# headers, libraries and build tools. This is required on installed versions
|
|
# prior to 2.2.5 in which the installed make doesn't support the -m argument.
|
|
#
|
|
make :
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Upgrading the installed make"
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}/usr.bin/make; \
|
|
make obj && make depend && make all && make install
|
|
|
|
#
|
|
# Upgrade from aout to elf, doing an aout build first to ensure that there
|
|
# are up-to-date tools before building the initial elf world. The aout
|
|
# tools just built into the object directory tree and executed from there
|
|
# during the elf build. Then install the aout tools, build an aout kernel
|
|
# with them (in case the installed kernel is an older version), then
|
|
# install the elf world.
|
|
#
|
|
aout-to-elf aout-to-elf-install : \
|
|
${MAKEOBJDIRPREFIX}/do_aout_buildworld \
|
|
${MAKEOBJDIRPREFIX}/do_elf_buildworld \
|
|
${MAKEOBJDIRPREFIX}/do_move_aout_libs \
|
|
${MAKEOBJDIRPREFIX}/do_aout_installworld \
|
|
${MAKEOBJDIRPREFIX}/do_aout_kernel \
|
|
${MAKEOBJDIRPREFIX}/do_elf_installworld \
|
|
${MAKEOBJDIRPREFIX}/do_set_objformat \
|
|
${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
|
|
|
|
#
|
|
# Just do the build parts of the transition build.
|
|
#
|
|
aout-to-elf-build : \
|
|
${MAKEOBJDIRPREFIX}/do_aout_buildworld \
|
|
${MAKEOBJDIRPREFIX}/do_elf_buildworld
|
|
|
|
#
|
|
# The installed system may not have tools capable of building an elf
|
|
# aware world, so a complete aout buildworld is required to get a known
|
|
# set of tools.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_aout_buildworld :
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Doing an aout buildworld to get an up-to-date set of tools"
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
|
|
OBJFORMAT=aout \
|
|
make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
|
|
@touch ${MAKEOBJDIRPREFIX}/do_aout_buildworld
|
|
|
|
#
|
|
# Temporary path for initial elf build.
|
|
#
|
|
AOUTTMPPATH= ${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/sbin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/bin:${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp/usr/games
|
|
|
|
#
|
|
# Use the aout tools from the aout buildworld to do an elf buildworld.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_elf_buildworld :
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Doing an elf buildworld using the aout tools in the aout"
|
|
@echo " obj tree."
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
|
|
PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
|
|
TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
|
|
make -f Makefile.inc1 -m ${.CURDIR}/share/mk buildworld
|
|
@touch ${MAKEOBJDIRPREFIX}/do_elf_buildworld
|
|
|
|
#
|
|
# ldconfig should list the directories that the system is currently using.
|
|
#
|
|
CUSTOM_LIBDIRS!=ldconfig -r | grep search | sed "s/search directories: //" | sed "s/:/ /g"
|
|
|
|
#
|
|
# These are the standard library directories that should end up containing
|
|
# just elf libraries.
|
|
#
|
|
LIBDIRS=/usr/lib /usr/lib/compat /usr/local/lib /usr/X11R6/lib
|
|
|
|
#
|
|
# Go through the list of library directories from ldconfig and add any
|
|
# directory that doesn't contain an aout path component to the list of
|
|
# library directories to search.
|
|
#
|
|
.for _lib in ${CUSTOM_LIBDIRS}
|
|
_lib1=${_lib:S/\/aout//}
|
|
.if ${_lib1} == ${_lib}
|
|
.if ${LIBDIRS:R:M${_lib:R}} == ""
|
|
LIBDIRS+=${_lib}
|
|
.endif
|
|
.endif
|
|
.endfor
|
|
|
|
#
|
|
# Go through the list of library directories and prepare a list of
|
|
# aout directories.
|
|
#
|
|
AOUTLIBDIRS=
|
|
.for _lib in ${LIBDIRS}
|
|
AOUTLIBDIRS+=${_lib}/aout
|
|
.endfor
|
|
|
|
#
|
|
# Move the aout libraries into an aout sub-directory of each elf library
|
|
# directory.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_move_aout_libs move-aout-libs :
|
|
.if !defined(NOCONFIRM)
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " You are about to move all the installed a.out libraries into"
|
|
@echo " an aout sub-directory of each elf library directory. You can"
|
|
@echo " type Ctrl-C to abort now or press return to start the moving"
|
|
@echo " the libraries."
|
|
@echo "--------------------------------------------------------------"
|
|
@echo Directories to search: ${LIBDIRS}
|
|
@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
|
|
@sh ${.CURDIR}/tools/tools/upgrade/move_aout_libs.sh ${LIBDIRS}
|
|
.else
|
|
@NOCONFIRM=1 sh ${.CURDIR}/tools/tools/upgrade/move_aout_libs.sh ${LIBDIRS}
|
|
.endif
|
|
@ldconfig ${AOUTLIBDIRS}
|
|
@touch ${MAKEOBJDIRPREFIX}/do_move_aout_libs
|
|
|
|
#
|
|
# Before installing the aout world, allow for the possibility that the
|
|
# world about to be installed has some different syscalls to the installed
|
|
# kernel which will make shutting the system down problematic. We set aside
|
|
# copies of certain programs which match the running kernel.
|
|
#
|
|
# Install the aout world so that anything that isn't replaced by the
|
|
# elf world will be updated.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_aout_installworld :
|
|
.if !defined(NOCONFIRM)
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " You are about to update the installed system (or the system"
|
|
@echo " that your DESTDIR points to). You can type Ctrl-C to abort"
|
|
@echo " now or press return to start the first phase of the update."
|
|
@echo "--------------------------------------------------------------"
|
|
@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
|
|
.endif
|
|
.if ${INSTALLEDVERSION} != "3.0-BETA"
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Saving a copy of programs required to shut the system down"
|
|
@echo "--------------------------------------------------------------"
|
|
@cp /bin/sh ${MAKEOBJDIRPREFIX}
|
|
@cp /sbin/reboot ${MAKEOBJDIRPREFIX}
|
|
.endif
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Doing an aout installworld using the aout tools in the aout"
|
|
@echo " obj tree."
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/aout \
|
|
PATH=${AOUTTMPPATH} OBJFORMAT=aout NOTOOLS=1 \
|
|
TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
|
|
make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
|
|
@touch ${MAKEOBJDIRPREFIX}/do_aout_installworld
|
|
|
|
#
|
|
# The installed kernel may not match the world that is installed, so build
|
|
# a generic kernel, but don't install it. The user can decide if the kernel
|
|
# needs to be installed. Perhaps we should install it in the root
|
|
# directory as an obscure name just in case a reboot is required?
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_aout_kernel :
|
|
.if ${INSTALLEDVERSION} == "3.0-BETA"
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " You are already running 3.0-BETA, so a kernel build"
|
|
@echo " is probably not required."
|
|
@echo "--------------------------------------------------------------"
|
|
.else
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Building a generic kernel using the new aout tools"
|
|
@echo "--------------------------------------------------------------"
|
|
.if exists(${.CURDIR}/sys/compile/GENERICupgrade)
|
|
@rm -rf ${.CURDIR}/sys/compile/GENERICupgrade
|
|
.endif
|
|
@cd ${.CURDIR}/sys/${MACHINE}/conf; config GENERICupgrade
|
|
@-cd ${.CURDIR}/sys/compile/GENERICupgrade; \
|
|
OBJFORMAT=aout make depend && make all
|
|
@cd ${.CURDIR}/sys/compile/GENERICupgrade; \
|
|
OBJFORMAT=aout make depend && make all
|
|
.endif
|
|
@touch ${MAKEOBJDIRPREFIX}/do_aout_kernel
|
|
|
|
#
|
|
# Install the elf world overwriting just about all the previously installed
|
|
# aout world. Any aout things that need to be kept have already been
|
|
# installed in different places (typically in aout subdirectories).
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_elf_installworld :
|
|
.if !defined(NOCONFIRM)
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " You are about to update the installed system (or the system"
|
|
@echo " that your DESTDIR points to) with the elf versions of"
|
|
@echo " everything, replacing the aout versions. You can type Ctrl-C"
|
|
@echo " to abort now, leaving just the aout world installed, or"
|
|
@echo " press return to start the second phase of the update."
|
|
@echo "--------------------------------------------------------------"
|
|
@/bin/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
|
|
.endif
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Doing an elf installworld using the aout tools in the aout"
|
|
@echo " obj tree."
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}; MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/elf \
|
|
PATH=${AOUTTMPPATH} OBJFORMAT=elf NOTOOLS=1 \
|
|
TOOLROOT=${MAKEOBJDIRPREFIX}/aout${.CURDIR}/tmp \
|
|
make -f Makefile.inc1 -m ${.CURDIR}/share/mk installworld
|
|
@touch ${MAKEOBJDIRPREFIX}/do_elf_installworld
|
|
|
|
#
|
|
# Now that the elf world has been installed, we can set the default
|
|
# object format to elf.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_set_objformat :
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Setting the default object format to elf"
|
|
@echo "--------------------------------------------------------------"
|
|
@echo "OBJFORMAT=elf" > ${DESTDIR}/etc/objformat
|
|
@touch ${MAKEOBJDIRPREFIX}/do_set_objformat
|
|
|
|
#
|
|
# If not already running a current kernel, install the GENERICupgrade kernel
|
|
# and reboot.
|
|
#
|
|
${MAKEOBJDIRPREFIX}/do_install_kernel_reboot :
|
|
.if ${INSTALLEDVERSION} == "3.0-BETA"
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Your system has been updated to run elf by default!"
|
|
@echo
|
|
@echo " You should reboot your system now."
|
|
@echo "--------------------------------------------------------------"
|
|
@touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
|
|
.else
|
|
.if !defined(NOCONFIRM)
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Your system has been updated to run elf by default!"
|
|
@echo
|
|
@echo " Since you are running ${INSTALLEDVERSION}, the kernel must"
|
|
@echo " be installed before the system is rebooted. You can type"
|
|
@echo " Ctrl-C to abort the kernel installation (at your own risk),"
|
|
@echo " or press return for the kernel to be installed and the"
|
|
@echo " system rebooted."
|
|
@echo "--------------------------------------------------------------"
|
|
@${MAKEOBJDIRPREFIX}/sh -c "read -p \"Return to continue or Ctrl-C to abort: \" _e"
|
|
.endif
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Installing a new GENERICupgrade kernel"
|
|
@echo "--------------------------------------------------------------"
|
|
@cd ${.CURDIR}/sys/compile/GENERICupgrade; make install
|
|
@echo
|
|
@echo "--------------------------------------------------------------"
|
|
@echo " Rebooting......."
|
|
@echo "--------------------------------------------------------------"
|
|
@touch ${MAKEOBJDIRPREFIX}/do_install_kernel_reboot
|
|
@-${MAKEOBJDIRPREFIX}/reboot
|
|
.endif
|
|
|