--- zrep.orig 2013-05-13 22:01:15.000000000 +0400 +++ zrep 2013-11-19 18:37:52.921978370 +0400 @@ -15,7 +15,6 @@ ZREP_PATH=${ZREP_PATH:-zrep} #Set to /path/to/zrep, if needed, for remote #ZREP_CREATE_FLAGS="-o whatever" #Set for extra options on remote zfs create - ######################################################################### # Everyting else below here, should not be touched. First we have autodetect # routines, and then internal utilities such as locking functions. @@ -35,8 +34,8 @@ # dump the usage message, and check for capabilities # make sure we dont spew for non-root, so that "zrep status" works -case `id` in - *\(root\)) +case `whoami` in + root) zrep_checkfile=/var/run/zrep.check.$$ ;; *) @@ -109,7 +108,8 @@ # Note that we check for "us, OR our global parent", if different # zrep_has_global_lock(){ - lockpid=`ls -l $Z_GLOBAL_LOCKFILE 2>/dev/null |awk -F/ '{print $NF}'` + [ ! -f "${Z_GLOBAL_LOCKFILE}" ] && return 1 + lockpid=`cat ${Z_GLOBAL_LOCKFILE}` if [[ "$lockpid" == "" ]] ; then return 1 ; fi if [[ "$lockpid" != "$Z_GLOBAL_PID" ]] ; then if [[ "$lockpid" != "$$" ]] ; then @@ -127,7 +127,10 @@ zrep_get_global_lock(){ typeset retry_count=$Z_LOCK_RETRY - ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0 + if [ ! -f "${Z_GLOBAL_LOCKFILE}" ] ; then + echo $Z_GLOBAL_PID > $Z_GLOBAL_LOCKFILE + return 0 + fi # otherwise, deal with fail # Check for dead old holder first. @@ -135,7 +138,10 @@ while (( retry_count > 0 )); do sleep 1 - ln -s /proc/$Z_GLOBAL_PID $Z_GLOBAL_LOCKFILE && return 0 + if [ ! -f "${Z_GLOBAL_LOCKFILE}" ] ; then + echo $Z_GLOBAL_PID > $Z_GLOBAL_LOCKFILE + return 0 + fi retry_count=$((retry_count-1)) done @@ -178,7 +184,9 @@ typeset check=`zrep_fs_lock_pid $1` newcheck if [[ "$check" != "-" ]] ; then # validate fs lock before giving up - ls -d /proc/$check >/dev/null 2>&1 && return 1 + if [ "${check}" != "-" ] ; then + [ -f "${Z_GLOBAL_LOCKFILE}" ] && return 1 + fi fi zrep_get_global_lock || return 1 @@ -257,8 +265,7 @@ zrep_gettimeinseconds(){ # unfortunately, solaris date doesnt do '%s', so need to use perl - typeset PATH=$PERL_BIN:$PATH - perl -e 'print int(time);' + date +%s } ###### zrep_status @@ -713,7 +720,7 @@ READONLYPROP="-o readonly=on" else READONLYPROP="" - print Ancient local version of ZFS detected. +# print Ancient local version of ZFS detected. print Creating destination filesystem as separate step zrep_ssh $desthost zfs create $ZREP_CREATE_FLAGS -o readonly=on $destfs || zrep_errquit "Cannot create $desthost:$destfs" fi @@ -757,7 +764,7 @@ # Successful initial sync! Woo! okay record that, etc. # ... after stupid old-zfs-compat junk, that is if (( ! Z_HAS_X )) ; then - print Debug: Because you have old zfs support, setting remote properties by hand +# print Debug: Because you have old zfs support, setting remote properties by hand zrep_ssh $desthost zfs set readonly=on $destfs || clearquit Could not set readonly for $desthost:$destfs