diff --git a/src/opnsense/scripts/firmware/health.sh b/src/opnsense/scripts/firmware/health.sh index 5077f12b4..a3af116d4 100755 --- a/src/opnsense/scripts/firmware/health.sh +++ b/src/opnsense/scripts/firmware/health.sh @@ -27,6 +27,7 @@ MTREE="mtree -e -p /" PKG_PROGRESS_FILE=/tmp/pkg_upgrade.progress TMPFILE=/tmp/pkg_check.exclude +UPSTREAM="OPNsense" # Truncate upgrade progress file : > ${PKG_PROGRESS_FILE} @@ -92,24 +93,80 @@ set_check() if [ ${MTREE_RET} -eq 0 ]; then if [ "${MTREE_MIA}" = "0" ]; then - echo "No problems detected." >> ${PKG_PROGRESS_FILE} 2>&1 + echo "No problems detected." >> ${PKG_PROGRESS_FILE} else - echo "Missing files: ${MTREE_MIA}" >> ${PKG_PROGRESS_FILE} 2>&1 - echo "${MTREE_OUT}" >> ${PKG_PROGRESS_FILE} 2>&1 + echo "Missing files: ${MTREE_MIA}" >> ${PKG_PROGRESS_FILE} + echo "${MTREE_OUT}" >> ${PKG_PROGRESS_FILE} fi else - echo "Error ${MTREE_RET} ocurred." >> ${PKG_PROGRESS_FILE} 2>&1 - echo "${MTREE_OUT}" >> ${PKG_PROGRESS_FILE} 2>&1 + echo "Error ${MTREE_RET} ocurred." >> ${PKG_PROGRESS_FILE} + echo "${MTREE_OUT}" >> ${PKG_PROGRESS_FILE} fi rm ${TMPFILE} } +core_check() +{ + echo ">>> Check for core packages consistency" >> ${PKG_PROGRESS_FILE} + + CORE=$(opnsense-version -n) + PROGRESS= + + for DEP in $( (echo ${CORE}; pkg query %dn ${CORE}) | sort); do + if [ -z "${PROGRESS}" ]; then + echo -n "Checking core packages: ." >> ${PKG_PROGRESS_FILE} + PROGRESS=1 + else + echo -n "." >> ${PKG_PROGRESS_FILE} + fi + + read REPO LVER AUTO VITA << EOF +$(pkg query "%R %v %a %V" ${DEP}) +EOF + + if [ "${REPO}" != ${UPSTREAM} ]; then + if [ -n "${PROGRESS}" ]; then + echo >> ${PKG_PROGRESS_FILE} + fi + echo "${DEP}-${LVER} repository mismatch: ${REPO}" >> ${PKG_PROGRESS_FILE} + PROGRESS= + fi + + RVER=$(pkg rquery -r ${UPSTREAM} %v ${DEP}) + if [ -z "${RVER}" ]; then + if [ -n "${PROGRESS}" ]; then + echo >> ${PKG_PROGRESS_FILE} + fi + echo "${DEP}-${LVER} has no upstream equivalent" >> ${PKG_PROGRESS_FILE} + PROGRESS= + elif [ "${RVER}" != "${LVER}" ]; then + if [ -n "${PROGRESS}" ]; then + echo >> ${PKG_PROGRESS_FILE} + fi + echo "${DEP}-${LVER} version mismatch, expected ${RVER}" >> ${PKG_PROGRESS_FILE} + PROGRESS= + fi + + # XXX check AUTO and VITA + done + + if [ -n "${PROGRESS}" ]; then + echo " done" >> ${PKG_PROGRESS_FILE} + fi +} + echo "***GOT REQUEST TO AUDIT HEALTH***" >> ${PKG_PROGRESS_FILE} + set_check kernel set_check base + echo ">>> Check for and install missing package dependencies" >> ${PKG_PROGRESS_FILE} pkg check -da >> ${PKG_PROGRESS_FILE} 2>&1 + echo ">>> Check for missing or altered package files" >> ${PKG_PROGRESS_FILE} pkg check -sa >> ${PKG_PROGRESS_FILE} 2>&1 + +core_check + echo '***DONE***' >> ${PKG_PROGRESS_FILE}