#!/bin/sh # (C) 2006, 2007, 2008 Z RESEARCH 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_NORMAL=NORMAL LOG_DEBUG=DEBUG; LOG_TRACE=TRACE; # set default log level to NORMAL log_level=$LOG_NORMAL; } 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; ;; "NORMAL") log_level=$LOG_NORMAL ;; "DEBUG") log_level=$LOG_DEBUG; ;; "CRITICAL") log_level=$LOG_CRITICAL; ;; "WARNING") log_level=$LOG_WARNING; ;; "TRACE") log_level=$LOG_TRACE; ;; "NONE") log_level=$LOG_NONE; ;; *) echo "invalid log level $log_level_str, using NORMAL"; log_level=$LOG_NORMAL; ;; 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 [ -n "$volume_name" ]; then cmd_line=$(echo "$cmd_line --volume-name=$volume_name"); fi if [ -z "$volfile_loc" ]; then cmd_line=$(echo "$cmd_line --volfile-server-port=$server_port"); if [ -n "$transport" ]; then cmd_line=$(echo "$cmd_line --volfile-server-transport=$transport"); fi if [ -n "$volume_id" ]; then cmd_line=$(echo "$cmd_line --volfile-id=$volume_id"); fi if [ -n "$backupvolfile_server" ]; then cmd_line1=$(echo "$cmd_line --volfile-server=$backupvolfile_server"); fi cmd_line=$(echo "$cmd_line --volfile-server=$server_ip"); else cmd_line=$(echo "$cmd_line --volfile=$volfile_loc"); fi cmd_line=$(echo "$cmd_line $mount_point"); $cmd_line; # retry the failover if [ $? != "0" ]; then if [ -n "$cmd_line1" ]; then cmd_line1=$(echo "$cmd_line1 $mount_point"); $cmd_line1 fi fi } main () { options=$(echo "$@" | sed -n 's/.*\-o[ ]*\([^ ]*\).*/\1/p'); new_log_level=$(echo "$options" | sed -n 's/.*log-level=\([^,]*\).*/\1/p'); [ -n "$new_log_level" ] && { log_level_str="$new_log_level"; } log_file=$(echo "$options" | sed -n 's/.*log-file=\([^,]*\).*/\1/p'); transport=$(echo "$options" | sed -n 's/.*transport=\([^,]*\).*/\1/p'); direct_io_mode=$(echo "$options" | sed -n 's/.*direct-io-mode=\([^,]*\).*/\1/p'); volume_name=$(echo "$options" | sed -n 's/.*volume-name=\([^,]*\).*/\1/p'); volume_id=$(echo "$options" | sed -n 's/.*volume_id=\([^,]*\).*/\1/p'); volfile_check=$(echo "$options" | sed -n 's/.*volfile-check=\([^,]*\).*/\1/p'); server_port=$(echo "$options" | sed -n 's/.*server-port=\([^,]*\).*/\1/p'); backupvolfile_server=$(echo "$options" | sed -n 's/.*backupvolfile-server=\([^,]*\).*/\1/p'); volfile_loc="$1"; [ -r "$volfile_loc" ] || { server_ip=$(echo "$volfile_loc" | sed -n 's/\([^\:]*\).*/\1/p'); test_str=$(echo "$volfile_loc" | sed -n 's/.*:\([^ ]*\).*/\1/p'); [ -n "$test_str" ] && { # Backward compatibility test_str1=$(echo "$test_str" | sed -e 's/[0-9]//g'); [ -n "$test_str1" ] && { volume_id="$test_str"; } || { server_port=$test_str; } } volfile_loc=""; } [ -n "$server_port" ] || { server_port="6996"; } new_fs_options=$(echo "$options" | sed -e 's/[,]*log-file=[^,]*//' \ -e 's/[,]*log-level=[^,]*//' \ -e 's/[,]*volume-name=[^,]*//' \ -e 's/[,]*direct-io-mode=[^,]*//' \ -e 's/[,]*volfile-check=[^,]*//' \ -e 's/[,]*transport=[^,]*//' \ -e 's/[,]*backupvolfile-server=[^,]*//' \ -e 's/[,]*server-port=[^,]*//' \ -e 's/[,]*volume-id=[^,]*//'); # following line is product of love towards sed # $2=$(echo "$@" | sed -n 's/[^ ]* \([^ ]*\).*/\1/p'); mount_point="$2"; # Simple check to avoid multiple identical mounts if grep -q " $mount_point fuse" /etc/mtab; then echo -n "$0: according to mtab, GlusterFS is already mounted on " echo "$mount_point" sleep 1; exit 0; fi fs_options=$(echo "$fs_options,$new_fs_options"); start_glusterfs; sleep 3; } _init "$@" && main "$@";