sonic-buildimage/files/initramfs-tools/arista-hook
yurypm d632569a6a Add initramfs hook for Arista devices (#2595)
We are going to use initramfs hook for firmware upgrades
To install Arista hook:
- create folder /mnt/flash/<image dir>/platform/hooks/boot1/ from Aboot or
  /host/<image dir>/platform/hooks/boot1/ from Sonic
- add executable script to created folder
2019-02-27 10:28:04 -08:00

75 lines
1.4 KiB
Bash

#!/bin/sh
PREREQS="arista-convertfs"
prereqs() { echo "$PREREQS"; }
case $1 in
prereqs)
prereqs
exit 0
;;
esac
info() { printf "%04.2f: $@\n" "$(cut -f1 -d' ' /proc/uptime)"; }
err() { info "Error: $@"; }
warn() { info "Warning: $@"; }
set -e
root_mnt='/mnt/arista-firmware'
root_dev=''
aboot_flag=''
# Alway run cleanup before exit
cleanup() {
if grep -q "$root_mnt" /proc/mounts; then
umount "$root_mnt"
fi
[ -e "$root_mnt" ] && rmdir "$root_mnt"
}
trap cleanup EXIT
# Extract kernel parameters
set -- $(cat /proc/cmdline)
for x in "$@"; do
case "$x" in
Aboot=*)
aboot_flag="${x#Aboot=}"
;;
loop=*)
x1="${x#loop=}"
image_dir="${x1%/*}"
;;
esac
done
[ -z "$aboot_flag" ] && exit 0
root_dev="$ROOT"
if [ -z "$root_dev" ]; then
err "Error: root device name is not provided"
exit 1
fi
mkdir -p "$root_mnt"
mount -t ext4 "$root_dev" "$root_mnt"
get_sorted_hooks() {
echo $(find "$1" -name '[0-9][0-9]-*' -type f | sort)
}
if [ -d "$root_mnt/$image_dir/platform/hooks/boot1" ]; then
for hook in $(get_sorted_hooks "$root_mnt/$image_dir/platform/hooks/boot1"); do
if [ ! -z "$hook" ]; then
cp "$hook" /tmp/
hook="/tmp/`basename $hook`"
info "Running hook $(basename $hook)"
. "$hook"
fi
done
fi
umount "$root_mnt"
rmdir "$root_mnt"