Skip to content

Commit

Permalink
v2.0.0-alpha.0; add --print-semver=(major|minor|patch)
Browse files Browse the repository at this point in the history
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
  • Loading branch information
AkihiroSuda committed Jun 29, 2023
1 parent ecfe592 commit f96d341
Show file tree
Hide file tree
Showing 37 changed files with 174 additions and 143 deletions.
6 changes: 3 additions & 3 deletions Makefile
Expand Up @@ -10,13 +10,13 @@ clean:
$(RM) -r bin/ _artifact/

bin/rootlesskit: $(GO_FILES)
$(GO) build -o $@ -v github.com/rootless-containers/rootlesskit/cmd/rootlesskit
$(GO) build -o $@ -v ./cmd/rootlesskit

bin/rootlessctl: $(GO_FILES)
$(GO) build -o $@ -v github.com/rootless-containers/rootlesskit/cmd/rootlessctl
$(GO) build -o $@ -v ./cmd/rootlessctl

bin/rootlesskit-docker-proxy: $(GO_FILES)
$(GO) build -o $@ -v github.com/rootless-containers/rootlesskit/cmd/rootlesskit-docker-proxy
$(GO) build -o $@ -v ./cmd/rootlesskit-docker-proxy

.PHONY: cross
cross:
Expand Down
75 changes: 40 additions & 35 deletions README.md
Expand Up @@ -154,78 +154,83 @@ USAGE:
rootlesskit [global options] [arguments...]

VERSION:
1.1.0
2.0.0-alpha.0

DESCRIPTION:
RootlessKit is a Linux-native implementation of "fake root" using user_namespaces(7).

Web site: https://github.com/rootless-containers/rootlesskit

Examples:
# spawn a shell with a new user namespace and a mount namespace
rootlesskit bash

# make /etc writable
rootlesskit --copy-up=/etc bash

# set mount propagation to rslave
rootlesskit --propagation=rslave bash

# create a network namespace with slirp4netns, and expose 80/tcp on the namespace as 8080/tcp on the host
rootlesskit --copy-up=/etc --net=slirp4netns --disable-host-loopback --port-driver=builtin -p 127.0.0.1:8080:80/tcp bash

Note: RootlessKit requires /etc/subuid and /etc/subgid to be configured by the real root user.
See https://rootlesscontaine.rs/getting-started/common/ .

OPTIONS:
Misc:
Misc:
--debug debug mode (default: false)
--help, -h show help (default: false)
--version, -v print the version (default: false)

Mount:
--print-semver value print a version component as a decimal integer [major, minor, patch]
--help, -h show help
--version, -v print the version
Mount:
--copy-up value [ --copy-up value ] mount a filesystem and copy-up the contents. e.g. "--copy-up=/etc" (typically required for non-host network)
--copy-up-mode value copy-up mode [tmpfs+symlink]
--propagation value mount propagation [rprivate, rslave]

Network:
--net value network driver [host, slirp4netns, vpnkit, lxc-user-nic(experimental)]
--mtu value MTU for non-host network (default: 65520 for slirp4netns, 1500 for others) (default: 0)
--cidr value CIDR for slirp4netns network (default: 10.0.2.0/24)
--ifname value Network interface name (default: tap0 for slirp4netns and vpnkit, eth0 for lxc-user-nic)
Network:
--net value network driver [host, pasta(experimental), slirp4netns, vpnkit, lxc-user-nic(experimental)]
--mtu value MTU for non-host network (default: 65520 for pasta and slirp4netns, 1500 for others) (default: 0)
--cidr value CIDR for pasta and slirp4netns networks (default: 10.0.2.0/24)
--ifname value Network interface name (default: tap0 for pasta, slirp4netns, and vpnkit; eth0 for lxc-user-nic)
--disable-host-loopback prohibit connecting to 127.0.0.1:* on the host namespace (default: false)
--ipv6 enable IPv6 routing. Unrelated to port forwarding. Only supported for slirp4netns. (experimental) (default: false)

Network [lxc-user-nic]:
--ipv6 enable IPv6 routing. Unrelated to port forwarding. Only supported for pasta and slirp4netns. (experimental) (default: false)
--detach-netns detach network namespaces (default: false)
Network [lxc-user-nic]:
--lxc-user-nic-binary value path of lxc-user-nic binary for --net=lxc-user-nic
--lxc-user-nic-bridge value lxc-user-nic bridge name

Network [slirp4netns]:
Network [pasta]:
--pasta-binary value path of pasta binary for --net=pasta
Network [slirp4netns]:
--slirp4netns-binary value path of slirp4netns binary for --net=slirp4netns
--slirp4netns-sandbox value enable slirp4netns sandbox (experimental) [auto, true, false] (the default is planned to be "auto" in future)
--slirp4netns-seccomp value enable slirp4netns seccomp (experimental) [auto, true, false] (the default is planned to be "auto" in future)

Network [vpnkit]:
Network [vpnkit]:
--vpnkit-binary value path of VPNKit binary for --net=vpnkit

Port:
--port-driver value port driver for non-host network. [none, builtin, slirp4netns]
Port:
--port-driver value port driver for non-host network. [none, implicit (for pasta), builtin, slirp4netns]
--publish value, -p value [ --publish value, -p value ] publish ports. e.g. "127.0.0.1:8080:80/tcp"

Process:
Process:
--pidns create a PID namespace (default: false)
--cgroupns create a cgroup namespace (default: false)
--utsns create a UTS namespace (default: false)
--ipcns create an IPC namespace (default: false)
--reaper value enable process reaper. Requires --pidns. [auto,true,false]
--evacuate-cgroup2 value evacuate processes into the specified subgroup. Requires --pidns and --cgroupns

State:
State:
--state-dir value state directory

SubID:
SubID:
--subid-source value the source of the subids. "dynamic" executes /usr/bin/getsubids. "static" reads /etc/{subuid,subgid}. [auto,dynamic,static]

```

## State directory
Expand Down
4 changes: 2 additions & 2 deletions cmd/rootlessctl/main.go
Expand Up @@ -9,8 +9,8 @@ import (
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"

"github.com/rootless-containers/rootlesskit/pkg/api/client"
"github.com/rootless-containers/rootlesskit/pkg/version"
"github.com/rootless-containers/rootlesskit/v2/pkg/api/client"
"github.com/rootless-containers/rootlesskit/v2/pkg/version"
)

func main() {
Expand Down
4 changes: 2 additions & 2 deletions cmd/rootlessctl/port.go
Expand Up @@ -11,8 +11,8 @@ import (

"github.com/urfave/cli/v2"

"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/rootless-containers/rootlesskit/pkg/port/portutil"
"github.com/rootless-containers/rootlesskit/v2/pkg/port"
"github.com/rootless-containers/rootlesskit/v2/pkg/port/portutil"
)

var listPortsCommand = cli.Command{
Expand Down
6 changes: 3 additions & 3 deletions cmd/rootlesskit-docker-proxy/main.go
Expand Up @@ -15,9 +15,9 @@ import (
"strings"
"syscall"

"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/api/client"
"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/api/client"
"github.com/rootless-containers/rootlesskit/v2/pkg/port"
"github.com/sirupsen/logrus"
)

Expand Down
47 changes: 35 additions & 12 deletions cmd/rootlesskit/main.go
Expand Up @@ -10,21 +10,22 @@ import (
"strings"
"syscall"

"github.com/Masterminds/semver/v3"
"github.com/sirupsen/logrus"
"github.com/urfave/cli/v2"

"github.com/rootless-containers/rootlesskit/pkg/child"
"github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/pkg/copyup/tmpfssymlink"
"github.com/rootless-containers/rootlesskit/pkg/network/lxcusernic"
"github.com/rootless-containers/rootlesskit/pkg/network/pasta"
"github.com/rootless-containers/rootlesskit/pkg/network/slirp4netns"
"github.com/rootless-containers/rootlesskit/pkg/network/vpnkit"
"github.com/rootless-containers/rootlesskit/pkg/parent"
"github.com/rootless-containers/rootlesskit/pkg/port/builtin"
"github.com/rootless-containers/rootlesskit/pkg/port/portutil"
slirp4netns_port "github.com/rootless-containers/rootlesskit/pkg/port/slirp4netns"
"github.com/rootless-containers/rootlesskit/pkg/version"
"github.com/rootless-containers/rootlesskit/v2/pkg/child"
"github.com/rootless-containers/rootlesskit/v2/pkg/common"
"github.com/rootless-containers/rootlesskit/v2/pkg/copyup/tmpfssymlink"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/lxcusernic"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/pasta"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/slirp4netns"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/vpnkit"
"github.com/rootless-containers/rootlesskit/v2/pkg/parent"
"github.com/rootless-containers/rootlesskit/v2/pkg/port/builtin"
"github.com/rootless-containers/rootlesskit/v2/pkg/port/portutil"
slirp4netns_port "github.com/rootless-containers/rootlesskit/v2/pkg/port/slirp4netns"
"github.com/rootless-containers/rootlesskit/v2/pkg/version"
)

func main() {
Expand Down Expand Up @@ -72,6 +73,10 @@ See https://rootlesscontaine.rs/getting-started/common/ .
Usage: "debug mode",
Destination: &debug,
}, CategoryMisc),
Categorize(&cli.StringFlag{
Name: "print-semver",
Usage: "print a version component as a decimal integer [major, minor, patch]",
}, CategoryMisc),
Categorize(&cli.StringFlag{
Name: "state-dir",
Usage: "state directory",
Expand Down Expand Up @@ -222,9 +227,27 @@ OPTIONS:
Formatter: logrus.StandardLogger().Formatter,
}
logrus.SetFormatter(formatter)

return nil
}
app.Action = func(clicontext *cli.Context) error {
if s := clicontext.String("print-semver"); s != "" {
sv, err := semver.NewVersion(version.Version)
if err != nil {
return fmt.Errorf("failed to parse version %q: %w", version.Version, err)
}
switch s {
case "major":
fmt.Fprintln(clicontext.App.Writer, sv.Major())
case "minor":
fmt.Fprintln(clicontext.App.Writer, sv.Minor())
case "patch":
fmt.Fprintln(clicontext.App.Writer, sv.Patch())
default:
return fmt.Errorf("expected --print-semver=(major|minor|patch), got %q", s)
}
return nil
}
if clicontext.NArg() < 1 {
return errors.New("no command specified")
}
Expand Down
3 changes: 2 additions & 1 deletion go.mod
@@ -1,8 +1,9 @@
module github.com/rootless-containers/rootlesskit
module github.com/rootless-containers/rootlesskit/v2

go 1.19

require (
github.com/Masterminds/semver/v3 v3.2.1
github.com/containernetworking/plugins v1.3.0
github.com/gofrs/flock v0.8.1
github.com/google/uuid v1.3.0
Expand Down
2 changes: 2 additions & 0 deletions go.sum
@@ -1,3 +1,5 @@
github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0=
github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/containernetworking/cni v1.1.2 h1:wtRGZVv7olUHMOqouPpn3cXJWpJgM6+EUl31EQbXALQ=
github.com/containernetworking/plugins v1.3.0 h1:QVNXMT6XloyMUoO2wUOqWTC1hWFV62Q6mVDp5H1HnjM=
github.com/containernetworking/plugins v1.3.0/go.mod h1:Pc2wcedTQQCVuROOOaLBPPxrEXqqXBFt3cZ+/yVg6l0=
Expand Down
6 changes: 3 additions & 3 deletions pkg/api/client/client.go
Expand Up @@ -7,9 +7,9 @@ import (
"fmt"
"net/http"

"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/rootless-containers/rootlesskit/pkg/httputil"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/port"
"github.com/rootless-containers/rootlesskit/v2/pkg/httputil"
)

type Client interface {
Expand Down
8 changes: 4 additions & 4 deletions pkg/api/router/router.go
Expand Up @@ -9,10 +9,10 @@ import (
"strconv"

"github.com/gorilla/mux"
"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/rootless-containers/rootlesskit/pkg/httputil"
"github.com/rootless-containers/rootlesskit/pkg/version"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/port"
"github.com/rootless-containers/rootlesskit/v2/pkg/httputil"
"github.com/rootless-containers/rootlesskit/v2/pkg/version"
)

// NetworkDriver is implemented by network.ParentDriver
Expand Down
14 changes: 7 additions & 7 deletions pkg/child/child.go
Expand Up @@ -14,13 +14,13 @@ import (
"time"

"github.com/containernetworking/plugins/pkg/ns"
"github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/pkg/copyup"
"github.com/rootless-containers/rootlesskit/pkg/messages"
"github.com/rootless-containers/rootlesskit/pkg/network"
"github.com/rootless-containers/rootlesskit/pkg/port"
"github.com/rootless-containers/rootlesskit/pkg/sigproxy"
sigproxysignal "github.com/rootless-containers/rootlesskit/pkg/sigproxy/signal"
"github.com/rootless-containers/rootlesskit/v2/pkg/common"
"github.com/rootless-containers/rootlesskit/v2/pkg/copyup"
"github.com/rootless-containers/rootlesskit/v2/pkg/messages"
"github.com/rootless-containers/rootlesskit/v2/pkg/network"
"github.com/rootless-containers/rootlesskit/v2/pkg/port"
"github.com/rootless-containers/rootlesskit/v2/pkg/sigproxy"
sigproxysignal "github.com/rootless-containers/rootlesskit/v2/pkg/sigproxy/signal"
"github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
)
Expand Down
2 changes: 1 addition & 1 deletion pkg/copyup/tmpfssymlink/tmpfssymlink.go
Expand Up @@ -8,7 +8,7 @@ import (

"golang.org/x/sys/unix"

"github.com/rootless-containers/rootlesskit/pkg/copyup"
"github.com/rootless-containers/rootlesskit/v2/pkg/copyup"
)

func NewChildDriver() copyup.ChildDriver {
Expand Down
2 changes: 1 addition & 1 deletion pkg/messages/messages.go
Expand Up @@ -5,7 +5,7 @@ import (
"io"
"reflect"

"github.com/rootless-containers/rootlesskit/pkg/lowlevelmsgutil"
"github.com/rootless-containers/rootlesskit/v2/pkg/lowlevelmsgutil"
"github.com/sirupsen/logrus"
)

Expand Down
8 changes: 4 additions & 4 deletions pkg/network/lxcusernic/lxcusernic.go
Expand Up @@ -16,10 +16,10 @@ import (

"github.com/sirupsen/logrus"

"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/pkg/messages"
"github.com/rootless-containers/rootlesskit/pkg/network"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/common"
"github.com/rootless-containers/rootlesskit/v2/pkg/messages"
"github.com/rootless-containers/rootlesskit/v2/pkg/network"
)

func NewParentDriver(binary string, mtu int, bridge, ifname string) (network.ParentDriver, error) {
Expand Down
4 changes: 2 additions & 2 deletions pkg/network/network.go
Expand Up @@ -3,8 +3,8 @@ package network
import (
"context"

"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/messages"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/messages"
)

// ParentDriver is called from the parent namespace
Expand Down
2 changes: 1 addition & 1 deletion pkg/network/parentutils/parentutils.go
Expand Up @@ -5,7 +5,7 @@ import (
"os"
"strconv"

"github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/v2/pkg/common"
)

func PrepareTap(childPID int, childNetNsPath string, tap string) error {
Expand Down
12 changes: 6 additions & 6 deletions pkg/network/pasta/pasta.go
Expand Up @@ -12,12 +12,12 @@ import (

"github.com/sirupsen/logrus"

"github.com/rootless-containers/rootlesskit/pkg/api"
"github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/pkg/messages"
"github.com/rootless-containers/rootlesskit/pkg/network"
"github.com/rootless-containers/rootlesskit/pkg/network/iputils"
"github.com/rootless-containers/rootlesskit/pkg/network/parentutils"
"github.com/rootless-containers/rootlesskit/v2/pkg/api"
"github.com/rootless-containers/rootlesskit/v2/pkg/common"
"github.com/rootless-containers/rootlesskit/v2/pkg/messages"
"github.com/rootless-containers/rootlesskit/v2/pkg/network"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/iputils"
"github.com/rootless-containers/rootlesskit/v2/pkg/network/parentutils"
)

// NewParentDriver instantiates new parent driver.
Expand Down

0 comments on commit f96d341

Please sign in to comment.