| #!/bin/bash |
| # Copyright 2021 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| # This script will check the signature for the BMC image against |
| # the baked in keyring available. If any aspect of this fails, |
| # the scripts returns non-zero and this can be reported to the |
| # host. |
| # |
| # 1. Verify the image |
| # 2. Rename the image |
| |
| KEYRING=/etc/googlekeys/gbmc/gbmc.gpg |
| SIGNATURE_FILE=/tmp/bmc.sig |
| STATUS_FILE=/tmp/bmc.verify |
| |
| # Store in /run/initramfs because the behaviour of mv changes |
| # depending on whether the file is moving within a tree or not. |
| IMAGE_FILE=/run/initramfs/bmc-image |
| VERIFIED_FILE=/run/initramfs/image-bmc |
| |
| # Make sure we run ERR traps when a function returns an error |
| set -e |
| |
| # Write out the result of the script to a status file upon exiting |
| # normally or due to an error |
| exit_handler() { |
| local status="$?" |
| if (( status == 0 )); then |
| echo "success" >"${STATUS_FILE}" |
| else |
| echo "failed" >"${STATUS_FILE}" |
| fi |
| trap - EXIT ERR |
| exit "$status" |
| } |
| trap exit_handler EXIT ERR |
| |
| echo "running" > ${STATUS_FILE} |
| |
| # Verify the image. |
| verify-bmc-image.sh @ALLOW_DEV@ "$IMAGE_FILE" "$SIGNATURE_FILE" || exit |
| |
| # Rename the staged file for initramfs updates. |
| mv ${IMAGE_FILE} ${VERIFIED_FILE} |