#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

set -e
set -x

function configure_misc() {
  rm -fv /home/cloud/*.sh
  echo "cloud:`openssl rand -base64 32`" | chpasswd
}

function configure_rundisk_size() {
  # Debian's default is 10% of total RAM. This is too low when total is 256M.
  # See https://manpages.debian.org/stretch/initscripts/tmpfs.5.en.html
  echo "tmpfs /run tmpfs nodev,nosuid,size=20%,mode=755 0 0" >> /etc/fstab
}

function configure_sudoers() {
  cat >/etc/sudoers <<END
Defaults	env_reset
Defaults	exempt_group=admin
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root	  ALL=(ALL:ALL) ALL
%admin	ALL=NOPASSWD:/bin/chmod, /bin/cp, /bin/mkdir, /bin/mount, /bin/umount

#includedir /etc/sudoers.d
END
  echo 'cloud ALL=NOPASSWD:/bin/chmod, /bin/cp, /bin/mkdir, /bin/mount, /bin/umount, /sbin/halt' > /etc/sudoers.d/cloud
}

# clean up stuff copied in
function cleanup_final() {
  # this has to be here since it is the last file to run (and we remove ourselves)
  cd /home/cloud
  rm -fv *.iso
  rm -fv {apt_upgrade,authorized_keys,cleanup,install_systemvm_packages,zerodisk}.sh
  rm -fv configure_{acpid,conntrack,grub,locale,networking,persistent_config,systemvm_services}.sh /home/cloud/install_systemvm_packages.sh
  rm -fv .veewee_version .veewee_params .vbox_version
}

# Zero out the free space to save space in the final image:
function zero_disk() {
  df -h
  fstrim -av
  for path in / /boot /var/log /tmp
  do
    dd if=/dev/zero of=${path}/zero bs=1M || true
    sync
    rm -f ${path}/zero
  done
}

function finalize() {
  configure_misc
  configure_rundisk_size
  configure_sudoers
  cleanup_final
  sync
  zero_disk
  sync
}

return 2>/dev/null || finalize
