Ho creato un'installazione di software python con setup.py. In questo software utilizzo file di dati (file XML) quando installo questi file xml utilizzando setup.py, quindi questi file salvano con altri file in /usr/lib/python2.7/site_packages/XYZ
. Ma l'autorizzazione file impostata su questi file (file XML) rwx------
significa che solo il super utente (root) può leggere questi file Voglio modificare il permesso di file XML come rwxr-----
significa che l'utente corrente può anche leggere quel file. Come posso modificare l'autorizzazione per i file di dati.imposta i permessi dei file nel file setup.py
risposta
login come radice, e nel tipo shell:
chmod 744 yourfilename
Se è a scopo di distribuzione, richiedere l'utente di accedere come root alla distribuzione delle patch è l'idea peggiore – Bruce
non voglio che l'utente lo faccia manully quando l'utente installa questo software utilizzando il file setup.py, quindi il software lo farà automaticamente –
Non puoi semplicemente impostare l'autorizzazione prima del rilascio? – lamwaiman1988
Il modo corretto per farlo sarebbe quello di ignorare il comando install
, ecco come fare.
prima all'inizio dei vostri setup.py
aggiungere le seguenti importazioni:
from setuptools.command.install import install
from distutils import log # needed for outputting information messages
allora avete bisogno di creare una classe di comando richiamabile, ecco un esempio in cui creo una classe di comando che installa uno script e si assicura che è solo eseguibile per root
(The sono altri modi per quella in pitone Ad esempio si può sempre uscire dallo script, se UID non è 0..) sono anche utilizzando un altro importazione qui:
from setuptools.command.install_scripts import install_scripts
class OverrideInstall(install):
def run(self):
uid, gid = 0, 0
mode = 0700
install.run(self) # calling install.run(self) insures that everything that happened previously still happens, so the installation does not break!
# here we start with doing our overriding and private magic ..
for filepath in self.get_outputs():
if self.install_scripts in filepath:
log.info("Overriding setuptools mode of scripts ...")
log.info("Changing ownership of %s to uid:%s gid %s" %
(filepath, uid, gid))
os.chown(filepath, uid, gid)
log.info("Changing permissions of %s to %s" %
(filepath, oct(mode)))
os.chmod(filepath, mode)
Ora la classe è stata creata. Ho notificare al programma di installazione che dopo aver visto install
nella riga di comando deve essere invocato questa classe:
setup(
# keep
# all the previous keywords you had ...
# add
cmdclass={'install': OverrideInstall}
)
Spero che questa risposta aiuta.
Io uso setup.py
per creare RPM di tutti i tipi. La soluzione è leggermente diversa per me. Penso anche che è più robusta per due motivi:
- posso ignorare i permessi di un file in modo esplicito
- Non ho bisogno di conoscere l'uid e gid dell'utente. Invece posso usare il testo normale.
ecco un esempio di lavoro
from distutils.core import setup
import distutils.command.bdist_rpm
import distutils.command.install
version='13'
data_files = [
('/usr/share/blah', ['README', 'test.sh']),
]
permissions = [
('/usr/share/blah', 'test.sh', '(755, sri, sri)'),
]
class bdist_rpm(distutils.command.bdist_rpm.bdist_rpm):
def _make_spec_file(self):
spec = distutils.command.bdist_rpm.bdist_rpm._make_spec_file(self)
for path, files , perm in permissions:
##
# Add a line to the SPEC file to change the permissions of a
# specific file upon install.
#
# example:
# %attr(666, root, root) path/file
#
spec.extend(['%attr{} {}/{}'.format(perm, path, files)])
return spec
setup(name='sri-testme',
version=version,
description='This is garganbe and is only used to test the permision flag behavior',
author='Chris Gembarowski',
author_email='[email protected]',
url='https://www.python.org/sigs/distutils-sig/',
data_files=data_files,
cmdclass={'bdist_rpm':bdist_rpm}
)
vorrei spiegare che cosa sta succedendo in modo più dettagliato. Gli RPM sono costruiti da un file SPEC. bdist_rpm crea un file SPEC. In un file SPEC, è possibile selezionare le autorizzazioni e la proprietà di un file fornendo l'opzione% attr.
Nell'esempio per rendere eseguibile test.sh e di proprietà dell'utente 'sri', aggiungerei %attr(755, sri, sri)
alla fine del file SPEC.
Così, quando eseguo l'override del comportamento di bdist_rpm._make_spec_file, tutto quello che sto facendo è aggiungere una riga per ogni file su cui voglio sovrascrivere le autorizzazioni.
Il file SPEC completo da questo esempio potrebbe essere:
%define name sri-testme
%define version 13
%define unmangled_version 13
%define release 1
Summary: This is garganbe and is only used to test the permision flag behavior
Name: %{name}
Version: %{version}
Release: %{release}
Source0: %{name}-%{unmangled_version}.tar.gz
License: UNKNOWN
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Prefix: %{_prefix}
BuildArch: noarch
Vendor: Chris Gembarowski <[email protected]>
Url: https://www.python.org/sigs/distutils-sig/
%description
UNKNOWN
%prep
%setup -n %{name}-%{unmangled_version}
%build
python setup.py build
%install
python setup.py install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
%clean
rm -rf $RPM_BUILD_ROOT
%post
##
# sri will be turned on in the run-once script instead of here
#
%preun
#!/bin/bash
%files -f INSTALLED_FILES
%defattr(-,root,root)
%attr(755, sri, sri) /usr/share/blah/test.sh
- 1. I permessi dei file non ereditano i permessi delle directory
- 2. Come garantire i permessi dei file corretti
- 3. aperti i permessi dei file() non correttamente l'impostazione
- 4. cmake: come modificare i permessi dei file durante l'installazione?
- 5. Come posso impostare i permessi dei file da Perl?
- 6. C++ - Come impostare i permessi dei file (multipiattaforma)
- 7. Come posso cambiare i permessi dei file in Ubuntu
- 8. Regex per i permessi dei file Linux (notazione numerica)
- 9. permessi dei file Java per le discussioni
- 10. django/file upload permessi
- 11. In che modo Subversion gestisce i permessi dei file e un file .htaccess?
- 12. Verifica dei permessi dei file in Linux con Python
- 13. MSI Installer permessi file/cartella
- 14. permessi file capistrano-env
- 15. Come rilevare i permessi dei file durante l'estrazione del file tar?
- 16. Mantenere i permessi dei file durante l'estrazione da un file zip usando JDK 5 api
- 17. permessi dei file mkfifo non essere eseguiti correttamente
- 18. permessi errati imposta po 'appiccicoso
- 19. Impostazione dei permessi sui file sul contenuto del tarfile
- 20. Imposta immagine icona nel file Jar
- 21. Modifica dei permessi su/vagabondo
- 22. configurazione setup.py python per installare i file nelle directory personalizzati
- 23. Scrittura dei registri nel file
- 24. Python: setup.py mancante: nessun file o directory
- 25. setup.py non installa file di dati
- 26. Impossibile impostare i permessi dei file in S3 usando boto e django
- 27. fopen Crea file, ma come modificare i permessi?
- 28. Mantenere i permessi di file e cartelle all'interno degli archivi
- 29. Come nascondere i file nel file jpeg
- 30. Classi/componenti Delphi 2009 per leggere/scrivere i permessi dei file
Qual è la vostra umask impostato? – Keith