Sie sind nicht angemeldet.

1

22.04.2008, 16:43

Änderungen an ebuilds ohne Versionsänderung

Hallo,

Seit vorgestern ist openoffice-2.4.0 stabil. Also habe ich versucht es zu emergen. Da das emerge fehl schlug, beobachte ich die Fehlerbehebung hierzu in der gentoo Bug-DB. Mir ist aufgefallen, dass das ebuild noch täglich verändert wird, ohne dass die Versionsnummer hochgezählt wird. siehe http://sources.gentoo.org/viewcvs.py/gen…v=1.14&view=log. Bisher bin ich von dieser Vorgehensweise nur bei nicht stabilen (oder testing) ebuilds ausgegangen.

Das bedeutet, jemand der gestern openoffice installiert hat, hat eine anders zusammengebaute Version als jemand, der erst morgen installieren wird. Da kann man die Versionierung auch ganz sein lassen.

Wie häufig kommt sowas vor? Beobachtet habe ich es schonmal, dass nach re-emergen von Programmen diese sich von der Erstinstallation unterschieden (.desktop Icon, Doku hinzugekommen, Standard-Konfiguration geändert) konnte diese Anomalie jedoch nicht einordnen.

Muss ich jetzt regelmäßig ein emerge -e world laufen lassen, damit mein System auch mit den aktuellsten stabilen ebuilds gebaut wird und somit wirklich aktuell ist?
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

2

22.04.2008, 17:04

Ich habe dies auch schon (aber sehr selten) beobachtet. Habe mich dann jedoch nicht darüber informiert, wann ein solches Vorgehen gerechtfertigt ist und wann nicht.
Dies solltest du vielleicht bei #gentoo-dev nachfragen.
"Erst nachdem wir alles verloren haben, haben wir die Freiheit, alles zu tun."
"It's only after we've lost everything, that we're free to do anything!"

Jabber: Die ID kann via PN erfragt werden.

3

25.04.2008, 13:50

Leider ist mein Englisch nicht so stark, dass ich eine Diskussion auf gentoo-dev führen könnte. Evtl. könnte ja jemand das für mich übernehmen :?:

Ich habe ein Bash-Skript geschrieben und auf meinem Testsystem getestet: Folgendes Ergebnis:
Auf dem Testsystem sind 724 Pakete installiert. Beim Lauf mit 1:1 Vergleich sind 385 Ebuilds identisch und 339 modifiziert.
Das sind 47 % Modifiziert!

Bei einer genauen Betrachtung habe ich folgende Änderungen aus dem Vergleich ausgeschlossen:
- Metadaten Zeile am Anfang
- Keywords Änderung
- Kommentare
- Homepage
- einfo/ewarn/eerror/elog
- Leere Zeilen

Das neue Ergebnis ist 608 Ok und 116 modifiziert. Das sind immer noch 16 %. Für mich eine erschreckend hohe Zahl. Das System ist etwas über ein Jahr alt.

Hier ist mein Skript:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/bash
PKGDIR=/var/db/pkg
PORTDIR=/usr/portage
TMPDIR=/tmp
typeset -i IINSTALLED
typeset -i INOTFOUND
typeset -i IOK
typeset -i INOK
cleanup(){
   cat $1 \
       | grep -v '# $Header:' \
       | grep -v 'KEYWORDS='  \
       | sed 's/#.*//g'       \
       | grep -v 'HOMEPAGE='  \
       | grep -v 'eerror'     \
       | grep -v 'einfo'      \
       | grep -v 'ewarn'      \
       | grep -v 'elog'       \
       | grep -v ^$     
       
}
for EINSTPATH in $(find $PKGDIR -name \*.ebuild); do
   CATEGORY=$(echo $EINSTPATH | sed 's#\(^/var/db/pkg/\)\(.*\)\(/.*/.*\)#\2#g')
   EBUILDNAME=$(echo $EINSTPATH | sed 's#^/var/db/pkg/.*/.*/##g')
   PACKNAME=$(echo $EINSTPATH | sed 's#\(^/var/db/pkg/.*/\)\([a-zA-Z0-9]*\)\(.*\)#\2#g')
#   echo $CATEGORY $EBUILDNAME $PACKNAME
   ENEWPATH=$PORTDIR/$CATEGORY/$PACKNAME*/$EBUILDNAME
   IINSTALLED=IINSTALLED+1
   if [ -e $ENEWPATH ]; then
      OLD=$(cleanup $EINSTPATH)
      NEW=$(cleanup $ENEWPATH)
      if [ "$OLD" == "$NEW" ] ; then
          IOK=IOK+1
      else
          echo =$CATEGORY/$EBUILDNAME | sed 's/.ebuild//g'
          INOK=INOK+1
          if [ "$1" == '-v' ]; then
             echo "$OLD" > $TMPDIR/oldebuild
             echo "$NEW" > $TMPDIR/newebuild
             diff $TMPDIR/oldebuild $TMPDIR/newebuild
          fi
      fi
   else 
      INOTFOUND=INOTFOUND+1
   fi
done
if ! [ "$1" == '-q' ]; then
   echo "Installed: $IINSTALLED  Notfound: $INOTFOUND  OK: $IOK  Not OK: $INOK"
fi

Der Skript unterstützt Parameter "-v". Damit werden die entsprechenden Diffs (nach dem Entfernen der erlaubten Änderungen) angezeigt. Mit dem Parameter "-q" wird die Statistik-Zeile nicht angezeigt, so dass man folgendes machen kann:

Quellcode

1
emerge -va1 $(./checkmodebuilds.sh -q)

Ich bringe gerade mein Testsystem auch in dieser Hinsicht auf den neuesten Stand.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

4

29.04.2008, 17:10

Was ich mitbekommen habe ist, das vor allen an den USE-Flags Änderungen durchgeführt werden.

Das sieht man aber auch bei einem update mit --newuse. Dort steht dann %-xyz. Ansonsten wäre mal wirklich noch interessant was genau geändert wird.

Patches dürfen ja auf keinen Fall eingetragen werden ohne die -r hochzusetzen.

Viele Grüße

Andreas

5

29.04.2008, 17:23

Die Use-Flag Änderungen habe ich nicht berücksichtigt, da diese mit "emerge -uDN world" bei mir bereits immer aktualisiert werden. Ein Paar unkritische Änderungen habe ich bereits aufgelistet. Es gibt aber auch gravierende Änderungen, wie z.B. die von mir erwähnte Änderung im Openoffice oder die letzten Änderungen an gettext-0.17.

Habe gerade festgestellt, dass der Link nicht geht. Daher packe ich den als Code zum rauskopieren.

Quellcode

1
http://sources.gentoo.org/viewcvs.py/gentoo-x86/app-office/openoffice/openoffice-2.4.0.ebuild?rev=1.16&view=log

http://sources.gentoo.org/viewcvs.py/gentoo-x86 ist eine gute Adresse, um nachzuschauen, was genau mit den ebuilds passiert ist und warum.

Lasse einfach mein Skript mit dem Parameter -v laufen. Dann siehst Du die Änderungen.

Ich habe die Diskussion auch unter http://forums.gentoo.org/viewtopic-t-690134.html eröffnet. Dort gibt es bereits ein Paar Einträge mehr zu dem Thema.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

6

16.05.2008, 02:02

Ich bringe gerade mein Testsystem auch in dieser Hinsicht auf den neuesten Stand.
Ich auch..
Danke tolle Arbeit, dein Script läuft einwandfrei :thumbup:
Ich kam bei mir auf ca. 7% modifizierte ebuilds

Einzig merkwürdig ist das zb media-sound/ardour auch direkt nach dem neu mergen als modifiziert erkannt wird, aber egal, ist schon ne schöne Sache sein System ohne ein emerge -e world durchlaufen lassen zu müssen mal auf den Aktuellen Stand zu bringen.

7

16.05.2008, 11:17

Zitat

Einzig merkwürdig ist das zb media-sound/ardour auch direkt nach dem neu mergen als modifiziert erkannt wird,
Ist Ardour zufällig aus einem Overlay installiert? Das Script kann noch keine Overlays und vergleicht somit mit dem ebuild aus dem Portage. Das würde das Verhalten erklären.
Zur Zeit habe ich keine zeit an dem Skript weiter zu bauen. Es ist aber nicht in vergessenheit geraten. Die Fertige Lösung sollte wie Portage selbst in Python sein. Mit Python habe ich mich leider noch nicht beschäftigt.
Eventuell reicht als "Lösung" des Problems, dass so ein Script in die portage-utils reinkommt.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

8

16.05.2008, 16:26

Ist Ardour zufällig aus einem Overlay installiert? Das Script kann noch keine Overlays und vergleicht somit mit dem ebuild aus dem Portage. Das würde das Verhalten erklären.
Ja, es ist aus dem pro-audio Overlay

Zur Zeit habe ich keine zeit an dem Skript weiter zu bauen. Es ist aber nicht in vergessenheit geraten.
Hört sich gut an :-) Ich drücke dir die Daumen das du es eines Tages mit dem Script bis in die portage-utils schaffst :thumbup:

9

17.05.2008, 21:59

Ist Ardour zufällig aus einem Overlay installiert? Das Script kann noch keine Overlays und vergleicht somit mit dem ebuild aus dem Portage. Das würde das Verhalten erklären.


Hallo, bei mir läuft das Script leider nicht. ?(
Er fängt zwar an nach Unterschieden zu suchen, bricht aber später mit Fehler ab. Denke man das es auch an den Oveerlay liegt.

Habe halt recht viel aus dem Overlay installiert.

Das ist der Feler der bei mir kommt.

Zitat

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret. All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

Fehlerberichte (in Englisch!) per E-Mail an: bonzini@gnu.org .
Verwenden Sie dabei den Begriff ``sed'' irgendwo in der ``Betreff:''-Zeile.
./checkmodebuilds.sh: line 25: s#\(^/var/db/pkg/\)\(.*\)\(/.*/.*\)#\2#g: Datei oder Verzeichnis nicht gefunden
Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression=script
add the script to the commands to be executed
-f script-file, --file=script-file
add the contents of script-file to the commands to be executed
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if extension supplied)
-l N, --line-length=N
specify the desired line-wrap length for the `l' command
--posix
disable all GNU extensions.
-r, --regexp-extended
use extended regular expressions in the script.
-s, --separate
consider files as separate rather than as a single continuous
long stream.
-u, --unbuffered
load minimal amounts of data from the input files and flush
the output buffers more often
--help display this help and exit
--version output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret. All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

Fehlerberichte (in Englisch!) per E-Mail an: bonzini@gnu.org .
Verwenden Sie dabei den Begriff ``sed'' irgendwo in der ``Betreff:''-Zeile.
./checkmodebuilds.sh: line 28: s#\(^/var/db/pkg/.*/\)\([a-zA-Z0-9]*\)\(.*\)#\2#g: Datei oder Verzeichnis nicht gefunden
emerge: the other white meat (command-line interface to the Portage system)
Usage:
emerge [ options ] [ action ] [ ebuildfile | tbz2file | dependency ] [ ... ]
emerge [ options ] [ action ] < system | world >
emerge < --sync | --metadata | --info >
emerge --resume [ --pretend | --ask | --skipfirst ]
emerge --help [ system | world | --sync ]
Options: -[abBcCdDefgGhkKlnNoOpqPsStuvV] [--oneshot] [--newuse] [--noconfmem]
[ --color < y | n > ] [ --columns ]
[ --reinstall changed-use ] [--nospinner]
[ --deep ] [--with-bdeps < y | n > ]
Actions: [ --clean | --depclean | --prune | --regen | --search | --unmerge ]

Help (this screen):
--help (-h short option)
Displays this help; an additional argument (see above) will tell
emerge to display detailed help.


Vielleicht hast Du ja eine Idee.

Der Fehler ist sowohl auf meinem großen PC wie auch auf meinem Notebook.


Viele Grüße

10

17.05.2008, 22:35

Ich kann mir den Fehler nicht erklären. Eventuell ist beim Rauskopieren was schief gegangen? An sonsten gibt es hier eine optimierte Version von einem anderen User (toralf). Lies noch den nächsten Beitrag und übernimm die dort enthaltene cleanup() Funktion.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

11

17.05.2008, 22:55

Naja leider auch nicht.

anderer Fehler aber immer noch mit fehler :-)

Zitat

These are the packages that would be merged, in order:

Calculating dependencies |
!!! cdrdao-1.2.2-r1.ebuild is not in a valid portage tree hierarchy or does not exist

12

17.05.2008, 23:23

@Planeshift

Wie genau, mit welchem Befehl startest du das Script?

13

17.05.2008, 23:25

Diese Version habe ich ehrlich gesagt selbst nicht ausprobiert. Bisher ist das Skript ja ein Prototyp. Später soll es in Python geschrieben werden.
In dem Skript wurde der Parameter "-q" wegoptimiert. Die Statistik am Ende ist auch weg. Habe jetzt den Parameter -q wieder eingebaut. Mit dieser Version sollte es dann gehen

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/sh

#set -x

I=/tmp/ebuild.installed
C=/tmp/ebuild.portage

cleanup () {
   sed 's/#.*//g'  $1 | \
   grep -v   $1  	\
  	-e "^$"  	\
  	-e 'KEYWORDS='   \
  	-e 'HOMEPAGE='   \
  	-e 'LICENSE='   \
  	-e 'SRC_URI='   \
  	-e 'eerror'   \
  	-e 'einfo'   \
  	-e 'ewarn'   \
  	-e 'elog'
} 

cd /var/db/pkg/ || exit 1

find . -mindepth 3 -type f -name '*.ebuild' |\
sort |\
while read FILE
do
   EBUILD_INSTALLED=$(basename $FILE)
   PACKAGE=$(echo $EBUILD_INSTALLED | cut -f1 -d '.')
   CATEGORIE=$(echo $FILE | cut -f2 -d'/')
   
   EBUILD_PORTAGE=$(ls /usr/portage/$CATEGORIE/$(echo $PACKAGE | cut -f1 -d'-')*/$EBUILD_INSTALLED 2>/dev/null)
   [[ -f $EBUILD_PORTAGE ]] || continue
   
   cleanup $FILE   	> $I
   cleanup $EBUILD_PORTAGE   > $C
   
   DIFF=$(diff $I $C 2>/dev/null)
   if [[ $? -eq 1 ]]; then
  	if [[ "$1" = "-q" ]]; then
     	echo "=$CATEGORIE/$EBUILD_INSTALLED" | sed 's/.ebuild$//g'
  	else
     	echo -e "$CATEGORIE/$(basename $(dirname $EBUILD_PORTAGE))\t$EBUILD_INSTALLED"
  	fi
  	[[ "$1" = "-v" ]] && echo -e "$DIFF\n"
   fi
   
   rm $I $C
done
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »bell« (18.05.2008, 16:07)


14

17.05.2008, 23:32

Ja Supi, so gehts. Saubere Arbeit.


15

18.05.2008, 16:10

Mir ist gerade noch aufgefallen, dass die Ausgabe der Versionsnummer auch wegoptimiert ist. Dadurch werden Slots nicht berücksichtigt. Ich habe jetzt beim Parameter "-q" wie beim ersten Skript eine Ausgabe mit Versionsnummer eingebaut und den Beitrag weiter oben aktualisiert.
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.

16

18.05.2008, 18:53

Hallo,

Du kannst ja auch nen Beitrag in Tipps und Tricks machen und das aktuellste Scribt immer in Deinen ersten Post aktualisieren.

Dann hat jeder einen schnellem Zugriff auf das Script und scheint ja auch echt gut zu seim und zu funktionieren.

Viele Grüße.

17

18.05.2008, 21:57

Habe ich gemacht :P Hier :D
Auch wenn Open-Source kostenlos ist, ist sie nicht umsonst. Dein Preis ist Dein Engagement und Mitarbeit an OS-Projekten.
Wenn Du keinen Preis bezahlen willst, bist Du die Ware. Und das ist nicht Open Source, geschweigedenn frei.