Difference between revisions of "Busybox replacement"

From eLinux.org
Jump to: navigation, search
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
This page has information about the commands and features desired for a busybox replacement program.
+
== Toybox ==
 +
The leading contender for a multi-function program that could be
 +
used instead of busybox is toybox.  
  
See [[Busybox replacement project]] for the project proposal for this work.
+
The Toybox material previously on this page
 +
has been moved to http://landley.net/toybox/roadmap.html
  
== Command List ==
+
=== Sony CE Linux (internal distribution) 1.13.4 build ===
 +
This is from a version of busybox used in lots of Sony products:
 +
Currently defined functions:
 +
<pre>
 +
        [, [[, ash, basename, bunzip2, bzcat, cat, chgrp, chmod, chown,
 +
        chroot, cmp, cp, cpio, cut, date, dd, dirname, dmesg, echo, egrep,
 +
        env, expr, false, fgrep, freeramdisk, ftpget, ftpput, getty, grep,
 +
        gunzip, gzip, halt, ifconfig, insmod, kill, killall, klogd, ln,
 +
        logger, login, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp,
 +
        modprobe, mount, mv, pidof, ping, ping6, pivot_root, poweroff,
 +
        pwd, readlink, reboot, rm, rmdir, rmmod, route, sed, sfdisk, sh,
 +
        sha1sum, sleep, sort, stty, swapoff, swapon, switch_root, sync,
 +
        syslogd, tail, tar, taskset, telnet, telnetd, test, touch, true,
 +
        umount, uname, uniq, usleep, vconfig, wc, xargs, zcat
 +
</pre>
 +
 
 +
=== Prioritization ===
 +
The following is Tim's prioritization of the above list, based on his own experience
 +
with embedded systems.  I will divide the above list into 3 groups: must-have,
 +
nice-to-have, not-that-important.
 +
 
 +
Must-have:
 +
cat chgrp chmod chown cp date df
 +
echo env expr false find grep head id kill ln
 +
ls mkdir more mv nice ps pwd rm rmdir sh sleep
 +
sort tail test touch true uname uniq wc xargs
 +
 
 +
(must have, not in the above list: chroot, dmesg, sync)
 +
 
 +
Nice-to-have:
 +
basename cut dd diff dirname du mkfifo printf sed tee time vi who zcat
 +
 
 +
Not-that-important:
 +
at awk bc cal cksum cmp comm csplit expand file
 +
fold fuser getconf link logger logname man newgrp nl
 +
nohup od paste patch pathchk renice split stty tabs
 +
tput tr tty unexpand unlink uudecode uuencode
 +
 
 +
Must-have unimplemented: The following list has Tim's must-have commands,
 +
which are currently (as of Jan, 2012) not implemented in toybox:
 +
chgrp chmod chown date dd
 +
expr find grep head id kill ln
 +
ls mkdir more mv nice ps rm
 +
tail test touch uniq xargs
  
[Rob - can you massage this list?]
+
==== prioritized, must-have, unimplemented list ====
 +
Prioritized top 13:
 +
1. ls
 +
2. mkdir
 +
3. rm
 +
4. ln
 +
5. mv
 +
6. ps
 +
7. kill
 +
8. chmod
 +
9. chown
 +
10. date
 +
11. grep
 +
12. find
 +
13. xargs
  
The first release of a busybox replacement should include the following commands:
+
Second prioritized group:
[insert candidate list here]
+
chgrp id nice expr head tail test touch uniq dd more
  
=== Toybox currently implements ===
+
IMHO - ls needs to support -ladR at first
The triaged toybox is currently implementing usable versions of:
 
  
  bzcat cat catv chroot chvt cksum count cp df dmesg echo false help
+
==== toolbox complement ====
  mdev mkswap nc netcat nice oneit patch pwd rmdir seq setsid sh
+
If we omit toolbox supported commands from the must-have, unimplemented list, we get:
  sha1sum sleep sort sync tee toysh true uname which yes
+
chgrp expr false find grep head more
 +
nice tail test touch true uname xargs
  
See http://landley.net/code/toybox/todo.txt
+
I would add tab completion and globbing for toysh to the list.
  
== Toolbox commands ==
+
This would be for a toolbox complement.
Toolbox in Android (what version?) implements the following commands:
 
  
date id uptime schedtop ifconfig start newfs_msdos
+
== Other multi-tool programs ==
ls route netstat ioctl reboot getprop cmp insmod chmod
+
=== Beastiebox currently implements ===
r cat lsmod chown log df top printenv ionice setprop rmmod setconsole
+
Here’s a link to the Beastiebox project: http://beastiebox.sourceforge.net/
sleep watchprops notify wipe smd iftop rmdir dd vmstat hd rm mount
+
which has been proven to be capable to replace busybox, in general.
ln lsof getevent ps dmesg renice kill mkdir sendevent nandread mv
+
It mostly consists of BSD sources and contains, according to the homepage:
sync stop umount
 
  
The following are unique to Android:
+
  [ cat chmod cp date df disklabel dmesg ex fdisk fsck fsck_ffs
* schedtop
+
  getty halt hostname ifconfig init kill less ln login ls [https://www.mirbsd.org/mksh.htm mksh] more
* newfs_msdos
+
  mount mount_ffs mv pfctl ping poweroff ps reboot rm route sed sh
* getprop
+
  stty sysctl tar test traceroute umount vi wiconfig
* log
 
* setprop
 
* watchprops
 
* notify
 
* wipe
 
* iftop
 
* getevent
 
* sendevent
 
* nandread
 
* stop
 
* smd
 
  
Ones I;m not sure about:
+
Of course, every command is optional; for example, pfctl is currently BSD specific, and fsck_ffs/mount_ffs do not make much sense on Linux either, so these would be disabled in a Linux build of Beastiebox.
* r?
 
* ioctl?
 
  
== Busybox commands ==
+
On the TODO side, the Linux specific commands would need to be implemented
A default build of Busybox 1.10 has the following commands:
+
or taken from one of the others (Toybox, Android Toolbox, etc).
Currently defined functions:
 
  
[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,
+
It does contain a complete shell (mksh, MirBSD Korn Shell) under a BSD-ish
awk, basename, bunzip2, bzcat, bzip2, cal, cat, catv,
+
licence, which can be used as /bin/sh (e.g. on Debian) and is the default
chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
+
/system/bin/sh on Android ICS and later, even. This is not much bigger than
chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond,
+
the sh included with Busybox, Beastiebox (can be disabled in favour of mksh)
crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup,
+
and others, but has functions such as command line editing, UTF-8 support,
deluser, df, dhcprelay, diff, dirname, dmesg, dos2unix,
+
Tab completion, Korn Shell scripting features ('''[[''', arrays, etc). and is
du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,
+
actively developed on its own.
envdir, envuidgid, expand, expr, false, fbset, fdflush,
 
fdformat, fdisk, fgrep, find, fold, free, freeramdisk,
 
fsck, fsck.minix, fuser, getopt, getty, grep, gunzip,
 
gzip, halt, hdparm, head, hexdump, hostid, hostname, hwclock,
 
id, ifconfig, ifdown, ifup, inetd, init, insmod, install,
 
ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule,
 
iptunnel, kbd_mode, kill, killall, killall5, klogd, last,
 
length, less, linux32, linux64, linuxrc, ln, loadfont,
 
loadkmap, logger, login, logname, logread, losetup, lpd,
 
lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, md5sum,
 
mdev, mesg, microcom, mkdir, mkfifo, mkfs.minix, mknod,
 
mkswap, mktemp, modprobe, more, mount, mountpoint, mt,
 
mv, nameif, netstat, nice, nmeter, nohup, nslookup, od,
 
openvt, passwd, patch, pgrep, pidof, ping, pipe_progress,
 
pivot_root, pkill, poweroff, printenv, printf, ps, pscan,
 
pwd, raidautorun, rdate, readlink, readprofile, realpath,
 
reboot, renice, reset, resize, rm, rmdir, rmmod, route,
 
rpm, rpm2cpio, run-parts, runlevel, runsv, runsvdir, rx,
 
script, sed, sendmail, seq, setarch, setconsole, setkeycodes,
 
setlogcons, setsid, setuidgid, sh, sha1sum, sleep, softlimit,
 
sort, split, start-stop-daemon, stat, strings, stty, su,
 
sulogin, sum, sv, svlogd, swapoff, swapon, switch_root,
 
sync, sysctl, syslogd, tac, tail, tar, taskset, tee, telnetd,
 
test, time, top, touch, tr, true, tty, ttysize, udhcpc,
 
udhcpd, umount, uname, uncompress, unexpand, uniq, unix2dos,
 
unlzma, unzip, uptime, usleep, uudecode, uuencode, vi,
 
vlock, watch, watchdog, wc, wget, which, who, whoami,
 
xargs, yes, zcat
 
  
 
== Random Notes ==
 
== Random Notes ==
Line 93: Line 109:
 
Rob wrote:
 
Rob wrote:
  
One nice thing about busybox/toybox/toolbox is you can install multiple
+
One nice thing about busybox/toolbox is you can install multiple
 
implementations side by side, and have what symlinks you create (or what
 
implementations side by side, and have what symlinks you create (or what
 
comes first in the $PATH) determine who is implementing what.
 
comes first in the $PATH) determine who is implementing what.

Latest revision as of 12:23, 1 March 2012

Toybox

The leading contender for a multi-function program that could be used instead of busybox is toybox.

The Toybox material previously on this page has been moved to http://landley.net/toybox/roadmap.html

Sony CE Linux (internal distribution) 1.13.4 build

This is from a version of busybox used in lots of Sony products: Currently defined functions:

        [, [[, ash, basename, bunzip2, bzcat, cat, chgrp, chmod, chown,
        chroot, cmp, cp, cpio, cut, date, dd, dirname, dmesg, echo, egrep,
        env, expr, false, fgrep, freeramdisk, ftpget, ftpput, getty, grep,
        gunzip, gzip, halt, ifconfig, insmod, kill, killall, klogd, ln,
        logger, login, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp,
        modprobe, mount, mv, pidof, ping, ping6, pivot_root, poweroff,
        pwd, readlink, reboot, rm, rmdir, rmmod, route, sed, sfdisk, sh,
        sha1sum, sleep, sort, stty, swapoff, swapon, switch_root, sync,
        syslogd, tail, tar, taskset, telnet, telnetd, test, touch, true,
        umount, uname, uniq, usleep, vconfig, wc, xargs, zcat

Prioritization

The following is Tim's prioritization of the above list, based on his own experience with embedded systems. I will divide the above list into 3 groups: must-have, nice-to-have, not-that-important.

Must-have:

cat chgrp chmod chown cp date df
echo env expr false find grep head id kill ln
ls mkdir more mv nice ps pwd rm rmdir sh sleep
sort tail test touch true uname uniq wc xargs

(must have, not in the above list: chroot, dmesg, sync)

Nice-to-have:

basename cut dd diff dirname du mkfifo printf sed tee time vi who zcat

Not-that-important:

at awk bc cal cksum cmp comm csplit expand file
fold fuser getconf link logger logname man newgrp nl
nohup od paste patch pathchk renice split stty tabs
tput tr tty unexpand unlink uudecode uuencode

Must-have unimplemented: The following list has Tim's must-have commands, which are currently (as of Jan, 2012) not implemented in toybox:

chgrp chmod chown date dd
expr find grep head id kill ln
ls mkdir more mv nice ps rm
tail test touch uniq xargs

prioritized, must-have, unimplemented list

Prioritized top 13:

1. ls
2. mkdir
3. rm
4. ln
5. mv
6. ps
7. kill
8. chmod
9. chown
10. date
11. grep
12. find
13. xargs

Second prioritized group:

chgrp id nice expr head tail test touch uniq dd more

IMHO - ls needs to support -ladR at first

toolbox complement

If we omit toolbox supported commands from the must-have, unimplemented list, we get:

chgrp expr false find grep head more
nice tail test touch true uname xargs

I would add tab completion and globbing for toysh to the list.

This would be for a toolbox complement.

Other multi-tool programs

Beastiebox currently implements

Here’s a link to the Beastiebox project: http://beastiebox.sourceforge.net/ which has been proven to be capable to replace busybox, in general. It mostly consists of BSD sources and contains, according to the homepage:

 [ cat chmod cp date df disklabel dmesg ex fdisk fsck fsck_ffs
 getty halt hostname ifconfig init kill less ln login ls mksh more
 mount mount_ffs mv pfctl ping poweroff ps reboot rm route sed sh
 stty sysctl tar test traceroute umount vi wiconfig

Of course, every command is optional; for example, pfctl is currently BSD specific, and fsck_ffs/mount_ffs do not make much sense on Linux either, so these would be disabled in a Linux build of Beastiebox.

On the TODO side, the Linux specific commands would need to be implemented or taken from one of the others (Toybox, Android Toolbox, etc).

It does contain a complete shell (mksh, MirBSD Korn Shell) under a BSD-ish licence, which can be used as /bin/sh (e.g. on Debian) and is the default /system/bin/sh on Android ICS and later, even. This is not much bigger than the sh included with Busybox, Beastiebox (can be disabled in favour of mksh) and others, but has functions such as command line editing, UTF-8 support, Tab completion, Korn Shell scripting features ([[, arrays, etc). and is actively developed on its own.

Random Notes

Can implement incrementally

Rob wrote:

One nice thing about busybox/toolbox is you can install multiple implementations side by side, and have what symlinks you create (or what comes first in the $PATH) determine who is implementing what.

This allows gradual transitions. Each release, we replace a couple more commands from the old one, until the old one finally isn't being used for anything anymore and we can uninstall it...