diff --git a/usr/local/share/bastille/bootstrap.sh b/usr/local/share/bastille/bootstrap.sh index c52059dd..4496aac5 100644 --- a/usr/local/share/bastille/bootstrap.sh +++ b/usr/local/share/bastille/bootstrap.sh @@ -617,7 +617,7 @@ case "${RELEASE}" in UPSTREAM_URL=$(echo "${bastille_url_freebsd}${HW_MACHINE}/${HW_MACHINE_ARCH}/${NAME_VERIFY}" | sed 's/releases/snapshots/') FREEBSD_BRANCH="current" ;; - *-RELEASE|*-release|*-RC[1-9]|*-rc[1-9]|*-BETA[1-9]) + *-release|*-RELEASE|*-rc[1-9]|*-RC[1-9]|*-beta[1-9]|*-BETA[1-9]) ### FreeBSD ### PLATFORM_OS="FreeBSD" NAME_VERIFY=$(echo "${RELEASE}" | grep -iwE '^([0-9]+)\.[0-9](-RELEASE|-RC[1-9]|-BETA[1-9])$' | tr '[:lower:]' '[:upper:]') diff --git a/usr/local/share/bastille/update.sh b/usr/local/share/bastille/update.sh index 29028383..7ff12adc 100644 --- a/usr/local/share/bastille/update.sh +++ b/usr/local/share/bastille/update.sh @@ -123,18 +123,18 @@ jail_check() { JAIL_PLATFORM_OS="FreeBSD" fi - # Set CURRENT_VERSION - CURRENT_VERSION=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) - if [ -z "${CURRENT_VERSION}" ]; then + # Set OLD_RELEASE + OLD_RELEASE=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) + if [ -z "${OLD_RELEASE}" ]; then error_exit "[ERROR]: Can't determine '${TARGET}' version." fi # Validate method (Legacy/PkgBase) if [ "${JAIL_PLATFORM_OS}" = "FreeBSD" ]; then # Validate update method - MINOR_VERSION=$(echo ${CURRENT_VERSION} | sed -E 's/^[0-9]+\.([0-9]+)-.*$/\1/') - MAJOR_VERSION=$(echo ${CURRENT_VERSION} | grep -Eo '^[0-9]+') - if echo "${CURRENT_VERSION}" | grep -oq "\-CURRENT"; then + MINOR_VERSION=$(echo ${OLD_RELEASE} | sed -E 's/^[0-9]+\.([0-9]+)-.*$/\1/') + MAJOR_VERSION=$(echo ${OLD_RELEASE} | grep -Eo '^[0-9]+') + if echo "${OLD_RELEASE}" | grep -oq "\-CURRENT"; then FREEBSD_BRANCH="current" else FREEBSD_BRANCH="release" @@ -181,10 +181,10 @@ jail_update() { fi # Update release version (including patch level) - NEW_VERSION=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) - if [ "${CURRENT_VERSION}" != "${NEW_VERSION}" ]; then - bastille config ${TARGET} set osrelease ${NEW_VERSION} >/dev/null - info "\nUpgrade complete: ${CURRENT_VERSION} > ${NEW_VERSION}\n" + UPDATED_RELEASE=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) + if [ "${OLD_RELEASE}" != "${UPDATED_RELEASE}" ]; then + bastille config ${TARGET} set osrelease ${UPDATED_RELEASE} >/dev/null + info "\nUpgrade complete: ${OLD_RELEASE} > ${UPDATED_RELEASE}\n" else info "\nNo updates available.\n" fi @@ -233,10 +233,10 @@ jail_update_pkgbase() { fi # Update release version (including patch level) - NEW_VERSION=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) - if [ "${CURRENT_VERSION}" != "${NEW_VERSION}" ]; then - bastille config ${TARGET} set osrelease ${NEW_VERSION} >/dev/null - info "\nUpgrade complete: ${CURRENT_VERSION} > ${NEW_VERSION}\n" + UPDATED_RELEASE=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) + if [ "${OLD_RELEASE}" != "${UPDATED_RELEASE}" ]; then + bastille config ${TARGET} set osrelease ${UPDATED_RELEASE} >/dev/null + info "\nUpgrade complete: ${OLD_RELEASE} > ${UPDATED_RELEASE}\n" else info "\nNo updates available.\n" fi @@ -436,9 +436,9 @@ case "${TARGET}" in NAME_VERIFY=$(echo "${TARGET}" | grep -iwE '^([1-9]+)\.[0-9](-STABLE)$' | tr '[:lower:]' '[:upper:]') UPDATE_TARGET="RELEASE" ;; - *-release|*-RELEASE) + *-release|*-RELEASE|*-rc[1-9]|*-RC[1-9]|*-beta[1-9]|*-BETA[1-9]) PLATFORM_OS="FreeBSD" - NAME_VERIFY=$(echo "${TARGET}" | grep -iwE '^([0-9]+)\.[0-9](-RELEASE)$' | tr '[:lower:]' '[:upper:]') + NAME_VERIFY=$(echo "${TARGET}" | grep -iwE '^([0-9]+)\.[0-9](-RELEASE|-RC[1-9]|-BETA[1-9])$' | tr '[:lower:]' '[:upper:]') UPDATE_TARGET="RELEASE" ;; current|CURRENT) diff --git a/usr/local/share/bastille/upgrade.sh b/usr/local/share/bastille/upgrade.sh index c7313d4d..84e331c2 100644 --- a/usr/local/share/bastille/upgrade.sh +++ b/usr/local/share/bastille/upgrade.sh @@ -137,7 +137,7 @@ thick_jail_check() { # Set VERSION OLD_RELEASE="$(${bastille_jailsdir}/${TARGET}/root/bin/freebsd-version 2>/dev/null)" OLD_CONFIG_RELEASE="$(bastille config ${TARGET} get osrelease)" - if [ -z "${OLD_RELEASE}" ]; then + if [ -z "${OLD_RELEASE}" ] || [ -z "${OLD_CONFIG_RELEASE}" ]; then error_exit "[ERROR]: Can't determine '${TARGET}' version." fi @@ -189,9 +189,9 @@ release_check() { PLATFORM_OS="FreeBSD" NAME_VERIFY=$(echo "${NEW_RELEASE}" | grep -iwE '^([1-9]+)\.[0-9](-STABLE)$' | tr '[:lower:]' '[:upper:]') ;; - *-release|*-RELEASE) + *-release|*-RELEASE|*-rc[1-9]|*-RC[1-9]|*-beta[1-9]|*-BETA[1-9]) PLATFORM_OS="FreeBSD" - NAME_VERIFY=$(echo "${NEW_RELEASE}" | grep -iwE '^([0-9]+)\.[0-9](-RELEASE)$' | tr '[:lower:]' '[:upper:]') + NAME_VERIFY=$(echo "${NEW_RELEASE}" | grep -iwE '^([0-9]+)\.[0-9](-RELEASE|-RC[1-9]|-BETA[1-9])$' | tr '[:lower:]' '[:upper:]') ;; current|CURRENT) PLATFORM_OS="HardenedBSD" @@ -321,9 +321,18 @@ jail_upgrade_pkgbase() { info "\n[${TARGET}]:" - if [ "${OLD_RELEASE}" = "${NEW_RELEASE}" ]; then - error_notify "[ERROR]: Jail is already running '${NEW_RELEASE}'" - error_exit "See 'bastille update TARGET' to update jail." + # Verify trusted pkg keys + if [ ! -f "${fingerprints}/trusted/awskms-${NEW_MAJOR_VERSION}" ]; then + if ! fetch -o "${fingerprints}/trusted" https://cgit.freebsd.org/src/tree/share/keys/pkgbase-${NEW_MAJOR_VERSION}/trusted/awskms-${NEW_MAJOR_VERSION} + then + error_exit "[ERROR]: Failed to fetch trusted pkg keys." + fi + fi + if [ ! -f "${fingerprints}/trusted/backup-signing-${NEW_MAJOR_VERSION}" ]; then + if ! fetch -o "${fingerprints}/trusted" https://cgit.freebsd.org/src/tree/share/keys/pkgbase-${NEW_MAJOR_VERSION}/trusted/backup-signing-${NEW_MAJOR_VERSION} + then + error_exit "[ERROR]: Failed to fetch trusted backup pkg keys." + fi fi # Upgrade jail with pkgbase (thick only) @@ -356,10 +365,15 @@ jail_upgrade_pkgbase() { fi # Update release version (including patch level) - NEW_VERSION=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) - bastille config ${TARGET} set osrelease ${NEW_VERSION} >/dev/null 2>/dev/null + UPGRADED_RELEASE=$(/usr/sbin/jexec -l "${TARGET}" freebsd-version 2>/dev/null) + if [ "${OLD_RELEASE}" != "${UPGRADED_RELEASE}" ]; then + bastille config ${TARGET} set osrelease ${UPGRADED_RELEASE} >/dev/null 2>/dev/null + info "\nUpgrade complete: ${OLD_RELEASE} > ${UPGRADED_RELEASE}\n" + else + info "\nNo updates available.\n" + fi - info "\nUpgraded ${TARGET}: ${OLD_RELEASE} -> ${NEW_RELEASE}" + info "\nUpgraded ${TARGET}: ${OLD_RELEASE} -> ${UPGRADED_RELEASE}" else error_exit "[ERROR]: Not implemented for platform: ${PLATFORM_OS}" fi