我有一个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安装脚本设置权限。我认为我的解决方案比我的特定用例的链接副本更清晰。
答案 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