Reduce binary size, Allow changing UID/GID
This commit is contained in:
parent
b716b9245f
commit
329f356b28
@ -1,9 +1,11 @@
|
||||
FROM golang:latest AS builder
|
||||
FROM golang:1.21-rc-alpine AS builder
|
||||
|
||||
ARG UID=1000
|
||||
ARG GID=1000
|
||||
|
||||
RUN addgroup --gid ${GID} bobthebuilder && adduser --gid ${GID} --uid ${UID} bobthebuilder
|
||||
RUN apk add upx shadow
|
||||
|
||||
RUN groupadd --gid ${GID} bobthebuilder && useradd -m --gid ${GID} --uid ${UID} bobthebuilder
|
||||
|
||||
RUN mkdir /build
|
||||
RUN chown -Rv bobthebuilder:bobthebuilder /build
|
||||
@ -14,7 +16,9 @@ RUN chown -Rv bobthebuilder:bobthebuilder /workspace
|
||||
USER bobthebuilder
|
||||
WORKDIR /workspace
|
||||
|
||||
RUN [ "go", "build", "-o", "/build/docker_launcher", "." ]
|
||||
RUN [ "go", "build", "-ldflags", "-s -w", "-o", "/build/docker_launcher", "." ]
|
||||
|
||||
RUN [ "upx", "/build/docker_launcher" ]
|
||||
|
||||
FROM alpine:latest
|
||||
|
||||
|
85
main.go
85
main.go
@ -5,7 +5,9 @@ import (
|
||||
"flag"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type file struct {
|
||||
@ -18,9 +20,19 @@ type config struct {
|
||||
VariableRegex string
|
||||
RegexGroup int
|
||||
ForceOverwrite bool
|
||||
|
||||
UpdateUID bool
|
||||
User string
|
||||
UIDVariable string
|
||||
|
||||
UpdateGID bool
|
||||
Group string
|
||||
GIDVariable string
|
||||
}
|
||||
|
||||
var defaultVariableRegex = `\$\{([a-zA-Z0-9_-]+)\}`
|
||||
const defaultVariableRegex = `\$\{([a-zA-Z0-9_-]+)\}`
|
||||
const defaultUIDVariable = "UID"
|
||||
const defaultGIDVariable = "GID"
|
||||
|
||||
func loadConfig(path string) (*config, error) {
|
||||
raw, err := os.ReadFile(path)
|
||||
@ -121,11 +133,55 @@ func filterFiles(config config) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func updateUID(config config) error {
|
||||
uidVariable := config.UIDVariable
|
||||
if len(uidVariable) == 0 {
|
||||
uidVariable = defaultUIDVariable
|
||||
}
|
||||
|
||||
newUID := os.Getenv(uidVariable)
|
||||
if len(newUID) == 0 {
|
||||
log.Println("UID variable is not set. Not updating UID")
|
||||
return nil
|
||||
}
|
||||
|
||||
err := exec.Command("usermod", "-u", newUID, config.User).Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func updateGID(config config) error {
|
||||
gidVariable := config.GIDVariable
|
||||
if len(gidVariable) == 0 {
|
||||
gidVariable = defaultGIDVariable
|
||||
}
|
||||
|
||||
newGID := os.Getenv(gidVariable)
|
||||
if len(newGID) == 0 {
|
||||
log.Println("GID variable is not set. Not updating GID")
|
||||
return nil
|
||||
}
|
||||
|
||||
err := exec.Command("groupmod", "-g", newGID, config.Group).Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
configPath := flag.String("config", "config.json", "Path to config file")
|
||||
force := flag.Bool("force", false, "Forcibly overwrite existing files (equivalent to setting forceOverwrite to true in the config)")
|
||||
flag.Parse()
|
||||
|
||||
if flag.NArg() == 0 {
|
||||
log.Fatal("Missing command")
|
||||
}
|
||||
|
||||
config, err := loadConfig(*configPath)
|
||||
if err != nil {
|
||||
log.Fatalln("Failed to load config:", err)
|
||||
@ -137,4 +193,31 @@ func main() {
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
||||
if config.UpdateUID {
|
||||
log.Println("Updating UID")
|
||||
err = updateUID(*config)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
||||
|
||||
if config.UpdateGID {
|
||||
log.Println("Updating GID")
|
||||
err = updateGID(*config)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
||||
|
||||
command := flag.Args()
|
||||
log.Println(">", strings.Join(command, " "))
|
||||
cmd := exec.Command(command[0], command[1:]...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
log.Fatal("Error: ", err)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user