123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- #! /usr/bin/env 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
- #
- # https://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.
- #
- #
- # If this scripted is run out of /usr/bin or some other system bin directory
- # it should be linked to and not copied. Things like java jar files are found
- # relative to the canonical path of this script.
- #
- # use POSIX interface, symlink is followed automatically
- ZOOBIN="${BASH_SOURCE-$0}"
- ZOOBIN="$(dirname "$ZOOBIN")"
- ZOOBINDIR="$(cd "$ZOOBIN" && pwd)"
- if [[ -e "$ZOOBIN/../libexec/zkEnv.sh" ]]; then
- # shellcheck source=bin/zkEnv.sh
- . "$ZOOBINDIR"/../libexec/zkEnv.sh
- else
- # shellcheck source=bin/zkEnv.sh
- . "$ZOOBINDIR"/zkEnv.sh
- fi
- usage() {
- # the configfile will be properly formatted as long as the
- # configfile path is less then 40 chars, otw the line will look a
- # bit weird, but otherwise it's fine
- printf "usage: $0 <parameters>
- Optional parameters:
- -h Display this message
- --help Display this message
- --configfile=%-40s ZooKeeper config file
- --myid=# Set the myid to be used, if any (1-255)
- --force Force creation of the data/txnlog dirs
- " "$ZOOCFG"
- exit 1
- }
- initialize() {
- if [[ ! -e $ZOOCFG ]]; then
- echo "Unable to find config file at $ZOOCFG"
- exit 1
- fi
- ZOO_DATADIR="$(grep "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
- ZOO_DATALOGDIR="$(grep "^[[:space:]]*dataLogDir" "$ZOOCFG" | sed -e 's/.*=//')"
- if [[ -z $ZOO_DATADIR ]]; then
- echo "Unable to determine dataDir from $ZOOCFG"
- exit 1
- fi
- if [[ $FORCE -eq 1 ]]; then
- echo "Force enabled, data/txnlog directories will be re-initialized"
- else
- # we create if version-2 exists (ie real data), not the
- # parent. See comments in following section for more insight
- if [[ -d "$ZOO_DATADIR/version-2" ]]; then
- echo "ZooKeeper data directory already exists at $ZOO_DATADIR (or use --force to force re-initialization)"
- exit 1
- fi
- if [[ -n $ZOO_DATALOGDIR ]] && [[ -d "$ZOO_DATALOGDIR/version-2" ]]; then
- echo "ZooKeeper txnlog directory already exists at $ZOO_DATALOGDIR (or use --force to force re-initialization)"
- exit 1
- fi
- fi
- # remove the child files that we're (not) interested in, not the
- # parent. this allows for parent to be installed separately, and
- # permissions to be set based on overarching requirements. by
- # default we'll use the permissions of the user running this
- # script for the files contained by the parent. note also by using
- # -p the parent(s) will be created if it doesn't already exist
- rm -rf "$ZOO_DATADIR/myid" 2>/dev/null >/dev/null
- rm -rf "$ZOO_DATADIR/version-2" 2>/dev/null >/dev/null
- mkdir -p "$ZOO_DATADIR/version-2"
- if [[ -n $ZOO_DATALOGDIR ]]; then
- rm -rf "$ZOO_DATALOGDIR/myid" 2>/dev/null >/dev/null
- rm -rf "$ZOO_DATALOGDIR/version-2" 2>/dev/null >/dev/null
- mkdir -p "$ZOO_DATALOGDIR/version-2"
- fi
- if [[ -n $MYID ]]; then
- echo "Using myid of $MYID"
- echo "$MYID" >"$ZOO_DATADIR/myid"
- else
- echo "No myid provided, be sure to specify it in $ZOO_DATADIR/myid if using non-standalone"
- fi
- touch "$ZOO_DATADIR/initialize"
- }
- while [[ -n $1 ]]; do
- case "$1" in
- --configfile)
- ZOOCFG=$2
- shift 2
- ;;
- --configfile=?*)
- ZOOCFG=${1#*=}
- shift 1
- ;;
- --myid)
- MYID=$2
- shift 2
- ;;
- --myid=?*)
- MYID=${1#*=}
- shift 1
- ;;
- --force)
- FORCE=1
- shift 1
- ;;
- -h)
- usage
- ;;
- --help)
- usage
- ;;
- *)
- echo "Unknown option: $1"
- usage
- ;;
- esac
- done
- initialize
|