[1] Archiv / MLD 4.x / Development / Wie kommen die Versionsnummern zustande?
 

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Wie kommen die Versionsnummern zustande?
« on: October 30, 2014, 11:41:58 »
Hallo,

beim Einrichten einer Fernbedienung bin ich auf Schwierigkeiten mit dem Paket python-gobject-2 gestoßen. Um denen auf den Grund zu gehen, habe ich unter Raspbian Wheezy eine Entwicklungsumgebung eingerichtet und - nach einer Änderung im Makefile - das Paket neu gebaut.

Nun habe ich zwei Fragen zur Version des so erstellten Pakets:
  • Das MLD-Paket hat die Version 2.7-3. Wo kommt diese Versionsnummer her? Die aktuelle Version des Pakets in Raspbian ist 2.28.6-10.
  • Wie kann ich eine eigene Revision angeben, also z.B. 2.7-3maf1?

Danke,
Malte

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Wie kommen die Versionsnummern zustande?
« Reply #1 on: October 31, 2014, 20:21:34 »
Mittlerweile weiß ich zumindest ein bisschen mehr darüber, wie die Versionsnummern zustande kommen. Fast alles dazu findet sich in Makefile.default und natürlich in den Makefiles der einzelnen Module. Hier sind meine "Erkenntnisse" als Beitrag zur Diskussion oder gar Dokumentation. Alle Angaben hier beziehen sich auf MLD 4.0.1 für den Raspberry Pi. Für Fehler und Missverständniss möchte ich mich schon im Voraus entschuldigen :-)

Die Versionsnummer wird aus vier Komponenten gebildet:
Code: [Select]
VERSION = $(version_prefix)$(version)$(version_suffix)-$(package_version)Wenn das Modul eine Abhängigkeit besitzt, kann auch die noch in die Versionsnummer eingehen:
Code: [Select]
package_version := $(package_version)_$(depends_version)
Die Variablen version_prefix und version_suffix werden kaum benutzt; derzeit nur von drei bzw. zwei Modulen.

Die Variable package_version ist so etwas wie die Revision in Debian. Allerdings wird sie i.d.R. automatisch gesetzt, und zwar auf die Anzahl der Git Commits im Projekt.

Die Variable version hat standardmäßig den Wert 0. In 59 Modulen wird ihr ein anderer, fester Wert zugewiesen. Erstaunlicherweise ziemlich oft 0 :-). Problematisch ist aus meiner Sicht, dass dieser Wert oft recht willkürlich oder veraltet scheint. Insbesondere dann, wenn man ihn mit der Versionsnummer des zugrundeliegenden Raspbian-Pakets vergleicht (z.B. dbus oder python3).

In 50 Modulen wird eine Version ermittelt. Zum Beispiel dadurch, dass das Modul ein Programm verpackt, das beim Aufruf seine Version liefert. Oder durch einen Aufruf von dpkg, der die Version des zugrundliegenden Raspbian Pakets liefert. Nicht verstanden habe ich, warum alle Python Module (python-*) die Python Versionsnummer (hier: 2.7) benutzen und nicht die Versionsnummer des zugrundeliegenden Pakets. Das bereitet mir z.B. Problem beim Upgrade von python-gobject-2.

In 64 Modulen schließlich werden die Variablen src_url bzw. src_rule gesetzt. Dann kann die aktuelle Version aus dem Quellarchiv abgeleitet werden.

Ein echtes Äquivalent für die Revision in Debian habe ich bislang nicht gefunden. Benutzt man version_suffix, dann landet dessen Wert in der Mitte der Versionsnummer. Die Anzahl der Commits im eigenen Repositoy kollidiert im Zweifel mit dem entsprechenden Wert in der Quelle.

Ich bin ja noch ganz neu in der MLD Entwicklung. Deshalb mag ich manches falsch verstanden haben. Doch zunächst einmal war ich überrascht, weil mir die Versionsnummern nicht sehr aussagekräftig schienen. Ich hatte eigentlich erwartet, dass sie stets eine Kombination aus der Versionsnummer des zugrundeliegenden Raspbian Pakets oder der Modulequelle (natürlich mit der Ausnahme MLD-eigener Module) und einer MLD-internen Zählung sein würden. Im Moment hätte ich die Befürchtung, dass Upgrades nicht immer richtig funktionieren.


Offline skippy

  • MLD-Tester
  • Expert Member
  • ******
  • Posts: 2280
    • View Profile
Wie kommen die Versionsnummern zustande?
« Reply #2 on: November 01, 2014, 09:53:08 »
Hi Malte,

ich finde das toll, wie du in die MLD eingestiegen bist und dir viele Dinge selbst erarbeitet hast. Was die Entwicklung selbst betrifft, kann ich dir leider nicht helfen. Ich kann lediglich einige Fragen zur Anwendung selbst beantworten. Wie du sicher schon festgestellt hast, ist die Dokumentation bei der MLD noch nicht so ganz weit fortgeschritten  ;). Wir haben zwar ein Wiki, aber da ist noch viel zu tun, insbesondere was die Themen, "wie ist was in der MLD umgesetzt", betrifft.

Da du dir schon die Mühe gemacht hast, dich in die MLD einzuarbeiten und hier einige Dinge dazu aufgeschrieben hast, möchte ich dich bitten, das ins Wiki zu stellen. Da schauen die Entwickler auch immer mal rein und bereinigen bzw. ergänzen Sachen, die nicht so ganz passen. Damit erleichterst du anderen Einsteigern den Umgang und das Verständnis für die MLD. Falls du Probleme bzw. Fragen zum Wiki hast, helfe ich da gern.

Ich darf dich auch auf unseren Chat Mittwochs ab 21:00 Uhr aufmerksam machen. Da kannst du deine Fragen direkt mit den Entwicklern durchsprechen. Die Info dazu findest du bei den News vom 21.7.2013.

Vielen Dank und viele Grüße
skippy
meine MLDs (show / hide)

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Wie kommen die Versionsnummern zustande?
« Reply #3 on: November 03, 2014, 22:15:36 »
Hallo skippy,

danke für Deine Ermunterung! Allerdings: Ich habe ja nicht nur meine Erkenntnisse zusammengefasst, sondern auch einige Fragen gestellt, auf die ich bislang leider keine Antwort erhalten habe. In meinem zweiten Thread, in dem es um Probleme beim Erstellen des Moduls python-gobject-2 geht, ist es genauso. Auf etwas mehr Unterstützung hatte schon gehofft.

Ungeachtet dessen möchte ich meinem ursprünglichen Beitrag noch in einem Punkt ergänzen. Für die Ermittlung der Version des Pakets für eine Bibliothek wird in libs/Makefile.libs
Code: [Select]
package_version := $(shell find template -type l | wc -l)
benutzt, also die Anzahl der Verweise im Unterverzeichnis template des Bibliotheksprojektes. Die Idee dahinter verstehe ich noch nicht. Beim Bau des Moduls python-object-2 hatte das bei mir jedenfalls den Effekt, dass mein Paket libc die Versionsnummer 2.13-10 erhielt, obwohl auf dem Zielrechner schon 2.13-11 installiert ist.

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20531
    • View Profile
    • ClausMuus.de
Wie kommen die Versionsnummern zustande?
« Reply #4 on: November 04, 2014, 15:19:05 »
Hi maf,

Ich war die letzten zwei Wochen im Urlaub, weshalb ich auf Deine Fragen nicht antworten konnte. Da es hier um tiefergreifende Interna der MLD geht, (und ich mir das System ausgedacht habe) konnten die anderen Entwickler Dir da auch keine tiefergehenden Antworten liefern.

Ich will nun mal versuchen etwas Licht in's Dunkel zu bringen:
- die statisch festgelegten Versionsnummern rühren größtenteils noch aus früheren MLD Versionen, wo es noch keinerlei Bezug zwischen Debian (Ubuntu/Raspian) Paketen und MLD Paketen gab. Die Verwendung der Debian Versionsnummer per dpkg habe ich erst mit der MLD-4 eingeführt. Bei der MLD-3 und früher wurde bestenfalls, wie von Dir bereits entdeckt, die Versionsnummer eines enthaltenen Tools genommen.
- Bei den python Paketen wurde die im Paket enthaltene Python Version (2.7) verwendet. Mir war nicht bewusst, das dies zu Problemen führen könnte. Es wäre aber sicher geschickter hier die volle Version 2.7.3 zu verwenden. Woher Du die 2.28.6-10 bezogen hast, ist mir allerdings nicht klar.
- Reine MLD Pakete die auf keinen externen Quellen beruhen verwenden die Versionsnummer 0, da es ja nichts gibt, was eine andere Versionsnummer rechtfertigen würde
- die package_version in den libs Paketen ist nen Sonderfall. Da die libs nur das enthalten, was benötigt wird, und alles andere was sonst noch in den korrespondierenden Debian Paketen enthalten ist weg lassen, brauchen wir hier eine Versionsnummer die erhöt wird, wenn das Paket weitere Libraries hinzubekommt. Zu beachten ist, das diese Pakete komplett zur Compilezeit erstellt werden, und nicht im MLD repository enthalten sind. Da es fast nie vorkommt, dass in einem libs Paket enthaltene libraries entfernt oder durch andere ersetzt werden, funktioniert diese Zählung recht brauchbar. Probleme können allerdings auftreten, wenn ein solches Paket auf einem anderem devel PC gebaut wird, und dort andere libs enthält, die im offiziellen Paket fehlen. Dann muss das Paket manuell auf dem MLD PC eingespielt werden, da dann ja die versionsnummer kleiner sein kann.

Hab ich irgendwas vergessen oder ist nochwas unklar?

Claus
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Wie kommen die Versionsnummern zustande?
« Reply #5 on: November 04, 2014, 22:20:53 »
Hallo Claus,

vielen Dank für Deine ausführliche Antwort! Vielleicht erklären sich unsere jeweiligen Sichtweisen auf die Versionsnummern aus unterschiedlichen Blickwinkeln. Du hast siehst die gesamte Distribution, die sich aus unterschiedlichen Quellen speist. Ich habe mehr meine Erfahrungen mit Debian-Paketen und -Versionsnummern im Bezug zu Paketentwicklung und -aktualisierung im Hinterkopf. Und ich weiß noch sehr wenig über MLD. Ich bitte deshalb lieber im Vorhinein um Nachsicht, falls ich mal zu keck oder gar anmaßend klingen sollte.

Ich war die letzten zwei Wochen im Urlaub, weshalb ich auf Deine Fragen nicht antworten konnte. Da es hier um tiefergreifende Interna der MLD geht, (und ich mir das System ausgedacht habe) konnten die anderen Entwickler Dir da auch keine tiefergehenden Antworten liefern.
Das geht natürlich garnicht. Da ist wohl ab jetzt eine strikte Urlaubssperre unausweichlich ;). Nein, im Ernst: Umso dankbarer bin ich natürlich, dass Du dich jetzt meiner (und all der anderen) Fragen angenommen hast. Ich hoffe, die Erholung hält eine Weile vor!

- die statisch festgelegten Versionsnummern rühren größtenteils noch aus früheren MLD Versionen, wo es noch keinerlei Bezug zwischen Debian (Ubuntu/Raspian) Paketen und MLD Paketen gab. Die Verwendung der Debian Versionsnummer per dpkg habe ich erst mit der MLD-4 eingeführt. Bei der MLD-3 und früher wurde bestenfalls, wie von Dir bereits entdeckt, die Versionsnummer eines enthaltenen Tools genommen.
Ah, verstehe. Die Projektgeschichte hatte ich nicht im Blick.

Meine Hauptkriterien für Versionsnummern wären vermutlich, dass eine Änderung der Quellen (Upstream oder native) und eine Änderung der Paketierung (Revision) stets zu einer neuen, "höheren" Versionsnummer führt, damit ein eindeutiges Verfahren für Upgrades umgesetzt werden kann. Wünschenswert schiene mir außerdem, dass es für einen Entwickler möglich ist, eigene Paketversionen zu erstellen (lokale Revision), die zwischen der aktuellen und der nächsten "offiziellen" Version liegen. Das klappt z.B. bei Debian recht gut. Bei MLD bin ich mir nicht so sicher. Aber vielleicht passt so ein Ansatz ja auch nicht so gut zu Deinen Vorstellungen, wie MLD funktioniert. Damit kenne ich mich - wie schon eingeräumt - (noch) nicht so gut aus.

- Bei den python Paketen wurde die im Paket enthaltene Python Version (2.7) verwendet. Mir war nicht bewusst, das dies zu Problemen führen könnte. Es wäre aber sicher geschickter hier die volle Version 2.7.3 zu verwenden. Woher Du die 2.28.6-10 bezogen hast, ist mir allerdings nicht klar.
Dieses Teilthema würde ich gerne in den parallelen Thread zu python-gobject-2 auslagern.

- Reine MLD Pakete die auf keinen externen Quellen beruhen verwenden die Versionsnummer 0, da es ja nichts gibt, was eine andere Versionsnummer rechtfertigen würde
Bei MLD-eigenen Paketen vertehe ich das (obwohl 1 vielleicht etwas selbstbewusster klänge als 0  :)). Aber es sind ziemlich viele Pakete dabei (nfs-*, diverse vdr-plugin-*, ...) die auch "nur" eine 0 als Versionsnummer haben und indirekt oder direkt auf externer Software basieren.

- die package_version in den libs Paketen ist nen Sonderfall. Da die libs nur das enthalten, was benötigt wird, und alles andere was sonst noch in den korrespondierenden Debian Paketen enthalten ist weg lassen, brauchen wir hier eine Versionsnummer die erhöt wird, wenn das Paket weitere Libraries hinzubekommt. Zu beachten ist, das diese Pakete komplett zur Compilezeit erstellt werden, und nicht im MLD repository enthalten sind. Da es fast nie vorkommt, dass in einem libs Paket enthaltene libraries entfernt oder durch andere ersetzt werden, funktioniert diese Zählung recht brauchbar. Probleme können allerdings auftreten, wenn ein solches Paket auf einem anderem devel PC gebaut wird, und dort andere libs enthält, die im offiziellen Paket fehlen. Dann muss das Paket manuell auf dem MLD PC eingespielt werden, da dann ja die versionsnummer kleiner sein kann.
Da verstehe ich leider noch vieles nicht. Z.B.: Die libs Pakete sind nicht im Repository enthalten? In einem libs Paket sind mehrere Bibliotheken? Kannst Du mir noch etwas auf die Sprünge helfen? Sonst muss ich mich durch die Makefiles wühlen. Bisher weiß ich eigentlich nur, dass ich ein Paket (python-gobject-2) erstellt habe und ziemlich viele Bibliothekspakete automatisch erstellt wurden ;). Warum mein selbstgebautes libc-Paket eine kleinere Versionsnummer hat als das ältere offizielle, habe ich leider noch nicht verstanden. Sollten die internen Mechanismen das nicht verhindern?

Schönen Gruß
Malte

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20531
    • View Profile
    • ClausMuus.de
Wie kommen die Versionsnummern zustande?
« Reply #6 on: November 05, 2014, 11:20:56 »
Hi,

Quote
Meine Hauptkriterien für Versionsnummern wären vermutlich, dass eine Änderung der Quellen (Upstream oder native) und eine Änderung der Paketierung (Revision) stets zu einer neuen, "höheren" Versionsnummer führt, damit ein eindeutiges Verfahren für Upgrades umgesetzt werden kann
Das ist bereits jetzt der Fall. Oder ist Dir nen Paket aufgefallen, wo das nicht so ist (mal abgesehen vom python-gobject-2)?
Quote
Wünschenswert schiene mir außerdem, dass es für einen Entwickler möglich ist, eigene Paketversionen zu erstellen (lokale Revision), die zwischen der aktuellen und der nächsten "offiziellen" Version liegen. Das klappt z.B. bei Debian recht gut.
Wie setzt Debian das denn um? Kannst Du nen Beispiel geben, für ne Versionsnummer des offiziellen Paketes und ner lokalen Version?
Quote
Bei MLD-eigenen Paketen vertehe ich das (obwohl 1 vielleicht etwas selbstbewusster klänge als 0  :)). Aber es sind ziemlich viele Pakete dabei (nfs-*, diverse vdr-plugin-*, ...) die auch "nur" eine 0 als Versionsnummer haben und indirekt oder direkt auf externer Software basieren.
Ja, da besteht noch ein wenig Nachbesserungs Bedarf. Wenn Du magst, kannst Du gerne mal alle (oder erst mal einige exemplarische) Pakete raussuchen, bei denen das Deiner Meinung nach geändert werden sollte.
Und ja, vermutlich würde sich ne Version "1" anstelle der "0" besser machen :)
Quote
Da verstehe ich leider noch vieles nicht. Z.B.: Die libs Pakete sind nicht im Repository enthalten? In einem libs Paket sind mehrere Bibliotheken? Kannst Du mir noch etwas auf die Sprünge helfen?
die libs pakete werden automatisch erstellt. Und zwar in dem moment, wenn beim bauen von Paketen festgestellt wird, das für dieses eine lib benötigt wird, die nicht in diesem Paket enthalten ist. Dann wird geschaut, aus welchem Debian Paket diese stammt und das entsprechende MLD Paket wird hergestellt und die benötigte lib hineingelegt. Werden weitere Libs dieses Debian lib Paketes benötigt, wird das MLD lib Paket um diese erweitert. So enthalten am Ende die libs Pakete nur genau das, was für die MLD benötigt wird.
Baust Du nun lokal nur ein einzelnes MLD Paket, enthalten im Anschluss deine lis Pakete nur das, was für genau dieses eine Paket benötigt wird. Das gleichnamige offizielle MLD Paket enthält aber möglicherweise wesentlich mehr libs, da ja noch andere Pakete gebaut wurden, die möglicherweise weitere Libs dieses lib Paketes benötigen.
Um nun zu erkennen, wann ein lib Paket geändert wurde (im Regelfall weil ne weitere lib hinzugekommen ist), wird die Anzahl de enthaltenen Libs gezählt und als MLD Versionsnummer verwendet.
Ich hoffe das war nun nicht zu verwirrend. Andernfalls werde ich Dir nen kleines Beispiel geben.

Claus
« Last Edit: November 05, 2014, 11:23:10 by clausmuus »
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline maf

  • MLD-Tester
  • Member
  • ******
  • Posts: 92
    • View Profile
Wie kommen die Versionsnummern zustande?
« Reply #7 on: November 07, 2014, 21:42:42 »
Quote
Meine Hauptkriterien für Versionsnummern wären vermutlich, dass eine Änderung der Quellen (Upstream oder native) und eine Änderung der Paketierung (Revision) stets zu einer neuen, "höheren" Versionsnummer führt, damit ein eindeutiges Verfahren für Upgrades umgesetzt werden kann
Das ist bereits jetzt der Fall. Oder ist Dir nen Paket aufgefallen, wo das nicht so ist (mal abgesehen vom python-gobject-2)?
Zumindest erkenne ich noch nicht, wie das in den Makefiles umgesetzt ist. Aber das kann sehr wohl daran liegen, dass ich die nicht gut genug verstehe.

Mein Verständnis ist bislang: Von welchen Quellpaketen (Ubuntu oder Raspbian) ein MLD Paket abhängt, steht in der Variablen deps. Die Versionsnummer des MLD Pakets wird aber nicht zwangsläufig aus der Versionsnummer der Quellpakete abgeleitet (bei mehreren wäre das auch bestimmt nicht trivial). Die MLD Module nutzten stattdessen unterschiedliche Verfahren, um eine Versionsnummer festzulegen. Meine Vermutung: Immer dann, wenn ein MLD Paket von (mindestens einem) Quellpaket abhängt, seine Versionsnummer aber statisch festgelegt wird, kann sich der Inhalt des Pakets ändern ohne dass sich seine Versionsnummer ändert. Aber auch wenn die Versionsnummer berechnet wird, ist das noch keine Garantie, dass alle Änderungen bei Quellpaketen berücksichtigt werden.

Viel hängt natürlich davon ab, was "abhängig" bedeutet. Ich stelle mir darunter vor, dass Dateien aus dem Quellpaket in das MLD Paket übernommen werden. Vielleicht stimmt das ja so pauschal garnicht.

Ich habe ein Skript 'check-versions' angehängt, das versucht, aufgrund der Einträge in den Makefiles Module zu identifzieren, die Probleme mit der Versionsnummer haben könnten. Das sind derzeit insbesondere Module die Abhängigkeiten definieren und keine Quelle (src_rule, src_url) definieren und ihre Version nicht berechnen.

Für diese Module werden dann ihre Versionsnummern und die Versionsnummer des Quellpakets (soweit verfügbar) ausgegeben. Es werden sicherlich viele Module dabei sein, bei denen Du, Claus, oder andere Entwickler sofort sagen: Da ist alles in Ordnung. Und andere Module, die vielleicht ein Problem haben könnten, werden durchs Raster fallen. Die aktuellen Heuristiken sind mit Sicherheit fehlerhaft. Meine Hoffnung ist auch nur, dass wir anhand des Skripts besser diskutieren können, wie die Vergabe von Versionsnummern funktioniert. Deshalb habe ich es recht großzügig kommentiert. Und vielleicht können wir es in ein paar Iterationszyklen so verbessern, das es weniger Fehler produziert.

Das Skript muss im Verzeichnis der Entwicklungsumgebung aufgerufen werden oder dieses Verzeichnis als Argument übergeben bekommen. Für jedes problematische Modul wird eine Zeile ausgeben. In der letzen Spalte steht entweder die Version des Quellpakets gleichen Namens oder, falls das nicht existiert aber das Paket genau eine 'dep' hat, dessen Versionsnummer (mit angehängtem Fragezeichen), andernfalls nur ein Fragezeichen.

Code: [Select]
#! /bin/bash

# try to identify those modules that might have version number that
# does not change when the version of the underlying sofware changes

# modules this script does not identify (but should)
# - vdr-plugin-streamdev-client

# optional arguments
# - base directory of development environment

# setup
base=${1:-.}
release_version=4.0.1
case $(uname -m) in
x86)    release_arch=32;;
x86_64) release_arch=64;;
armv6l) release_arch=rpi;;
*)      echo $(basename $0): unknown architecture; exit 1;;
esac
release=${release_version}-${release_arch}
packages=/tmp/mld_packages_${release}

# retrieve release package list if not available
if [ ! -f $packages.vers ]; then
# determine architecture
# download package list
pkg_url=http://www.minidvblinux.de/download/${release}/files/base/Packages.gz
rm -f $packages $packages.gz
wget -qO $packages.gz $pkg_url
        gunzip $packages.gz
# parse package list
awk '/^Package: / { package=$2 }
     /^Version: / { version=$2 }
             /^$/         { print package ": " version }
    ' $packages > $packages.vers
fi

# determine version of a package if available
pkg_version () {
name=$1

candidate=$(LANGUAGE=C apt-cache policy $name | awk '/Candidate/ { print $2 }')
        if [ -n "$candidate" ] && [ "$candidate" != "(none)" ]; then
echo ${candidate%-*}
fi
}

# loop over modules to identiy potential version problems
find "$base" -mindepth 2 -maxdepth 2 -name Makefile -print | while read file; do
# don't look at libs
test $(dirname $file) == "$base/libs" && continue
# skip modules that don't use deps
        grep -qE '^deps +:?=' $file || continue
# skip modules that define a source
grep -qE '^src_(rule|url) +:?=' $file && continue
# skip modules that define version_of
grep -qE '^version_of +:?=' $file && continue
# skip modules that compute version or latest_version unless using the python version
grep -E '^(latest_)?version +:?= \$\(shell' $file | grep -qv python && continue

# identify module
        module=${file%/Makefile}
module=${module##*/}

# determine MLD package version
mld_version=$(awk '/^'$module':/ { print $2 }' $packages.vers)
        mld_version=${mld_version%-*}

# determine source package version
source_version=$(pkg_version $module)
# guess version from single dep
if [ -z "$source_version" ] && [ $(awk '/^deps / { print NF }' $file) == "3" ]; then
dep=$(awk '/^deps / { print $3 }' $file)
source_version=$(pkg_version $dep)"?"
fi
# give up
if [ -z "$source_version" ]; then
source_version=?
fi

# report findings
        echo $module: $mld_version - $source_version
done

Quote
Bei MLD-eigenen Paketen vertehe ich das [...]. Aber es sind ziemlich viele Pakete dabei (nfs-*, diverse vdr-plugin-*, ...) die auch "nur" eine 0 als Versionsnummer haben und indirekt oder direkt auf externer Software basieren.
Ja, da besteht noch ein wenig Nachbesserungs Bedarf. Wenn Du magst, kannst Du gerne mal alle (oder erst mal einige exemplarische) Pakete raussuchen, bei denen das Deiner Meinung nach geändert werden sollte.
Vielleicht liefert check-versions ja irgendwann nutzbare Ergebnisse :).

Quote
Wünschenswert schiene mir außerdem, dass es für einen Entwickler möglich ist, eigene Paketversionen zu erstellen (lokale Revision), die zwischen der aktuellen und der nächsten "offiziellen" Version liegen. Das klappt z.B. bei Debian recht gut.
Wie setzt Debian das denn um? Kannst Du nen Beispiel geben, für ne Versionsnummer des offiziellen Paketes und ner lokalen Version?
Die genaue Beschreibung, wie Versionsnummer in Debian aufgebaut sind, liefert natürlich nur das Debian Policy Manual. Meine Kurzfassung: Die Versionsnummer besteht aus der Version der zugrundeliegenden Software (Upstream) und der Debian Revision. Beide sind durch ein "-" voneinander getrennt. Die Revision wird jedesmal erhöht, wenn eine Änderung bei der Paketerstellung vorgenommen wird. Wenn ich eine eigene Änderungen an einem Debian vornehme, modifiziere ich die Revision. Statt der Versionsnummer des offiziellen Pakets 47.11-3 erhält mein Paket dann z.B. die Version 47.11-3maf1. Wenn die nächste offizielle Version 47.11-4 freigegeben wird, ist sie höher als meine. Nach diesem Schema werden z.B. auch die Versionsnummern für Sicherheits-Updates vergeben, wenn sich die Version gepackten Software nicht ändert.

Ich hoffe das war nun nicht zu verwirrend. Andernfalls werde ich Dir nen kleines Beispiel geben.
Die Erklärung war sehr hilfreich. Danke! Und trotzdem: Ein Beispiel wäre toll  ;).

Bei den libs-Paketen habe ich zugegebenermaßen den Verdacht, dass eigentlich kein Zusammenhang zwischen den Versionen der Quell-Bibliotheken und der Versionsnummer des Bibliothekspakets besteht. Vielleicht geht das ja auch überhaupt nicht. Aber meine Erfahrung beim Erstellen eines einzigen Pakets in einer frischen Entwicklungsumgebung verstehe ich mittlerweile so, dass dabei Bibliothekspakete erstellt werden (von denen dann auch Abhängigkeiten bestehen können), die vielleicht neuere Dateien enthalten als das gleichnamige Paket aus dem offiziellen Repository, aber eine kleinere Versionsnummer haben, weil sie aufgrund der Erfordernisse dieses speziellen Erstellungsprozesses weniger Teilbibliotheken enthalten.

Falls das zutrifft, dann liefert eine Änderung an einem einzelnen Paket nur dann ein Ergebnis, das konsistent mit dem Rest von MLD ist, wenn man das Paket in einer Entwicklungsumgebung erstellt, in der die anderen Pakete schon enthalten und erstellt worden sind. Ist das wirklich so?

Gruß,
Malte

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20531
    • View Profile
    • ClausMuus.de
Wie kommen die Versionsnummern zustande?
« Reply #8 on: November 08, 2014, 13:11:42 »
So, die custom Version Erweiterung habe ich schon mal eingebaut.

Claus
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

[1] Archiv / MLD 4.x / Development / Wie kommen die Versionsnummern zustande?
 



Users Online Users Online

0 Members and 1 Guest are viewing this topic.