Cmmi Vereinheitlichung
 
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Die Installation eines Source-Paketes unter Linux / Unix folgt meist dem CmmiMuster.

Als LinuxUmsteiger? dachte ich längere Zeit, dass dies ohnehin selbstverständlich wäre, bis ich dann doch regelmäßig auf Abweichungen gestossen bin.

Es wäre ganz praktisch, wenn dies in allen Projekten vereinheitlicht würde. Wenn dies nicht der Fall ist, könnte so ein Projekt zumindest eine Datei (z. B. NOTCMMI) enthalten, die entweder leer ist, oder die Motivation bzw. die Gründe für die Abweichung enthält. Ein Script könnte dann die Source-Installation weiter automatisieren. Das ist natürlich erst eine grobe Idee, die ausgearbeitet werden müsste.

Weiterer Aspekt: Die Vereinheitlichung sollte sich IMHO auch auf die Dekompression und die verwendeten Verzeichnisnamen erstrecken (auch hier gibt es Abweichungen, wo die erzeugten Verzeichnisse anderes heißen, als sich aus dem Dateinamen erwarten ließe). --hl

In jedem Fall braucht man die Information, welche Projekte vom CmmiMuster abweichen. Dazu könnte die Seite CmmiAbweichungen verwendet werden.


Diskussion

@ff: Wir sind uns im Ziel eines universellen SETUP einig, aber nicht im Weg dorthin. Wenn ich dich richtig verstehe, würdest du vorschlagen, dass jedes Paket ein SETUP-Programm enthalten soll - das bedeutet aber einen Änderungsbedarf in jedem einzelnen Projekt. Mein Ausgangspunkt wäre ein SETUP-Script, das sich vermutlich für den Standardfall leicht schreiben lässt, welches den Vorgang automatisiert. Leider wird es nur in 80% der Fälle funktionieren, aber in diesen 80% Projekten, die "well-behaved" sind, wären in den Projekten keine Änderungen nötig. Es ginge dann darum, mit minimalem Aufwand zu erkennen, welche Projekte nicht installiert werden können. Von der anderen Seite könnte man im 1. Schritt eine Kennzeichnung der Projekte vornehmen (NOTCMMI) und im 2. Schritt eine Etablierung von CmmiMuster vorschlagen oder selbst durchführen. Unlogisch? -- hl


Im Prinzip ja. Über die erweiternden Schritte

Könnte man ja dann diskutieren.

Natürlich müsste man auch prüfen, ob es so etwas nicht ohnehin schon gibt, bzw. was die einschlägigen Linux-Gruppen von so einer Vorgangsweise halten. -- hl

Ich hab mich da als LinuxAnfänger auch einmal an einem Perl-Script versucht, das ein oder mehrere Source-Packages dekomprimiert. Danach werden vereinfachte SymbolischeLinks auf die entstandenen Verzeichnisse gelegt (z.B. check -> check-0.8.2). Damit das mit dem Link funktioniert, muss allerdings der Name des Files mit dem Namen des komprimierten Verzeichnisses korrespondieren und die Versionsnummer im Verzeichnis mit Punkten geschrieben sein). Vielleicht ist davon etwas (zumindest von der Idee her) brauchbar.

Mal ein guter Ansatz. Hier ein Versuch das etwas zu systematisieren.

#! /usr/bin/perl
# Usage: unzip_package name*
use strict;
use warnings;

my $file;
my $dir;
my $name;

foreach $file (@ARGV) {
  if($file =~ m#/#) { # only current directory
    print STDERR "File '$file' ist nicht im lokalen Verzeichnis. ";
    print STDERR "Keine Bearbeitung.\n";
    next;
  }

  my $unzip;
  if($file =~ m/\.bz2$/) {
    $unzip = "j";
  } elsif ($file =~ m/(.*)\.gz$/) {
    $unzip = "z";
  } elsif ($file =~ m/(.*\[-_\.]tar)$/) {
    $unzip = "";
  } else {
    print STDERR "File '$file' hat keine bekannte Kompression (gzip, bzip). ";
    print STDERR "Keine Bearbeitung.\n";
    next;
  }

  # Neuer Filename
  $file = $1;

  $dir = $file;
  $dir =~ s/[-_\.]tar.*$//; # removes extensions
  $dir =~ s/(\d)_/$1./g; # change GNU 1_2_2 => 1.2.2
  $name = $dir;
  $name =~ s/-(\d.*)$//; # removes versions
  my $version = $1;
  print "Package: '$name'\tVersion: '$version'\n";
  mkdir $name;
  mkdir "$name/unpacked-$version";
  mkdir "$name/source";

  link $file, "$name/source/$file" && unlink $file 
       || die "Konnte $file nicht nach '$name/source/$file' verschieben: $!";

  chdir $name;
  
  system ("tar -C unpacked-$version xv" . $unzip . "f source/$file");

  unlink "current";
  symlink "unpacked-$version", "current" 
        || die "Konnte 'current' Symlink nicht legen: $!";

}

(Die Veränderungen habe ich mal nicht getestet, da ich keine Original Sourcen zur Verfügung habe. Kann vielleicht jemand eine Liste von Randfällen posten?)

Viel besser wäre es natürlich, wenn man in den gezippten File hineinschauen könnte, um den verwendeten Verzeichnisnamen dort herauszuholen. Aber in der Praxis hat das obige Script für mich schon ganz gute Dienste geleistet.

Siehe tar(1). Speziell --list.


Siehe auch: InstallationVonSource
KategorieLinux KategorieVereinheitlichung
StartSeite | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 3. Juni 2002 16:49 (diff))
Suchbegriff: gesucht wird
im Titel
im Text