------------------------------------------------------------------------------ http:libburnia-project.org ------------------------------------------------------------------------------ libisoburn and xorriso. By Vreixo Formoso and Thomas Schmitt Integrated sub project of libburnia-project.org. http://files.libburnia-project.org/releases/libisoburn-1.0.0.pl00.tar.gz Copyright (C) 2006-2011 Vreixo Formoso, Thomas Schmitt. Provided under GPL version 2 or later. ------------------------------------------------------------------------------ libisoburn is a frontend for libraries libburn and libisofs which enables creation and expansion of ISO-9660 filesystems on all CD/DVD/BD media supported by libburn. This includes media like DVD+RW, which do not support multi-session management on media level and even plain disk files or block devices. The price for that is thorough specialization on data files in ISO-9660 filesystem images. So libisoburn is not suitable for audio (CD-DA) or any other CD layout which does not entirely consist of ISO-9660 sessions. xorriso is an application of libisoburn, libisofs, and libburn, which reads commands from program arguments, files, stdin, or readline. Its features are also available via a C language API of libisoburn. Currently they are fully supported on Linux with kernels >= 2.4, on FreeBSD with ATAPI/CAM support enabled in the kernel, see atapicam(4), and on OpenSolaris (tested with kernel 5.11). On other X/Open compliant systems libburn will only offer POSIX i/o with disk file objects, but no direct MMC operation on CD/DVD/BD drives. By using this software you agree to the disclaimer at the end of this text: "... without even the implied warranty ..." Compilation, First Glimpse, Installation Dynamic library and compile time header requirements for libisoburn-1.0.0 : - libburn.so.4 , version libburn-1.0.0 or higher - libisofs.so.6 , version libisofs-1.0.0 or higher libisoburn and xorriso will not start with libraries which are older than their include headers seen at compile time. Obtain libisoburn-1.0.0.pl00.tar.gz, take it to a directory of your choice and do: tar xzf libisoburn-1.0.0.pl00.tar.gz cd libisoburn-1.0.0 Within that directory execute: ./configure --prefix=/usr make Then become superuser and execute make install which will make available libisoburn.so.1 and the program xorriso. On GNU/Linux it will try to run program ldconfig with the library installation directory as only argument. Failure to do so will not abort installation. One may disable ldconfig by ./configure option --disable-ldconfig-at-install . By use of a version script, the libisoburn.so library exposes no other function names but those of the API definitions in and . If -Wl,--version-script=... makes problems with the local compiler, then disable this encapsulation feature by ./configure --disable-versioned-libs make clean ; make xorriso libisoburn comes with a command line and dialog application named xorriso, which offers a substantial part of libisoburn features to shell scripts and users. Its file xorriso/README_gnu_xorriso describes the tarball of the derived package GNU xorriso as first preference for a statically linked xorriso installation. The libisoburn installation described above produces a dynamically linked xorriso binary depending on libburn.so, libisofs.so, libisoburn.so. After installation documentation is available via man xorriso Several alias links point to the xorriso binary: xorrisofs starts xorriso with -as mkisofs emulation already enabled xorrecord starts xorriso with -as cdrecord emulation already enabled osirrox starts with -osirrox image-to-disk copying already enabled By default xorriso will depend on libreadline if the readline-dev headers are present. This dependcy can be avoided by running ./configure --prefix=/usr --disable-libreadline make clean ; make Never omit the "make clean" command after switching libreadline enabling. Other deliberate dependency reduction options of ./configure are: --disable-libacl avoid use of ACL functions like acl_to_text() --disable-xattr avoid use of xattr functions like listxattr() --disable-zlib avoid use of zlib functions like compress2() --disable-libjte avoid use of libjte for -jigdo command xorriso allows to use external processes as file content filters. This is a potential security risk which may be avoided by ./configure option --disable-external-filters By default the filter feature is disabled if effective user id and real user id differ. This ban can be lifted by --enable-external-filters-setuid In some situations Linux may deliver a better write performance to DVD drives if 64 KB rather than 32 KB are transmitted in each write operation. 64k can be made default at configure time by: --enable-dvd-obs-64k libisoburn, libisofs, and libburn C language API For the lower API concepts and calls see ./libisoburn/libisoburn.h as well as /usr/include/libisofs/libisofs.h /usr/include/libburn/libburn.h xorriso C language API Actually the dynamically linked xorriso binary is only a small start program for the xorriso API that is implemented inside libisoburn. There are API calls for command readers and interpreters, and there are API calls for each single command of xorriso. Interested programmers should have a look into the API definition at xorriso/xorriso.h and the start program xorriso/xorriso_main.c The header file xorriso.h gets installed suitable for #include So after installation of a binary libisoburn package you may find it e.g. as /usr/include/libisoburn/xorriso.h Drives and Disk File Objects The user of libisoburn applications needs operating system dependent permissions for the CD/DVD/BD drives which shall be used. On Linux and FreeBSD this means -rw-permissions, even if only reading is intended. On Solaris one needs privileges "basic,sys_devices" and r-permission, even if writing is intended. A list of rw-accessible drives can be obtained by xorriso -devices resp. by xorriso API call Xorriso_option_devices() resp. by libburn API call burn_drive_scan() A possible source of problems are hald or other automounters. If you can spot a process "hald-addon-storage" with the address of your desired drive, then consider to kill it. If you cannot get rid of the automounter that easily, try whether it helps to always load the drive tray manually before starting a write run of xorriso. Wait until the drive light is off. Better try to unmount an eventually mounted media before a write run. Besides true optical drives, libisoburn can also address disk files as input or output drives. The addresses of the disk files have to be preceded by "stdio:". Like: "stdio:/tmp/pseudo_drive" Note: xorriso by default prefixes "stdio:" to addresses outside the /dev tree if they do not lead to an optical drive device file. Testing We are quite sure that libisofs produces accurate representations of the disk files. This opinion is founded on a lot of test burns and checks by a little test program which compares files from the mounted image with the orignals on disk. It uses the normal POSIX filesystem calls, i.e. no libburnia stuff. This program is not installed systemwide but stays in the installation directory of the libisoburn tarball as test/compare_file . Usually it is run as -exec payload of a find command. It demands at least three arguments: The path of the file to compare, the prefix1 to be cut off from path and the prefix2 which gets prepended afterwards to obtain the path of the second file to compare. As further argument there can be -no_ctime which suppresses the comparison of ctime date stamps. The exit value is 0 if no difference was detected, non-0 else. Example: After xorriso ... -pathspecs on -add /=/original/dir -- mount /media/dvd cd test compare tree /media/dvd with tree /original/dir : find /original/dir -exec ./compare_file '{}' /original/dir /media/dvd ';' \ | less and vice versa: find /media/dvd -exec ./compare_file '{}' /media/dvd /original/dir ';' \ | less ------------------------------------------------------------------------------ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 or later as published by the Free Software Foundation. This program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ------------------------------------------------------------------------------ Based on and sub project of: libburnia-project.org By Mario Danic , Vreixo Formoso Thomas Schmitt Copyright (C) 2006-2011 Mario Danic, Vreixo Formoso, Thomas Schmitt. We will not raise any legal protest to dynamic linking of our libraries with applications that are not under GPL, as long as they fulfill the condition of offering the library source code used, whether altered or unaltered, under the GPLv2+, along with the application. Nevertheless, the safest legal position is not to link libburn with non-GPL compatible programs. libburnia-project.org is inspired by and in other components still containing parts of old Libburn. By Derek Foreman and Ben Jansens Copyright (C) 2002-2006 Derek Foreman and Ben Jansens libisoburn does not stem from their code.