Hallo, habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde. Kennt hier jemand ein entsprechendes Proggi oder zum erstellen solcher Installationsroutinen??? cu Sascha
Sascha Roth wrote:
Hallo,
habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde. Kennt hier jemand ein entsprechendes Proggi oder zum erstellen solcher Installationsroutinen???
Autoyast?
Ralf Prengel schrieb:
Sascha Roth wrote:
Hallo,
habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde. Kennt hier jemand ein entsprechendes Proggi oder zum erstellen solcher Installationsroutinen???
Autoyast?
Nein, wie gesagt möchte nur zusätzliche Packete installieren und dies über eine praktische Menueführung.
Hi, On Wed, 23 Feb 2005, Sascha Roth wrote:
Ralf Prengel schrieb:
Sascha Roth wrote:
habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde.
Autoyast?
Nein, wie gesagt möchte nur zusätzliche Packete installieren und dies über eine praktische Menueführung.
[x] du möchtest das quoting ordentlich machen. Autostart Programm auf der CD wie "üblich" erstellen. RPM Packete nach Menüpunkten sortiert in Verzeichnisse ablegen. Beim Aufruf deines Menüs ein rpm -Uvh * im entsprechenden Verzeichnis absetzen. Greetings Daniel -- Ich denke, also bin ich dagegen! :evil:
Daniel Lord schrieb:
Hi,
On Wed, 23 Feb 2005, Sascha Roth wrote:
Ralf Prengel schrieb:
Sascha Roth wrote:
habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde.
Autoyast?
Nein, wie gesagt möchte nur zusätzliche Packete installieren und dies über eine praktische Menueführung.
[x] du möchtest das quoting ordentlich machen.
Autostart Programm auf der CD wie "üblich" erstellen. RPM Packete nach Menüpunkten sortiert in Verzeichnisse ablegen. Beim Aufruf deines Menüs ein rpm -Uvh * im entsprechenden Verzeichnis absetzen.
Greetings Daniel
Sorry Daniel, ich habe mich vielleicht etwas unglücklich ausgedrückt aber meinte eigentlich ein Proggi das mir bei der Erstellung einer solcher CD mit der entsprechenden Menueführung behilflich ist. Wenn Du mir dieses nennen könntest (Zitat ... wei "üblich" erstellen). Vielen Dank im vorraus Sascha
Hi, On Thu, 24 Feb 2005, Sascha Roth wrote:
ich habe mich vielleicht etwas unglücklich ausgedrückt aber meinte eigentlich ein Proggi das mir bei der Erstellung einer solcher CD mit der entsprechenden Menueführung behilflich ist. Wenn Du mir dieses nennen könntest (Zitat ... wei "üblich" erstellen).
Was du meinst ist keine Autostart CD (ist sowieso Unsinn) sondern eine bootbare CD. Dazu solltest du dich mal etwas mit dem zugehörigen Standard beschäftigen (el-torito) mkisofs cdrecord mkisofs ist nicht selbständig in der Lage die richtigen Einträge für eine Multiboot CD zu erstellen. Google im Netz oder benutze das angehängte C Programm um deine CD Multiboot fähig zu bekommen. Willst du definitiv ein Menü beim Boot haben und nicht nur eine numerische Auswahl, dann sollte dein erster Booteintrag auf einen Bootmanager zeigen, der dir dann nach Auswahl aus dem Menü das richtige OS bootet. Für diese Aufgabe ist viel Handarbeit und einige Kenntnisse der Hardware/Specs nötig. Ich habe allerdings auch mal in einer ct (glaub ich) ein Programm gesehen, das solche Multiboot CDs mit Menu sehr einfach erstellen läst. Vielleicht findest du das ja wieder und kannst es dann hier dazu stellen. Greetings Daniel PS: Bitte keine PM! PPS: Das Programm ist schon recht alt und selten im Einsatz. Verbesserungsvorschläge trotzdem erwünscht ;) <multiboot.c> /********************************************************************* * Einfache erzeugen einer Multiboot CD * * Als Argumente werden die Namen der Bootimages übergeben. * *********************************************************************/ /********************************************************************* * * * ---------+-------------------------------------+--------+-------- * * Version | Aenderung | Datum | Author * * ---------+-------------------------------------+--------+-------- * * 0.1 | Project multiboot begonnen |02.04.04| me * * | | | * * ---------+-------------------------------------+--------+-------- * * 0.2 | Fixed some Bugs |06.04.04| me * * | | | * * ---------+-------------------------------------+--------+-------- * * 0.3 | Support für Images != 1.44MB Floppy |08.04.04| me * * | | | * * ---------+-------------------------------------+--------+-------- * * 0.4 | Ausführlicheres usage(), zusätzliche|10.05.04| me * * | Fehlerabfragen für Imagetype und 8.3| | * * ---------+-------------------------------------+--------+-------- * * 0.5 | Datentyp int durch short/long |24.06.04| me * * | ersetzt. Source kommentiert. | | * * ---------+-------------------------------------+--------+-------- * *********************************************************************/ /********************************************************************* * Copyright (C) 2003 Daniel * * * * This is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published * * by the Free Software Foundation; either version 2 of the License, * * or (at your option) any later version. * * * * This software is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this software; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * * MA 02111-1307, USA. * *********************************************************************/ #include <stdio.h> #include <string.h> /* strlen() */ #include <stdlib.h> /* exit () */ #include <ctype.h> /* toupper() */ #include <stdbool.h> /* bool */ #define START 0x8800 /* Anfangsinfo */ #define MAXBUF 100 #define ARCH 0x00 /* x86 */ #define EMU 0x02 /* 1.44MB Floppy */ #define SEARCH 0xFFFF /* String */ // #define DEBUG 1 /* Definition Modulglobaler variablen. */ static char buffer[MAXBUF]; static char image[15]; static char search[SEARCH]; static long dim; /* String zum ueberpruefen ob es sich um ein ISO Image handelt */ const short magic[32] = { 0x00, 0x43, 0x44, 0x30, 0x30, 0x31, 0x01, 0x45, 0x4c, 0x20, 0x54, 0x4f, 0x52, 0x49, 0x54, 0x4f, 0x20, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x00, 0x00 }; /* Nuetzliche Informationen bei Fehleingabe oder zu wenig Kommandozeilenparametern. */ short usage (char *programm) { fprintf(stderr, " usage: %s image.iso floppy1.img type [floppy2.img type]... \"CD Titel\"\n", programm); fprintf(stderr, " zuvor muss ein ISO Image erstellt worden sein.\n\n"); fprintf(stderr, " mkisofs -b floppy.img -c boot.cat -o cdrom.iso disks/\n\n"); fprintf(stderr, " type: 0 == Keine Emmulation\n"); fprintf(stderr, " 1 == 1.2 Megabyte Diskette\n"); fprintf(stderr, " 2 == 1.44 Megabyte Diskette\n"); fprintf(stderr, " 3 == 2.88 Megabyte Diskette\n"); fprintf(stderr, " 4 == Festplatte\n"); return 0; } /* ISO Image oeffnen */ FILE * openiso (char *isoimage) { FILE *iso_l; if ((iso_l = fopen(isoimage, "r+")) == NULL) { fprintf(stderr, " Konnte die Datei %s nicht oeffnen\n", isoimage); exit(EXIT_FAILURE); } return iso_l; } /* Dateizeiger auf eine bestimmte Position setzen */ short gopos (FILE *iso, long position) { if (fseek (iso,position,SEEK_SET) != 0){ fprintf(stderr, " Konnte Position im ISO Image nicht setzen\n"); fclose(iso); exit(EXIT_FAILURE); } return 0; } /* Absolute Position des Dateizeigers bestimmen. */ long get_position (FILE *file) { return ftell(file); } /* Dateigroesse der ISO Datei ermitteln */ long get_dim (FILE *file) { if (fseek (file,0,SEEK_END) != 0){ fprintf(stderr, " Konnte das Dateiende nicht finden.\n"); fclose(file); exit(EXIT_FAILURE); } return ftell(file); } /* Pufferstring mit Informationen fuellen. */ void getinfo (FILE *iso, long bytes, char *buf) { long i; long offset; offset=get_position(iso); for (i=0; i<bytes; i++){ if (((buf[i]=getc(iso)) == EOF) && (dim < (offset+i))){ fprintf(stderr," Fehler beim Auslesen des ISO Images\n"); fprintf(stderr," Der Fehler trat bei Byte #%li auf\n",offset+i); exit(EXIT_FAILURE); } } buf[++i]='\0'; } /* Einfacher Test, um zu pruefen, ob wirklich ein bootbares CD Image vorliegt. */ void checkmagic (void) { short i; for (i=0; i<32; i++){ if (buffer[i] != magic[i]){ fprintf(stderr," kein bootbares ISO Images (MAGIC #%i)\n", i); exit(EXIT_FAILURE); } } } /* Namen der Floppy Images werden in Grossbuchstaben gespeichert. */ void nametoupper (void) { short i; for (i=0; i<strlen(buffer); i++){ buffer[i]=toupper(buffer[i]); } } /* Maximal vierstellige Adresse umdrehen. Das ganze ohne zusaetzlichen Puffer, sondern durch doppelte Verwendung von buffer[]. */ void turnaddress (void) { short i,x; bool flag; for (i=0; i<4; i++){ buffer[5+i]=buffer[i]; } x = 0; flag = 1; for (i=0; i<4; i++){ if ((buffer[8-i] != 0) && (flag != 0)){ buffer[x]=buffer[8-i]; flag = 0; x++; } } } /* unschoene Loesung um strings zu initialisieren. */ void init (void) { long i; for (i=0; i<MAXBUF; i++){ buffer[i] = '\0'; } for (i=0; i<15; i++){ image[i] = '\0'; } for (i=0; i<SEARCH; i++){ search[i] = '\0'; } } /* In buffer[] enthaltene Daten zurueck in die ISO Datei schreiben. */ void writedata (FILE *iso) { short i; for(i=0; i<32; i++){ if (putc(buffer[i], iso) == EOF){ fprintf(stderr, " Fehler beim Schreiben des Katalogkopfes\n"); fclose(iso); exit(EXIT_FAILURE); } fflush(iso); } } /* Kopfteil des Bootkataloges richtig formatieren */ void katalogheader (short eintraege, char* title, short length, FILE *iso) { short i; buffer[0]=0x91; buffer[1]=ARCH; buffer[2]=eintraege; buffer[3]=0x00; if (length >= 27){ fprintf(stderr, "Titel ist zu lang. Max 26 Zeichen\n"); fclose(iso); exit(EXIT_FAILURE); } for (i=0; i<length; i++){ buffer[4+i]=title[i]; } for(i=i+4; i<32; i++){ buffer[i]='\0'; } } /* img_search sucht die Position der uebergebenen Floppy Images in der ISO Datei. */ void img_search (FILE *iso, char *title, long begin) { long f, i, x, count; for (i=0; i<strlen(title); i++){ title[i]=toupper(title[i]); } f = 0; count = 0; gopos(iso, begin); getinfo(iso,SEARCH,search); for (i=0; i<SEARCH; i++){ if (search[i] == title[0]){ for (x=1; x<strlen(title); x++){ if (search[++i] == title[x]){ count++; } } if (count==(strlen(title)-1)){ #ifdef DEBUG printf("FOUND %s AT %i\n", title, begin+i-strlen(title)); #endif gopos(iso,begin+i-30-strlen(title)); getinfo(iso,5,image); f++; return; } else { count=0; x=0; } } } if (f == 0){ fprintf(stderr," Image %s ist nicht vorhanden.\n", title); #ifdef DEBUG fprintf(stderr," Start: %i Ende: %i\n",begin, begin+i); #endif fclose(iso); exit(EXIT_FAILURE); } } /* img_head erzeugt einen vollständigen Bootkatalog Eintrag. */ void img_head (char p1, char p2, char p3, char p4, char type) { short i; buffer[0]=0x88; buffer[1]=type; buffer[2]=0x00; buffer[3]=0x00; buffer[4]=0x00; buffer[5]=0x00; buffer[6]=0x01; buffer[7]=0x00; buffer[8]=p1; buffer[9]=p2; buffer[10]=p3; buffer[11]=p4; for(i=12; i<32; i++){ buffer[i]='\0'; } } /* In bootentry werden die einzelnen Floppy Images in der ISO Datei verlinkt, und die Einträge zurück in die ISO Datei geschrieben. */ void bootentry (FILE *iso, char *title, short type, long begin) { if (( strlen(title) > 12 ) && (title[strlen(title)-4] != '.')){ fprintf(stderr," Bootimage nicht im 8.3 Format (> 12 Zeichen)"); fclose(iso); exit(EXIT_FAILURE); } if ((type > 4) || (type < 0)){ fprintf(stderr," Falscher Emulationstyp %i", type); fclose(iso); exit(EXIT_FAILURE); } gopos(iso, START); img_search(iso, title, START); img_head(image[0], image[1], image[2], image[3], type); gopos(iso,begin); writedata(iso); } /* Mit str2int werden die ersten 4 Stellen im String buffer in einen Integerwert umgewandelt. */ long str2int (void) { short b; #ifdef DEBUG fprintf(stderr," str2int ist auf 4 Stellen begrenzt"); #endif b = buffer[0] + 256*buffer[1] + 65536*buffer[2] + 16777216*buffer[3]; #ifdef DEBUG fprintf(stderr," c0=%02X, c1=%02X, c2=%02X, c3=%02X, b=%i\n", buffer[0], buffer[1], buffer[2], buffer[3], b); #endif return b; } /* Hauptprogramm mit Test der Paramteranzahl und aufruf der Unterprogramme */ int main (int argc, char *argv[]) { long i, bootcat; FILE *iso; // Fuenf Argumente brauche ich mindestens. // Programmname, ISO Image, erstes Floppyimg, Floppy Typ, Titel if (argc < 5){ usage(argv[0]); return -1; } /* Datei öffnen und prüfen ob bootbare CD */ iso=openiso(argv[1]); dim=get_dim(iso); gopos(iso, START); getinfo(iso, 32, buffer); checkmagic(); /* Adresse des Bootkatalogs ermitteln */ gopos(iso, START+0x47); getinfo(iso, 4, buffer); bootcat=str2int()*0x800; /* Katalogheader schreiben */ katalogheader(argc-3, argv[argc-1], strlen(argv[argc-1]), iso); gopos(iso, bootcat+64); writedata(iso); /* Bootimage Eintraege schreiben */ for (i=0; i<(argc-3); i++){ bootentry(iso, argv[i+2], atoi(argv[i+3]), bootcat+96+(32*i)); } fclose(iso); return 0; } </multiboot.c> -- Wenn du hart arbeitest und bescheiden bist... ...wird dein ganzes Leben an dir vorbei ziehen.
Am Mittwoch, 23. Februar 2005 09:10 schrieb Sascha Roth:
Hallo,
habe eine reihe an RPM-Paketen die ich gerne auf eine CD brennen würde, dann per Autostart und Menuführung per Auswahl eine automatisch Installation dürch führen lassen würde. Kennt hier jemand ein entsprechendes Proggi oder zum erstellen solcher Installationsroutinen???
machs doch lieber / einfacher als yast installationsquelle: http://portal.suse.com/sdb/de/2004/02/yast_instsrc.html bye, MH
participants (4)
-
Daniel Lord
-
Mathias Homann
-
Ralf Prengel
-
Sascha Roth