exec

package
v0.0.0-...-bda5d38 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2025 License: GPL-2.0 Imports: 15 Imported by: 0

Documentation

Overview

Start system process a any platform example host, proot/chroot, docker/podman, etc... and return standardized struct

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrRunning   error = errors.New("process running")        // Process started
	ErrNoRunning error = errors.New("process is not running") // Process not started or not running
)
View Source
var (
	ErrNoExtractUbuntu error = errors.New("cannot extract Ubuntu base image")
)

Functions

func LocalBinExist

func LocalBinExist(processConfig ProcExec) bool

Check if binary exists

Types

type DockerContainer

type DockerContainer struct {
	DockerClient *client.Client

	ContainerName string
	Image         string
	Platform      string // Docker platform to run image
	Ports         []nat.Port
	Volumes       []string
	// contains filtered or unexported fields
}

func NewDocker

func NewDocker(client *client.Client) *DockerContainer

Return new docker exec

func NewDockerDefault

func NewDockerDefault() (*DockerContainer, error)

Create Docker client connection and return new DockerContainer with "debian:latest" image

func (*DockerContainer) AddPort

func (docker *DockerContainer) AddPort(network string, local, remote uint16)

Append port on start conteiner

func (*DockerContainer) AppendToStderr

func (docker *DockerContainer) AppendToStderr(w io.Writer) error

func (*DockerContainer) AppendToStdin

func (docker *DockerContainer) AppendToStdin(r io.Reader) error

func (*DockerContainer) AppendToStdout

func (docker *DockerContainer) AppendToStdout(w io.Writer) error

func (*DockerContainer) Close

func (docker *DockerContainer) Close() error

func (DockerContainer) ContainerAddr

func (docker DockerContainer) ContainerAddr() ([]netip.Addr, error)

Get container addresses

func (*DockerContainer) ExitCode

func (docker *DockerContainer) ExitCode() (int, error)

func (*DockerContainer) Kill

func (docker *DockerContainer) Kill() error

func (*DockerContainer) Signal

func (docker *DockerContainer) Signal(signal os.Signal) error

func (*DockerContainer) Start

func (docker *DockerContainer) Start(options ProcExec) error

func (*DockerContainer) StderrFork

func (docker *DockerContainer) StderrFork() (io.ReadCloser, error)

func (*DockerContainer) StdinFork

func (docker *DockerContainer) StdinFork() (io.WriteCloser, error)

func (*DockerContainer) StdoutFork

func (docker *DockerContainer) StdoutFork() (io.ReadCloser, error)

func (*DockerContainer) Wait

func (docker *DockerContainer) Wait() error

func (*DockerContainer) Write

func (docker *DockerContainer) Write(p []byte) (int, error)

type Env

type Env map[string]string

func (Env) ToSlice

func (env Env) ToSlice() []string

type Os

type Os struct {
	// contains filtered or unexported fields
}

func (*Os) AppendToStderr

func (cli *Os) AppendToStderr(w io.Writer) error

func (*Os) AppendToStdin

func (cli *Os) AppendToStdin(r io.Reader) error

func (*Os) AppendToStdout

func (cli *Os) AppendToStdout(w io.Writer) error

func (*Os) Close

func (w *Os) Close() error

func (*Os) ExitCode

func (os *Os) ExitCode() (int, error)

func (*Os) Kill

func (w *Os) Kill() error

func (*Os) Signal

func (w *Os) Signal(sig os.Signal) error

func (*Os) Start

func (w *Os) Start(options ProcExec) error

func (*Os) StderrFork

func (cli *Os) StderrFork() (io.ReadCloser, error)

func (*Os) StdinFork

func (cli *Os) StdinFork() (io.WriteCloser, error)

func (*Os) StdoutFork

func (cli *Os) StdoutFork() (io.ReadCloser, error)

func (*Os) Wait

func (os *Os) Wait() error

func (*Os) Write

func (os *Os) Write(w []byte) (int, error)

type Proc

type Proc interface {
	Start(options ProcExec) error       // Start process in background
	Kill() error                        // Kill process with SIGKILL
	Close() error                       // Send ctrl + c (SIGINT) and wait process end
	Wait() error                        // Wait process
	Signal(s os.Signal) error           // Send signal to process
	ExitCode() (int, error)             // return process exit code, if running wait to get exit code
	Write(p []byte) (int, error)        // Write to stdin
	AppendToStdin(r io.Reader) error    // Add reader to stdin
	AppendToStdout(w io.Writer) error   // Append writer to stdout
	AppendToStderr(w io.Writer) error   // Append writer to stderr
	StdinFork() (io.WriteCloser, error) // Create fork stream from Stdin
	StdoutFork() (io.ReadCloser, error) // Create fork stream from Stdout
	StderrFork() (io.ReadCloser, error) // Create fork stream from Stderr
}

Universal process struct

type ProcExec

type ProcExec struct {
	Arguments   []string // command and arguments
	Cwd         string   // Workdir path
	Environment Env      // Envs to add to process
}

Generic struct to start Process

type Proot

type Proot struct {
	Rootfs   string              // Rootfs to mount to run proot
	Qemu     string              // Execute guest programs through QEMU, exp: "qemu-x86_64" or "qemu-x86_64-static"
	GID, UID uint                // User and Group ID, default is root
	Binds    map[string][]string // Bind mount directories, example: "/dev": {"/dev", "/root/dev"} => /dev -> /root/dev and /dev
	Os                           // Extends from Os struct
}

Mount rootfs and run command insider in proot

if network not resolve names add nameserver to /etc/resolv.conf (`(echo 'nameserver 1.1.1.1'; echo 'nameserver 8.8.8.8') > /etc/resolv.conf`)

func (Proot) AddNameservers

func (pr Proot) AddNameservers(aadrs ...netip.Addr) error

Append dns server to /etc/resolv.conf

Example: Proot.Proot(netip.MustParseAddr("8.8.8.8"), netip.MustParseAddr("1.1.1.1"))

func (Proot) DownloadUbuntuRootfs

func (proc Proot) DownloadUbuntuRootfs(Version, Arch string) error

Download ubuntu base to host arch if avaible

example: Proot.DownloadUbuntuRootfs("", "") // Latest version to current arch
example: Proot.DownloadUbuntuRootfs("24.10", "amd64")
example: Proot.DownloadUbuntuRootfs("24.10", "arm64")
example: Proot.DownloadUbuntuRootfs("24.10", "riscv64")

func (*Proot) Start

func (pr *Proot) Start(options ProcExec) error

Mount proot and Execute process

type Writers

type Writers struct {
	Std    []io.Writer
	Closed bool
}

Write to many streamings and if closed remove from list

func (*Writers) AddNewWriter

func (p *Writers) AddNewWriter(w io.Writer)

func (*Writers) Close

func (p *Writers) Close() error

func (*Writers) Write

func (p *Writers) Write(w []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL