Workshop CD/DVD-Archiv (Schritt 1)

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Bin vor ein paar Wochen mal im Keller auf eine Kiste mit alten Zeitschriften-CDs gestoßen und (als DS-Messi), dachte ich mir, bevor du sie entsorgst, mach erst mal eine Kopie. :D

Also auf dem PC mit ImgBurn kann man schnell und einfach iso-Dateien von den CDs/DVDs erzeugen. Es gibt aber viele andere Programme, die das auch können.

Auf der DS508 habe ich einen gemeinsamen Ordner 'cds' (/volume1/cds) angelegt und dort - weil es ja ein ganzer Karton ist - noch mal das Alphabet als Unterverzeichnisse. Meine erste 'PCProfessional_2001-01.iso'-Datei wird also nach /volume1/cds/P/PCProfessional_2001-01.iso kopiert.

Wenn ich diese Freigabe in Vista mounte, dann nicht als Laufwerk, sondern als 'Benutzerdefinierte Netzwerkressource'. Siehe Bilder.

.
 

Anhänge

  • Step1.jpg
    Step1.jpg
    53,9 KB · Aufrufe: 168
  • Step2.jpg
    Step2.jpg
    28 KB · Aufrufe: 159
  • Step3.jpg
    Step3.jpg
    30,2 KB · Aufrufe: 160
  • Step4.jpg
    Step4.jpg
    28,3 KB · Aufrufe: 161
  • Step5.jpg
    Step5.jpg
    45,9 KB · Aufrufe: 162

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 2)

Wann immer ich will, kann ich nun die CD bzw. DVD-iso-Dateien in Windows mounten. Dafür gibt es eine Reihe kleiner Programme. Ich verwende hierfür VirtualCloneDrive von Elaborate Byte. Sobald man das installiert hat, kann man sich einfach auf eine iso-Datei stellen und mit der rechten Maustaste im Kontextmenü auswählen, dass man sie gerne mit 'Mount File with VirtualCloneDrive' die Datei mounten möchte.

Sobald man das gemacht hat, verhält sich (fast immer) die iso-Datei wie eine neu eingelegte CD/DVD.

Wenn man möchte, könnte man auch wieder eine CD/DVD aus der iso-Datei brennen. Damit wäre auch in hartnäckigen Fälle eine Rekonstruktion möglich.

Man sieht schon, nach dieser Prozedur kann man getrost 'bye bye' zur Orginal-CD/DVD sagen. :D

Damit wären wir schon mit dem ersten Teil des Workshops fertig. Statt der Kiste im Keller haben wir eine virtuelle Kiste auf der DS erzeugt. Und die Frage stellt sich: Werden wir jemals wieder was mit diesem Dateien machen? Wenn man ehrlicherweise an dieser Stelle sagt, dass man sich damit nie wieder mit diesen iso-Dateien beschäftigen wird, dann hätte man sich die ganze Prozedur auch sparen können. Wenn man aber sagt, dass das was mit dem Aufwand zu tun hat, den man betreiben muss, um sich gezielt oder auch weniger gezielt dem Inhalt zu nähern und man eigentlich sowas wie ein Katalogisierungs-Programm für diese CDs/DVDs auf der DS bräuchte ... der darf mit dem dritten Teil weitermachen.

.
 

Anhänge

  • Step6.jpg
    Step6.jpg
    49,5 KB · Aufrufe: 160
  • Step7.jpg
    Step7.jpg
    43,9 KB · Aufrufe: 161

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 3)

Wie kommt man an den Inhalt der iso-Dateien auf der DS dran?

Man kann sie via /dev/loop mounten ... hierzu hatte ich schon einmal einen Thread verfasst. Nun ist leider für meine DS508 der isofs.ko-Kernel-Treiber nicht in der richtigen Version vorhanden. Also müssen wir auf die IPKG-Pakete libcdio oder cdrtools ausweichen. Diese beiden Pakete haben jeweils ein Tool an Bord, dass uns dabei helfen kann, die iso-Dateien auch zu lesen, ohne dass sie gemountet werden müssen (nicht alle CD/DVD-Varianten gehen, aber für die meisten Zeitschriften-CDs wird es funzen).

Ich habe mit für die cdrtools entschieden, weil das Tool isoinfo nicht nur eine Liste der Verzeichnisse liefert, sondern es auch erlaubt, gezielt eine Datei zu entladen ;)

Zunächst mal ein wenig Show auf der Kommandozeile:
Rich (BBCode):
Syno508> cd /volume1/cds/P
Syno508> isoinfo -h
isoinfo: Usage: isoinfo [options] -i filename
Options:
        -help,-h        Print this help
        -version        Print version info and exit
        -debug          Print additional debug info
        -d              Print information from the primary volume descriptor
        -f              Generate output similar to 'find .  -print'
        -J              Print information from Joliet extensions
        -j charset      Use charset to display Joliet file names
        -l              Generate output similar to 'ls -lR'
        -p              Print Path Table
        -R              Print information from Rock Ridge extensions
        -s              Print file size infos in multiples of sector size (2048 bytes).
        -N sector       Sector number where ISO image should start on CD
        -T sector       Sector number where actual session starts on CD
        -i filename     Filename to read ISO-9660 image from
        dev=target      SCSI target to use as CD/DVD-Recorder
        -x pathname     Extract specified file to stdout
Syno508> isoinfo -d -i PCProfessional_2001-01.iso
CD-ROM is in ISO 9660 format
System id:
Volume id: PCP_TREIBER01
Volume set id:
Publisher id:
Data preparer id:
Application id: NERO - BURNING ROM
Copyright File id:
Abstract File id:
Bibliographic File id:
Volume set size is: 1
Volume set sequence number is: 1
Logical block size is: 2048
Volume size is: 330765
Joliet with UCS level 3 found
NO Rock Ridge present
Syno508> isoinfo -f -i PCProfessional_2001-01.iso | head
/AUTORUN.INF;1
/BASICS
/BROWSER
/CDSTART.EXE;1
/FRAMEALL.HTM;1
/FRAMESET.HTM;1
/HTML
/HTMLVIEW
/INDEX.HTM;1
/PCPRO.ICO;1
Syno508> isoinfo -fJ -i PCProfessional_2001-01.iso | head
/HTMLView
/autorun.inf;1
/basics
/browser
/cdstart.exe;1
/frameall.htm;1
/frameset.htm;1
/html
/index.htm;1
/pcpro.ico;1
Syno508> isoinfo -l -i PCProfessional_2001-01.iso | head

Directory listing of /
d---------   0    0    0            2048      0 1900 [     19 02]  .
d---------   0    0    0            2048      0 1900 [     19 02]  ..
----------   0    0    0              43 Nov  6 2000 [ 330342 00]  AUTORUN.INF;1
d---------   0    0    0            2048 Dec 10 2000 [     20 02]  BASICS
d---------   0    0    0            2048 Dec 11 2000 [     25 02]  BROWSER
----------   0    0    0          532524 Oct 10 2000 [ 330343 00]  CDSTART.EXE;1
----------   0    0    0            1005 Dec  9 2000 [ 330604 00]  FRAMEALL.HTM;1
----------   0    0    0             998 Dec  9 2000 [ 330605 00]  FRAMESET.HTM;1
Syno508> isoinfo -lJ -i PCProfessional_2001-01.iso | head

Directory listing of /
d---------   0    0    0            2048      0 1900 [    158 02]  .
d---------   0    0    0            2048      0 1900 [    158 02]  ..
d---------   0    0    0            2048 Dec 10 2000 [    159 02]  HTMLView
----------   0    0    0              43 Nov  6 2000 [ 330342 00]  autorun.inf;1
d---------   0    0    0            2048 Dec 10 2000 [    163 02]  basics
d---------   0    0    0            2048 Dec 11 2000 [    168 02]  browser
----------   0    0    0          532524 Oct 10 2000 [ 330343 00]  cdstart.exe;1
----------   0    0    0            1005 Dec  9 2000 [ 330604 00]  frameall.htm;1
Wenn man das so mal betrachtet, dann liefert für den Joliet Typ 3 die letzte Aufrufzeile das beste Ergebnis:
Rich (BBCode):
Syno508> isoinfo -lJ -i PCProfessional_2001-01.iso | head

Directory listing of /
d---------   0    0    0            2048      0 1900 [    158 02]  .
d---------   0    0    0            2048      0 1900 [    158 02]  ..
d---------   0    0    0            2048 Dec 10 2000 [    159 02]  HTMLView
----------   0    0    0              43 Nov  6 2000 [ 330342 00]  autorun.inf;1
d---------   0    0    0            2048 Dec 10 2000 [    163 02]  basics
d---------   0    0    0            2048 Dec 11 2000 [    168 02]  browser
----------   0    0    0          532524 Oct 10 2000 [ 330343 00]  cdstart.exe;1
----------   0    0    0            1005 Dec  9 2000 [ 330604 00]  frameall.htm;1

Man bekommt eine Verzeichnis-strukturierte Liste mit den Dateien. Man kann Pfad, Dateigröße, Datum, Dateinamen (plus ggf. ein Positionierungs-Flag ';1' welches später für den Zugriff auf die Dateien wichtig ist) ermitteln.

Wenn wir also die iso-Images mit dem isoinfo-Tool lesen, dann können wir diese Informationen in eine MySQL-Datenbank zusammen mit dem iso-Dateinamen ablegen und für eine Web-Recherche aufbereiten. Damit hätten wir schon mal die wichtigsten Informationen für einen CD-/DVD-Katalog.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 4)

Wie sieht also der erste Gedanke an eine Tabelle für eine MySQL-Datenbank aus:

Namen der iso-Datei (vielleicht sogar der Pfad)
Namen der Datei in der iso-Datei
Namen des Pfades zur Datei in der iso-Datei
Dateigröße
Dateidatum
Kommentarfeld (für zukünftige Selektionsmerkmale)

Ich hab die Datenbank 'files' genannt (Kollation: latin1_general_cs). Die Tabelle sieht wie folgt aus:

Rich (BBCode):
CREATE TABLE files (
  filename varchar(255) collate latin1_general_cs NOT NULL,
  path varchar(2048) collate latin1_general_cs NOT NULL,
  `source` varchar(128) collate latin1_general_cs NOT NULL,
  filesize bigint(20) NOT NULL,
  filedate date NOT NULL,
  `comment` varchar(32) collate latin1_general_cs default NULL,
  PRIMARY KEY  (`source`,path(512)),
  KEY filename (filename)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs;

[Jetzt weiß auch jeder, warum ich so genervt hab mit meinen Posts zu den Längen der Dateinamen und Pfade auf einer CD ;)]

Der SQL-Aufruf
Rich (BBCode):
SELECT * FROM files WHERE source LIKE '%PCProfessional_2001-01%' AND filename LIKE '%autorun%'

liefert nun das folgende in phpmyAdmin zurück:
.
 

Anhänge

  • Step8.jpg
    Step8.jpg
    10,6 KB · Aufrufe: 157

Pusche

Benutzer
Mitglied seit
05. Mrz 2009
Beiträge
305
Punkte für Reaktionen
0
Punkte
0
vielen Dank für diese Anleitung. Genau so etwas kann ich gut gebrauchen. Der Hinweis auf das VirtualCloneDrive ist sehr hilfreich!

Und die Frage stellt sich: Werden wir jemals wieder was mit diesem Dateien machen?

.

Vorläufig braucht man das vielleicht nicht mehr aber ich habe die Erfahrung gemacht, dass Daten eine gewisse "Reife" brauchen. In paar Jahren holt man sich so Zeugs vielleicht dann aus "nostalgischen Gründen" wiedermal raus. Ist ja mit Fotos genau das selbe:
Da macht man Bilder, schaut sie 5 Jahre oder länger nicht mehr an und plötzlich kommt der Moment, wo man den alten Mist wieder rauskramt :D
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 5)

Wie lesen wir nun die CDs/DVDs ein. Mit einem PHP-Skript. Das Skript liegt bei mir unter /volume1/web und heißt filer.php. Der erste Teil für das Einlesen sieht so aus:

PHP:
<?php
$conn = @mysql_connect("localhost","root");
mysql_select_db("files",$conn);
if (isset($_REQUEST['path'])) {
  $m['Jan']='01';$m['Feb']='02';$m['Mar']='03';$m['Apr']='01';$m['May']='05';$m['Jun']='06';
  $m['Jul']='07';$m['Aug']='08';$m['Sep']='09';$m['Oct']='10';$m['Nov']='11';$m['Dec']='12';
  ob_implicit_flush();
  print $_REQUEST['path'].' > ';
  $_REQUEST['path']='../cds/'.$_REQUEST['path'];
  print $_REQUEST['path'].'<br>';
  exec("ls ".$_REQUEST['path'],$tpath);
  foreach($tpath as $path) {
    print $path.'<br>';
    mysql_query("delete from `files` where source='".$path."'");
    exec("/opt/bin/isoinfo -d -i '".$path."' | grep 'Joliet'",$typ3);print ' Type: '.$typ3[0].', ';
    if ($typ3[0]=='Joliet with UCS level 3 found') $J='J'; else {$J='';}
    exec("/opt/bin/isoinfo -l".$J." -i '".$path."' | sed '/^$/d' | grep -v '^d' | sed 's/  */ /g'",$lines); 
    print 'records found: '.count($lines).' ';
    $j=0;
    foreach($lines as $lin) {
      if ($lin[0]=='D') {
        $line=explode(" ",$lin);
        $dir=$line[3]; 
        for($z=4;$z<count($line);$z++) $dir.=' '.$line[$z];
        }
      else {
        preg_match("/^-{10}\s+0\s+0\s+0\s+(\d+)\s(...) +(\d+) (\d{4}) \[.+\]\s+(.+)$/U",$lin,$parts);      
        if ($lin[0] == '-') {
         $fields=preg_replace('/^(.*)(;.*)?$/U','\\1',$parts[5])."','";
         $fields.=$dir.$parts[5]."','";
         $fields.=$path."','";
         $fields.=$parts[1]."','";
         $fields.=$parts[4].'-'.$m[$parts[2]].'-'.($parts[3]<10?'0'.$parts[3]:$parts[3]);
         //print("replace `files` (`filename`,`path`,`source`,`filesize`,`filedate`,`comment`) values ('".$fields."','')").'<br>';
         mysql_query("replace `files` (`filename`,`path`,`source`,`filesize`,`filedate`,`comment`) values ('".$fields."','')");
         $j++; 
         }
        }   
      }
    print ' ['.$j.' records in]<br>';
    unset($lines);unset($typ3);     
    }
  print 'finish job';
  ob_start();
}?>

Das PHP-Skript wird aufgerufen mit dem (Teil-)Pfad zur iso-File:

Rich (BBCode):
http://Syno580/filer.php?path=P/PCProfessional_2001-01.iso

Da ein ls die path-Variable abfängt, geht auch:

Rich (BBCode):
http://Syno580/filer.php?path=P/*

Das Skript kann auch mehrfach die gleiche iso-File scannen; es wird immer vorher alles wieder aus der Datenbank entfernt. Ist also ein wenig robust. Damit man auch bei größeren Mengen an zu scannenden Dateien, soetwas wie einen Fortschritt visualisiert bekommt, hab ich den Ausgabe-Puffer deaktiviert mit ob_implicit_flush(). Ansonsten wird noch zwischen dem Joliet-3-Type und normalen CDs/DVDs unterschieden und das entsprechende Flag gesetzt. Das Ausgabe-Protokoll sieht nicht wirklich schön aus. Aber das muss es ja auch nicht unbedingt.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 6)

Nun brauchen wir noch ein hübsches Anzeige-Programm mit dem wir recherchieren können. Also eine Tabellensicht auf die Dateien. Es sollte so einfach wie möglich sein (also pur HTML, CSS, PHP sein) und trotzdem so komfortabel, so dass man damit auch wirklich arbeiten kann.

Einige Randbedingungen und Erläuterungen:

1] die Anzahl der selektierten Zeilen muss per limit-Option begrenzbar sein, da sonst schnell mal 100000 Zeilen angezeigt werden wollen und das macht dann keinen Spass mehr. Anzahl-Zeilen-Limit ist also hartcodiert auf 5000

2] Selektionsbegriffe werden mit voran- und nachgestelltem Joker verwendet. Datum und Dateigröße werden mit "größergleich" verwendet. Datum-Format ist: YYYY-MM-YY; da das Datum textuell eingegeben wird und dann von MySQL konvertiert wird, kann man z. B. auch 2001 eingeben, und bekommt dann alles, was jünger als oder gleich das Jahr 2001 (genauer gesagt der 2001-01-01) ist ...

3] Sortierfelder werden in folgendem Format erwartet: "# asc" oder "# desc", wobei # die Sortierfeldstelle ist. Beispiel: unter 'Filename' steht "2 desc" und unter 'Datum' steht "1 asc" ... dann wird zuerst (1) nach dem Datum aufsteigend (asc) und innerhalb des Datums (2) nach Filename absteigend (desc) sortiert.

4] Source ist ein Pull-Down-Select-Feld

5] Comment ist jetzt auch dabei (Testphase beendet) - Kommentare erfassen, Einfach-Klick in das jeweilige Comment-Feld und schon erscheint ein Pop-Up-Fenster ...

6] Doppelklicken in die Auswahl- oder Sortierfelder sowie in das Limit-Feld aktiviert die Suche

7] Doppelklicken in eine Zeile ruft die Datei in einem weiteren PHP-Skript auf (filer_show.php). Hier wird die Datei in ein temporäres Verzeichnis aus der iso-Datei entladen. Diese temporäre Verzeichnis ist bei mir /volume1/web/files und muss zur Zeit vorher angelegt werden. Da manchmal die Dateien innerhalb der iso-File das Speicherflag ';1' im Namen tragen, es dafür aber wohl keine sauberer Regel gibt, habe ich den Aufruf (Doppelklick) mit einem Schalter versehen. Jedesmal wenn geklickt wird, wird entweder mit angehängtem ';1' oder ohne ';1' das Anzeige-Skript aufgerufen. Also wenn der Inhalt nicht angezeigt oder der Download nicht aktiviert wird, einfach Popup-Fenster schließen und nochmal 'Doppelklicken' ;)

8] zu große Feld-Eintragungen werden nicht komplett angezeigt; fährt man allerdings mit der Maus über das betreffende Feld, dann wird der Inhalt komplett als Hilfstext-Popup angezeigt (title-Attribut im HTML-Tag)

9] Ich habe nur den Firefox 3.0 gestest :D

10] Eventuell muss man auch noch was an den Spalten-Breiten tun ...

Die 3 angehängten PDF-Files einfach umbenennen.

Viel Spaß

Itari

PS. ich hab das angehängte Bildchen ein wenig schrumpfen lassen ... damit es nicht ganz so einnehmend ist :D

PPS. ich habe das Comment-Modul (files_comment.php) mit angehangen und den Aufruf in files.php eingebaut
.
 

Anhänge

  • filer_show.php.pdf
    441 Bytes · Aufrufe: 5
  • filer.php.pdf
    8,4 KB · Aufrufe: 2
  • filer_comment.php.pdf
    937 Bytes · Aufrufe: 2
  • Step9.jpg
    Step9.jpg
    58,6 KB · Aufrufe: 143
Zuletzt bearbeitet:

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Workshop CD/DVD-Archiv (Schritt 7)

Ich hab mal eine zip- bzw. exe-Archiv-Extraktionserweiterung fürs Einlesen mittels des Tools /usr/syno/bin/7z geschrieben. Wer mag kann sich nun seine Datenbank auch mit den Inhalten von gepackten Archiven vollsubbeln. Im Moment werden nur Dateien mit der Endung .zip und .exe untersucht.

Ich die andere Version jetzt nicht weggenommen, weil ja für manchen die zip-Archiv-Geschichte nicht notwendig ist.

Itari
 

Anhänge

  • filer.php.pdf
    9,7 KB · Aufrufe: 8
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat