View previous topic :: View next topic |
Author |
Message |
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Mon May 31, 2010 9:29 pm Post subject: |
|
|
ich hab jetzt nochmal mit ps geschaut, während ein emerge -sync läuft:
Code: | root 12422 11677 0 19570 6872 1 23:17 pts/3 00:00:02 rsync --recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --verbose --progress rsync://193.1.193.64/gentoo-portage/ /usr/portage/tree/official
root 12423 12422 0 29317 5040 1 23:17 pts/3 00:00:00 rsync --recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --verbose --progress rsync://193.1.193.64/gentoo-portage/ /usr/portage/tree/official
|
also: wenn ich das richtig sehe läuft der rsync-prozess als user root, was ja so sein soll. ein bisschen erstaunt bin ich, das rsync zweimal läuft. soll das so sein? wenn ich den Ellenlangen rsync befehl per hand ausführe (mit sudo natürlich) geht wieder alles.
hat es eventuell sinn einen bugreport aufzumachen? ich hab ja eigentlich doch recht wenig infos....
EDIT: gegen ende von dem per hand ausgeführten befehl gabs doch ein paar probleme:
rsync: readlink_stat("/metadata/cache/kde-base/kdm-4.3.5-r1" (in gentoo-portage)) failed: Stale NFS file handle (116)
ich hab aber kein nfs im portage tree. es ist (inzwischen wieder) squashfs/aufs. wieso gibts da nen nfs-fehler? |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Wed Jun 02, 2010 9:41 am Post subject: |
|
|
Ok, gefunden: es lag an libtrash.
Ich habe das zwar schon länger, habe aber kürzlich LD_PRELOAD von .bashrc nach /etc/profile umgezogen.
Ich versteh aber immer noch nicht wieso es bei "emerge --sync" nicht geht, aber bei "rsync ..." gehts. bei beiden befehlen müsste doch libtrash geladen werden, oder nicht? |
|
Back to top |
|
|
disi Veteran
Joined: 28 Nov 2003 Posts: 1354 Location: Out There ...
|
Posted: Wed Jun 02, 2010 10:48 am Post subject: |
|
|
Lol, ich verfolge diesen Beitrag schon laenger weil es mir bekannt vorkam Leider bin ich darauf nicht gekommen :/
Bei mir war es so, das ich libtrash installiert hatte und gleich anschliessend Probleme auftraten. Also wieder rausgeschmissen und Problem war weg.
Wenn du es als User benutzen willst, dann nicht Systemweit sondern in der .profile im home directory _________________ Gentoo on Uptime Project - Larry is a cow |
|
Back to top |
|
|
Genone Retired Dev
Joined: 14 Mar 2003 Posts: 9538 Location: beyond the rim
|
Posted: Wed Jun 02, 2010 12:03 pm Post subject: |
|
|
Christian99 wrote: | Ich versteh aber immer noch nicht wieso es bei "emerge --sync" nicht geht, aber bei "rsync ..." gehts. bei beiden befehlen müsste doch libtrash geladen werden, oder nicht? |
Die Frage wäre erstmal was genau das Problem mit libtrash war, evtl. war es unter emerge vielleicht doppelt geladen oder so (müsste man im Detail schauen). Aber generell sollte man mit LD_PRELOAD sehr vorsichtig sein. Insbesondere im globalen Kontext kriegt man da schnell unerwünschte Nebenwirkungen deren Ursache man nur schwer lokalisieren kann (wie gerade wieder gesehen). |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Wed Jun 02, 2010 12:36 pm Post subject: |
|
|
das problem war, dass /usr ein geschütztes verzeichnis ist, und dass alle rm/mv aufrufe dort von libtrash mit permission denied beantwortet werden. Das soll eigentlich auch so sein. Was aber seltsam ist:
Code: | sudo echo $LD_PRELOAD
/usr/lib64/libtrash.so |
also wird libtrash geladen. oder übernimmt sudo das von der aufrufenden shell?
denn wenn ich mit sudo -s zu root wechsle, dann ist LD_PRELOAD leer:
Code: | sudo -s
echo $LD_PRELOAD
emerge --info|grep LD_PRELOAD
LD_PRELOAD="/usr/lib64/libtrash.so"
|
also läd sich emerge (python) nochmal extra enviromentvariablen, kann das sein? |
|
Back to top |
|
|
69719 l33t
Joined: 20 Sep 2004 Posts: 865
|
Posted: Wed Jun 02, 2010 12:57 pm Post subject: |
|
|
Variablen werden immer vor dem ausführen durch die entsprechenden Werte in der aktuellen Umgebung ersetzt, nicht erst nach einem sudo oder sonstiges. |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Wed Jun 02, 2010 1:28 pm Post subject: |
|
|
es geht ja nicht ums ERsetzen, sondern ums GEsetzt werden der variablen. wiso ist in meiner root-umgebung LD_PRELOAD leer, obwohl es in /etc/profile steht, wenn ich aber emerge aus der selben root-umgebung wieder aufrufe ist es gesetzt? |
|
Back to top |
|
|
69719 l33t
Joined: 20 Sep 2004 Posts: 865
|
Posted: Wed Jun 02, 2010 1:51 pm Post subject: |
|
|
Christian99 wrote: | es geht ja nicht ums ERsetzen, sondern ums GEsetzt werden der variablen. wiso ist in meiner root-umgebung LD_PRELOAD leer, obwohl es in /etc/profile steht, wenn ich aber emerge aus der selben root-umgebung wieder aufrufe ist es gesetzt? |
Wenn
Code: |
sudo echo $LD_PRELOAD
|
verarbeitet wird, so wid LD_PRELOAD duch den entsprechenden Wert ersetzt.
Code: |
man bash
/INVOCATION
...
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists.
...
|
Das sollte deine Frage beantworten, stand auch die Tage schon im Board zur Diskussion.
Emerge wird wohl demnach ein source machen, könntest du mal mittels strace verfolgen. |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Wed Jun 02, 2010 5:06 pm Post subject: |
|
|
Quote: | Wenn
Code:
sudo echo $LD_PRELOAD
verarbeitet wird, so wid LD_PRELOAD duch den entsprechenden Wert ersetzt.
|
klar, mein fehler.
Quote: | Code:
man bash
/INVOCATION
...
When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists.
...
Das sollte deine Frage beantworten, stand auch die Tage schon im Board zur Diskussion.
Emerge wird wohl demnach ein source machen, könntest du mal mittels strace verfolgen. |
ja, fast klar: wann ist eine bash eine interactive login-shell? wenn ich mich an ttyX einlogge, dann wahrscheinlich auf jeden fall. aber wenn ich unter x eine terminalsitzung öffne (konsole in meinen Fall) ist da bash dann eine loginshell? ich hätte vermutet, dass nicht, es wird aber LD_PRELOAD gesetzt. und bash wird nicht mit "--login" parameter gestartet.
Eventuell sollte ich noch sagen das LD_PRELOAD in /etc/profile.env gesetzt, nich in /etc/profile. hab gerade nochmal nachgeguckt.
ist mit der datei was anderes? ich hab nur gesehn, dass sie von /etc/profile aufgerufen wird und portage ruft /etc/profile.env direkt auf, ohne /etc/profile.
Allerdings: wenn ich konsole strace kann ich nichts sehen, dass entweder /etc/profile oder /etc/profile.env geöffnet werden. wo kommt dann LD_PRELOAD her? von X? und wieso wird es dann nicht an die root-shell weitergegeben? |
|
Back to top |
|
|
Genone Retired Dev
Joined: 14 Mar 2003 Posts: 9538 Location: beyond the rim
|
Posted: Wed Jun 02, 2010 5:44 pm Post subject: |
|
|
Christian99 wrote: | Allerdings: wenn ich konsole strace kann ich nichts sehen, dass entweder /etc/profile oder /etc/profile.env geöffnet werden. wo kommt dann LD_PRELOAD her? |
Vermutlich vom aufrufenden Prozess, da ich davon ausgehe dass LD_PRELOAD exportiert ist.
Quote: | und wieso wird es dann nicht an die root-shell weitergegeben? |
hängt davon ab wie die root-Shell gestartet wird: sudo z.B. setzt standardmässig viele (alle?) Umgebungsvariablen zurück bevor es einen Prozess startet. |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Fri Jun 04, 2010 5:31 pm Post subject: |
|
|
ahja, ich hab auch mal in der manpage von sudo geschaut, und ja da werden einige variablen zurüchgesetzt. Wie gesagt, ich verwende libtrash schon länger, und wenn ich was an systemdateien mit sudo gemacht habe, ist mir schon aufgefallen, dass da libtrash nicht verwendet wird. deswegen bin ich auch lange nicht drauf gekommen, dass plötzlich beim emerge --sync libtrash seine finger im spiel hat. Stellt sich eigentlich nur die frage, wieso das beim syncen so war, aber nicht wenn ich ein paket emerged habe. Aber manche geheimnisse wird wohl selbst Linux für sich behalten |
|
Back to top |
|
|
Genone Retired Dev
Joined: 14 Mar 2003 Posts: 9538 Location: beyond the rim
|
Posted: Sat Jun 05, 2010 1:45 am Post subject: |
|
|
Wäre möglich dass das durch die Sandbox (die ja auch über LD_PRELOAD geladen wird) ausgehebelt wird. |
|
Back to top |
|
|
Christian99 Veteran
Joined: 28 May 2009 Posts: 1670
|
Posted: Mon Jun 07, 2010 7:45 pm Post subject: |
|
|
oh je, word ja immer komplizierter....
aber nachdem nun auch beim installieren des neuesten wine deswegen probleme auftraten, bin ich nun wieder dazu übergegangen, LD_PRELOAD in die .bashrc zu schreiben, und nicht in die profile.env. Das gibt denk ich wesentlich weniger probleme.
Dann noch mal danke an alle, die mir bei der fehlersuche geholfen haben!! |
|
Back to top |
|
|
|