#!/bin/sh -e

PREREQS="varlog"

prereqs() { echo "$PREREQS"; }

case $1 in
  prereqs)
  prereqs
    exit 0
    ;;
esac

set_tmpfs_log_partition_size()
{
  varlogsize=128

  # NOTE: certain platforms, when reaching initramfs stage, have a small
  #       limit of mounting tmpfs partition, potentially due to amount
  #       of RAM available in this stage. e.g. Arista 7050-qx32[s] and 7060-cx32s
  [ X"$aboot_platform" = X"x86_64-arista_7050_qx32"  ] && return
  [ X"$aboot_platform" = X"x86_64-arista_7050_qx32s"  ] && return
  [ X"$aboot_platform" = X"x86_64-arista_7060_cx32s"  ] && return

  # set varlogsize to existing var-log.ext4 size
  if [ -f ${rootmnt}/host/disk-img/var-log.ext4 ]; then
    varlogsize=$(ls -l ${rootmnt}/host/disk-img/var-log.ext4 | awk '{print $5}')
    varlogsize=$(($varlogsize/1024/1024))
  fi

  # make sure varlogsize is between 5% to 10% of total memory size
  memkb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
  memmb=$(($memkb/1024))
  minsize=$(($memmb*5/100))
  maxsize=$(($memmb*10/100))

  [ $minsize -ge $varlogsize ] && varlogsize=$minsize
  [ $maxsize -le $varlogsize ] && varlogsize=$maxsize
}

## Mount the overlay file system: rw layer over squashfs
image_dir=$(cat /proc/cmdline | sed -e 's/.*loop=\(\S*\)\/.*/\1/')
mkdir -p ${rootmnt}/host/$image_dir/rw
mkdir -p ${rootmnt}/host/$image_dir/work
mount -n -o lowerdir=${rootmnt},upperdir=${rootmnt}/host/$image_dir/rw,workdir=${rootmnt}/host/$image_dir/work -t overlay root-overlay ${rootmnt}
## Check if the root block device is still there
[ -b ${ROOT} ] || mdev -s
## Mount the raw partition again
mount ${ROOT} ${rootmnt}/host

mkdir -p ${rootmnt}/var/lib/docker
if [ -f ${rootmnt}/host/$image_dir/{{ FILESYSTEM_DOCKERFS }} ]; then
    ## mount tmpfs and extract docker into it
    mount -t tmpfs -o rw,nodev,size={{ DOCKER_RAMFS_SIZE }} tmpfs ${rootmnt}/var/lib/docker
    tar xz --numeric-owner -f ${rootmnt}/host/$image_dir/{{ FILESYSTEM_DOCKERFS }} -C ${rootmnt}/var/lib/docker
else
    ## Mount the working directory of docker engine in the raw partition, bypass the overlay
    mount --bind ${rootmnt}/host/$image_dir/{{ DOCKERFS_DIR }} ${rootmnt}/var/lib/docker
fi

## Mount the boot directory in the raw partition, bypass the overlay
mkdir -p ${rootmnt}/boot
mount --bind ${rootmnt}/host/$image_dir/boot ${rootmnt}/boot
## Mount loop device or tmpfs for /var/log
onie_platform=""
aboot_platform=""
. ${rootmnt}/host/machine.conf
if [ X"$aboot_platform" = X"x86_64-arista_7050_qx32"  ] ||
   [ X"$aboot_platform" = X"x86_64-arista_7050_qx32s" ] ||
   [ X"$aboot_platform" = X"x86_64-arista_7060_cx32s" ]
then
  set_tmpfs_log_partition_size
  mount -t tmpfs -o rw,nosuid,nodev,size=${varlogsize}M tmpfs ${rootmnt}/var/log
  [ -f ${rootmnt}/host/disk-img/var-log.ext4 ] && rm -rf ${rootmnt}/host/disk-img/var-log.ext4
else
  [ -f ${rootmnt}/host/disk-img/var-log.ext4 ] && mount -t ext4 -o loop,rw ${rootmnt}/host/disk-img/var-log.ext4 ${rootmnt}/var/log
fi