Egg problem (~/.python-eggs)

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mike Orr

    #1

    Egg problem (~/.python-eggs)

    I'm trying to install a program that uses Durus on a server. It
    appears that if a Python program uses eggs, it creates a
    ~/.python-eggs/ directory, so the home directory must be writeable.
    This conflicts with server environments where you want to run a daemon
    with minimum privileges. Second, it appears to use the real user ID
    rather than the effective user ID to choose the home directory. In
    this case I'm trying to use start-stop-daemon on Linux to start my
    Python program, switching from user 'root' to user 'apache'.

    # start-stop-daemon --start --chuid apache:apache --make-pidfile
    --pidfile /var/run/cameo.pid --exec
    /var/www/apps/cameo/bin/cameo_server.py --
    Traceback (most recent call last):
    File "/var/www/apps/cameo/bin/cameo_server.py ", line 3, in ?
    from durus.client_st orage import ClientStorage
    File "build/bdist.linux-i686/egg/durus/client_storage. py", line 7, in
    ?
    File "build/bdist.linux-i686/egg/durus/serialize.py", line 9, in ?
    File "build/bdist.linux-i686/egg/durus/persistent.py", line 15, in ?
    File "build/bdist.linux-i686/egg/durus/_persistent.py" , line 7, in ?
    File "build/bdist.linux-i686/egg/durus/_persistent.py" , line 4, in
    __bootstrap__
    File
    "/usr/local/lib/python2.4/setuptools-0.6a10-py2.4.egg/pkg_resources.p y",
    line 799, in resource_filena me
    return get_provider(pa ckage_or_requir ement).get_reso urce_filename(
    File
    "/usr/local/lib/python2.4/setuptools-0.6a10-py2.4.egg/pkg_resources.p y",
    line 1187, in get_resource_fi lename
    self._extract_r esource(manager , self._eager_to_ zip(name))
    File
    "/usr/local/lib/python2.4/setuptools-0.6a10-py2.4.egg/pkg_resources.p y",
    line 1204, in _extract_resour ce
    real_path = manager.get_cac he_path(self.eg g_name,
    self._parts(zip _path))
    File
    "/usr/local/lib/python2.4/setuptools-0.6a10-py2.4.egg/pkg_resources.p y",
    line 836, in get_cache_path
    ensure_director y(target_path)
    File
    "/usr/local/lib/python2.4/setuptools-0.6a10-py2.4.egg/pkg_resources.p y",
    line 2301, in ensure_director y
    os.makedirs(dir name)
    File "/usr/lib/python2.4/os.py", line 156, in makedirs
    makedirs(head, mode)
    File "/usr/lib/python2.4/os.py", line 156, in makedirs
    makedirs(head, mode)
    File "/usr/lib/python2.4/os.py", line 159, in makedirs
    mkdir(name, mode)
    OSError: [Errno 13] Permission denied: '/root/.python-eggs'


    Can I make it use a different eggs directory? Any other idea how to
    install a program using eggs on a server?

    BTW, Python is Gentoo's /usr/bin/python 2.4.2. The eggs are installed
    in /usr/local/lib/python2.4 to prevent them from mixing with Gentoo
    packages in /usr/lib.

    --Mike <sluggoster@gma il.com>

  • Mike Orr

    #2
    Re: Egg problem (~/.python-eggs)

    Mike Orr wrote:
    I'm trying to install a program that uses Durus on a server. It
    appears that if a Python program uses eggs, it creates a
    ~/.python-eggs/ directory, so the home directory must be writeable.
    This conflicts with server environments where you want to run a daemon
    with minimum privileges. Second, it appears to use the real user ID
    rather than the effective user ID to choose the home directory. In
    this case I'm trying to use start-stop-daemon on Linux to start my
    Python program, switching from user 'root' to user 'apache'.
    I solved the immediate problem by reinstalling Durus as a directory egg
    rather than a compressed egg. So is the answer just not to use
    compressed eggs?

    --Mike <sluggoster@gma il.com>

    Comment

    • Damjan

      #3
      Re: Egg problem (~/.python-eggs)

      >I'm trying to install a program that uses Durus on a server. It
      >appears that if a Python program uses eggs, it creates a
      >~/.python-eggs/ directory, so the home directory must be writeable.
      >This conflicts with server environments where you want to run a daemon
      >with minimum privileges. Second, it appears to use the real user ID
      >rather than the effective user ID to choose the home directory. In
      >this case I'm trying to use start-stop-daemon on Linux to start my
      >Python program, switching from user 'root' to user 'apache'.
      >
      I solved the immediate problem by reinstalling Durus as a directory egg
      rather than a compressed egg. So is the answer just not to use
      compressed eggs?
      If the .egg file contains binary modules, those must be unpacked out of
      the .egg (a Zip file actually) so that the kernel/lib-loader can map them.
      If your .egg package doesn't have any binary modules, then it doesn't need
      to unpack anything.


      --
      damjan

      Comment

      • paul kölle

        #4
        Re: Egg problem (~/.python-eggs)

        Mike Orr wrote:
        [... snipp ...]
        Can I make it use a different eggs directory? Any other idea how to
        install a program using eggs on a server?
        I had a similar issue with tracd on gentoo. My solution was setting
        PYTHON_EGG_CACH E=/tmp/.egg_cache in /etc/conf.d/tracd and exporting that
        var in /etc/init.d/tracd before calling start-stop-daemon, e.g.

        export PYTHON_EGG_CACH E=${PYTHON_EGG_ CACHE}
        start-stop-daemon --start ....


        cheers
        Paul

        Comment

        Working...