Tony Breeds ef1f976faa Remove some old CentOS compatibility and address FIXMEs
In earlier commits it was noted that we aren't as complete as we could
be with the scripts in launch.  This commit removes detection of yum as
a package manager (which stopped being a real thin in CentOS-7).

And creates a more complete list of tools used in the appropriate
scripts

Change-Id: I4cd05da18155169fd640c06a151467aed6112a3d
2024-05-02 18:21:11 -05:00

134 lines
3.9 KiB
Bash

#!/usr/bin/env bash
# Copyright 2023 Red Hat, Inc. All rights reserved.
#
# Licensed 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.
# NOTE(tonyb): set and shopts are done after CLI parsing for brevity.
function usage {
echo "$(basename $0): -d [device] -g [vg name] -v [volume spec]"
echo " [device]: The device path to use as the Physical Volume: eg /dev/sdb"
echo " [vg name]: The name for the new Volume Group: eg main"
echo " [volume spec]: A colon ':' separated specification for a volume to create."
echo " This contains 3 parts"
echo " <name>: The Logical Volume name: eg afscache"
echo " <size>: The size (in extents) for the Logical Volume: eg 50%VG"
echo " <mount point>: The mount point for the volume: eg /var/cache/afscache"
echo ""
echo "NOTE: This script doesn't need to know the full size of the volume"
echo ""
echo "Example invocation:"
echo "# $(basename $0) -d /dev/sdb -g main -v afscache:50%VG:/var/cache/openafs -v proxycache:50%VG:/var/cache/apache2"
}
declare -a VOLUMES=()
while [ $# -gt 0 ] ; do
case "$1" in
-d|--device)
PV_DEVICE="${2}"
shift 1
;;
-g|--group)
VOLUME_GROUP="${2}"
shift 1
;;
-v|--volume)
VOLUMES+=("${2}")
shift 1
;;
--help)
usage
exit 0
;;
*)
echo "Unkown arg: '$1'"
echo ""
usage
exit 1
;;
esac
shift 1
done
if [ -z "${PV_DEVICE}" ] ; then
echo "You need to specify a device. Aborting"
usage
exit 1
fi
if [ -z "${VOLUME_GROUP}" ] ; then
echo "You need to specify a volume group name. Aborting"
usage
exit 1
fi
if [ -z "${VOLUMES[*]}" ] ; then
echo "You need to specify at least one volume. Aborting"
usage
exit 1
fi
if [ "$(id -u)" -ne 0 ] ; then
echo "You need to have root permissions for this script to run. Aborting."
echo ""
usage
exit 1
fi
# Sanity check that we don't break anything that already has an fs.
if blkid | grep -q $PV_DEVICE ; then
echo "$PV_DEVICE appears in blkid. Aborting."
blkid
exit 1
fi
# NOTE: This isn't expected to install any packages but just in case let us
# list the script requirements here
apt-get update && apt-get install -y e2fsprogs lvm2 parted perl
set -xeuo pipefail
parted --script $PV_DEVICE mklabel msdos mkpart primary 0% 100% set 1 lvm on
partprobe -s $PV_DEVICE
pvcreate ${PV_DEVICE}1
vgcreate ${VOLUME_GROUP} ${PV_DEVICE}1
for vol_spec in "${VOLUMES[@]}"; do
IFS=:
set -- $vol_spec
VOLUME_NAME="$1"
VOLUME_SIZE="$2"
VOLUME_MOUNT="$3"
VOLUME_DEVICE="/dev/${VOLUME_GROUP}/${VOLUME_NAME}"
lvcreate -l "${VOLUME_SIZE}" -n $VOLUME_NAME ${VOLUME_GROUP}
mkfs.ext4 -m 0 -j -L $VOLUME_NAME ${VOLUME_DEVICE}
tune2fs -i 0 -c 0 ${VOLUME_DEVICE}
# Remove existing fstab entries for this device.
# TODO(tonyb): Should this be a pre-check and error rather than silently cleaning it up
# We could also add a flag to do this eg '--fstab-cleanup' or '--permissive'.
# This applies to othre scripts in this dir
perl -nle "m,${VOLUME_DEVICE}, || print" -i /etc/fstab
if [ ! -d "$VOLUME_MOUNT" ] ; then
mkdir -p "$VOLUME_MOUNT"
fi
echo "${VOLUME_DEVICE} ${VOLUME_MOUNT} ext4 errors=remount-ro,barrier=0 0 2" >> /etc/fstab
done
exit 0