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">
<text x="33.5" y="15" fill="#010101" fill-opacity=".3">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="14">16.1%</text>
<text x="86" y="15" fill="#010101" fill-opacity=".3">16.0%</text>
<text x="86" y="14">16.0%</text>
</g>
</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">
<text x="37" y="15" fill="#010101" fill-opacity=".3">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="14">99.00%</text>
<text x="100" y="15" fill="#010101" fill-opacity=".3">97.00%</text>
<text x="100" y="14">97.00%</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

120
build.go

@ -66,16 +66,20 @@ func BuildCmd() *cli.Command {
},
},
Action: func(c *cli.Context) error {
if err := utils.EnuseIsPrivilegedGroupMember(); err != nil {
return nil
}
wd, err := os.Getwd()
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error getting working directory"), err)
}
wd, cleanup, err := Mount(wd)
wd, wdCleanup, err := Mount(wd)
if err != nil {
return err
}
defer cleanup()
defer wdCleanup()
ctx := c.Context
@ -105,42 +109,31 @@ func BuildCmd() *cli.Command {
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 scriptArgs *build.BuildPackageFromScriptArgs
var dbArgs *build.BuildPackageFromDbArgs
switch {
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"))
res, err = builder.BuildPackageFromScript(
ctx,
&build.BuildPackageFromScriptArgs{
Script: script,
Packages: packages,
BuildArgs: build.BuildArgs{
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
scriptArgs = &build.BuildPackageFromScriptArgs{
Script: script,
Packages: packages,
BuildArgs: build.BuildArgs{
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
}
case c.IsSet("package"):
// TODO: handle multiple packages
@ -165,27 +158,58 @@ func BuildCmd() *cli.Command {
packages = append(packages, pkg[0].Name)
}
res, err = builder.BuildPackageFromDb(
ctx,
&build.BuildPackageFromDbArgs{
Package: &pkg[0],
Packages: packages,
BuildArgs: build.BuildArgs{
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
dbArgs = &build.BuildPackageFromDbArgs{
Package: &pkg[0],
Packages: packages,
BuildArgs: build.BuildArgs{
Opts: &types.BuildOpts{
Clean: c.Bool("clean"),
Interactive: c.Bool("interactive"),
},
PkgFormat_: build.GetPkgFormat(mgr),
Info: info,
},
)
if err != nil {
return cliutils.FormatCliExit(gotext.Get("Error building package"), err)
}
default:
slog.Error(gotext.Get("Nothing to build"))
os.Exit(1)
return cliutils.FormatCliExit(gotext.Get("Nothing to build"), nil)
}
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
},
}

@ -198,10 +198,21 @@ func InternalMountCmd() *cli.Command {
sourceDir := c.Args().First()
u, _ := user.Current()
_, alrGid, _ := utils.GetUidGidAlrUser()
u, err := user.Current()
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
}

@ -20,4 +20,5 @@ const (
SystemConfigPath = "/etc/alr/alr.toml"
SystemCachePath = "/var/cache/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"
msgstr ""
#: build.go:71
#: build.go:75
msgid "Error getting working directory"
msgstr ""
#: build.go:99
#: build.go:103
msgid "Unable to detect a supported package manager on the system"
msgstr ""
#: build.go:105
#: build.go:109
msgid "Error parsing os release"
msgstr ""
#: build.go:143 build.go:184
msgid "Error building package"
#: build.go:121
msgid "Cannot get absolute script path"
msgstr ""
#: build.go:160
#: build.go:153
msgid "Package not found"
msgstr ""
#: build.go:187
#: build.go:174
msgid "Nothing to build"
msgstr ""
#: build.go:196
#: build.go:212
msgid "Error building package"
msgstr ""
#: build.go:220
msgid "Error moving the package"
msgstr ""
#: build.go:224
msgid "Done"
msgstr ""
#: fix.go:38
msgid "Attempt to fix problems with ALR"
msgstr ""
@ -86,10 +94,6 @@ msgstr ""
msgid "Unable to create new cache directory"
msgstr ""
#: fix.go:98
msgid "Done"
msgstr ""
#: gen.go:34
msgid "Generate a ALR script from a template"
msgstr ""
@ -307,14 +311,18 @@ msgstr ""
msgid "ERROR"
msgstr ""
#: internal/utils/cmd.go:86
#: internal/utils/cmd.go:87
msgid "Error dropping capabilities"
msgstr ""
#: internal/utils/cmd.go:93
#: internal/utils/cmd.go:94
msgid "You need to be root to perform this action"
msgstr ""
#: internal/utils/cmd.go:136
msgid "You need to be a %s member to perform this action"
msgstr ""
#: list.go:41
msgid "List ALR repo packages"
msgstr ""

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

@ -27,6 +27,7 @@ import (
"github.com/urfave/cli/v2"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils"
"gitea.plemya-x.ru/Plemya-x/ALR/internal/constants"
)
func GetUidGidAlrUserString() (string, string, error) {
@ -111,13 +112,13 @@ func EnuseIsAlrUser() error {
return nil
}
func EnuseIsWheelMember() error {
func EnuseIsPrivilegedGroupMember() error {
currentUser, err := user.Current()
if err != nil {
return err
}
group, err := user.LookupGroup("wheel")
group, err := user.LookupGroup(constants.PrivilegedGroup)
if err != nil {
return err
}
@ -132,7 +133,7 @@ func EnuseIsWheelMember() error {
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 {