diff --git a/build_debian.sh b/build_debian.sh index 43f509b374c..91f228ec17f 100755 --- a/build_debian.sh +++ b/build_debian.sh @@ -188,6 +188,10 @@ sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista- sudo cp files/initramfs-tools/resize-rootfs $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/resize-rootfs sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/resize-rootfs +# Hook into initramfs: upgrade SSD from initramfs +sudo cp files/initramfs-tools/ssd-upgrade $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/ssd-upgrade +sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/ssd-upgrade + # Hook into initramfs: run fsck to repair a non-clean filesystem prior to be mounted sudo cp files/initramfs-tools/fsck-rootfs $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/fsck-rootfs sudo chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/fsck-rootfs diff --git a/files/image_config/platform/rc.local b/files/image_config/platform/rc.local index 7043da9fe14..647d552427a 100755 --- a/files/image_config/platform/rc.local +++ b/files/image_config/platform/rc.local @@ -114,6 +114,9 @@ migrate_nos_configuration() # remove nos-config-part from cmdline sed -r -i.bak "s/nos-config-part=[^[:space:]]+//" /host/grub/grub.cfg + # remove ssd-upgrader-part from cmdline + sed -r -i.bak "s/ssd-upgrader-part=[^[:space:]]+//" /host/grub/grub.cfg + # Mount the previous NOS's partition NOS_DIR=/mnt/nos_migration MG_GZFILE=$NOS_DIR/minigraph.xml.gz.base64.txt diff --git a/files/initramfs-tools/ssd-upgrade b/files/initramfs-tools/ssd-upgrade new file mode 100644 index 00000000000..92139d7b114 --- /dev/null +++ b/files/initramfs-tools/ssd-upgrade @@ -0,0 +1,35 @@ +#!/bin/sh + +case $1 in + prereqs) + exit 0 + ;; +esac + +# Extract kernel parameters +set -- $(cat /proc/cmdline) +for x in "$@"; do + case "$x" in + ssd-upgrader-part=*) + ssd_upgrader_part="${x#ssd-upgrader-part=}" + ;; + esac +done + +if [ ! -z "$ssd_upgrader_part" ]; then + echo "ssd-upgrader-part found in /proc/cmdline" > /tmp/ssd-fw-upgrade.log + mkdir -p /mnt/ssd_upgrader_part + mount -t "${ssd_upgrader_part#*,}" "${ssd_upgrader_part%,*}" /mnt/ssd_upgrader_part + if [ -x /mnt/ssd_upgrader_part/ssd-fw-upgrade ]; then + cp /mnt/ssd_upgrader_part/ssd-fw-upgrade /tmp/ + cd /tmp/ + umount /mnt/ssd_upgrader_part + rm -r /mnt/ssd_upgrader_part + ./ssd-fw-upgrade >> /tmp/ssd-fw-upgrade.log 2>&1 + else + echo "ssd-fw-upgrade not found" >> /tmp/ssd-fw-upgrade.log + umount /mnt/ssd_upgrader_part + rm -r /mnt/ssd_upgrader_part + fi + gzip /tmp/ssd-fw-upgrade.log +fi diff --git a/files/initramfs-tools/union-mount.j2 b/files/initramfs-tools/union-mount.j2 index c9dd1920440..291806f951e 100644 --- a/files/initramfs-tools/union-mount.j2 +++ b/files/initramfs-tools/union-mount.j2 @@ -190,3 +190,8 @@ fi if [ -f /tmp/fsck.log.gz ]; then mv /tmp/fsck.log.gz ${rootmnt}/var/log fi + +## ssd-fw-upgrade log file: /tmp will be lost when overlayfs is mounted +if [ -f /tmp/ssd-fw-upgrade.log.gz ]; then + mv /tmp/ssd-fw-upgrade.log.gz ${rootmnt}/var/log +fi