在setup.py中设置data_files的权限

时间:2015-02-26 00:41:28

标签: python setuptools distutils

我有一个setup.py,我在setup.py上使用fpm来创建我的python包(debs和rpms)。它适用于upstart和systemd发行版,但对于systemv(特别是debian7),我遇到了文件权限问题。

我需要/etc/init.d/ltsense脚本才能执行。这是我可以用setup.py中的data_files做的事情,还是我需要做的事情是将安装后脚本传递给fpm?

这是我的setup.py:

的一部分
...

from setuptools import setup, find_packages
import os
import platform
import math


def init_system():
    """
    Returns a tuple of init data files and a version suffix (deb only).
    Example: (('/etc/init/', ['scripts/upstart/ltsense.conf']),'~upstart')
    """
    distro = os.getenv('DISTRO', platform.linux_distribution()[0])
    release = os.getenv('RELEASE', platform.linux_distribution()[1])
    if distro == 'Ubuntu':
        return (('/etc/init/', ['scripts/upstart/ltsense.conf']),
                '~upstart')
    elif distro in ['debian']:
        release_int = int(math.floor(float(release)))
        if release_int == 7:
            return (('/etc/init.d/', ['scripts/systemv/ltsense']),
                   '~systemv')
        elif release_int == 8:
            return (('/lib/systemd/system/', ['scripts/systemd/ltsense.service']),
                   '~systemd')
    elif distro in ['centos', 'redhat', 'fedora']:
        return (('/lib/systemd/system/', ['scripts/systemd/ltsense.service']),'')

setup(
    name='ltsense',
    version='{}{}'.format(os.popen('git describe --dirty').readlines()[0].strip(),init_system()[1]),
    packages=find_packages(),
    author='Sumit Khanna',
    author_email='sumit@penguindreams.org',
    maintainer='Sumit Khanna',
    maintainer_email='sumit@penguindreams.org',
    url='http://bigsense.io',
    license='GNU General Public License v3',
    description='ltsense sensor collection and relay service',
    long_description=open('README').read(),
    data_files=[init_system()[0],
                ('/etc/ltsense/examples', ['etc/virtual-ltsense.conf',
                                           'etc/onewire-ltsense.conf'])
                ],
    entry_points={'console_scripts': ['ltsense=ltsense.__main__:main']},

...

编辑:不重复:这标记为possible duplicate。我的问题涉及通过fpm创建包,而不是直接使用python安装脚本设置权限。我认为我的解决方案比我的特定用例的链接副本更清晰。

1 个答案:

答案 0 :(得分:0)

我决定在post-install脚本中执行此操作,而不是使用fpm传递给--after-install。它适用于rpms和debs:

#!/bin/sh

if [ -f /etc/init.d/ltsense ]; then
  chmod 755 /etc/init.d/ltsense
fi