123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- #!/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
- #
- # 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.
- #
- # 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
- . "$ZOOBINDIR"/../libexec/zkEnv.sh
- else
- . "$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
- }
- if [ $? != 0 ] ; then
- usage
- exit 1
- fi
- 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 ]; 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 [ $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 [ ! -z "$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
- exit 1
- ;;
- esac
- done
- initialize
|