palo (2.11) unstable; urgency=medium

  [ James Bottomley ]
  * Fix loading of compressed kernels by reducing .bss usage

 -- Helge Deller <deller@gmx.de>  Wed, 31 Jul 2019 09:39:23 +0200

palo (2.10) unstable; urgency=medium

  [ James Bottomley ]
  * Update palo documentation
  * palo: place iplboot inside disk label if it's big enough
  * palo: add support for formatting as ext4
  * iplboot: add ext4 support

 -- Helge Deller <deller@gmx.de>  Sun, 21 Jul 2019 19:06:09 +0200

palo (2.01) unstable; urgency=medium

  [ Helge Deller ]
  * Recommend instead of suggest e2fsprogs in debian control file.
    (Closes: #887258)
  * Wire up help2man to create better man page (suggested by
    Andreas Henriksson <andreas@fatal.se>)
  * fix sprintf out-of-bounds check in iplboot code

  [ James Bottomley ]
  * fix IPL overlap with ext2/ext3 resize_inode

 -- Helge Deller <deller@gmx.de>  Wed, 17 Jan 2018 15:15:40 +0100

palo (2.00) unstable; urgency=medium

  [ Helge Deller ]
  * Default to console=ttyS0 on all machines (incl. rp34x0).
  * Fix layout when printing partition table with discs > 100GB.
  * Fix up boot messages with regard to newline behaviour.
  * Include palo version identifier in binary ipl code.

  [ Rolf Eike Beer ]
  * Allow to override ar.

 -- Helge Deller <deller@gmx.de>  Mon, 01 Jan 2018 21:07:58 +0100

palo (1.99) unstable; urgency=medium

  * Increase loadable kernel size to 100MB.
  * Improve debug output and error handling.
  * Add hidden "d" command to toggle debug mode in interactive mode.

 -- Helge Deller <deller@gmx.de>  Fri, 18 Aug 2017 11:50:44 +0200

palo (1.98) unstable; urgency=medium

  * Default to console=ttyS1 on rp34x0 machines.

 -- Helge Deller <deller@gmx.de>  Tue, 30 May 2017 13:12:20 -0700

palo (1.97) unstable; urgency=medium

  * Enable support for cross-building of iplboot: (Closes: #851792)
    [ Helge Deller ]
    - Add gcc-hppa-linux-gnu and libc6-dev-hppa-cross to
      Build-Depends on architectures other than hppa.
    - Modify ipl/Makefile to support cross-compiling.
    [ John Paul Adrian Glaubitz ]
    - Build palo on amd64, i386, hppa and x32 only.
    - Move building of iplboot from dh_auto_clean to dh_auto_build.

 -- Helge Deller <deller@gmx.de>  Thu, 26 Jan 2017 14:48:37 +0100

palo (1.96) unstable; urgency=medium

  * Make the build reproducible. (Closes: #778437)
  * Unbreak loading Linux kernels bigger than 16 MB.
  * Enable support for gcc-6.

 -- Helge Deller <deller@gmx.de>  Sun, 08 Oct 2016 22:40:31 +0100

palo (1.95) unstable; urgency=medium

  * Re-add build dependency on lynx, generate README from
    README.html again. Fixes FTBFS on hppa.
  * Update pre-built iplboot bootloader code.

 -- Helge Deller <deller@gmx.de>  Sun, 06 Apr 2014 13:12:44 -0600

palo (1.94) unstable; urgency=medium

  [ Helge Deller ]
  * Fix build on non-Linux kernels.
  * Provide possibility to configure used MAKE tool via environment
    variable. Since palo requires GNU make, this gives an option to
    set MAKE=gnumake on HP-UX.
  * Disable getopt library on HP-UX.
  * Do not hardcode gcc compiler in Makefile, e.g. on HP-UX
    aCC can be used.
  * Use printf("0x%08x") instead of printf("%p"), which is not
    supported on HP-UX.
  * Provide endianess byteswapping functions for HP-UX.
  * Provide pre-built README file to avoid dependency on lynx.

  [ John Paul Adrian Glaubitz ]
  * Remove boiler plate comment and fix wording in debian/rules.

 -- Helge Deller <deller@gmx.de>  Sat, 05 Apr 2014 11:31:51 +0200

palo (1.93) unstable; urgency=medium

  [Helge Deller]
  * Reintroduce package to Debian. (Closes: #742068)

  [John Paul Adrian Glaubitz]
  * Clean up debian/changelog.
  * Clean up debian/README.Debian.
  * Add debian/README.source to explain the version
    history of the PALO sources in Debian.
  * Bump debhelper level to 9.
  * Use dh to streamline debian/rules.
  * Remove usr/bin and usr/sbin from debian/dirs, they are empty.
  * Update debian/copyright to copyright format 1.0.

 -- Helge Deller <deller@gmx.de>  Tue, 18 Mar 2014 13:47:42 -0600

palo (1.92) unstable; urgency=low

  * Increase possible command line length from 127 to 1024 bytes.
  * Each kernel parameter can hold up to 200 chars (79 before).
  * Various smaller bugfixes.

 -- Helge Deller <deller@gmx.de>  Wed, 09 Oct 2013 17:47:54 +0200

palo (1.91) unstable; urgency=low

  * Add spec-file for RPM.
  * Remove debug infos.
  * Add overflow checks.

 -- Helge Deller <deller@gmx.de>  Sat, 06 Jul 2013 22:08:05 +0200

palo (1.90) unstable; urgency=low

  * New maintainer.
  * Add support for gzip-compressed kernel images.
  * Add boot menu option "x" to reset/reboot the machine.
  * Lots of other small bug fixes.

 -- Helge Deller <deller@gmx.de>  Tue, 02 Jul 2013 21:22:36 +0200

palo (1.16) UNRELEASED; urgency=low

  [Matthew Wilcox]
  * Increase allowed size from 20MB to 800MB when creating lifimage files
    for booting over the network.

  [ Kyle McMartin ]
  * Fix FTBFS on ia64: Useful macros were undefined in userspace.

 -- Kyle McMartin <kyle@debian.org>  Mon, 26 Nov 2007 17:09:38 -0500

palo (1.15) unstable; urgency=low

  [ Kyle McMartin ]
  * Make the message when using the -U option on an unformatted
    volume slightly more helpful.

  [ Jeff Bailey ]
  * Drop dependency on linux-kernel-headers, the new package
    linux-libc-dev is an indirect dependency of build-essential.
  * Depend on debhelper >= 5, set compat file to 5.
  * Drop obsolete headers:
    - asm/elf.h
    - asm/posix_types.h
    - asm/ptrace.h
    - asm/types.h
    - linux/elf.h
  * ipl/ext2.c: No longer needs asm/byteorder.h, include linux/types.h
    after sys/stat.h to avoid FTBFS.
  * Makefile: Add note why iplboot isn't cleaned.

 -- LaMont Jones <lamont@debian.org>  Tue, 11 Sep 2007 14:41:23 -0600

palo (1.14) unstable; urgency=low

  [Helge Deller]
  * Make ELF32 and ELF64 loaders more similar, other small fixups.
  * Fix build on SuSE 10.

  [Kyle McMartin]
  * Add LaMont and myself to the list of Uploaders.

 -- Kyle McMartin <kyle@debian.org>  Sat,  8 Apr 2006 16:00:55 -0400

palo (1.13) unstable; urgency=low

  * One more workaround for linux-kernel-headers differences: __swab64
    shows up on 64-bit machines on Ubuntu.
  * 64-bit pointer casting fixes.

 -- LaMont Jones <lamont@debian.org>  Thu,  5 Jan 2006 10:08:58 -0700

palo (1.12) unstable; urgency=low

  * Work around differences in linux-kernel-headers between
    Debian and Ubuntu. Test build on sid and dapper on hppa
    and sid/i386.
  * Use userspace-sanitized ext2_fs.h file from e2fsprogs; we still
    need to include some kernel headers for per-arch types and endian
    conversions.

 -- Kyle McMartin <kyle@debian.org>  Mon,  2 Jan 2006 12:16:36 -0500

palo (1.11) unstable; urgency=low

  * Flush Instruction Cache insn now requires space register to be
    specified. Previously it would assume %sr0.
  * Fix include of ext2_fs.h by stubbing out some definitions it
    requires. Patch from Richard Hirst. (Closes: #336346)
  * Fix FTBFS from previous version a different way. Checked that it
    properly works on i386 and hppa. Patch from Andreas Jochens.
    (Closes: #320284)

 -- Kyle McMartin <kyle@debian.org>  Wed, 28 Dec 2005 14:46:44 -0500

palo (1.10) UNRELEASED; urgency=low

  * Fix FTBFS with Debian's linux-kernel-headers. (Closes: #320284)
  * Command line overflow error was lacking arguments.

 -- LaMont Jones <lamont@debian.org>  Wed, 12 Oct 2005 10:41:00 -0600

palo (1.9) unstable; urgency=low

  * linux-kernel-headers is about to change which broke the PALO
    build, so removed lots of dependencies on copies and references
    to linux header files, but added a dep on linux-kernel-headers.
  * Fix a couple of lintian complaints.

 -- Paul Bame <bame@debian.org>  Wed, 20 Jul 2005 12:31:06 -0600

palo (1.8) unstable; urgency=low

  * Remove -fwritable-strings from palo/ipl Makefile since gcc will
    eliminate it before long.

 -- Paul Bame <bame@debian.org>  Mon, 23 May 2005 10:53:46 -0600

palo (1.7) unstable; urgency=low

  * Fix the message and improve the error handling which
    was reporting "doing a format as ext1" during updates.

 -- Grant Grundler <grundler@parisc-linux.org>  Fri, 28 Jan 2005 12:00:00 -0800

palo (1.6) unstable; urgency=low

  * Some fail/restart changes didn't make it in 1.5 by mistake.

 -- Paul Bame <bame@debian.org>  Tue, 21 Sep 2004 15:11:00 -0600

palo (1.5) unstable; urgency=low

  * Some clean ups and error checking especially in ipl.c.
  * Fix a Heisenbug (overwriting a buffer).
  * Add an 'l' command for list kernel directory. (jejb)
  * Accept both \b and \0177 as the interactive erase character. (jejb)
  * Be sure to restart interactively after more failures. (Joel and
    Bjoern A. Zeeb)

 -- Paul Bame <bame@debian.org>  Wed, 14 May 2004 09:00:29 -0600

palo (1.4) unstable; urgency=low

  * Increase interactive command line size from 127 to 259 bytes.
  * Add more robust 'strcat' checking.
  * Add interactive 'r' command to reset command line to initial state.

 -- Paul Bame <bame@debian.org>  Thu, 25 Mar 2004 13:01:23 -0700

palo (1.3) unstable; urgency=low

  [James Bottomley]
  * Add ability to format PALO partition as ext3.
  * Make iplboot restart if it encounters and error.

  [Ryan Bradetich]
  * Detect and boot properly via serial mux.

 -- Paul Bame <bame@debian.org>  Tue, 14 Jan 2003 13:06:45 -0700


palo (1.2) unstable; urgency=low

  [Martin K. Petersen]
  * Recognize RAID partition types.

 -- Paul Bame <bame@debian.org>  Tue, 14 Jan 2003 13:06:45 -0700

palo (1.1) unstable; urgency=low

  [Carlos O'Donell]
  * Change argument checking in palo.c: Originally you could specify
    a kernel command line of up to 255 characters, but in reality the
    firstblock structure could only hold 127 characters. The check in
    palo.c has been adjusted to 127.
  * Change PALO to build without kernel headers:
    - Remove conditional header includes depending on
      kernel version
    - Remove the #include directive for fs.h in ipl/ext2.c.
    - Remove the #include directive for time.h in /ipl/ipl.c.
    - Add ./include/asm and ./include/linux/byteorder to accomodate
      for all the new asm/* and linux/byteorder/* header files that
      are required to build PALO without kernel headers.

 -- Paul Bame <bame@debian.org>  Tue,  6 Aug 2002 08:47:57 -0600

palo (1.0) unstable; urgency=low

  * Fix package override so debian/rules changes should now
    be honored, causing PALO to be built on all architectures.
    priority optional. (Closes: #140580)

 -- Paul Bame <bame@debian.org>  Mon,  1 Apr 2002 09:59:15 -0700

palo (0.99) unstable; urgency=low

  * Remove cruft from source package. (Closes: #130365)
  * Smarter STI console selection from Fleedwood.
  * Message tweaks from Helge Deller.
  * The experimental palo_kernel= parameter is now passed to the kernel.

 -- Paul Bame <bame@debian.org>  Thu, 24 Jan 2002 10:49:03 -0700

palo (0.98) unstable; urgency=low

  * Load ramdisk from ext2 implementation. (Thanks James Bottomley)

 -- Paul Bame <bame@debian.org>  Mon, 31 Dec 2001 12:38:31 -0700

palo (0.97) unstable; urgency=low

  * Fix lintian complaints.
  * Minor makefile tweaks.
  * Optimize boot device reads for better performance.
  * Adopt/adapt aboot-0.9 ext2 code (was from aboot-0.5).
  * Add '-onlcr' to puts() and removed \r from most printfs.

 -- Paul Bame <bame@debian.org>  Sun, 18 Nov 2001 20:47:57 -0700

palo (0.96) unstable; urgency=low

  * Many boot message usability improvements.
  * Clean up changelog. (Closes: #114999)
  * Change arch back to hppa. (Closes: #114145)
  * Fix dhelp postinstall problem. (Closes: #113651, #114515, #114614, #115350)

 -- Paul Bame <bame@debian.org>  Thu,  1 Nov 2001 16:24:24 -0700

palo (0.95) unstable; urgency=low

  * Non-maintainer upload.
  * Increment PALO version in lib/common.h.

 -- Matt Taggart <taggart@debian.org>  Tue, 16 Oct 2001 18:34:45 -0600

palo (0.94) unstable; urgency=low

  * Add support for symlinks so we can reference /boot/vmlinux in palo.conf
    and not have to rerun palo on every kernel upgrade.(Richard Hirst)
  * Move iplboot into /usr/share/palo. (Richard Hirst)
  * Only generate iplboot if building on hppa machines. debian-cd needs
    PALO, and is likely to be run on i386. (Richard Hirst)
  * --bootloader now defaults to /usr/share/palo/iplboot, so it is usually
    not required. Adjust documents slightly to accomodate.
  * Add postinstall/prerm scripts to handle changed iplboot location.

 -- Paul Bame <bame@debian.org>  Sat,  8 Sep 2001 12:32:21 -0600

palo (0.93) unstable; urgency=low

  * Fix boot loader "guess" logic to be smarter on dual-width-capable
    machines when only one kernel is available.
  * Remove a couple of gratuitous printfs.
  * Archive link PALO. Not a bad idea otherwise but required because
    dpkg-shlibdeps started whining. I'm sure I'll get grief for this.

 -- Paul Bame <bame@debian.org>  Wed, 11 Jul 2001 11:00:17 -0600

palo (0.92) unstable; urgency=low

  * Remove SOM loader code.
  * If the user hasn't specified one, PALO/ipl adds the correct console=
    to the command line based on whether the boot console is full
    (ttyS0, serial) or half (tty0, graphics) duplex. Also adds sti=
    and sti_font= if they're missing.
  * PALO header version is now 3. Can store both a 32 and a 64-bit kernel
    in the F0/sequential/CDROM formats.
  * When booting from F0/sequential/CDROM PALO guesses the 32/64-ness
    by asking firmware if the user doesn't specify 0/vmlinux64 or 0/vmlinux32.
    On boxes which support both 32 and 64, 32 is chosen.
  * If no TERM= in kernel cmd line, when guessing serial/sti, add TERM=vt102
    for former and TERM=linux for latter.
  * Print boot command line even in non-interactive mode.
  * Place kernels and ramdisks on 2k boundaries on sequential media to help
    avoid reverse seeks during boot.

 -- Paul Bame <bame@debian.org>  Wed, 20 Jun 2001 10:21:06 -0600

palo (0.91) unstable; urgency=high

  * Fix check which causes some narrow IPL loads to fail.

 -- Paul Bame <bame@debian.org>  Tue, 29 May 2001 11:39:23 -0600

palo (0.90) unstable; urgency=low

  * Add support for calling PDC/IODC in wide mode (i.e., for
    Superdome). PALO ipl continues to run in narrow mode on all
    platforms, except that PDC/IODC calls are made in the mode
    that ipl was started in.

 -- Bjorn Helgaas <bjorn_helgaas@hp.com>  Tue, 15 May 2001 13:17:21 -0600

palo (0.89) unstable; urgency=high

  * PALO can now prepare disks >2G on 32-bit kernels, even though it
    is not using large file I/O calls, which are not useful yet
    anyway. Fixes bugs.parisc-linux.org #125.
  * Fix bugs.parisc-linux.org #89.

 -- Paul Bame <bame@debian.org>  Fri, 11 May 2001 19:07:18 -0600

palo (0.88) unstable; urgency=high

  * Fix several lintian bugs by uncommenting 2 lines in debian/rules.
  * No longer ship /etc/palo.conf as config file -- expect installer
    to provide one now. Example in /usr/share/doc/palo. Should have
    some post-install magic to offer to run palo if /etc/palo.conf
    exists, and a complaint if /etc/palo.conf doesn't exist because
    you should have one from running the installer.
  * Change palo to a native Debian package since it's maintained
    as one.

 -- Paul Bame <bame@debian.org>  Fri, 11 May 2001 16:07:18 -0600

palo (0.86-1) unstable; urgency=high

  * Probably required to support later non-0xc0100000 kernels.

 -- Paul Bame <paul_bame@hp.com>  Wed, 14 Feb 2001 15:22:45 -0700

palo (0.85-1) unstable; urgency=low

  * Initial Release.

 -- Paul Bame <paul_bame@hp.com>  Thu, 18 Jan 2001 18:49:42 -0700
