From b16dfb5cadd0e0540389a309b3d0446d9a6b4762 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 18 Oct 2010 21:22:23 +0000 Subject: [PATCH] New option -append_partition, -as mkisofs -append_partition --- libisoburn/libisoburn.ver | 1 + xorriso/base_obj.c | 4 + xorriso/emulators.c | 17 ++++ xorriso/iso_img.c | 35 +++++++- xorriso/opts_a_c.c | 49 +++++++++++ xorriso/opts_d_h.c | 3 + xorriso/parse_exec.c | 13 +++ xorriso/write_run.c | 11 ++- xorriso/xorriso.1 | 47 ++++++++++- xorriso/xorriso.h | 4 + xorriso/xorriso.info | 168 +++++++++++++++++++++++--------------- xorriso/xorriso.texi | 45 +++++++++- xorriso/xorriso_private.h | 4 + 13 files changed, 322 insertions(+), 79 deletions(-) diff --git a/libisoburn/libisoburn.ver b/libisoburn/libisoburn.ver index 638d8e63..e528ba94 100644 --- a/libisoburn/libisoburn.ver +++ b/libisoburn/libisoburn.ver @@ -114,6 +114,7 @@ Xorriso_option_acl; Xorriso_option_add; Xorriso_option_add_plainly; Xorriso_option_alter_date; +Xorriso_option_append_partition; Xorriso_option_application_id; Xorriso_option_as; Xorriso_option_assert_volid; diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index c530fd12..9a0c4239 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -225,6 +225,10 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->partition_offset= 0; m->partition_secs_per_head= 0; m->partition_heads_per_cyl= 0; + for(i= 0; i < 4; i++) { + m->appended_partitions[i][0]= 0; + m->appended_part_types[i]= 0; + } m->vol_creation_time= 0; m->vol_modification_time= 0; m->vol_expiration_time= 0; diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 206f98fb..a4484b0f 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -570,6 +570,10 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv, "--scdbackup_tag", "--sort-weight", "" }; + static char arg3_options[][41]= { + "-append_partition", + "" + }; static char final_options[][41]= { "-find", "" @@ -591,6 +595,10 @@ int Xorriso_genisofs_count_args(struct XorrisO *xorriso, int argc, char **argv, for(i=0; arg2_options[i][0]!=0; i++) if(strcmp(arg2_options[i], cmd)==0) return(1); + *count= 3; + for(i=0; arg3_options[i][0]!=0; i++) + if(strcmp(arg3_options[i], cmd)==0) + return(1); *count= argc - 1; for(i=0; final_options[i][0]!=0; i++) if(strcmp(final_options[i], cmd)==0) @@ -746,6 +754,8 @@ int Xorriso_genisofs_help(struct XorrisO *xorriso, int flag) " -partition_sec_hd NUMBER Define number of sectors per head", " -partition_hd_cyl NUMBER Define number of heads per cylinder", " -mips-boot FILE Set mips boot image name (relative to image root)", +" -append_partition NUMBER TYPE FILE", +" Append FILE after image. TYPE is hex: 0x..", " --modification-date=YYYYMMDDhhmmsscc", " Override date of creation and modification", " -isohybrid-mbr FILE Set SYSLINUX mbr/isohdp[fp]x*.bin for isohybrid", @@ -1343,6 +1353,13 @@ not_enough_args:; ret= Xorriso_option_jigdo(xorriso, argv[i - 1], argv[i], 0); if(ret <= 0) goto problem_handler_2; + } else if(strcmp(argv[i], "-append_partition") == 0) { + i+= 3; + ret= Xorriso_option_append_partition(xorriso, argv[i - 2], argv[i - 1], + argv[i], 0); + if(ret <= 0) + goto problem_handler_2; + } else if(argv[i][0]=='-' && argv[i][1]!=0) { ret= Xorriso_genisofs_count_args(xorriso, argc - i, argv + i, &count, 1); if(ret > 0) { diff --git a/xorriso/iso_img.c b/xorriso/iso_img.c index 2c8049b8..a7448ec7 100644 --- a/xorriso/iso_img.c +++ b/xorriso/iso_img.c @@ -455,6 +455,10 @@ int Xorriso_boot_item_status(struct XorrisO *xorriso, char *cat_path, } +/* + bit0= do only report non-default settings + bit1= do only report to fp +*/ int Xorriso_boot_status_mips(struct XorrisO *xorriso, IsoImage *image, char *filter, FILE *fp, int flag) { @@ -480,6 +484,28 @@ int Xorriso_boot_status_mips(struct XorrisO *xorriso, IsoImage *image, } +/* + bit0= do only report non-default settings + bit1= do only report to fp +*/ +int Xorriso_append_part_status(struct XorrisO *xorriso, IsoImage *image, + char *filter, FILE *fp, int flag) +{ + int i; + + for(i= 0; i < 4; i++) { + if(xorriso->appended_partitions[i][0] == 0) + continue; + sprintf(xorriso->result_line, "-append_partition %d 0x%2.2x ", + i + 1, (unsigned int) xorriso->appended_part_types[i]); + Text_shellsafe(xorriso->appended_partitions[i], xorriso->result_line, 1); + strcat(xorriso->result_line, "\n"); + Xorriso_status_result(xorriso, filter, fp, flag & 2); + } + return(1); +} + + /* bit0= do only report non-default settings bit1= do only report to fp @@ -511,7 +537,7 @@ int Xorriso_boot_image_status(struct XorrisO *xorriso, char *filter, FILE *fp, if(image == NULL) goto no_image; - ret= Xorriso_boot_status_mips(xorriso, image, filter, fp, 0); + ret= Xorriso_boot_status_mips(xorriso, image, filter, fp, flag & 3); if(ret < 0) /* == 0 is normal */ {ret= 0; goto ex;} @@ -530,7 +556,7 @@ no_image:; } if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); - ret= 1; goto ex; + ret= 1; goto after_el_torito; } @@ -620,6 +646,11 @@ no_image:; if(ret <= 0) goto ex; +after_el_torito:; + ret = Xorriso_append_part_status(xorriso, image, filter, fp, flag & 3); + if(ret <= 0) + goto ex; + ret= 1; ex: if(boots != NULL) diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index a90a50ba..0fa1e964 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -255,6 +255,55 @@ ex:; } +/* Option -append_partition */ +int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text, + char *type_text, char *image_path, int flag) +{ + int partno = 0, type_code= -1, i; + unsigned int unum; + char *tpt; + static char *part_type_names[] = {"FAT12", "FAT16", "Linux", NULL}; + static int part_type_codes[] = { 0x01, 0x06, 0x83}; + + sscanf(partno_text, "%d", &partno); + if(partno < 1 || partno > 4) { + sprintf(xorriso->info_text, + "-append_partition: Partition number '%s' is out of range (1...4)", + partno_text); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + for(i= 0; part_type_names[i] != NULL; i++) + if(strcmp(part_type_names[i], type_text) == 0) + break; + if(part_type_names[i] != NULL) + type_code= part_type_codes[i]; + if(type_code < 0) { + tpt= type_text; + if(strncmp(tpt, "0x", 2) == 0) + tpt+= 2; + else + goto bad_type; + unum= 0xffffffff; + sscanf(tpt, "%X", &unum); + if(unum > 0xff) { +bad_type:; + sprintf(xorriso->info_text, + "-append_partition: Partition type '%s' is out of range (0x00...0xff)", + type_text); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + return(0); + } + type_code= unum; + } + + if(Sfile_str(xorriso->appended_partitions[partno - 1], image_path, 0) <= 0) + return(-1); + xorriso->appended_part_types[partno - 1]= type_code; + return(1); +} + + /* Option -application_id */ int Xorriso_option_application_id(struct XorrisO *xorriso, char *name, int flag) diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 4948bfef..972c4f74 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -1403,6 +1403,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " mips_path= adds Big Endian MIPS boot files. mipsel_path=", " sets one Little Endian MIPS boot file. Both are mutually", " exclusive and exclusive to MBR production.", +" -append_partition partition_number type_code disk_path", +" Append a prepared filesystem image after the end of the", +" ISO image. Caution: Will be overwritten by multi-session.", "", " -uid uid User id to be used for the whole multi-session ISO image.", " -gid gid Group id for the same purpose.", diff --git a/xorriso/parse_exec.c b/xorriso/parse_exec.c index 0c10a145..29c067a0 100644 --- a/xorriso/parse_exec.c +++ b/xorriso/parse_exec.c @@ -483,6 +483,10 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "scdbackup_tag","update","update_r","volume_date", "" }; + static char arg3_commands[][40]= { + "append_partition", + "" + }; static char arg4_commands[][40]= { "cut_out","extract_cut","mount","mount_cmd","paste_in","session_string", "" @@ -530,6 +534,10 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, for(i=0; arg2_commands[i][0]!=0; i++) if(strcmp(arg2_commands[i], cmd)==0) return(1); + *count= 3; + for(i=0; arg3_commands[i][0]!=0; i++) + if(strcmp(arg3_commands[i], cmd)==0) + return(1); *count= 4; for(i=0; arg4_commands[i][0]!=0; i++) if(strcmp(arg4_commands[i], cmd)==0) @@ -648,6 +656,11 @@ next_command:; ret= Xorriso_option_alter_date(xorriso, arg1, arg2, argc, argv, idx, strlen(cmd)>10); + } else if(strcmp(cmd,"append_partition")==0) { + (*idx)+= 3; + ret= Xorriso_option_append_partition(xorriso, arg1, arg2, argv[*idx - 1], + 0); + } else if(strcmp(cmd,"application_id")==0) { (*idx)++; ret= Xorriso_option_application_id(xorriso, arg1, 0); diff --git a/xorriso/write_run.c b/xorriso/write_run.c index 00ee0413..e9484914 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -27,8 +27,7 @@ #include #include -/* >>> later change this to Xorriso_standalonE */ -#ifdef Xorriso_jte_standalonE +#ifdef Xorriso_standalonE #ifdef Xorriso_with_libjtE #include "../libjte/libjte.h" @@ -40,7 +39,7 @@ #include #endif -#endif /* ! Xorriso_jte_standalonE */ +#endif /* ! Xorriso_standalonE */ #include "xorriso.h" #include "xorriso_private.h" @@ -737,6 +736,12 @@ int Xorriso_write_session(struct XorrisO *xorriso, int flag) isoburn_igopt_set_scdbackup_tag(sopts, xorriso->scdbackup_tag_name, xorriso->scdbackup_tag_time, xorriso->scdbackup_tag_written); + for(i= 0; i < 4; i++) { + if(xorriso->appended_partitions[i][0] == 0) + continue; + ret= isoburn_igopt_set_partition_img(sopts, i + 1, + xorriso->appended_part_types[i], xorriso->appended_partitions[i]); + } if(image!=NULL && 12+strlen(Xorriso_timestamP)<80) { strcpy(xorriso_id, xorriso->preparer_id); img_id= (char *) iso_image_get_data_preparer_id(image); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index cde12832..1ece0b32 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRISO 1 "Oct 13, 2010" +.TH XORRISO 1 "Oct 18, 2010" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -2221,7 +2221,7 @@ xorriso adds the traditional 300k of padding by default to all images. .br For images which will never get to a CD it is safe to use -padding 0 . .TP -.B El Torito bootable ISO images: +.B Bootable ISO images: .PP Contrary to published specifications many BIOSes will load an El Torito record from the first session on media and not from the last one, which @@ -2238,6 +2238,14 @@ it is advised to patch it when a follow-up session gets written. But one should not rely on the capability to influence the bootability of the existing sessions, unless one can assume overwriteable media. +.br +There are booting mechanisms which do not use an El Torito record but rather +start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices, +MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation. +.br +The boot firmware EFI may use programs which are located in a FAT filesystem +and announced by an MBR partition table entry. +.br .TP \fB\-boot_image\fR "any"|"isolinux"|"grub" .br @@ -2411,13 +2419,42 @@ partition offset. 0 chooses a default value. .br \fBmips_path=\fRiso_rr_path declares a data file in the image to be a MIPS Big Endian boot file. Enable production of a MIPS Big Endian Volume -Header. This is mutually exclusive with any MBR production. It will overwrite -the first 512 bytes of any data eventually provided by system_area=. +Header. This is mutually exclusive with MBR production and mipsel_path=. +It will overwrite the first 512 bytes of any data eventually provided by +system_area=. Up to 15 boot files can be declared by mips_path=. .br +\fBmipsel_path=\fRiso_rr_path declares a data file in the image to be the +MIPS Little Endian boot file. This is mutually exclusive with MBR production +and mips_path=. It will overwrite the first 512 bytes of any data eventually +provided by system_area=. +Only a single boot file can be declared by mipsel_path=. +.br \fBmips_discard\fR revokes any boot file declarations made by mips_path=. This removes the ban on MBR production. .br +.br +.TP +\fB\-append_partition\fR partition_number type_code disk_path +Cause a prepared filesystem image to be appended to the ISO image and to be +described by a partition table entry in an MBR at the start of the emerging +ISO image. The partition entry will bear the size of the submitted file +rounded up to the next multiple of 2048 bytes. +.br +Beware of subsequent multi-session runs. The appended partition will get +overwritten. +.br +partition_number may be 1 to 4. Number 1 will put the whole ISO image into +the unclaimed space before partition 1. So together with most xorriso MBR +features, number 2 would be the most natural choice. +.br +The type_code may be "FAT12", "FAT16", "Linux", +or a hexadecimal number between 0x00 and 0xff. Not all those numbers will +yield usable results. For a list of codes search the Internet for +"Partition Types" or run fdisk command "L". +.br +The disk_path must provide the necessary data bytes at commit time. +An empty disk_path disables this feature for the given partition number. .TP .B Jigdo Template Extraction: .PP @@ -3417,6 +3454,8 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on. -partition_offset number is -boot_image any partition_offset=number. .br +Option -append_partition is supported. +.br The options of genisoimage Jigdo Template Extraction are recognized and performed via xorriso option -jigdo. See the "Alias:" names there for the meaning of the genisoimage options. diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index e5d40e48..9afdabb4 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -603,6 +603,10 @@ int Xorriso_option_alter_date(struct XorrisO *xorriso, char *time_type, char *timestring, int argc, char **argv, int *idx, int flag); +/* Option -append_partition */ +int Xorriso_option_append_partition(struct XorrisO *xorriso, char *partno_text, + char *type_text, char *image_path, int flag); + /* Option -application_id */ int Xorriso_option_application_id(struct XorrisO *xorriso, char *name, int flag); diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index 0b767add..cb447bab 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -502,7 +502,7 @@ inner dashes are interpreted as underscores. * Filter:: Filters for data file content * Writing:: Writing the result, drive control * SetWrite:: Settings for result writing -* Bootable:: El Torito bootable ISO images +* Bootable:: Bootable ISO images * Jigdo:: Jigdo Template Extraction * Charset:: Character sets * Exception:: Exception processing @@ -1991,8 +1991,8 @@ will be written according to the setting of option -acl.  File: xorriso.info, Node: Bootable, Next: Jigdo, Prev: SetWrite, Up: Options -9.10 El Torito bootable ISO images -================================== +9.10 Bootable ISO images +======================== Contrary to published specifications many BIOSes will load an El Torito record from the first session on media and not from the last one, which @@ -2006,6 +2006,12 @@ If a boot image from ISOLINUX or GRUB is known to be present on media then it is advised to patch it when a follow-up session gets written. But one should not rely on the capability to influence the bootability of the existing sessions, unless one can assume overwriteable media. +There are booting mechanisms which do not use an El Torito record but +rather start at the first bytes of the image: PC-BIOS MBR for +hard-disk-like devices, MIPS Volume Header for old SGI computers, DEC +Boot Block for old DECstation. +The boot firmware EFI may use programs which are located in a FAT +filesystem and announced by an MBR partition table entry. -boot_image "any"|"isolinux"|"grub" "discard"|"keep"|"patch"|"show_status"|bootspec|"next" @@ -2146,13 +2152,39 @@ of the existing sessions, unless one can assume overwriteable media. for partition offset. 0 chooses a default value. *mips_path=*iso_rr_path declares a data file in the image to be a MIPS Big Endian boot file. Enable production of a MIPS Big Endian - Volume Header. This is mutually exclusive with any MBR production. - It will overwrite the first 512 bytes of any data eventually - provided by system_area=. Up to 15 boot files can be declared by - mips_path=. + Volume Header. This is mutually exclusive with MBR production and + mipsel_path=. It will overwrite the first 512 bytes of any data + eventually provided by system_area=. Up to 15 boot files can be + declared by mips_path=. + *mipsel_path=*iso_rr_path declares a data file in the image to be + the MIPS Little Endian boot file. This is mutually exclusive with + MBR production and mips_path=. It will overwrite the first 512 + bytes of any data eventually provided by system_area=. Only a + single boot file can be declared by mipsel_path=. *mips_discard* revokes any boot file declarations made by mips_path=. This removes the ban on MBR production. + +-append_partition partition_number type_code disk_path + Cause a prepared filesystem image to be appended to the ISO image + and to be described by a partition table entry in an MBR at the + start of the emerging ISO image. The partition entry will bear the + size of the submitted file rounded up to the next multiple of 2048 + bytes. + Beware of subsequent multi-session runs. The appended partition + will get overwritten. + partition_number may be 1 to 4. Number 1 will put the whole ISO + image into the unclaimed space before partition 1. So together + with most xorriso MBR features, number 2 would be the most natural + choice. + The type_code may be "FAT12", "FAT16", "Linux", or a hexadecimal + number between 0x00 and 0xff. Not all those numbers will yield + usable results. For a list of codes search the Internet for + "Partition Types" or run fdisk command "L". + The disk_path must provide the necessary data bytes at commit time. + An empty disk_path disables this feature for the given partition + number. +  File: xorriso.info, Node: Jigdo, Next: Charset, Prev: Bootable, Up: Options @@ -3043,6 +3075,7 @@ programs trigger comparable actions. -mips-boot is the same as -boot_image any mips_path= . -partition_offset number is -boot_image any partition_offset=number. + Option -append_partition is supported. The options of genisoimage Jigdo Template Extraction are recognized and performed via xorriso option -jigdo. See the "Alias:" names there for the meaning of the genisoimage options. @@ -3851,6 +3884,8 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -add_plainly inserts one or more paths: Insert. (line 61) * -alter_date sets timestamps in ISO image: Manip. (line 146) * -alter_date_r sets timestamps in ISO image: Manip. (line 166) +* -append_partition adds arbitrary file after image end: Bootable. + (line 178) * -application_id sets application id: SetWrite. (line 90) * -as emulates mkisofs or cdrecord: Emulation. (line 13) * -assert_volid rejects undesired images: Loading. (line 65) @@ -3859,7 +3894,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -ban_stdio_write demands real drive: Loading. (line 220) * -biblio_file sets biblio file name: SetWrite. (line 138) * -blank erases media: Writing. (line 45) -* -boot_image controls bootability: Bootable. (line 20) +* -boot_image controls bootability: Bootable. (line 26) * -calm_drive reduces drive activity: Loading. (line 209) * -cd sets working directory in ISO: Navigate. (line 7) * -cdx sets working directory on disk: Navigate. (line 16) @@ -3967,7 +4002,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -out_charset sets output character set: SetWrite. (line 156) * -outdev aquires a drive for output: AqDrive. (line 29) * -overwrite enables overwriting in ISO: SetInsert. (line 127) -* -pacifier controls pacifier text form: Emulation. (line 127) +* -pacifier controls pacifier text form: Emulation. (line 128) * -padding sets amount of image padding: SetWrite. (line 239) * -page set terminal geometry: DialogCtl. (line 15) * -paste_in copies file into disk file: Restore. (line 117) @@ -3987,7 +4022,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -quoted_not_list sets exclusions: SetInsert. (line 72) * -quoted_path_list inserts paths from disk file: Insert. (line 80) * -read_mkisofsrc searches and reads .mkisofsrc file: Emulation. - (line 115) + (line 116) * -reassure enables confirmation question: DialogCtl. (line 28) * -report_about controls verbosity: Exception. (line 55) * -return_with controls exit value: Exception. (line 39) @@ -3997,7 +4032,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -rollback discards pending changes: Writing. (line 9) * -rollback_end ends program without writing: Scripting. (line 125) * -rom_toc_scan searches for sessions: Loading. (line 184) -* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 137) +* -scdbackup_tag enables scdbackup checksum tag: Emulation. (line 138) * -scsi_log reports SCSI commands: Scripting. (line 113) * -session_log logs written sessions: Scripting. (line 104) * -session_string composes session info line: Inquiry. (line 56) @@ -4050,14 +4085,15 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * ACL, show in ISO image, -getfacl: Navigate. (line 69) * ACL, show in ISO image, -getfacl_r: Navigate. (line 76) * Appendable media, _definition: Media. (line 38) +* Appended Filesystem Image, -append_partition: Bootable. (line 178) * Backslash Interpretation, _definition: Processing. (line 49) * Backup, enable fast incremental, -disk_dev_ino: Loading. (line 163) * Backup, enable features, -for_backup: Loading. (line 158) -* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 137) +* Backup, scdbackup checksum tag, -scdbackup: Emulation. (line 138) * Blank media, _definition: Media. (line 29) * Blind growing, _definition: Methods. (line 40) -* Bootability, control, -boot_image: Bootable. (line 20) -* cdrecord, Emulation: Emulation. (line 82) +* Bootability, control, -boot_image: Bootable. (line 26) +* cdrecord, Emulation: Emulation. (line 83) * Character Set, _definition: Charset. (line 6) * Character Set, for input, -in_charset: Loading. (line 73) * Character Set, for input/output, -charset: Charset. (line 43) @@ -4092,10 +4128,10 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Drive, write and eject, -commit_eject: Writing. (line 40) * El Torito, _definiton: Extras. (line 19) * Emulation, -as: Emulation. (line 13) -* Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 115) -* Emulation, cdrecord, -as: Emulation. (line 82) +* Emulation, .mkisofsrc, -read_mkisofsrc: Emulation. (line 116) +* Emulation, cdrecord, -as: Emulation. (line 83) * Emulation, mkisofs, -as: Emulation. (line 16) -* Emulation, pacifier form, -pacifier: Emulation. (line 127) +* Emulation, pacifier form, -pacifier: Emulation. (line 128) * Examples: Examples. (line 6) * Filter, _definition: Filter. (line 6) * Filter, apply to file tree, -set_filter_r: Filter. (line 84) @@ -4153,12 +4189,12 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Jigdo Template Extraction, _definition: Jigdo. (line 6) * List delimiter, _definiton: Processing. (line 8) * MBR, _definiton: Extras. (line 26) -* MBR, set, -boot_image system_area=: Bootable. (line 117) +* MBR, set, -boot_image system_area=: Bootable. (line 123) * MD5, control handling, -md5: Loading. (line 136) * Media, erase, -blank: Writing. (line 45) * Media, format, -format: Writing. (line 69) * Media, list formats, -list_formats: Writing. (line 107) -* MIPS boot file, activation: Bootable. (line 156) +* MIPS boot file, activation: Bootable. (line 162) * mkisofs, Emulation: Emulation. (line 16) * Modifying, _definition: Methods. (line 27) * Multi-session media, _definition: Media. (line 7) @@ -4184,8 +4220,8 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Ownership, global in ISO image, -uid: SetWrite. (line 162) * Ownership, in ISO image, -chown: Manip. (line 42) * Ownership, in ISO image, -chown_r: Manip. (line 47) -* Partition offset, _definiton: Bootable. (line 142) -* Partition table, _definiton: Bootable. (line 124) +* Partition offset, _definiton: Bootable. (line 148) +* Partition table, _definiton: Bootable. (line 130) * Pathspec, _definition: SetInsert. (line 120) * Pattern expansion, _definition: Processing. (line 22) * Pattern expansion, for disk paths, -disk_pattern: Insert. (line 31) @@ -4236,7 +4272,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Session, mount command line, -mount_cmd: Inquiry. (line 31) * Session, mount parameters, -mount_opts: Inquiry. (line 47) * Session, select as input, -load: Loading. (line 11) -* System area, _definiton: Bootable. (line 117) +* System area, _definiton: Bootable. (line 123) * Table-of-content, search sessions, -rom_toc_scan: Loading. (line 184) * Table-of-content, show, -toc: Inquiry. (line 18) * Timestamps, set in ISO image, -alter_date: Manip. (line 146) @@ -4251,7 +4287,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Verify, file tree checksums, -check_md5_r: Verify. (line 160) * Verify, preset -check_media, -check_media_defaults: Verify. (line 40) * Write, block size, -dvd_obs: SetWrite. (line 209) -* Write, bootability, -boot_image: Bootable. (line 20) +* Write, bootability, -boot_image: Bootable. (line 26) * Write, buffer syncing, -stdio_sync: SetWrite. (line 216) * Write, close media, -close: SetWrite. (line 233) * Write, compliance to specs, -compliance: SetWrite. (line 14) @@ -4287,48 +4323,48 @@ Node: Extras14601 Node: Processing18028 Node: Dialog21524 Node: Options23181 -Node: AqDrive24799 -Node: Loading27705 -Node: Insert39884 -Node: SetInsert48241 -Node: Manip56808 -Node: CmdFind65489 -Node: Filter75440 -Node: Writing79789 -Node: SetWrite86078 -Node: Bootable98029 -Node: Jigdo107608 -Node: Charset111866 -Node: Exception114617 -Node: DialogCtl119132 -Node: Inquiry121477 -Node: Navigate125607 -Node: Verify133205 -Node: Restore141625 -Node: Emulation148281 -Node: Scripting156341 -Node: Frontend161903 -Node: Examples163104 -Node: ExDevices164273 -Node: ExCreate164907 -Node: ExDialog166181 -Node: ExGrowing167443 -Node: ExModifying168245 -Node: ExBootable168746 -Node: ExCharset169293 -Node: ExPseudo170121 -Node: ExCdrecord171015 -Node: ExMkisofs171330 -Node: ExGrowisofs172333 -Node: ExException173457 -Node: ExTime173911 -Node: ExIncBackup174370 -Node: ExRestore177842 -Node: ExRecovery178811 -Node: Files179377 -Node: Seealso180605 -Node: Legal181129 -Node: CommandIdx182051 -Node: ConceptIdx195995 +Node: AqDrive24789 +Node: Loading27695 +Node: Insert39874 +Node: SetInsert48231 +Node: Manip56798 +Node: CmdFind65479 +Node: Filter75430 +Node: Writing79779 +Node: SetWrite86068 +Node: Bootable98019 +Node: Jigdo109361 +Node: Charset113619 +Node: Exception116370 +Node: DialogCtl120885 +Node: Inquiry123230 +Node: Navigate127360 +Node: Verify134958 +Node: Restore143378 +Node: Emulation150034 +Node: Scripting158138 +Node: Frontend163700 +Node: Examples164901 +Node: ExDevices166070 +Node: ExCreate166704 +Node: ExDialog167978 +Node: ExGrowing169240 +Node: ExModifying170042 +Node: ExBootable170543 +Node: ExCharset171090 +Node: ExPseudo171918 +Node: ExCdrecord172812 +Node: ExMkisofs173127 +Node: ExGrowisofs174130 +Node: ExException175254 +Node: ExTime175708 +Node: ExIncBackup176167 +Node: ExRestore179639 +Node: ExRecovery180608 +Node: Files181174 +Node: Seealso182402 +Node: Legal182926 +Node: CommandIdx183848 +Node: ConceptIdx197934  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 5884d89f..b65c63cd 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -44,7 +44,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Oct 15, 2010" +@c man .TH XORRISO 1 "Oct 18, 2010" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -714,7 +714,7 @@ inner dashes are interpreted as underscores. * Filter:: Filters for data file content * Writing:: Writing the result, drive control * SetWrite:: Settings for result writing -* Bootable:: El Torito bootable ISO images +* Bootable:: Bootable ISO images * Jigdo:: Jigdo Template Extraction * Charset:: Character sets * Exception:: Exception processing @@ -2677,9 +2677,9 @@ xorriso adds the traditional 300k of padding by default to all images. For images which will never get to a CD it is safe to use -padding 0 . @end table @c man .TP -@c man .B El Torito bootable ISO images: +@c man .B Bootable ISO images: @node Bootable, Jigdo, SetWrite, Options -@section El Torito bootable ISO images +@section Bootable ISO images @c man .PP Contrary to published specifications many BIOSes will load an El Torito record from the first session on media and not from the last one, which @@ -2696,6 +2696,14 @@ it is advised to patch it when a follow-up session gets written. But one should not rely on the capability to influence the bootability of the existing sessions, unless one can assume overwriteable media. +@* +There are booting mechanisms which do not use an El Torito record but rather +start at the first bytes of the image: PC-BIOS MBR for hard-disk-like devices, +MIPS Volume Header for old SGI computers, DEC Boot Block for old DECstation. +@* +The boot firmware EFI may use programs which are located in a FAT filesystem +and announced by an MBR partition table entry. +@* @table @asis @sp 1 @c man .TP @@ -2897,6 +2905,33 @@ Only a single boot file can be declared by mipsel_path=. This removes the ban on MBR production. @* @end table +@* +@table @asis +@sp 1 +@c man .TP +@item -append_partition partition_number type_code disk_path +@kindex -append_partition adds arbitrary file after image end +@cindex Appended Filesystem Image, -append_partition +Cause a prepared filesystem image to be appended to the ISO image and to be +described by a partition table entry in an MBR at the start of the emerging +ISO image. The partition entry will bear the size of the submitted file +rounded up to the next multiple of 2048 bytes. +@* +Beware of subsequent multi-session runs. The appended partition will get +overwritten. +@* +partition_number may be 1 to 4. Number 1 will put the whole ISO image into +the unclaimed space before partition 1. So together with most xorriso MBR +features, number 2 would be the most natural choice. +@* +The type_code may be "FAT12", "FAT16", "Linux", +or a hexadecimal number between 0x00 and 0xff. Not all those numbers will +yield usable results. For a list of codes search the Internet for +"Partition Types" or run fdisk command "L". +@* +The disk_path must provide the necessary data bytes at commit time. +An empty disk_path disables this feature for the given partition number. +@end table @c man .TP @c man .B Jigdo Template Extraction: @node Jigdo, Charset, Bootable, Options @@ -4071,6 +4106,8 @@ instead of -G to apply the effect of -boot_image isolinux partition_table=on. @minus{}partition_offset number is @minus{}boot_image any partition_offset=number. @* +Option @minus{}append_partition is supported. +@* The options of genisoimage Jigdo Template Extraction are recognized and performed via xorriso option -jigdo. See the "Alias:" names there for the meaning of the genisoimage options. diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index db9f426e..9d21c4d0 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -322,6 +322,10 @@ struct XorrisO { /* the global context of xorriso */ /* 1 to 255, 0= disabled/default */ int partition_heads_per_cyl; + /* Path and type of image files to be appended as MBR partitions */ + char appended_partitions[4][SfileadrL]; + uint8_t appended_part_types[4]; + /* User settable PVD time stamps */ time_t vol_creation_time; time_t vol_modification_time;