Star is the fastest tar archiver for UNIX Star has many improvements compared to other tar implementations (including gnu tar). See below for a short description of the highlight of star. Star is located on: ftp://ftp.berlios.de/pub/star Changes since star-1.4: /*--------------------------------------------------------------------------*/ Between star-1.4 and star-1.5, there have been more changes than in the whole life of star untill star-1.4. Important changes as an overview: - Changed license from GPL to CDDL - There are really many new features and the codesize was doubled - star now includes code to emulate different Command line interface types. The following CLI are currently implemented: - star -> the classical star CLI - suntar -> the UNIX SUSv2 OpenGroup standard CLI with Sun enhancements - cpio -> the UNIX SUSv2 OpenGroup standard CLI with SVr4 enhancements - pax -> the POSIX.1-2001 standard CLI - gnutar -> the CLI from GNU tar 1.14 The command lind interface is automatically selected from argv[0]. - True and reliable incremental backup/restore has been implemented using the basic ideas from ufsdump/ufsrestore. Whether a file gets archived on an incremental depends on the dump level and the time of the last incremental or full backup. Whether a file needs to be renamed or removed while restoring incrementals depends on the data in a database that is created for the period of time of the incremental restore. The database contains file names as well as old and new inode numbers. - A configurable error control mechanism allows to selectively ignore certain problems. - Star now implements a fast and reliable -copy option. - Star now implements true and efficient Sparse file support for Solaris 11 (and Solaris 10 updates). - Star now implements reliable multi-volume support with automated tape end/size recognition - Star now uses "libfind" and thus allows to use find(1) syntax in star command lines. - New program "tartest" reads TAR archives from "stdin" and prints a list of non-compliances with POSIX.1-1990 Call e.g. tar cf - | tartest To check your favorite TAR implementation against POSIX.1-1990 /*--------------------------------------------------------------------------*/ All changes in a fine grained list: - Significant speed up for creating POSIX.1-2001 extended TAR headers When star creates archives with POSIX.1-2001 extended TAR headers, it needs to create twice as many TAR headers as with 'classic' TAR archives. In addition the POSIX.1-2001 meta information needs to be coded. While it is impossible to speed up the creation of the additional TAR headers, the coding of the POSIX.1-2001 meta information has now been implemented in a way that now only spends half of the time compared to the time used up by star-1.4 - Speed up the recognition of POSIX.1-2001 extended header tags - Diff code now is able to compare the number of hard links to a file if the archive is in -dump (exeustar) format. - List code now includes hard link count in the long listing if the archive is in -dump (exeustar) format. This allows to see the difference in the number of hard links in diff mode if the archive is in POSIX.1-2001 extended -dump (exeustar) format. - Diff code now is able to compare the directory content if the archive is in -dump (exeustar) format. This allows star to tell whether the target directory on disk includes more files than the archive. This property is needed in incremental restore mode to remove files that have been removed between incremental dumps. NEW FEATURE: you now can compare two directory trees on disk with only one run of star by calling: star -C fromdir -c -dump . | star -C todir -diff -v or star -C fromdir -c -dump . | star -C todir -diff -vv Star will now even complain if the directory 'todir' contains more files than the directory 'fromdir'. - New diffopt= 'dir' to tell star whether to compare or dir content if the archive is in -dump (exeustar) format. - Enhanced autoconf code for OS/2 - Add socket lib definition to RULES to allow networking programs to work - Check whether readlink() is present to allow compilation on OS/2 - Check whether symlink() is present to allow compilation on OS/2 - Check whether chown() is present to allow compilation on OS/2 - fexec.c in libschily now uses ';' as PATH Environment delimiter for EMX to allow path search to work on OS/2 too. - Call setmode(stdin/stdout, O_BINARY) on OS/2 EMX too. - Now call setmode(pipe, O_BINARY) on _both_ sides of the compress pipe. This should affect OS/2 _and_ Cygwin. - Work around a OS/2 EMX bug that causes star to dump core if the FIFO code correctly closes the unused parts of the pipes that are used o synchronize the cache. This was caused by attaching the shared memory segment too late to the child process. - In create mode try always to avoid to need to call telldir()/closedir()/opendir()/seekdir() by reading the directory content into allocated memory. This may cause problems on systems that are low with memory. This is implemented in the new function fetchdir(). - New option -lowmem to tell star to behave as before. With -lowmem is used, star does not malloc() the dir content and defaults to 1 MB FIFO size (see above) - include the directory content (names and inode numbers) in the extended POSIX.1-2001 header if in -dump mode. Star uses a vendor unique extended POSIX.1-2001 header tag named SCHILY.dir The tags SCHILY.ddev SCHILY.dino are used with incremental dumps. They are used only if the dump level is greater than 0. They are neded to allow star in incremental restore mode to know which files have been removed before the tape has completely passed. For this reason, star will be able to do incremental restores even if the filesystem is nearly full. - Fixed a bug introduced by applying a patch from 8.3.2002 from Andreas Gruenbacher The bug caused a needed ',' to be omited from the ACL string in extract mode if the target platform did not have named entries in the passwd file and the ACL string was converted to use the numeric user id instead. - Fixed a bug that caused star to complain "star: Cannot handle multi volume archives from/to stdin/stdout." if called "star -c f=- ..." or "star cf - ...". - Fixed a bug that did not allow it to specify the keyword "nlink" with the diffopts= option. Old star versions did not implement this option and thus it has been forbidden before. - Make sure that Base 256 coding is only used in the "classical tar headers" if the receiving archive format will understand it. - Fixed a bug in star that caused star to create wrong filenames if the POSIX.1-1990 file name prefix was exactly 155 chars _and_ the reserved field in the TAR header that directly follows the prefix field included non-null characters. - Call fflush(vpr) before executing volume change script to sync output from star with output from the script. Thanks to a hint from Abramo Bagnara - Do not open /dev/tty in case that a volume change script has been specified. This allows star to be called from a cron script. - Fix a minor bug in the new diff code. The bug caused that star -diff -vv used on TAR archives created with -dump not to print all directory differences. - If one of both (the dir in the archive or the dir on disk) was empty no file list was printed - If one of the sorted lists was longer than the other starting from some point, the rest of filenames was not printed. The pure fact that the directories were different however was always printed. - New directory 'testscrips/' with data for the program 'tartest'. - A 20 year old extension has been removed from libschily/format.c This caused printf() to interpret %X as %lX. This caused noticable problems on IA-64. It should have created problems on True64 and on 64 bit Sparc programs too but was not directly visible due to a different stack content. - #elif removed to avoid GCC-3.x warnings - several new autoconf tests for 'struct mtget' members - remote tape client code now uses a new abstract 'struct rmtget' to avoid that 'mt status' for a remote tape drive depends on the least common denominator from both (local and remote) systems. - -wready option now also looks for EBUSY which allows to use star and mt to wait for remote tape drive to become ready again. This option should be used if you like to do a series of backups as it may be that writing the EOF mark blocks the tape for a while. - -wready now waits up to 120 seconds for the tape drive to become ready - star manpage enhanced to reflect the new sense for -wready - With FIFO enabled (default since 1994) star is now able to exit() with a correct exit code != 0 if a write error occurs on the tape. Due to a missing feature, star did exit(0) if the fifo was active. - star man page enhanced to mention the new diff properties that are present when using the -dump option. - Remote tape client code has been made a bit faster (5-10%) - Remote tape client code now includes a new interface for an abstract 'struct mtget'. This allows the mt program to work more smoothly when issuing a remote status command. Before the result was caused by the least common denominator of both, the local and the remote system. With the enhancements, the outout of the mt program with the 'status' opcode only depends on the properties of the remote system where the tape is connected to. - mt program now also supports -wready option - mt program has new opcode 'nop' to allow mt to be used as stand alone program to wait for a tape to become ready by calling "mt -wready nop" - mt program now supports the new abstract remote tape interface for struct mtget. - Remote MT client code moved into 'librmt'. I also modified the code in a way that allows to compile librmt in a way that does not need libschily in order to work if the OS is at least UNIX-98 compliant. This makes it possible to use a complete portable remote tape access solution in any application. If someone is interested to get a BSD licensed version of librmt please contact me! - Special support for an ndocumented but unfortunately important "feature" for symlinks on HP-UX. Now star tries to retain the permissions of a symlink by setting umask() before creating the symklink. - Fixed a bug in _fileread() that caused a lseek() return code not to be evaluated correctly. - Fixed a bug in create_dirs() that may have caused incorrect behavior when a non-directory should be converted into a directory. - Fixed a bug in create_dirs() that caused an endless loop if trying to extract e.g. dir1/dir2/file When dir1 Exists and may not be written to. - Auto-create dependencies for HP-UX bundled C-compiler - Auto-create dependencies for AIX C-compiler - Reworked 'librmt' now allows to use star in remote mode without being installed suid root. To force star to use rsh(1) instead of rcmd(3), use env RSH=rsh star ... To tell star to use a different RMT server, call env RMT=/path/to/rmt star .... NOTE: Transfer speed is much slower if star does not use rcmd(3) in root mode to establish the remote connection. If you like to do fast, always make sure to be root or install star suid root. For late 2002, we know that the following programs are broken and do not implement signal handling correctly: rsh on SunOS-5.0...SunOS-5.9 ssh from ssh.com ssh from openssh.org Sun already did accept a bug report for 'rsh'. Meanwhile it could help to call setsid() if we are running under X so the ssh X pop up for passwd reading will work. For Solaris the following Bug requests are open: rsh/rlogin 4776756 sun ssh 4777436 The source from OpenSSH.org has been fixed on Monday 11.11.2002. Due to the signal handling bug, star will die if you try to type ^\ (SIGQUIT) to get an intermediate status summary. Star will also not be able to write the current file to a logical end before stopping because it received a SIGINT - this will result in archives with a defective logical structure. - Reworked 'librmt' allows to use ssh(1) to be used for remote tape access. Use env RSH=ssh star .... or env RSH=/usr/bin/ssh star .... to tell star to use the secure shell to establish a remote tape connection. Note that using the secure shell causes the transfer speed to be significantly lower than for the default case where a suid root star used rcmd(3) to set up the connection. - Man pages for librmt new. - Include a patch from Andreas Gruenbacher to fix a problem with illegal ACL comments in linux tar archives that caused star to be unable to extract the archive. - Add support for *BSD SIGINFO (SIGINFO has been added by BSD in 1990) We do support intermediate status printing much longer but triggered by SIGQUIT (^\). - Major rework for "rmt" man page - Make "rmt" return the string "PIPE" if "stdin" is connected to a pipe. This allows to use ssh(1) for the remote tape interface. - changes to reflect new interfaces of 'librmt'. - 'mt' command renamed to 'smt' to allow it to be installed as alternate mt program to be used for backup purposes - follow the strange POSIX rules for the strerror() behavior - Support for sparc64-freebsd - Try to work around a bug in OpenBSD. OpenBSD defines EOF in ctype.h but POSIX only mentions an EOF definition for stdio.h. If we include ctype.h before schily.h on OpenBSD while stdio.h has not been included, this will fail. - Support for BSDi version 4.x - Support for i786-cygwin32_nt - RMT program now supports IPv6 - Fix a bug that caused star to dump core with star -diff -vv if the archive has been created with star -c -dump and the target directory in the filesystem was not readable. - Fixed a bug that caused star to be unable to correctly deal with ACLs where the user or group name contains spaces. - Workaround for reading rotten archives caused by above bug. - Fixed a bug that caused star to create broken archives if the POSIX.1-2001 extended format is used for sparse files > 8 GB. For this reason, a new extended header tag SCHILY.realsize has been added. - New option -no-xheader disables PORIX.1-2001 extended headers regardless of the archiveformat. This may help to read archives that have been created with previous versions of star if there is a sparse file > 8 GB in the archive. - New Option xdebug= # Currently star xdebug=1 tells star tu print a dump of the internal datatructures for every file ifin list or extract mode. - Allow floating point printing on OS/2. This has been possible since 11/2001 but OS/2 has been forgotten. - Correct OS/2 ranlib handling - New architecture 9000-831-hp - Include +DAportable in HP-UX cc options - Reordered and restructured librmt code to allow compilation on OS/2 and hopefully other OS like BeOS - Fixed a bug that caused star to print '^Aname' instead of 'name' in extended directory diff mode. - Fixed a bug that caused star to dump core on UNIX-98 TAR compat mode with e.g. 'star cbv' because star did not check for the missing arg to the -b option. - Fixed a bug in POSIX.1-2002 mode (SCHILY dir namelist extension) that resulted in wrong directory name lists (used for diff mode only) if the directory contained japanese filenames. The bug was present because star did not move enough space if the filename length changed when converting to Unicode. - Fixed a typo (R_RDONLY instead of O_RDONLY) in fctldefs.h - Support for macppc-netbsd-cc NetBSD on MAC HW. - Fixed a minor typo in the star man page. Thanks to Eric Raymond - 'star -n -tpath ...' now only prints the pathnames to allow to use the output directly in scripts. If you like the old behavior, use 'star -nv ...' - Better autoconfiguration for librmt and its users yields in better compilation and portability results for OS that do not support the needed internet features for remote tape support. - mt.c adopted to the better autoconf support in librmt - New option errctl= name Use the file name as error control file. The reason for using an error control file is to make star quiet about error conditions that are known to be irrelevant on the quality of the archive or restore run. A typical reason to use error control is to suppress warnings about growing log files while doing a backup on a life file system. The list of error conditions to be handled may use one or more (in this case separated by a '|' character) identifiers from the list below: ABORT If this meta condition is included in an error condition, star aborts (exits) as soon as possible after this error condition has been seen instead of making star quiet about the condition. This error condition flag may only be used together with at another error condition or a list of error conditions (separated by a '|' character). WARN If this meta condition is included in an error condition, star prints the warning about the error condition but the error condition does not affect the exit code of star and the error statistics (which is printed to the end) does not include the related errors. This error condition flag may only be used together with at another error condition or a list of error condi- tions (separated by a '|' character). The WARN meta condition has a lower precedence than ABORT. DIFF Suppress output in case that star -diff did encounter any differences. ALL This is a shortcut for all error conditions below. STAT Suppress warnings that star could not stat(2) a file. GETACL Suppress warnings about files on which star had problems to retrieve the ACL informa- tion. OPEN Suppress warnings about files that could not be opened. READ Suppress warnings read errors on files. WRITE Suppress warnings write errors on files. READLINK Suppress warnings readlink(2) errors on symbolic links. GROW Suppress warnings about files that did grow while they have been archived. SHRINK Suppress warnings about files that did shrink while they have been archived. MISSLINK Suppress warnings about files for which star was unable to archive all hard links. NAMETOOLONG Suppress warnings about files that could not be archived because the name of the file is too long for the archive format. FILETOOBIG Suppress warnings about files that could not be archived because the size of the file is too big for the archive format. SPECIALFILE Suppress warnings about files that could not be archived because the file type is not supported by the archive format. GETXATTR Suppress warnings about files on that star could not retrieve the extended file attri- bute information. SETTIME Suppress warnings about files on that star could not set the time information during extraction. SETMODE Suppress warnings about files on that star could not set the access modes during extraction. SECURITY Suppress warnings about files that have been skipped on extraction because they have been considered to be a security risk. This currently applies to all files that have a '/../' sequence inside when -.. has not been specified. LSECURITY Suppress warnings about links that have been skipped on extraction because they have been considered to be a security risk. This currently applies to all link names that start with '/' or have a '/../' sequence inside when -secure-links has been specified. In this case, star tries to match the link name against the pattern in the error control file. SAMEFILE Suppress warnings about links that have been skipped on extraction because source and target of the link are pointing to the same file. If star would not skip these files, it would end up with removing the file completely. In this case, star tries to match the link name against the pattern in the error control file. BADACL Suppress warnings access control list conversion problems. SETACL Suppress warnings about files on that star could not set the ACL information during extraction. SETXATTR Suppress warnings about files on that star could not set the extended file attribute information during extraction. If a specific error condition is ignored, then the error condition is not only handled in a silent way but also excluded from the error statistics that are printed at the end of the star run. Be very careful when using error control as you may ignore any error condition. If you ignore the wrong error condi- tions, you may not be able to see real problems anymore. A typical error control file line might look this way: GROW */log/#[^/].log - Typo in DEFAULTS files fixed - Better Next STep support: - Some workarounds for broken unistd.h - -lkvm removed from Next Step config. - waitdefs.h fixed for very old BSD based systems (~ 1980) like Next STep - fixed typo in fctldefs.h R_RDONLY -> O_RDONLY - Better Portability for SCO UnixWare - New platforms i486, i586, Pentium III, Pentium Pro - Let strdefs.h also include strings.h for strcasecmp() - Support for missing struct sockaddr_storage - Support for broken wait3() (returns wrong timings) - Changed broken portability Prototype support in libfile to use 'makefiles / prototype.h' based system - Changed fileopen() and filereopen() to avoid fdopen() problems (does not accept mode string that does not match fd flags) - Change autoconf/statdefs.h to support nanosecond support for SCO UnixWare and FreeBSD - Call conf/mkdep-sco.sh via sh to be independent from 'x' bit. - starting to port ACL support to SCO UnixWare (not yet ready) - Removed option -I in preparation for using it in a different way in future releases. - Trying to make the source get accepted by 'cstyle'. - changed conf/cc-config.sh to check for a bad PATH set up (e.g. /usr/ucb before /opt/SUNWspro/bin) which would cause problems to use cc on Solaris. - Second fix from Andreas Grünbacher for #default comments in ACLs now also works correctly with multiple #default comments. - Warning: Environment STAR_FIFO_SIZE changed to STAR_FIFOSIZE This is to make star and cdrecord behave similar. - Star now reads a file /etc/default/star for default parameters. Currently implemented are: STAR_FIFOSIZE= and STAR_FIFOSIZE_MAX= STAR_FIFOSIZE= sets the FIFO size if no fs= option has been specified STAR_FIFOSIZE_MAX= limits the FIFO size even if a fs= option has been specified - Try to avoid that the verbose or diagnostic messages are sometimes lost if called on Linux via "ssh". Unfortunately, this does not always help. If you like to make sure that nothing gets lost, call: ssh host "star .... ; sleep 10" NOTE: The basic problem is caused ba a Linux bug - Star now opens a file that is going to be extracted with O_DSYNC. Thanks to a hint from Frank Batschulat from the Solaris filesystem kernel team. On operating systems with a decent buffer cache implementation (like Solaris), this speeds up extraction of many small or medium sizes files (e.g. a Linux kernel TAR archive) by approx. 20% On Linux, this change unfortunately is ineffective. - New option -no-fsync to avoid calling fsync(2) for each file if in extract mode. This helps to increase extraction speed on operating systems with badly implemented buffer cache (e.g. Linux). Note that using this option may be dangerous as star will not even be able to detect if a file could not be extracted correctly if it has been called with -no-fsync Background information: Calling fsync(2) in star's extract mode has been introduced in 1999. As star is developed on Solaris and on Solaris the performance degradation that is caused by calling fsync(2) is close to imperceptible, no performance tests have been made for this feature until recently. A few weeks ago, some people reported that GNU tar is much faster than star when extracting files. Doing performance tests by extracting linux kernel TAR archives leads to the following results: - Extraction on Solaris without calling fsync(2) did speed up by ~ 40% compared to the standard case with calling fsync(2). - After O_DSYNC has been introduced, the speed difference (compared to extraction without fsync) reduced to ~ 20% Extraction of a recent 2.4 Linux developer kernel archive took 50 seconds with star's default that calls fsync and 42 seconds with star -no-fsync (56 seconds with star-1.5a14) - On Linux (depending on filesystem type and disk type) extraction without calling fsync(2) is 3x to 8x faster than with the standard case that includes calling fsync. Star is developed for best possible data integrity while GNU tar does not seem to care about data integrity. The fact that GNU tar on Linux is much faster (for extraction) than star is no reason to blame star but a reason to blame the quality of the Linux buffer cache. Star will not change its default to a method that gives less data integrity just to speed up compared to GNU tar. The Solaris kernel is developed for best speed with guaranteed data integrity while the Linux kernel is developed for best speed without caring for data integrity. If you like that star will speed up in the star default (secure) mode, send a message to the Linux kernel developers team and request a change that gives a better behaviour of the Linux buffer cache. - New option level= # to set the current incremental dump level - New option tardumps=name to set file name for tar dump dates file. This file is similar to the file /etc/dumpdates that is manages by ufsdump. - New option -wtardumps to tell star update file for tar dump dates if in dump mode. If you like to experiment with the new incremental dump features, you should start this way: Create a level 0 dump: star -cM -dump -sparse level=0 -wtardumps -C /usr . Create a level 1 dump: star -cM -dump -sparse level=1 -wtardumps -C /usr . If you do not have files that changed the type, no files that have been removed and no files that have been renamed, star would already be able to do incremental restores. - Better handling for the exitcode for star (needed for dump handling). - Allow 'smt' to understand that EACCES for read-only open may not be caused by a write protected tape but rather by access problems for a remote tape drive. - Do no more archive the list of files in a directory (usually done with -dump) if this directory is a mount point and star has been told not to cross mount points. We cannot use the real content of the underlying dir anyway and the content of the mounted FS makes no sense. Conclusion: try to use a filesystem snapshot whenever possible. - Fixed a problem when extracting extended file flags on FreeBSD Thanks to Marius Strobl - Added a workaround for permission problems when trying to extract hard links to immutable files by resetting the flags, creating the link and later restoring the flags. Thanks to Marius Strobl - made handlecond()/raisecond() portable in libschily - Extended README.hpux to mention how to compile in 64 bit mode. - Added a security check for "/../" in the path for the "rmt" program that helps to prevent user from opening /dev/../etc/passwd in case there is no /etc/default/rmt - Add a security check in star's extract mode. Files containing /../ will be skipped by default. Exceptions are -w or -.. (the latter is a new option) has been specified - New option -.. to tell star that extracting files containing /../ in the path name is OK. - New option -secure-links to tell star to skip hard links and symbolic links that have a link name starting with / or contain "/../" in the link name. Note that it is impossible for a tar implementation to prevent any possible exploit. It is the duty of the user to act carefully. For this reason, -secure-links has not made the default behavior. It cannot work 100% correctly but it gives a wrong feeling of security. - New error control tag SAMEFILE allows to check for links where source/destination point to the same file. - Added SECURITY & LSECURITY error control to the man page. - Fixed a bug that caused star to use a wrong length for extended TAR headers. As a result if this bug, a wrong UTF-8 -> ISO-8859 coding could occur. - Added a test that prevents that star would remove a file if the tar archive contains a had link to the file itself. 0 -rw-r--r-- root/root Jul 25 20:06 2003 f1 0 Hrw-r--r-- root/root Jul 25 20:06 2003 f1 link to f1 If the archive is hand crafted and the file itself has been removed, it would have been possible to remove close to any file if the caller of star has the needed permissions. - Added a test that check whether source/destination are the same when copying a instead of making a hard link. This prevents star from removing the file by accident. - New option -s replstr implements 'ed' like pattern substitutions as documented for 'pax'. - Intercative (manual) renaming now allows longer file names than 100 characters to be typed in. - -p does no longer imply -dirmode if in create mode. If you like to have the old behavior, call star -c -dirmode .... instead - New option -copy This option allows three new operation modes: - Without other commands: Copying files and directory trees to a target directory in a very efficient way. The last file type argument is a target directory. star -copy -time -sparse -acl -p source_dir | files target_dir - In conjunction with the -diff command: Comparing two directory trees in a very efficient way The last file type argument is a target directory. star -copy -time -sparse -acl -diff -v diffopts=... source_dir | files target_dir - In conjunction with the -t command: A way to get a one pass tar like listing. In this case all file type arguments are use to list. star -copy -tv source_dir | files - Several small bugs in the FIFO have been fixed. These bugs did only affect the new -copy mode. - Debugging via command line arguments (rmt debugfile) has been disabled for security reasons. - Allow shorthands for star -copy -t -v -> star -ctv star -copy -diff -> star -c -diff - Do not try to get current working directory if star -tv -C dir has been called - Make FIFO code mark the sync pipe files "close on exec" so a bzip/gzip will not inherit them and prevent the FIFO from detecting the death of the other side - Call on_comerr() with fifo_exit() routine so an arborted star will not leave the FIFO process and the bzip/gzip process after it did die. - Call new volume script with two parameters: 1 the next volume number 2 the file name of the next volume - Better man page for -no-fsync now better describes Linux kernel implementation design flaws (that make programs that like to grant data integrity slow), and gives hints when using -no-fsync may speed up things on Linux on expense of data integrity. - Better man page for for tar archive format description - New command 'spax' implements a POSIX.1 pax style command line interface on top of star. The command is basically SUSv2/UNIX-98 The following extensions from SVSv3 / POSIX.1-2001 are implemented: - The options -H and -L - Support for the PSOX.1-2001 extended TAR header format called 'pax'. This makes 'spax' the first pax like command that supports this infinitely extensible and highly portable archive format. The following limitations currently apply: - No support for the -l option (create hard links if possible in copy mode). - The privileges option -pa is ignored - The privileges option -pm will not only not set the mtime but also not set the atime in extract and copy mode. - without -po SUID/SGID permission bits are not masked off. - Pattern matching for command line type args is not yet POSIX/PAX compliant. It should emulate the shell's way of matching file names where '/' is not part of the pattern and each path name component needs to match separately, but it treats a filename like an unstructured piece of text. Although there are several limitations, spax should be POSIX compliant enough for the everyday work. Rationale: spax only implements a limited set of options to grant best POSIX compliance. Anything you can do with spax may also be done with star. To be able to do this, a new set of options has been added to star for this reason. - New options in star: -pax-ls Switch to POSIX ls/pax style listing -pax-match Allow patterns in file type arguments -pax-c Invert matching from file type arguments -pax-n Allow only one match per pattern -pax-i PAX style interactive mode -pax-p PAX style privileges option setup -pax-L Follow all symbolic links (PAX/POSIX style) -pax-H Follow cmd line symbolic links (PAX/POSIX style) - list= option now also works on -copy mode - Support for POSIX.1-1988 CPIO archive format. Two new formats are available: cpio The POSIX.1-1988 CPIO format odc This is what SYSvR4 cpio -Hodc understands Unfortunately SYSvR4 cpio is not fully POSIX.1-1988 compliant. - Support for SYSvR4 CPIO ASC and ACRC formats (cpio -o -c or cpio -o -Hcrc). The checksum with -Hcrc is ignored in extract mode. The star header format names are: asc Equals to what SYSvR4 cpio -c creates crc Equals to what SYSvR4 cpio -Hcrc creates - Limited extract support for UNIX.V7 binary CPIO archives. - Do not do sparse file checking in -diff mode if the archive format does not support to archive sparse files. - Fixed a typo on the property set up that caused star to print incorrect bad checksum messages in some cases. - First support for Linux extended file attributes. Thanks to Andreas Grünbacher for the first implementation. Note that this implementation is not generic enough to cover more general Extended File Attribute implementations as found on Solaris. The current implementation thus may go away in the future if star implements support for Solaris Extended File Attributes. - If a archive contains Extended File Attributes, then a long listing will show up a '@' after the permission mode string. - New error control attributes: "GETXATTR" & "SETXATTR" - Star is now able to create old binary CPIO archives. Note that star always creates binary CPIO archives in network byte order. Other cpio implementations create binary archives in host byte order. Use star -Hbin to create old binary CPIO archives. - Messages about unknown POSIX.1-2001 extended header keywords are now printed only once. - New program "suntar" should behave exactly like /bin/tar on Solaris - New program "scpio". This program is SUSv2 cpio compliant except that the -l option is not yet supported. It is also SVr4 cpio compliant which a few exceptions - defaults.c now is able check for archive entries in /etc/default/tar Currently only used from suntar.c - Set errno = 0 before FIFO sync pipe read to suppress wrong error message in case star is aborted. - star.c now has a new option (not yet a flag) to allow -C to work like it does in old BSD tar. This is used by suntar.c - Special option parsing for Solaris tar (suntar.c) has been added to docompat() - Handle EINTR for stat()/lstat() in getinfo() - New man page for the star archive format - -U does no longer unconditionally remove the target (it has never been documented anyway). If you like the old behavior, call star -U -remove-first - The exception handling for missing directories and existing files that need to be removed is now the same if the target is a plain file. In previous versions of star, plain files have been handled differently. - Fixed a bug that caused star to hang if an GNU tar 'M' header was seen. This was because 'M' did incorrectly make it into the list of extended header type flags. - Following POSIX PAX Rationale ././@PaxHeader now has TUREAD|TUWRITE Permissions Thanks to a hint from Glen Fowler gsf@research.att.com - GNU Long names and GNU Long links now also follow the TUREAD|TUWRITE Permission rule. - star now does no longer hang if a POSIX.1-2001 extended 'g' header is encountered. Thanks to a hint from Glen Fowler gsf@research.att.com - New program 'gnutar' should behave exactly like GNU tar except that it writes POSIX.1-1988 TAR archives by default and that it automatically understands all archive formats that are used on UNIX. It of course also auto detects and uses de-compression. If you like to replace GNU tar on a linux system, you may do: su cd /bin mv tar gtar cp opt/schily/bin//gnutar tar The intention of this program is to allow Linux users to migrate to a tar implementation that honors POSIX standards while still being able to read old non-standard GNU tar archives and staying with the old GNU tar command line syntax. If you discover a problem that is caused with deviations to the real GNU tar or caused by missing features, please send me a mail. If you are unhappy with this "gnutar" please keep in mind that it took only 8 hour to write this gnutar.c If you are able to emulate star from another tar implementation in less than 8 hours, give me a call! - suntar/spax/scpio now use a unique function to check if the used options are useful. - star now also understands -0 .. -7 as a shorthand for archive entries that are inside the file /etc/default/tar or /etc/default/star may be used. - New option -Z calls 'compress' - New option compress-program=name calls 'name' as compress program. Use instead of -Z, -z & -bz - New option -bsdchdir. Star by default stays in a directory that has been selected via a C= option. With -bsdchdir in effect, star changes back to the directory from where star has been started directly after the next file type arg. - Star now checks if it has been called with enough parameters. If the new check believes that star would otherwise have written amn empty archives, it writes an error message and aborts. Please test! As this may be buggy. - Fixed a bug introduced by the XATTR patch from Andreas Grünbacher: Changed snprintf() -> js_snprintf() to allow compilation on systems without snprintf() - The 'Total' statistics that are printed during a media change are now correct - New option -multivol If -multivol is in effect, no logical TAR eof marker is written before the medium is changed. In read/extract mode, a hard EOF condition causes star to ask for the next medium. Warning: do not expect that the current implementation will not change. It may be that future versions of star will not deal as expected with the multi volume archives from this version of star. The current multi volume implementation is the first step towards a universal multi-volume implementation. I am looking for volunteers who like to test and to help with the implementation. - Star now supports reading 'g'lobal POSIX.1-2001 extended headers - Star now creates a 'g'lobal POSIX.1-2001 extended header with a "SCHILY.release" tag if an archive type has been selected that would otherwise use SCHILY.* "vendor" specific POSIX extensions. The content is the release string that is used with star -version - First attempt to support multi volume writing with automated tape-end recognition. To use this method of multi volume support, call star -multi-volume ... and don't specify tsize= To read the tapes back, you also need -multi-volume IMPORTANT: The current implementation is an intermediate state of the implementation. There is absolutely no check if the 'next' medium is the right continuation for the current medium. The next version of star will use specific volume information in a 'g'lobal POSIX.1-2001 extended header to insure that the right medium is used. Please test if the method to detect the EOT condition works for your platform and your Tape Drive and report problems! - Trying to correct the 'Total' numbers that are printed from the star statistics. This is only printed in multi volume mode. - New option -qic525 includes size information for QIC525 tapes. - -newer now uses a time stamp with microsecond resolution (microseconds are not yet used). - Dump date management now includes a time stamp with microsecond resolution (microseconds are not yet used). - Star now does no longer emit extensions to POSIX.1-2001 if called with -Hpax If you like to create the Star specific extensions, use star -Hexustar This causes "vendor" specific SCHILY.* extensions to be omitted if "pax" archive format has been selected. The effect from this change is that e.g. star -Hpax -c -acl ..... will no longer archive ACL entries. This is how it has been documented since the last two years. star -Hpax is now a vanilla POSIX.1-2001 format - -bsdchdir now works correctly for file type arguments that are not preceded with a -C option - star -c and star -copy now use a common code for the create side of the task. - star -version as well as scpio -version, spax -version, suntar --version and gnutar --version now print a modified version string that makes it obvious that 'star' based software is used. - new star option -no-dirslash suppresses to add a "/" to directory names - suntar now supports -P via -no-dirslash - star now prints directory names in the same way as they are used for the archive. If the archive appends "/" to directory names, then a "/" shows up in listings too. - 'gnutar' verbose printing in -x and -c mode now looks as if star -tpath has been called - Dump date archive management does now deal with microseconds. - Star man page now describes the Dump date archive format. - Star archive format man page now includes the new Volume header tags that are used with the 'g'lobal POSIX.1-2001 extended tar headers. - The archive type name handling has been unified with a globally used table. - A new global volume header data structure has been introduced. - The time stamp read function for 'x'tended POSIX.1-2001 tar headers now also deals with a sub second granularity that is less than nanoseconds. - Many SCHILY.volhdr.* extended POSIX.1-2001 tar header tags have been added. - A SCHILY.archtype tag has been introduced. This tag allows to reliability detect archive formats that are based on clean "vendor unique" POSIX.1-2001 "pax" format enhancements. Introducing a reliable multi-volume mode. The reliability comes from new volume header tags that allow to verify the correct volume in read back mode. star tsize=xxx -c .... does multi-volume without splitting files across volumes. The resultant archives are independent and cannot be read back by a single star run. This feature is in star since the last 10 years. star -multivol does multi volume triggered by EOT conditions. Files may be split across volumes. The resultant archives should be read back by a single star run. This is new star -multivol tsize=xxx -c ... does multi volume with a limited medium size. Files may be split across volumes. The resultant archives should be read back by a single star run. This is new The reliable multi volume mode only works if the tape record size (usually 10 kB) is not smaller than the volume header; so reading the first tape record allows to verify a volume. A future star version will add Multi volume continuation headers that allow to start a multi volume extract past volume #1. This may be needed if a tape has become unreadable and allows to continue extraction past the bad medium. To do this with the current star release you would need to call "star -i ..." to skip over "bad" archive headers as the archive (if starting with the end of a split file) does yet contain a pointer the the next valid archive header. The fact that the multi volume continuation headers have not yet been implemented is not considered to be a real problem as GNU tar for the last 10 years only has a broken implementation of multi volume continuation headers. GNU tar rejects to accept 1-5% of the continuation volumes due to a conceptional bug. The current star release however, is able to read back those archives as star does not try to verify GNU tar multi volume continuation headers but only skips them. - Better syntax checks for POSIX.1-2001 extended headers. Now that there is a second POSIX.1-2001 aware tar implementation (from AT&T research), we need to take more care when reading POSIX.1-2001 archives as other worse implementations may occur in the future. - The decimal number output routine for POSIX.1-2001 headers is now able to convert negative numbers. - A new routine for outputting unsigned decimal numbers in POSIX.1-2001 headers has been introduced. - Star archive format man page updated: SCHILY.acl.* and SCHILY.xattr.* documented. Added a note that there is not yet a documentation for SCHILY.fflags - Change tape routine enhanced so that it is able to change to the same tape drive in case a wrong media has been inserted when trying to read back multi volume archives. - Some new precautions have been taken to put more variables into the shared memory. This is needed so that some additional information that is fetched after the fifo did fork may be used from the other process. - Verify volume headers after a media change in multi volume mode. - fixed three bugs in the routine that reads /etc/default/*tar -0 .. -7 abstract archive names. - star did not read /etc/default/star at all - tsize & block size entries have been used with wrong multipliers - Man page enhanced for the new multi volume properties: star -c tsize=xxx creates multi volume archives that may be read back each separately. Files are not split across volumes. star -c -multivol or star -c tsize=xxx -multivol splits files across volumes and the resultant media must be read back in one star run. - tsize is now silently rounded down to a multiple of the tape block size. - Tape change in write mode now writes a POSIX.1-2001 based volume header that is used for media verification. - Fixed a bug in the old multi volume mode (where files are not split across volumes) that caused extended headers to be written to the old volume and the related file to be written to the new volume. - The POSIX.1-2001 based dump dir values have been slightly modified: Old star versions did only contain a single null byte at the end of the record. New star versions have two null bytes at the end of the record and the second null byte is counted in the length value. Old archives may be read back with new star versions. The new method is more "correct" as the second null byte is a "end of list" null byte that has been created by fetchdir(). The single null byte in old archives was the null byte for the last string and not the "list of strings" terminator. - The SCHILY.dino keyword (planned 1.5 years ago) has been implemented. This keyword helps to implement better true incremental dump support. It is needed to detect file renaming on file systems that don't change st_ctime on a rename(2) operation (e.g. ReiserFS on Linux). If SCHILY.dino is present, the algorithm for the incremental restore is much simpler. - A new reusable function to compare directory contents has been implemented. This is needed to implement incremental restores. - A workaround for a FreeBSD/MacOS X bug in struct timeval.tv_sec vs. time_t has been implemented. - A new option -restore in preparation for the planned incremental restore has been introduced. - A new option -xdot has been introduced to help to avoid the message "star: current './' newer." when calling star -copy -C from_dir . to_dir - A new option -j as an alternative to -bz has been introduced. This is mainly to help GNU tar users to convert as GNU tar did not follow our -bz option when it introduced bzip2 compression. - Fixed a bug that caused star to complain about a NULL directory name when calling: star -ctv -C some_dir . - Fixed a bug that caused the wrong POSIX.1-2001 xheader tag content to be moved if the length of the length field had been guessed wrong. Move started at new offset but should start at old offset. This was a serious bug that could cause corruption in extended headers if non US-ascii characters appeared inside filenames. - Hopefully last "fix" from Andreas Grünbacher to work around a problem with defective ACL texts in tar archives created on Linux. - align_test modified to make some vars static. This was needed to work around MacOS X name space pollution and a linker bug - -multivol in create mode now is only allowed with star formats. - New function _getinfo() introduced for all simple stat() purposes. The background is that getinfo() may allocate memory if it looks for ACLs or extended file attributes. - Extended header information is now deleted according to the POSIX.1-2001 standard if the length of the value string is 0. - The star archive format man page has been massively enhanced. This man page is far from being complete but it is now more complete than archive format man pages for other tar implementations. - Fixed a bug that is caused by the fact that you need to break clean layering in order to implement EOT induced media change. If a data section from a POSIX.1-2001 extended TAR header was hit by a medium change, then the content of the original extended header data was overwritten by the data from the volume header. Star now implements a two level stack for the xheader data. - Fixed a bug with several calls to execl(2) that could cause problems on architectures where sizeof(int) != sizeof(char *). This is usually the case for 64 bit compilations. As the number of parameters actually used was 7, the problem was not only present on IA64 systems but also on 64 bit Sparc compilations as Sparc allows to pass only 6 parapeters via registers. Note that his is a problem caused by the bad C-99 documentation. A pointer constant is not a pointer! and the C-compiler is unable to do automatic type conversion for varargs parameters. All varargs functions are affected that detect the end of a var arg list via a null pointer. Thanks to Christian Weisgerber for reporting. - First step towards reliable support for starting to read back multi volume archives past volume #0. Star now writes multi volume continuation headers for split files if called with -no-fifo. The FIFO case is much more complex and will be implemented in a later version. - New POSIX.1-2001 header tag "SCHILY.offset" is used for multi volume continuation offsets. - Introducing an enhanced version of the BSD bitstring library for implementing multi volume continuation headers in the -fifo case. - First attempt to implement multi volume continuation headers for the default star case when -fifo is in effect. This is done by managing a bit map for blocks that hold a valid TAR header. - Better readable output when star does automatic decompression. - Fixed the recognition of 'packed' archives. - Added support to detect 'pkzip' compressed archives. - New option -print-artype prints compression and archive type on a single line and exits. - Introducing a new option artype=headertype as alias for H=headertype Note that POSIX.1-2001 defines a command independent option -H to follow symbolic links encountered on the command line. Star currently still follows the idea introduced with SVr4 cpio in 1989 -H headertype, but it may in future try to follow the POSIX.1-2001 ideas. I am currently thinking about a second new (short) option -A headertype please comment! - Require the -M option for dumps with level= - Better documentation for the -tpath option - Try to fix a problem in the copy mode with: echo README | star -copy list=- /tmp where both the read and the write process did a chdir("/tmp"). Thanks to Rasmus Hahn - Fixed a bug that caused star to reject files > tape volume size set by tsize= even with -multivol active. - If a file name is too long for the current archive format or cannot be split in POSIX.1-1988 flavor, now exactly one error message is printed. - Better error message when star rejects to create an empty archive (no file type args) - Fixed a bug that caused star to dump core with command lines like: star -c -diff -C /tmp . /etc - New makerules for DOS/DJGPP - Change fetchdir.c not to use DIR*->d_ino for DJGPP - Call setmode(file no, O_BINARY) also for DJGPP for files where binary operation is needed. - First attempt to implement build in compression pipes for DJGPP to allow star -xz .... - Changed rmt.c so it compiles to a dummy program on DOS/DJGPP - Thanks to Alex Kopylov reanimatolog@yandex.ru for the help with the DOS/DJGPP port. Note that in order to compile star on DOS/DJGPP you need smake-1.2a21 or newer. GNU make does not seem to work for a DOS compilation. Note that you need to read - install-sh now knows about platforms that allow to give away files (like SCO UNIX); it will no longer leave undeletable (by non-root users) files in /tmp if not called by root. - Support for calling 'smake install' on systems that use a '.exe' suffix for executable files has been added. - Fixed a bug with Extended File Attribute handling that caused the '@' XFA indicator to be displayed for every file. Thanks to Leland Lucius (llucius@tiny.net) for his patch. - Added support for "diffing" ACLs. Thanks to Leland Lucius (llucius@tiny.net) for his demo implementation. You need to call star -diff -acl ... and use an archive that contains ACLs if you like to compare ACLs. - Added support for "diffing" Extended File Attributes. Thanks to Leland Lucius (llucius@tiny.net) for his demo implementation. You need to call star -diff -xattr ... and use an archive that contains Extended File Attributes if you like to compare Extended File Attributes. - Added support for "diffing" Extended File Flags. You need to call star -diff -xfflags ... and use an archive that contains Extended File Flags if you like to compare Extended File Flags. - mconfig.h now supports make COPTX=-DNO_FORK & COPTX=-DNO_VFORK - librmt and the rmt server have been enhanced to allow long file names up to 4096 bytes. The historic rmt interface has not been designed to be used with plain files and thus file names have traditionally been limited to 64 characters. Note that in order to be able to use long file names with remote tape connections you _definitely_ need to use the rmt server that comes with star. - Fix a bug that caused ':> /tmp/empty; star -u f=/tmp/empy ....' to dump core. - Do not abort with "Will not overwrite non empty files in compat mode... if called with star uf /tmp/file. We will later check if this is a real tar archive so there is no problem in this case. - snprintf() in libschily modified to match SVSv3 (POSIX.1-2001) - Fixed a minor bug that caused star to complain about "star rf filename ..." when "filename" was not an empty file. - The handling ot the -p option has been massively changed. The old way was to always extract file permissions and to extract directory permissions with -p. The new way is to extract file/directory permissions for new files modified by the umask if -p has not been specified old files/directories keep their old modes. It -p has been specified, permissions for files and directories are restored to the values from the archive disregarding the umask. If star is called by root, -p is implied. - New option -no-p to avoid automatic activation of -p in case star has been called by root. - The directory stack code has been enhanced to allow to do delayed restores of directory permissions. This finally allows to extract "read only" directories from an archive. Star will never grant more permissions to other users while doing this. - Fixed a minor bug in rmt.c in the handling of too long file names. The only result of the bug has been that in case of too long file names the protocol may have been screwed up. - cpio now by default restores all permission (like star -p). - Better printout for the FIFO block remainder moving statistics with -fifostats - New FIFO statistics print current FIFO fill ratio in addition. To check current FIFO fill ratio, just hit ^\ (or ^T on FreeBSD). - Try to use sigaction()/sigvec() instead of signal() to be able to set up restartable syscalls. - Try to avoid setting times/modes for targets of hard links if the file type of the hard link is unknown by the archive but really is a hard link to a symlink. Note that you should avoid to create portable archives that contain hard links to symlinks. Hardlinks to symlinks are not mandatory by POSIX and implementation specific. For backups, it makes sense to use star's dump format; with star's dump format, hard links to symlinks have already been handled correctly before this fix because star then knows the file type of a target from a hard link. Star's dump format is used with star -copy, so star -copy has not been affected. - star -cz and similar now also work on DOS/DJGPP Thanks to Alex Kopylov - New supported format "v7tar" allows to create tar archives with UNIX V7 restrictions: - Only plain files and hard links (no directories and symlinks) - Only files < 2 GB. - tartest now sets stdin into binary mode (needed on DOS and similar). Thanks to Alex Kopylov - New options -copyhardlinks/-copysymlinks/-copydlinks for improved link copy support. The code has been developed after an idea from Alex Kopylov - New option -match-tree If in create mode a pattern did not match a directory, star did always still recursively scan the content of this directory as complex patterns could allow files inside the directory tree to match. Using -match-tree now allows to efficiently exclude whole trees from scanning. This helps to avoid scannings directory trees that are on remote file systems or contain excessive bad blocks. - Correctly deal with chars that are by default unsigned on IRIX. This fixes a bug that caused star to output the following error text: errmsgno(EX_BAD, "Bad Option: -%c.\n", archive); - The options -copyhardlinks/-copysymlinks/-copydlinks have been improved to be able to copy symbolic links to files that appear later on the archive and to symbolic links to symbolic links. The code has been proposed by Alex Kopylov - Close the tape too, when the FIFO is used. - New option -dumpmeta Without this new option, star in incremental dump mode now also archives file content if only st_ctime of a file is newer. This prevents star from omitting the file content for new files that have been created with old date (st_mtime is older than st_ctime). - star now does no longer loop if there is a loop in the directory structure (e.g. from a hard link to a directory). Star did not loop before in case the -link-dirs option has been specified. Now star does not loop even if -link-dirs is not in use. - Added forgotten code so star is now able to extract hard links to directories even when the archive is in star's dump format. - star now also archives unreable directories (but of course without content). - New make file rules for Win32/Mingw - setmode(f, O_BINARY) extended for Win32/Mingw - star -restore is now 1000x faster than before - First attempt to start dealing with the incremental dump information in the archives while in -restore mode. - New option -xdev as alias for -M - -restore now implies -xdot - The SCHILY.volhdr.dumptype= header has been activated. If the -C option in a dump run is referring to a root directory of a file system, the resulting dump ps called a "full dump". If the -C option in a dump run is not referring to a root directory of a file system, the resulting dump ps called a "partial dump". - /etc/tardumps is now only written if the dump is a "full dump". - star now writes a message after /etc/tardumps has been written. - /star-tmpdir is now created in -restore mode - sym_init() adds new consistency checks in -restore mode - /star-symtable now is created with mode 0600 - libschily's stdio now uses #include "schilyio.h" instead of "io.h" - Warning for GNU make problems added - Fixed a security bug in remote tape support librmt/remote.c (the RMT client). - Incremental restore has been implemented. This makes star the first true incremental backup system that is TAR based and that passes basic verification tests for: - Removed files - Removed directories - Renamed files - File removed and new file of different type created with the same name. This may include the fact that the inode number of the new file is the same as with the old file. - Renamed directories Note that it is unclear whether star can handle renamed hard links to directories. Please test and report. Star will write messages for unexpected problems. To create a level 0 dump: star -cM -dump -sparse -acl -link-dirs -level=0 -wtardumps f= -C / . To create a level 1 dump: star -cM -dump -sparse -acl -link-dirs -level=1 -wtardumps f= -C / . To extract a level 0 dump: cd / star -xpU -restore f= To extract a level 1 dump: cd / star -xpU -restore f= Notes: - You need to use the -M/-xdev option as star currently only allows to dump a single filesystem at a time. - You may do the restore only to a single filesystem (no sub mounts allowed) - The filesystem where you start the restore needs to be empty (except for lost+found) - star does not yet remove files that have been removed between incremental dumps. Files that have been removed between incremental dumps are moved to the directory star-tmpdir. Before you start to extract the next incremental, you need to remove all files in star-tmpdir. - Star now correctly sets up permissions, time stamps and owners for directories that have been extracted because -xdir or -xdot has been specified. - Star now correctly reports read error on files in create mode. Before, star did report that the file did change size (shrink). - New rule file x86_64-linux-gcc.rul allows compilation on AMD-64 systems without automake enabled make programs like 'smake'. - Several changes to make 'lint' happy. - Make star report different data in any case where the size of the file in the archive differs from the size of the file on disk. - Set Linux xattr only in case that the archive did contain xattr values for the current file. - The algorithm used to fill up the archive to a specific block size has been corrected. This mainly causes scpio to behave more correctly and to create archives of the mininum possible size. - scpio and spax now also support the archive=header option (like star). - scpio now correctly supports the SVr4 -C option. - The default archive format used by scpio has been changed to -Hodc. This is more POSIX 1003.1-1988 compliant and also gives better compatibility than the -H bin format (used before and used by SVr4) which has byte order problems. - The output with the -debug option now prints the archive format in text version and not only in the star specific internal numeric value. - Manual page for scpio new (based on the Open Group Standard and with permission of the Open Group). - First version of a manual page for spax new (based on the IEEE / Open Group Standard and with permission of the IEEE / Open Group). - Manual page for gnutar new - Manual page for suntar new - smt now correctly opens the tape drive for the "load" command. - Added a note related to the extended file flag design bug on Linux to the star man page. - Star now aborts if you call star -c list=xxx files as it does not use the "files" argument. - Added a usage() prototype to tartest.c - Star now allows "partial" dumps to update the data base file /etc/tardumps. Partial dump entries are marked with a 'P' directly after the dump level. - New option -force-restore tells star to accept partial dumps in restore mode. Note that with partial dumps, there is no guarantee that renamed files are handled correctly during incremental restores. - Star now evaluates the SCHILY.archtype= entry of the first POSIX.1-2001 extended header to get the archive type. - As star (in the FAT binary variant) now defaults to the "suntar" behavior (which is closer to the historical tar than the "star" behavior), star no longer writes a 'g' header by default to have better compatibility with historical tar implementations. - The star man page has been enhanced by a "INCREMENTAL BACKUPS" and a "INCREMENTAL RESTORES" section. - Man Page for scpio completed. - Star now checks whether the incremental restore procedure is done using the right order of incremental dumps. - Better man page for star for incremental dumps/restores - Reading the star volume header from incremental dumps now results in the correct microsecond values. Before tv_usec has been assigned to the nanosecond value. - Better autoconf tests for ACLs - New option -force-restore now finally works. - Added a workaround for a Linux kernel developer Bug: Old Linux Kernels have New Linux Kernels have a broken and a usable - Better config.* for IBM s390 machines - Changed librmt/remote.c to make star compile again on HP-UX. - Correct a side effect of a recent star -diff modification. Star now does not try to compare a hardlink (with size 0 on the archive) against the data of a disk file. - Fixed a bug introduced with the new enhanced archive type recognition that evaluates the SCHILY.archtype keyword in a POSIX.1-2001 extended header. The error message was: star: Syntax error in extended header: non digit in len. - more debugs for star -restore. Use smake COPTX=-DRES2_DEBUG to activate this code. - sym_dirprepare()/sym_typecheck() may now modify imp * - Better restore warning messages - padd_node() now sets flags (e.g. I_DIR) for old tmp nodes - sym_addrec() no longer adds dir content into files that need to be removed in favor of a dir of the same name. - sym_dirprepare() now may remove files that turned into a dir sym_dirprepare() then also returns a modified imp * pointer - Write a file "star-symdump" with "Panic: amnesia ..." The file "star-symdump" contains the current database status. - sym_typecheck() now honors I_DELETE in move2tmp() loop - sym_typecheck() now calls purgeent() for removed files. - Initialize do_void = FALSE; in diff.c to make GCC happy. - New option -prinodes prints inode number from archive if present if star is called with -tv - Added /* LINTED */ comments to some files to tell people and lint that there is no out of bounds array indexing. - New options fs-name= name & dumpdate= name help using star with file system snapshots. fs-name= allows to have the right FS name in the archive and in /etc/tardumps dumpdate= allows to have the right timestamp in the archive and in /etc/tardumps - Man page now includes an example on how to create incremental backups using file system snapshots - New keyword "SCHILY.volhdr.cwd" is used for the real working directory with incremental backups when fs-name= name is used. - New diff option "lmtime" allows star to exclude checking the mtimes for symbolic links only. - Star now automatically removes all files from ./star-tmpdir if in incremental restore mode and the environment variable "STAR_DEBUG" is not present. - New Option -dump-cumulative/-cumulative allows star to be used to synchronize filesystems in an efficient way. - Man page enhenced to describe how to use star to synchronize filesystems. - Star now writes a file ./star-symdump if a problem is detected that will result in a coredump - spax man page now competely converted from the text file format from The Open Group to 'troff'. - New program star_sym to convert star's incremental restore database into a human readable format for better debugging of incremental restore related problems. - star now checks whether the selected archive format supports ACLs if called in create mode with -acl. - Fixed a bug that caused star -match-tree to behave incorrectly if no pattern matching was involved. - Changed license from GPL to CDDL - Included acltext.c from OpenSolaris sources. This allows star to support ACLs on Solaris systems that are older than Solaris 9. - acltext.c modified to allow star to extract Tar Archives with ACLs on machines that do not have a uname to uid & gname to gid database for the users in the archive. Star in this case extracts ACL users/groups by numeric id. - Add acltext.c to star_fat.mk - Make star_fat the default. Previously, star, suntar, gnutar, scpio and spax have been different binaries. - Added support for the Linux EXT2_JOURNAL_DATA_FL file flag. See man chattr ('j' flag). - Do not compile acltext.c on Cygwin. - Added debug code to restore.c to help finding the minor bug in the incremental restore code. - Try to avoid a core dump when checkerr() is called with a NULL ptr file name. - fetching ACL info via get_acls(info) has been moved to create.c to speed up the archiving process. - Broken error message string on restore.c fixed - Better syntax checking and messages for POSIX.1-2001 extended tar headers: we now check whether each record ends with a \n - Workaround for an old broken /bin/sh found on BSDi - Workaround for chmod being in /usr/sbin on BSDi - make DESTDIR=/some/path install is now supported - Autoconf test for broken Linux Kernel include file and workaround for the unwillingness of the Linux Kernel Maintainers to fix their bugs. - Added support for the SEEK_HOLE / SEEK_DATA feature of current Solaris development releases. This allows to implement efficient support for sparse (holey) files. Note that star did implement a similar improvement this for Solaris-2.3 .. Solaris-2.5.1 but the related call did disappear with Solaris-2.6 - Fixed a bug that caused star to list the size of the file in the archive instead of the real size in case sparse file handling was done in POSIX.1-2001 mode and the file size was greater than 8 GB. - star.4 extended to mention that a "SCHILY.realsize" keyword needs to be after any "size" keyword. - Fixed a bug that caused star to dump core while extracting a file with more than 10016 holes. - The function to read the data from sparse files has been optimized. The speed for archiving sparse files has been enhanced by approx. 50%, it is now nearly 2x the speed from ufsdump. - Avoid unneeded lseek() calls for sparse files in -onull mode. - Support for extracting hard links in the SVr4 cpio CRC archive format has been added. - Fixed a bug in xheader.c that caused star to write to a wrong buffer addres after a realloc() while archiving inode # lists for directory content. As the probability for calling realloc() for this task is extremely low, the problem did hit during dayly incremental backups once every three months. It seems that we did now fix the last known problem with incremental backup/restore with star. Thanks to: Roland Friedwagner - New autoconf checks for OS (Linux) madness (broken kernel include files). - New option -read0 as a counterpart for gfind -print0 is used when reading filenames with the list= option. Note that it is better to just use the built in -find code in star... - New option pkglist= (which is an unstable internal interface for the Schily Source Package System SPS). It allows to overwrite permissions and uid/gid for files. The file used with pkglist contains a list if file names (each on a separate line). The format is: filename permission uname gname e.g. Makefile 0444 root bin All field that should not overwrite the values from stat(2) may be replaced by '?', e.g. Makefile ? root bin - Multi Volume support has been completed: - Star now supports to read back multvol archives in H_XSTAR & H_XUSTAR Format - Star now more completely evaluates the header bitmap of the FIFO to find the "nearest next header". This helps to see more files when starting to read back a multi vol archive on a volume > #1 - Star now includes support to protect a critical section in the volume media change code. The variable that is shared between the archive process and the write process to tell the write process where the next header past a large file will be can no longer be modified by the archiver process while the tape process checks the content of the variable and the FIFO bitmap. - New keyword "SCHILY.volhdr.tapesize" allows star to verify the archive volume size on read back. - Warnings and debug messages related to EOF recognition now contain archive block numbers. - Avoid star core dumpd in incremental restore mode when the inode database is corrupted and causes NULL pointers inside star's data. - For suntar & tar, tar -x is now star -xU - Unconditionally overwrite non-empty plain files if the "tar" command line interface is active. This is not true if star is called as "star" or "ustar". Note that while this gives full compatibility to historical tar implementations, it may allow people to accidentally overwrite random files from miss typed command lines as the tar command line syntax is error prone. - Autoconf now correctly detects contiguous vs. non-contiguous device Major/Minor numbers when compiling for 64 bit CPUs. - The -copy option has been documented in the EXAMPLES section of star's man page. - The star directory stack (delayed time/mode setting) now also works correctly when the directory names in the archive do not end with a '/'. - scpio now includes "star -xdir" as the classic UNIX cpio program always unconditionally extracts directories. - Several bugs in acltext.c fixed: - it did assume that a uname / gname fits into 8 chars - it did assume that a numerical uid/gid value fits into 8 chars - The variable id was not always initialized. - Fixed a typo in a printf format string that could cause core dumps. - Star man page now mentions the new efficient support for archiving sparse files on Solaris 11 - nameuid()/namegid()uidname()/gidname() converted to use uid_t/gid_t as parameter - Struct FINFO converted to use uid_t/gid_t for f_uid / f_gid - Struct FINFO converted to use nlink_t for f_nlink - Struct FINFO converted to use mode_t for f_mode - Struct FINFO converted to use mode_t for f_type - Fixed the option -xdot to work correctly for archives that do not start with a "." or "./" entry. - Star now includes code to allow to skip large files (>= 2 GB) on non largefile aware systems. In order to allow this, a C-compiler is needed that supports the type 'long long'. - Range checking for selected parts of the TAR header - Star now takes more care for converting numbers in the historical tar header. - Range checking for POSIX.1-2001 headers. If a critical type overflows on extraction, the file is marked for having bad meta data and skipped. - In case of uid/gid overflows on extract, star now maps the overflowing id to nobody to avoid assigning the files to arbitrary users. - diffopts=lmtime is now implemented in a less confusing way. The man page now describes the behavior correctly. - New diff option "xtimes" as an alias to times+lmtime. New Options for SchilliX & SPS: - New option umask=mask option allows to set the umask that is used by star. This allows to e.g. control the permissions of directories that are created as intermediate directories. - New option dir-owner=user allows to set the owner used for directories that are created as intermediate directories. This only works if star is run as root. - New option dir-group=group allows to set the owner used for directories that are created as intermediate directories. This only works if star is run as root. - Workaround for a /usr/ucb/tr related endless loop that could cause gmake (not smake) to hang on Solaris if /usr/ucb/ is in PATH before /usr/bin/ - star -x -ctime now also works with POSIX.1-2001 tar extensions that include usec time stamps. Note that although star tries to correct the time spent in syscalls, there is still a tendency that the system time will be a bit too slow while star -x -ctime is running. - Makefiles fixed so that 'make CCOM=cc64' will even work on a maiden (just unpacked) source tree. - Better template 'rmt.dfl' for /etc/default/rmt - Better template 'star.dfl' for /etc/default/star - The star man page now lists the exit codes for star - star now creates a file 'star-lock' in the root directory of a filesystem, if while restore operation is in progress. This prevents star from being run more than once (e.g. from a cron script). - get_xtime() fixed so that the print_range() function knows the len of the xheader argument. - Trying to find a workaround for a bug found on Solaris that caused a negative nanosecond value to be returned for st_mtime. - Do no longer immediately abort if less that 512 bytes are read from an archive. - Finally support extracting files into directories that are maked "read only" in the archive. - A new option -e has been introduced (similar to Sun tar's -e). It is equivalent to a errctl file that has: ABORT|ALL|DIFF * in the last line. - New error exit code -3 (253) is used if star exits because of -e or the ABORT error control condition. - New star option -data-change-warn (suntar -e) causes star not to exit with a non-zero exit code in case the size of a file changes while it is being archives. - suntar now supports the -e option - suntar now supports the -D option - Star now allows to specify more than one errctl= option. - Star now allows to have the error control definitions to be the parameter of a errctl= option. Every errctl= parameter looks like a single file from the error control file. - The errctl= feature now allows anything that may be desired in order to control the error related behavior of star. - errctl.c now calls realloc() instead of malloc() is the length of the longest pattern did increase. This avoids a small memory leak. - The star -data-change-warn (suntar -D) option is now implemented via errctl="WARN|GROW|SHRINK *" - Avoid core dumps that did occur when star was reading POSIX.1-2001 "pax" archives created by simple tar implementations (like GNU tar-1.15.1) that do not create 'g'-type headers and thus may create a path= or lpath= entry in the first tar header that is an extended header. - star.1 man page now gives better hints that -multivol and -w are interactive options that cannot be used in non-interactive scenarios like cron. - star.1 man page now includes a warning about the possibility to overwrite files outside the current directory tree if the directory is not empty before starting the restore. - star.4 man page now correctly describes signed/unsigned and bit width requirements for the integer types in the extended header. - Sun Tar header added to star.h this is in preparation for supporting the (limited) multi volume features of Sun tar. - Better range checks for the star's volume header fields in the POSIX.1-2001 extended tar header. - Using now unsigned ints for the star's volume header fields in the POSIX.1-2001 extended tar header. - Carefully using and checking for signed/unsigned numbers in all numeric field of the POSIX.1-2001 extended tar header. - Signed/unsigned discrimination for "SUN.devmajor"/"SUN.devminor"/"SCHILY.devmajor"/"SCHILY.devminor"/"SCHILY.dev" added in create mode. - get_iarray() is now using astoull() for inode numbers - New test in get_iarray() for inode number > INO_T_MAX - Now all error messages related to POSIX.1-2001 extended tar headers include the archive block number. - Flags XF_BAD_SIZE -> F_BAD_SIZE, XF_BAD_META -> F_BAD_META - New Flags F_BAD_UID/F_BAD_GID - If a bad uid or gid is detected and the uig/gid is set to nobody, then the file is no longer made suid nobody or sgid nobody. - utypes.h now includes MIN/MAX #defines for all basic OS types. - New autoconf tests for major_t / minor_t - put_dir() now no longer calls fetchdir() if (!nomount || !newfs(info)) but if ((!nodesc || dodump > 0) && (!nomount || !newfs(info))) This avoids calling fetchdir() with star -cD but only if star -cD -dump. - Star man page now warns to use -restore in case that a user only likes to extract a single file but is not going to start a complete incremental restore. - The program star_sym now includes a version number - Two powerful programs (star & sfind) announce their marriage that results in a feature enhanced star. This code integration was originally planned for the star-1.6 development cycle, but it turned out that it is possible to implement a subset of the full set of features without causing any harm to the rest of the code as long as the find code is not actually used. To the beginning of the 1980's, AT&T included a simplified cpio implementation to find(1) but this venture did not result in added value (there was only a minor speed up by avoiding a second stat(2) for every file) and the cpio archive format is outdated since a while. As a side effect, the functionality of the find(1) program is now available as a library implementation. BTW: Although the sfind(1) source is written more cleanly than the UNIX find(1) source, it did take more time to create the library code from the original sfind(1) source than it took to write sfind from scratch. The integrated find code has been enhanced compared to the standard sfind(1) code by the following primary operators: -chgrp The primary always evaluates as true; it sets the group of the file to gname. -chmod The primary always evaluates as true; it sets the permissions of the file to mode. Octal and symbolic permissions are accepted for mode as with chmod(1). Note that this version of star does not yet implement the 'X' character from chmod(1), but future versions of star will add support for 'X' permission mods. Meanwhile you could use something like: star -c -find . ( -type d -chmod a=rx -o -chmod a=r ) -chown The primary always evaluates as true; it sets the owner of the file to uname. -false The primary always evaluates as false; it allows to make the result of the full expression different from the result of a part of the expression. -true The primary always evaluates as true; it allows to make the result of the full expression different from the result of a part of the expression. The first three operators allow to modify the file meta data between the time when star fetches the meta data from the filesystem or from the archive and the time when star evaluates the file meta data while adding the file to the archive or extracting the file to the filesystem. The last two operators make it more convenient to use find(1) expressions to control an archiver like star. The basic idea behind the find(1) integration is: Define a find expression and let star evaluate the expression for every file as the first possible "filter" operation. If the "find expression" returns TRUE for the current file, this file is either archived, extracted, diffed or listed as usual. If the "find expression" returns FALSE for the current file, the file is skipped. Note that the find primaries -chgrp/-chown/-chmod modify the file meta data as a side effect. - New option -find acts as a separator between the "star" command line interface and the "sfind" command line interface. To the left of the -find option, star accepts well known star options from the past. To the right of the -find option, star expects a list of path names followed by a find(1) expression. As with future star-1.6 versions of star, star will allow more new features, it is possible to omit the find(1) expression. This results in the same behavior as if star ... -find -true had been specified. For more information, check the star and the sfind man page. Star currently suffers from the following problems: - If the archive is stdin or stdout, star redefines stdin or stdout. As 'find -exec ...' propagates stdin/stdout/stderr to the called program, this causes unplanned problems. - If the archive is stdout, star redefines stdout. As 'find -print', 'find -printnnl' and 'find -ls' outputs to stdout, this also caused unplanned problems. - Find primaries like '-linkedto' cannot be implemented in extract/list mode as they need to wo preparation work on the local filesystem that cannot be converted to work on an archive. - find options like -H -L -P are not yet implemented in star -find mode - New files: libfind/* - LLONG_MIN/LLONG_MAX/ULLONG_MAX definitions added - Added support for 64 Bit compiling on Solaris using smake CCOM=cc64 - Autoconf test for declaration extern stat() / extern lstat() added. - star -find -chmod now supports the symbolic mode character 'X' - star -tv now uses correct type casting for st_uid/st_gid with printf() calls - Star -x -C dir pat=pattern now works as documented - Star -x -C dir1 -C dir2 now works as expected - star man page now documents problems with reused file descriptors from star < file, star list=- and star -find -exec or -ls - star -pax-H -pax-L -pax-P now also sets find tree walker options. - Star now sets rdevmajor & rdevminor to 0 if the file is off type FIFO. This is to avoid range check warnings in extract mode. - Add a workaround for star -find when it is crossing a automounter mount point. Before the fix was added, star -find did complain of not being able to chdir .. because descending into the mount point would change st_dev/st_ino for the mount point. - star -x -find -exec does no longer complain of not being able to chdir home - star -c -find dir1 dir2 does no longer complain of not being able to find dir2 - New diffopts= tag: "sympath" checks whether symlink targets are characterwise equal. The old "symlink" tag now only checks whether the symlink targets are pointing to the same file. - Support for sfind -maxdepth & -mindepth has been added in create mode - Support for BeOS/Zeta shared memory using create_area() has been added. - Make star compile again on BeOS/Zeta - Make star compile on DragonFly BSD in case gnumake is used. - Star now reads answers from stderr on OS like BeOS that do not support /dev/tty - Support for compilation in 64 bit mode on Solaris added - Added support for Sparc T1000 & T2000 systems (Niagara) - Support for fine grained privileges from Solaris 10 added. - Added support for armv5teb-linux - Default install user/groups changed for Cygwin & MacOS X - Autoconf tests for /dev/tty, /dev/null & /dev/zero - Now using l*attr() functions from the Linux extended attribute interface. This fixes a bug introduced by the author of the related code in Linux. - Make star not print a Panic: Messahe for lock_ino ("star-lock") in incremental restore mode. - star -diff now uses the same sparse test (using SEEK_HOLE) as create.c uses. - star -diff fixed for directory diff checks Before, star did not find both (archive & disk) differences if the number if directories were identical and the last entries were different. Note that this bug did not affect incremental backups or restores! - Star no longer checks the devmajor/devminor values for being inside the allowed range (in restore mode) in case the related file is not a device node. This helps to unpack some older archives. - Added code to support unfixed (Sun Solaris) kernels that do not handle SEEK_HOLE in a way compatible to older OS revisions. - Tring to fix a FIFO deadlock bug that happens on very fast multi CPU systems. You should have at least a dual Opteron to suffer from this bug. The new carefully modified algorithm looks more safe. - Added a workaround for GNU tar archives with "dumpdirs" that violate the tar structuring rules. Note that star will never try to incrementally restore GNU tar "incremental" archives as not even GNU tar is able to do this correctly and as it is questionable whether this is possible at all. - Added Support for "mips64" in the makefile system. - Try to add a workaround for the this error message: star: Operation not applicable. Cannot set ACL 'user::rwx,group::r-x,other::r-x' for 'socket'. which happens e.g. when extracting with -acl and the "file" is a socket. - Better man page now tells people that the tsize= option refers to the uncompressed archive size. - Better documentation for the algorithm used in incremental restore mode. - Support for i386-darwin (Intel MacOS X) added - Decrease the CPU time needed to extract sparse files. On a slow CPU, this could double the extract speed. - Better work around for skipping sparse files in GNU tar archives that violate the tar structuring rules. - Star now skips the rest of a file in the archive if a write error occurs during extract. - Star now supports to archive and extract sparse file that end on a hole. WARNING: older star versions are unable to correctly extract files that end on a hole. Star will ignore the last hole and not extract it. - Star now honors the -force-hole option in create mode and uses the "scan hole" function instead of using SEEK_HOLE/SEEK_DATA to retrieve the hole positions of sparse files. - Added a workaround to prevent star from dumping core while trying to extract sparse files > 4 GB created with broken GNU tar. NOTE: All GNU tar versions before 1.15.91 are seriously broken and will create defective archives from sparse files > 4 GB. Star will now skip the defective files from the archive and print the following warning: star: Bad sparse data: offset 61198336, numbytes 480768 at idx 30609. star: Current write position is 4333572096. star: Skipping 'sparse-file.bin' sorry ... star: WARNING: 'sparse-file.bin' is damaged - New test added whether dirent->d_ino exists. This was not true for __DJGPP__ and seems also be false for newer __CYGWIN__ versions. - fetchdir() now calls lstat() in case that dirent->d_ino does not exist. This is slow but this is a Cygwin problem. - A better error message was added to fifo.c for a rare case that only seems to happen on Linux. - find.c now defines DEV_BSIZE to 512 in case it is not defined. - findinfo.c now defines DEV_BSIZE to 512 in case it is not defined. - The makefilesystem has been revised to allow compilation on SFU (Services for UNIX on MS-WIN - also known as Interix UNIX) and with MSVC. - The basic "fat" star binary is now named "star" again (was "star_fat" before). - Rename all *printf() calls to js_*printf() - Make sure that star x dir/ will not print "Pattern 'dir/' did not match" although there was a match. - New C++ enhanced makefile system - Makefilesystem now starts to support dynamic libraries. use smake LIMKMODE=dynamic to build a share library version of this project - All include files have been moved to include/schily/* - New autoconf test for C99 compliant isinf()/isnan() - Fixed a typo in fconv.c that caused problems on IBM AIX5. - New pthread autoconf tests - New autoconf tests for strncpy()/strlcpy() - added snprintf.c to libschily to make star compile again on old operating systems. - Added calls to walkopen()/walkgethome() as well as walkhome()/walkclose()/free(walkstate.twprivate) for recent libfind/find_expr() - New enhanced libfind - Allow 4 GB (instead of 2 GB) for CPIO asc/crc archives. - Fixed a problem from uninitialized data while extracting sparse files. - Fixed a problem on platforms without pathconf while extracting sparse files. - star -u now removes a slash at the end of a file/directory name before it compares pathnames. - Initialize f_namelen and f_lnamelen in extract mode before filling FINFO from tcb. - mem.c moved into libschily - Try to avoid an exception during autoconf that happens with the MS C-compiler cl and is caused by a bug in MS's implementation of "access()". - Do not print error messages if acl(info->f_name, GETACLCNT, 0, NULL) returns ENOSYS This is the case for e.g. ZFS. - Do no longer print wrong numbers in the statistics in case that star reported a smaller blocksize than the expected block size. - The test for incorrect sparse lists (broken sparse tar archives) has been enhanced to match more problem cases. - Tar header recognition procedure enhanced. Star no longer believes that a valid tar header may have a zero checksum field. - Fixed a bug reported by John Groenveld that caused star to extract some sparse files with Jan 1st 1970 although they have been OK. - Better (more correct) computing of signed checksums. - star now warns if someone tries to "update" a compressed archive. This is not possible - Better error messages for corrupted (edited) /etc/tardump files. - bitstring.h corrected to avoid GCC warnings - libfind now supports "Solaris event ports" via "-type P" - Avoid a core dump in libfind caused by probably uninitialized data when using -exec ... {} + - libfind now does much less calls to exit() making libfind more of a real library - Take care about the fact that uid_t and gid_t may be less than "int", e.g. short. - Several fixes in the man page spax.1 (thanks to Eric Raymond for the hints) - Some typo fixes in the star.1 man page - Workaround for a Mac OS X linker bug - /usr/src/linux/include is no longer included if it contains broken include files. Please send a bug report to the Linux Kernel maintainers in case that the makefile system reports broken Linux kernel include files. - No longer using -ztext linker option for creating shared libs with GCC as GCC does not create 100% correct binaries and this would abort the process of creating a shared library. - New autoconf tests for POSIX compliant time functions in libc - GCC Warning setup no longer includes -Wtraditional - Cast 3rd parameter from open() to mode_t. This is needed as open() is a varargs function. - New targets "html" and "htmlx" for Manual page makefiles allows to convert man pages using "man2html" - Dynamic libraries are now supported for Mac OS X - Support for WIN-NT-5.2 (MS-Windows 2003) added to the makefile system - Better setup for the environment variables that are needed for the Microsoft "cl" compiler. NOTE: The current setup is for "english" versions of MS-WIN. You may need to edit the files DEFAULTS/vc6-setup or DEFAULTS/vc7-setup depending on your locale version and the "c"-compiler version you are using. - Prevent MSVC ("cl") from creating silly messages like: "... Consider using strerror_s instead." - Prevent MSVC ("cl") from complaining about deprecated option "-ofilename" - smake CCOM=xx will now result in writing DEFCCOM=xx into incs/Dcc. if this is done on the initial make run. conf/cc-config.sh now has one additional parameter - Include $(DEFLTSROOT)/$(DEFLTSDIR)/$(VCSETUP) from DEFAULTS/Defaults.cygwin32_nt already to allow the script conf/cc-config.sh to detect that "cl" is working. - DEFAULTS/vc7-setup & DEFAULTS/vc6-setup now set .NOWARN: := to tell smake-1.2a41 or newer not to warn about a nonportable assignment (we do not have a UNIX "make" in Cygwin). - smake COPTX=-DNO_LARGEFILES now allows to compile in non-largefile mode - configure now checks for ctime cftime ascftime strftime and for libresolv and whether /bin/sh is bash - New include file schily/wchar.h - New include file schily/schilyp.h - Typo in schily/param.h fixed - getnum()/getllnum() & gettnum()/getlltnum() have been moved to libschily - printf()/fprintf()/sprintf()/snprintf() have been removed from libschily we now use js_*printf() instead. - The makefile system no longer adds -I. to the standard include search path - New function dfetchdir() - getargs() now accepts '+' in longopt= - remove libxxx.so link before trying to create it - Allow a mixture of static and dynamic libraries to link against a program - new option -lzo to support "lzop" compression - new option -7z to support "p7zip" compression - Libfind is now close from the final state - Added README file to the directory libfind/ that help to learn how to create a complete find(1) command, a "bsh" find builtin and a ksh93 find builtin using libfind. - Libfind Version is now 1.3 - libfind has been restructured to allow it to be used as builtin function inside shells like e.g. "bsh" and "ksh93". - libfind now allows I/O redirection (needed for shell builtins). - libfind now may be told to check for abort situations (needed for shell builtins in order to check for abort on ^C). - New function find_free() - Libfind no longer leaks memory if called with a commandline with syntax errors. - Added autoconf platform recognition code for Intel MacOS X - New autoconf test for struct timeval in sys/time.h - New autoconf test for struct timezone in sys/time.h - Changed include/schily/time.h to depend on the new autoconf #defines HAVE_STRUCT_TIMEVAL and HAVE_STRUCT_TIMEZONE - The Schily makefile system is now also passing OS specific #defines to "configure". - New Schily makefile system Target shell allows to call "make shell" in order to get a shell with exactly the same environment as the compilers will see from the makefile system. This helps testing. - New autoconf test checks whether we need to call "xx.exe" on a platform. This is needed in order to be able to call the Microsoft compiler from the SFU (Services for UNIX) environment. - It is now possible to call the Microsoft compiler from SFU. In order to do this, call "smake CCOM=cl" If this does not work, you may need to change the file DEFAULTS/vc7-interix-setup - Fixed a bug in names.c that caused nameinit() to go into an endless recursion and dump core if there is no "nobody" in /etc/passwd. This bug has been introduced recently. - star is now able to correctly deal with default ACLs on Linux this is because star now is happy with 3 ACL entries in the default ACL list. - New macro OSVERSION implemented in the schily makefilesystem - Better support for the "html" and "htmlx" targets that are used to create html versions of the man pages - Support for SCO-OpenServer 6.x was added to the makefile system - Support for pentium-4-unixware-cc.rul & pentium-4-unixware-gcc.rul was added - Support to suppress the echo for the filename with cl.exe was added to the makefile system. - Better SFU (Interix) support - libiconv autoconf support was added - Support for the SFU extended fields in struct utsname was added - On FreeBSD, /usr/local/include and /usr/local/lib is now searched. This is needed for gettext()/iconv() - Updated man pages for librmt - Updated file README - Updated file STARvsGNUTAR - Include #ifdef S_IFLNK and similar to find_list.c in order to make it work on platforms that do not implement all file types. - Corrected some typos that caused star not to use O_DSYNC in extract mode. - Trying to better work around some broken Linux kernel include files. Thanks to a hint from Michael Teichgräber - "suntar" now supports the artype=headertype option - "suntar" now supports the Sun tar -E option - "suntar" now supports the Sun tar -k option - "suntar" now supports the Sun tar -P option - "suntar" now supports the Sun tar -T option as dummy - star/gnutar/suntar now support the new -X option. - Set the option string for the non "star" CLI to make getfiles() work correctly. - star no longer prints this warning: "Notice: link_file: '%s' from/to identical, skipping ...\n" if -force-remove has been specified. This has been done in order better emulate the behavior of "suntar". - New option -keep-nonempty-dirs prevents star from complaining about trying to remove non-empty directories with -remove-first in case that -remove-recursive has not been specified. - New star option -install emulates the behavior of the install(1) program and allows to implement the extract behavior of cpio. - suntar -x is now star -xU -force-remove -remove-first -keep-nonempty-dirs -no-fsync - New "suntar" option --do-fsync to switch on synchronous writes. - scpio -iu is now star -xpU -xdir -install -force-remove -remove-recursive -no-fsync - New "scpio" option --do-fsync to switch on synchronous writes. - Support for SunStudio 12 on Linux was added. Call "make CCOM=suncc", but note that you then will not be able to compile Linux specific functions like support for ext2 file flags. This does not work because the related include files are not written in clean C. - Added a workaround to config.guess to get correct platform names from "configure" even thogh suncc does not #define __ELF__ - Linux specific autoconf tests are not only executed on Linux based platforms - In order to allow star to compile on broken Linux platforms with broken Linux kernel include files, the autoconfiguration now has been restructured to disable support for ext2 file flags in case that the local include files are broken. You may still try: "smake COPTX=-DTRY_EXT2_FS'" and check whether this results in a working binary, but due to the Linux kernel bugs, star now defaults to compile before trying to support features that depend on broken include files. - Include "install" support (to /usr/share/doc/star) for the README files. - Added sample files for /etc/default/star and /etc/default/rmt - Avoid to print statistics that mention xxx blocks + -1bytes written in case of write errors to the tape. - Added Support to create Blastwave SVr4 packages. To create a Blastwave package, call: .clean smake -f Mcsw You need the program "fakeroot" and will find the results in packages/ Note that this source tree will allow you to create the package CSWstar but not the packages CSWschilybase and CSWschilyutils on which CSWstar depends. - Added a note to README.compile on how to work around a problem in /usr/include/linux/types.h that prevents to compile cdrtools on Linux using the Sun Studio compiler. - Fixed a typo in RUES/rules.hlp - make install now supports a "static" compile enviromnent for HP-UX. - New POSIX enhanced getargs() command line parser. - Some small typo fixes in the star man page - Make sure that in case of incremental dumps, star writes at least the directory "." even if the incremental dump would be otherwise empty. - Allow to call star -xpU -restore -force-restore to force restoring the next level dump. This is needed in case that the previous dump was empty and star did reject to restore it. - Some small typo fixes in the rmt man page - The profiled libraries now have names that do no longer end in _p.a To create a profiled version of a command, do something like this: cd star smake clean smake COPTX=-xpg LXOPTX=-xpg LINKMODE=profiled For GCC use: cd star smake clean smake COPTX=-pg LXOPTX=-pg LINKMODE=profiled - libschily::*bytes.c have now better comment. - smake COPTX=-DNO_LARGEFILES now allows to compile in non-largefile mode - Star no longer removes and re-creates identical symlinks and special files in restore mode. This avoids that the time stamps for the parent directory are updated and cause time stamp deviations in some cases in incremental restore mode. - Star now implements a better update method for the file "star-symtable". This avoids that only an incomplete "star-symtable" file is present in case that the operating system crashes at the time star writes the data base. - treewalk() now initializes struct stat in the WALK_NOSTAT case in a basic way. - star -diff -sparse no longer compares "sparseness" for hardlinks if there is no data for the file in the archive. - Use a page aligned buffer too in the -no-fifo case to speed up star a bit in the non-default -no-fifo case. - Use the standard big buffer for reading data related to the compression auto-detection. - scpio now prints the cpio message "xxx blocks" instead of the star statistics line. Note that both Sun cpio and GNU cpio print wrong numbers for tar archives. Star prints the number of 512 byte blocks that make a complete minimal tar archive including both zero EOF blocks. - new option -cpio-statistics allows star to switch to the CPIO style statistics output. - new option -xmeta allows to "extract" meta files from a star archive that has been created with "star -c -meta". This option mainly exists to allow people to give away long list of filenames for debugging purposes without including the file content. It helps e.g. to debug problems in mkisofs that are a result of specific filenames. - New option -link-data allows star to add data to hard links in archives. This is currently just a first step and only works with the H=exustar archive format. Note that before POSIX.1-2001 there was no permission to add data to a hard-link type tar header. - Abort star in case that "star ... dumplevel=" has been used together with list= or -find. This will not result in useful incremental backups and must be prevented to protect people. - Do record locking on the file /etc/tardumps to protect updates against multiple simultaneous incremental star backups. Thanks to a hint from Jean-Louis Martineau - star_sym/Makefile now includes $(LIB_INTL) - Upgrade to a newer schily makefile system - Catch the case star -f /dev/stdout and still allow star to avoid adding the archive file to the archive. - New diffopts=symperm feature allows to exclude comparing permissions with symlinks - move getperm() from libfind to libschily - Added a rule to the makefilesystem to auto-create the directory ./incs which was the only "empty" directory without creation rule. Thanks to a hint from Michael Prokop - star -version now prints the compile options. This helps to find out whether e.g. ACL support is included. As Linux distributions usually install non developer friendly, this is a common problem on Linux. - Star has been prepareed for a future POSIX.1-2001 extended tar header keyword "SCHILY.acl.type" that is needed in future when ZFS ACLs support is added. - The suntar ("tar") command line interface now switches to artype=exustar if the -p (archive ACLs) option has been specified. - Star in incremental dump mode now compares whether info->f_mtime >= Newer.tv_sec instead of info->f_mtime > Newer.tv_sec to avoid race conditions. Thanks to a hint from Lasse Kliemann. TODO: - Complete the man page for spax - Implement multi volume continuation headers that work for files > 8 GB where the last tar header (a POSIX.1-2001 'x'-header) was split across volumes. In this case, if only POSIX compliant TAR features are allowed, the extracting TAR would not be able to correctly skip the large file as it does not know the content of the POSIX.1-2001 'x'-header. For this reason, later star versions need to implement a method to create multi volume continuation (skip) headers that include the size of the split POSIX.1-2001 'x'-header and the size of the following large file. Note that even with this method we would need a new method (different from the current bitmap) to deal with multi volume continuation headers for split files in case the FIFO in star may be larger than 8 GB. - Implement a autoconf extension to to deal with Linux with XFS where not all ACL handling is inside -lacl ??? is this still true? Revision history (short) 1982 First version on UNOS (extract only) 1985 Port to UNIX (fully functional version) 1985 Added pre Posix method of handling special files/devices 1986 First experiments with fifo as external process. 1993 Remote tape access 1993 diff option 1994 Fifo with shared memory integrated into star 1994 Very long filenames and sparse files 1994 Gnutar and Ustar(Posix.1-1988) handling added 1994 Xstar format (extended Posix.1-1988) defined and introduced 1995 Ported to many platforms 1999 Support for Win32 (Cygwin) 1999 base 256 support to overcome limitation with octal fields 2001 Large file support 2001 Support for POSIX.1-2001 extended headers 2001 Support for ACLs in POSIX.1-2001 extended headers 2002 Support for extended file flags in POSIX.1-2001 extended headers 2002 Support for extended inode meta data and meta files 2003 Error control added to allow to selectively ignore error contitions 2003 ED like pattern based file name substitution with -s '/from/to/[gp]' 2003 Efficient built in -copy mode 2003 Basic support for incremental dumps (incremental restore not yet ready) 2003 CPIO archive support 2003 New command 'spax' for POSIX.1 command line compatibility. 2003 New command 'scpio' for SUSv2 command line compatibility. 2003 New command 'suntar' for Solaris command line compatibility. 2003 New command 'gnutar' for GNU tar command line compatibility. 2003 Support for reliable multi-volume archives with media size detection 2005 Support for full and incremental dumps and restores. 2005 The find(1) code has been integrated and allows to use find on archives Supported platforms: Virtually any! Known to work: SunOS 4.x, Solaris (SunOS 5.x), Linux, HP-UX, DG/UX, IRIX, AIX, FreeBSD, NetBSD, OpenBSD, OSF-1, True-64, QNX, BeOS, Apollo Domain/OS, Next-STep, OS/2, SCO-openserver, SCO-unixware, Caldera OpenUnix, Cygwin (Win32), Sony NewsOS, BSDi (BSD/OS), QNX, Apple Rhapsody, MacOS X, AmigaOS, GNU Hurd Joerg ------------------------------------------------------------- Star is the fastest known implementation of a tar archiver. Star development started 1982, the first complete implementation has been done in 1985. I never did my backups with other tools than star. Its main advantages over other tar implementations are: fifo - keeps the tape streaming. This gives you faster backups than you can achieve with ufsdump, if the size of the filesystem is > 1 GByte. remote tape support - a fast RMT implementation that has no probems to saturate a 100 Mb/s network. accurate sparse files - star is able to reproduce holes in sparse files accurately if the OS includes the needed support functions. This is currently true for Solaris-2.3 to Solaris-2.5.1 pattern matcher - for a convenient user interface (see manual page for more details). To archive/extract a subset of files. sophisticated diff - user tailorable interface for comparing tar archives against file trees This is one of the most interesting parts of the star implementation. no namelen limitation - Pathnames up to 1024 Bytes may be archived. (The same limitation applies to linknames) This limit may be expanded in future without changing the method to record long names. deals with all 3 times - stores/restores all 3 times of a file (even creation time) With POSIX.1-2001 the times are in nanosecond granularity. Star may reset access time after doing backup. On Solaris this can be done without changing the ctime. does not clobber files - more recent copies on disk will not be clobbered from tape This may be the main advantage over other tar implementations. This allows automatically repairing of corruptions after a crash & fsck (Check for differences after doing this with the diff option). automatic byte swap - star automatically detects swapped archives and transparently reads them the right way automatic format detect - star automatically detects several common archive formats and adopts to them. Supported archive types are: Old tar, gnu tar, ansi tar, star, POSIX.1-2001 PAX, Sun's Solaris tar. automatic compression detect - star automatically detects whether the archive is compressed. If it has been compressed with a compression program that is compatible to decompression with "gzip" or "bzip2", star automatically activates decompression. fully ansi compatible - Star is fully ANSI/Posix 1003.1 compatible. See README.otherbugs for a complete description of bugs found in other tar implementations. Star is the first tar implementation that supports POSIX.1-2001. support for ACLs and file flags - star supports Access Control Lists and extended file flags (as found on FreeBSD and Linux). Support to archive and restore other file properties may be easily added. support for all inode metadata - star supports to put all inode metadata on the archive. This allows future versions of star to perform true incremental dumps. sophisticated error control - allows to tell star which error types should be ignored for wich file name pattern. This allows to write backup scripts that give no error messages for all problems that are tolerable (e.g. growing log files). ED like filename substitution - star supports automated pattern rule based file name substitution as documented for 'pax'. A fast built in -copy mode - allows to make fast and accurate copies and directory tree comparisons. Integrated find(1) code - allows many interesting new features that would be possible with a separate find call. Have a look at the manual page, it is included in the distribution.