Checkinstall 1.8.3
======================================

Three fixes. All of them turned up by running the test suite on a Debian
hppa porterbox, and none of them actually specific to hppa: every one was
reachable anywhere, and hppa is simply where something finally took the code
path that exposed it.

* getcwd() handed back the wrapper's own stack buffer in place of the buffer
  it was given, so callers were reading a frame that had already gone. Where
  the stack grows downward that dead frame usually survives long enough to
  read as the right string, which is how this went unnoticed for as long as
  it has existed. Where it grows upward the caller overwrites it at once,
  and cmake was handed a path with pointer bytes in the middle of it.

* faccessat() and euidaccess() were never wrapped at all. Only access() was.
  An access check on a file that exists only in the translated tree went to
  the real filesystem and was told it was missing. rm checks write access
  before it unlinks, so on a system whose rm takes that path it refused to
  remove files that were plainly there.

* A path longer than MAXPATHLEN passed to chroot() overran a stack buffer
  and killed the process before the real chroot() ran. Thanks Brian
  Cosgrove, who found it and fixed it.

The suite gained a case for each, and it now says something useful when one
of them fails. A test that only printed lines matching "fail" reported a
crash as a bare FAIL and nothing else, and three of the stat wrappers logged
nothing at all, so a failing lookup left no trace of what it had decided.
Both cost a round trip through a porterbox before anything could be
diagnosed.

Tests are also split now between the two places they can live. A wrapper's
own contract, its return value, errno and refcount, is checked in
installwatch's own test program. What ends up in the translated tree or in
the built package is checked by the shell suite. tests/README.md says which
is which.

Checkinstall 1.8.2
======================================

One more fix in the same corner as 1.8.1, for Debian armhf and any other
port whose glibc turns on 64-bit time by default rather than on request.

installwatch supplies the explicit 64-bit time entry points itself:
__stat64_time64, __utimensat64 and four more. __time64 was not among them,
so on those ports every call to time() went straight past the library.

Nothing here depends on that wrapper beyond a counter it keeps, and no
package built with 1.8.1 is affected. installwatch's own test program does
depend on it: it calls time() and reads the counter to decide whether it is
running under installwatch at all. The counter said zero, so the program
reported it was running unwrapped and gave up. That was the single test
Debian armhf still failed at 1.8.1, with the other eighteen passing.

The emulated armhf test now runs on unstable with the flags a Debian buildd
passes, in place of stable with none. That combination is what found this,
and the old one is why 1.8.1 went out without it.

Checkinstall 1.8.1
======================================

One fix, for 32-bit systems whose distribution compiles with 64-bit file
offsets and 64-bit time. Debian does that on armhf, and has for years.

Both options make glibc's headers rename the functions installwatch
defines, so open() was compiled as open64() and stat() as
__stat64_time64(), and the plain names left the library. The pointers it
keeps to the real functions were still bound by name, so they reached a
libc entry point whose struct layout no longer matched the one this code
had been compiled against. Reads of st_mode landed on the wrong bytes, and
the tests that decide whether a path is a directory or a symbolic link
answered from them.

What that looked like in use: files written to the real filesystem instead
of into the package, installs aborting partway through, and packages built
with nothing in them. On i386 against glibc 2.42 the test suite drops from
19 of 19 to 5.

The Makefile now undoes both options for installwatch alone. It has always
defined the 64-bit entry points itself, which is what those options were
wanted for, and they are unchanged. A build with no special flags behaves
as it did, and so does every 64-bit architecture.

The suite also builds with a distribution's flags now, on the glibc the
Debian buildds run. That gap is why this lasted as long as it did.

Checkinstall 1.8.0
======================================

Packages this version builds can hold files that 1.7.0 left out. An open
that created or emptied a file without asking for write access, and an
fopen mode such as "rb+", counted as reading. Those writes missed the
translated tree, so the file never reached the package, and on a root
install it landed on the real filesystem instead. Rebuild anything packaged
with 1.7.0 and compare.

* Exclusions match whole path components. /tmp no longer excludes /tmpfoo,
  and /usr/local no longer excludes /usr/locality. Nothing under an excluded
  path is translated, so a name that matched one only by accident was
  written for real and left out of the package.

* renameat2 hands its flags to the kernel. RENAME_NOREPLACE used to look
  first and rename afterwards, which is the race the flag exists to close,
  and it reported the clash as a positive return that reads as success.
  RENAME_EXCHANGE was dropped altogether, so asking to swap two files
  renamed one over the other and lost the second.

* An empty pathname asks about a file descriptor rather than a name, and is
  passed through instead of being turned back into a name. Rebuilding one
  answers a different question: for an O_PATH descriptor on a symbolic link
  the rebuilt name gets followed, and a dangling link then looks missing.
  That is what made tar abort partway through unpacking an archive holding
  a link ahead of the file it points at, on any system whose glibc is older
  than 2.32.

* A call that succeeds no longer leaves errno holding an error from
  somewhere else. Every one of them used to, and callers that look at errno
  after a call that worked are not unusual.

* A copy that fails partway is no longer taken for one that worked. A short
  write, or an error the kernel held back until the file was closed, used to
  leave a truncated file behind for the package to collect. Disks fill and
  quotas run out.

* Asking whether a file is already in the translated tree no longer follows
  symbolic links, so one whose target is not unpacked yet stops looking
  absent.

* Several reads ran off the end of a buffer: a symbolic link that changed
  underneath a readlink, a working directory joined to a long relative path,
  a length measured from a buffer nothing had written yet, and an
  INSTW_ROOTPATH set to nothing at all.

* A path longer than PATH_MAX is refused. Shortening it meant working on
  whichever file the shortened name happened to hit.

* Four messages could not be translated into anything. They built their
  value into the string before gettext saw it, so no catalogue ever matched.
  All ten catalogues are UTF-8 now, in place of the five encodings they used
  between them.

* The tests run on six glibc versions, on 32-bit and 64-bit x86, on arm64
  and armhf, and against an installed checkinstall rather than only a source
  tree. Three of the faults above were found that way and none of them show
  on a current Debian.

Checkinstall 1.7.0
======================================

The first release since 2010, and the first from the fork at
https://github.com/ssgelm/checkinstall. It carries the patches Debian had
accumulated over the years, together with fixes for bugs reported against
Debian and Ubuntu.

* Filesystem translation works again. glibc 2.33 turned stat() and its
  relatives into ordinary exported functions, so a library defining only
  __xstat() stopped seeing most of what an install did, and every tool that
  checks a path before acting on it was told the file was not there. statx(),
  the fortified open() variants, the mkstemp family, linkat(), openat64(),
  utimensat() and the 64-bit time entry points are all intercepted now.

* A failed or interrupted install can no longer replace /lib with a real
  directory, which left a merged-/usr system unable to run a single binary.

* A mode set on a symlink no longer reaches the file it points at. A binary
  installed 755 could come out of the package writable by anyone.

* Built packages record the shared libraries they need, with --autodeps.
  They also record files under their real parent directories, so an install
  writing to /lib/systemd/system ships /usr/lib/systemd/system.

* Values given on the command line are used as written rather than being
  re-evaluated by the shell, so --maintainer="Jane Doe <jane@example.org>"
  reaches the package intact.

* Names containing spaces survive the file list.

* New options: --autodeps for shared library dependencies, --debcompression
  to choose what dpkg-deb packs a .deb with, and --prerequires for Debian
  Pre-Depends.

* Builds on hppa and alpha, and on 32-bit architectures using 64-bit time or
  large file offsets. Honours CPPFLAGS, CFLAGS and LDFLAGS. Installing no
  longer needs root.

* Added a French translation, and regenerated the message template, which
  dated from 2002 and was missing 44 of the strings the program prints.

* Added a test suite under tests/.

Checkinstall 1.6.2

* Added support for at-style functions

Checkinstall 1.6.1
======================================

* Fixed the famous getcwd() bug (Thanks to David Brown for hunting it down!)

* Added translations:

  Indonesian -  Tedi Heriyanto
  Italian    -  Michele Petrecca
  Norwegian  -  cizu jones
  German     -  Andreas Muck
  Chinese    -  Xinkui Hao
  Japanese   -  UTUMI Hirosi

CheckInstall 1.6.0beta4
======================================
* This should be the last beta before releasing version 1.6.0. Please report
  any outstanding bugs!

* Fixed the bug in installwatch that caused segfaults when running on newer
  glibc versions (And therefore newer distros like FC and SuSe 9.1).

* The default for ADD_SO is now NO so we are no longer auto-updating
  /etc/ld.so.conf by default. If you need this behavior you can enable it
  with "--addso=yes" or by setting ADD_SO=1 in checkinstallrc.

* We use the new Slackware package format by default ( NEW_SLACK=1 ) when
  creating Slackware packages. Note that in previous versions of checkinstall
  up to 1.6.0beta3 the default was the old package format. 

* There are other smaller bugfixes. Read the Changelog file for details.

* New checkinstallrc options:

o MAKEPKG_FLAGS: makepkg optional flags. 

   These are recommended if running a newer Slackware version: "-l y -c n"

o SHOW_MAKEPKG: Boolean (Default: 0)

   Show -or not- the results of the MAKEPKG command as it runs. Useful when
   running it with interactive options. If checkinstall seems to halt and
   sleep after saying "Building Slackware package..." then you might want to
   set this to 1.

o ADD_SO: Boolean (Default: 0)
   Automatically search for shared libraries and add them to /etc/ld.so.conf?


CheckInstall 1.6.0beta3
======================================
* Internationalization support has been enhanced (And severely modified). 
  Many new languages have been added, too.

* Added a command line option: "--fstrans". It will allow you to enable
  or disable the filesystem translation code. It is enabled by default.

* Added a command line option: "--reset-uids". It will allow you to sanitize
  the file and directories permissions in the package. It will cause 
  checkinstall to set the permissions of all files and directories to "755"
  and the owner and group of all directories to root.root. DO NOT USE IT IF
  YOUR PACKAGE USES CUSTOM PERMISSIONS OR OWNERS.

* The problem many people had when copying the documentation files should
  now be fixed.

* The package information menu was moved to the first stages of the
  script. Now you can modify the package's name or version and the
  documentation directory will be correctly named.

* You can recycle a previously written .spec file, with the "--spec" command
  line option. It will work to set some package parameters even if you are
  building a Slackware or Debian package.

* CheckInstall will try to add to /etc/ld.so.conf the path to any ELF shared
  libraries it finds, and run ldconfig afterwards. This is added to the
  postinstall script of your package.

CheckInstall 1.6.0beta2
======================================

* Checkinstall 1.6.0 now sports brand-new internationalization support  :-).

  The supported languages so far are English and Spanish. Translators needed!

  If you want to contribute by translating Checkinstall to your language,
  please read the NLS_SUPPORT file for instructions on how to do it. It's very
  easy actually.

* Support for Slackware's tar-1.13 binary is included, the Slackware packages
  created by checkinstall should now be more Slackware-compatible than before.

* You can tell Checkinstall to use Slackware's native "makepkg" by setting
  the MAKEPKG variable to "makepkg" in checkinstallrc.

* Symlinks are now correctly detected again.

See more details in the ChangeLog.


CheckInstall 1.6.0beta1
======================================

* The "--install=<yes|no>" command line option indicates wether you want
  to actually install the package on your system or just create it 
  without installing it. This is a new feature and still in beta stage.
  Please test it and report any bugs you find (Or success, too!  :-) )

* In this release support for preinstall, postinstall, preremove and postremove
  scripts is introduced for RPM and Debian packages.

  For Debian, these scripts must meet some requirements to be accepted by dpkg
  while building the .deb package. See:

  http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html

  In short, any shell script will do as long as it specifies an interpreter
  (i.e. put #!/bin/sh as the first line) and has an exit status of zero for 
  success or non-zero for failure.

  To include the scripts in your package, put them in the current directory
  and name them:

  preinstall-pak
  postinstall-pak
  preremove-pak
  postremove-pak

  All scripts are optional. You can write all of them if you need them, or 
  only the ones you need, or even none.

  For Slackware packages, the "postinstall-pak" script is already supported as
  "install-pak". Either name will work.

  * This release also adds other three command line options: "--inspect", 
    "--review-spec" and "--review-control". See the ChangeLog file for 
    details.

CheckInstall 1.5.3
======================================

* The user's umask is ignored while creating/installing the package. If you
  really want to have the umask set to something unusual while checkinstall
  creates the package, you can use the "--umask" command line option.

  The default umask used by checkinstall is "0022" which is a standard,
  non-paranoid reasonable value.

* This version introduces support for the new Slackware description file format,
  whit handy-rule and all. Use the "--newslack" command line switch to activate
  it. The use of "--newslack" implies "-S", that is, it automatically selects
  the creation of a Slackware package.

CheckInstall 1.5.2
======================================

* This version introduces automatic man pages compression, enabled by default.
  You can control this option with the "--gzman" flag.

* The .deb packages created by checkinstall 1.5.2 should be a bit more
  Debian-friendly.

* There's a new shared library stripping feature in CheckInstall. Please test 
  it and report any trouble you might run into.

CheckInstall 1.5.1
======================================

* There's a new checkinstall mailing list! The list address is:
   <checkinstall-list@asic-linux.com.mx>

 To subscribe, send an empty message to: 
   <checkinstall-list-subscribe@asic-linux.com.mx>

* A new installwatch version is included, with some patches from Olivier
  Fleurigeon. The test program included with installwatch now works again.

* New command line options: "--docdir" and "--nodoc" to control the creation
  of the package documentation.

* New command line options: "--provides" and "--maintainer" to specify each
  value in the RPM spec file and in the Debian control file, respectively.

CheckInstall 1.5.0
======================================

* CheckInstall is now even more "scriptable", look for the "--pkgxxx" options
  in the README.
* The installwatch version (0.6.2) included with this release of checkinstall
  fixes a couple of file descriptor leaks that were present in 0.6.1. The
  "Too many open files" problem shouldn't appear again. I can no longer
  reproduce it with the Emacs21 installation, at least  ;-).
* Checkinstall is one year old! Version 1.0 was released on nov/11/200  =)


CheckInstall 1.5.0beta2:
======================================

* About the "invalid option" problem with rpm: the RPM folks have once again
  changed their minds about the rpm's argument parsing. In rpm versions < 4.0.0
  the right way was "--target <arch>", in 4.0.x with x < 3, it was
  "--target=<arch>" and finally in rpm 4.0.x with x >= 3 it is back to 
  "--target <arch>". CheckInstall now attempts to identify the installed rpm
  version and set this flag accordingly. If you have any problems about it, 
  please send me a mail message telling me the error message and the rpm version
  you have installed.

* Check the new PAK_DIR variable in the checkinstallrc file. If set to a 
  directory name, checkinstall will save there your newly created packages
  If the directory doesn't exist, checkinstall will ask you if it should be
  created. This should help you to keep all your new packages in one place.

* CheckInstall is now completely "scriptable"! If you give it the "-y" 
  command line option it will run completely unattended, accepting the 
  default answer to all questions.

CheckInstall 1.5.0beta1:
======================================

* Debian support is in place! Read the Debian packaging section of the
  README file. This is an experimental feature. Please report any bugs or 
  problems so they can be fixed  :).

CheckInstall 1.4.0:
======================================

A long time has passed since the last checkinstall release, thanks to my
final exams and an unusually big load of work. Now I have more free time and
will be working hard to add two important features: tracking of statically
linked binaries and .deb packaging format support. Stay tuned  :).

* I modified the installwatch library to make it backup any files modified
  by the install command, _before_ they are modified. This is done at the
  system call level.
 
  This allows checkinstall to write a tarball including all files that
  were overwritten/deleted/etc by the install command -i.e "make install"-,
  giving you the chance to return your system to the exact same state it was    
  before installing your program.                                      

  An example: suppose you have installed AfterStep, which by default keeps its
  global configuration files under /usr/local/share/afterstep,and you have
  customized them to meet your own tastes. Then you download and compile a new
  version, and then you install it with "make install" or with "checkinstall".

  You restart your afterstep session only to discover that all of your
  carefully configured files under /usr/local/share/afterstep have been
  overwritten by the installation process and substituted by the standard
  dist versions! Well.. that was until the arrival of CheckInstall 1.4  ;-)

  CheckInstall 1.4.0 would have saved all of those about-to-be-overwritten
  files just before they were modified, and wrote a tarball containing all
  of them. So in the example before, you'd just do a:

  tar xzvf backup-xxxxx-pre-afterstep-v.v.v.tgz -C / 

  And you'd get your files back. Nice, isn't it?

  Another nice thing is that if you cancel checkinstall at any time, it will
  automatically restore any already modified/overwritten files. 

  The xxxxx in the filename are a timestamp made with the date and time when
  the file was created, so you can run checkinstall multiple times and you'll
  get incremental-style backups of the modified files.

  The new installwatch library (0.6.0) has a lot of applications, I'll talk
  about them in installwatch's own documentation.

* CheckInstall now has full command line switches parsing.
  Try "checkinstall --help".

* The variable definition section inside the checkinstall script is gone.
  Now you should edit the checkinstallrc file, normally installed under
  /usr/local/lib/checkinstall

* Added an option ("--exclude") to tell checkinstall wich directories to ignore
  while searchig for modified files.

CheckInstall 1.3.2:
======================================

* Security fix for the temp dir, preventing symlink attacks.
* File names with spaces in them are now correctly handled.

CheckInstall 1.3.1:
======================================

* Fix for a bug found when using rpm 4.0, and new features.
* Slackware: If you create a script called "install-pak" inside the source
  directory, checkinstall will add it to the new package. The script will
  be run every time you install the package with Slackware's installpkg.
  This is useful for setting permissions, adding users and setting the system
  up after installing that package.




CheckInstall 1.3.0:
======================================

Lots of bug fixes and a couple of changes. Read the Changelog and the README.


CheckInstall 1.3.0beta3:
======================================
The bug that prevented checkinstall from working on your rpm-based distribution
has been fixed  -seems fixed, at least!-

So far I've tested v1.3.0beta3 in:

 o RedHat 6.2
 o Slackware 7.1

RedHat 7.x, SuSe and Mandrake should be OK but I haven't confirmed it. Maybe you
could do that and write me a note to include them on the list  ;-).

I've added a DEBUG flag to allow checkinstall to gather some useful info and
pack it in a tarball. Check the variable definition section inside the script.

CheckInstall 1.3.0beta :
======================================

RPM support is now included. See the bottom of the README for details.
This is a beta release, please report bugs and post comments to:

<fsanchez@uagunix.gdl.uag.mx>

CheckInstall 1.2.1 :
======================================

Because of a couple of bugs introduced by checkinstall 1.2, you may have to 
check the owner and permissions of /tmp and /var/checkinstalltmp :


/tmp ==> 1777/root:root
/var/checkinstalltmp ==> 0700/root:root

Just to make sure, run:

chmod 1777 /tmp
rm -rf /var/checkinstalltmp
mkdir /var/checkinstalltmp
chmod 0700 /var/checkinstalltmp
