[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#568672: openoffice.org: improper nfs handling in /usr/bin/soffice



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


hello rene,

these are my slightly updated programs.

my guidelines were keeping nfs/locking handling together, and similar in both
programs, as much as i could.

i didn't diff, so that you could diff against any upstream version you need.

as i needed the isshared variable, i've copied it's calculation to the top of
unopkg. in case it's calculation is in debian code only, please remove it's
calculation from the other location.

best regards,
alex

On 02/06/2010 10:45 PM, Rene Engelhard wrote:
> Hi,
> 
> On Sat, Feb 06, 2010 at 09:08:43PM +0200, alex bodnaru wrote:
>> in case nfs/smb is detected, file_or_home_on_nfs returns 0, hence the handling 
>> is inverse.
> 
> Aha. Matthias, you wrote that, any comment?
> Looks valid to me.
> 
>> STAR_PROFILE_LOCKING_DISABLED=1 should also be set when homedir on remote fs.
>>
>> though i can't be sure, i still feel some locks occur, even though i've fixed 
>> myself the previous issue. look at the suspect messages relating to open files:
> 
> You fixed that? You don't dare to send a patch? I mean,
> I don't have $HOME over nfs/smb anywhere.
> 
>> rm: cannot remove `.openoffice.org/3/user/uno_packages/cache/.nfs000000000010c7c80000028a': Device or resource busy
>> rm: cannot remove `.openoffice.org/3/user/uno_packages/cache/.nfs000000000010c7d400000289': Device or resource busy
>> rm: cannot remove `.openoffice.org/3/user/uno_packages/cache/registry/com.sun.star.comp.deployment.configuration.PackageRegistryBackend/.nfs000000000010c7cd00000288': Device or resource busy
> 
> When does that happen? On a manual rm?
> If yes - err, if even simple commands like rm fail, how is it OOos fault if this
> fails for you? This looks more like a generic problem, thus not a OOo
> bug.
> 
> Grüße/Regards,
> 
> René

- -- 
- --
best regards,
alex
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iJwEAQECAAYFAktwxogACgkQ2nA3WyrfyeORnAP/coufKmyO6hZ0mfpcP/9xxenw
WwUzBraknIdES57s6YOsyEp3lNq+eu/mKAHFUK/WpMjWyTZIyF5jYx4RuaefzQjA
8vwSoSEjHJVjWZ4tI0ALaNfXKoFk+8iCs/kZdA3mv348q00YFs4P7mNVr1j5Umyf
IxL0NDCGEYTe7l/JX+I=
=7pMc
-----END PGP SIGNATURE-----

#!/bin/sh
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: unopkg.sh,v $
#
# $Revision: 1.14 $
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org 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 Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org.  If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************

# if isshared is only in debian/ubuntu, please consider setting it here only
isshared=0
for arg in $@
do
    if [ "$arg" = "--shared" ]; then 
        isshared=1
    fi
done
if [ $isshared -eq 1 ]; then
    HOME=/var/spool/openoffice/
else
    if test -z "$HOME"; then
        HOME=$(getent passwd $(whoami) | cut -d":" -f6)
    fi
fi

# helper functions
file_or_home_on_nfs()
{
    case $(stat -f -c %T $HOME) in nfs*|smb)
        # different cases
        STAR_PROFILE_LOCKING_DISABLED=1
    esac
    for i; do
       case "$i" in -*) continue; esac
       [ -f "$i" ] || continue
       case $(stat -f -c %T "$i") in nfs*|smb)
            # different cases
            SAL_ENABLE_FILE_LOCKING=0
            return 1
       esac
    done
   	SAL_ENABLE_FILE_LOCKING=1
    STAR_PROFILE_LOCKING_DISABLED=0
    return 0
}

# read Ubuntu config file

FILE_LOCKING=auto
if [ -f /etc/openoffice/soffice.sh ]; then
    . /etc/openoffice/soffice.sh
fi

# sanity checks

case "$FILE_LOCKING" in
    auto|yes|no) ;;
    *)
        echo >&2 "unknown value '$FILE_LOCKING' for FILE_LOCKING parameter."
       FILE_LOCKING=auto
       echo >&2 "FILE_LOCKING reset to '$FILE_LOCKING'"
esac

# adjust environment

if [ -z "$SAL_ENABLE_FILE_LOCKING" ]; then
    case "$FILE_LOCKING" in
	auto)
        file_or_home_on_nfs "$@"
        ;;
	yes)
    	SAL_ENABLE_FILE_LOCKING=1
        STAR_PROFILE_LOCKING_DISABLED=0
        ;;
	no)
	    SAL_ENABLE_FILE_LOCKING=0
        STAR_PROFILE_LOCKING_DISABLED=1
    esac
fi
# export only once
export SAL_ENABLE_FILE_LOCKING
export STAR_PROFILE_LOCKING_DISABLED

# resolve installation directory
sd_cwd="`pwd`"
if [ -h "$0" ] ; then
	sd_basename=`basename "$0"`
 	sd_script=`ls -l "$0" | sed "s/.*${sd_basename} -> //g"` 
    cd "`dirname "$0"`"
    cd "`dirname "$sd_script"`"
else
    cd "`dirname "$0"`"
fi
sd_prog=`pwd`
cd "$sd_cwd"

isshared=0
for arg in $@
do
if [ "$arg" = "--shared" ]; then 
    isshared=1
fi
done
if [ $isshared -eq 1 ]; then
    echo $@ | grep -q env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY
    if [ $? -ne 0 ]; then
        set -- $@ '-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1'
    fi
    echo $@ | grep -q env:UNO_JAVA_JFW_INSTALL_DATA
    if [ $? -ne 0 -a -w $sd_prog/../share/config/javasettingsunopkginstall.xml ]; then
        set -- $@ '-env:UNO_JAVA_JFW_INSTALL_DATA=$$ORIGIN/../share/config/javasettingsunopkginstall.xml'
    fi
    echo $@ | grep -q env:UserInstallation
    if [ $? -ne 0 ]; then
        INSTDIR=`mktemp -d -t unoinstall.XXXXXX`
        set -- $@ '-env:UserInstallation=file://'$INSTDIR
    fi
fi

#collect all bootstrap variables specified on the command line
#so that they can be passed as arguments to javaldx later on
for arg in $@
do
  case "$arg" in
       -env:*) BOOTSTRAPVARS=$BOOTSTRAPVARS" ""$arg";;
  esac
done

# extend the ld_library_path for java: javaldx checks the sofficerc for us
if [ -x "$sd_prog/../basis-link/ure-link/bin/javaldx" ] ; then
    my_path=`"$sd_prog/../basis-link/ure-link/bin/javaldx" $BOOTSTRAPVARS \
        "-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"`
    if [ -n "$my_path" ] ; then
        LD_LIBRARY_PATH=$my_path${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
        export LD_LIBRARY_PATH
    fi
fi

unset XENVIRONMENT

# uncomment line below to disable anti aliasing of fonts
# SAL_ANTIALIAS_DISABLE=true; export SAL_ANTIALIAS_DISABLE

# uncomment line below if you encounter problems starting soffice on your system
# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS

# Set PATH so that crash_report is found:
PATH=$sd_prog${PATH+:$PATH}
export PATH

# execute binary
"$sd_prog/unopkg.bin" "$@" \
    "-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"
if [ -n "$INSTDIR" ]; then
   rm -rf $INSTDIR
fi

#!/bin/sh
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# 
# Copyright 2008 by Sun Microsystems, Inc.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# $RCSfile: soffice.sh,v $
#
# $Revision: 1.34 $
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org 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 Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org.  If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************


if test -z "$HOME"; then
    HOME=$(getent passwd $(whoami) | cut -d":" -f6)
fi

# helper functions
file_or_home_on_nfs()
{
    case $(stat -f -c %T $HOME) in nfs*|smb)
        # different cases
        STAR_PROFILE_LOCKING_DISABLED=1
    esac
    for i; do
       case "$i" in -*) continue; esac
       [ -f "$i" ] || continue
       case $(stat -f -c %T "$i") in nfs*|smb)
            # different cases
            SAL_ENABLE_FILE_LOCKING=0
            return 1
       esac
    done
   	SAL_ENABLE_FILE_LOCKING=1
    STAR_PROFILE_LOCKING_DISABLED=0
    return 0
}

# FIXME: this is conservative; allow more known working configurations
working_opengl_support()
{
    if [ -n "$(lsmod | awk '/^(fglrx|nvidia)/ {print $1}')" ]; then
	return 1
    fi
    return 0
}

# read config file

FILE_LOCKING=auto
OPENGL_SUPPORT=no
if [ -f /etc/openoffice/soffice.sh ]; then
    . /etc/openoffice/soffice.sh
fi

# sanity checks

case "$FILE_LOCKING" in
    auto|yes|no) ;;
    *)
        echo >&2 "unknown value '$FILE_LOCKING' for FILE_LOCKING parameter."
	FILE_LOCKING=auto
	echo >&2 "FILE_LOCKING reset to '$FILE_LOCKING'"
esac
    
case "$OPENGL_SUPPORT" in
    auto|yes|no) ;;
    *)
        echo >&2 "unknown value '$OPENGL_SUPPORT' for OPENGL_SUPPORT parameter."
	OPENGL_SUPPORT=auto
	echo >&2 "OPENGL_SUPPORT reset to '$OPENGL_SUPPORT'"
esac

# adjust environment

if [ -z "$SAL_ENABLE_FILE_LOCKING" ]; then
    case "$FILE_LOCKING" in
	auto)
        file_or_home_on_nfs "$@"
        ;;
	yes)
    	SAL_ENABLE_FILE_LOCKING=1
        STAR_PROFILE_LOCKING_DISABLED=0
        ;;
	no)
	    SAL_ENABLE_FILE_LOCKING=0
        STAR_PROFILE_LOCKING_DISABLED=1
    esac
fi
# export only once
export SAL_ENABLE_FILE_LOCKING
export STAR_PROFILE_LOCKING_DISABLED

if [ -z "$SAL_NOOPENGL" ]; then
    case "$OPENGL_SUPPORT" in
	auto)
        working_opengl_support
        if [ $? -eq 0 ]; then
	    SAL_NOOPENGL=true
	    export SAL_NOOPENGL
	fi
        ;;
	yes)
	:
	unset SAL_NOOPENGL
	#export SAL_NOOPENGL
        ;;
	no)
	SAL_NOOPENGL=true
	export SAL_NOOPENGL
    esac
fi

# the following test is needed on Linux PPC with IBM j2sdk142
# These variables are substituted during the build process
if [ "LINUX" = "LINUX" -a "X86_64" = "POWERPC" ] ; then
    JITC_PROCESSOR_TYPE=6
    export JITC_PROCESSOR_TYPE
fi

# resolve installation directory
sd_cwd="`pwd`"
if [ -h "$0" ] ; then
	sd_basename=`basename "$0"`
 	sd_script=`ls -l "$0" | sed "s/.*${sd_basename} -> //g"`
    cd "`dirname "$0"`"
    cd "`dirname "$sd_script"`"
else
    cd "`dirname "$0"`"
fi
sd_prog=`pwd`
cd "$sd_cwd"

sd_binary=`basename "$0"`.bin

#collect all bootstrap variables specified on the command line
#so that they can be passed as arguments to javaldx later on
for arg in $@
do
  case "$arg" in
       -env:*) BOOTSTRAPVARS=$BOOTSTRAPVARS" ""$arg";;
  esac
done

# pagein
sd_pagein_args=@pagein-common
for sd_arg in "$@"; do
    case ${sd_arg} in
    -calc)
        sd_pagein_args="${sd_pagein_args} @pagein-calc"
        break;
        ;;
    -draw)
        sd_pagein_args="${sd_pagein_args} @pagein-draw"
        break;
        ;;
    -impress)
        sd_pagein_args="${sd_pagein_args} @pagein-impress"
        break;
        ;;
    -writer)
        sd_pagein_args="${sd_pagein_args} @pagein-writer"
        break;
        ;;
    esac
done
"$sd_prog/../basis-link/program/pagein" -L"$sd_prog/../basis-link/program" \
    ${sd_pagein_args}

# extend the ld_library_path for java: javaldx checks the sofficerc for us
if [ -x "$sd_prog/../basis-link/ure-link/bin/javaldx" ] ; then
    my_path=`"$sd_prog/../basis-link/ure-link/bin/javaldx" $BOOTSTRAPVARS \
        "-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"`
    if [ -n "$my_path" ] ; then
        LD_LIBRARY_PATH=$my_path${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
        export LD_LIBRARY_PATH
    fi
fi

unset XENVIRONMENT

# uncomment line below to disable anti aliasing of fonts
# SAL_ANTIALIAS_DISABLE=true; export SAL_ANTIALIAS_DISABLE

# uncomment line below if you encounter problems starting soffice on your system
# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS

# read database entries for Adabas D
if [ -f /etc/adabasrc ]; then
  . /etc/adabasrc
fi

# Set PATH so that crash_report is found:
PATH=$sd_prog${PATH+:$PATH}
export PATH

PYTHONPATH=$sd_prog/../basis-link/program${PYTHONPATH+:$PYTHONPATH}
export PYTHONPATH

# test for availability of the fast external splash
for arg in $@; do
	if [ "$arg" = "-nologo" -o "$arg" = "-no-oosplash" ]; then
		no_oosplash=y
	fi
done
if [ "$sd_binary" = "soffice.bin" -a -x "$sd_prog/oosplash.bin" ] && [ "$no_oosplash" != "y" ] ; then
    sd_binary="oosplash.bin"
fi

# execute soffice binary
"$sd_prog/$sd_binary" "$@" &
trap 'kill -9 $!' TERM
wait $!

while [ $? -eq 79 ]
do
	"$sd_prog/$sd_binary" ""$BOOTSTRAPVARS"" &
    wait $!
done

exit


Reply to: