summaryrefslogtreecommitdiffstats
path: root/src/spdk/scripts/ceph/start.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/scripts/ceph/start.sh')
-rwxr-xr-xsrc/spdk/scripts/ceph/start.sh139
1 files changed, 139 insertions, 0 deletions
diff --git a/src/spdk/scripts/ceph/start.sh b/src/spdk/scripts/ceph/start.sh
new file mode 100755
index 000000000..edff469f3
--- /dev/null
+++ b/src/spdk/scripts/ceph/start.sh
@@ -0,0 +1,139 @@
+#!/usr/bin/env bash
+# create mon
+
+set -x
+set -e
+
+script_dir=$(readlink -f $(dirname $0))
+
+base_dir=/var/tmp/ceph
+mon_ip=$1
+mon_dir=${base_dir}/mon.a
+pid_dir=${base_dir}/pid
+ceph_conf=${base_dir}/ceph.conf
+mnt_dir=${base_dir}/mnt
+image=/var/tmp/ceph_raw.img
+dev=/dev/loop200
+
+umount ${dev}p2 || true
+losetup -d $dev || true
+
+# partition osd
+if [ -d $base_dir ]; then
+ rm -rf $base_dir
+fi
+mkdir ${base_dir}
+cp ${script_dir}/ceph.conf $ceph_conf
+
+if [ ! -e $image ]; then
+ fallocate -l 4G $image
+fi
+
+mknod ${dev} b 7 200 || true
+losetup ${dev} ${image} || true
+
+PARTED="parted -s"
+SGDISK="sgdisk"
+
+echo "Partitioning ${dev}"
+${PARTED} ${dev} mktable gpt
+sleep 2
+
+${PARTED} ${dev} mkpart primary 0% 2GiB
+${PARTED} ${dev} mkpart primary 2GiB 100%
+
+partno=0
+echo "Setting name on ${dev}"
+${SGDISK} -c 1:osd-device-${partno}-journal ${dev}
+${SGDISK} -c 2:osd-device-${partno}-data ${dev}
+kpartx ${dev}
+
+# later versions of ceph-12 have a lot of changes, to compatible with the new
+# version of ceph-deploy.
+ceph_version=$(ceph -v | awk '{print $3}')
+ceph_maj=${ceph_version%%.*}
+if [ $ceph_maj -gt 12 ]; then
+ update_config=true
+ rm -f /var/log/ceph/ceph-mon.a.log || true
+ set_min_mon_release="--set-min-mon-release 14"
+ ceph_osd_extra_config="--check-needs-journal --no-mon-config"
+else
+ update_config=false
+ set_min_mon_release=""
+ ceph_osd_extra_config=""
+fi
+
+# prep osds
+
+mnt_pt=${mnt_dir}/osd-device-0-data
+mkdir -p ${mnt_pt}
+mkfs.xfs -f /dev/disk/by-partlabel/osd-device-0-data
+mount /dev/disk/by-partlabel/osd-device-0-data ${mnt_pt}
+cat << EOL >> $ceph_conf
+osd data = ${mnt_pt}
+osd journal = /dev/disk/by-partlabel/osd-device-0-journal
+
+# add mon address
+[mon.a]
+mon addr = ${mon_ip}:12046
+EOL
+
+# create mon
+rm -rf "${mon_dir:?}/"*
+mkdir -p ${mon_dir}
+mkdir -p ${pid_dir}
+rm -f /etc/ceph/ceph.client.admin.keyring
+
+ceph-authtool --create-keyring --gen-key --name=mon. ${base_dir}/keyring --cap mon 'allow *'
+ceph-authtool --gen-key --name=client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' ${base_dir}/keyring
+
+monmaptool --create --clobber --add a ${mon_ip}:12046 --print ${base_dir}/monmap $set_min_mon_release
+
+sh -c "ulimit -c unlimited && exec ceph-mon --mkfs -c ${ceph_conf} -i a --monmap=${base_dir}/monmap --keyring=${base_dir}/keyring --mon-data=${mon_dir}"
+
+if [ $update_config = true ]; then
+ sed -i 's/mon addr = /mon addr = v2:/g' $ceph_conf
+fi
+
+cp ${base_dir}/keyring ${mon_dir}/keyring
+
+cp $ceph_conf /etc/ceph/ceph.conf
+
+cp ${base_dir}/keyring /etc/ceph/keyring
+cp ${base_dir}/keyring /etc/ceph/ceph.client.admin.keyring
+chmod a+r /etc/ceph/ceph.client.admin.keyring
+
+ceph-run sh -c "ulimit -n 16384 && ulimit -c unlimited && exec ceph-mon -c ${ceph_conf} -i a --keyring=${base_dir}/keyring --pid-file=${base_dir}/pid/root@$(hostname).pid --mon-data=${mon_dir}" || true
+
+# after ceph-mon creation, ceph -s should work.
+if [ $update_config = true ]; then
+ # start to get whole log.
+ ceph-conf --name mon.a --show-config-value log_file
+
+ # add fsid to ceph config file.
+ fsid=$(ceph -s | grep id | awk '{print $2}')
+ sed -i 's/perf = true/perf = true\n\tfsid = '$fsid' \n/g' $ceph_conf
+
+ # unify the filesystem with the old versions.
+ sed -i 's/perf = true/perf = true\n\tosd objectstore = filestore\n/g' $ceph_conf
+ cat ${ceph_conf}
+fi
+
+# create osd
+
+i=0
+
+mkdir -p ${mnt_dir}
+
+uuid=$(uuidgen)
+ceph -c ${ceph_conf} osd create ${uuid} $i
+ceph-osd -c ${ceph_conf} -i $i --mkfs --mkkey --osd-uuid ${uuid} ${ceph_osd_extra_config}
+ceph -c ${ceph_conf} osd crush add osd.${i} 1.0 host=$(hostname) root=default
+ceph -c ${ceph_conf} -i ${mnt_dir}/osd-device-${i}-data/keyring auth add osd.${i} osd "allow *" mon "allow profile osd" mgr "allow *"
+
+# start osd
+pkill -9 ceph-osd || true
+sleep 2
+
+mkdir -p ${pid_dir}
+env -i TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=134217728 ceph-osd -c ${ceph_conf} -i 0 --pid-file=${pid_dir}/ceph-osd.0.pid