Skip to content

Commit

Permalink
Add initramfs hook for Arista devices (sonic-net#2595)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
yurypm authored and lguohan committed Feb 27, 2019
1 parent 3800508 commit d632569
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
2 changes: 2 additions & 0 deletions build_debian.sh
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-t
sudo mkdir -p $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/
sudo cp files/initramfs-tools/arista-convertfs $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-convertfs
sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-convertfs
sudo cp files/initramfs-tools/arista-hook $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-hook
sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-hook
sudo cp files/initramfs-tools/mke2fs $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/mke2fs
sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/mke2fs
sudo cp files/initramfs-tools/setfacl $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/setfacl
Expand Down
74 changes: 74 additions & 0 deletions files/initramfs-tools/arista-hook
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
#!/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"

0 comments on commit d632569

Please sign in to comment.