Made use of new libisofs isohybrid capability
This commit is contained in:
parent
2db4dc66c6
commit
3f4c998b88
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "Oct 17, 2008"
|
.TH XORRISO 1 "Oct 20, 2008"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -176,9 +176,10 @@ suitable for xorriso.
|
|||||||
.br
|
.br
|
||||||
Blank is the state of newly purchased optical media.
|
Blank is the state of newly purchased optical media.
|
||||||
With used CD-RW and DVD-RW it can be achieved by action -blank "as_needed".
|
With used CD-RW and DVD-RW it can be achieved by action -blank "as_needed".
|
||||||
Overwriteable media are considered blank unless they contain an ISO image
|
Overwriteable media are considered blank if they are new or if they have
|
||||||
suitable for xorriso. Action -blank "as_needed" can be used to invalidate the
|
been marked as blank by xorriso.
|
||||||
image on overwriteable media, or to apply eventual mandatory formatting.
|
Action -blank "as_needed" can be used to do this marking on overwriteable
|
||||||
|
media, or to apply eventual mandatory formatting of new media.
|
||||||
.br
|
.br
|
||||||
\fBAppendable\fR media accept further sessions. Either they are MMC
|
\fBAppendable\fR media accept further sessions. Either they are MMC
|
||||||
multi-session media in appendable state, or they are overwriteable media
|
multi-session media in appendable state, or they are overwriteable media
|
||||||
@ -352,10 +353,16 @@ The content of the boot image files is not in the scope of El Torito.
|
|||||||
.br
|
.br
|
||||||
Most bootable Linux CDs are equipped with ISOLINUX boot images. xorriso is
|
Most bootable Linux CDs are equipped with ISOLINUX boot images. xorriso is
|
||||||
able to create or maintain an El Torito object which makes such an image
|
able to create or maintain an El Torito object which makes such an image
|
||||||
bootable. Emulation -as mkisofs supports the example options out of the
|
bootable. For details see option -boot_image.
|
||||||
ISOLINUX wiki.
|
Emulation -as mkisofs supports the example options out of the ISOLINUX wiki.
|
||||||
.br
|
.br
|
||||||
The support for other boot image types is sparse.
|
The support for other boot image types is sparse.
|
||||||
|
.br
|
||||||
|
An MBR is generated together with the El Torito boot record if the boot image
|
||||||
|
bears the isohybrid signature of ISOLINUX 3.72 or later. It will occupy the
|
||||||
|
first 512 bytes of the emerging ISO image and enable booting from media which
|
||||||
|
appear as hard disk rather than as CDROM. An MBR does not hamper CDROM booting.
|
||||||
|
The MBR of a follow-up session can get in effect only on overwriteable media.
|
||||||
.SS
|
.SS
|
||||||
.B Command processing:
|
.B Command processing:
|
||||||
.br
|
.br
|
||||||
@ -394,7 +401,7 @@ differs from the usual shell parsers. In xorriso, a quotation mark does not
|
|||||||
make a pattern symbol literal.
|
make a pattern symbol literal.
|
||||||
.PP
|
.PP
|
||||||
.B Quoted input
|
.B Quoted input
|
||||||
combines words from text pieces which are separated by whitespace.
|
converts whitespace separated text pieces into words.
|
||||||
The double quotation mark " and the single quotation mark ' can be used to
|
The double quotation mark " and the single quotation mark ' can be used to
|
||||||
enclose whitespace and make it part of words (e.g. of file names). Each mark
|
enclose whitespace and make it part of words (e.g. of file names). Each mark
|
||||||
type can enclose the marks of the other type. A trailing backslash \\ outside
|
type can enclose the marks of the other type. A trailing backslash \\ outside
|
||||||
@ -421,7 +428,7 @@ event which triggers the threshold of command -abort_on.
|
|||||||
.SS
|
.SS
|
||||||
.B Dialog, Readline, Result pager:
|
.B Dialog, Readline, Result pager:
|
||||||
.br
|
.br
|
||||||
Dialog mode prompts for an input line, parses it into words, and performs
|
Dialog mode prompts for a quoted input line, parses it into words, and performs
|
||||||
them as commands with their parameters. It provides assisting services
|
them as commands with their parameters. It provides assisting services
|
||||||
to make dialog more comfortable.
|
to make dialog more comfortable.
|
||||||
.PP
|
.PP
|
||||||
@ -1441,10 +1448,13 @@ boot image which is present on the input media.
|
|||||||
Most safe is the default: "any" "discard".
|
Most safe is the default: "any" "discard".
|
||||||
.br
|
.br
|
||||||
|
|
||||||
On all media types it is possible to activate a set of ISOLINUX files
|
A bootspec is a word of the form name=value and is used describe the
|
||||||
for booting within the first session. In further sessions an existing boot
|
activation of a ISOLINUX boot image by an El Torito record and eventually
|
||||||
image can get replaced by a new one, but depending on the media type
|
a MBR. The names "dir" and "bin_path" lead to boot image activation.
|
||||||
this may have few effect at boot time. See above.
|
.br
|
||||||
|
On all media types this is possible within the first session. In further
|
||||||
|
sessions an existing boot image can get replaced by a new one, but depending
|
||||||
|
on the media type this may have few effect at boot time. See above.
|
||||||
.br
|
.br
|
||||||
The ISOLINUX files have to be added to the ISO image by normal means
|
The ISOLINUX files have to be added to the ISO image by normal means
|
||||||
(image loading, -map, -add, ...) and should reside either in ISO image
|
(image loading, -map, -add, ...) and should reside either in ISO image
|
||||||
@ -1470,6 +1480,11 @@ cat_path at -commit time.
|
|||||||
It is subject to normal -overwrite and -reassure processing if there is already
|
It is subject to normal -overwrite and -reassure processing if there is already
|
||||||
a file with the same name.
|
a file with the same name.
|
||||||
.br
|
.br
|
||||||
|
Bootspec "isohybrid=off" disables MBR generation, "isohybrid=on" prevents the
|
||||||
|
write session if not the isohybrid signature is found in the bin_path file.
|
||||||
|
Default is "isohybrid=auto" which silently omits the MBR if the signature is
|
||||||
|
missing.
|
||||||
|
.br
|
||||||
The setting of -boot_image will change to "isolinux" "patch" after successful
|
The setting of -boot_image will change to "isolinux" "patch" after successful
|
||||||
writing of a session with -boot_image "isolinux" bootspec.
|
writing of a session with -boot_image "isolinux" bootspec.
|
||||||
.TP
|
.TP
|
||||||
|
@ -3635,6 +3635,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
|||||||
m->boot_image_emul= 0;
|
m->boot_image_emul= 0;
|
||||||
m->boot_image_cat_path[0]= 0;
|
m->boot_image_cat_path[0]= 0;
|
||||||
m->boot_image_load_size= 4 * 512; /* hearsay out of libisofs/demo/iso.c */
|
m->boot_image_load_size= 4 * 512; /* hearsay out of libisofs/demo/iso.c */
|
||||||
|
m->boot_image_isohybrid= 1;
|
||||||
m->allow_graft_points= 0;
|
m->allow_graft_points= 0;
|
||||||
m->allow_restore= 0;
|
m->allow_restore= 0;
|
||||||
m->do_concat_split= 1;
|
m->do_concat_split= 1;
|
||||||
@ -5504,6 +5505,14 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
if(!(is_default && no_defaults))
|
if(!(is_default && no_defaults))
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
}
|
}
|
||||||
|
if(strcmp(form, "isolinux") == 0) {
|
||||||
|
static char modes[4][6]= {"off", "auto", "on", "force"};
|
||||||
|
is_default= (xorriso->boot_image_isohybrid == 1);
|
||||||
|
sprintf(line,"-boot_image isolinux isohybrid=%s\n",
|
||||||
|
modes[xorriso->boot_image_isohybrid & 3]);
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
}
|
||||||
|
|
||||||
sprintf(line,"-cd %s\n",
|
sprintf(line,"-cd %s\n",
|
||||||
(xorriso->wdi[0] ? Text_shellsafe(xorriso->wdi,sfe,0) : "'/'"));
|
(xorriso->wdi[0] ? Text_shellsafe(xorriso->wdi,sfe,0) : "'/'"));
|
||||||
@ -10509,7 +10518,7 @@ int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
|
|||||||
xorriso->boot_image_cat_path, 2);
|
xorriso->boot_image_cat_path, 2);
|
||||||
if(ret <= 0)
|
if(ret <= 0)
|
||||||
return(ret);
|
return(ret);
|
||||||
} else if(strncmp(treatpt, "load_size=", 10) == 0) {
|
} else if(strncmp(treatpt, "load_size=", 10) == 0) {
|
||||||
num= Scanf_io_size(treatpt + 10, 0);
|
num= Scanf_io_size(treatpt + 10, 0);
|
||||||
if(num < 512) {
|
if(num < 512) {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
@ -10519,6 +10528,26 @@ int Xorriso_option_boot_image(struct XorrisO *xorriso, char *form,
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
xorriso->boot_image_load_size= num;
|
xorriso->boot_image_load_size= num;
|
||||||
|
} else if(strncmp(treatpt, "isohybrid=", 10) == 0) {
|
||||||
|
if(strcmp(treatpt + 10, "off") == 0)
|
||||||
|
xorriso->boot_image_isohybrid= 0;
|
||||||
|
else if(strcmp(treatpt + 10, "auto") == 0)
|
||||||
|
xorriso->boot_image_isohybrid= 1;
|
||||||
|
else if(strcmp(treatpt + 10, "off") == 0)
|
||||||
|
xorriso->boot_image_isohybrid= 2;
|
||||||
|
else if(strcmp(treatpt + 10, "force") == 0)
|
||||||
|
xorriso->boot_image_isohybrid= 3;
|
||||||
|
else {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Unrecognized keyword with -boot_image %s %s",
|
||||||
|
form, treatment);
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Allowed with isohybrid= are: off , auto , on , force");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "HINT", 0);
|
||||||
|
return(0);
|
||||||
|
|
||||||
|
}
|
||||||
} else
|
} else
|
||||||
was_ok= 0;
|
was_ok= 0;
|
||||||
} else
|
} else
|
||||||
@ -13847,9 +13876,11 @@ int Xorriso_option_publisher(struct XorrisO *xorriso, char *name, int flag)
|
|||||||
/* Option -pwd alias -pwdi */
|
/* Option -pwd alias -pwdi */
|
||||||
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag)
|
int Xorriso_option_pwdi(struct XorrisO *xorriso, int flag)
|
||||||
{
|
{
|
||||||
|
char sfe[5 * SfileadrL];
|
||||||
|
|
||||||
sprintf(xorriso->info_text,"current working directory in ISO image:\n");
|
sprintf(xorriso->info_text,"current working directory in ISO image:\n");
|
||||||
Xorriso_info(xorriso,0);
|
Xorriso_info(xorriso,0);
|
||||||
sprintf(xorriso->result_line,"%s/\n",xorriso->wdi);
|
sprintf(xorriso->result_line,"%s/\n", Text_shellsafe(xorriso->wdi, sfe, 0));
|
||||||
Xorriso_result(xorriso,0);
|
Xorriso_result(xorriso,0);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
|
@ -194,6 +194,7 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
*/
|
*/
|
||||||
char boot_image_cat_path[SfileadrL];
|
char boot_image_cat_path[SfileadrL];
|
||||||
off_t boot_image_load_size;
|
off_t boot_image_load_size;
|
||||||
|
int boot_image_isohybrid; /* 0=off , 1=auto , 2=on , 3=force */
|
||||||
|
|
||||||
|
|
||||||
/* XORRISO options */
|
/* XORRISO options */
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.10.19.182512"
|
#define Xorriso_timestamP "2008.10.20.180747"
|
||||||
|
@ -846,6 +846,60 @@ ex:;
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int Xorriso_set_isolinux_options(struct XorrisO *xorriso,
|
||||||
|
IsoImage *image, int flag)
|
||||||
|
{
|
||||||
|
int make_isohybrid_mbr= 0, ret;
|
||||||
|
unsigned char buf[68];
|
||||||
|
ElToritoBootImage *bootimg;
|
||||||
|
IsoFile *bootimg_node;
|
||||||
|
void *data_stream= NULL;
|
||||||
|
|
||||||
|
ret= iso_image_get_boot_image(image, &bootimg, &bootimg_node, NULL);
|
||||||
|
if(ret != 1) {
|
||||||
|
sprintf(xorriso->info_text, "Programming error: No boot image available in Xorriso_set_isolinux_options()");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xorriso->boot_image_isohybrid == 0) {
|
||||||
|
ret= el_torito_set_isolinux_options(bootimg, 1, 0);
|
||||||
|
return(ret == 1);
|
||||||
|
}
|
||||||
|
if(xorriso->boot_image_isohybrid == 3) {
|
||||||
|
make_isohybrid_mbr= 1;
|
||||||
|
} else {
|
||||||
|
ret= Xorriso_iso_file_open(xorriso, "", (void *) bootimg_node,
|
||||||
|
&data_stream, 1);
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
ret= Xorriso_iso_file_read(xorriso, data_stream, (char *) buf, 68, 0);
|
||||||
|
Xorriso_iso_file_close(xorriso, &data_stream, 0);
|
||||||
|
if(ret<=0)
|
||||||
|
return(ret);
|
||||||
|
if(buf[64] == 0xfb && buf[65] == 0xc0 && buf[66] == 0x78 && buf[67] == 0x70)
|
||||||
|
make_isohybrid_mbr= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(xorriso->boot_image_isohybrid == 2 && !make_isohybrid_mbr) {
|
||||||
|
sprintf(xorriso->info_text,
|
||||||
|
"Isohybrid signature is demanded but not found in boot image file.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
if(make_isohybrid_mbr) {
|
||||||
|
sprintf(xorriso->info_text, "Will write isohybrid MBR.");
|
||||||
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret= el_torito_set_isolinux_options(bootimg, 1 | (make_isohybrid_mbr << 1),0);
|
||||||
|
return(ret == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define Xorriso_with_make_isohybrid_mbR 1
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= do not write but only prepare and return size in sectors
|
/* @param flag bit0= do not write but only prepare and return size in sectors
|
||||||
*/
|
*/
|
||||||
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
||||||
@ -928,7 +982,7 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
}
|
}
|
||||||
relax= isoburn_igopt_allow_deep_paths;
|
relax= isoburn_igopt_allow_deep_paths;
|
||||||
|
|
||||||
/* Adjust or discard boot image */
|
/* Activate, adjust or discard boot image */
|
||||||
image= isoburn_get_attached_image(source_drive);
|
image= isoburn_get_attached_image(source_drive);
|
||||||
/* >>> ??? move down to libisoburn ? */
|
/* >>> ??? move down to libisoburn ? */
|
||||||
if(image!=NULL && !(flag&1)) {
|
if(image!=NULL && !(flag&1)) {
|
||||||
@ -951,7 +1005,6 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
cpt++;
|
cpt++;
|
||||||
strcpy(cpt, "boot.cat");
|
strcpy(cpt, "boot.cat");
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(xorriso->info_text, "Activating alleged isolinux boot image %s",
|
sprintf(xorriso->info_text, "Activating alleged isolinux boot image %s",
|
||||||
Text_shellsafe(xorriso->boot_image_bin_path, sfe, 0));
|
Text_shellsafe(xorriso->boot_image_bin_path, sfe, 0));
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
@ -1003,13 +1056,34 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag)
|
|||||||
{ret= 0; goto ex;}
|
{ret= 0; goto ex;}
|
||||||
}
|
}
|
||||||
el_torito_set_load_size(bootimg, xorriso->boot_image_load_size / 512);
|
el_torito_set_load_size(bootimg, xorriso->boot_image_load_size / 512);
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_make_isohybrid_mbR
|
||||||
|
|
||||||
|
ret= Xorriso_set_isolinux_options(xorriso, image, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
|
||||||
|
#else
|
||||||
el_torito_patch_isolinux_image(bootimg);
|
el_torito_patch_isolinux_image(bootimg);
|
||||||
|
#endif
|
||||||
|
|
||||||
} else if(xorriso->patch_isolinux_image) {
|
} else if(xorriso->patch_isolinux_image) {
|
||||||
if(ret==1) {
|
if(ret==1) {
|
||||||
relax|= isoburn_igopt_allow_full_ascii;
|
relax|= isoburn_igopt_allow_full_ascii;
|
||||||
sprintf(xorriso->info_text, "Patching alleged isolinux boot image");
|
sprintf(xorriso->info_text, "Patching alleged isolinux boot image");
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Xorriso_with_make_isohybrid_mbR
|
||||||
|
|
||||||
|
ret= Xorriso_set_isolinux_options(xorriso, image, 0);
|
||||||
|
if(ret <= 0)
|
||||||
|
goto ex;
|
||||||
|
|
||||||
|
#else
|
||||||
el_torito_patch_isolinux_image(bootimg);
|
el_torito_patch_isolinux_image(bootimg);
|
||||||
|
#endif
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
sprintf(xorriso->info_text,
|
sprintf(xorriso->info_text,
|
||||||
"Could not find any boot image for -boot_image isolinux patch");
|
"Could not find any boot image for -boot_image isolinux patch");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user