diff options
Diffstat (limited to 'busybox/docs')
42 files changed, 4657 insertions, 0 deletions
diff --git a/busybox/docs/.cvsignore b/busybox/docs/.cvsignore new file mode 100644 index 0000000..ec9e94b --- /dev/null +++ b/busybox/docs/.cvsignore @@ -0,0 +1,8 @@ +BusyBox.txt +BusyBox.1 +BusyBox.html +busybox.txt +busybox.ps +busybox.pdf +busybox +busybox.pod diff --git a/busybox/docs/autodocifier.pl b/busybox/docs/autodocifier.pl new file mode 100755 index 0000000..eee67cf --- /dev/null +++ b/busybox/docs/autodocifier.pl @@ -0,0 +1,274 @@ +#!/usr/bin/perl -w + +use strict; +use Getopt::Long; + +# collect lines continued with a '\' into an array +sub continuation { + my $fh = shift; + my @line; + + while (<$fh>) { + my $s = $_; + $s =~ s/\\\s*$//; + #$s =~ s/#.*$//; + push @line, $s; + last unless (/\\\s*$/); + } + return @line; +} + +# regex && eval away unwanted strings from documentation +sub beautify { + my $text = shift; + $text =~ s/USAGE_NOT\w+\(.*?"\s*\)//sxg; + $text =~ s/USAGE_\w+\(\s*?(.*?)"\s*\)/$1"/sxg; + $text =~ s/"\s*"//sg; + my @line = split("\n", $text); + $text = join('', + map { + s/^\s*"//; + s/"\s*$//; + s/%/%%/g; + s/\$/\\\$/g; + eval qq[ sprintf(qq{$_}) ] + } @line + ); + return $text; +} + +# generate POD for an applet +sub pod_for_usage { + my $name = shift; + my $usage = shift; + + # Sigh. Fixup the known odd-name applets. + $name =~ s/dpkg_deb/dpkg-deb/g; + $name =~ s/fsck_minix/fsck.minix/g; + $name =~ s/mkfs_minix/mkfs.minix/g; + $name =~ s/run_parts/run-parts/g; + $name =~ s/start_stop_daemon/start-stop-daemon/g; + + # make options bold + my $trivial = $usage->{trivial}; + $trivial =~ s/(?<!\w)(-\w+)/B<$1>/sxg; + my @f0 = + map { $_ !~ /^\s/ && s/(?<!\w)(-\w+)/B<$1>/g; $_ } + split("\n", $usage->{full}); + + # add "\n" prior to certain lines to make indented + # lines look right + my @f1; + my $len = @f0; + for (my $i = 0; $i < $len; $i++) { + push @f1, $f0[$i]; + if (($i+1) != $len && $f0[$i] !~ /^\s/ && $f0[$i+1] =~ /^\s/) { + next if ($f0[$i] =~ /^$/); + push(@f1, "") unless ($f0[$i+1] =~ /^\s*$/s); + } + } + my $full = join("\n", @f1); + + # prepare notes if they exist + my $notes = (defined $usage->{notes}) + ? "$usage->{notes}\n\n" + : ""; + + # prepare examples if they exist + my $example = (defined $usage->{example}) + ? + "Example:\n\n" . + join ("\n", + map { "\t$_" } + split("\n", $usage->{example})) . "\n\n" + : ""; + + return + "=item B<$name>". + "\n\n$name $trivial\n\n". + "$full\n\n" . + "$notes" . + "$example" . + "-------------------------------". + "\n\n" + ; +} + +# the keys are applet names, and +# the values will contain hashrefs of the form: +# +# { +# trivial => "...", +# full => "...", +# notes => "...", +# example => "...", +# } +my %docs; + + +# get command-line options + +my %opt; + +GetOptions( + \%opt, + "help|h", + "pod|p", + "verbose|v", +); + +if (defined $opt{help}) { + print + "$0 [OPTION]... [FILE]...\n", + "\t--help\n", + "\t--pod\n", + "\t--verbose\n", + ; + exit 1; +} + + +# collect documenation into %docs + +foreach (@ARGV) { + open(USAGE, $_) || die("$0: $_: $!"); + my $fh = *USAGE; + my ($applet, $type, @line); + while (<$fh>) { + if (/^#define (\w+)_(\w+)_usage/) { + $applet = $1; + $type = $2; + @line = continuation($fh); + my $doc = $docs{$applet} ||= { }; + my $text = join("\n", @line); + $doc->{$type} = beautify($text); + } + } +} + + +# generate structured documentation + +my $generator = \&pod_for_usage; +foreach my $applet (sort keys %docs) { + print $generator->($applet, $docs{$applet}); +} + +exit 0; + +__END__ + +=head1 NAME + +autodocifier.pl - generate docs for busybox based on usage.h + +=head1 SYNOPSIS + +autodocifier.pl [OPTION]... [FILE]... + +Example: + + ( cat docs/busybox_header.pod; \ + docs/autodocifier.pl usage.h; \ + cat docs/busybox_footer.pod ) > docs/busybox.pod + +=head1 DESCRIPTION + +The purpose of this script is to automagically generate +documentation for busybox using its usage.h as the original source +for content. It used to be that same content has to be duplicated +in 3 places in slightly different formats -- F<usage.h>, +F<docs/busybox.pod>. This was tedious and error-prone, so it was +decided that F<usage.h> would contain all the text in a +machine-readable form, and scripts could be used to transform this +text into other forms if necessary. + +F<autodocifier.pl> is one such script. It is based on a script by +Erik Andersen <andersen@codepoet.org> which was in turn based on a +script by Mark Whitley <markw@codepoet.org> + +=head1 OPTIONS + +=over 4 + +=item B<--help> + +This displays the help message. + +=item B<--pod> + +Generate POD (this is the default) + +=item B<--verbose> + +Be verbose (not implemented) + +=back + +=head1 FORMAT + +The following is an example of some data this script might parse. + + #define length_trivial_usage \ + "STRING" + #define length_full_usage \ + "Prints out the length of the specified STRING." + #define length_example_usage \ + "$ length Hello\n" \ + "5\n" + +Each entry is a cpp macro that defines a string. The macros are +named systematically in the form: + + $name_$type_usage + +$name is the name of the applet. $type can be "trivial", "full", "notes", +or "example". Every documentation macro must end with "_usage". + +The definition of the types is as follows: + +=over 4 + +=item B<trivial> + +This should be a brief, one-line description of parameters that +the command expects. This will be displayed when B<-h> is issued to +a command. I<REQUIRED> + +=item B<full> + +This should contain descriptions of each option. This will also +be displayed along with the trivial help if CONFIG_FEATURE_TRIVIAL_HELP +is disabled. I<REQUIRED> + +=item B<notes> + +This is documentation that is intended to go in the POD or SGML, but +not be printed when a B<-h> is given to a command. To see an example +of notes being used, see init_notes_usage in F<usage.h>. I<OPTIONAL> + +=item B<example> + +This should be an example of how the command is actually used. +This will not be printed when a B<-h> is given to a command -- it +will only be included in the POD or SGML documentation. I<OPTIONAL> + +=back + +=head1 FILES + +F<usage.h> + +=head1 COPYRIGHT + +Copyright (c) 2001 John BEPPU. All rights reserved. This program is +free software; you can redistribute it and/or modify it under the same +terms as Perl itself. + +=head1 AUTHOR + +John BEPPU <b@ax9.org> + +=cut + +# $Id: autodocifier.pl,v 1.26 2004/04/06 15:26:25 andersen Exp $ diff --git a/busybox/docs/busybox.net/.cvsignore b/busybox/docs/busybox.net/.cvsignore new file mode 100644 index 0000000..393b002 --- /dev/null +++ b/busybox/docs/busybox.net/.cvsignore @@ -0,0 +1,2 @@ +BusyBox.html +busybox.tar.gz diff --git a/busybox/docs/busybox.net/FAQ.html b/busybox/docs/busybox.net/FAQ.html new file mode 100644 index 0000000..a9324ae --- /dev/null +++ b/busybox/docs/busybox.net/FAQ.html @@ -0,0 +1,324 @@ +<!--#include file="header.html" --> + + +<h3>Frequently Asked Questions</h3> + +This is a collection of some of the more frequently asked questions +about BusyBox. Some of the questions even have answers. If you +have additions to this FAQ document, we would love to add them, + +<ol> +<li><a href="#kernel">Which Linux kernel versions are supported?</a> +<li><a href="#arch">Which architectures does BusyBox run on?</a> +<li><a href="#libc">Which C libraries are supported?</a> +<li><a href="#commercial">Can I include BusyBox as part of the software on my device?</a> +<li><a href="#bugs">I think I found a bug in BusyBox! What should I do?!</a> +<li><a href="#job_control">Why do I keep getting "sh: can't access tty; job control + turned off" errors? Why doesn't Control-C work within my shell?</a> +<li><a href="#demanding">I demand that you to add <favorite feature> right now! How come + you don't answer all my questions on the mailing list instantly? I demand + that you help me with all of my problems <em>Right Now</em>!</a> +<li><a href="#getting_started">How can I get started using BusyBox?</a> +<li><a href="#helpme">I need help with BusyBox! What should I do?</a> +<li><a href="#contracts">I need you to add <favorite feature>! Are the BusyBox developers willing to + be paid in order to fix bugs or add in <favorite feature>? Are you willing to provide + support contracts?</a> +<li><a href="#support">I think you guys are great and I want to help support your work!</a> + + +</ol> + + +<hr /> +<p> +<h2><a name="kernel">Which Linux kernel versions are supported?</a></h2> +<p> + + + Full functionality requires Linux 2.2.x or better. A large fraction of the + code should run on just about anything. While the current code is fairly + Linux specific, it should be fairly easy to port the majority of the code + to support, say, FreeBSD or Solaris, or Mac OS X, or even Windows (if you + are into that sort of thing). + + +<hr /> +<p> +<h2><a name="arch">Which architectures does BusyBox run on?</a></h2> +<p> + + + BusyBox in general will build on any architecture supported by gcc. + Kernel module loading for 2.2 and 2.4 Linux kernels is currently + limited to ARM, CRIS, H8/300, x86, ia64, x86_64, m68k, MIPS, PowerPC, + S390, SH3/4/5, Sparc, v850e, and x86_64 for 2.4.x kernels. + + With 2.6.x kernels, module loading support should work on all architectures. + + +<hr /> +<p> +<h2><a name="libc">Which C libraries are supported?</a></h2> +<p> + + + uClibc and glibc are supported. People have been looking at newlib and + dietlibc, but they are currently considered unsupported, untested, or + worse. Linux-libc5 is no longer supported. If you require a small C + library, you should probably use uClibc. + + +<hr /> +<p> +<h2><a name="commercial">Can I include BusyBox as part of the software on my device?</h2> + + Yes. As long as you <a href="http://busybox.net/license.html">fully comply + with the generous terms of the GPL BusyBox license</a> you can ship BusyBox + as part of the software on your device. + + <a href="#support">Please consider sharing some of the money you make.</a> + + +<hr /> +<p> +<h2><a name="bugs">I think I found a bug in BusyBox! What should I do?</h2> +<p> + + If you find a problem with BusyBox, please submit a detailed bug report to + the BusyBox mailing list at <a href="mailto:busybox@mail.busybox.net"> + busybox@mail.busybox.net</a>. Please do not send private email to Erik + (the maintainer of BusyBox) asking for private help unless you are planning + on paying for consulting services. When we answer questions on the BusyBox + mailing list, it helps everyone, while private answers help only you... + + <p> + + If you find bugs, please submit a detailed bug report to the BusyBox mailing + list at busybox@mail.busybox.net. A well-written bug report should include a + transcript of a shell session that demonstrates the bad behavior and enables + anyone else to duplicate the bug on their own machine. The following is such + an example: + +<pre> + To: busybox@mail.busybox.net + From: diligent@testing.linux.org + Subject: /bin/date doesn't work + + Package: BusyBox + Version: 1.00 + + When I execute BusyBox 'date' it produces unexpected results. + With GNU date I get the following output: + + $ date + Fri Oct 8 14:19:41 MDT 2004 + + But when I use BusyBox date I get this instead: + + $ date + illegal instruction + + I am using Debian unstable, kernel version 2.4.27 on a x86 system, + and the latest uClibc from CVS. Thanks for the wonderful program! + + -Diligent +</pre> + + Note the careful description and use of examples showing not only what BusyBox + does, but also a counter example showing what an equivalent GNU app does. Bug + reports lacking proper detail may never be fixed... Thanks for understanding. + +<hr /> +<p> +<h2><a name="job_control">Why do I keep getting "sh: can't access tty; job control + turned off" errors? Why doesn't Control-C work within my shell?</a></h2> +<p> + + Job control will be turned off since your shell can not obtain a controlling + terminal. This typically happens when you run your shell on /dev/console. + The kernel will not provide a controlling terminal on the /dev/console + device. Your should run your shell on a normal tty such as tty1 or ttyS0 + and everything will work perfectly. If you <em>REALLY</em> want your shell + to run on /dev/console, then you can hack your kernel (if you are into that + sortof thing) by changing drivers/char/tty_io.c to change the lines where + it sets "noctty = 1;" to instead set it to "0". I recommend you instead + run your shell on a real console... + + +<hr /> +<p> +<h2><a name="getting_started">How can I get started using BusyBox?</a></h2> +<p> + + An easy method to build your own basic BusyBox based system, is to + follow these simple steps: + <ul> + <li> Point your web browser <a href="/cgi-bin/cvsweb/buildroot/">here</a> + <li> Click on "Download tarball" + <li> Unpack the tarball on your Linux system somewhere + <li> run 'make' and configure things to taste. + <li> run 'unset CC'. Some Linux systems (i.e. Gentoo) set 'CC' + in the system environment which messes up cross compiles. + <li> run 'make' + <li> go have lunch, drink a pop, call a friend, play a video game, etc + till it finishes downloading software and compiling things. + <li> You should now have a shiny new BusyBox based system. + </ul> + + +<hr /> +<p> +<h2><a name="demanding">I demand that you to add <favorite feature> right now! How come + you don't answer all my questions on the mailing list instantly? I demand + that you help me with all of my problems <em>Right Now</em>!</a></h2> +<p> + + You have not paid us a single cent and yet you still have the product of + many years of our work. We are not your slaves! We work on BusyBox + because we find it useful and interesting. If you go off flaming us, we + will ignore you. + + +<hr /> +<p> +<h2><a name="helpme">I need help with BusyBox! What should I do?</a></h2> +<p> + + If you find that you need help with BusyBox, you can ask for help on the + BusyBox mailing list at busybox@mail.busybox.net. In addition to the BusyBox + mailing list, Erik (andersee), Manuel (mjn3) and others are known to hang out + on the uClibc IRC channel: #uclibc on irc.freenode.net. + + <p> + + <b>Please do not send private email to Erik, Manuel, or the other BusyBox + contributors asking for private help unless you are planning on paying for + consulting services.</b> + + <p> + + When we answer questions on the BusyBox mailing list, it helps everyone + since people with similar problems in the future will be able to get help + by searching the mailing list archives. Private help is reserved as a paid + service. If you need to use private communication, or if you are serious + about getting timely assistance with BusyBox, you should seriously consider + paying for consulting services. + + <p> + + + +<hr /> +<p> +<h2><a name="contracts">I need you to add <favorite feature>! Are the BusyBox + developers willing to be paid in order to fix bugs or add in <favorite feature>? + Are you willing to provide support contracts?</a></h2> +<p> + + Sure! Now you have our attention! What you should do is contact <a + href="mailto:andersen@codepoet.org">Erik Andersen</a> of <a + href="http://codepoet-consulting.com/">CodePoet Consulting</a> to bid + on your project. If Erik is too busy to personally add your feature, there + are many other active BusyBox contributors who will almost certainly be able + to help you out. Erik can contact them privatly, and may even let you to + post your request for services on the mailing list. + + +<hr /> +<p> +<h2><a name="support">I think you guys are great and I want to help support your work!</a></h2> +<p> + + Wow, that would be great! Erik personally pays for all the bandwidth, and + all servers used for busybox.net out of his own pocket. If you would like + to make a donation to help support BusyBox, and/or request features, you + can click here: + + <!-- Begin PayPal Logo --> + <center> + <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> + <input type="hidden" name="cmd" value="_xclick"> + <input type="hidden" name="business" value="andersen@codepoet.org"> + <input type="hidden" name="item_name" value="Support BusyBox"> + <input type="hidden" name="image_url" value="http://codepoet-consulting.com/images/codepoet.png"> + <input type="hidden" name="no_shipping" value="1"> + <input type="image" src="images/donate.png" name="submit" alt="Make donation using PayPal"> + </form> + </center> + <!-- End PayPal Logo --> + + If you prefer to contact Erik directly to make a donation, donate hardware, + request support, etc, you can contact + <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> here. + CodePoet Consulting can accept both Visa and MasterCard for those that do not + trust PayPal... + +<hr /> + +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> +<br> + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/about.html b/busybox/docs/busybox.net/about.html new file mode 100644 index 0000000..c086263 --- /dev/null +++ b/busybox/docs/busybox.net/about.html @@ -0,0 +1,63 @@ +<!--#include file="header.html" --> + + +<!-- Begin Introduction section --> + +<h3>BusyBox: The Swiss Army Knife of Embedded Linux</h3> + + +BusyBox combines tiny versions of many common UNIX utilities into a single +small executable. It provides replacements for most of the utilities you +usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox +generally have fewer options than their full-featured GNU cousins; however, +the options that are included provide the expected functionality and behave +very much like their GNU counterparts. BusyBox provides a fairly complete +environment for any small or embedded system. + +<p> + +BusyBox has been written with size-optimization and limited resources in +mind. It is also extremely modular so you can easily include or exclude +commands (or features) at compile time. This makes it easy to customize +your embedded systems. To create a working system, just add some device +nodes in /dev, a few configuration files in /etc, and a Linux kernel. + +<p> + +BusyBox is maintained by <a href= +"http://codepoet.org/andersen/erik/erik.html">Erik Andersen</a>, and +licensed under the +<a href= "http://www.gnu.org/copyleft/gpl.html">GNU GENERAL PUBLIC LICENSE</a> + +<p> +<p> + +<h3>Sponsors</h3> + +Please visit our sponsors and thank them for their +support! They have provided money for equipment and +bandwidth. Next time you need help with a project, +consider these fine companies! + + +<ul> + <li><a href="http://www.penguru.net">Penguru Consulting</a><br> + Custom development for embedded Linux systems and multimedia platforms + </li> + + <li><a href="http://opensource.se/">opensource.se</a><br> + Embedded open source consulting in Europe. + </li> + + <li><a href="http://www.codepoet-consulting.com">Codepoet Consulting</a><br> + Custom Linux, embedded Linux, BusyBox, and uClibc + development. + </li> + +</ul> + +If you wish to be a sponsor, or if you have already contributed and would like +your name added here, email <a href= "mailto:andersen@codepoet.org">Erik</a>. + + +<!--#include file="footer.html" --> diff --git a/busybox/docs/busybox.net/busybox-growth.ps b/busybox/docs/busybox.net/busybox-growth.ps new file mode 100644 index 0000000..2379def --- /dev/null +++ b/busybox/docs/busybox.net/busybox-growth.ps @@ -0,0 +1,404 @@ +%!PS-Adobe-2.0 +%%Title: busybox-growth.ps +%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347 +%%CreationDate: Tue Apr 10 14:03:36 2001 +%%DocumentFonts: (atend) +%%BoundingBox: 50 40 554 770 +%%Orientation: Landscape +%%Pages: (atend) +%%EndComments +/gnudict 120 dict def +gnudict begin +/Color true def +/Solid true def +/gnulinewidth 5.000 def +/userlinewidth gnulinewidth def +/vshift -46 def +/dl {10 mul} def +/hpt_ 31.5 def +/vpt_ 31.5 def +/hpt hpt_ def +/vpt vpt_ def +/M {moveto} bind def +/L {lineto} bind def +/R {rmoveto} bind def +/V {rlineto} bind def +/vpt2 vpt 2 mul def +/hpt2 hpt 2 mul def +/Lshow { currentpoint stroke M + 0 vshift R show } def +/Rshow { currentpoint stroke M + dup stringwidth pop neg vshift R show } def +/Cshow { currentpoint stroke M + dup stringwidth pop -2 div vshift R show } def +/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def + /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def +/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } + {pop pop pop Solid {pop []} if 0 setdash} ifelse } def +/BL { stroke gnulinewidth 2 mul setlinewidth } def +/AL { stroke gnulinewidth 2 div setlinewidth } def +/UL { gnulinewidth mul /userlinewidth exch def } def +/PL { stroke userlinewidth setlinewidth } def +/LTb { BL [] 0 0 0 DL } def +/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def +/LT0 { PL [] 1 0 0 DL } def +/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def +/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def +/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def +/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def +/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def +/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def +/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def +/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def +/Pnt { stroke [] 0 setdash + gsave 1 setlinecap M 0 0 V stroke grestore } def +/Dia { stroke [] 0 setdash 2 copy vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke + Pnt } def +/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V + currentpoint stroke M + hpt neg vpt neg R hpt2 0 V stroke + } def +/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke + Pnt } def +/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M + hpt2 vpt2 neg V currentpoint stroke M + hpt2 neg 0 R hpt2 vpt2 V stroke } def +/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke + Pnt } def +/Star { 2 copy Pls Crs } def +/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath fill } def +/TriUF { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath fill } def +/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke + Pnt } def +/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath fill} def +/DiaF { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath fill } def +/Pent { stroke [] 0 setdash 2 copy gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore Pnt } def +/PentF { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath fill grestore } def +/Circle { stroke [] 0 setdash 2 copy + hpt 0 360 arc stroke Pnt } def +/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def +/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def +/C1 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + vpt 0 360 arc closepath } bind def +/C2 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C3 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C4 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C5 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc + 2 copy moveto + 2 copy vpt 180 270 arc closepath fill + vpt 0 360 arc } bind def +/C6 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C7 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 270 arc closepath fill + vpt 0 360 arc closepath } bind def +/C8 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C9 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 270 450 arc closepath fill + vpt 0 360 arc closepath } bind def +/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill + 2 copy moveto + 2 copy vpt 90 180 arc closepath fill + vpt 0 360 arc closepath } bind def +/C11 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 180 arc closepath fill + 2 copy moveto + 2 copy vpt 270 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C12 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C13 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 0 90 arc closepath fill + 2 copy moveto + 2 copy vpt 180 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/C14 { BL [] 0 setdash 2 copy moveto + 2 copy vpt 90 360 arc closepath fill + vpt 0 360 arc } bind def +/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill + vpt 0 360 arc closepath } bind def +/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto + neg 0 rlineto closepath } bind def +/Square { dup Rec } bind def +/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def +/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def +/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def +/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def +/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill + exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def +/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill + 2 copy vpt Square fill + Bsquare } bind def +/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def +/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def +/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill + Bsquare } bind def +/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill + Bsquare } bind def +/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def +/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy vpt Square fill Bsquare } bind def +/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill + 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def +/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def +/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def +/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def +/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def +/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def +/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def +/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def +/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def +/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def +/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def +/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def +/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def +/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def +/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def +/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def +/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def +/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def +/DiaE { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V closepath stroke } def +/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V closepath stroke } def +/TriUE { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V closepath stroke } def +/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V closepath stroke } def +/PentE { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + closepath stroke grestore } def +/CircE { stroke [] 0 setdash + hpt 0 360 arc stroke } def +/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def +/DiaW { stroke [] 0 setdash vpt add M + hpt neg vpt neg V hpt vpt neg V + hpt vpt V hpt neg vpt V Opaque stroke } def +/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M + 0 vpt2 neg V hpt2 0 V 0 vpt2 V + hpt2 neg 0 V Opaque stroke } def +/TriUW { stroke [] 0 setdash vpt 1.12 mul add M + hpt neg vpt -1.62 mul V + hpt 2 mul 0 V + hpt neg vpt 1.62 mul V Opaque stroke } def +/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M + hpt neg vpt 1.62 mul V + hpt 2 mul 0 V + hpt neg vpt -1.62 mul V Opaque stroke } def +/PentW { stroke [] 0 setdash gsave + translate 0 hpt M 4 {72 rotate 0 hpt L} repeat + Opaque stroke grestore } def +/CircW { stroke [] 0 setdash + hpt 0 360 arc Opaque stroke } def +/BoxFill { gsave Rec 1 setgray fill grestore } def +end +%%EndProlog +%%Page: 1 1 +gnudict begin +gsave +50 50 translate +0.100 0.100 scale +90 rotate +0 -5040 translate +0 setgray +newpath +(Helvetica) findfont 140 scalefont setfont +1.000 UL +LTb +560 420 M +63 0 V +6409 0 R +-63 0 V +476 420 M +(0) Rshow +560 1056 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(100) Rshow +560 1692 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(200) Rshow +560 2328 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(300) Rshow +560 2964 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(400) Rshow +560 3600 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(500) Rshow +560 4236 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(600) Rshow +560 4872 M +63 0 V +6409 0 R +-63 0 V +-6493 0 R +(700) Rshow +1531 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +(400) Cshow +2825 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +(600) Cshow +4120 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +(800) Cshow +5414 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +(1000) Cshow +6708 420 M +0 63 V +0 4389 R +0 -63 V +0 -4529 R +(1200) Cshow +1.000 UL +LTb +560 420 M +6472 0 V +0 4452 V +-6472 0 V +560 420 L +0 2646 M +currentpoint gsave translate 90 rotate 0 0 M +(tar.gz size \(Kb\)) Cshow +grestore +3796 140 M +(time \(days since Jan 1, 1998\)) Cshow +1.000 UL +LT0 +696 420 M +0 593 V +1255 0 V +0 15 V +214 0 V +0 6 V +958 0 V +0 1 V +-84 0 V +0 37 V +168 0 V +0 262 V +13 0 V +0 56 V +91 0 V +0 33 V +6 0 V +0 1 V +19 0 V +0 11 V +20 0 V +0 13 V +32 0 V +0 104 V +52 0 V +0 27 V +65 0 V +0 15 V +39 0 V +0 126 V +174 0 V +0 103 V +52 0 V +0 49 V +175 0 V +0 56 V +433 0 V +0 661 V +415 0 V +0 857 V +123 0 V +0 -291 V +498 0 V +0 208 V +505 0 V +0 66 V +291 0 V +0 115 V +311 0 V +0 449 V +162 0 V +0 309 V +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Helvetica +%%Pages: 1 diff --git a/busybox/docs/busybox.net/copyright.txt b/busybox/docs/busybox.net/copyright.txt new file mode 100644 index 0000000..528338d --- /dev/null +++ b/busybox/docs/busybox.net/copyright.txt @@ -0,0 +1,29 @@ + +The code and graphics on this website (and it's mirror sites, if any) are +Copyright (c) 1999-2004 by Erik Andersen. All rights reserved. + +Documents on this Web site including their graphical elements, design, and +layout are protected by trade dress and other laws and MAY BE COPIED OR +IMITATED IN WHOLE OR IN PART. THIS WEBSITE IS LICENSED FREE OF CHARGE, THERE +IS NO WARRANTY FOR THE WEBSITE TO THE EXTENT PERMITTED BY APPLICABLE LAW. +SHOULD THIS WEBSITE PROVE DEFECTIVE, YOU MAY ASSUME THAT SOMEONE MIGHT GET +AROUND TO SERVICING, REPAIRING OR CORRECTING IT SOMETIME WHEN THEY HAVE NOTHING +BETTER TO DO. REGARDLESS, YOU GET TO KEEP BOTH PIECES. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY +COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THIS +WEBSITE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THIS WEBSITE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR +LOSS OF HAIR, LOSS OF LIFE, LOSS OF MEMORY, LOSS OF YOUR CARKEYS, MISPLACEMENT +OF YOUR PAYCHECK, OR COMMANDER DATA BEING RENDERED UNABLE TO ASSIST THE +STARFLEET OFFICERS ABORD THE STARSHIP ENTERPRISE TO RECALIBRATE THE MAIN +DEFLECTOR ARRAY, LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE +WEBSITE TO OPERATE WITH YOUR WEBBROWSER), EVEN IF SUCH HOLDER OR OTHER PARTY +HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +You have been warned. + +You can contact the webmaster at <andersen@codepoet.org> if you have some sort +of problem with this. + diff --git a/busybox/docs/busybox.net/cvs_anon.html b/busybox/docs/busybox.net/cvs_anon.html new file mode 100644 index 0000000..f823d05 --- /dev/null +++ b/busybox/docs/busybox.net/cvs_anon.html @@ -0,0 +1,57 @@ +<!--#include file="header.html" --> + + +<h3>Anonymous CVS</h3> + +We allow anonymous (read-only) CVS access to everyone. The first command you +need to run for anonymous CVS access is: +<pre> +cvs -d:pserver:anonymous@busybox.net:/var/cvs login</pre> +<p> +CVS will prompt you for a password. Just press the Enter key (there is no +password for anonymous access). This step only needs to be done once, the first +time you attempt to access CVS. +<p> +Once the login is complete, you can then check the list of available +CVS modules by running the following command (all on one line): +<pre> +cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -c </pre> + +<p> +If you wish, you can then check out a local copy of any of the +available modules. The following is an example of how to grab +a copy of busybox and tinylogin: +<pre> + cvs -z3 -d:pserver:anonymous@busybox.net:/var/cvs co -P busybox tinylogin</pre> +This will create a directory called <b>busybox</b> and a directory called +<b>tinylogin</b> in the current directory. These directories contain the +latest and greatest source code for busybox and tinylogin. + +<p> +If you are not already familiar with using CVS, I recommend you visit +this quick <a href="/cvs_howto.html">Introduction to CVS</a>. + +<p> +I usually create a ~/.cvsrc file with the following things in it, and I +recommend you should use the same: +<pre> + -z3 + update -dP + rdiff -u + diff -ubBwpN + checkout -P</pre> + +<p> +Once you've checked out a copy of the source tree, you can update your +source tree at any time so it is in sync with the latest and greatest by +running the command: +<pre> +cvs update</pre> + +Because you've only been granted anonymous access to the tree, you won't be +able to commit any changes. Changes can be submitted for inclusion by posting +them to the appropriate mailing list. For those that are actively contributing +<a href="cvs_write.html">CVS write access</a> can be made available. + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/cvs_howto.html b/busybox/docs/busybox.net/cvs_howto.html new file mode 100644 index 0000000..837d6cd --- /dev/null +++ b/busybox/docs/busybox.net/cvs_howto.html @@ -0,0 +1,44 @@ +<!--#include file="header.html" --> + + +<h3>How to use CVS</h3> + + +If you want to know all the gory details, you will want to visit +<a href="http://www.cvshome.org/">the CVS main web page</a>.<p> +For the impatient, the following is probably about all you need to know: +<p> + +<dl> + <dt><pre>cvs checkout -c</pre> + <dd>Will list the modules available for checkout + <dt><pre>cvs checkout < module name ></pre> + <dd>Will checkout the named module + <dt><pre>cvs co < module name ></pre> + <dd>Same thing + <dt><pre>cvs update</pre> + + <dd>Updates your local archive so it is in sync with the repository + -- your local updates are left intact. Tries to merge upstream updates + into your local updates. You will see the following tags when it is + updating your local repository: C means conflict, U means update, + P means patched, and M means modified. + <dt><pre>cvs up</pre> + <dd>Same thing + <dt><pre>cvs update < file name ></pre> + <dd>Same thing but for just the named file(s)/directory(s). + <dt><pre>cvs commit</pre> + <dd>Will check in all your work. + <dt><pre>cvs add < file name ></pre> + + <dd>Adds the named file/directory into CVS + <dt><pre>cvs remove < file name ></pre> + <dd>Removes the named file/directory from the upstream repository. + <dt><pre>cvs rm < file name ></pre> + <dd>Same thing + <dt><pre>cvs log < file name ></pre> +</dl> + + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/cvs_write.html b/busybox/docs/busybox.net/cvs_write.html new file mode 100644 index 0000000..5c882f4 --- /dev/null +++ b/busybox/docs/busybox.net/cvs_write.html @@ -0,0 +1,32 @@ +<!--#include file="header.html" --> + + +<h3>CVS Read/Write Access</h3> + +If you want to be able to commit things to CVS, first contribute some +stuff to show you are serious. Then, very nicely ask +<a href="mailto:andersen@codepoet.org">Erik Andersen</a> if he will set you up with +an account. To access CVS, you will want to add the following to set up your environment: +<pre> +$ export CVS_RSH=/usr/bin/ssh +$ export CVSROOT='username@cvs.busybox.net:/var/cvs'</pre> +<br> +It goes without saying you must change <em>username</em> to your own +username... +<p> + +To obtain commit access, you will need to demonstrate you are +serious by submitting a few good patches first. Then, you will need to +select a user-name to use when committing stuff, and finally, you will +need to send me the username you have selected, an ssh key, and the email +address where you prefer email to be sent (I will forward any email sent +to you, but not store it). + +<p> +Note that if you would prefer to keep your communications with me +private, you can encrypt your email using my +<a href="http://www.codepoet.org/andersen/erik/gpg.asc">public key</a>. + +<!--#include file="footer.html" --> + + diff --git a/busybox/docs/busybox.net/docs.html b/busybox/docs/busybox.net/docs.html new file mode 100644 index 0000000..fc9ac6d --- /dev/null +++ b/busybox/docs/busybox.net/docs.html @@ -0,0 +1,27 @@ +<!--#include file="header.html" --> + + +<h3>Documentation</h3> +Current documentation for BusyBox includes: + +<ul> + <li><a href= + "downloads/BusyBox.html">BusyBox.html</a>. This is a + list of the all the available commands in BusyBox + with complete usage information and examples of how + to use each app. I have spent a <em>lot</em> of time + updating these docs and trying to make them fairly + comprehensive. If you find any errors (factual, + grammatical, whatever) please let me know.</li> + + <li><a href="downloads/README">README</a>. This is + the README file included in the busybox source + release.</li> + + <li>If you need more help, the BusyBox <a href= + "lists/busybox/">mailing list</a> is a good place to + start.</li> +</ul> + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/download.html b/busybox/docs/busybox.net/download.html new file mode 100644 index 0000000..a6a86ac --- /dev/null +++ b/busybox/docs/busybox.net/download.html @@ -0,0 +1,38 @@ +<!--#include file="header.html" --> + + + +<h3>Download</h3> + +Source for the latest release can always be +downloaded from <a href="downloads">http://www.busybox.net/downloads</a>. + +<p> +You can also obtain <a href= "downloads/snapshots/">Daily Snapshots</a> of +the latest stable, and the latest development CVS source trees. + +<p> +BusyBox now has <b>two</b> CVS trees. The "busybox-stable" tree +contains the older 0.60.x stable series. The "busybox" tree contains +the latest 1.0.0-preX development version of busybox.<br> + +<ul> + <li> Click here to browse the <a href="/cgi-bin/cvsweb/busybox/"> + CVS tree for the 1.0.0-preX development version of BusyBox</a> + </li> + + <li>Click here to browse the <a href="/cgi-bin/cvsweb/busybox.stable/"> + CVS tree for the stable 0.60.x version of BusyBox</a>. + </li> + + <li>Anonymous <a href="cvs_anon.html">CVS access</a> is available. + </li> + + <li>For those that are actively contributing there is + even <a href="cvs_write.html">CVS write access</a>. + </li> + +</ul> + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/footer.html b/busybox/docs/busybox.net/footer.html new file mode 100644 index 0000000..9756f5d --- /dev/null +++ b/busybox/docs/busybox.net/footer.html @@ -0,0 +1,20 @@ +<!-- Footer --> + + + </td> + </tr> + </table> + +<hr /> + + <p> + <font face="arial, helvetica, sans-serif" size="-1"> + <a HREF="/copyright.txt">Copyright © 1999-2003 Erik Andersen</a> + <br> + Mail all comments, insults, suggestions and bribes to + <br> + Erik Andersen <A HREF="mailto:andersen@codepoet.org">andersen@codepoet.org</A><BR> + </font> + + </body> +</html> diff --git a/busybox/docs/busybox.net/header.html b/busybox/docs/busybox.net/header.html new file mode 100644 index 0000000..77c1418 --- /dev/null +++ b/busybox/docs/busybox.net/header.html @@ -0,0 +1,81 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" +"http://www.w3.org/TR/REC-html40/loose.dtd"> + +<html> + <head> + <title>BusyBox</title> + <style type="text/css"> + body { + background-color: #DEE2DE; + color: #000000; + } + :link { color: #660000 } + :visited { color: #660000 } + :active { color: #660000 } + td.c2 {font-family: arial, helvetica, sans-serif; font-size: 80%} + td.c1 {font-family: lucida, helvetica; font-size: 248%} + </style> + </head> + + <body> + <basefont face="lucida, helvetica, arial" size="3"> + + + + +<table border="0" cellpadding="0" cellspacing="0"> + + +<tr> +<td> + <div class="c3"> + <table border="0" cellspacing="1" cellpadding="2"> + <tr> + <td class="c1">BUSYBOX</td> + </tr> + </table> + </div> + + <a href="/"><IMG SRC="images/busybox1.png" alt="BusyBox" border="0"></a><BR> +</td> +</tr> + +<tr> + +<td valign="TOP"> + <br><a href="/about.html">About</a> + <br><a href="/screenshot.html">Screenshot</a> + <br><a href="/lists.html">Mailing Lists</a> + <br><a href="/news.html">Latest News</a> + <br><a href="/download.html">Download</a> + <br><a href="/FAQ.html">FAQ</a> + <br><a href="/cvs_anon.html">Accessing CVS</a> + <br><a href="/cgi-bin/cvsweb/busybox/">Browse CVS</a> + <br><a href="/docs.html">Documentation</a> + <br><a href="/products.html">Products</a> + <br><a href="/shame.html">Hall of Shame</a> + <br><a href="/license.html">License</a> + + <p><b>Related Sites</b> + <br><a href="http://uclibc.org/">uClibc.org</a> + <br><a href="http://udhcp.busybox.net/">udhcp</a> + <br><a href="http://tinylogin.busybox.net/">tinylogin</a> + <br><a href="http://www.ucdot.org/">uCdot</a> + <br><a href="http://www.linuxdevices.com">LinuxDevices</a> + <br><a href="http://slashdot.org/">Slashdot</a> + <br><a href="http://freshmeat.net/">Freshmeat</a> + <br><a href="http://linuxtoday.com/">Linux Today</a> + <br><a href="http://lwn.net/">Linux Weekly News</a> + <br><a href="http://www.tldp.org/HOWTO">Linux HOWTOs</a> + +<!-- + <a href="http://validator.w3.org/check/referer"><img + src="/images/vh40.gif" height=31 width=88 + align=left border=0 alt="Valid HTML 4.0!"></a> +--> + +</td> + + +<td Valign="TOP"> + diff --git a/busybox/docs/busybox.net/images/back.png b/busybox/docs/busybox.net/images/back.png Binary files differnew file mode 100644 index 0000000..7992386 --- /dev/null +++ b/busybox/docs/busybox.net/images/back.png diff --git a/busybox/docs/busybox.net/images/busybox.jpeg b/busybox/docs/busybox.net/images/busybox.jpeg Binary files differnew file mode 100644 index 0000000..37edc96 --- /dev/null +++ b/busybox/docs/busybox.net/images/busybox.jpeg diff --git a/busybox/docs/busybox.net/images/busybox.png b/busybox/docs/busybox.net/images/busybox.png Binary files differnew file mode 100644 index 0000000..b1eb92f --- /dev/null +++ b/busybox/docs/busybox.net/images/busybox.png diff --git a/busybox/docs/busybox.net/images/busybox1.png b/busybox/docs/busybox.net/images/busybox1.png Binary files differnew file mode 100644 index 0000000..4d3126a --- /dev/null +++ b/busybox/docs/busybox.net/images/busybox1.png diff --git a/busybox/docs/busybox.net/images/busybox2.jpg b/busybox/docs/busybox.net/images/busybox2.jpg Binary files differnew file mode 100644 index 0000000..abf8f06 --- /dev/null +++ b/busybox/docs/busybox.net/images/busybox2.jpg diff --git a/busybox/docs/busybox.net/images/busybox3.jpg b/busybox/docs/busybox.net/images/busybox3.jpg Binary files differnew file mode 100644 index 0000000..0fab84c --- /dev/null +++ b/busybox/docs/busybox.net/images/busybox3.jpg diff --git a/busybox/docs/busybox.net/images/dir.png b/busybox/docs/busybox.net/images/dir.png Binary files differnew file mode 100644 index 0000000..1d633ce --- /dev/null +++ b/busybox/docs/busybox.net/images/dir.png diff --git a/busybox/docs/busybox.net/images/donate.png b/busybox/docs/busybox.net/images/donate.png Binary files differnew file mode 100644 index 0000000..b55621b --- /dev/null +++ b/busybox/docs/busybox.net/images/donate.png diff --git a/busybox/docs/busybox.net/images/fm.mini.png b/busybox/docs/busybox.net/images/fm.mini.png Binary files differnew file mode 100644 index 0000000..c0883cd --- /dev/null +++ b/busybox/docs/busybox.net/images/fm.mini.png diff --git a/busybox/docs/busybox.net/images/gfx_by_gimp.png b/busybox/docs/busybox.net/images/gfx_by_gimp.png Binary files differnew file mode 100644 index 0000000..d583140 --- /dev/null +++ b/busybox/docs/busybox.net/images/gfx_by_gimp.png diff --git a/busybox/docs/busybox.net/images/ltbutton2.png b/busybox/docs/busybox.net/images/ltbutton2.png Binary files differnew file mode 100644 index 0000000..9bad949 --- /dev/null +++ b/busybox/docs/busybox.net/images/ltbutton2.png diff --git a/busybox/docs/busybox.net/images/sdsmall.png b/busybox/docs/busybox.net/images/sdsmall.png Binary files differnew file mode 100644 index 0000000..b102450 --- /dev/null +++ b/busybox/docs/busybox.net/images/sdsmall.png diff --git a/busybox/docs/busybox.net/images/text.png b/busybox/docs/busybox.net/images/text.png Binary files differnew file mode 100644 index 0000000..6034f89 --- /dev/null +++ b/busybox/docs/busybox.net/images/text.png diff --git a/busybox/docs/busybox.net/images/vh40.gif b/busybox/docs/busybox.net/images/vh40.gif Binary files differnew file mode 100644 index 0000000..c5e9402 --- /dev/null +++ b/busybox/docs/busybox.net/images/vh40.gif diff --git a/busybox/docs/busybox.net/images/written.in.vi.png b/busybox/docs/busybox.net/images/written.in.vi.png Binary files differnew file mode 100644 index 0000000..84f59bc --- /dev/null +++ b/busybox/docs/busybox.net/images/written.in.vi.png diff --git a/busybox/docs/busybox.net/index.html b/busybox/docs/busybox.net/index.html new file mode 100644 index 0000000..1bab6b0 --- /dev/null +++ b/busybox/docs/busybox.net/index.html @@ -0,0 +1 @@ +<!--#include file="news.html" --> diff --git a/busybox/docs/busybox.net/license.html b/busybox/docs/busybox.net/license.html new file mode 100644 index 0000000..14324f1 --- /dev/null +++ b/busybox/docs/busybox.net/license.html @@ -0,0 +1,135 @@ +<!--#include file="header.html" --> + + +<h3>The GPL BusyBox license</h3> + +There has been some confusion in the past as to exactly what is +required to safely distribute GPL'd software such as BusyBox as +part of a product. To ensure that there is no confusion +whatsoever, this page attempts to summarize what you should do to +ensure you do not accidentally violate the law. + +<p> +<h3>Complying with the BusyBox license is easy and completely free.</h3> + +U.S. and International Law protects copyright owners from the unauthorized +reproduction, adaptation, display, distribution, etc of copyright protected +works. Copyright violations (such as shipping BusyBox in a manner contrary to +its license) are subject to severe penalties. The courts can award up to +$150,000 per product shipped without even showing any actual loss by the +copyright holder. Criminal penalties are available for intentional acts +undertaken for purposes of "commercial advantage" or "private financial gain." +In addition, if it comes to my attention that you are violating the BusyBox +license, I will list you on the <a href="/shame.html">BusyBox Hall of Shame</a> +webpage. + +<p> + +Nobody wants that to happen. Do everyone a favor and don't break the law -- if +you use BusyBox, you <b>must comply with the BusyBox license</b>. + +<p> +<h3>BusyBox is licensed under the GNU General Public License</h3> + +BusyBox is licensed under the GNU General Public License , which +is generally just abbreviated as the GPL license, or +just the GPL. +<p> +<a href="/products.html">Anyone thinking of shipping +BusyBox as part of a product</a> should be familiar with the +licensing terms under which they are allowed to use and +distribute BusyBox. You are advised to take a look over the + +<ul> +<li><a href="http://www.gnu.org/licenses/gpl.html">full text of +the GNU General Public License</a>, and +<li><a href="http://www.gnu.org/licenses/gpl-faq.html"> +Frequently Asked Questions about the GNU GPL</a> +</ul> +to be sure you (and your lawyers) fully understand them. + +<p> + +The following is a quick summary for the impatient. If you +carefully follow these steps, it will ensure that you are 100% +authorized to ship BusyBox with your product, and have no reason +to worry about lawsuits or being listed on the <a +href="/shame.html">BusyBox Hall of Shame</a> page. You will be +able to sleep peacefully at night knowing you have fulfilled all +your licensing obligations. + +<p> + +If you distribute a product, it should either be accompanied by +<b>full source for all GPL'd products</b> (including BusyBox) +and/or a <b>written offer</b> to supply the source for all +GPL'd products for the cost of shipping and handling. The source +has to be in its preferred machine readable form, so you cannot +encrypt or obfuscate it. You are not required to provide full +source for all the closed source applications that happen to be +part of the system with BusyBox, though you can certainly do so +if you feel like it. But providing source for the GPL licensed +applications such as BusyBox is mandatory. + +<p> + +<b>Accompanied by source</b> generally means you distribute the full +source code for all GPL'd products including BusyBox along with your +product, such as by placing it somewhere on a driver CD. Full source +code includes the BusyBox ".config" file used when your shipping BusyBox +binary was compiled, and any and all modifications you made to the +BusyBox source code. + +<p> + +<b>A written offer</b> generally means that somewhere in the +documentation for your product, you write something like + +<blockquote> +The GPL source code contained in this product is available as a +free download from http://blah.blah.blah/ +</blockquote> +Alternatively, you can offer the source code by writing +somewhere in the documentation for your product something like +<blockquote> +If you would like a copy of the GPL source code contained in this +product shipped to you on CD, please send $9.99 to <address> +which covers the cost of preparing and mailing a CD to you. +</blockquote> +<p> + +Keep in mind though that if you distribute GPL'd binaries online (as is often +done when supplying firmware updates), it is <b>highly</b> recommended that you +make the corresponding source available online at the same place. Regardless, +if you distribute a binary copy of BusyBox online (such as part of a firmware +update) you <b>must</b> either make source available online (i.e. +<b>accompanied by source</b>) and/or inform those downloading firmware updates +of their right to obtain source (i.e. <b>a written offer</b>). Failure to do +so is a violation of your licensing obligations. + + +<p> + +Some people have the mistaken understanding that if they use unmodified +GPL'd source code, they do not need to distribute anything. This belief +is not correct, and is not supported by the +<a href="http://www.gnu.org/licenses/gpl.html">text of GPL</a>. +Please do re-read it -- you will find there is no such provision. +If you distribute any GPL'd binaries, you must also make source available +as discussed on this webpage. + +<p> +<h3>A Good Example</h3> + +These days, <a href="http://www.linksys.com/">Linksys</a> is +doing a good job at complying with the GPL, they get to be an +example of how to do things right. Please take a moment and +check out what they do with +<a href="http://www.linksys.com/download/firmware.asp?fwid=178"> +distributing the firmware for their WRT54G Router.</a> +Following their example would be a fine way to ensure that you +have also fulfilled your licensing obligations. + + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/lists.html b/busybox/docs/busybox.net/lists.html new file mode 100644 index 0000000..5c50c95 --- /dev/null +++ b/busybox/docs/busybox.net/lists.html @@ -0,0 +1,45 @@ +<!--#include file="header.html" --> + + +<!-- Begin Introduction section --> + +<h3>Mailing List Information</h3> +BusyBox has a <a href="/lists/busybox/">mailing list</a> for discussion and +development. You can subscribe by visiting +<a href="http://codepoet.org/mailman/listinfo/busybox">this page</a>. +Only subscribers to the BusyBox mailing list are allowed to post +to this list. + +<p> +There is also a mailing list for <a href="/lists/busybox-cvs/">active developers</a> +wishing to read the complete diff of each and every change to busybox -- not for the +faint of heart. Active developers can subscribe by visiting +<a href="http://codepoet.org/mailman/listinfo/busybox-cvs">this page</a>. +The CVS server is the only one permtted to post to this list. + +<p> + + +<h3>Search the List Archives</h3> +Please search the mailing list archives before asking questions on the mailing +list, since there is a good chance someone else has asked the same question +before. Checking the archives is a great way to avoid annoying everyone on the +list with frequently asked questions... +<p> + +<center> +<form method="GET" action="http://www.google.com/custom"> +<input type="hidden" name="domains" value="busybox.net"> +<input type="hidden" name="sitesearch" value="busybox.net"> +<input type="text" name="q" size="31" maxlength="255" value=""> +<br> +<input type="submit" name="sa" value="search the mailing list archives"> +<br> +<a href="http://www.google.com"><img src="http://www.google.com/logos/Logo_25wht.gif" border="0" alt="Google" height="32" width="75" align="middle"></a> +<br> +</form> +</center> + + + +<!--#include file="footer.html" --> diff --git a/busybox/docs/busybox.net/news.html b/busybox/docs/busybox.net/news.html new file mode 100644 index 0000000..0d4c81b --- /dev/null +++ b/busybox/docs/busybox.net/news.html @@ -0,0 +1,52 @@ +<!--#include file="header.html" --> + + +<ul> + + <li><b>13 October 2004 -- BusyBox 1.00 released</b><p> + + When you take a careful look at nearly every embedded Linux device or + software distribution shipping today, you will find a copy of BusyBox. + With countless routers, set top boxes, wireless access points, PDAs, and + who knows what else, the future for Linux and BusyBox on embedded devices + is looking very bright. + + <p> + + It is therefore with great satisfaction that I declare each and every + device already shipping with BusyBox is now officially out of date. + The highly anticipated release of BusyBox 1.00 has arrived! + + <p> + + Over three years in development, BusyBox 1.00 represents a tremendous + improvement over the old 0.60.x stable series. Now featuring a Linux + KernelConf based configuration system (as used by the Linux kernel), + Linux 2.6 kernel support, many many new applets, and the development + work and testing of thousands of people from around the world. + + <p> + + If you are already using BusyBox, you are strongly encouraged to upgrade to + BusyBox 1.00. If you are considering developing an embedded Linux device + or software distribution, you may wish to investigate if using BusyBox is + right for your application. If you need help getting started using + BusyBox, if you wish to donate to help cover expenses, or if you find a bug + and need help reporting it, you are invited to visit the <a + href="FAQ.html">BusyBox FAQ</a>. + + <p> + + As usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + <p> + <li><b>Old News</b><p> + <a href="/oldnews.html">Click here to read older news</a> + + +</ul> + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/oldnews.html b/busybox/docs/busybox.net/oldnews.html new file mode 100644 index 0000000..83987ec --- /dev/null +++ b/busybox/docs/busybox.net/oldnews.html @@ -0,0 +1,1060 @@ +<!--#include file="header.html" --> + + +<ul> + + <li><b>16 August 2004 -- BusyBox 1.0.0-rc3 released</b><p> + + Here goes release candidate 3... + <p> + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + <p> + <li><b>26 July 2004 -- BusyBox 1.0.0-rc2 released</b><p> + + Here goes release candidate 2... + <p> + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + <p> + <li><b>20 July 2004 -- BusyBox 1.0.0-rc1 released</b><p> + + Here goes release candidate 1... This fixes all (most?) of the problems + that have turned up since -pre10. In particular, loading and unloading of + kernel modules with 2.6.x kernels should be working much better. + <p> + + I <b>really</b> want to get BusyBox 1.0.0 released soon and I see no real + reason why the 1.0.0 release shouldn't happen with things pretty much as + is. BusyBox is in good shape at the moment, and it works nicely for + everything that I'm doing with it. And from the reports I've been getting, + it works nicely for what most everyone else is doing with it as well. + There will eventually be a 1.0.1 anyway, so we might as well get on with + it. No, BusyBox is not perfect. No piece of software ever is. And while + there is still plenty that can be done to improve things, most of that work + is waiting till we can get a solid 1.0.0 release out the door.... + <p> + + Please do not bother to send in patches adding cool new features at this + time. Only bug-fix patches will be accepted. If you have submitted a + bug-fixing patch to the busybox mailing list and no one has emailed you + explaining why your patch was rejected, it is safe to say that your patch + has been lost or forgotten. That happens sometimes. Please re-submit your + bug-fixing patch to the BusyBox mailing list, and be sure to put "[PATCH]" + at the beginning of the email subject line! + + <p> + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + <p> + On a less happy note, My 92 year old grandmother (my dad's mom) passed away + yesterday (June 19th). The funeral will be Thursday in a little town about + 2 hours south of my home. I've checked and there is absolutely no way I + could be back in time for the funeral if I attend <a + href="http://www.linuxsymposium.org/2004/">OLS</a> and give my presentation + as scheduled. + <p> + As such, it is with great reluctance and sadness that I have come + to the conclusion I will have to make my appologies and skip OLS + this year. + <p> + + + <p> + <li><b>13 April 2004 -- BusyBox 1.0.0-pre10 released</b><p> + + Ok, I lied. It turns out that -pre9 will not be the final BusyBox + pre-release. With any luck however -pre10 will be, since I <b>really</b> + want to get BusyBox 1.0.0 released very soon. As usual, please do not + bother to send in patches adding cool new features at this time. Only + bug-fix patches will be accepted. It would also be <b>very</b> helpful if + people could continue to review the BusyBox documentation and submit + improvements. + + <p> + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + <p> + <li><b>6 April 2004 -- BusyBox 1.0.0-pre9 released</b><p> + + Here goes the final BusyBox pre-release... This is your last chance for + bug fixes. With luck this will be released as BusyBox 1.0.0 later this + week. Please do not bother to send in patches adding cool new features at + this time. Only bug-fix patches will be accepted. It would also be + <b>very</b> helpful if people could help review the BusyBox documentation + and submit improvements. I've spent a lot of time updating the + documentation to make it better match reality, but I could really use some + assistance in checking that the features supported by the various applets + match the features listed in the documentation. + + <p> + I had hoped to get this released a month ago, but + <a href="http://codepoet.org/gallery/baby_peter/img_1796"> + another release on 1 March 2004</a> has kept me busy... + + <p> + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + <p> + <li><b>23 February 2004 -- BusyBox 1.0.0-pre8 released</b><p> + + Here goes yet another BusyBox pre-release... Please do not bother to send + in patches supplying new features at this time. Only bug-fix patches will + be accepted. If you have a cool new feature you would like to see + supported, or if you have an amazing new applet you would like to submit, + please wait and submit such things later. We really want to get a release + out we can all be proud of. We are still aiming to finish off the -pre + series in February and move on to the final 1.0.0 release... So if you + spot any bugs, now would be an excellent time to send in a fix to the + busybox mailing list. It would also be <b>very</b> helpful if people could + help review the BusyBox documentation and submit improvements. It would be + especially helpful if people could check that the features supported by the + various applets match the features listed in the documentation. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all the details. + And as usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + <li><b>4 February 2004 -- BusyBox 1.0.0-pre7 released</b><p> + + There was a bug in -pre6 that broke argument parsing for a + number of applets, since a variable was not being zeroed out + properly. This release is primarily intended to fix that one + problem. In addition, this release fixes several other + problems, including a rewrite by mjn3 of the code for parsing + the busybox.conf file used for suid handling, some shell updates + from vodz, and a scattering of other small fixes. We are still + aiming to finish off the -pre series in February and move on to + the final 1.0.0 release... If you see any problems, of have + suggestions to make, as always, please feel free to email the + busybox mailing list. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. And as usual you can + <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + <p> + <li><b>30 January 2004 -- BusyBox 1.0.0-pre6 released</b><p> + + Here goes the next pre-release for the new BusyBox stable + series. This release adds a number of size optimizations, + updates udhcp, fixes up 2.6 modutils support, updates ash + and the shell command line editing, and the usual pile of + bug fixes both large and small. Things appear to be + settling down now, so with a bit of luck and some testing + perhaps we can finish off the -pre series in February and + move on to the final 1.0.0 release... If you see any + problems, of have suggestions to make, as always, please + feel free to email the busybox mailing list. + + <p> + + People who rely on the <a href= "downloads/snapshots/">daily BusyBox snapshots</a> + should be aware that snapshots of the old busybox 0.60.x + series are no longer available. Daily snapshots are now + only available for the BusyBox 1.0.0 series and now use + the naming scheme "busybox-<date>.tar.bz2". Please + adjust any build scripts using the old naming scheme accordingly. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. And as usual you can + <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + <p> + <li><b>23 December 2003 -- BusyBox 1.0.0-pre5 released</b><p> + + Here goes the next pre-release for the new BusyBox stable + series. The most obvious thing in this release is a fix for + a terribly stupid bug in mount that prevented it from working + properly unless you specified the filesystem type. This + release also fixes a few compile problems, updates udhcp, + fixes a silly bug in fdisk, fixes ifup/ifdown to behave like + the Debian version, updates devfsd, updates the 2.6.x + modutils support, add a new 'rx' applet, removes the obsolete + 'loadacm' applet, fixes a few tar bugs, fixes a sed bug, and + a few other odd fixes. + + <p> + + If you see any problems, of have suggestions to make, as + always, please feel free to send an email to the busybox + mailing list. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. And as usual you can + <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + + + <li><b>10 December 2003 -- BusyBox 1.0.0-pre4 released</b><p> + + Here goes the fourth pre-release for the new BusyBox stable + series. This release includes major rework to sed, lots of + rework on tar, a new tiny implementation of bunzip2, a new + devfsd applet, support for 2.6.x kernel modules, updates to + the ash shell, sha1sum and md5sum have been merged into a + common applet, the dpkg applets has been cleaned up, and tons + of random bugs have been fixed. Thanks everyone for all the + testing, bug reports, and patches! Once again, a big + thank-you goes to Glenn McGrath (bug1) for stepping in and + helping get patches merged! + + <p> + + And of course, if you are reading this, you might have noticed + the busybox website has been completely reworked. Hopefully + things are now somewhat easier to navigate... If you see any + problems, of have suggestions to make, as always, please feel + free to send an email to the busybox mailing list. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. And as usual you can + <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + + + <p> + <li><b>12 Sept 2003 -- BusyBox 1.0.0-pre3 released</b><p> + + Here goes the third pre-release for the new BusyBox stable + series. The last prerelease has held up quite well under + testing, but a number of problems have turned up as the number + of people using it has increased. Thanks everyone for all + the testing, bug reports, and patches! + + <p> + + If you have submitted a patch or a bug report to the busybox + mailing list and no one has emailed you explaining why your + patch was rejected, it is safe to say that your patch has + somehow gotten lost or forgotten. That happens sometimes. + Please re-submit your patch or bug report to the BusyBox + mailing list! + + <p> + + The point of the "-preX" versions is to get a larger group of + people and vendors testing, so any problems that turn up can be + fixed prior to the final 1.0.0 release. The main feature + (besides additional testing) that is still still on the TODO + list before the final BusyBox 1.0.0 release is sorting out the + modutils issues. For the new 2.6.x kernels, we already have + patches adding insmod and rmmod support and those need to be + integrated. For 2.4.x kernels, for which busybox only supports + a limited number of architectures, we may want to invest a bit + more work before we cut 1.0.0. Or we may just leave 2.4.x + module loading alone. + + <p> + + I had hoped this release would be out a month ago. And of + course, it wasn't since Erik became busy getting a release of + <a href="http://www.uclibc.org/">uClibc</a> + out the door. Many thanks to Glenn McGrath (bug1) for + stepping in and helping get a bunch of patches merged! I am + not even going to state a date for releasing BusyBox 1.0.0 + -pre4 (or the final 1.0.0). We're aiming for late September... + But if this release proves as to be exceptionally stable (or + exceptionally unstable!), the next release may be very soon + indeed. + + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. And as usual you can + <a href="downloads">download busybox here</a>. + + <p>Have Fun! + + + <p> + <li><b>30 July 2003 -- BusyBox 1.0.0-pre2 released</b><p> + + Here goes another pre release for the new BusyBox stable + series. The last prerelease (pre1) was given quite a lot of + testing (thanks everyone!) which has helped turn up a number of + bugs, and these problems have now been fixed. + + <p> + + Highlights of -pre2 include updating the 'ash' shell to sync up + with the Debian 'dash' shell, a new 'hdparm' applet was added, + init again supports pivot_root, The 'reboot' 'halt' and + 'poweroff' applets can now be used without using busybox init. + an ifconfig buffer overflow was fixed, losetup now allows + read-write loop devices, uClinux daemon support was added, the + 'watchdog', 'fdisk', and 'kill' applets were rewritten, there were + tons of doc updates, and there were many other bugs fixed. + <p> + + If you have submitted a patch and it is not included in this + release and Erik has not emailed you explaining why your patch + was rejected, it is safe to say that he has lost your patch. + That happens sometimes. Please re-submit your patch to the + BusyBox mailing list. + <p> + + The point of the "-preX" versions is to get a larger group of + people and vendors testing, so any problems that turn up can be + fixed prior to the final 1.0.0 release. The main feature that + is still still on the TODO list before the final BusyBox 1.0.0 + release is adding module support for the new 2.6.x kernels. If + necessary, a -pre3 BusyBox release will happen on August 6th. + Hopefully (i.e. unless some horrible catastrophic problem + turns up) the final BusyBox 1.0.0 release will be ready by + then... + <p> + + The <a href="downloads/Changelog">changelog</a> has all + the details. As usual you can <a href="downloads">download busybox here</a>. + + <p>Have Fun! + <p> + + <p> + <li><b>15 July 2003 -- BusyBox 1.0.0-pre1 released</b><p> + + The busybox development series has been under construction for + nearly two years now. Which is just entirely too long... So + it is with great pleasure that I announce the imminent release + of a new stable series. Due to the huge number of changes + since the last stable release (and the usual mindless version + number inflation) I am branding this new stable series verison + 1.0.x... + <p> + + The point of "-preX" versions is to get a larger group of + people and vendors testing, so any problems that turn up can be + fixed prior to the magic 1.0.0 release (which should happen + later this month)... I plan to release BusyBox 1.0.0-pre2 next + Monday (July 21st), and, if necessary, -pre3 on July 28th. + Hopefully (i.e. unless some horrible catastrophic problem turns + up) the final BusyBox 1.0.0 release should be ready by the end + of July. + <p> + + If you have submitted patches, and they are not in this release + and I have not emailed you explaining why your patch was + rejected, it is safe to say that I have lost your patch. That + happens sometimes. Please do <B>NOT</b> send all your patches, + support questions, etc, directly to Erik. I get hundreds of + emails every day (which is why I end up losing patches + sometimes in the flood)... The busybox mailing list is the + right place to send your patches, support questions, etc. + <p> + + I would like to especially thank Vladimir Oleynik (vodz), Glenn + McGrath (bug1), Robert Griebl (sandman), and Manuel Novoa III + (mjn3) for their significant efforts and contributions that + have made this release possible. + <p> + + As usual you can <a href="downloads">download busybox here</a>. + You don't really need to bother with the + <a href="downloads/Changelog">changelog</a>, as the changes + vs the stable version are way too extensive to easily enumerate. + But you can take a look if you really want too. + + <p>Have Fun! + <p> + + + + <p> + <li><b>26 October 2002 -- BusyBox 0.60.5 released</b><p> + + I am very pleased to announce that the BusyBox 0.60.5 (stable) + is now available for download. This is a bugfix release for + the stable series to address all the problems that have turned + up since the last release. Unfortunately, the previous release + had a few nasty bugs (i.e. init could deadlock, gunzip -c tried + to delete source files, cp -a wouldn't copy symlinks, and init + was not always providing controlling ttys when it should have). + I know I said that the previous release would be the end of the + 0.60.x series. Well, it turns out I'm a liar. But this time I + mean it (just like last time ;-). This will be the last + release for the 0.60.x series -- all further development work + will be done for the development busybox tree. Expect the development + version to have its first real release very very soon now... + + <p> + The <a href="downloads/Changelog.full">changelog</a> has all + the details. As usual you can <a href="downloads">download busybox here</a>. + <p>Have Fun! + <p> + + <p> + <li><b>18 September 2002 -- BusyBox 0.60.4 released</b><p> + + I am very pleased to announce that the BusyBox 0.60.4 + (stable) is now available for download. This is primarily + a bugfix release for the stable series to address all + the problems that have turned up since the last + release. This will be the last release for the 0.60.x series. + I mean it this time -- all further development work will be done + on the development busybox tree, which is quite solid now and + should soon be getting its first real release. + + <p> + The <a href="downloads/Changelog.full">changelog</a> has all + the details. As usual you can <a href="downloads">download busybox here</a>. + <p>Have Fun! + <p> + + + <p> + <li><b>27 April 2002 -- BusyBox 0.60.3 released</b><p> + + I am very pleased to announce that the BusyBox 0.60.3 (stable) is + now available for download. This is primarily a bugfix release + for the stable series. A number of problems have turned up since + the last release, and this should address most of those problems. + This should be the last release for the 0.60.x series. The + development busybox tree has been progressing nicely, and will + hopefully be ready to become the next stable release. + + <p> + The <a href="downloads/Changelog">changelog</a> has all + the details. As usual you can <a href="downloads">download busybox here</a>. + <p>Have Fun! + <p> + + + <p> + <li><b>6 March 2002 -- busybox.net now has mirrors!</b><p> + + Busybox.net is now much more available, thanks to + the fine folks at <a href= "http://i-netinnovations.com/">http://i-netinnovations.com/</a> + who are providing hosting for busybox.net and + uclibc.org. In addition, we now have two mirrors: + <a href= "http://busybox.linuxmagic.com/">http://busybox.linuxmagic.com/</a> + in Canada and + <a href= "http://busybox.csservers.de/">http://busybox.csservers.de/</a> + in Germany. I hope this makes things much more + accessible for everyone! + + +<li> +<b>3 January 2002 -- Welcome to busybox.net!</b> + +<p>Thanks to the generosity of a number of busybox +users, we have been able to purchase busybox.net +(which is where you are probably reading this). +Right now, busybox.net and uclibc.org are both +living on my home system (at the end of my DSL +line). I apologize for the abrupt move off of +busybox.lineo.com. Unfortunately, I no longer have +the access needed to keep that system updated (for +example, you might notice the daily snapshots there +stopped some time ago).</p> + +<p>Busybox.net is currently hosted on my home +server, at the end of a DSL line. Unfortunately, +the load on them is quite heavy. To address this, +I'm trying to make arrangements to get busybox.net +co-located directly at an ISP. To assist in the +co-location effort, <a href= +"http://www.codepoet.org/~markw">Mark Whitley</a> +(author of busybox sed, cut, and grep) has donated +his <a href= +"http://www.netwinder.org/">NetWinder</a> computer +for hosting busybox.net and uclibc.org. Once this +system is co-located, the current speed problems +should be completely eliminated. Hopefully, too, +some of you will volunteer to set up some mirror +sites, to help to distribute the load a bit.</p> + +<p><!-- + <center> + Click here to help support busybox.net! + <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> + <input type="hidden" name="cmd" value="_xclick"> + <input type="hidden" name="business" value="andersen@codepoet.org"> + <input type="hidden" name="item_name" value="Support Busybox"> + <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/busybox2.jpg"> + <input type="hidden" name="no_shipping" value="1"> + <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal"> + </form> + </center> + --> + Since some people expressed concern over BusyBox +donations, let me assure you that no one is getting +rich here. All BusyBox and uClibc donations will be +spent paying for bandwidth and needed hardware +upgrades. For example, Mark's NetWinder currently +has just 64Meg of memory. As demonstrated when +google spidered the site the other day, 64 Megs in +not enough, so I'm going to be ordering 256Megs of +ram and a larger hard drive for the box today. So +far, donations received have been sufficient to +cover almost all expenses. In the future, we may +have co-location fees to worry about, but for now +we are ok. A <b>HUGE thank-you</b> goes out to +everyone that has contributed!<br> + -Erik</p> +</li> + +<li> +<b>20 November 2001 -- BusyBox 0.60.2 released</b> + +<p>We am very pleased to announce that the BusyBox +0.60.2 (stable) is now released to the world. This +one is primarily a bugfix release for the stable +series, and it should take care of most everyone's +needs till we can get the nice new stuff we have +been working on in CVS ready to release (with the +wonderful new buildsystem). The biggest change in +this release (beyond bugfixes) is the fact that msh +(the minix shell) has been re-worked by Vladimir N. +Oleynik (vodz) and so it no longer crashes when +told to do complex things with backticks.</p> + +<p>This release has been tested on x86, ARM, and +powerpc using glibc 2.2.4, libc5, and uClibc, so it +should work with just about any Linux system you +throw it at. See the <a href= +"downloads/Changelog">changelog</a> for <small>most +of</small> the details. The last release was +<em>very</em> solid for people, and this one should +be even better.</p> + +<p>As usual BusyBox 0.60.2 can be downloaded from +<a href= +"downloads">http://www.busybox.net/downloads</a>.</p> + +<p>Have Fun.<br> + -Erik</p> +</li> + +<li> <b>18 November 2001 -- Help us buy busybox.net!</b> + +<!-- Begin PayPal Logo --> +<center> +Click here to help buy busybox.net! +<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> +<input type="hidden" name="cmd" value="_xclick"> +<input type="hidden" name="business" value="andersen@codepoet.org"> +<input type="hidden" name="item_name" value="Support Busybox"> +<input type="hidden" name="image_url" value="https://busybox.net/images/busybox2.jpg"> +<input type="hidden" name="no_shipping" value="1"> +<input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal"> +</form> +</center> +<!-- End PayPal Logo --> + +I've contacted the current owner of busybox.net and he is willing +to sell the domain name -- for $250. He also owns busybox.org but +will not part with it... I will then need to pay the registry fee +for a couple of years and start paying for bandwidth, so this will +initially cost about $300. I would like to host busybox.net on my +home machine (codepoet.org) so I have full control over the system, +but to do that would require that I increase the level of bandwidth +I am paying for. Did you know that so far this month, there +have been over 1.4 Gigabytes of busybox ftp downloads? I don't +even <em>know</em> how much CVS bandwidth it requires. For the +time being, Lineo has continued to graciously provide this +bandwidth, despite the fact that I no longer work for them. If I +start running this all on my home machine, paying for the needed bandwidth +will start costing some money. +<p> + +I was going to pay it all myself, but my wife didn't like that +idea at all (big surprise). It turns out <insert argument +where she wins and I don't> she has better ideas +about what we should spend our money on that don't involve +busybox. She suggested I should ask for contributions on the +mailing list and web page. So... +<p> + +I am hoping that if everyone could contribute a bit, we could pick +up the busybox.net domain name and cover the bandwidth costs. I +know that busybox is being used by a lot of companies as well as +individuals -- hopefully people and companies that are willing to +contribute back a bit. So if everyone could please help out, that +would be wonderful! +<p> + + +<li> <b>23 August 2001 -- BusyBox 0.60.1 released</b> +<br> + + This is a relatively minor bug fixing release that fixes + up the bugs that have shown up in the stable release in + the last few weeks. Fortunately, nothing <em>too</em> + serious has shown up. This release only fixes bugs -- no + new features, no new applets. So without further ado, + here it is. Come and get it. + <p> + The + <a href="downloads/Changelog">changelog</a> has all + the details. As usual BusyBox 0.60.1 can be downloaded from + <a href="downloads">http://busybox.net/downloads</a>. + <p>Have Fun! + <p> + + +<li> <b>2 August 2001 -- BusyBox 0.60.0 released</b> +<br> + I am very pleased to announce the immediate availability of + BusyBox 0.60.0. I have personally tested this release with libc5, glibc, + and <a href="http://uclibc.org/">uClibc</a> on + x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number + of people using it on everything from ia64 to m68k with great success. + Everything seems to be working very nicely now, so getting a nice + stable bug-free(tm) release out seems to be in order. This releases fixes + a memory leak in syslogd, a number of bugs in the ash and msh shells, and + cleans up a number of things. + + <p> + + Those wanting an easy way to test the 0.60.0 release with uClibc can + use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a> + to give it a try by downloading and compiling + <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>. + You don't have to be root or reboot your machine to run test this way. + Preconfigured User-Mode Linux kernel source is also on busybox.net. + <p> + Another cool thing is the nifty <a href="downloads/tutorial/index.html"> + BusyBox Tutorial</a> contributed by K Computing. This requires + a ShockWave plugin (or standalone viewer), so you may want to grab the + the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a> + to view the tutorial. + <p> + + Finally, In case you didn't notice anything odd about the + version number of this release, let me point out that this release + is <em>not</em> 0.53, because I bumped the version number up a + bit. This reflects the fact that this release is intended to form + a new stable BusyBox release series. If you need to rely on a + stable version of BusyBox, you should plan on using the stable + 0.60.x series. If bugs show up then I will release 0.60.1, then + 0.60.2, etc... This is also intended to deal with the fact that + the BusyBox build system will be getting a major overhaul for the + next release and I don't want that to break products that people + are shipping. To avoid that, the new build system will be + released as part of a new BusyBox development series that will + have some not-yet-decided-on odd version number. Once things + stabilize and the new build system is working for everyone, then + I will release that as a new stable release series. + + <p> + The + <a href="downloads/Changelog">changelog</a> has all + the details. As usual BusyBox 0.60.0 can be downloaded from + <a href="downloads">http://busybox.net/downloads</a>. + <p>Have Fun! + <p> + + +<li> <b>7 July 2001 -- BusyBox 0.52 released</b> +<br> + + I am very pleased to announce the immediate availability of + BusyBox 0.52 (the "new-and-improved rock-solid release"). This + release is the result of <em>many</em> hours of work and has tons + of bugfixes, optimizations, and cleanups. This release adds + several new applets, including several new shells (such as hush, msh, + and ash). + + <p> + The + <a href="downloads/Changelog">changelog</a> covers + some of the more obvious details, but there are many many things that + are not mentioned, but have been improved in subtle ways. As usual, + BusyBox 0.52 can be downloaded from + <a href="downloads">http://busybox.net/downloads</a>. + <p>Have Fun! + <p> + + +<li> <b>10 April 2001 - Graph of Busybox Growth </b> +<br> +The illustrious Larry Doolittle has made a PostScript chart of the growth +of the Busybox tarball size over time. It is available for downloading / +viewing <a href= "busybox-growth.ps"> right here</a>. + +<p> (Note that while the number of applets in Busybox has increased, you +can still configure Busybox to be as small as you want by selectively +turning off whichever applets you don't need.) +<p> + + +<li> <b>10 April 2001 -- BusyBox 0.51 released</b> +<br> + + BusyBox 0.51 (the "rock-solid release") is now out there. This + release adds only 2 new applets: env and vi. The vi applet, + contributed by Sterling Huxley, is very functional, and is only + 22k. This release fixes 3 critical bugs in the 0.50 release. + There were 2 potential segfaults in lash (the busybox shell) in + the 0.50 release which are now fixed. Another critical bug in + 0.50 which is now fixed: syslogd from 0.50 could potentially + deadlock the init process and thereby break your entire system. + <p> + + There are a number of improvements in this release as well. For + one thing, the wget applet is greatly improved. Dmitry Zakharov + added FTP support, and Laurence Anderson make wget fully RFC + compliant for HTTP 1.1. The mechanism for including utility + functions in previous releases was clumsy and error prone. Now + all utility functions are part of a new libbb library, which makes + maintaining utility functions much simpler. And BusyBox now + compiles on itanium systems (thanks to the Debian itanium porters + for letting me use their system!). + <p> + You can read the + <a href="downloads/Changelog">changelog</a> for + complete details. BusyBox 0.51 can be downloaded from + <a href="downloads">http://busybox.net/downloads</a>. + <p>Have Fun! + <p> + +<li> <b>Busybox Boot-Floppy Image</b> + +<p>Because you asked for it, we have made available a <a href= +"downloads/busybox.floppy.img"> Busybox boot floppy +image</a>. Here's how you use it: + +<ol> + + <li> <a href= "downloads/busybox.floppy.img"> + Download the image</a> + + <li> dd it onto a floppy like so: <tt> dd if=busybox.floppy.img + of=/dev/fd0 ; sync </tt> + + <li> Pop it in a machine and boot up. + +</ol> + +<p> If you want to look at the contents of the initrd image, do this: + +<pre> + mount ./busybox.floppy.img /mnt -o loop -t msdos + cp /mnt/initrd.gz /tmp + umount /mnt + gunzip /tmp/initrd.gz + mount /tmp/initrd /mnt -o loop -t minix +</pre> + + +<li> <b>15 March 2001 -- BusyBox 0.50 released</b> +<br> + + This release adds several new applets including ifconfig, route, pivot_root, stty, + and tftp, and also fixes tons of bugs. Tab completion in the + shell is now working very well, and the shell's environment variable + expansion was fixed. Tons of other things were fixed or made + smaller. For a fairly complete overview, see the + <a href="downloads/Changelog">changelog</a>. + <p> + lash (the busybox shell) is still with us, fixed up a bit so it + now behaves itself quite nicely. It really is quite usable as + long as you don't expect it to provide Bourne shell grammer. + Standard things like pipes, redirects, command line editing, and + environment variable expansion work great. But we have found that + this shell, while very usable, does not provide an extensible + framework for adding in full Bourne shell behavior. So the first order of + business as we begin working on the next BusyBox release will be to merge in the new shell + currently in progress at + <a href="http://doolittle.faludi.com/~larry/parser.html">Larry Doolittle's website</a>. + <p> + + +<li> <b>27 January 2001 -- BusyBox 0.49 released</b> +<br> + + Several new applets, lots of bug fixes, cleanups, and many smaller + things made nicer. Several cleanups and improvements to the shell. + For a list of the most interesting changes + you might want to look at the <a href="downloads/Changelog">changelog</a>. + <p> + Special thanks go out to Matt Kraai and Larry Doolittle for all their + work on this release, and for keeping on top of things while I've been + out of town. + <p> + <em>Special Note</em><br> + + BusyBox 0.49 was supposed to have replaced lash, the BusyBox + shell, with a new shell that understands full Bourne shell/Posix shell grammer. + Well, that simply didn't happen in time for this release. A new + shell that will eventually replace lash is already under + construction. This new shell is being developed by Larry + Doolittle, and could use all of our help. Please see the work in + progress on <a href="http://doolittle.faludi.com/~larry/parser.html">Larry's website</a> + and help out if you can. This shell will be included in the next + release of BusyBox. + <p> + +<li> <b>13 December 2000 -- BusyBox 0.48 released</b> +<br> + + This release fixes lots and lots of bugs. This has had some very + rigorous testing, and looks very, very clean. The usual tar + update of course: tar no longer breaks hardlinks, tar -xzf is + optionally supported, and the LRP folks will be pleased to know + that 'tar -X' and 'tar --exclude' are both now in. Applets are + now looked up using a binary search making lash (the busybox + shell) much faster. For the new debian-installer (for Debian + woody) a .udeb can now be generated. + <p> + The curious can get a list of some of the more interesting changes by reading + the <a href="downloads/Changelog">changelog</a>. + <p> + Many thanks go out to the many many people that have contributed to + this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti. + <p> +<p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b> +<br> + + This release fixes lots of bugs (including an ugly bug in 0.46 + syslogd that could fork-bomb your system). Added several new + apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm, + renice, xargs, and expr. syslogd now supports network logging. + There are the usual tar updates. Most apps now use getopt for + more correct option parsing. + See the <a href="downloads/Changelog">changelog</a> + for complete details. + + +<p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b> +<br> + + This release fixes several bugs (including a ugly bug in tar, + and fixes for NFSv3 mount support). Added a dumpkmap to allow + people to dump a binary keymaps for use with 'loadkmap', and a + completely reworked 'grep' and 'sed' which should behave better. + BusyBox shell can now also be used as a login shell. + See the <a href="downloads/Changelog">changelog</a> + for complete details. + + +<p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b> +<br> + + This release has been slow in coming, but is very solid at this + point. BusyBox now supports libc5 as well as GNU libc. This + release provides the following new apps: cut, tr, insmod, ar, + mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and + telnet. There are bug fixes for just about every app as well (see + the <a href="downloads/Changelog">changelog</a> for + details). + <p> + Also, some exciting infrastructure news! Busybox now has its own + <a href="lists/busybox/">mailing list</a>, + publically browsable + <a href="/cgi-bin/cvsweb/busybox/">CVS tree</a>, + anonymous + <a href="cvs_anon.html">CVS access</a>, and + for those that are actively contributing there is even + <a href="cvs_write.html">CVS write access</a>. + I think this will be a huge help to the ongoing development of BusyBox. + <p> + Also, for the curious, there is no 0.44 release. Somehow 0.44 got announced + a few weeks ago prior to its actually being released. To avoid any confusion + we are just skipping 0.44. + <p> + Many thanks go out to the many people that have contributed to this release + of BusyBox (esp. Pavel Roskin)! + + +<p> <li> <b>19 April 2000 -- syslogd bugfix</b> +<br> +Turns out that there was still a bug in busybox syslogd. +For example, with the following test app: +<pre> +#include <syslog.h> + +int do_log(char* msg, int delay) +{ + openlog("testlog", LOG_PID, LOG_DAEMON); + while(1) { + syslog(LOG_ERR, "%s: testing one, two, three\n", msg); + sleep(delay); + } + closelog(); + return(0); +}; + +int main(void) +{ + if (fork()==0) + do_log("A", 2); + do_log("B", 3); +} +</pre> +it should be logging stuff from both "A" and "B". As released in 0.43 only stuff +from "A" would have been logged. This means that if init tries to log something +while say ppp has the syslog open, init would block (which is bad, bad, bad). +<p> +Karl M. Hegbloom has created a fix for the problem. +Thanks Karl! + + +<p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b> +<br> +I have finally gotten everything into a state where I feel pretty +good about things. This is definitely the most stable, solid release +so far. A lot of bugs have been fixed, and the following new apps +have been added: sh, basename, dirname, killall, uptime, +freeramdisk, tr, echo, test, and usleep. Tar has been completely +rewritten from scratch. Bss size has also been greatly reduced. +More details are available in the +<a href="downloads/Changelog">changelog</a>. +Oh, and as a special bonus, I wrote some fairly comprehensive +<em>documentation</em>, complete with examples and full usage information. + +<p> +Many thanks go out to the fine people that have helped by submitting patches +and bug reports; particularly instrumental in helping for this release were +Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti, +Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason. +There were others so if I somehow forgot to mention you, I'm very sorry. +<p> + +You can grab BusyBox 0.43 tarballs <a href="downloads">here</a>. + +<p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b> +<br> +Unfortunately, I have not yet finished all the things I want to +do for BusyBox 0.43, so I am posting this pre-release for people +to poke at. This contains my complete rewrite of tar, which now weighs in at +5k (7k with all options turned on) and works for reading and writing +tarballs (which it does correctly for everything I have been able to throw +at it). Tar also (optionally) supports the "--exclude" option (mainly because +the Linux Router Project folks asked for it). This also has a pre-release +of the micro shell I have been writing. This pre-release should be stable +enough for production use -- it just isn't a release since I have some structural +changes I still want to make. +<p> +The pre-release can be found <a href="downloads">here</a>. +Please let me know ASAP if you find <em>any</em> bugs. + +<p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b> +<br> +I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7 +lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City. +He was born in the emergency room less then 5 minutes after we arrived -- and +it was such a relief that we even made it to the hospital at all. Despite the +fact that I was driving at an amazingly unlawful speed and honking at everybody +and thinking decidedly unkind thoughts about the people in our way, my wife +(inconsiderate of my feelings and complete lack of medical training) was lying +down in the back seat saying things like "I think I need to start pushing now" +(which she then proceeded to do despite my best encouraging statements to the +contrary). +<p> +Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting +labor, both Shaunalei and our new baby boy are doing wonderfully. +<p> +So now that I am done with my excuse for the slow release cycle... +Progress on the next release of BusyBox has been slow but steady. I expect +to have a release sometime during the first week of April. This release will +include a number of important changes, including the addition of a shell, a +re-write of tar (to accommodate the Linux Router Project), and syslogd can now +accept multiple concurrent connections, fixing lots of unexpected blocking +problems. + + +<p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b> +<br> + + This is the most solid BusyBox release so far. Many, many + bugs have been fixed. See the + <a href="downloads/Changelog">changelog</a> for details. + + Of particular interest, init will now cleanly unmount + filesystems on reboot, cp and mv have been rewritten and + behave much better, and mount and umount no longer leak + loop devices. Many thanks go out to Randolph Chung, + Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for + their hard work on this release of BusyBox. Please pound + on it and let me know if you find any bugs. + +<p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b> +<br> + + This release includes bugfixes to cp, mv, logger, true, false, + mkdir, syslogd, and init. New apps include wc, hostid, + logname, tty, whoami, and yes. New features include loop device + support in mount and umount, and better TERM handling by init. + The changelog can be found <a href="downloads/Changelog">here</a>. + +<p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b> +<br> + + This release includes bugfixes to init (now includes inittab support), + syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod. + New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm. + In particular, this release fixes an important bug in tar which + in some cases produced serious security problems. + As always, the changelog can be found <a href="downloads/Changelog">here</a>. + +<p> <li> <b>11 December 1999 -- BusyBox Website</b> +<br> + I have received permission from Bruce Perens (the original author of BusyBox) + to set up this site as the new primary website for BusyBox. This website + will always contain pointers to the latest and greatest, and will also + contain the latest documentation on how to use BusyBox, what it can do, + what arguments its apps support, etc. + +<p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b> +<br> + This release includes fixes to init, reboot, halt, kill, and ls, and contains + the new apps ping, hostname, mkfifo, free, tail, du, tee, and head. A full + changelog can be found <a href="downloads/Changelog">here</a>. +<p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b> +<br> + This release includes fixes to tar, cat, ls, dd, rm, umount, find, df, + and make install, and includes new apps syslogd/klogd and logger. + + +</ul> + + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/products.html b/busybox/docs/busybox.net/products.html new file mode 100644 index 0000000..6ca0e3c --- /dev/null +++ b/busybox/docs/busybox.net/products.html @@ -0,0 +1,166 @@ +<!--#include file="header.html" --> + + +<h3>Products/Projects Using BusyBox</h3> + +Do you use BusyBox? I'd love to know about it and +I'd be happy to link to you. + +<p> +I know of the following products and/or projects that use BusyBox -- +listed in the order I happen to add them to the web page: + +<ul> + + +<li><a href="/cgi-bin/cvsweb/buildroot/">buildroot</a><br>A configurable +means for building your own busybox/uClibc based system systems. + +<li><a href="http://www.pengutronix.de/software/ptxdist_en.html">PTXdist</a><br>another +configurable means for building your own busybox based system systems. + +</li><li><a href= +"http://cvs.debian.org/boot-floppies/"> +Debian installer (boot floppies) project</a> + +</li><li><a href="http://redhat.com/">Red Hat installer</a> + +</li><li><a href= +"http://distro.ibiblio.org/pub/Linux/distributions/slackware/slackware-current/source/rootdisks/"> +Slackware Installer</a> + +</li><li><a href="http://www.gentoo.org/">Gentoo Linux install/boot CDs</a> +</li><li><a href="http://www.mandrake.com/">The Mandrake installer</a> + +</li><li><a href="http://Leaf.SourceForge.net">Linux Embedded Appliance Firewall</a><br>The sucessor of the Linux Router Project, supporting all sorts of embedded Linux gateways, routers, wireless routers, and firewalls. + +</li><li><a href= +"http://www.toms.net/rb/">tomsrtbt</a> + +</li><li><a href="http://www.stormix.com/">Stormix +Installer</a> + +</li><li><a href= +"http://www.emacinc.com/linux2_sbc.htm">EMAC Linux +2.0 SBC</a> + +</li><li><a href="http://www.trinux.org/">Trinux</a> + +</li><li><a href="http://oddas.sourceforge.net/">ODDAS +project</a> + +</li><li><a href="http://byld.sourceforge.net/">Build Your +Linux Disk</a> + +</li><li><a href= +"http://ibiblio.org/pub/Linux/system/recovery">Zdisk</a> + +</li><li><a href="http://www.adtran.com">AdTran - +VPN/firewall VPN Linux Distribution</a> + +</li><li><a href="http://mkcdrec.ota.be/">mkCDrec - make +CD-ROM recovery</a> + +</li><li><a href= +"http://recycle.lbl.gov/~ldoolitt/bse/">Linux on +nanoEngine</a> + +</li><li><a href= +"http://www.zelow.no/floppyfw/">Floppyfw</a> + +</li><li><a href="http://www.ltsp.org/">Linux Terminal +Server Project</a> + +</li><li><a href="http://www.devil-linux.org/">Devil-Linux</a> + +</li><li><a href="http://dutnux.sourceforge.net/">DutNux</a> + +</li><li><a href="http://www.microwerks.net/~hugo/mindi/">Mindi</a> + +</li><li><a href="http://www.minimalinux.org/ttylinux/">ttylinux</a> + +</li><li><a href="http://www.coyotelinux.com/">Coyote Linux</a> + +</li><li><a href="http://www.partimage.org/">Partition +Image</a> + +</li><li><a href="http://www.fli4l.de/">fli4l the on(e)-disk-router</a> + +</li><li><a href="http://tinfoilhat.cultists.net/">Tinfoil +Hat Linux</a> + +</li><li><a href="http://sourceforge.net/projects/gp32linux/">gp32linux</a> +</li><li><a href="http://familiar.handhelds.org/">Familiar Linux</a><br>A linux distribution for handheld computers +</li><li><a href="http://rescuecd.sourceforge.net/">Timo's Rescue CD Set</a> +</li><li><a href="http://sf.net/projects/netstation/">Netstation</a> +</li><li><a href="http://www.fiwix.org/">GNU/Fiwix Operating System</a> +</li><li><a href="http://www.softcraft.com/">Generations Linux</a> +</li><li><a href="http://systemimager.org/relatedprojects/">SystemImager / System Installation Suite</a> +</li><li><a href="http://www.bablokb.de/gendist/">GENDIST distribution generator</a> +</li><li><a href="http://diet-pc.sourceforge.net/">DIET-PC embedded Linux thin client distribution</a> +</li><li><a href="http://byzgl.sourceforge.net/">BYZantine Gnu/Linux</a> +</li><li><a href="http://dban.sourceforge.net/">Darik's Boot and Nuke</a> +</li><li><a href="http://www.timesys.com/">TimeSys real-time Linux</a> +</li><li><a href="http://movix.sf.net/">MoviX</a><br>Boots from CD and automatically plays every video file on the CD +</li><li><a href="http://katamaran.sourceforge.net">katamaran</a><br>Linux, X11, xfce windowmanager, based on BusyBox +</li><li><a href="http://www.sourceforge.net/projects/simplygnustep">Prometheus SimplyGNUstep</a> +</li><li><a href="http://www.renyi.hu/~ekho/lowlife/">lowlife</a><br>A documentation project on how to make your own uClibc-based systems and floppy. +</li><li><a href="http://metadistros.hispalinux.es/">Metadistros</a><br>a project to allow you easily make Live-CD distributions. +</li><li><a href="http://salvare.sourceforge.net/">Salvare</a><br>More Linux than tomsrtbt but less than Knoppix, aims to provide a useful workstation as well as a rescue disk. +</li><li><a href="http://www.stresslinux.org/">stresslinux</a><br>minimal linux distribution running from a bootable cdrom or via PXE. +</li><li><a href="http://thinstation.sourceforge.net/">thinstation</a><br>convert standard PCs into full-featured diskless thinclients. +</li><li><a href="http://www.uhulinux.hu/">UHU-Linux Hungary</a> +</li><li><a href="http://deep-water.berlios.de/">Deep-Water Linux</a> +</li><li><a href="http://www.freesco.org/">Freesco router</a> +</li><li><a href="http://Sentry.SourceForge.net/">Sentry Firewall CD</a> + + + +</li><li><a href="http://tuxscreen.net">Tuxscreen Linux Phone</a> +</li><li><a href="http://www.kerbango.com/">The Kerbango Internet Radio</a> +</li><li><a href="http://www.linuxmagic.com/vpn/">LinuxMagic VPN Firewall</a> +</li><li><a href="http://www.isilver-inc.com/">I-Silver Linux appliance servers</a> +</li><li><a href="http://zaurus.sourceforge.net/">Sharp Zaurus PDA</a> +</li><li><a href="http://www.cyclades.com/">Cyclades-TS and other Cyclades products</a> +</li><li><a href="http://www.linksys.com/products/product.asp?prid=508">Linksys WRT54G - Wireless-G Broadband Router</a> +</li><li><a href="http://www.dell.com/us/en/biz/topics/sbtopic_005_truemobile.htm">Dell TrueMobile 1184</a> +</li><li><a href="http://actiontec.com/products/modems/dual_pcmodem/dpm_overview.html">Actiontec Dual PC Modem</a> +</li><li><a href="http://www.kiss-technology.com/">Kiss DP Series DVD players</a> +</li><li><a href="http://www.netgear.com/products/prod_details.asp?prodID=170">NetGear WG602 wireless router</a> + <br>with sources <a href="http://www.netgear.com/support/support_details.asp?dnldID=453">here</a> +</li><li><a href="http://www.trendware.com/products/TEW-411BRP.htm">TRENDnet TEW-411BRP 802.11g Wireless AP/Router/Switch</a> + <br>Source for busybox and udhcp <a href="http://www.trendware.com/asp/download/fileinfo.asp?file_id=277&B1=Search">here</a> though no kernel source is provided. +</li><li><a href="http://www.buffalo-technology.com/webcontent/products/wireless/wbr-g54.htm">Buffalo WBR-G54 wireless router</a> + </li><li><a href="http://www.asus.com/products/communication/wireless/wl-300g/overview.htm">ASUS WL-300g Wireless LAN Access Point</a> + <br>with source<a href="http://www.asus.com.tw/support/download/item.aspx?ModelName=WL-300G">here</a> + </li><li><a href="http://catalog.belkin.com/IWCatProductPage.process?Merchant_Id=&Section_Id=201522&pcount=&Product_Id=136493">Belkin 54g Wireless DSL/Cable Gateway Router</a> + <br>with source<a href="http://web.belkin.com/support/gpl.asp">here</a> + <li><a href="http://www.acronis.com/products/partitionexpert/">Acronis PartitionExpert 2003</a> + <br>includes a heavily modified BusyBox v0.60.5 with built in + cardmgr, device detection, gpm, lspci, etc. Also includes udhcp, + uClibc 0.9.26, a heavily patched up linux kernel, etc. Source + can only be obtained <a href="http://www.acronis.com/files/gpl/linux.tar.bz2">here</a> + +</li><li><a href="http://www.usr.com/">U.S. Robotics Sureconnect 4-port ADSL router</a><br> + with source <a href="http://www.usr.com/support/s-gpl-code.asp">here</a> +</li><li><a href="http://www.actiontec.com/products/broadband/54mbps_wireless_gateway_1p/index.html"> + ActionTec GT701-WG Wireless Gateway/DSL Modem</a> + with source <a href="http://128.121.226.214/gtproducts/index.html">here</a> +</li><li><a href="http://smartlinux.sourceforge.net/">S.M.A.R.T. Linux</a> +</li><li><a href="http://www.dlink.com/">DLink - Model GSL-G604T, DSL-300T, and possibly other models</a> + with source <a href="ftp://ftp.dlink.co.uk/dsl_routers_modems/">here,</a> + with source <a href="ftp://ftp.dlink.de/dsl-products/">and here,</a> + and quite possibly other places as well. You may need to dig down a bit + to find the source, but it does seem to be there. +</li><li><a href="http://www.siemens-mobile.de/cds/frontdoor/0,2241,de_de_0_42931_rArNrNrNrN,00.html">Siemens SE515 DSL router</a> + with source <a href="http://now-portal.c-lab.de/projects/gigaset/">here, I think...</a> + with some details <a href="http://heinz.hippenstiel.org/familie/hp/hobby/gigaset_se515dsl.html">here.</a> +</li><li><a href="http://frwt.stim.ru/">Free Remote Windows Terminal</a> + + +</li> +</ul> + + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/screenshot.html b/busybox/docs/busybox.net/screenshot.html new file mode 100644 index 0000000..9c05791 --- /dev/null +++ b/busybox/docs/busybox.net/screenshot.html @@ -0,0 +1,57 @@ +<!--#include file="header.html" --> + + +<!-- Begin Screenshot --> + +<h3> Busybox Screenshot! </h3> + + +Everybody loves to look at screenshots, so here is a live action screenshot of BusyBox. + +<pre style="background-color: black; color: lightgreen; padding: 5px; +font-family: monospace; font-size: smaller;" width="100"> + + +$ ./busybox +BusyBox v1.00 (2004.10.13-04:49+0000) multi-call binary + +Usage: busybox [function] [arguments]... + or: [function] [arguments]... + + BusyBox is a multi-call binary that combines many common Unix + utilities into a single executable. Most people will create a + link to busybox for each function they wish to use, and BusyBox + will act like whatever it was invoked as. + +Currently defined functions: + + [, addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2, + busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, + cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, + devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap, + dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk, + fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt, + getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname, + httpd, hush, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod, + install, ip, ipaddr, ipcalc, iplink, iproute, iptunnel, kill, killall, + klogd, lash, last, length, linuxrc, ln, loadfont, loadkmap, logger, login, + logname, logread, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir, + mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh, mt, + mv, nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping, + ping6, pipe_progress, pivot_root, poweroff, printf, ps, pwd, rdate, + readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm, + rpm2cpio, run-parts, rx, sed, seq, setkeycodes, sha1sum, sleep, sort, + start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync, + sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top, + touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname, + uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode, + vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, + yes, zcat + + +$ <blink>_</blink> + +</pre> + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox.net/shame.html b/busybox/docs/busybox.net/shame.html new file mode 100644 index 0000000..99807c1 --- /dev/null +++ b/busybox/docs/busybox.net/shame.html @@ -0,0 +1,77 @@ +<!--#include file="header.html" --> + + +<h3>Hall of Shame!!!</h3> + +The following products and/or projects appear to use BusyBox, but do not +appear to release source code as required by the <a +href="/license.html">BusyBox license</a>. This is a violation of the law! +The distributors of these products are invited to contact <a href= +"mailto:andersen@codepoet.org">Erik Andersen</a> if they have any confusion +as to what is needed to bring their products into compliance, or if they have +already brought their product into compliance and wish to be removed from the +Hall of Shame. + +<p> + +Here are the details of <a href="/license.html">exactly how to comply +with the BusyBox license</a>, so there should be no question as to +exactly what is expected. +Complying with the Busybox license is easy and completely free, so the +companies listed below should be ashamed of themselves. Furthermore, each +product listed here is subject to being legally ordered to cease and desist +distribution for violation of copyright law, and the distributor of each +product is subject to being sued for statutory copyright infringement damages +of up to $150,000 per work plus legal fees. Nobody wants to be sued, and <a +href="mailto:andersen@codepoet.org">Erik</a> certainly would prefer to spend +his time doing better things than sue people. But he will sue if forced to +do so to maintain compliance. + +<p> + +Do everyone a favor and don't break the law -- if you use busybox, comply with +the busybox license by releasing the source code with your product. + +<p> + +<ul> + + <li><a href="http://www.trittontechnologies.com/products.html">Tritton Technologies NAS120</a> + <br>see <a href="http://www.ussg.iu.edu/hypermail/linux/kernel/0404.0/1611.html">here for details</a> + <li><a href="http://www.macsense.com/product/homepod/">Macsense HomePod</a> + <br>with details + <a href="http://developer.gloolabs.com/modules.php?op=modload&name=Forums&file=viewtopic&topic=123&forum=7">here</a> + <li><a href="http://www.cpx.com/products.asp?c=Wireless+Products">Compex Wireless Products</a> + <br>appears to be running v0.60.5 with Linux version 2.4.20-uc0 on ColdFire, + but no source code is mentioned or offered. + <li><a href="http://www.inventel.com/en/product/datasheet/10/">Inventel DW 200 wireless/ADSL router</a> + <li><a href="http://www.sweex.com/product.asp">Sweex DSL router</a> + <br>appears to be running BusyBox v1.00-pre2 and udhcpd, but no source + code is mentioned or offered. + <li><a href="http://www.trendware.com/products/TEW-410APB.htm">TRENDnet TEW-410APB</a> + </li><li><a href="http://www.hauppauge.com/Pages/products/data_mediamvp.html">Hauppauge Media MVP</a> + <br>Hauppauge contacted me on 16 Dec 2003, and claims to be working on resolving this problem. + </li><li><a href="http://www.hitex.com/download/adescom/data/">TriCore</a> + </li><li><a href="http://www.allnet.de/">ALLNET 0186 wireless router</a> + </li><li><a href="http://www.dmmtv.com/">Dreambox DM7000S DVB Satellite Receiver</a> + <br> Dream Multimedia contacted me on 22 Dec 2003 and is working on resolving this problem. + <br> Source _may_ be here: http://cvs.tuxbox.org/cgi-bin/viewcvs.cgi/tuxbox/cdk/ + </li><li><a href="http://testing.lkml.org/slashdot.php?mid=331690">Sigma Designs EM8500 based DVD players</a> + <br>Source for the Sigma Designs reference platform is found here<br> + <a href="http://www.uclinux.org/pub/uClinux/ports/arm/EM8500/uClinux-2.4-sigma.tar.gz">uClinux-2.4-sigma.tar.gz</a>, so while Sigma Designs itself appears to be in compliance, as far as I can tell, + no vendors of Sigma Designs EM8500 based devices actually comply with the GPL.... + </li><li><a href="http://testing.lkml.org/slashdot.php?mid=433790">Liteon LVD2001 DVD player using the Sigma Designs EM8500</a> + </li><li><a href="http://www.rimax.net/">Rimax DVD players using the Sigma Designs EM8500</a> + </li><li><a href="http://www.vinc.us/">Bravo DVD players using the Sigma Designs EM8500</a> + </li><li><a href="http://www.hb-direct.com/">H&B DX3110 Divx player based on Sigma Designs EM8500</a> + </li><li><a href="http://www.recospa.it/mdpro1/index.php">United *DVX4066 mpeg4 capable DVD players</a> + </li><li><a href="http://www.a-link.com/RR64AP.html">Avaks alink Roadrunner 64</a> + <br> Partial source available, based on source distributed under NDA from <a href="http://www.lsilogic.com/products/dsl_platform_solutions/hb_linuxr2_2.html"> LSILogic</a>. Why the NDA LSILogic, what are you hiding ? + <br>To verify the Avaks infrigment see my slashdot <a href="http://slashdot.org/~bug1/journal/">journal</a>. + </li><li>Undoubtedly there are others... Please report them so we can shame them (or if necessary sue them) into compliance. + +</ul> + + +<!--#include file="footer.html" --> + diff --git a/busybox/docs/busybox_footer.pod b/busybox/docs/busybox_footer.pod new file mode 100644 index 0000000..f965711 --- /dev/null +++ b/busybox/docs/busybox_footer.pod @@ -0,0 +1,258 @@ +=back + +=head1 LIBC NSS + +GNU Libc (glibc) uses the Name Service Switch (NSS) to configure the behavior +of the C library for the local environment, and to configure how it reads +system data, such as passwords and group information. This is implemented +using an /etc/nsswitch.conf configuration file, and using one or more of the +/lib/libnss_* libraries. BusyBox tries to avoid using any libc calls that make +use of NSS. Some applets however, such as login and su, will use libc functions +that require NSS. + +If you enable CONFIG_USE_BB_PWD_GRP, BusyBox will use internal functions to +directly access the /etc/passwd, /etc/group, and /etc/shadow files without +using NSS. This may allow you to run your system without the need for +installing any of the NSS configuration files and libraries. + +When used with glibc, the BusyBox 'networking' applets will similarly require +that you install at least some of the glibc NSS stuff (in particular, +/etc/nsswitch.conf, /lib/libnss_dns*, /lib/libnss_files*, and /lib/libresolv*). + +Shameless Plug: As an alternative, one could use a C library such as uClibc. In +addition to making your system significantly smaller, uClibc does not require the +use of any NSS support files or libraries. + +=head1 MAINTAINER + +Erik Andersen <andersen@codepoet.org> + +=head1 AUTHORS + +The following people have contributed code to BusyBox whether they know it or +not. If you have written code included in BusyBox, you should probably be +listed here so you can obtain your bit of eternal glory. If you should be +listed here, or the description of what you have done needs more detail, or is +incorect, please send in an update. + + +=for html <br> + +Emanuele Aina <emanuele.aina@tiscali.it> + run-parts + +=for html <br> + +Erik Andersen <andersen@codepoet.org> + + Tons of new stuff, major rewrite of most of the + core apps, tons of new apps as noted in header files. + Lots of tedious effort writing these boring docs that + nobody is going to actually read. + +=for html <br> + +Laurence Anderson <l.d.anderson@warwick.ac.uk> + + rpm2cpio, unzip, get_header_cpio, read_gz interface, rpm + +=for html <br> + +Jeff Angielski <jeff@theptrgroup.com> + + ftpput, ftpget + +=for html <br> + +Edward Betts <edward@debian.org> + + expr, hostid, logname, whoami + +=for html <br> + +John Beppu <beppu@codepoet.org> + + du, nslookup, sort + +=for html <br> + +Brian Candler <B.Candler@pobox.com> + + tiny-ls(ls) + +=for html <br> + +Randolph Chung <tausq@debian.org> + + fbset, ping, hostname + +=for html <br> + +Dave Cinege <dcinege@psychosis.com> + + more(v2), makedevs, dutmp, modularization, auto links file, + various fixes, Linux Router Project maintenance + +=for html <br> + +Jordan Crouse <jordan@cosmicpenguin.net> + + ipcalc + +=for html <br> + +Magnus Damm <damm@opensource.se> + + tftp client insmod powerpc support + +=for html <br> + +Larry Doolittle <ldoolitt@recycle.lbl.gov> + + pristine source directory compilation, lots of patches and fixes. + +=for html <br> + +Glenn Engel <glenne@engel.org> + + httpd + +=for html <br> + +Gennady Feldman <gfeldman@gena01.com> + + Sysklogd (single threaded syslogd, IPC Circular buffer support, + logread), various fixes. + +=for html <br> + +Karl M. Hegbloom <karlheg@debian.org> + + cp_mv.c, the test suite, various fixes to utility.c, &c. + +=for html <br> + +Daniel Jacobowitz <dan@debian.org> + + mktemp.c + +=for html <br> + +Matt Kraai <kraai@alumni.cmu.edu> + + documentation, bugfixes, test suite + +=for html <br> + +Stephan Linz <linz@li-pro.net> + + ipcalc, Red Hat equivalence + +=for html <br> + +John Lombardo <john@deltanet.com> + + tr + +=for html <br> + +Glenn McGrath <bug1@iinet.net.au> + + Common unarchving code and unarchiving applets, ifupdown, ftpgetput, + nameif, sed, patch, fold, install, uudecode. + Various bugfixes, review and apply numerous patches. + +=for html <br> + +Manuel Novoa III <mjn3@codepoet.org> + + cat, head, mkfifo, mknod, rmdir, sleep, tee, tty, uniq, usleep, wc, yes, + mesg, vconfig, make_directory, parse_mode, dirname, mode_string, + get_last_path_component, simplify_path, and a number trivial libbb routines + + also bug fixes, partial rewrites, and size optimizations in + ash, basename, cal, cmp, cp, df, du, echo, env, ln, logname, md5sum, mkdir, + mv, realpath, rm, sort, tail, touch, uname, watch, arith, human_readable, + interface, dutmp, ifconfig, route + +=for html <br> + +Vladimir Oleynik <dzo@simtreas.ru> + + cmdedit; xargs(current), httpd(current); + ports: ash, crond, fdisk, inetd, stty, traceroute, top; + locale, various fixes + and irreconcilable critic of everything not perfect. + +=for html <br> + +Bruce Perens <bruce@pixar.com> + + Original author of BusyBox in 1995, 1996. Some of his code can + still be found hiding here and there... + +=for html <br> + +Tim Riker <Tim@Rikers.org> + + bug fixes, member of fan club + +=for html <br> + +Kent Robotti <robotti@metconnect.com> + + reset, tons and tons of bug reports and patches. + +=for html <br> + +Chip Rosenthal <chip@unicom.com>, <crosenth@covad.com> + + wget - Contributed by permission of Covad Communications + +=for html <br> + +Pavel Roskin <proski@gnu.org> + + Lots of bugs fixes and patches. + +=for html <br> + +Gyepi Sam <gyepi@praxis-sw.com> + + Remote logging feature for syslogd + +=for html <br> + +Linus Torvalds <torvalds@transmeta.com> + + mkswap, fsck.minix, mkfs.minix + +=for html <br> + +Mark Whitley <markw@codepoet.org> + + grep, sed, cut, xargs(previous), + style-guide, new-applet-HOWTO, bug fixes, etc. + +=for html <br> + +Charles P. Wright <cpwright@villagenet.com> + + gzip, mini-netcat(nc) + +=for html <br> + +Enrique Zanardi <ezanardi@ull.es> + + tarcat (since removed), loadkmap, various fixes, Debian maintenance + +=for html <br> + +Tito Ragusa <farmatito@tiscali.it> + + devfsd and size optimizations in strings, openvt and deallocvt. + +=cut + +# $Id: busybox_footer.pod,v 1.18 2004/04/25 06:05:14 bug1 Exp $ + diff --git a/busybox/docs/busybox_header.pod b/busybox/docs/busybox_header.pod new file mode 100644 index 0000000..35631b8 --- /dev/null +++ b/busybox/docs/busybox_header.pod @@ -0,0 +1,111 @@ +# vi: set sw=4 ts=4: + +=head1 NAME + +BusyBox - The Swiss Army Knife of Embedded Linux + +=head1 SYNTAX + + BusyBox <function> [arguments...] # or + + <function> [arguments...] # if symlinked + +=head1 DESCRIPTION + +BusyBox combines tiny versions of many common UNIX utilities into a single +small executable. It provides minimalist replacements for most of the utilities +you usually find in GNU coreutils, util-linux, etc. The utilities in BusyBox +generally have fewer options than their full-featured GNU cousins; however, the +options that are included provide the expected functionality and behave very +much like their GNU counterparts. + +BusyBox has been written with size-optimization and limited resources in mind. +It is also extremely modular so you can easily include or exclude commands (or +features) at compile time. This makes it easy to customize your embedded +systems. To create a working system, just add /dev, /etc, and a Linux kernel. +BusyBox provides a fairly complete POSIX environment for any small or embedded +system. + +BusyBox is extremely configurable. This allows you to include only the +components you need, thereby reducing binary size. Run 'make config' or 'make +menuconfig' to select the functionality that you wish to enable. The run +'make' to compile BusyBox using your configuration. + +After the compile has finished, you should use 'make install' to install +BusyBox. This will install the '/bin/busybox' binary, and will also create +symlinks pointing to the '/bin/busybox' binary for each utility that you +compile into BusyBox. By default, 'make install' will place these symlinks +into the './_install' directory, unless you have defined 'PREFIX', thereby +specifying some alternative location (i.e., 'make PREFIX=/tmp/foo install'). +If you wish to install using hardlinks, rather than the default of using +symlinks, you can use 'make PREFIX=/tmp/foo install-hardlinks' instead. + +=head1 USAGE + +BusyBox is a multi-call binary. A multi-call binary is an executable program +that performs the same job as more than one utility program. That means there +is just a single BusyBox binary, but that single binary acts like a large +number of utilities. This allows BusyBox to be smaller since all the built-in +utility programs (we call them applets) can share code for many common operations. + +You can also invoke BusyBox by issuing a command as an argument on the +command line. For example, entering + + /bin/busybox ls + +will also cause BusyBox to behave as 'ls'. + +Of course, adding '/bin/busybox' into every command would be painful. So most +people will invoke BusyBox using links to the BusyBox binary. + +For example, entering + + ln -s /bin/busybox ls + ./ls + +will cause BusyBox to behave as 'ls' (if the 'ls' command has been compiled +into BusyBox). Generally speaking, you should never need to make all these +links yourself, as the BusyBox build system will do this for you when you run +the 'make install' command. + +If you invoke BusyBox with no arguments, it will provide you with a list of the +applets that have been compiled into your BusyBox binary. + +=head1 COMMON OPTIONS + +Most BusyBox commands support the B<--help> argument to provide a terse runtime +description of their behavior. If the CONFIG_FEATURE_VERBOSE_USAGE option has +been enabled, more detailed usage information will also be available. + +=head1 COMMANDS + +Currently defined functions include: + + addgroup, adduser, adjtimex, ar, arping, ash, awk, basename, bunzip2, + busybox, bzcat, cal, cat, chgrp, chmod, chown, chroot, chvt, clear, cmp, + cp, cpio, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, + devfsd, df, dirname, dmesg, dos2unix, dpkg, dpkg-deb, du, dumpkmap, + dumpleases, echo, egrep, env, expr, false, fbset, fdflush, fdformat, fdisk, + fgrep, find, fold, free, freeramdisk, fsck.minix, ftpget, ftpput, getopt, + getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hostid, hostname, + httpd, hush, hwclock, id, ifconfig, ifdown, ifup, inetd, init, insmod, + install, ip, ipaddr, ipcalc, iplink, iproute, iptunnel, kill, killall, + klogd, lash, last, length, linuxrc, ln, loadfont, loadkmap, logger, login, + logname, logread, losetup, ls, lsmod, makedevs, md5sum, mesg, mkdir, + mkfifo, mkfs.minix, mknod, mkswap, mktemp, modprobe, more, mount, msh, mt, + mv, nameif, nc, netstat, nslookup, od, openvt, passwd, patch, pidof, ping, + ping6, pipe_progress, pivot_root, poweroff, printf, ps, pwd, rdate, + readlink, realpath, reboot, renice, reset, rm, rmdir, rmmod, route, rpm, + rpm2cpio, run-parts, rx, sed, seq, setkeycodes, sha1sum, sleep, sort, + start-stop-daemon, strings, stty, su, sulogin, swapoff, swapon, sync, + sysctl, syslogd, tail, tar, tee, telnet, telnetd, test, tftp, time, top, + touch, tr, traceroute, true, tty, udhcpc, udhcpd, umount, uname, + uncompress, uniq, unix2dos, unzip, uptime, usleep, uudecode, uuencode, + vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, + yes, zcat + +=head1 COMMAND DESCRIPTIONS + +=over 4 + + diff --git a/busybox/docs/contributing.txt b/busybox/docs/contributing.txt new file mode 100644 index 0000000..e80fc13 --- /dev/null +++ b/busybox/docs/contributing.txt @@ -0,0 +1,449 @@ +Contributing To Busybox +======================= + +This document describes what you need to do to contribute to Busybox, where +you can help, guidelines on testing, and how to submit a well-formed patch +that is more likely to be accepted. + +The Busybox home page is at: http://busybox.net/ + + + +Pre-Contribution Checklist +-------------------------- + +So you want to contribute to Busybox, eh? Great, wonderful, glad you want to +help. However, before you dive in, headlong and hotfoot, there are some things +you need to do: + + +Checkout the Latest Code from CVS +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This is a necessary first step. Please do not try to work with the last +released version, as there is a good chance that somebody has already fixed +the bug you found. Somebody might have even added the feature you had in mind. +Don't make your work obsolete before you start! + +For information on how to check out Busybox from CVS, please look at the +following links: + + http://busybox.net/cvs_anon.html + http://busybox.net/cvs_howto.html + + +Read the Mailing List +~~~~~~~~~~~~~~~~~~~~~ + +No one is required to read the entire archives of the mailing list, but you +should at least read up on what people have been talking about lately. If +you've recently discovered a problem, chances are somebody else has too. If +you're the first to discover a problem, post a message and let the rest of us +know. + +Archives can be found here: + + http://busybox.net/lists/busybox/ + +If you have a serious interest in Busybox, i.e., you are using it day-to-day or +as part of an embedded project, it would be a good idea to join the mailing +list. + +A web-based sign-up form can be found here: + + http://busybox.net/mailman/listinfo/busybox + + +Coordinate with the Applet Maintainer +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Some (not all) of the applets in Busybox are "owned" by a maintainer who has +put significant effort into it and is probably more familiar with it than +others. To find the maintainer of an applet, look at the top of the .c file +for a name following the word 'Copyright' or 'Written by' or 'Maintainer'. + +Before plunging ahead, it's a good idea to send a message to the mailing list +that says: "Hey, I was thinking about adding the 'transmogrify' feature to the +'foo' applet. Would this be useful? Is anyone else working on it?" You might +want to CC the maintainer (if any) with your question. + + + +Areas Where You Can Help +------------------------ + +Busybox can always use improvement! If you're looking for ways to help, there +are a variety of areas where you could help. + + +What Busybox Doesn't Need +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Before listing the areas where you _can_ help, it's worthwhile to mention the +areas where you shouldn't bother. While Busybox strives to be the "Swiss Army +Knife" of embedded Linux, there are some applets that will not be accepted: + + - Any filesystem manipulation tools: Busybox is filesystem independent and + we do not want to start adding mkfs/fsck tools for every (or any) + filesystem under the sun. (fsck_minix.c and mkfs_minix.c are living on + borrowed time.) There are far too many of these tools out there. Use + the upstream version. Not everything has to be part of Busybox. + + - Any partitioning tools: Partitioning a device is typically done once and + only once, and tools which do this generally do not need to reside on the + target device (esp a flash device). If you need a partitioning tool, grab + one (such as fdisk, sfdisk, or cfdisk from util-linux) and use that, but + don't try to merge it into busybox. These are nasty and complex and we + don't want to maintain them. + + - Any disk, device, or media-specific tools: Use the -utils or -tools package + that was designed for your device; don't try to shoehorn them into Busybox. + + - Any architecture specific tools: Busybox is (or should be) architecture + independent. Do not send us tools that cannot be used across multiple + platforms / arches. + + - Any daemons that are not essential to basic system operation. To date, only + syslogd and klogd meet this requirement. We do not need a web server, an + ftp daemon, a dhcp server, a mail transport agent or a dns resolver. If you + need one of those, you are welcome to ask the folks on the mailing list for + recommendations, but please don't bloat up Busybox with any of these. + + +Bug Reporting +~~~~~~~~~~~~~ + +If you find bugs, please submit a detailed bug report to the busybox mailing +list at busybox@busybox.net. A well-written bug report should include a +transcript of a shell session that demonstrates the bad behavior and enables +anyone else to duplicate the bug on their own machine. The following is such +an example: + + To: busybox@busybox.net + From: diligent@testing.linux.org + Subject: /bin/date doesn't work + + Package: busybox + Version: 1.00 + + When I execute Busybox 'date' it produces unexpected results. + With GNU date I get the following output: + + $ date + Wed Mar 21 14:19:41 MST 2001 + + But when I use BusyBox date I get this instead: + + $ date + llegal instruction + + I am using Debian unstable, kernel version 2.4.19-rmk1 on an Netwinder, + and the latest uClibc from CVS. Thanks for the wonderful program! + + -Diligent + +Note the careful description and use of examples showing not only what BusyBox +does, but also a counter example showing what an equivalent GNU app does. Bug +reports lacking such detail may never be fixed... Thanks for understanding. + + + +Write Documentation +~~~~~~~~~~~~~~~~~~~ + +Chances are, documentation in Busybox is either missing or needs improvement. +Either way, help is welcome. + +Work is being done to automatically generate documentation from sources, +especially from the usage.h file. If you want to correct the documentation, +please make changes to the pre-generation parts, rather than the generated +documentation. [More to come on this later...] + +It is preferred that modifications to documentation be submitted in patch +format (more on this below), but we're a little more lenient when it comes to +docs. You could, for example, just say "after the listing of the mount +options, the following example would be helpful..." + + +Consult Existing Sources +~~~~~~~~~~~~~~~~~~~~~~~~ + +For a quick listing of "needs work" spots in the sources, cd into the Busybox +directory and run the following: + + for i in TODO FIXME XXX; do find -name '*.[ch]'|xargs grep $i; done + +This will show all of the trouble spots or 'questionable' code. Pick a spot, +any spot, these are all invitations for you to contribute. + + +Add a New Applet +~~~~~~~~~~~~~~~~ + +If you want to add a new applet to Busybox, we'd love to see it. However, +before you write any code, please ask beforehand on the mailing list something +like "Do you think applet 'foo' would be useful in Busybox?" or "Would you +guys accept applet 'foo' into Busybox if I were to write it?" If the answer is +"no" by the folks on the mailing list, then you've saved yourself some time. +Conversely, you could get some positive responses from folks who might be +interested in helping you implement it, or can recommend the best approach. +Perhaps most importantly, this is your way of calling "dibs" on something and +avoiding duplication of effort. + +Also, before you write a line of code, please read the 'new-applet-HOWTO.txt' +file in the docs/ directory. + + +Janitorial Work +~~~~~~~~~~~~~~~ + +These are dirty jobs, but somebody's gotta do 'em. + + - Converting applets to use getopt() for option processing. Type 'find -name + '*.c'|grep -L getopt' to get a listing of the applets that currently don't + use getopt. If a .c file processes no options, it should have a line that + reads: /* no options, no getopt */ somewhere in the file. + + - Replace any "naked" calls to malloc, calloc, realloc, str[n]dup, fopen with + the x* equivalents found in libbb/xfuncs.c. + + - Security audits: + http://www.securityfocus.com/popups/forums/secprog/intro.shtml + + - Synthetic code removal: http://www.perl.com/pub/2000/06/commify.html - This + is very Perl-specific, but the advice given in here applies equally well to + C. + + - C library function use audits: Verifying that functions are being used + properly (called with the right args), replacing unsafe library functions + with safer versions, making sure return codes are being checked, etc. + + - Where appropriate, replace preprocessor defined macros and values with + compile-time equivalents. + + - Style guide compliance. See: docs/style-guide.txt + + - Add testcases to tests/testcases. + + - Makefile improvements: + http://www.canb.auug.org.au/~millerp/rmch/recu-make-cons-harm.html + (I think the recursive problems are pretty much taken care of at this point, non?) + + - "Ten Commandments" compliance: (this is a "maybe", certainly not as + important as any of the previous items.) + http://www.lysator.liu.se/c/ten-commandments.html + +Other useful links: + + - the comp.lang.c FAQ: http://web.onetelnet.ch/~twolf/tw/c/index.html#Sources + + + +Submitting Patches To Busybox +----------------------------- + +Here are some guidelines on how to submit a patch to Busybox. + + +Making A Patch +~~~~~~~~~~~~~~ + +If you've got anonymous CVS access set up, making a patch is simple. Just make +sure you're in the busybox/ directory and type 'cvs diff -bwu > mychanges.patch'. +You can send the resulting .patch file to the mailing list with a description +of what it does. (But not before you test it! See the next section for some +guidelines.) It is preferred that patches be sent as attachments, but it is +not required. + +Also, feel free to help test other people's patches and reply to them with +comments. You can apply a patch by saving it into your busybox/ directory and +typing 'patch < mychanges.patch'. Then you can recompile, see if it runs, test +if it works as advertised, and post your findings to the mailing list. + +NOTE: Please do not include extraneous or irrelevant changes in your patches. +Please do not try to "bundle" two patches together into one. Make single, +discreet changes on a per-patch basis. Sometimes you need to make a patch that +touches code in many places, but these kind of patches are rare and should be +coordinated with a maintainer. + + +Testing Guidelines +~~~~~~~~~~~~~~~~~~ + +It's considered good form to test your new feature before you submit a patch +to the mailing list, and especially before you commit a change to CVS. Here +are some guidelines on how to test your changes. + + - Always test Busybox applets against GNU counterparts and make sure the + behavior / output is identical between the two. + + - Try several different permutations and combinations of the features you're + adding (i.e., different combinations of command-line switches) and make sure + they all work; make sure one feature does not interfere with another. + + - Make sure you test compiling against the source both with the feature + turned on and turned off in Config.h and make sure Busybox compiles cleanly + both ways. + + - Run the multibuild.pl script in the tests directory and make sure + everything checks out OK. (Do this from within the busybox/ directory by + typing: 'tests/multibuild.pl'.) + + +Making Sure Your Patch Doesn't Get Lost +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you don't want your patch to be lost or forgotten, send it to the busybox +mailing list with a subject line something like this: + + [PATCH] - Adds "transmogrify" feature to "foo" + +In the body, you should have a pseudo-header that looks like the following: + + Package: busybox + Version: v1.01pre (or whatever the current version is) + Severity: wishlist + +The remainder of the body should read along these lines: + + This patch adds the "transmogrify" feature to the "foo" applet. I have + tested this on [arch] system(s) and it works. I have tested it against the + GNU counterparts and the outputs are identical. I have run the scripts in + the 'tests' directory and nothing breaks. + + + +Improving Your Chances of Patch Acceptance +------------------------------------------ + +Even after you send a brilliant patch to the mailing list, sometimes it can go +unnoticed, un-replied-to, and sometimes (sigh) even lost. This is an +unfortunate fact of life, but there are steps you can take to help your patch +get noticed and convince a maintainer that it should be added: + + +Be Succinct +~~~~~~~~~~~ + +A patch that includes small, isolated, obvious changes is more likely to be +accepted than a patch that touches code in lots of different places or makes +sweeping, dubious changes. + + +Back It Up +~~~~~~~~~~ + +Hard facts on why your patch is better than the existing code will go a long +way toward convincing maintainers that your patch should be included. +Specifically, patches are more likely to be accepted if they are provably more +correct, smaller, faster, simpler, or more maintainable than the existing +code. + +Conversely, any patch that is supported with nothing more than "I think this +would be cool" or "this patch is good because I say it is and I've got a Phd +in Computer Science" will likely be ignored. + + +Follow The Style Guide +~~~~~~~~~~~~~~~~~~~~~~ + +It's considered good form to abide by the established coding style used in a +project; Busybox is no exception. We have gone so far as to delineate the +"elements of Busybox style" in the file docs/style-guide.txt. Please follow +them. + + +Work With Someone Else +~~~~~~~~~~~~~~~~~~~~~~ + +Working on a patch in isolation is less effective than working with someone +else for a variety of reasons. If another Busybox user is interested in what +you're doing, then it's two (or more) voices instead of one that can petition +for inclusion of the patch. You'll also have more people that can test your +changes, or even offer suggestions on better approaches you could take. + +Getting other folks interested follows as a natural course if you've received +responses from queries to applet maintainer or positive responses from folks +on the mailing list. + +We've made strident efforts to put a useful "collaboration" infrastructure in +place in the form of mailing lists, the bug tracking system, and CVS. Please +use these resources. + + +Send Patches to the Bug Tracking System +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This was mentioned above in the "Making Sure Your Patch Doesn't Get Lost" +section, but it is worth mentioning again. A patch sent to the mailing list +might be unnoticed and forgotten. A patch sent to the bug tracking system will +be stored and closely connected to the bug it fixes. + + +Be Polite +~~~~~~~~~ + +The old saying "You'll catch more flies with honey than you will with vinegar" +applies when submitting patches to the mailing list for approval. The way you +present your patch is sometimes just as important as the actual patch itself +(if not more so). Being rude to the maintainers is not an effective way to +convince them that your patch should be included; it will likely have the +opposite effect. + + + +Committing Changes to CVS +------------------------- + +If you submit several patches that demonstrate that you are a skilled and wise +coder, you may be invited to become a committer, thus enabling you to commit +changes directly to CVS. This is nice because you don't have to wait for +someone else to commit your change for you, you can just do it yourself. + +But note that this is a priviledge that comes with some responsibilities. You +should test your changes before you commit them. You should also talk to an +applet maintainer before you make any kind of sweeping changes to somebody +else's code. Big changes should still go to the mailing list first. Remember, +being wise, polite, and discreet is more important than being clever. + + +When To Commit +~~~~~~~~~~~~~~ + +Generally, you should feel free to commit a change if: + + - Your changes are small and don't touch many files + - You are fixing a bug + - Somebody has told you that it's okay + - It's obviously the Right Thing + +The more of the above are true, the better it is to just commit a change +directly to CVS. + + +When Not To Commit +~~~~~~~~~~~~~~~~~~ + +Even if you have commit rights, you should probably still post a patch to the +mailing list if: + + - Your changes are broad and touch many different files + - You are adding a feature + - Your changes are speculative or experimental (i.e., trying a new algorithm) + - You are not the maintainer and your changes make the maintainer cringe + +The more of the above are true, the better it is to post a patch to the +mailing list instead of committing. + + + +Final Words +----------- + +If all of this seems complicated, don't panic, it's really not that tough. If +you're having difficulty following some of the steps outlined in this +document don't worry, the folks on the Busybox mailing list are a fairly +good-natured bunch and will work with you to help get your patches into shape +or help you make contributions. + + diff --git a/busybox/docs/new-applet-HOWTO.txt b/busybox/docs/new-applet-HOWTO.txt new file mode 100644 index 0000000..2fc95d3 --- /dev/null +++ b/busybox/docs/new-applet-HOWTO.txt @@ -0,0 +1,163 @@ +How to Add a New Applet to BusyBox +================================== + +This document details the steps you must take to add a new applet to BusyBox. + +Credits: +Matt Kraai - initial writeup +Mark Whitley - the remix +Thomas Lundquist - Added stuff for the new directory layout. + +Initial Write +------------- + +First, write your applet. Be sure to include copyright information at the +top, such as who you stole the code from and so forth. Also include the +mini-GPL boilerplate. Be sure to name the main function <applet>_main instead +of main. And be sure to put it in <applet>.c. Usage do not have to be taken care of by your applet. + +For a new applet mu, here is the code that would go in mu.c: + +----begin example code------ + +/* vi: set sw=4 ts=4: */ +/* + * Mini mu implementation for busybox + * + * + * Copyright (C) [YEAR] by [YOUR NAME] <YOUR EMAIL> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + * 02111-1307 USA + * + */ + +#include "busybox.h" + +int mu_main(int argc, char **argv) +{ + int fd; + char mu; + + if ((fd = open("/dev/random", O_RDONLY)) < 0) + perror_msg_and_die("/dev/random"); + + if ((n = safe_read(fd, &mu, 1)) < 1) + perror_msg_and_die("/dev/random"); + + return mu; +} + +----end example code------ + + +Coding Style +------------ + +Before you submit your applet for inclusion in BusyBox, (or better yet, before +you _write_ your applet) please read through the style guide in the docs +directory and make your program compliant. + + +Some Words on libbb +------------------- + +As you are writing your applet, please be aware of the body of pre-existing +useful functions in libbb. Use these instead of reinventing the wheel. + +Additionally, if you have any useful, general-purpose functions in your +program that could be useful in another program, consider putting them in +libbb. + + +Placement / Directory +--------------------- + +Find the appropriate directory for your new applet. + +Make sure you find the appropriate places in the files, the applets are +sorted alphabetically. + +Add the applet to Makefile.in in the chosen applet directory: + +obj-$(CONFIG_MU) += mu.o + +Add the applet to Config.in in the chosen applet directory: + +config CONFIG_MU + bool "MU" + default n + help + Returns an indeterminate value. + + +Usage String(s) +--------------- + +Next, add usage information for you applet to include/usage.h. +This should look like the following: + + #define mu_trivial_usage \ + "-[abcde] FILES" + #define mu_full_usage \ + "Returns an indeterminate value.\n\n" \ + "Options:\n" \ + "\t-a\t\tfirst function\n" \ + "\t-b\t\tsecond function\n" \ + +If your program supports flags, the flags should be mentioned on the first +line (-[abcde]) and a detailed description of each flag should go in the +mu_full_usage section, one flag per line. (Numerous examples of this +currently exist in usage.h.) + + +Header Files +------------ + +Next, add an entry to include/applets.h. Be *sure* to keep the list +in alphabetical order, or else it will break the binary-search lookup +algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily: + + /* all programs above here are alphabetically "less than" 'mu' */ + #ifdef CONFIG_MU + APPLET("mu", mu_main, _BB_DIR_USR_BIN, mu_usage) + #endif + /* all programs below here are alphabetically "greater than" 'mu' */ + + +Finally, add a define for your applet to include/config.h + + #undef CONFIG_MU + + +Documentation +------------- + +If you're feeling especially nice, you should also document your applet in the +docs directory (but nobody ever does that). + +Adding some text to docs/Configure.help is a nice start. + + +The Grand Announcement +---------------------- + +Then create a diff -urN of the files you added (<appletdir/><applet>.c, +include/usage.c, include/applets.h, include/config.h, <appletdir>/Makefile.in, <appletdir>/config.in) +and send it to the mailing list: +busybox@busybox.net. + +Sending patches as attachments is preferred, but not required. + diff --git a/busybox/docs/style-guide.txt b/busybox/docs/style-guide.txt new file mode 100644 index 0000000..915d9b2 --- /dev/null +++ b/busybox/docs/style-guide.txt @@ -0,0 +1,680 @@ +Busybox Style Guide +=================== + +This document describes the coding style conventions used in Busybox. If you +add a new file to Busybox or are editing an existing file, please format your +code according to this style. If you are the maintainer of a file that does +not follow these guidelines, please -- at your own convenience -- modify the +file(s) you maintain to bring them into conformance with this style guide. +Please note that this is a low priority task. + +To help you format the whitespace of your programs, an ".indent.pro" file is +included in the main Busybox source directory that contains option flags to +format code as per this style guide. This way you can run GNU indent on your +files by typing 'indent myfile.c myfile.h' and it will magically apply all the +right formatting rules to your file. Please _do_not_ run this on all the files +in the directory, just your own. + + + +Declaration Order +----------------- + +Here is the order in which code should be laid out in a file: + + - commented program name and one-line description + - commented author name and email address(es) + - commented GPL boilerplate + - commented longer description / notes for the program (if needed) + - #includes of .h files with angle brackets (<>) around them + - #includes of .h files with quotes ("") around them + - #defines (if any, note the section below titled "Avoid the Preprocessor") + - const and global variables + - function declarations (if necessary) + - function implementations + + + +Whitespace and Formatting +------------------------- + +This is everybody's favorite flame topic so let's get it out of the way right +up front. + + +Tabs vs. Spaces in Line Indentation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The preference in Busybox is to indent lines with tabs. Do not indent lines +with spaces and do not indents lines using a mixture of tabs and spaces. (The +indentation style in the Apache and Postfix source does this sort of thing: +\s\s\s\sif (expr) {\n\tstmt; --ick.) The only exception to this rule is +multi-line comments that use an asterisk at the beginning of each line, i.e.: + + /t/* + /t * This is a block comment. + /t * Note that it has multiple lines + /t * and that the beginning of each line has a tab plus a space + /t * except for the opening '/*' line where the slash + /t * is used instead of a space. + /t */ + +Furthermore, The preference is that tabs be set to display at four spaces +wide, but the beauty of using only tabs (and not spaces) at the beginning of +lines is that you can set your editor to display tabs at *whatever* number of +spaces is desired and the code will still look fine. + + +Operator Spacing +~~~~~~~~~~~~~~~~ + +Put spaces between terms and operators. Example: + + Don't do this: + + for(i=0;i<num_items;i++){ + + Do this instead: + + for (i = 0; i < num_items; i++) { + + While it extends the line a bit longer, the spaced version is more + readable. An allowable exception to this rule is the situation where + excluding the spacing makes it more obvious that we are dealing with a + single term (even if it is a compound term) such as: + + if (str[idx] == '/' && str[idx-1] != '\\') + + or + + if ((argc-1) - (optind+1) > 0) + + +Bracket Spacing +~~~~~~~~~~~~~~~ + +If an opening bracket starts a function, it should be on the +next line with no spacing before it. However, if a bracket follows an opening +control block, it should be on the same line with a single space (not a tab) +between it and the opening control block statement. Examples: + + Don't do this: + + while (!done) + { + + do + { + + Don't do this either: + + while (!done){ + + do{ + + And for heaven's sake, don't do this: + + while (!done) + { + + do + { + + Do this instead: + + while (!done) { + + do { + + +Spacing around Parentheses +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Put a space between C keywords and left parens, but not between function names +and the left paren that starts it's parameter list (whether it is being +declared or called). Examples: + + Don't do this: + + while(foo) { + for(i = 0; i < n; i++) { + + Do this instead: + + while (foo) { + for (i = 0; i < n; i++) { + + But do functions like this: + + static int my_func(int foo, char bar) + ... + baz = my_func(1, 2); + +Also, don't put a space between the left paren and the first term, nor between +the last arg and the right paren. + + Don't do this: + + if ( x < 1 ) + strcmp( thisstr, thatstr ) + + Do this instead: + + if (x < 1) + strcmp(thisstr, thatstr) + + +Cuddled Elses +~~~~~~~~~~~~~ + +Also, please "cuddle" your else statements by putting the else keyword on the +same line after the right bracket that closes an 'if' statement. + + Don't do this: + + if (foo) { + stmt; + } + else { + stmt; + } + + Do this instead: + + if (foo) { + stmt; + } else { + stmt; + } + +The exception to this rule is if you want to include a comment before the else +block. Example: + + if (foo) { + stmts... + } + /* otherwise, we're just kidding ourselves, so re-frob the input */ + else { + other_stmts... + } + + + +Variable and Function Names +--------------------------- + +Use the K&R style with names in all lower-case and underscores occasionally +used to separate words (e.g., "variable_name" and "numchars" are both +acceptable). Using underscores makes variable and function names more readable +because it looks like whitespace; using lower-case is easy on the eyes. + + Frowned upon: + + hitList + TotalChars + szFileName + pf_Nfol_TriState + + Preferred: + + hit_list + total_chars + file_name + sensible_name + +Exceptions: + + - Enums, macros, and constant variables are occasionally written in all + upper-case with words optionally seperatedy by underscores (i.e. FIFOTYPE, + ISBLKDEV()). + + - Nobody is going to get mad at you for using 'pvar' as the name of a + variable that is a pointer to 'var'. + + +Converting to K&R +~~~~~~~~~~~~~~~~~ + +The Busybox codebase is very much a mixture of code gathered from a variety of +sources. This explains why the current codebase contains such a hodge-podge of +different naming styles (Java, Pascal, K&R, just-plain-weird, etc.). The K&R +guideline explained above should therefore be used on new files that are added +to the repository. Furthermore, the maintainer of an existing file that uses +alternate naming conventions should, at his own convenience, convert those +names over to K&R style. Converting variable names is a very low priority +task. + +If you want to do a search-and-replace of a single variable name in different +files, you can do the following in the busybox directory: + + $ perl -pi -e 's/\bOldVar\b/new_var/g' *.[ch] + +If you want to convert all the non-K&R vars in your file all at once, follow +these steps: + + - In the busybox directory type 'examples/mk2knr.pl files-to-convert'. This + does not do the actual conversion, rather, it generates a script called + 'convertme.pl' that shows what will be converted, giving you a chance to + review the changes beforehand. + + - Review the 'convertme.pl' script that gets generated in the busybox + directory and remove / edit any of the substitutions in there. Please + especially check for false positives (strings that should not be + converted). + + - Type './convertme.pl same-files-as-before' to perform the actual + conversion. + + - Compile and see if everything still works. + +Please be aware of changes that have cascading effects into other files. For +example, if you're changing the name of something in, say utility.c, you +should probably run 'examples/mk2knr.pl utility.c' at first, but when you run +the 'convertme.pl' script you should run it on _all_ files like so: +'./convertme.pl *.[ch]'. + + + +Avoid The Preprocessor +---------------------- + +At best, the preprocessor is a necessary evil, helping us account for platform +and architecture differences. Using the preprocessor unnecessarily is just +plain evil. + + +The Folly of #define +~~~~~~~~~~~~~~~~~~~~ + +Use 'const <type> var' for declaring constants. + + Don't do this: + + #define var 80 + + Do this instead, when the variable is in a header file and will be used in + several source files: + + const int var = 80; + + Or do this when the variable is used only in a single source file: + + static const int var = 80; + +Declaring variables as '[static] const' gives variables an actual type and +makes the compiler do type checking for you; the preprocessor does _no_ type +checking whatsoever, making it much more error prone. Declaring variables with +'[static] const' also makes debugging programs much easier since the value of +the variable can be easily queried and displayed. + + +The Folly of Macros +~~~~~~~~~~~~~~~~~~~ + +Use 'static inline' instead of a macro. + + Don't do this: + + #define mini_func(param1, param2) (param1 << param2) + + Do this instead: + + static inline int mini_func(int param1, param2) + { + return (param1 << param2); + } + +Static inline functions are greatly preferred over macros. They provide type +safety, have no length limitations, no formatting limitations, have an actual +return value, and under gcc they are as cheap as macros. Besides, really long +macros with backslashes at the end of each line are ugly as sin. + + +The Folly of #ifdef +~~~~~~~~~~~~~~~~~~~ + +Code cluttered with ifdefs is difficult to read and maintain. Don't do it. +Instead, put your ifdefs at the top of your .c file (or in a header), and +conditionally define 'static inline' functions, (or *maybe* macros), which are +used in the code. + + Don't do this: + + ret = my_func(bar, baz); + if (!ret) + return -1; + #ifdef CONFIG_FEATURE_FUNKY + maybe_do_funky_stuff(bar, baz); + #endif + + Do this instead: + + (in .h header file) + + #ifdef CONFIG_FEATURE_FUNKY + static inline void maybe_do_funky_stuff (int bar, int baz) + { + /* lotsa code in here */ + } + #else + static inline void maybe_do_funky_stuff (int bar, int baz) {} + #endif + + (in the .c source file) + + ret = my_func(bar, baz); + if (!ret) + return -1; + maybe_do_funky_stuff(bar, baz); + +The great thing about this approach is that the compiler will optimize away +the "no-op" case (the empty function) when the feature is turned off. + +Note also the use of the word 'maybe' in the function name to indicate +conditional execution. + + + +Notes on Strings +---------------- + +Strings in C can get a little thorny. Here's some guidelines for dealing with +strings in Busybox. (There is surely more that could be added to this +section.) + + +String Files +~~~~~~~~~~~~ + +Put all help/usage messages in usage.c. Put other strings in messages.c. +Putting these strings into their own file is a calculated decision designed to +confine spelling errors to a single place and aid internationalization +efforts, if needed. (Side Note: we might want to use a single file - maybe +called 'strings.c' - instead of two, food for thought). + + +Testing String Equivalence +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There's a right way and a wrong way to test for sting equivalence with +strcmp(): + + The wrong way: + + if (!strcmp(string, "foo")) { + ... + + The right way: + + if (strcmp(string, "foo") == 0){ + ... + +The use of the "equals" (==) operator in the latter example makes it much more +obvious that you are testing for equivalence. The former example with the +"not" (!) operator makes it look like you are testing for an error. In a more +perfect world, we would have a streq() function in the string library, but +that ain't the world we're living in. + + +Avoid Dangerous String Functions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Unfortunately, the way C handles strings makes them prone to overruns when +certain library functions are (mis)used. The following table offers a summary +of some of the more notorious troublemakers: + +function overflows preferred +---------------------------------------- +strcpy dest string strncpy +strcat dest string strncat +gets string it gets fgets +getwd buf string getcwd +[v]sprintf str buffer [v]snprintf +realpath path buffer use with pathconf +[vf]scanf its arguments just avoid it + + +The above is by no means a complete list. Be careful out there. + + + +Avoid Big Static Buffers +------------------------ + +First, some background to put this discussion in context: Static buffers look +like this in code: + + /* in a .c file outside any functions */ + static char *buffer[BUFSIZ]; /* happily used by any function in this file, + but ick! big! */ + +The problem with these is that any time any busybox app is run, you pay a +memory penalty for this buffer, even if the applet that uses said buffer is +not run. This can be fixed, thusly: + + static char *buffer; + ... + other_func() + { + strcpy(buffer, lotsa_chars); /* happily uses global *buffer */ + ... + foo_main() + { + buffer = xmalloc(sizeof(char)*BUFSIZ); + ... + +However, this approach trades bss segment for text segment. Rather than +mallocing the buffers (and thus growing the text size), buffers can be +declared on the stack in the *_main() function and made available globally by +assigning them to a global pointer thusly: + + static char *pbuffer; + ... + other_func() + { + strcpy(pbuffer, lotsa_chars); /* happily uses global *pbuffer */ + ... + foo_main() + { + char *buffer[BUFSIZ]; /* declared locally, on stack */ + pbuffer = buffer; /* but available globally */ + ... + +This last approach has some advantages (low code size, space not used until +it's needed), but can be a problem in some low resource machines that have +very limited stack space (e.g., uCLinux). + +A macro is declared in busybox.h that implements compile-time selection +between xmalloc() and stack creation, so you can code the line in question as + + RESERVE_CONFIG_BUFFER(buffer, BUFSIZ); + +and the right thing will happen, based on your configuration. + + + +Miscellaneous Coding Guidelines +------------------------------- + +The following are important items that don't fit into any of the above +sections. + + +Model Busybox Applets After GNU Counterparts +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When in doubt about the proper behavior of a Busybox program (output, +formatting, options, etc.), model it after the equivalent GNU program. +Doesn't matter how that program behaves on some other flavor of *NIX; doesn't +matter what the POSIX standard says or doesn't say, just model Busybox +programs after their GNU counterparts and it will make life easier on (nearly) +everyone. + +The only time we deviate from emulating the GNU behavior is when: + + - We are deliberately not supporting a feature (such as a command line + switch) + - Emulating the GNU behavior is prohibitively expensive (lots more code + would be required, lots more memory would be used, etc.) + - The difference is minor or cosmetic + +A note on the 'cosmetic' case: Output differences might be considered +cosmetic, but if the output is significant enough to break other scripts that +use the output, it should really be fixed. + + +Scope +~~~~~ + +If a const variable is used only in a single source file, put it in the source +file and not in a header file. Likewise, if a const variable is used in only +one function, do not make it global to the file. Instead, declare it inside +the function body. Bottom line: Make a conscious effort to limit declarations +to the smallest scope possible. + +Inside applet files, all functions should be declared static so as to keep the +global name space clean. The only exception to this rule is the "applet_main" +function which must be declared extern. + +If you write a function that performs a task that could be useful outside the +immediate file, turn it into a general-purpose function with no ties to any +applet and put it in the utility.c file instead. + + +Brackets Are Your Friends +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Please use brackets on all if and else statements, even if it is only one +line. Example: + + Don't do this: + + if (foo) + stmt1; + stmt2 + stmt3; + + Do this instead: + + if (foo) { + stmt1; + } + stmt2 + stmt3; + +The "bracketless" approach is error prone because someday you might add a line +like this: + + if (foo) + stmt1; + new_line(); + stmt2 + stmt3; + +And the resulting behavior of your program would totally bewilder you. (Don't +laugh, it happens to us all.) Remember folks, this is C, not Python. + + +Function Declarations +~~~~~~~~~~~~~~~~~~~~~ + +Do not use old-style function declarations that declare variable types between +the parameter list and opening bracket. Example: + + Don't do this: + + int foo(parm1, parm2) + char parm1; + float parm2; + { + .... + + Do this instead: + + int foo(char parm1, float parm2) + { + .... + +The only time you would ever need to use the old declaration syntax is to +support ancient, antediluvian compilers. To our good fortune, we have access +to more modern compilers and the old declaration syntax is neither necessary +nor desired. + + +Emphasizing Logical Blocks +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Organization and readability are improved by putting extra newlines around +blocks of code that perform a single task. These are typically blocks that +begin with a C keyword, but not always. + +Furthermore, you should put a single comment (not necessarily one line, just +one comment) before the block, rather than commenting each and every line. +There is an optimal ammount of commenting that a program can have; you can +comment too much as well as too little. + +A picture is really worth a thousand words here, the following example +illustrates how to emphasize logical blocks: + + while (line = get_line_from_file(fp)) { + + /* eat the newline, if any */ + chomp(line); + + /* ignore blank lines */ + if (strlen(file_to_act_on) == 0) { + continue; + } + + /* if the search string is in this line, print it, + * unless we were told to be quiet */ + if (strstr(line, search) && !be_quiet) { + puts(line); + } + + /* clean up */ + free(line); + } + + +Processing Options with getopt +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If your applet needs to process command-line switches, please use getopt() to +do so. Numerous examples can be seen in many of the existing applets, but +basically it boils down to two things: at the top of the .c file, have this +line in the midst of your #includes: + + #include <getopt.h> + +And a code block similar to the following near the top of your applet_main() +routine: + + while ((opt = getopt(argc, argv, "abc")) > 0) { + switch (opt) { + case 'a': + do_a_opt = 1; + break; + case 'b': + do_b_opt = 1; + break; + case 'c': + do_c_opt = 1; + break; + default: + show_usage(); /* in utility.c */ + } + } + +If your applet takes no options (such as 'init'), there should be a line +somewhere in the file reads: + + /* no options, no getopt */ + +That way, when people go grepping to see which applets need to be converted to +use getopt, they won't get false positives. + +Additional Note: Do not use the getopt_long library function and do not try to +hand-roll your own long option parsing. Busybox applets should only support +short options. Explanations and examples of the short options should be +documented in usage.h. |