Difference between revisions of "Busybox replacement"

From eLinux.org
Jump to: navigation, search
(Update list of commands toybox is implementing.)
(Reshuffle, rephrase in terms of use cases.)
Line 5: Line 5:
 
== Command List ==
 
== Command List ==
  
[Rob - can you massage this list?]
+
We have several potential use cases for a busybox replacement, and are using those to determine a consensus on which commands to target for a 1.0 release of an unencumbered busybox replacement package.
 +
 
 +
Our current candidate list combines the commands toybox already implements, the development environment command list, the toolbox standard commands, and the Sony configuration of busybox.
  
 
The first release of a busybox replacement should include the following commands:
 
The first release of a busybox replacement should include the following commands:
 
[insert candidate list here]
 
[insert candidate list here]
  
=== Toybox currently implements ===
+
== Toybox currently implements ==
The triaged toybox is currently implementing usable versions of:
+
 
 +
The triaged toybox (2 clause BSD license) is currently implementing usable versions of:
  
 
   bzcat cal cat catv chroot chvt cksum count cp df dirname dmesg
 
   bzcat cal cat catv chroot chvt cksum count cp df dirname dmesg
Line 18: Line 21:
 
   uname unlink unshare wc which yes
 
   uname unlink unshare wc which yes
  
And minimal versions of:
+
And contains partial implementations of:
 
   mdev sh
 
   mdev sh
  
 
See [http://landley.net/code/toybox/todo.txt the Toybox todo list] for the most up to date status.
 
See [http://landley.net/code/toybox/todo.txt the Toybox todo list] for the most up to date status.
  
== Toolbox commands ==
+
== Use case: provide a self-hosting development environment ==
Toolbox in Android (what version?) implements the following commands:
+
 
 +
The following commands are enough to build the Aboriginal Linux development environment, boot it to a shell prompt, and build Linux From Scratch 6.8 under it.  (Aboriginal Linux currently uses BusyBox for this, thus provides a corresponding test environment for toybox.)
 +
 
 +
This use case includes running init scripts and other shell scripts, running configure, make, and install in each package, and providing basic command line facilities such as a text editor.  (It does not include a compiler toolchain or C library, those are outside the scope of this project.)
 +
 
 +
=== Already in toybox ===
 +
  bzcat cat cp dirname echo patch rmdir sha1sum sleep sort sync
 +
  true uname wc which yes env
 +
 
 +
=== Additional commands for development environment ===
 +
  zcat awk basename bzip2 chmod chown cmp cut date dd diff
 +
  egrep expr find grep gzip head hostname id install ln ls
 +
  mkdir mktemp mv od readlink rm sed sh tail tar touch tr uniq
 +
  wget whoami xargs chgrp comm gunzip less logname man split
 +
  tee test time bunzip2 chgrp chroot comm cpio dmesg
 +
  dnsdomainname ftpd ftpget ftpput gunzip ifconfig init less
 +
  logname losetup man mdev mount mountpoint nc pgrep pkill
 +
  pwd route split stat switch_root tac tee test time umount vi
 +
 
 +
== Use case: replacing Toolbox commands ==
 +
 
 +
=== Standard commands ===
 +
Toolbox in Android (what version?) implements the following standard commands:
  
  date id uptime schedtop ifconfig start newfs_msdos
+
  date id uptime ifconfig start stop newfs_msdos
  ls route netstat ioctl reboot getprop cmp insmod chmod
+
  ls route netstat ioctl reboot cmp insmod chmod
  r cat lsmod chown log df top printenv ionice setprop rmmod setconsole
+
  cat lsmod chown df top printenv ionice rmmod
  sleep watchprops notify wipe smd iftop rmdir dd vmstat hd rm mount
+
  sleep notify iftop rmdir dd vmstat hd rm mount
  ln lsof getevent ps dmesg renice kill mkdir sendevent nandread mv
+
  ln lsof ps dmesg renice kill mkdir mv
  sync stop umount
+
  sync umount
  
The following are unique to Android:
+
=== Android-specific commands ===
  alarm schedtop newfs_msdos getprop log setprop watchprops notify wipe
+
Toolbox also provides the following nonstandard commands, which are unique to Android (or at least do not appear in Ubuntu or
  iftop getevent sendevent nandread stop smd setconsole
+
SUSv4):
  
Ones I'm not sure about:
+
  alarm schedtop getprop log setprop watchprops notify wipe
* r?
+
  getevent sendevent nandread smd setconsole r ioctl
* ioctl?
 
  
 
== Busybox commands ==
 
== Busybox commands ==

Revision as of 06:42, 19 January 2012

This page has information about the commands and features desired for a busybox replacement program.

See Busybox replacement project for the project proposal for this work.

Command List

We have several potential use cases for a busybox replacement, and are using those to determine a consensus on which commands to target for a 1.0 release of an unencumbered busybox replacement package.

Our current candidate list combines the commands toybox already implements, the development environment command list, the toolbox standard commands, and the Sony configuration of busybox.

The first release of a busybox replacement should include the following commands: [insert candidate list here]

Toybox currently implements

The triaged toybox (2 clause BSD license) is currently implementing usable versions of:

 bzcat cal cat catv chroot chvt cksum count cp df dirname dmesg
 echo false help link mkswap nc netcat nice nohup oneit patch pwd
 rmdir seq setsid sha1sum sleep sort sync tee true truncate tty
 uname unlink unshare wc which yes

And contains partial implementations of:

 mdev sh

See the Toybox todo list for the most up to date status.

Use case: provide a self-hosting development environment

The following commands are enough to build the Aboriginal Linux development environment, boot it to a shell prompt, and build Linux From Scratch 6.8 under it. (Aboriginal Linux currently uses BusyBox for this, thus provides a corresponding test environment for toybox.)

This use case includes running init scripts and other shell scripts, running configure, make, and install in each package, and providing basic command line facilities such as a text editor. (It does not include a compiler toolchain or C library, those are outside the scope of this project.)

Already in toybox

 bzcat cat cp dirname echo patch rmdir sha1sum sleep sort sync
 true uname wc which yes env

Additional commands for development environment

 zcat awk basename bzip2 chmod chown cmp cut date dd diff
 egrep expr find grep gzip head hostname id install ln ls
 mkdir mktemp mv od readlink rm sed sh tail tar touch tr uniq
 wget whoami xargs chgrp comm gunzip less logname man split
 tee test time bunzip2 chgrp chroot comm cpio dmesg
 dnsdomainname ftpd ftpget ftpput gunzip ifconfig init less
 logname losetup man mdev mount mountpoint nc pgrep pkill 
 pwd route split stat switch_root tac tee test time umount vi

Use case: replacing Toolbox commands

Standard commands

Toolbox in Android (what version?) implements the following standard commands:

date id uptime ifconfig start stop newfs_msdos
ls route netstat ioctl reboot cmp insmod chmod
cat lsmod chown df top printenv ionice rmmod
sleep notify iftop rmdir dd vmstat hd rm mount
ln lsof ps dmesg renice kill mkdir mv
sync umount

Android-specific commands

Toolbox also provides the following nonstandard commands, which are unique to Android (or at least do not appear in Ubuntu or SUSv4):

 alarm schedtop getprop log setprop watchprops notify wipe
 getevent sendevent nandread smd setconsole r ioctl

Busybox commands

default 1.10 build

A default build of Busybox 1.10 has the following commands:

	[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,
	awk, basename, bunzip2, bzcat, bzip2, cal, cat, catv,
	chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,
	chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond,
	crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup,
	deluser, df, dhcprelay, diff, dirname, dmesg, dos2unix,
	du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,
	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

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

Random Notes

Can implement incrementally

Rob wrote:

One nice thing about busybox/toybox/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...