#!/bin/bash # /usr/local/sbin/vm-firstrun.sh # This script depends on having these packages installed: # - cloud-utils-growpart # - parted # This should be a simple bash file that sets the CFG_* variables [ -f /etc/sysconfig/vm-firstrun ] && . /etc/sysconfig/vm-firstrun ## Set default values for anything that wasn't already set # This will be run at firstboot to generate the hostname CFG_HOSTNAME_SCRIPT="${CFG_HOSTNAME_SCRIPT:=uuidgen}" # These can be set in config, there's just no reason for a default besides (blank) # CFG_HOSTNAME_PREFIX="${CFG_HOSTNAME_PREFIX:=}" # CFG_HOSTNAME_POSTFIX="${CFG_HOSTNAME_POSTFIX:=}" CFG_DOMAIN="${CFG_DOMAIN:=localdomain}" CFG_ROOTFS_DISK="${CFG_ROOTFS_DISK:=/dev/vda}" CFG_DISK_TYPE="${CFG_DISK_TYPE:=lvm}" CFG_ROOTFS_PARTITION="${CFG_ROOTFS_PARTITION:=3}" CFG_ROOTFS_TYPE="${CFG_ROOTFS_TYPE:=xfs}" CFG_SERVICE_NAME="${CFG_SERVICE_NAME:=vm-firstrun}" ## Helper Functions function log() { echo "$@" | logger --stderr -t vm-firstrun } ## Do the things old_hostname="$(hostname -f)" new_hostname="${CFG_HOSTNAME_PREFIX}$(${CFG_HOSTNAME_SCRIPT})${CFG_HOSTNAME_POSTFIX}" if ! [ -z "${CFG_DOMAIN}" ]; then new_hostname="${new_hostname}.${CFG_DOMAIN}" fi log "Setting hostname from '${old_hostname}' to '${new_hostname}'" hostnamectl set-hostname "${new_hostname}" if [ -b "${CFG_ROOTFS_DISK}" ]; then if [ -b "${CFG_ROOTFS_DISK}${CFG_ROOTFS_PARTITION}" ]; then # # expand the partition # log "Expanding rootfs partition" # growpart "${CFG_ROOTFS_DISK}" "${CFG_ROOTFS_PARTITION}" # # reload partition table # log "Reloading partition table" # partprobe "${CFG_ROOTFS_DISK}" # expand the partition log "Expanding rootfs partition" growpart "${CFG_ROOTFS_DISK}" "${CFG_ROOTFS_PARTITION}" pvresize "${CFG_ROOTFS_DISK}""${CFG_ROOTFS_PARTITION}" lvextend -l +100%FREE /dev/mapper/centos-root # # reload partition table log "Reloading partition table" partprobe "${CFG_ROOTFS_DISK}" # grow the rootfs case "${CFG_ROOTFS_TYPE}" in xfs) log "Growing rootfs of type: ${CFG_ROOTFS_TYPE}" xfs_growfs / ;; ext*) log "Growing ${CFG_ROOTFS_TYPE} rootfs on device: ${CFG_ROOTFS_DISK}${CFG_ROOTFS_PARTITION}" resize2fs "${CFG_ROOTFS_DISK}${CFG_ROOTFS_PARTITION}" ;; *) log "Unsupported rootfs type: ${CFG_ROOTFS_TYPE}" log "Doing nothing, please grow the fs manually" ;; esac else log "rootfs partition not found, unable to expand: ${CFG_ROOTFS_DISK}${CFG_ROOTFS_PARTITION}" fi else log "rootfs disk not found, unable to expand: ${CFG_ROOTFS_DISK}" fi #Run update to get the latest packages log "Updating latest packages" yum update -y log "updating done" log "initial config done, disabling myself" systemctl disable "${CFG_SERVICE_NAME}"