[image]: SONiC-to-SONiC update (#464)
This commit is contained in:
parent
07bc0092a9
commit
b549adc36c
@ -116,8 +116,11 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i target/debs/linux-image-3.16.0-4-amd64_*.de
|
|||||||
## Update initramfs for booting with squashfs+aufs
|
## Update initramfs for booting with squashfs+aufs
|
||||||
cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null
|
cat files/initramfs-tools/modules | sudo tee -a $FILESYSTEM_ROOT/etc/initramfs-tools/modules > /dev/null
|
||||||
|
|
||||||
|
IMAGE_VERSION=$(. functions.sh && sonic_get_version)
|
||||||
|
|
||||||
## Hook into initramfs: change fs type from vfat to ext4 on arista switches
|
## Hook into initramfs: change fs type from vfat to ext4 on arista switches
|
||||||
sudo mkdir -p $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/
|
sudo mkdir -p $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/
|
||||||
|
sed -i -e "s/%%IMAGE_VERSION%%/$IMAGE_VERSION/g" files/initramfs-tools/arista-convertfs
|
||||||
sudo cp files/initramfs-tools/arista-convertfs $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-convertfs
|
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 chmod +x $FILESYSTEM_ROOT/etc/initramfs-tools/scripts/init-premount/arista-convertfs
|
||||||
sudo cp files/initramfs-tools/mke2fs $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/mke2fs
|
sudo cp files/initramfs-tools/mke2fs $FILESYSTEM_ROOT/etc/initramfs-tools/hooks/mke2fs
|
||||||
@ -195,7 +198,8 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
|
|||||||
iptables-persistent \
|
iptables-persistent \
|
||||||
logrotate \
|
logrotate \
|
||||||
curl \
|
curl \
|
||||||
kexec-tools
|
kexec-tools \
|
||||||
|
unzip
|
||||||
|
|
||||||
## Disable kexec supported reboot which was installed by default
|
## Disable kexec supported reboot which was installed by default
|
||||||
sudo sed -i 's/LOAD_KEXEC=true/LOAD_KEXEC=false/' $FILESYSTEM_ROOT/etc/default/kexec
|
sudo sed -i 's/LOAD_KEXEC=true/LOAD_KEXEC=false/' $FILESYSTEM_ROOT/etc/default/kexec
|
||||||
|
@ -45,6 +45,7 @@ elif [ "$IMAGE_TYPE" = "aboot" ]; then
|
|||||||
cp $ONIE_INSTALLER_PAYLOAD $OUTPUT_ABOOT_IMAGE
|
cp $ONIE_INSTALLER_PAYLOAD $OUTPUT_ABOOT_IMAGE
|
||||||
## Add Aboot boot0 file
|
## Add Aboot boot0 file
|
||||||
j2 -f env files/Aboot/boot0.j2 ./onie-image.conf > files/Aboot/boot0
|
j2 -f env files/Aboot/boot0.j2 ./onie-image.conf > files/Aboot/boot0
|
||||||
|
sed -i -e "s/%%IMAGE_VERSION%%/$IMAGE_VERSION/g" files/Aboot/boot0
|
||||||
pushd files/Aboot && zip -g $OLDPWD/$OUTPUT_ABOOT_IMAGE boot0; popd
|
pushd files/Aboot && zip -g $OLDPWD/$OUTPUT_ABOOT_IMAGE boot0; popd
|
||||||
pushd files/Aboot && zip -g $OLDPWD/$ABOOT_BOOT_IMAGE boot0; popd
|
pushd files/Aboot && zip -g $OLDPWD/$ABOOT_BOOT_IMAGE boot0; popd
|
||||||
echo "$IMAGE_VERSION" >> .imagehash
|
echo "$IMAGE_VERSION" >> .imagehash
|
||||||
|
@ -25,6 +25,7 @@ kernel_params=kernel-params
|
|||||||
aboot_machine="arista_unknown"
|
aboot_machine="arista_unknown"
|
||||||
|
|
||||||
target_path=/mnt/flash
|
target_path=/mnt/flash
|
||||||
|
image_path="$target_path/image-%%IMAGE_VERSION%%"
|
||||||
|
|
||||||
# expect the swi to be a non empty file
|
# expect the swi to be a non empty file
|
||||||
[ -s "$swipath" ] || exit 1
|
[ -s "$swipath" ] || exit 1
|
||||||
@ -48,8 +49,10 @@ extract_image() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
mkdir "$image_path"
|
||||||
|
|
||||||
## Unzip the image
|
## Unzip the image
|
||||||
unzip -oq "$swipath" -x boot0 -d "$target_path"
|
unzip -oq "$swipath" -x boot0 -d "$image_path"
|
||||||
|
|
||||||
## Remove installer swi as it has lots of redundunt contents
|
## Remove installer swi as it has lots of redundunt contents
|
||||||
rm -f $swipath
|
rm -f $swipath
|
||||||
@ -59,19 +62,22 @@ extract_image() {
|
|||||||
|
|
||||||
## vfat does not support symbol link
|
## vfat does not support symbol link
|
||||||
if [ $rootfs_type != "vfat" ]; then
|
if [ $rootfs_type != "vfat" ]; then
|
||||||
mkdir -p "$target_path/{{ DOCKERFS_DIR }}"
|
mkdir -p "$image_path/{{ DOCKERFS_DIR }}"
|
||||||
|
|
||||||
## extract docker archive
|
## extract docker archive
|
||||||
tar xf "$target_path/{{ FILESYSTEM_DOCKERFS }}" -C "$target_path/{{ DOCKERFS_DIR }}"
|
tar xf "$image_path/{{ FILESYSTEM_DOCKERFS }}" -C "$image_path/{{ DOCKERFS_DIR }}"
|
||||||
|
|
||||||
## clean up docker archive
|
## clean up docker archive
|
||||||
rm -f "$target_path/{{ FILESYSTEM_DOCKERFS }}"
|
rm -f "$image_path/{{ FILESYSTEM_DOCKERFS }}"
|
||||||
else
|
else
|
||||||
echo "/mnt/flash is $rootfs_type, extract {{ FILESYSTEM_DOCKERFS }} in later stage"
|
echo "/mnt/flash is $rootfs_type, extract {{ FILESYSTEM_DOCKERFS }} in later stage"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## replace with boot swi
|
## use new reduced-size boot swi
|
||||||
mv "$target_path/{{ ABOOT_BOOT_IMAGE }}" "$swipath"
|
echo "SWI=flash:image-%%IMAGE_VERSION%%/{{ ABOOT_BOOT_IMAGE }}" > "$target_path/boot-config"
|
||||||
|
|
||||||
|
## remove original boot swi
|
||||||
|
rm -f "$swipath"
|
||||||
|
|
||||||
## sync disk operations
|
## sync disk operations
|
||||||
sync
|
sync
|
||||||
@ -118,14 +124,14 @@ echo "$append" >/tmp/append
|
|||||||
parse_environment_config >>/tmp/append
|
parse_environment_config >>/tmp/append
|
||||||
cat /etc/cmdline | sed "/^\(${bootconfigvars// /\|}\|crashkernel\|loglevel\|ignore_loglevel\)\(\$\|=\)/d;/^\$/d" >>/tmp/append
|
cat /etc/cmdline | sed "/^\(${bootconfigvars// /\|}\|crashkernel\|loglevel\|ignore_loglevel\)\(\$\|=\)/d;/^\$/d" >>/tmp/append
|
||||||
|
|
||||||
echo "rw loop=fs.squashfs loopfstype=squashfs apparmor=1 security=apparmor quiet" >>/tmp/append
|
echo "rw loop=image-%%IMAGE_VERSION%%/fs.squashfs loopfstype=squashfs apparmor=1 security=apparmor quiet" >>/tmp/append
|
||||||
|
|
||||||
# process platform specific operations
|
# process platform specific operations
|
||||||
platform_specific
|
platform_specific
|
||||||
|
|
||||||
# use extra parameters from kernel-params hook if the file exists
|
# use extra parameters from kernel-params hook if the file exists
|
||||||
if [ -f "$target_path/$kernel_params" ]; then
|
if [ -f "$image_path/$kernel_params" ]; then
|
||||||
cat "$target_path/$kernel_params" >>/tmp/append
|
cat "$image_path/$kernel_params" >>/tmp/append
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# setting root partition if not overridden by kernel-params
|
# setting root partition if not overridden by kernel-params
|
||||||
@ -137,15 +143,15 @@ fi
|
|||||||
|
|
||||||
# check the hash file in the image, and determine to install or just skip
|
# check the hash file in the image, and determine to install or just skip
|
||||||
GIT_REVISION=$(unzip -p "$swipath" .imagehash)
|
GIT_REVISION=$(unzip -p "$swipath" .imagehash)
|
||||||
LOCAL_IMAGEHASH=$(cat $target_path/.imagehash 2>/dev/null || true)
|
LOCAL_IMAGEHASH=$(cat $image_path/.imagehash 2>/dev/null || true)
|
||||||
if [ "$GIT_REVISION" != "$LOCAL_IMAGEHASH" ]; then
|
if [ "$GIT_REVISION" != "$LOCAL_IMAGEHASH" ]; then
|
||||||
extract_image
|
extract_image
|
||||||
write_machine_config
|
write_machine_config
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# chainloading using kexec
|
# chainloading using kexec
|
||||||
initrd_path="$target_path/$initrd"
|
initrd_path="$image_path/$initrd"
|
||||||
kernel_path="$target_path/$kernel"
|
kernel_path="$image_path/$kernel"
|
||||||
cmdline="$(tr '\n' ' ' </tmp/append)"
|
cmdline="$(tr '\n' ' ' </tmp/append)"
|
||||||
|
|
||||||
kexec --load --initrd="$initrd_path" --append="$cmdline" "$kernel_path"
|
kexec --load --initrd="$initrd_path" --append="$cmdline" "$kernel_path"
|
||||||
|
@ -15,7 +15,9 @@
|
|||||||
|
|
||||||
echo "install platform dependent packages at the first boot time"
|
echo "install platform dependent packages at the first boot time"
|
||||||
|
|
||||||
if [ -f /host/platform/firsttime ]; then
|
sonic_version=$(cat /etc/sonic/sonic_version.yml | grep build_version | cut -f2 -d" ")
|
||||||
|
|
||||||
|
if [ -f /host/image-$sonic_version/platform/firsttime ]; then
|
||||||
|
|
||||||
if [ -n "$aboot_platform" ]; then
|
if [ -n "$aboot_platform" ]; then
|
||||||
platform=$aboot_platform
|
platform=$aboot_platform
|
||||||
@ -23,17 +25,17 @@ if [ -f /host/platform/firsttime ]; then
|
|||||||
platform=$onie_platform
|
platform=$onie_platform
|
||||||
else
|
else
|
||||||
echo "Unknown sonic platform"
|
echo "Unknown sonic platform"
|
||||||
rm /host/platform/firsttime
|
rm /host/image-$sonic_version/platform/firsttime
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/
|
cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/
|
||||||
|
|
||||||
if [ -d /host/platform/$platform ]; then
|
if [ -d /host/image-$sonic_version/platform/$platform ]; then
|
||||||
dpkg -i /host/platform/$platform/*.deb
|
dpkg -i /host/image-$sonic_version/platform/$platform/*.deb
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm /host/platform/firsttime
|
rm /host/image-$sonic_version/platform/firsttime
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
@ -116,6 +116,10 @@ for x in "$@"; do
|
|||||||
;;
|
;;
|
||||||
varlog_size=*)
|
varlog_size=*)
|
||||||
varlog_size="${x#varlog_size=}"
|
varlog_size="${x#varlog_size=}"
|
||||||
|
;;
|
||||||
|
image_dir=*)
|
||||||
|
x1="${x#loop=}"
|
||||||
|
image_dir="${x1%/*}"
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
root_dev="$ROOT"
|
root_dev="$ROOT"
|
||||||
@ -191,7 +195,7 @@ cmd="mount -t ext4 $root_dev $root_mnt"
|
|||||||
run_cmd "$cmd" "$err_msg"
|
run_cmd "$cmd" "$err_msg"
|
||||||
|
|
||||||
err_msg="Error: extract docker directory"
|
err_msg="Error: extract docker directory"
|
||||||
cmd="[ -f $tmp_mnt/{{ FILESYSTEM_DOCKERFS }} ] && rm -rf $root_mnt/{{ DOCKERFS_DIR }} && mkdir $root_mnt/{{ DOCKERFS_DIR }} && tar xzf $tmp_mnt/{{ FILESYSTEM_DOCKERFS }} -C $root_mnt/{{ DOCKERFS_DIR }} && rm -f $tmp_mnt/{{ FILESYSTEM_DOCKERFS }}"
|
cmd="[ -f $tmp_mnt/$image_dir/{{ FILESYSTEM_DOCKERFS }} ] && rm -rf $root_mnt/$image_dir/{{ DOCKERFS_DIR }} && mkdir -p $root_mnt/$image_dir/{{ DOCKERFS_DIR }} && tar xzf $tmp_mnt/$image_dir/{{ FILESYSTEM_DOCKERFS }} -C $root_mnt/$image_dir/{{ DOCKERFS_DIR }} && rm -f $tmp_mnt/$image_dir/{{ FILESYSTEM_DOCKERFS }}"
|
||||||
run_cmd "$cmd" "$err_msg"
|
run_cmd "$cmd" "$err_msg"
|
||||||
|
|
||||||
err_msg="Error: copying files form $tmp_mnt to $root_mnt failed"
|
err_msg="Error: copying files form $tmp_mnt to $root_mnt failed"
|
||||||
|
@ -6,17 +6,18 @@ case $1 in
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
## Mount the aufs file system: rw layer over squashfs
|
## Mount the aufs file system: rw layer over squashfs
|
||||||
mkdir -p ${rootmnt}/host/rw
|
image_dir=$(cat /proc/cmdline | sed -e 's/.*loop=\(\S*\)\/.*/\1/')
|
||||||
mount -n -o dirs=${rootmnt}/host/rw:${rootmnt}=ro -t aufs root-aufs ${rootmnt}
|
mkdir -p ${rootmnt}/host/$image_dir/rw
|
||||||
|
mount -n -o dirs=${rootmnt}/host/$image_dir/rw:${rootmnt}=ro -t aufs root-aufs ${rootmnt}
|
||||||
## Check if the root block device is still there
|
## Check if the root block device is still there
|
||||||
[ -b ${ROOT} ] || mdev -s
|
[ -b ${ROOT} ] || mdev -s
|
||||||
## Mount the raw partition again
|
## Mount the raw partition again
|
||||||
mount ${ROOT} ${rootmnt}/host
|
mount ${ROOT} ${rootmnt}/host
|
||||||
## Mount the working directory of docker engine in the raw partition, bypass the aufs
|
## Mount the working directory of docker engine in the raw partition, bypass the aufs
|
||||||
mkdir -p ${rootmnt}/var/lib/docker
|
mkdir -p ${rootmnt}/var/lib/docker
|
||||||
mount --bind ${rootmnt}/host/{{ DOCKERFS_DIR }} ${rootmnt}/var/lib/docker
|
mount --bind ${rootmnt}/host/$image_dir/{{ DOCKERFS_DIR }} ${rootmnt}/var/lib/docker
|
||||||
## Mount the boot directory in the raw partition, bypass the aufs
|
## Mount the boot directory in the raw partition, bypass the aufs
|
||||||
mkdir -p ${rootmnt}/boot
|
mkdir -p ${rootmnt}/boot
|
||||||
mount --bind ${rootmnt}/host/boot ${rootmnt}/boot
|
mount --bind ${rootmnt}/host/$image_dir/boot ${rootmnt}/boot
|
||||||
## Mount loop device for /var/log
|
## Mount loop device for /var/log
|
||||||
[ -f ${rootmnt}/host/disk-img/var-log.ext4 ] && mount -t ext4 -o loop,rw ${rootmnt}/host/disk-img/var-log.ext4 ${rootmnt}/var/log
|
[ -f ${rootmnt}/host/disk-img/var-log.ext4 ] && mount -t ext4 -o loop,rw ${rootmnt}/host/disk-img/var-log.ext4 ${rootmnt}/var/log
|
||||||
|
@ -5,10 +5,6 @@
|
|||||||
#
|
#
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
# Function definitions
|
|
||||||
# wc -l
|
|
||||||
line_count() { return $(echo $1 | wc -l); }
|
|
||||||
|
|
||||||
# Appends a command to a trap, which is needed because default trap behavior is to replace
|
# Appends a command to a trap, which is needed because default trap behavior is to replace
|
||||||
# previous trap for the same signal
|
# previous trap for the same signal
|
||||||
# - 1st arg: code to add
|
# - 1st arg: code to add
|
||||||
@ -55,7 +51,14 @@ ONIE_PLATFORM_EXTRA_CMDLINE_LINUX=""
|
|||||||
# Default var/log device size in MB
|
# Default var/log device size in MB
|
||||||
VAR_LOG_SIZE=4096
|
VAR_LOG_SIZE=4096
|
||||||
|
|
||||||
|
if [ -d "/etc/sonic" ]; then
|
||||||
|
echo "Installing SONiC in SONiC"
|
||||||
|
install_env="sonic"
|
||||||
|
else
|
||||||
|
echo "Installing SONiC in ONIE"
|
||||||
|
install_env="onie"
|
||||||
[ -r platforms/$onie_platform ] && source platforms/$onie_platform
|
[ -r platforms/$onie_platform ] && source platforms/$onie_platform
|
||||||
|
fi
|
||||||
|
|
||||||
# Install demo on same block device as ONIE
|
# Install demo on same block device as ONIE
|
||||||
onie_dev=$(blkid | grep ONIE-BOOT | head -n 1 | awk '{print $1}' | sed -e 's/:.*$//')
|
onie_dev=$(blkid | grep ONIE-BOOT | head -n 1 | awk '{print $1}' | sed -e 's/:.*$//')
|
||||||
@ -69,48 +72,26 @@ cur_part=$(cat /proc/mounts | awk "{ if(\$2==\"/\") print \$1 }" | grep $blk_dev
|
|||||||
}
|
}
|
||||||
|
|
||||||
# If running in ONIE
|
# If running in ONIE
|
||||||
if [ "$onie_dev" = "$cur_part" ] || [ -z "$cur_part" ]; then
|
if [ "$install_env" = "onie" ]; then
|
||||||
# The onie bin tool prefix
|
# The onie bin tool prefix
|
||||||
onie_bin=
|
onie_bin=
|
||||||
# The persistent ONIE directory location
|
# The persistent ONIE directory location
|
||||||
onie_root_dir=/mnt/onie-boot/onie
|
onie_root_dir=/mnt/onie-boot/onie
|
||||||
# The onie file system root
|
# The onie file system root
|
||||||
onie_initrd_tmp=/
|
onie_initrd_tmp=/
|
||||||
# Else running in normal Linux
|
|
||||||
else
|
|
||||||
# Mount ONIE-BOOT partition
|
|
||||||
onie_mnt=$(mktemp -d) || {
|
|
||||||
echo "Error: Unable to create file system mount point"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
trap_push "fuser -km $onie_mnt || umount $onie_mnt || rmdir $onie_mnt || true"
|
|
||||||
mount $onie_dev $onie_mnt
|
|
||||||
onie_root_dir=$onie_mnt/onie
|
|
||||||
|
|
||||||
# Mount initrd inside ONIE-BOOT partition
|
|
||||||
onie_initrd_tmp=$(mktemp -d) || {
|
|
||||||
echo "Error: Unable to create file system mount point"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
trap_push "rm -rf $onie_initrd_tmp || true"
|
|
||||||
cd $onie_initrd_tmp
|
|
||||||
# Note: use wildcard in filename below to prevent hard-code version
|
|
||||||
cat $onie_mnt/onie/initrd.img-*-onie | unxz | cpio -id
|
|
||||||
cd -
|
|
||||||
onie_bin="chroot $onie_initrd_tmp"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# The build system prepares this script by replacing %%DEMO-TYPE%%
|
# The build system prepares this script by replacing %%DEMO-TYPE%%
|
||||||
# with "OS" or "DIAG".
|
# with "OS" or "DIAG".
|
||||||
demo_type="%%DEMO_TYPE%%"
|
demo_type="%%DEMO_TYPE%%"
|
||||||
|
|
||||||
# The build system prepares this script by replacing %%GIT_REVISION%%
|
# The build system prepares this script by replacing %%IMAGE_VERSION%%
|
||||||
# with git revision hash as a version identifier
|
# with git revision hash as a version identifier
|
||||||
git_revision="%%GIT_REVISION%%"
|
image_version="%%IMAGE_VERSION%%"
|
||||||
timestamp="$(date -u +%Y%m%d)"
|
timestamp="$(date -u +%Y%m%d)"
|
||||||
|
|
||||||
demo_volume_label="SONiC-${demo_type}"
|
demo_volume_label="SONiC-${demo_type}"
|
||||||
demo_volume_revision_label="SONiC-${demo_type}-${git_revision}"
|
demo_volume_revision_label="SONiC-${demo_type}-${image_version}"
|
||||||
|
|
||||||
# auto-detect whether BIOS or UEFI
|
# auto-detect whether BIOS or UEFI
|
||||||
if [ -d "/sys/firmware/efi/efivars" ] ; then
|
if [ -d "/sys/firmware/efi/efivars" ] ; then
|
||||||
@ -119,6 +100,7 @@ else
|
|||||||
firmware="bios"
|
firmware="bios"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$install_env" != "sonic" ]; then
|
||||||
# determine ONIE partition type
|
# determine ONIE partition type
|
||||||
onie_partition_type=$(${onie_bin} onie-sysinfo -t)
|
onie_partition_type=$(${onie_bin} onie-sysinfo -t)
|
||||||
# demo partition size in MB
|
# demo partition size in MB
|
||||||
@ -133,6 +115,7 @@ else
|
|||||||
echo "ERROR: Unsupported partition type: $onie_partition_type"
|
echo "ERROR: Unsupported partition type: $onie_partition_type"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Creates a new partition for the DEMO OS.
|
# Creates a new partition for the DEMO OS.
|
||||||
#
|
#
|
||||||
@ -381,6 +364,9 @@ demo_install_uefi_grub()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
image_dir="image-$image_version"
|
||||||
|
|
||||||
|
if [ "$install_env" != "sonic" ]; then
|
||||||
eval $create_demo_partition $blk_dev
|
eval $create_demo_partition $blk_dev
|
||||||
demo_dev=$(echo $blk_dev | sed -e 's/\(mmcblk[0-9]\)/\1p/')$demo_part
|
demo_dev=$(echo $blk_dev | sed -e 's/\(mmcblk[0-9]\)/\1p/')$demo_part
|
||||||
|
|
||||||
@ -397,34 +383,76 @@ ${onie_bin} mount -t ext4 -o defaults,rw $demo_dev $demo_mnt || {
|
|||||||
echo "Error: Unable to mount $demo_dev on $demo_mnt"
|
echo "Error: Unable to mount $demo_dev on $demo_mnt"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
demo_mnt="/host"
|
||||||
|
running_sonic_revision=$(cat /etc/sonic/sonic_version.yml | grep build_version | cut -f2 -d" ")
|
||||||
|
# Prevent installing existing SONiC if it is running
|
||||||
|
if [ "$image_dir" = "image-$running_sonic_revision" ]; then
|
||||||
|
echo "Error: Unable to install SONiC version $running_sonic_revision. Running SONiC has the same version"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Remove extra SONiC images if any
|
||||||
|
for f in $demo_mnt/image-* ; do
|
||||||
|
if [ -d $f ] && [ "$f" != "$demo_mnt/image-$running_sonic_revision" ] && [ "$f" != "$demo_mnt/$image_dir" ]; then
|
||||||
|
echo "Removing old SONiC installation $f"
|
||||||
|
rm -rf $f
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Installing SONiC to $demo_mnt/$image_dir"
|
||||||
|
|
||||||
|
# Create target directory or clean it up if exists
|
||||||
|
if [ -d $demo_mnt/$image_dir ]; then
|
||||||
|
echo "Directory $demo_mnt/$image_dir/ already exists. Cleaning up..."
|
||||||
|
rm -rf $demo_mnt/$image_dir/*
|
||||||
|
else
|
||||||
|
mkdir $demo_mnt/$image_dir || {
|
||||||
|
echo "Error: Unable to create SONiC directory"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
|
||||||
# Decompress the file for the file system directly to the partition
|
# Decompress the file for the file system directly to the partition
|
||||||
unzip $ONIE_INSTALLER_PAYLOAD -d $demo_mnt
|
unzip $ONIE_INSTALLER_PAYLOAD -d $demo_mnt/$image_dir
|
||||||
|
|
||||||
if [ -f $demo_mnt/$FILESYSTEM_DOCKERFS ]; then
|
if [ -f $demo_mnt/$image_dir/$FILESYSTEM_DOCKERFS ]; then
|
||||||
cd $demo_mnt && mkdir -p $DOCKERFS_DIR && tar xf $FILESYSTEM_DOCKERFS -C $DOCKERFS_DIR && rm -f $FILESYSTEM_DOCKERFS; cd $OLDPWD
|
cd $demo_mnt/$image_dir && mkdir -p $DOCKERFS_DIR && tar xf $FILESYSTEM_DOCKERFS -C $DOCKERFS_DIR && rm -f $FILESYSTEM_DOCKERFS; cd $OLDPWD
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create loop device for /var/log to limit its size to $VAR_LOG_SIZE MB
|
# Create loop device for /var/log to limit its size to $VAR_LOG_SIZE MB
|
||||||
|
if [ -f $demo_mnt/disk-img/var-log.ext4 ]; then
|
||||||
|
current_log_size_mb=$(ls -l --block-size=M $demo_mnt/disk-img/var-log.ext4 | cut -f5 -d" ")
|
||||||
|
if [ "$current_log_size_mb" = "$VAR_LOG_SIZE"M ]; then
|
||||||
|
echo "Log file system already exists. Size: ${VAR_LOG_SIZE}MB"
|
||||||
|
VAR_LOG_SIZE=0
|
||||||
|
else
|
||||||
|
rm -rf $demo_mnt/disk-img
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$VAR_LOG_SIZE" != "0" ]; then
|
if [ "$VAR_LOG_SIZE" != "0" ]; then
|
||||||
|
echo "Creating new log file system. Size: ${VAR_LOG_SIZE}MB"
|
||||||
mkdir -p $demo_mnt/disk-img
|
mkdir -p $demo_mnt/disk-img
|
||||||
dd if=/dev/zero of=$demo_mnt/disk-img/var-log.ext4 count=$((2048*$VAR_LOG_SIZE))
|
dd if=/dev/zero of=$demo_mnt/disk-img/var-log.ext4 count=$((2048*$VAR_LOG_SIZE))
|
||||||
mkfs.ext4 -q $demo_mnt/disk-img/var-log.ext4 -F
|
mkfs.ext4 -q $demo_mnt/disk-img/var-log.ext4 -F
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$install_env" != "sonic" ]; then
|
||||||
# Store machine description in target file system
|
# Store machine description in target file system
|
||||||
cp /etc/machine.conf $demo_mnt
|
cp /etc/machine.conf $demo_mnt
|
||||||
|
|
||||||
# Store installation log in target file system
|
# Store installation log in target file system
|
||||||
rm -f $onie_initrd_tmp/tmp/onie-support.tar.bz2
|
rm -f $onie_initrd_tmp/tmp/onie-support.tar.bz2
|
||||||
${onie_bin} onie-support /tmp
|
${onie_bin} onie-support /tmp
|
||||||
mv $onie_initrd_tmp/tmp/onie-support.tar.bz2 $demo_mnt
|
mv $onie_initrd_tmp/tmp/onie-support.tar.bz2 $demo_mnt/$image_dir/
|
||||||
|
|
||||||
if [ "$firmware" = "uefi" ] ; then
|
if [ "$firmware" = "uefi" ] ; then
|
||||||
demo_install_uefi_grub "$demo_mnt" "$blk_dev"
|
demo_install_uefi_grub "$demo_mnt" "$blk_dev"
|
||||||
else
|
else
|
||||||
demo_install_grub "$demo_mnt" "$blk_dev"
|
demo_install_grub "$demo_mnt" "$blk_dev"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Create a minimal grub.cfg that allows for:
|
# Create a minimal grub.cfg that allows for:
|
||||||
# - configure the serial console
|
# - configure the serial console
|
||||||
@ -486,29 +514,42 @@ fi
|
|||||||
# Add a menu entry for the DEMO OS
|
# Add a menu entry for the DEMO OS
|
||||||
# Note: assume that apparmor is supported in the kernel
|
# Note: assume that apparmor is supported in the kernel
|
||||||
demo_grub_entry="$demo_volume_revision_label"
|
demo_grub_entry="$demo_volume_revision_label"
|
||||||
|
if [ "$install_env" = "sonic" ]; then
|
||||||
|
old_sonic_menuentry=$(cat /host/grub/grub.cfg | sed "/$running_sonic_revision/,/}/!d")
|
||||||
|
demo_dev=$(echo $old_sonic_menuentry | sed -e "s/.*root\=\(.*\)rw.*/\1/")
|
||||||
|
onie_menuentry=$(cat /host/grub/grub.cfg | sed "/menuentry ONIE/,/}/!d")
|
||||||
|
fi
|
||||||
|
|
||||||
cat <<EOF >> $grub_cfg
|
cat <<EOF >> $grub_cfg
|
||||||
menuentry '$demo_grub_entry' {
|
menuentry '$demo_grub_entry' {
|
||||||
search --no-floppy --label --set=root $demo_volume_label
|
search --no-floppy --label --set=root $demo_volume_label
|
||||||
echo 'Loading $demo_volume_revision_label $demo_type kernel ...'
|
echo 'Loading $demo_volume_label $demo_type kernel ...'
|
||||||
insmod gzio
|
insmod gzio
|
||||||
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
|
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
|
||||||
insmod part_msdos
|
insmod part_msdos
|
||||||
insmod ext2
|
insmod ext2
|
||||||
linux /boot/vmlinuz-3.16.0-4-amd64 root=$demo_dev rw $GRUB_CMDLINE_LINUX \
|
linux /$image_dir/boot/vmlinuz-3.16.0-4-amd64 root=$demo_dev rw $GRUB_CMDLINE_LINUX \
|
||||||
loop=$FILESYSTEM_SQUASHFS loopfstype=squashfs \
|
loop=$image_dir/$FILESYSTEM_SQUASHFS loopfstype=squashfs \
|
||||||
apparmor=1 security=apparmor $ONIE_PLATFORM_EXTRA_CMDLINE_LINUX
|
apparmor=1 security=apparmor $ONIE_PLATFORM_EXTRA_CMDLINE_LINUX
|
||||||
echo 'Loading $demo_volume_revision_label $demo_type initial ramdisk ...'
|
echo 'Loading $demo_volume_label $demo_type initial ramdisk ...'
|
||||||
initrd /boot/initrd.img-3.16.0-4-amd64
|
initrd /$image_dir/boot/initrd.img-3.16.0-4-amd64
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
if [ "$install_env" != "sonic" ]; then
|
||||||
# Add menu entries for ONIE -- use the grub fragment provided by the
|
# Add menu entries for ONIE -- use the grub fragment provided by the
|
||||||
# ONIE distribution.
|
# ONIE distribution.
|
||||||
$onie_root_dir/grub.d/50_onie_grub >> $grub_cfg
|
$onie_root_dir/grub.d/50_onie_grub >> $grub_cfg
|
||||||
|
|
||||||
mkdir -p $onie_initrd_tmp/$demo_mnt/grub
|
mkdir -p $onie_initrd_tmp/$demo_mnt/grub
|
||||||
|
else
|
||||||
|
cat <<EOF >> $grub_cfg
|
||||||
|
$old_sonic_menuentry
|
||||||
|
$onie_menuentry
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
cp $grub_cfg $onie_initrd_tmp/$demo_mnt/grub/grub.cfg
|
cp $grub_cfg $onie_initrd_tmp/$demo_mnt/grub/grub.cfg
|
||||||
|
|
||||||
cd /
|
cd /
|
||||||
|
|
||||||
echo "Installed SONiC base image $demo_volume_revision_label successfully"
|
echo "Installed SONiC base image $demo_volume_label successfully"
|
||||||
|
@ -12,7 +12,7 @@ installer_dir=$4
|
|||||||
platform_conf=$5
|
platform_conf=$5
|
||||||
output_file=$6
|
output_file=$6
|
||||||
demo_type=$7
|
demo_type=$7
|
||||||
git_revision=$8
|
image_version=$8
|
||||||
onie_image_part_size=$9
|
onie_image_part_size=$9
|
||||||
|
|
||||||
shift 9
|
shift 9
|
||||||
@ -29,7 +29,7 @@ if [ ! -d $installer_dir/$arch ] || \
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$git_revision" ] || {
|
[ -n "$image_version" ] || {
|
||||||
echo "Error: Invalid git revisions"
|
echo "Error: Invalid git revisions"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
@ -85,7 +85,7 @@ EXTRA_CMDLINE_LINUX=`echo $EXTRA_CMDLINE_LINUX | sed -e 's/[\/&]/\\\&/g'`
|
|||||||
|
|
||||||
# Tailor the demo installer for OS mode or DIAG mode
|
# Tailor the demo installer for OS mode or DIAG mode
|
||||||
sed -i -e "s/%%DEMO_TYPE%%/$demo_type/g" \
|
sed -i -e "s/%%DEMO_TYPE%%/$demo_type/g" \
|
||||||
-e "s/%%GIT_REVISION%%/$git_revision/g" \
|
-e "s/%%IMAGE_VERSION%%/$image_version/g" \
|
||||||
-e "s/%%ONIE_IMAGE_PART_SIZE%%/$onie_image_part_size/" \
|
-e "s/%%ONIE_IMAGE_PART_SIZE%%/$onie_image_part_size/" \
|
||||||
-e "s/%%EXTRA_CMDLINE_LINUX%%/$EXTRA_CMDLINE_LINUX/" \
|
-e "s/%%EXTRA_CMDLINE_LINUX%%/$EXTRA_CMDLINE_LINUX/" \
|
||||||
$tmp_installdir/install.sh || clean_up 1
|
$tmp_installdir/install.sh || clean_up 1
|
||||||
|
Loading…
Reference in New Issue
Block a user