75 lines
1.4 KiB
Plaintext
75 lines
1.4 KiB
Plaintext
|
#!/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"
|