portupgrade ausgabe - seltsames verhalten

soul_rebel

ist immer auf der flucht
portupgrade macht bei mir komische sachen:
wenn ich portupgrade aus einem programm heraus aufrufe, dann fehlt ein teil des output.
wenn ich also einen aufruf wie
Code:
portupgrade -v -y -N -PP games/angband
direkt auf der kommandozeile aufrufe und keine root rechte habe(nur als beispiel, ist schneller vorbei) sieht der output so aus:
Code:
->  Session started at: Thu, 06 Apr 2006 10:46:10 +0000
--->  Fresh installation of games/angband started at: Thu, 06 Apr 2006 10:46:17 +0000
--->  Checking for the latest package of 'games/angband'
--->  Fetching the package(s) for 'angband-3.0.6' (games/angband)[color=red]
--->  Fetching angband-3.0.6
++ Will try the following sites in the order named:
	ftp://ftp.de.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/
--->  Invoking a command: curl ftp://ftp.de.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/All/angband-3.0.6.tbz -o /var/tmp/portupgradeURBFUqpc/angband-3.0.6.tbz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0  579k    0  1404    0     0   1423      0  0:06:57 --:--:--  0:06:57  1423
 20  579k   20  120k    0     0  75560      0  0:00:07  0:00:01  0:00:06  183k
 59  579k   59  344k    0     0   130k      0  0:00:04  0:00:02  0:00:02  207k
 96  579k   96  559k    0     0   153k      0  0:00:03  0:00:03 --:--:--  210k
100  579k  100  579k    0     0   151k      0  0:00:03  0:00:03 --:--:--  204k
--->  Downloaded as angband-3.0.6.tbz
--->  Identifying the package /var/tmp/portupgradeURBFUqpc/angband-3.0.6.tbz
** Failed to save the dowloaded tarball as /usr/ports/packages/All/angband-3.0.6.tbz
--->  Listing the results (+:done / -:ignored / *:skipped / !:failed)
	! angband-3.0.6	(Permission denied - /usr/ports/packages/All/angband-3.0.6.tbz)
--->  Packages processed: 0 done, 0 ignored, 0 skipped and 1 failed
** Could not clean up temporary directory: Directory not empty - /var/tmp/portupgradeURBFUqpc[/color]
--->  Fetching the latest package(s) for 'angband' (games/angband)
[color=red]--->  Fetching angband
++ Will try the following sites in the order named:
	ftp://ftp.de.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/
--->  Invoking a command: curl ftp://ftp.de.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/angband.tbz -o /var/tmp/portupgrade7LnEZ0Si/angband.tbz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0  579k    0  1404    0     0   1451      0  0:06:49 --:--:--  0:06:49  1451
  9  579k    9 56160    0     0  39568      0  0:00:15  0:00:01  0:00:14  118k
 25  579k   25  147k    0     0  62424      0  0:00:09  0:00:02  0:00:07  100k
 55  579k   55  322k    0     0  95434      0  0:00:06  0:00:03  0:00:03  128k
 80  579k   80  464k    0     0   105k      0  0:00:05  0:00:04  0:00:01  134k
100  579k  100  579k    0     0   110k      0  0:00:05  0:00:05 --:--:--  135k
--->  Downloaded as angband.tbz
--->  Identifying the package /var/tmp/portupgrade7LnEZ0Si/angband.tbz
** Failed to save the dowloaded tarball as /usr/ports/packages/All/angband-3.0.6.tbz
--->  Listing the results (+:done / -:ignored / *:skipped / !:failed)
	! angband@	(Permission denied - /usr/ports/packages/All/angband-3.0.6.tbz)
--->  Packages processed: 0 done, 0 ignored, 0 skipped and 1 failed
** Could not clean up temporary directory: Directory not empty - /var/tmp/portupgrade7LnEZ0Si[/color]
--->  Fresh installation of games/angband ended at: Thu, 06 Apr 2006 10:46:31 +0000 (consumed 00:00:13)
--->  Listing the results (+:done / -:ignored / *:skipped / !:failed)
	! games/angband	(package not found)
--->  Packages processed: 0 done, 0 ignored, 0 skipped and 1 failed
--->  Session ended at: Thu, 06 Apr 2006 10:46:31 +0000 (consumed 00:00:20)
aber wenn ich denselben befehl aus meinem programm heraus starte (egal ob mit pipe, QProcess oder KProcess) fehlt aller rotmarkierter code.
außerdem gibt es eine andere fehlermeldung undzwa:
Code:
** Could not find the latest version (3.0.6) ** No package available: games/angband

ich bin relativ ratlos :confused:
ich kann auschließen, dass es sich um ein problem von popen Kprocess oder einer anderen system schnittstelle handelt, wenn ich nämlich ein | tee logfile and den befehl selbst hänge (sowohl im aufruf des programms als auch auf der kommandozeile) erzeugen beide unterschiedliche logfiles.
auch liegt es nicht an fetch-befehl der an den jeweiligen stellen benutzt wird, ich habe es schon mit curl und mit fetch ausprobiert, gleiches ergebnis.

vielen dank für eure hilfe
 
Das liegt daran, das diese Ausgaben nicht über stdout kommen. Folgender Aufruf würde das umbiegen.
Code:
portupgrade -v -y -N -PP games/angband 2>&1
Siehe auch sh(1).
 
hilft nicht, ist auch logisch, weil man mit krocess und qprocess auch den stderr überwacht.
die oben genannte fehlermeldung taucht auch auf dem stderr auf (ich werte die getrennt aus). deswegen habe ich auch kein 2>&1 an den befehl gehangen.
und außerdem wenn ich den befehl von der konsole ausführe und die ausgabe mit tee in den logfile schreibe und der besagte code ist drin (ohne 2>&1 ), wieso sollte der befehl dann 2>&1 brauchen wenn ich den befehl aus dem programm aufrufe?
danke trotzdem
 
Portupgrade spawnt weitere Prozesse, vielleicht wird deren Ausgabe nicht mitüberwacht. Probier mal
Code:
sh -c "portupgrade -v -y -N -PP games/angband"
 
Code:
--->  Downloaded as angband.tbz
--->  Identifying the package /var/tmp/portupgrade7LnEZ0Si/angband.tbz
** Failed to save the dowloaded tarball as /usr/ports/packages/All/angband-3.0.6.tbz
--->  Listing the results (+:done / -:ignored / *:skipped / !:failed)
	! angband@	(Permission denied - /usr/ports/packages/All/angband-3.0.6.tbz)
Das hast Du sicherlich nicht als "root" laufen lassen?
Der User hatte nicht die nötigen Berechtigungen, versuch es nochmal als root.
 
Portupgrade spawnt weitere Prozesse, vielleicht wird deren Ausgabe nicht mitüberwacht.
hab ich mir auch gedacht. sh -c drum hilft aber nicht...
ich mache aber fortschritte (glaube ich).
wenn ich das ganze in einem mini programm alleine machen und das von der konsole aufrufe , dann ist der output. wenn ich popen in meinem programm benutze (statt KProcess) und das programm aus der konsole aufrufe (statt aus der Kdevelop umgebung), dann geht auch....
ruf ich das programm in kdevelop auf oder bentze ich Kprocess gehts nicht.
meine theorie im moment: kprocess verhindert die output übermittlung irgendwie und kdevelop benutzt auch kprocess um mein programm zu starten was dann auch die fehler verursacht selbst wenn ich in meinem code pipes satt kprocess nehmen...
wenns so ist isses aber mist, weil kprocess brauche :(
 
Dann leite die Ausgabe in eine tempörare Datei und beobachte die.

Yoda schrieb:
Das hast Du sicherlich nicht als "root" laufen lassen?
Der User hatte nicht die nötigen Berechtigungen, versuch es nochmal als root.
Thema verfehlt.
 
kamikaze schrieb:
Dann leite die Ausgabe in eine tempörare Datei und beobachte die.
dass ist ja das komische; das tue ich die ganze zeit schon. wie im ersten post erwähnt hänge ich ein | tee ~/logfile an beides dran und es ist genau dasselbe! der eine logfile enthält alles und der andere wieder nur die auschnitte :(

@yoda: ja bitte ganz lesen ;)
 
naja ich hab an den befehl in der konsole
Code:
| tee ~/logfile1
drangehangen und an den, den ich ausm prog aufrufe
Code:
| tee ~/logfile2
und jeder der files enthält die gleichen zeilen die man auch sonst sieht, also logfile1 hat alles, logfile2 hat das rotmarkierte nicht...
 
Was willst du eigentlich machen? Schreib dein Programm doch als Shell Skript und mach lediglich ein graphisches Frontend dafür.
 
ist alles teil von kports ;)
ich werde jetzt erstmal die pipes nehmen und bald mein system mal auf den neusten stand bringen. vielleicht sinds ja auch bugs irgendwo...
 
also nach einem upgrade aller ports und nach dem lösen einiger libtool probleme, habe ich im moment die gleichen probleme.
ich lasse gerade aber beide programmaufrufe (pipe einzeln und kprocess) mal ein env ausführen um zu gucken obs da unterschiede gibt (die es eigentlich nicht geben dürfte weil das env des parent and den kindprozess gegeben werden sollte aber mal schauen.
 
ich habe ein paar unterschiede gefunden, die einzig wichtig-aussehenden waren, ohne kprocess +und aus konsole:
SHLVL=1
TERM= xterm

mitkprocess/aus kdevelop
SHLVL=0
TERM garnicht gesetzt

das manuelle setzen dieser variablen hilft aber auch nichts...

danke für dein interesse kamikaze!
 
nein noch nicht aber inzwischen glaube ich echt, dass es ein bug von portupgrade sein muss... anders könnte ich es mir nicht erklären....
also ich versuch es da mal...
 
also auf der liste konnte mir noch keiner helfen, bin aber durch browsen der ruby-skripte zu der erkenntnis gekommen, das es (einfach) der komplette output der pkg_fetch kommandos ist der fehlt.
deshalb denke ich dass es ein problem von ruby oder der implementierung de "script" aufrufs in den pkgtools ist. da ich aber leider kein ruby spreche kann ich das nicht überprüfen...
kennt sich jemand damit aus?
danke!
 
hab mich doch in die rubycode eingelesen und einen mini patch für /usr/local/lib/ruby/site_ruby/1.8/pkgtools.rb geschriben, der das problem löst, ich hoffe bei freebsd nimmt sich jemand auch diesem an.
 
hab bis jetzt erstaml nur an hackers und ports gemailt. mein "patch" ist auch ein 'dreckige' lösung ich würde also gerne erstmal info von jemandem dazu haben der ahnung davon hat.
falls du es dir mal angucken möchtest:
Code:
483,484d482
<   elsif STDIN.tty?
<     ['/usr/bin/script', '-qa', file, *args]
486c484
<     ['/bin/sh', '-c', sprintf('%s >>%s 2>&1', shelljoin(*args), shelljoin(file))]
---
>     ['/usr/bin/script', '-qa', file, *args]
ist der diff, der macht aus
Code:
def logged_command(file, args)
  if !file  
    args
  elsif STDIN.tty?
    ['/usr/bin/script', '-qa', file, *args]
  else
    ['/bin/sh', '-c', sprintf('%s >>%s 2>&1', shelljoin(*args), shelljoin(file))]
  end
end
das hier
Code:
def logged_command(file, args)
  if !file  
    args
  else
    ['/usr/bin/script', '-qa', file, *args]
  end
end

bei dem if gibt es bei mir jedoch inhaltliche verständnisprobleme:
also ich weiß das beim fehlendem output der letzte case aufgerufen wird und da das ganze in eine datei umgelenkt wird verschwindet (->logisch). wenn alles geht trifft der zweite case ein, was sowas ähnliches wie tee macht, d.h. nur eine kopie des outputs umlenkt (auch logisch).
eigentlich jedoch sollte immer case 1 eintreten da ich in keinem fall einen logfile benutze, bzw. der von pkg_fetch/portupgrade auf 0 gesetzt wird :confused: .

ich glaube außerdem dass es trotzdem noch ein problem von kprocess ist, weil dieses kein 'echtes' environment schafft, nicht wie ein terminal aussieht. was widerum den pkgtools doch eigentlich schnuppe sein kan, also wozu ist überhaupt case 3 ?

danke!
 
Zurück
Oben