This commit is contained in:
Maxim Slipenko 2025-04-15 00:04:55 +03:00
parent 6d5016270f
commit 613dc41fdf
8 changed files with 141 additions and 86 deletions

@ -11,7 +11,7 @@
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text> <text x="33.5" y="15" fill="#010101" fill-opacity=".3">coverage</text>
<text x="33.5" y="14">coverage</text> <text x="33.5" y="14">coverage</text>
<text x="86" y="15" fill="#010101" fill-opacity=".3">16.1%</text> <text x="86" y="15" fill="#010101" fill-opacity=".3">16.0%</text>
<text x="86" y="14">16.1%</text> <text x="86" y="14">16.0%</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 926 B

After

Width:  |  Height:  |  Size: 926 B

@ -12,7 +12,7 @@
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"> <g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="37" y="15" fill="#010101" fill-opacity=".3">ru translate</text> <text x="37" y="15" fill="#010101" fill-opacity=".3">ru translate</text>
<text x="37" y="14">ru translate</text> <text x="37" y="14">ru translate</text>
<text x="100" y="15" fill="#010101" fill-opacity=".3">99.00%</text> <text x="100" y="15" fill="#010101" fill-opacity=".3">97.00%</text>
<text x="100" y="14">99.00%</text> <text x="100" y="14">97.00%</text>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

@ -66,16 +66,20 @@ func BuildCmd() *cli.Command {
}, },
}, },
Action: func(c *cli.Context) error { Action: func(c *cli.Context) error {
if err := utils.EnuseIsPrivilegedGroupMember(); err != nil {
return nil
}
wd, err := os.Getwd() wd, err := os.Getwd()
if err != nil { if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err) return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
} }
wd, cleanup, err := Mount(wd) wd, wdCleanup, err := Mount(wd)
if err != nil { if err != nil {
return err return err
} }
defer cleanup() defer wdCleanup()
ctx := c.Context ctx := c.Context
@ -105,28 +109,21 @@ func BuildCmd() *cli.Command {
return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err) return cliutils.FormatCliExit(gotext.Get("Error parsing os release"), err)
} }
if err := utils.ExitIfCantDropCapsToAlrUser(); err != nil {
return err
}
builder, err := build.NewMainBuilder(
deps.Cfg,
deps.Repos,
)
if err != nil {
return err
}
var res *build.BuildResult var res *build.BuildResult
var scriptArgs *build.BuildPackageFromScriptArgs
var dbArgs *build.BuildPackageFromDbArgs
switch { switch {
case c.IsSet("script"): case c.IsSet("script"):
script = c.String("script") script, err = filepath.Abs(c.String("script"))
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Cannot get absolute script path"), err)
}
packages = append(packages, c.String("script-package")) packages = append(packages, c.String("script-package"))
res, err = builder.BuildPackageFromScript( scriptArgs = &build.BuildPackageFromScriptArgs{
ctx,
&build.BuildPackageFromScriptArgs{
Script: script, Script: script,
Packages: packages, Packages: packages,
BuildArgs: build.BuildArgs{ BuildArgs: build.BuildArgs{
@ -137,10 +134,6 @@ func BuildCmd() *cli.Command {
PkgFormat_: build.GetPkgFormat(mgr), PkgFormat_: build.GetPkgFormat(mgr),
Info: info, Info: info,
}, },
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
} }
case c.IsSet("package"): case c.IsSet("package"):
// TODO: handle multiple packages // TODO: handle multiple packages
@ -165,9 +158,7 @@ func BuildCmd() *cli.Command {
packages = append(packages, pkg[0].Name) packages = append(packages, pkg[0].Name)
} }
res, err = builder.BuildPackageFromDb( dbArgs = &build.BuildPackageFromDbArgs{
ctx,
&build.BuildPackageFromDbArgs{
Package: &pkg[0], Package: &pkg[0],
Packages: packages, Packages: packages,
BuildArgs: build.BuildArgs{ BuildArgs: build.BuildArgs{
@ -178,14 +169,47 @@ func BuildCmd() *cli.Command {
PkgFormat_: build.GetPkgFormat(mgr), PkgFormat_: build.GetPkgFormat(mgr),
Info: info, Info: info,
}, },
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
} }
default: default:
slog.Error(gotext.Get("Nothing to build")) return cliutils.FormatCliExit(gotext.Get("Nothing to build"), nil)
os.Exit(1) }
if scriptArgs != nil {
scriptFile := filepath.Base(scriptArgs.Script)
newScriptDir, scriptDirCleanup, err := Mount(filepath.Dir(scriptArgs.Script))
if err != nil {
return err
}
defer scriptDirCleanup()
scriptArgs.Script = filepath.Join(newScriptDir, scriptFile)
}
if err := utils.ExitIfCantDropCapsToAlrUser(); err != nil {
return err
}
builder, err := build.NewMainBuilder(
deps.Cfg,
deps.Repos,
)
if err != nil {
return err
}
if scriptArgs != nil {
res, err = builder.BuildPackageFromScript(
ctx,
scriptArgs,
)
} else if dbArgs != nil {
res, err = builder.BuildPackageFromDb(
ctx,
dbArgs,
)
}
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
} }
// Перемещение собранных пакетов в рабочую директорию // Перемещение собранных пакетов в рабочую директорию
@ -197,6 +221,8 @@ func BuildCmd() *cli.Command {
} }
} }
slog.Info(gotext.Get("Done"))
return nil return nil
}, },
} }

@ -198,10 +198,21 @@ func InternalMountCmd() *cli.Command {
sourceDir := c.Args().First() sourceDir := c.Args().First()
u, _ := user.Current() u, err := user.Current()
_, alrGid, _ := utils.GetUidGidAlrUser() if err != nil {
return cliutils.FormatCliExit("cannot get current user", err)
}
if err := utils.EnuseIsWheelMember(); err != nil { _, alrGid, err := utils.GetUidGidAlrUser()
if err != nil {
return cliutils.FormatCliExit("cannot get alr user", err)
}
if _, err := os.Stat(sourceDir); err != nil {
return cliutils.FormatCliExit(fmt.Sprintf("cannot read %s", sourceDir), err)
}
if err := utils.EnuseIsPrivilegedGroupMember(); err != nil {
return err return err
} }

@ -20,4 +20,5 @@ const (
SystemConfigPath = "/etc/alr/alr.toml" SystemConfigPath = "/etc/alr/alr.toml"
SystemCachePath = "/var/cache/alr" SystemCachePath = "/var/cache/alr"
AlrRunDir = "/var/run/alr" AlrRunDir = "/var/run/alr"
PrivilegedGroup = "wheel"
) )

@ -30,34 +30,42 @@ msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "" msgstr ""
#: build.go:71 #: build.go:75
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "" msgstr ""
#: build.go:99 #: build.go:103
msgid "Unable to detect a supported package manager on the system" msgid "Unable to detect a supported package manager on the system"
msgstr "" msgstr ""
#: build.go:105 #: build.go:109
msgid "Error parsing os release" msgid "Error parsing os release"
msgstr "" msgstr ""
#: build.go:143 build.go:184 #: build.go:121
msgid "Error building package" msgid "Cannot get absolute script path"
msgstr "" msgstr ""
#: build.go:160 #: build.go:153
msgid "Package not found" msgid "Package not found"
msgstr "" msgstr ""
#: build.go:187 #: build.go:174
msgid "Nothing to build" msgid "Nothing to build"
msgstr "" msgstr ""
#: build.go:196 #: build.go:212
msgid "Error building package"
msgstr ""
#: build.go:220
msgid "Error moving the package" msgid "Error moving the package"
msgstr "" msgstr ""
#: build.go:224
msgid "Done"
msgstr ""
#: fix.go:38 #: fix.go:38
msgid "Attempt to fix problems with ALR" msgid "Attempt to fix problems with ALR"
msgstr "" msgstr ""
@ -86,10 +94,6 @@ msgstr ""
msgid "Unable to create new cache directory" msgid "Unable to create new cache directory"
msgstr "" msgstr ""
#: fix.go:98
msgid "Done"
msgstr ""
#: gen.go:34 #: gen.go:34
msgid "Generate a ALR script from a template" msgid "Generate a ALR script from a template"
msgstr "" msgstr ""
@ -307,14 +311,18 @@ msgstr ""
msgid "ERROR" msgid "ERROR"
msgstr "" msgstr ""
#: internal/utils/cmd.go:86 #: internal/utils/cmd.go:87
msgid "Error dropping capabilities" msgid "Error dropping capabilities"
msgstr "" msgstr ""
#: internal/utils/cmd.go:93 #: internal/utils/cmd.go:94
msgid "You need to be root to perform this action" msgid "You need to be root to perform this action"
msgstr "" msgstr ""
#: internal/utils/cmd.go:136
msgid "You need to be a %s member to perform this action"
msgstr ""
#: list.go:41 #: list.go:41
msgid "List ALR repo packages" msgid "List ALR repo packages"
msgstr "" msgstr ""

@ -37,35 +37,43 @@ msgid ""
"Build package from scratch even if there's an already built package available" "Build package from scratch even if there's an already built package available"
msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет" msgstr "Создайте пакет с нуля, даже если уже имеется готовый пакет"
#: build.go:71 #: build.go:75
msgid "Error getting working directory" msgid "Error getting working directory"
msgstr "Ошибка при получении рабочего каталога" msgstr "Ошибка при получении рабочего каталога"
#: build.go:99 #: build.go:103
msgid "Unable to detect a supported package manager on the system" msgid "Unable to detect a supported package manager on the system"
msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе" msgstr "Не удалось обнаружить поддерживаемый менеджер пакетов в системе"
#: build.go:105 #: build.go:109
msgid "Error parsing os release" msgid "Error parsing os release"
msgstr "Ошибка при разборе файла выпуска операционной системы" msgstr "Ошибка при разборе файла выпуска операционной системы"
#: build.go:143 build.go:184 #: build.go:121
msgid "Error building package" msgid "Cannot get absolute script path"
msgstr "Ошибка при сборке пакета" msgstr ""
#: build.go:160 #: build.go:153
msgid "Package not found" msgid "Package not found"
msgstr "Пакет не найден" msgstr "Пакет не найден"
#: build.go:187 #: build.go:174
#, fuzzy #, fuzzy
msgid "Nothing to build" msgid "Nothing to build"
msgstr "Исполнение build()" msgstr "Исполнение build()"
#: build.go:196 #: build.go:212
msgid "Error building package"
msgstr "Ошибка при сборке пакета"
#: build.go:220
msgid "Error moving the package" msgid "Error moving the package"
msgstr "Ошибка при перемещении пакета" msgstr "Ошибка при перемещении пакета"
#: build.go:224
msgid "Done"
msgstr "Сделано"
#: fix.go:38 #: fix.go:38
msgid "Attempt to fix problems with ALR" msgid "Attempt to fix problems with ALR"
msgstr "Попытка устранить проблемы с ALR" msgstr "Попытка устранить проблемы с ALR"
@ -98,10 +106,6 @@ msgstr "Восстановление кэша"
msgid "Unable to create new cache directory" msgid "Unable to create new cache directory"
msgstr "Не удалось создать новый каталог кэша" msgstr "Не удалось создать новый каталог кэша"
#: fix.go:98
msgid "Done"
msgstr "Сделано"
#: gen.go:34 #: gen.go:34
msgid "Generate a ALR script from a template" msgid "Generate a ALR script from a template"
msgstr "Генерация скрипта ALR из шаблона" msgstr "Генерация скрипта ALR из шаблона"
@ -322,15 +326,19 @@ msgstr "%s %s загружается — %s/с\n"
msgid "ERROR" msgid "ERROR"
msgstr "ОШИБКА" msgstr "ОШИБКА"
#: internal/utils/cmd.go:86 #: internal/utils/cmd.go:87
#, fuzzy #, fuzzy
msgid "Error dropping capabilities" msgid "Error dropping capabilities"
msgstr "Ошибка при открытии базы данных" msgstr "Ошибка при открытии базы данных"
#: internal/utils/cmd.go:93 #: internal/utils/cmd.go:94
msgid "You need to be root to perform this action" msgid "You need to be root to perform this action"
msgstr "" msgstr ""
#: internal/utils/cmd.go:136
msgid "You need to be a %s member to perform this action"
msgstr ""
#: list.go:41 #: list.go:41
msgid "List ALR repo packages" msgid "List ALR repo packages"
msgstr "Список пакетов репозитория ALR" msgstr "Список пакетов репозитория ALR"

@ -27,6 +27,7 @@ import (
"github.com/urfave/cli/v2" "github.com/urfave/cli/v2"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils" "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/constants"
) )
func GetUidGidAlrUserString() (string, string, error) { func GetUidGidAlrUserString() (string, string, error) {
@ -111,13 +112,13 @@ func EnuseIsAlrUser() error {
return nil return nil
} }
func EnuseIsWheelMember() error { func EnuseIsPrivilegedGroupMember() error {
currentUser, err := user.Current() currentUser, err := user.Current()
if err != nil { if err != nil {
return err return err
} }
group, err := user.LookupGroup("wheel") group, err := user.LookupGroup(constants.PrivilegedGroup)
if err != nil { if err != nil {
return err return err
} }
@ -132,7 +133,7 @@ func EnuseIsWheelMember() error {
return nil return nil
} }
} }
return errors.New("looks like is not wheel member") return cliutils.FormatCliExit(gotext.Get("You need to be a %s member to perform this action", constants.PrivilegedGroup), nil)
} }
func EscalateToRootGid() error { func EscalateToRootGid() error {