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 4dc1b678d..aa8ccff21 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -146,7 +146,7 @@ class FirmwareController extends ApiControllerBase { $this->sessionClose(); // long running action, close session - $keys = array('name', 'version', 'comment', 'flatsize'); + $keys = array('name', 'version', 'comment', 'flatsize', 'locked'); $backend = new Backend(); $response = array(); diff --git a/src/opnsense/scripts/firmware/lock.sh b/src/opnsense/scripts/firmware/lock.sh new file mode 100755 index 000000000..e65e8698e --- /dev/null +++ b/src/opnsense/scripts/firmware/lock.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Copyright (C) 2015 Franco Fichtner +# Copyright (C) 2014 Deciso B.V. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +PKG_PROGRESS_FILE=/tmp/pkg_upgrade.progress +PACKAGE=$1 + +# Check if another pkg process is already running +if [ -n "$(pgrep pkg)" ]; then + exit 0 +fi + +# Truncate upgrade progress file +: > ${PKG_PROGRESS_FILE} + +echo "***GOT REQUEST TO LOCK: $PACKAGE***" >> ${PKG_PROGRESS_FILE} +echo '***STARTING LOCK***' >> ${PKG_PROGRESS_FILE} +pkg lock -y $PACKAGE >> ${PKG_PROGRESS_FILE} +echo '***DONE***' >> ${PKG_PROGRESS_FILE} diff --git a/src/opnsense/scripts/firmware/unlock.sh b/src/opnsense/scripts/firmware/unlock.sh new file mode 100755 index 000000000..52481b5f8 --- /dev/null +++ b/src/opnsense/scripts/firmware/unlock.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +# Copyright (C) 2015 Franco Fichtner +# Copyright (C) 2014 Deciso B.V. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +PKG_PROGRESS_FILE=/tmp/pkg_upgrade.progress +PACKAGE=$1 + +# Check if another pkg process is already running +if [ -n "$(pgrep pkg)" ]; then + exit 0 +fi + +# Truncate upgrade progress file +: > ${PKG_PROGRESS_FILE} + +echo "***GOT REQUEST TO UNLOCK: $PACKAGE***" >> ${PKG_PROGRESS_FILE} +echo '***STARTING UNLOCK***' >> ${PKG_PROGRESS_FILE} +pkg unlock -y $PACKAGE >> ${PKG_PROGRESS_FILE} +echo '***DONE***' >> ${PKG_PROGRESS_FILE} diff --git a/src/opnsense/service/conf/actions.d/actions_firmware.conf b/src/opnsense/service/conf/actions.d/actions_firmware.conf index d24fbd232..0ab55e4de 100644 --- a/src/opnsense/service/conf/actions.d/actions_firmware.conf +++ b/src/opnsense/service/conf/actions.d/actions_firmware.conf @@ -16,6 +16,18 @@ parameters:%s type:script message: reinstalling firmware package %s +[lock] +command: /usr/sbin/daemon -f /usr/local/opnsense/scripts/firmware/lock.sh +parameters:%s +type:script +message: locking firmware package %s + +[unlock] +command: /usr/sbin/daemon -f /usr/local/opnsense/scripts/firmware/unlock.sh +parameters:%s +type:script +message: unlocking firmware package %s + [status] command:cat /tmp/pkg_upgrade.progress 2>&1 parameters: @@ -23,13 +35,13 @@ type:script_output message:retrieve upgrade progress status [local] -command:pkg query "%n|||%v|||%c|||%sh" +command:pkg query "%n|||%v|||%c|||%sh|||%k" parameters: type:script_output message:view local packages [remote] -command: pkg rquery "%n|||%v|||%c|||%sh" +command: pkg rquery "%n|||%v|||%c|||%sh|||0" parameters: type:script_output message:view remote packages