diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php index 6983730d6..35597377b 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -88,14 +88,14 @@ class FirmwareController extends ApiControllerBase public function statusAction() { $backend = new Backend(); - $type = null; + $target = null; $response = json_decode(trim($backend->configdRun('firmware product')), true); if ($response != null && $response['product_check'] != null) { $response = $response['product_check']; - if (!empty($response['check_package']) && $response['product_name'] != $response['check_package']) { - $type = $response['check_package']; + if ($response['product_id'] != $response['product_target']) { + $target = $response['product_target']; } $packages_size = !empty($response['download_size']) ? $response['download_size'] : 0; @@ -224,14 +224,14 @@ class FirmwareController extends ApiControllerBase } elseif (array_key_exists('repository', $response) && $response['repository'] == 'unsigned') { $response['status_msg'] = gettext('The repository has no fingerprint.'); $response['status'] = 'error'; - } elseif (array_key_exists('repository', $response) && $response['repository'] == 'incomplete' && !empty($type)) { - $response['status_msg'] = sprintf(gettext('The package "%s" is not available on this repository.'), $type); + } elseif (array_key_exists('repository', $response) && $response['repository'] == 'incomplete' && !empty($target)) { + $response['status_msg'] = sprintf(gettext('The package "%s" is not available on this repository.'), $target); $response['status'] = 'error'; } elseif (array_key_exists('repository', $response) && $response['repository'] != 'ok') { $response['status_msg'] = gettext('Could not find the repository on the selected mirror.'); $response['status'] = 'error'; } elseif (array_key_exists('updates', $response) && $response['updates'] != 0) { - if (!empty($type)) { + if (!empty($target)) { $response['status_msg'] = gettext('The release type requires an update.'); $response['status_upgrade_action'] = 'rel'; $response['status'] = 'ok'; @@ -302,11 +302,7 @@ class FirmwareController extends ApiControllerBase if ($version == 'update') { $backend->configdRun('firmware changelog fetch'); } else { - $text = trim($backend->configdRun(sprintf('firmware changelog text %s', $version))); $html = trim($backend->configdRun(sprintf('firmware changelog html %s', $version))); - if (!empty($text)) { - $response['text'] = $text; - } if (!empty($html)) { $response['html'] = $html; } @@ -746,12 +742,12 @@ class FirmwareController extends ApiControllerBase $response = array(); $version = explode(' ', trim(shell_exec('opnsense-version -nv'))); - foreach (array('product_name' => 0, 'product_version' => 1) as $result => $index) { + foreach (array('product_id' => 0, 'product_version' => 1) as $result => $index) { $response[$result] = !empty($version[$index]) ? $version[$index] : 'unknown'; } /* allows us to select UI features based on product state */ - $devel = explode('-', $response['product_name']); + $devel = explode('-', $response['product_id']); $devel = count($devel) == 2 ? $devel[1] == 'devel' : false; /* need both remote and local, create array earlier */ diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt index 5980138c7..0aa3d6501 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt @@ -88,7 +88,7 @@ ''+row['repository']+''+row['old']+'' + row['new']+''+row['reason'] + ''); - if (row['name'] == data['product_name'] && row['new'] != 'N/A') { + if (row['name'] == data['product_target'] && row['new'] != 'N/A') { $.upgrade_show_log = row['new'].replace(/[_-].*/, ''); } }); diff --git a/src/opnsense/scripts/firmware/check.sh b/src/opnsense/scripts/firmware/check.sh index 080d27bc4..c964dc786 100755 --- a/src/opnsense/scripts/firmware/check.sh +++ b/src/opnsense/scripts/firmware/check.sh @@ -38,6 +38,7 @@ # upgrade_packages: array with { name: , current_version: , new_version: } JSONFILE="/tmp/pkg_upgrade.json" +JSONRETURN=${1} LOCKFILE="/tmp/pkg_upgrade.progress" OUTFILE="/tmp/pkg_update.out" TEE="/usr/bin/tee -a" @@ -60,29 +61,22 @@ repository="error" updates="" upgrade_needs_reboot="0" -product_name=$(opnsense-version -n) -product_version=$(opnsense-version -v) -os_version=$(uname -sr) -last_check=$(date) - -SUFFIX="-$(pluginctl -g system.firmware.type)" -if [ "${SUFFIX}" = "-" ]; then - SUFFIX= +product_suffix="-$(pluginctl -g system.firmware.type)" +if [ "${product_suffix}" = "-" ]; then + product_suffix= fi -PACKAGE=opnsense${SUFFIX} + +last_check=$(date) +os_version=$(uname -sr) +product_id=$(opnsense-version -n) +product_target=opnsense${product_suffix} +product_version=$(opnsense-version -v) echo "***GOT REQUEST TO CHECK FOR UPDATES***" >> ${LOCKFILE} echo -n "Fetching changelog information, please wait... " >> ${LOCKFILE} if /usr/local/opnsense/scripts/firmware/changelog.sh fetch >> ${LOCKFILE} 2>&1; then - echo "done" >> ${LOCKFILE} -fi - -if [ "${product_name}" = "${PACKAGE}" ]; then - echo "A release type change is not required." >> ${LOCKFILE} - PACKAGE= -else - echo "Targeting new release type: ${PACKAGE}" >> ${LOCKFILE} + echo "done" >> ${LOCKFILE} fi : > ${OUTFILE} @@ -121,26 +115,28 @@ fi # reach the pkg repository in timely fashion # Kill all running pkg instances connection="timeout" - else + else # connection is still ok connection="ok" : > ${OUTFILE} # now check what happens when we would go ahead - if [ -n "${PACKAGE}" ]; then + if [ "${product_id}" != "${product_target}" ]; then + echo "Targeting new release type: ${product_target}" | ${TEE} ${LOCKFILE} # fetch before install lets us know more, # although not as fast as it should be... - (pkg fetch -Uy "${PACKAGE}" 2>&1) | ${TEE} ${LOCKFILE} - (pkg install -Un "${PACKAGE}" 2>&1) | ${TEE} ${LOCKFILE} ${OUTFILE} + (pkg fetch -Uy "${product_target}" 2>&1) | ${TEE} ${LOCKFILE} + (pkg install -Un "${product_target}" 2>&1) | ${TEE} ${LOCKFILE} ${OUTFILE} else + echo "A release type change is not required." | ${TEE} ${LOCKFILE} (pkg upgrade -Un 2>&1) | ${TEE} ${LOCKFILE} ${OUTFILE} fi # Check for additional repository errors if grep -q 'Unable to update repository' ${OUTFILE}; then repository="error" # already set but reset here for clarity - elif grep -q "No packages available to install matching..${PACKAGE}" ${OUTFILE}; then + elif grep -q "No packages available to install matching..${product_target}" ${OUTFILE}; then repository="incomplete" else # Repository can be used for updates @@ -163,10 +159,10 @@ fi MODE= while read LINE; do - REPO=$(echo "${LINE}" | grep -o '\[.*\]' | tr -d '[]') - if [ -z "${REPO}" ]; then - REPO=${UPSTREAM} - fi + REPO=$(echo "${LINE}" | grep -o '\[.*\]' | tr -d '[]') + if [ -z "${REPO}" ]; then + REPO=${UPSTREAM} + fi for i in $(echo "${LINE}" | tr '[' '(' | cut -d '(' -f1); do case ${MODE} in DOWNGRADED:) @@ -286,11 +282,11 @@ fi ;; esac done - done < ${OUTFILE} + done < ${OUTFILE} fi # the main update from package will provide this during upgrade - if [ -n "${PACKAGE}" ]; then + if [ "${product_id}" != "${product_target}" ]; then # XXX unhide later base_to_reboot= elif [ -z "$base_to_reboot" ]; then if opnsense-update -cbf; then @@ -316,7 +312,7 @@ fi fi # the main update from package will provide this during upgrade - if [ -n "${PACKAGE}" ]; then + if [ "${product_id}" != "${product_target}" ]; then # XXX unhide later kernel_to_reboot= elif [ -z "$kernel_to_reboot" ]; then if opnsense-update -cfk; then @@ -350,14 +346,14 @@ fi # write our json structure cat > ${JSONFILE} << EOF { - "check_package":"${PACKAGE}", "connection":"$connection", "downgrade_packages":[$packages_downgraded], "download_size":"$download_size", "last_check":"$last_check", "new_packages":[$packages_new], "os_version":"$os_version", - "product_name":"$product_name", + "product_target":"$product_target", + "product_id":"$product_id", "product_version":"$product_version", "reinstall_packages":[$packages_reinstall], "remove_packages":[$packages_removed], @@ -370,4 +366,8 @@ cat > ${JSONFILE} << EOF } EOF +if [ -n "${JSONRETURN}" ]; then + cat ${JSONFILE} +fi + echo '***DONE***' >> ${LOCKFILE} diff --git a/src/opnsense/service/conf/actions.d/actions_firmware.conf b/src/opnsense/service/conf/actions.d/actions_firmware.conf index 67b6f48fc..0bc18fee9 100644 --- a/src/opnsense/service/conf/actions.d/actions_firmware.conf +++ b/src/opnsense/service/conf/actions.d/actions_firmware.conf @@ -28,13 +28,13 @@ message:Retrieving changelog index command: /usr/local/opnsense/scripts/firmware/changelog.sh html parameters:%s type:script_output -message:Viewing changelog for version %s +message:Viewing HTML changelog for version %s [changelog.text] command: /usr/local/opnsense/scripts/firmware/changelog.sh text parameters:%s type:script_output -message:Viewing changelog for version %s +message:Viewing text changelog for version %s [license] command:/usr/local/opnsense/scripts/firmware/license.sh