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

Re: /etc/init.d/* vs. /usr/bin/env



On 11.01.06 20:43:27, Andre Berger wrote:
> * Andreas Pakulat (2006-01-11):
> > On 11.01.06 18:28:40, Andre Berger wrote:
> > > bei der Installation von DenyHosts (gegen SSH brute force attacks;
> > > nicht Teil von Sarge) auf ein Sarge-System bin ich auf folgendes
> > > Problem gestossen: Sowohl das beiliegende Startscript als auch
> > > denyhosts.py selbst verwenden "#!/usr/bin/env python". So eingeloggt
> > > kann ich das Script mit "/etc/init.d/denyhosts start" starten (als
> > > root; es handelt sich dabei um ein nicht-Debian Python-Startscript,
> > > das denyhosts mit der Option --daemon startet). 
> > 
> > Hast du den Sinn der Zeile verstanden?
> 
> Wie meinen? DenyHosts laeuft eben als Daemon und wird alle dreissig
> Sekunden aktiv. Dass es als root laeuft, ist nicht optimal, aber
> daran bastele ich spaeter mit Hilfe der DenyHosts-FAQ. Oder meintest
> du das Shebang?

Genau das Shebang, insbesondere das du dir anguckst was env eigentlich
bewirkt und warum dann "das richtige" Python aufgerufen wird.

> > > Um DenyHosts allerdings aus dem Runlevel aus zu starten, musste ich
> > > in beiden Scripts die Interpeter-Zeile in den absoluten Pfad zum
> > > Python-Binary aendern.
> > 
> > Hmm, wo ist das Python denn installiert? /usr/bin sollte doch auch bei
> > Skripten in /etc/init.d im Pfad liegen oder irre ich mich da jetzt?
> 
> Vielen Dank, das hat mich zur Loesung gefuehrt. Ich hatte python-2.3
> installiert und mit update-alternatives /etc/alternatives/python
> erzeugt -- genauer gesagt manuell erzeugen muessen, da apt-get
> install es nicht von sich aus tat. 

Das liegt daran, dass die Python-Pakete nicht das Alternatives-System
nutzen. Die Python-Pakete installieren selbststaendig einen Symlink
/usr/bin/python der auf die richtige Version zeigt. Bzw. tut das Paket
python dies. 

> Ich stelle nun allerdings fest, dass kein Link /usr/bin/python
> erzeugt wurde und "which python" auf meinen manuellen Symlink
> /usr/local/bin/python zeigte.

Das wird der Grund gewesen sein, IIRC ist PATH initial auf
"/bin:/sbin:/usr/sbin:/usr/bin" wenn root die UID ist. Somit wird python
nicht gefunden.

> Nach dem Erzeugen von Symlinks von
> /etc/alternatives/py{thon,gettext,doc} nach /usr/bin/ klappt es nun
> wie gewuenscht. 

apt-get install python loest das Problem ohne manuelles Eingreifen.
Analog gcc installiert dir das immer nen Symlink auf das aktuelle
Default-Python.

> > > Waehrend /etc/init.d/denyhosts Upgrades ueberdauert, muss ich
> > > denyhosts.py bei jedem Upgrade von Hand aendern, was mir zu
> > > fehleranfaellig ist. 
> > 
> > Klaro, aber du koenntest das init.d-Skript so abaendern das die
> > PATH-Variable mit dem Pfad zum python-Binary erweitert wird. Danach
> > sollte env in dem denyhosts.py Skript auch den neuen PATH enthalten und
> > somit python finden. 
> 
> Interessehalber: Wie setz man denn eine globale Variable in Python
> auf den Wert einer Shell-Variablen? 

Das willst du doch gar nicht, was du machen wollen wuerdest waere die
PATH-Variable zu erweitern und damit das 2. Python-Skript ausfuehren.
Wie das genau aussieht weiss ich so aber auch nicht.

Andreas

-- 
You never know how many friends you have until you rent a house on the beach.



Reply to: