busybox-cvs (0.60.99.cvs20030819-3) unstable; urgency=low

  * shell/ash.c
    - fix signal handling (upstream)

 -- Bastian Blank <waldi@debian.org>  Mon, 15 Sep 2003 18:12:09 +0200

busybox-cvs (0.60.99.cvs20030819-2) unstable; urgency=low

  * Fix configure permisions
  * Set source Section to embedded 

 -- Glenn McGrath <bug1@debian.org>  Mon, 25 Aug 2003 06:33:19 +0000

busybox-cvs (0.60.99.cvs20030819-1) unstable; urgency=low

  * new cvs version

 -- Bastian Blank <waldi@debian.org>  Tue, 19 Aug 2003 13:18:54 +0200

busybox-cvs (0.60.99.cvs20030426-10) unstable; urgency=low

  * archival/libunarchive/*
    - add hardlink support (pending)
  * debian/config-*udeb*
    - add support for oldgnu tar format

 -- Bastian Blank <waldi@debian.org>  Tue, 10 Jun 2003 12:06:41 +0200

busybox-cvs (0.60.99.cvs20030426-9) unstable; urgency=low

  * modutils/depmod.c
    - fix base_dir for modules.dep 

 -- Bastian Blank <waldi@debian.org>  Sat, 07 Jun 2003 14:52:54 +0200

busybox-cvs (0.60.99.cvs20030426-8) unstable; urgency=low

  * util-linux/fdisk.c
    - fix syscalls. (pending)
  * libpwd/*
    - don't build setgroups.o

 -- Bastian Blank <waldi@debian.org>  Tue, 03 Jun 2003 11:26:28 +0200

busybox-cvs (0.60.99.cvs20030426-7) unstable; urgency=low

  * libbb/*syscallc.c
    - fix syscalls. (upstream) (closes: #194631)
  * modutils/*
    - update complete objects code from upstream. (pending)
  * debian/config-*udeb*
    - update to busybox-applets.txt:1.14

 -- Bastian Blank <waldi@debian.org>  Thu, 29 May 2003 16:17:14 +0200

busybox-cvs (0.60.99.cvs20030426-6) unstable; urgency=low

  * modutils/Makefile.in
    - don't build anything if deactivated

 -- Bastian Blank <waldi@debian.org>  Sat, 24 May 2003 18:57:14 +0200

busybox-cvs (0.60.99.cvs20030426-5) unstable; urgency=low

  * debian/config-*udeb*
    - revert changes (closes: #192717, #192753)
    - readd initrd support (workaround)
    - make init quiet
  * archival/tar.c
    - fix usage of tar -O (upstream) (closes: #193788)

 -- Bastian Blank <waldi@debian.org>  Sat, 24 May 2003 13:25:36 +0200

busybox-cvs (0.60.99.cvs20030426-4) unstable; urgency=low

  * debian/config-*udeb*
    - update to busybox-applets.txt:1.12
  * debian/rules
    - use system instead of arch to determine which config file to use

 -- Bastian Blank <waldi@debian.org>  Fri, 09 May 2003 11:21:13 +0200

busybox-cvs (0.60.99.cvs20030426-3) unstable; urgency=low

  * debian/config-udeb*
    - update to busybox-applets.txt:1.11

 -- Bastian Blank <waldi@debian.org>  Wed, 07 May 2003 10:37:40 +0200

busybox-cvs (0.60.99.cvs20030426-2) unstable; urgency=low

  * modutils/*
    - modprobe failes gracefully if the module is already loaded. (pending)
    - implement depmod. (pending)
  * debian/config*
    - update

 -- Bastian Blank <waldi@debian.org>  Wed, 30 Apr 2003 14:12:36 +0200

busybox-cvs (0.60.99.cvs20030426-1) unstable; urgency=low

  * new cvs version

 -- Bastian Blank <waldi@debian.org>  Sat, 26 Apr 2003 18:33:17 +0200

busybox-cvs (0.60.99.cvs20030420-4) unstable; urgency=low

  * network/libiproute/iproute.c
    - fix usage of ip route flush (upstream)

 -- Bastian Blank <waldi@debian.org>  Fri, 25 Apr 2003 16:48:43 +0200

busybox-cvs (0.60.99.cvs20030420-3) unstable; urgency=low

  * debian/config-*udeb*
    - update to busybox-applets.txt:1.10

 -- Bastian Blank <waldi@debian.org>  Fri, 25 Apr 2003 14:03:23 +0200

busybox-cvs (0.60.99.cvs20030420-2) unstable; urgency=low

  * archival/tar.c, archival/libunarchive/data_extract_all.c
    - unlink files first (upstream patch)

 -- Bastian Blank <waldi@debian.org>  Mon, 21 Apr 2003 12:42:06 +0200

busybox-cvs (0.60.99.cvs20030420-1) unstable; urgency=low

  * new cvs version
  * debian/config*-udeb*
    - add ifconfig/route for easier transition
  * debian/config-net-udeb-i386
    - add logger
  * debian/config-udeb*
    - add uniq

 -- Bastian Blank <waldi@debian.org>  Sun, 20 Apr 2003 21:02:58 +0200

busybox-cvs (0.60.99.cvs20030405-1) unstable; urgency=low

  * new cvs version
  * debian/control
    - add busybox-cvs-net-udeb
  * debian/rules
    - arch depend debs
    - new net-udeb
  * debian/config*
    - cleanup applet list

 -- Bastian Blank <waldi@debian.org>  Sat, 05 Apr 2003 11:44:50 +0200

busybox-cvs (0.60.99.cvs20030221-1) unstable; urgency=low

  * new cvs version
  * enable new applets in udeb

 -- Bastian Blank <waldi@debian.org>  Fri, 21 Feb 2003 23:15:16 +0100

busybox-cvs (0.60.99.cvs20030114-1) unstable; urgency=low

  * new cvs version

 -- Bastian Blank <waldi@debian.org>  Tue, 14 Jan 2003 17:06:43 +0000

busybox-cvs (0.60.99.cvs20030105-1) unstable; urgency=low

  * Fix ip command build failure on ia64 (Closes: #172580
  * Dont build with BSD partition table support in fdisk, fails on m68k 

 -- Glenn McGrath <bug1@home>  Sun,  5 Jan 2003 12:48:05 +1100

busybox-cvs (0.60.99.cvs20030104-2) unstable; urgency=low

  * floppy-retriever needs the cut command in the udeb 

 -- Glenn McGrath <bug1@debian.org>  Sat,  4 Jan 2003 17:13:05 +1100

busybox-cvs (0.60.99.cvs20030104-1) unstable; urgency=low

  * new cvs version
  * Include new applets in the static package
  * Include ash in the udeb

 -- Glenn McGrath <bug1@debian.org>  Sat,  4 Jan 2003 13:39:04 +1100

busybox-cvs (0.60.99.cvs20021214-1) unstable; urgency=low

  * new cvs version
    - udhcp merge.
  * fix location of ip link.

 -- Bastian Blank <waldi@debian.org>  Sat, 14 Dec 2002 13:52:15 +0100

busybox-cvs (0.60.99.cvs20021210-1) unstable; urgency=low

  * new cvs version
    - various upstream fixes found in the last version.
  * busybox-cvs-udeb
    - include readlink and realpath.

 -- Bastian Blank <waldi@debian.org>  Tue, 10 Dec 2002 21:23:40 +0100

busybox-cvs (0.60.99.cvs20021209-2) unstable; urgency=low

  * cleanup scripts/config/ within make clean (closes: #172413)
  * busybox-cvs-udeb
    - include readlink
  * include manpages within busybox-cvs and busybox-cvs-static

 -- Bastian Blank <waldi@debian.org>  Mon, 09 Dec 2002 22:09:52 +0100

busybox-cvs (0.60.99.cvs20021209-1) unstable; urgency=low

  * New cvs version.
    - fix udhcpc for use with ip.
    - klogd supports -c.
  * busybox-cvs-udeb
    - set priority to extra. (closes: #172302)
    - don't longer provide busybox-udeb.

 -- Bastian Blank <waldi@debian.org>  Mon, 09 Dec 2002 16:22:03 +0100

busybox-cvs (0.60.99.cvs20021203-1) unstable; urgency=low

  * New packages based on busybox cvs.
  * changes for the udeb
    - enable ip applet with address, link and route part.
    - enable udhcpc.
    - disable ifconfig and route applet.
    - disable ls color.

 -- Bastian Blank <waldi@debian.org>  Tue, 03 Dec 2002 18:51:00 +0100

busybox (1:0.60.0-1) unstable; urgency=low

  * New version released.  See changelog for details.

 -- Erik Andersen <andersee@debian.org>  Thu,  2 Aug 2001 12:12:37 -0600

busybox (1:0.52-1.1) unstable; urgency=high

  * Non-maintainer upload
  * Fixed wget -P handling (closes: #106223).

 -- Matt Kraai <kraai@debian.org>  Wed, 25 Jul 2001 11:01:38 -0600

busybox (1:0.52-1) unstable; urgency=high

  * New version released.  See changelog for details.

 -- Erik Andersen <andersee@debian.org>  Sat,  7 Jul 2001 01:23:45 -0600

busybox (1:0.51-10) unstable; urgency=high

  * Fix a compile problem with gcc 3.0 on hppa (closes: #102045)

 -- Erik Andersen <andersee@debian.org>  Sat, 23 Jun 2001 23:55:57 -0600

busybox (1:0.51-9) unstable; urgency=high

  * tar was creating leading directories with 0777 permissions as
    as reult of faulty umask handling.  This fixes it, repairing
    a grave security problem in the woody the boot floppies.
    (closes: #101169)

 -- Erik Andersen <andersee@debian.org>  Wed, 20 Jun 2001 16:17:38 -0600

busybox (1:0.51-8) unstable; urgency=high

  * Fix cp from /proc, where size=0 (closes: #100369)
  * Add some padding to struct sysinfo for m68k.
  * Apparently some bugs failed to be closed when master choked
    (closes: #99627, #99637, #98571)
  * Disable the busybox shell for the .deb, since it is not needed
    for the boot floppies.

 -- Erik Andersen <andersee@debian.org>  Mon, 11 Jun 2001 13:26:07 -0600

busybox (1:0.51-7) unstable; urgency=high

  * Fix tar permission setting for existing directories (closes: #99627)
  * Do not remove the .cvsignore files on 'make release' (closes: #99637)

 -- Erik Andersen <andersee@debian.org>  Mon,  4 Jun 2001 10:55:19 -0600

busybox (1:0.51-6) testing unstable; urgency=high

  * Update the version in testing so DHCP in the woody boot-floppies will work.
  * Enable expr for the boot-floppies (closes: #98433)
  * It builds on arm just fine now (closes: #97510)

 -- Erik Andersen <andersee@debian.org>  Wed, 23 May 2001 14:50:13 -0600

busybox (1:0.51-5) unstable; urgency=low

  * Backport a sed fix from 0.52pre
  * Backport chroot fix from 0.52pre

 -- Erik Andersen <andersee@debian.org>  Wed, 16 May 2001 23:50:33 -0600

busybox (1:0.51-4) unstable; urgency=low

  * Backport from 0.52pre an endianness bugfix for md5sum
  * Backport some updates to grep and sed
  * Fix 'wget -O -' so it sets the quiet flag

 -- Erik Andersen <andersee@debian.org>  Mon, 14 May 2001 14:17:36 -0600

busybox (1:0.51-3) unstable; urgency=low

  * This is the "I am an idiot" release.
  * Make cp and mv work again (closes: #97290) 
  * Fix the version number.

 -- Erik Andersen <andersee@debian.org>  Sat, 12 May 2001 17:35:58 -0600

busybox (0.51-2) unstable; urgency=low

  * Backport several release critical fixes into the 0.51 codebase
    so the boot-floppies will work again.
  * Fix a link ordering problem. (closes: #93362)
  * Fixed gunzip (closes: #94331)
  * Fixed cp permission setting (closes: #94580)

 -- Erik Andersen <andersee@debian.org>  Sat, 12 May 2001 11:22:35 -0600

busybox (0.51-1) unstable; urgency=low

  * Fixes several critical bugs (see the busybox changelog
    for complete details)
  * Force USE_SYSTEM_PWD_GRP=false, so busybox bypasses
    the glibc NSS libraries. (closes: #93362)
  * Fixed a bug in sed's address range handling (closes: #91758) 
  * Removed irrelevant cruft from the bottem of debian/changelog

 -- Erik Andersen <andersee@debian.org>  Tue, 10 Apr 2001 14:07:29 -0600

busybox (0.50-2) unstable; urgency=low
  
  * Enabled freeramdisk and pivot_root in the udeb (closes: #91336)
  * Disabled lash (the busybox shell) in the udeb (closes: #91337)
  * fixed a bug in syslog, a problem with rebooting when booted as
    an initrd, and a few other minor problems.

 -- Erik Andersen <andersee@debian.org>  Sun, 25 Mar 2001 20:59:44 -0700


busybox (0.50-2) unstable; urgency=low
  
  * Enabled freeramdisk and pivot_root in the udeb (closes: #91336)
  * Disabled lash (the busybox shell) in the udeb (closes: #91337)
  * fixed a bug in syslog, a problem with rebooting when booted as
    an initrd, and a few other minor problems.

 -- Erik Andersen <andersee@debian.org>  Sun, 25 Mar 2001 20:59:44 -0700

busybox (0.50-1) unstable; urgency=low

  * Tons on improvements all around -- See changelog for details.
  * Fix malformed Build-Depends (closes: #86930)
  * grep has worked for some time now (closes: #81084)
  * init compiles with DEBUG_INIT enabled (closes: #85794)
  * md5sum no longer displays filename when reading stdin (closes: #81283)
  * lsmod, rmmod, and insmod are no longer enabled (closes: #85642)
  * busybox and buxybox-static now conflict/replace each other (closes: #80421)

 -- Erik Andersen <andersee@debian.org>  Thu, 15 Mar 2001 14:45:00 -0700

busybox (0.49-1) unstable; urgency=low

  * Lots more source updates and bug fixes.  See changelog for details.

 -- Erik Andersen <andersee@debian.org>  Sat, 27 Jan 2001 01:45:53 -0700

busybox (0.48-1) unstable; urgency=low

  * Lots more source updates and bug fixes.  See changelog for details.
  * Now includes .udeb support for the debian-installer.  The .udeb 
    probably needs some more work, but this should be a good start.

 -- Erik Andersen <andersee@debian.org>  Wed, 13 Dec 2000 08:36:07 -0700

busybox (0.47-1) unstable; urgency=low

  * New version released.  See changelog for details.

 -- Erik Andersen <andersee@debian.org>  Mon, 25 Sep 2000 23:00:56 -0600

busybox (0.46-1) unstable; urgency=low

  * New version released.  See changelog for details.

 -- Erik Andersen <andersee@debian.org>  Tue, 11 Jul 2000 12:15:44 -0600

busybox (0.45-1) unstable; urgency=low

  * First attempt at packaging BusyBox as a .deb.  This has been in 
    in the Debian boot-floppies CVS tree forever.  Hopefully, having it as a
    standalone app will make life easier for me, the debian-installer team, and
    everyone else as well...
  * I have created a busybox-static that can be used as a rescue shell when you 
    hose your system.  Just invoke "busybox sh" to fir up the shell.  This has
    every app provided by busybox staically linked in.  There have been several
    times in the past that I would have loved to have this sitting on my system
    (i.e. when libc gets screwed up.)

 -- Erik Andersen <andersee@debian.org>  Tue, 27 Jun 2000 12:26:41 -0600
