When user mistakenly forgot to pass parameter for a flag, our scripts misparses
next flag as the parameter.
ex) Correct usage is '--ntp-domain <domain> --setup-nic', but passed
'--ntp-domain --setup-nic'.
Result of that, next flag will ignore by scripts.
To prevent such behavior, reject any parameter that start with '--'.
Fixes #2609
Signed-off-by: Takuya ASADA <syuu@scylladb.com>
Message-Id: <20170815114751.6223-1-syuu@scylladb.com>
135 lines
3.1 KiB
Bash
Executable File
135 lines
3.1 KiB
Bash
Executable File
#!/bin/bash -e
|
|
#
|
|
# Copyright (C) 2015 ScyllaDB
|
|
|
|
. /usr/lib/scylla/scylla_lib.sh
|
|
|
|
print_usage() {
|
|
echo "scylla_raid_setup --disks /dev/hda,/dev/hdb... --raiddev /dev/md0 --update-fstab --root /var/lib/scylla --volume-role [all|data|commitlog]"
|
|
echo " --disks specify disks for RAID"
|
|
echo " --raiddev MD device name for RAID"
|
|
echo " --update-fstab update /etc/fstab for RAID"
|
|
echo " --root specify the root of the tree"
|
|
echo " --volume-role specify how will this device be used (data, commitlog, or all)"
|
|
exit 1
|
|
}
|
|
|
|
RAID=/dev/md0
|
|
FSTAB=0
|
|
ROOT=/var/lib/scylla
|
|
ROLE="all"
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
"--disks")
|
|
verify_args $@
|
|
DISKS=`echo "$2"|tr -s ',' ' '`
|
|
NR_DISK=`echo "$DISKS"|wc -w`
|
|
shift 2
|
|
;;
|
|
"--raiddev")
|
|
verify_args $@
|
|
RAID="$2"
|
|
shift 2
|
|
;;
|
|
"--update-fstab")
|
|
FSTAB=1
|
|
shift 1
|
|
;;
|
|
"--root")
|
|
verify_args $@
|
|
ROOT="$2"
|
|
shift 2
|
|
;;
|
|
"--volume-role")
|
|
verify_args $@
|
|
ROLE="$2"
|
|
shift 2
|
|
;;
|
|
*)
|
|
print_usage
|
|
;;
|
|
esac
|
|
done
|
|
|
|
ROOT=${ROOT%/}
|
|
case "$ROLE" in
|
|
"all")
|
|
MOUNT_AT=$ROOT
|
|
;;
|
|
"data")
|
|
MOUNT_AT="$ROOT/data"
|
|
;;
|
|
"commitlog")
|
|
MOUNT_AT="$ROOT/commitlog"
|
|
;;
|
|
*)
|
|
echo "Invalid role specified ($ROLE)"
|
|
print_usage
|
|
;;
|
|
esac
|
|
|
|
if [ "$DISKS" = "" ]; then
|
|
print_usage
|
|
fi
|
|
|
|
for dsk in $DISKS; do
|
|
if [ ! -b $dsk ]; then
|
|
echo "$dsk is not found"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo Creating RAID0 for scylla using $NR_DISK disk\(s\): $DISKS
|
|
if [ -e $RAID ]; then
|
|
echo "$RAID is already using"
|
|
exit 1
|
|
fi
|
|
if mountpoint -q $MOUNT_AT; then
|
|
echo "$MOUNT_AT is already mounted"
|
|
exit 1
|
|
fi
|
|
|
|
if is_debian_variant; then
|
|
env DEBIAN_FRONTEND=noninteractive apt-get -y install mdadm xfsprogs
|
|
elif is_gentoo_variant; then
|
|
emerge -uq sys-fs/mdadm sys-fs/xfsprogs
|
|
fi
|
|
if [ "$ID" = "ubuntu" ] && [ "$VERSION_ID" = "14.04" ]; then
|
|
mdadm --create --verbose --force --run $RAID --level=0 -c1024 --raid-devices=$NR_DISK $DISKS
|
|
mkfs.xfs $RAID -f
|
|
else
|
|
for dsk in $DISKS; do
|
|
blkdiscard $dsk &
|
|
done
|
|
wait
|
|
mdadm --create --verbose --force --run $RAID --level=0 -c1024 --raid-devices=$NR_DISK $DISKS
|
|
mkfs.xfs $RAID -f -K
|
|
fi
|
|
if is_debian_variant; then
|
|
mdadm --detail --scan > /etc/mdadm/mdadm.conf
|
|
else
|
|
mdadm --detail --scan > /etc/mdadm.conf
|
|
fi
|
|
|
|
mkdir -p "$MOUNT_AT"
|
|
mount -t xfs -o noatime $RAID "$MOUNT_AT"
|
|
|
|
# create this unconditionally so we are more robust about ordering
|
|
# if the script is run multiple times. But must do after mount in case
|
|
# we are mounting the root
|
|
mkdir -p "$ROOT/data"
|
|
mkdir -p "$ROOT/commitlog"
|
|
mkdir -p "$ROOT/coredump"
|
|
chown scylla:scylla "$ROOT"
|
|
chown scylla:scylla "$ROOT"/*
|
|
|
|
if [ $FSTAB -ne 0 ]; then
|
|
UUID=`blkid $RAID | awk '{print $2}'`
|
|
echo "$UUID $MOUNT_AT xfs noatime 0 0" >> /etc/fstab
|
|
fi
|
|
|
|
if is_debian_variant; then
|
|
update-initramfs -u
|
|
fi
|