Skip to content

Commit

Permalink
default build without varlink tag
Browse files Browse the repository at this point in the history
This commit splits out the varlink-specific parts
into files appended with `_varlink` before the extension type.

Fixes: gh#6286

Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>
  • Loading branch information
lsm5 committed May 24, 2020
1 parent 56a95b0 commit de29580
Show file tree
Hide file tree
Showing 7 changed files with 271 additions and 30 deletions.
32 changes: 25 additions & 7 deletions Makefile
Expand Up @@ -30,8 +30,7 @@ BUILDTAGS ?= \
$(shell hack/selinux_tag.sh) \
$(shell hack/systemd_tag.sh) \
exclude_graphdriver_devicemapper \
seccomp \
varlink
seccomp
PYTHON ?= $(shell command -v python3 python|head -n1)
PKG_MANAGER ?= $(shell command -v dnf yum|head -n1)
# ~/.local/bin is not in PATH on all systems
Expand Down Expand Up @@ -145,8 +144,11 @@ help:
ifeq ("$(wildcard $(GOPKGDIR))","")
mkdir -p "$(GOPKGBASEDIR)"
ln -sfn "$(CURDIR)" "$(GOPKGDIR)"
ln -sfn "$(CURDIR)/vendor/github.com/varlink" "$(FIRST_GOPATH)/src/github.com/varlink"
endif

ifneq (,$(findstring varlink,$(BUILDTAGS)))
ln -sfn "$(CURDIR)/vendor/github.com/varlink" "$(FIRST_GOPATH)/src/github.com/varlink"
endif
touch $@

.PHONY: lint
Expand Down Expand Up @@ -554,17 +556,25 @@ install.docker: docker-docs
install ${SELINUXOPT} -m 755 -d ${DESTDIR}${SYSTEMDDIR} ${DESTDIR}${USERSYSTEMDDIR} ${DESTDIR}${TMPFILESDIR}
install ${SELINUXOPT} -m 644 contrib/systemd/system/podman-docker.conf -t ${DESTDIR}${TMPFILESDIR}

.PHONY: install.systemd
install.systemd:
install ${SELINUXOPT} -m 755 -d ${DESTDIR}${SYSTEMDDIR} ${DESTDIR}${USERSYSTEMDDIR} ${DESTDIR}${TMPFILESDIR}
.PHONY: install.varlink
ifneq (,$(findstring varlink,$(BUILDTAGS)))
install.varlink:
install ${SELINUXOPT} -m 644 contrib/varlink/io.podman.socket ${DESTDIR}${SYSTEMDDIR}/io.podman.socket
install ${SELINUXOPT} -m 644 contrib/varlink/io.podman.socket ${DESTDIR}${USERSYSTEMDDIR}/io.podman.socket
install ${SELINUXOPT} -m 644 contrib/varlink/io.podman.service ${DESTDIR}${SYSTEMDDIR}/io.podman.service
install ${SELINUXOPT} -d ${DESTDIR}${USERSYSTEMDDIR}
# User units are ordered differently, we can't make the *system* multi-user.target depend on a user unit.
# For user units the default.target that's the default is fine.
sed -e 's,^WantedBy=.*,WantedBy=default.target,' < contrib/varlink/io.podman.service > ${DESTDIR}${USERSYSTEMDDIR}/io.podman.service
install ${SELINUXOPT} -m 644 contrib/varlink/podman.conf ${DESTDIR}${TMPFILESDIR}/podman.conf
else
install.varlink:
endif


.PHONY: install.systemd
install.systemd: install.varlink
install ${SELINUXOPT} -m 755 -d ${DESTDIR}${SYSTEMDDIR} ${DESTDIR}${USERSYSTEMDDIR} ${DESTDIR}${TMPFILESDIR}
install ${SELINUXOPT} -d ${DESTDIR}${USERSYSTEMDDIR}
# Install APIV2 services
install ${SELINUXOPT} -m 644 contrib/systemd/user/podman.socket ${DESTDIR}${USERSYSTEMDDIR}/podman.socket
install ${SELINUXOPT} -m 644 contrib/systemd/user/podman.service ${DESTDIR}${USERSYSTEMDDIR}/podman.service
Expand Down Expand Up @@ -635,10 +645,18 @@ endef
fi

.PHONY: varlink_generate
ifneq (,$(findstring varlink,$(BUILDTAGS)))
varlink_generate: .gopathok pkg/varlink/iopodman.go ## Generate varlink
else
varlink_generate:
endif

.PHONY: varlink_api_generate
ifneq (,$(findstring varlink,$(BUILDTAGS)))
varlink_api_generate: .gopathok API.md
else
varlink_api_generate:
endif

.PHONY: install.libseccomp.sudo
install.libseccomp.sudo:
Expand Down
17 changes: 3 additions & 14 deletions cmd/podman/system/service.go
@@ -1,4 +1,5 @@
// +build linux
// +build !varlink

package system

Expand Down Expand Up @@ -37,7 +38,6 @@ Enable a listening service for API access to Podman commands.

srvArgs = struct {
Timeout int64
Varlink bool
}{}
)

Expand All @@ -50,7 +50,7 @@ func init() {

flags := srvCmd.Flags()
flags.Int64VarP(&srvArgs.Timeout, "time", "t", 5, "Time until the service session expires in seconds. Use 0 to disable the timeout")
flags.BoolVar(&srvArgs.Varlink, "varlink", false, "Use legacy varlink service instead of REST")
flags.Int64Var(&srvArgs.Timeout, "timeout", 5, "Time until the service session expires in seconds. Use 0 to disable the timeout")

_ = flags.MarkDeprecated("varlink", "valink API is deprecated.")
flags.SetNormalizeFunc(aliasTimeoutFlag)
Expand Down Expand Up @@ -92,11 +92,6 @@ func service(cmd *cobra.Command, args []string) error {
Timeout: time.Duration(srvArgs.Timeout) * time.Second,
Command: cmd,
}

if srvArgs.Varlink {
return registry.ContainerEngine().VarlinkService(registry.GetContext(), opts)
}

logrus.Warn("This function is EXPERIMENTAL")
fmt.Fprintf(os.Stderr, "This function is EXPERIMENTAL.\n")

Expand All @@ -108,8 +103,7 @@ func resolveApiURI(_url []string) (string, error) {
// 1) User input wins always
// 2) systemd socket activation
// 3) rootless honors XDG_RUNTIME_DIR
// 4) if varlink -- adapter.DefaultVarlinkAddress
// 5) lastly adapter.DefaultAPIAddress
// 4) lastly adapter.DefaultAPIAddress

if len(_url) == 0 {
if v, found := os.LookupEnv("PODMAN_SOCKET"); found {
Expand All @@ -131,9 +125,6 @@ func resolveApiURI(_url []string) (string, error) {
}

socketName := "podman.sock"
if srvArgs.Varlink {
socketName = "io.podman"
}
socketDir := filepath.Join(xdg, "podman", socketName)
if _, err := os.Stat(filepath.Dir(socketDir)); err != nil {
if os.IsNotExist(err) {
Expand All @@ -145,8 +136,6 @@ func resolveApiURI(_url []string) (string, error) {
}
}
return "unix:" + socketDir, nil
case srvArgs.Varlink:
return registry.DefaultVarlinkAddress, nil
default:
return registry.DefaultRootAPIAddress, nil
}
Expand Down
154 changes: 154 additions & 0 deletions cmd/podman/system/service_varlink.go
@@ -0,0 +1,154 @@
// +build linux
// +build varlink

package system

import (
"fmt"
"net/url"
"os"
"path/filepath"
"syscall"
"time"

"github.com/containers/libpod/cmd/podman/registry"
"github.com/containers/libpod/pkg/domain/entities"
"github.com/containers/libpod/pkg/rootless"
"github.com/containers/libpod/pkg/systemd"
"github.com/containers/libpod/pkg/util"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)

var (
srvDescription = `Run an API service
Enable a listening service for API access to Podman commands.
`

srvCmd = &cobra.Command{
Use: "service [flags] [URI]",
Args: cobra.MaximumNArgs(1),
Short: "Run API service",
Long: srvDescription,
RunE: service,
Example: `podman system service --time=0 unix:///tmp/podman.sock`,
}

srvArgs = struct {
Timeout int64
Varlink bool
}{}
)

func init() {
registry.Commands = append(registry.Commands, registry.CliCommand{
Mode: []entities.EngineMode{entities.ABIMode},
Command: srvCmd,
Parent: systemCmd,
})

flags := srvCmd.Flags()
flags.Int64VarP(&srvArgs.Timeout, "time", "t", 5, "Time until the service session expires in seconds. Use 0 to disable the timeout")
flags.BoolVar(&srvArgs.Varlink, "varlink", false, "Use legacy varlink service instead of REST")

_ = flags.MarkDeprecated("varlink", "valink API is deprecated.")
flags.SetNormalizeFunc(aliasTimeoutFlag)
}

func aliasTimeoutFlag(_ *pflag.FlagSet, name string) pflag.NormalizedName {
if name == "timeout" {
name = "time"
}
return pflag.NormalizedName(name)
}

func service(cmd *cobra.Command, args []string) error {
apiURI, err := resolveApiURI(args)
if err != nil {
return err
}
logrus.Infof("using API endpoint: '%s'", apiURI)

// Clean up any old existing unix domain socket
if len(apiURI) > 0 {
uri, err := url.Parse(apiURI)
if err != nil {
return err
}

// socket activation uses a unix:// socket in the shipped unit files but apiURI is coded as "" at this layer.
if "unix" == uri.Scheme && !registry.IsRemote() {
if err := syscall.Unlink(uri.Path); err != nil && !os.IsNotExist(err) {
return err
}
mask := syscall.Umask(0177)
defer syscall.Umask(mask)
}
}

opts := entities.ServiceOptions{
URI: apiURI,
Timeout: time.Duration(srvArgs.Timeout) * time.Second,
Command: cmd,
}

if srvArgs.Varlink {
return registry.ContainerEngine().VarlinkService(registry.GetContext(), opts)
}

logrus.Warn("This function is EXPERIMENTAL")
fmt.Fprintf(os.Stderr, "This function is EXPERIMENTAL.\n")

return restService(opts, cmd.Flags(), registry.PodmanConfig())
}

func resolveApiURI(_url []string) (string, error) {
// When determining _*THE*_ listening endpoint --
// 1) User input wins always
// 2) systemd socket activation
// 3) rootless honors XDG_RUNTIME_DIR
// 4) if varlink -- adapter.DefaultVarlinkAddress
// 5) lastly adapter.DefaultAPIAddress

if len(_url) == 0 {
if v, found := os.LookupEnv("PODMAN_SOCKET"); found {
logrus.Debugf("PODMAN_SOCKET='%s' used to determine API endpoint", v)
_url = []string{v}
}
}

switch {
case len(_url) > 0 && _url[0] != "":
return _url[0], nil
case systemd.SocketActivated():
logrus.Info("using systemd socket activation to determine API endpoint")
return "", nil
case rootless.IsRootless():
xdg, err := util.GetRuntimeDir()
if err != nil {
return "", err
}

socketName := "podman.sock"
if srvArgs.Varlink {
socketName = "io.podman"
}
socketDir := filepath.Join(xdg, "podman", socketName)
if _, err := os.Stat(filepath.Dir(socketDir)); err != nil {
if os.IsNotExist(err) {
if err := os.Mkdir(filepath.Dir(socketDir), 0755); err != nil {
return "", err
}
} else {
return "", err
}
}
return "unix:" + socketDir, nil
case srvArgs.Varlink:
return registry.DefaultVarlinkAddress, nil
default:
return registry.DefaultRootAPIAddress, nil
}
}
1 change: 1 addition & 0 deletions cmd/podman/system/varlink.go
@@ -1,4 +1,5 @@
// +build linux
// +build varlink

package system

Expand Down
9 changes: 1 addition & 8 deletions contrib/spec/podman.spec.in
Expand Up @@ -387,9 +387,7 @@ popd
ln -s vendor src
export GO111MODULE=off
export GOPATH=$(pwd)/_build:$(pwd):$(pwd):%{gopath}
export BUILDTAGS="varlink selinux seccomp systemd $(%{hackdir}/hack/btrfs_installed_tag.sh) $(%{hackdir}/hack/btrfs_tag.sh) $(%{hackdir}/hack/libdm_tag.sh) exclude_graphdriver_devicemapper"

GOPATH=$GOPATH go generate ./pkg/varlink/...
export BUILDTAGS="selinux seccomp systemd $(%{hackdir}/hack/btrfs_installed_tag.sh) $(%{hackdir}/hack/btrfs_tag.sh) $(%{hackdir}/hack/libdm_tag.sh) exclude_graphdriver_devicemapper"

%if %{with doc}
BUILDTAGS=$BUILDTAGS make binaries docs
Expand Down Expand Up @@ -503,15 +501,10 @@ export GOPATH=%{buildroot}/%{gopath}:$(pwd)/vendor:%{gopath}
%{_datadir}/zsh/site-functions/*
%{_libexecdir}/%{name}/conmon
%config(noreplace) %{_sysconfdir}/cni/net.d/87-%{name}-bridge.conflist
%{_unitdir}/io.podman.service
%{_unitdir}/io.podman.socket
%{_usr}/lib/systemd/user/io.podman.service
%{_usr}/lib/systemd/user/io.podman.socket
%{_unitdir}/podman.service
%{_unitdir}/podman.socket
%{_usr}/lib/systemd/user/podman.service
%{_usr}/lib/systemd/user/podman.socket
%{_usr}/lib/tmpfiles.d/%{name}.conf

%if 0%{?with_devel}
%files -n libpod-devel -f devel.file-list
Expand Down
3 changes: 2 additions & 1 deletion pkg/domain/entities/engine_container.go
@@ -1,3 +1,5 @@
// +build !varlink

package entities

import (
Expand Down Expand Up @@ -73,7 +75,6 @@ type ContainerEngine interface {
Shutdown(ctx context.Context)
SystemDf(ctx context.Context, options SystemDfOptions) (*SystemDfReport, error)
Unshare(ctx context.Context, args []string) error
VarlinkService(ctx context.Context, opts ServiceOptions) error
Version(ctx context.Context) (*SystemVersionReport, error)
VolumeCreate(ctx context.Context, opts VolumeCreateOptions) (*IdOrNameResponse, error)
VolumeInspect(ctx context.Context, namesOrIds []string, opts VolumeInspectOptions) ([]*VolumeInspectReport, error)
Expand Down

0 comments on commit de29580

Please sign in to comment.