conbox is a Go implementation of unix-like utilities as single static executable intended for small container images.
Created by gh-md-toc
git clone https://github.com/udhos/conbox ;# clone outside of GOPATH
cd conbox
GO111MODULE=on go install ./conbox
List available applets:
$ conbox
conbox: version 0.0 runtime go1.12.4 GOMAXPROC=1 OS=linux ARCH=amd64
usage: conbox APPLET [ARG]... : run APPLET
conbox -h : show command-line help
conbox -l : list applets
conbox: registered applets:
cat echo ls mkdir printenv pwd rm rmdir shell which
See all implemented applets here:
https://github.com/udhos/conbox/tree/master/applets
You can create a symbolic link for a supported applet pointing to 'conbox':
ln -s ~/go/bin/conbox ~/bin/cat
~/bin/cat /etc/passwd
Pass applet name as subcommand to 'conbox':
conbox cat /etc/passwd
All applets are also directly available from within conbox shell:
$ conbox shell
conbox: version 0.0 runtime go1.12.4 GOMAXPROC=1 OS=linux ARCH=amd64
welcome to conbox shell.
this tiny shell is very limited in features.
however you can run external programs normally.
some hints:
- use 'conbox' to see all applets available as shell commands.
- use 'help' to list shell built-in commands.
- 'exit' terminates the shell.
shell built-in commands:
builtin cd exit help
conbox shell$
- Create a new package for the applet under directory 'applets'. The package must export the function Run() as show in example below.
$ more applets/myapp/run.go
package myapp // put applet myapp in package myapp
import (
"fmt"
"github.com/udhos/conbox/common"
)
// Run executes the applet.
func Run(tab map[string]common.AppletFunc, args []string) int {
fmt.Println("myapp: hello")
return 0 // exit status
}
- In file 'conbox/applets.go', import the applet package and include its Run() function in the applet table:
$ more conbox/applets.go
package main
import (
// (...)
"github.com/udhos/conbox/applets/myapp" // <-- import the applet package
// (...)
)
func loadApplets() map[string]common.AppletFunc {
tab := map[string]common.AppletFunc{
// (...)
"myapp": myapp.Run, // <-- point applet name to its Run() function
// (...)
}
return tab
}
- Rebuild conbox and test the new applet:
$ go install ./conbox
$ conbox myapp
myapp: hello
Get 'conbox' as docker image udhos/conbox:latest
from:
https://hub.docker.com/r/udhos/conbox
Run applet:
docker run --rm udhos/conbox:latest cat /etc/passwd
Run interactive shell:
docker run --rm -ti udhos/conbox:latest shell
Build docker image:
./docker/build.sh
Tag image:
docker tag udhos/conbox udhos/conbox:latest
Push image:
docker login
docker push udhos/conbox:latest
Unfortunately these projects seem inactive: