#!/bin/sh # (C) 2008 Gluster Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public # License along with this program; if not, write to the Free # Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301 USA _init () { # log level definitions LOG_NONE=NONE; LOG_CRITICAL=CRITICAL; LOG_ERROR=ERROR; LOG_WARNING=WARNING; LOG_INFO=INFO; LOG_DEBUG=DEBUG; # set default log level to ERROR log_level=$LOG_INFO; } start_glusterfs () { prefix="@prefix@"; exec_prefix=@exec_prefix@; cmd_line=$(echo "@sbindir@/glusterfs"); if [ -n "$log_level_str" ]; then case "$log_level_str" in "ERROR") log_level=$LOG_ERROR; ;; "INFO") log_level=$LOG_INFO; ;; "DEBUG") log_level=$LOG_DEBUG; ;; "CRITICAL") log_level=$LOG_CRITICAL; ;; "WARNING") log_level=$LOG_WARNING; ;; "NONE") log_level=$LOG_NONE; ;; *) echo "invalid log level $log_level_str, using INFO"; log_level=$LOG_INFO; ;; esac fi cmd_line=$(echo "$cmd_line --log-level=$log_level"); if [ -n "$log_file" ]; then cmd_line=$(echo "$cmd_line --log-file=$log_file"); fi if [ -n "$volfile_check" ]; then cmd_line=$(echo "$cmd_line --volfile-check"); fi if [ -n "$direct_io_mode" ]; then cmd_line=$(echo "$cmd_line --disable-direct-io-mode"); fi if [ -z "$volfile_loc" ]; then if [ -n "$transport" ]; then cmd_line=$(echo "$cmd_line \ --volfile-server=$server_ip \ --volfile-server-transport=$transport"); else cmd_line=$(echo "$cmd_line \ --volfile-server=$server_ip"); fi else cmd_line=$(echo "$cmd_line --volfile=$volfile_loc"); fi if [ -n "$volume_name" ]; then cmd_line=$(echo "$cmd_line --volume-name=$volume_name"); fi if [ -n "$volume_id" ]; then cmd_line=$(echo "$cmd_line --volfile-id=$volume_id"); fi cmd_line=$(echo "$cmd_line $mount_point"); exec $cmd_line; } main () { new_log_level="" log_file="" transport="" direct_io_mode="" volume_name="" new_fs_options="" volfile_check="" while getopts o: opt; do case "$opt" in o) options=$(echo $OPTARG | sed -n 's/.*\-o[ ]*\([^ ]*\).*/\1/p'); [ -z $new_log_level ] && { new_log_level=$(echo "$options" | sed -n 's/.*log-level=\([^,]*\).*/\1/p'); } [ -z $log_file ] && { log_file=$(echo "$options" | sed -n 's/.*log-file=\([^,]*\).*/\1/p'); } [ -z $transport ] && { transport=$(echo "$options" | sed -n 's/.*transport=\([^,]*\).*/\1/p'); } [ -z $direct_io_mode ] && { direct_io_mode=$(echo "$options" | sed -n 's/.*direct-io-mode=\([^,]*\).*/\1/p'); } [ -z $volfile_check ] && { volfile_check=$(echo "$options" | sed -n 's/.*volfile-check=\([^,]*\).*/\1/p'); } [ -z $volume_name ] && { volume_name=$(echo "$options" | sed -n 's/.*volume-name=\([^,]*\).*/\1/p'); } [ -z $volume_id ] && { volume_id=$(echo "$options" | sed -n 's/.*volume-id=\([^,]*\).*/\1/p'); } this_option=$(echo "$options" | sed -e 's/[,]*log-file=[^,]*//' \ -e 's/[,]*log-level=[^,]*//' \ -e 's/[,]*volume-name=[^,]*//' \ -e 's/[,]*volfile-check=[^,]*//' \ -e 's/[,]*direct-io-mode=[^,]*//' \ -e 's/[,]*transport=[^,]*//' \ -e 's/[,]*volume-id=[^,]*//'); new_fs_options="$new_fs_options $this_option"; ;; esac done [ -n "$new_log_level" ] && { log_level_str="$new_log_level"; } # TODO: use getopt. This is very much darwin specific volfile_loc="$1"; while [ "$volfile_loc" = "-o" ] ; do shift ; shift ; volfile_loc="$1"; done [ -r "$volfile_loc" ] || { server_ip=$(echo "$volfile_loc" | sed -n 's/\([a-zA-Z0-9:.\-]*\):.*/\1/p'); volume_id=$(echo "$volfile_loc" | sed -n 's/[a-zA-Z0-9:.\-]*:\(.*\)/\1/p'); volfile_loc=""; } # following line is product of love towards sed # $2=$(echo "$@" | sed -n 's/[^ ]* \([^ ]*\).*/\1/p'); mount_point="$2"; fs_options=$(echo "$fs_options,$new_fs_options"); start_glusterfs; } _init "$@" && main "$@";