From 9efebbc02a1b9e6194fa3678aee8c3a92f696077 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=28=D0=A5?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D1=8B=D1=87=D0=AA=29=20=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BE=D0=B2?= Date: Sun, 21 Sep 2025 15:31:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0=D0=BB=D0=B0=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=B8=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B9=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D1=8B=20ALR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fix.go | 34 ++++++++++------------------------ internal/db/db.go | 8 +++----- refresh.go | 4 ++++ 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/fix.go b/fix.go index b89a070..0b20232 100644 --- a/fix.go +++ b/fix.go @@ -131,22 +131,22 @@ func FixCmd() *cli.Command { } } - // Создаем базовый каталог /tmp/alr с владельцем root:wheel и правами 775 - err = utils.EnsureTempDirWithRootOwner(tmpDir, 0o775) + // Создаем базовый каталог /tmp/alr с владельцем root:wheel и правами 2775 + err = utils.EnsureTempDirWithRootOwner(tmpDir, 0o2775) if err != nil { slog.Warn(gotext.Get("Unable to create temporary directory"), "error", err) } // Создаем каталог dl с правами для группы wheel dlDir := filepath.Join(tmpDir, "dl") - err = utils.EnsureTempDirWithRootOwner(dlDir, 0o775) + err = utils.EnsureTempDirWithRootOwner(dlDir, 0o2775) if err != nil { slog.Warn(gotext.Get("Unable to create download directory"), "error", err) } // Создаем каталог pkgs с правами для группы wheel pkgsDir := filepath.Join(tmpDir, "pkgs") - err = utils.EnsureTempDirWithRootOwner(pkgsDir, 0o775) + err = utils.EnsureTempDirWithRootOwner(pkgsDir, 0o2775) if err != nil { slog.Warn(gotext.Get("Unable to create packages directory"), "error", err) } @@ -158,7 +158,8 @@ func FixCmd() *cli.Command { // Проверяем, есть ли файлы в директории entries, err := os.ReadDir(tmpDir) if err == nil && len(entries) > 0 { - fixCmd := execWithPrivileges("chown", "-R", "root:wheel", tmpDir) + group := utils.GetPrivilegedGroup() + fixCmd := execWithPrivileges("chown", "-R", "root:"+group, tmpDir) if fixErr := fixCmd.Run(); fixErr != nil { slog.Warn(gotext.Get("Unable to fix file ownership"), "error", fixErr) } @@ -172,26 +173,11 @@ func FixCmd() *cli.Command { slog.Info(gotext.Get("Rebuilding cache")) - // Пробуем создать директорию кэша - err = os.MkdirAll(paths.CacheDir, 0o775) + // Создаем директорию кэша с правильными правами + slog.Info(gotext.Get("Creating cache directory")) + err = utils.EnsureTempDirWithRootOwner(paths.CacheDir, 0o2775) if err != nil { - // Если не получилось, пробуем через sudo с правильными правами для группы wheel - slog.Info(gotext.Get("Creating cache directory with sudo")) - sudoCmd := execWithPrivileges("mkdir", "-p", paths.CacheDir) - if sudoErr := sudoCmd.Run(); sudoErr != nil { - return cliutils.FormatCliExit(gotext.Get("Unable to create new cache directory"), err) - } - - // Устанавливаем права 775 и группу wheel - chmodCmd := execWithPrivileges("chmod", "775", paths.CacheDir) - if chmodErr := chmodCmd.Run(); chmodErr != nil { - return cliutils.FormatCliExit(gotext.Get("Unable to set cache directory permissions"), chmodErr) - } - - chgrpCmd := execWithPrivileges("chgrp", "wheel", paths.CacheDir) - if chgrpErr := chgrpCmd.Run(); chgrpErr != nil { - return cliutils.FormatCliExit(gotext.Get("Unable to set cache directory group"), chgrpErr) - } + return cliutils.FormatCliExit(gotext.Get("Unable to create new cache directory"), err) } deps, err = appbuilder. diff --git a/internal/db/db.go b/internal/db/db.go index 8b5e529..945a167 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -62,11 +62,9 @@ func (d *Database) Connect() error { dbDir := filepath.Dir(dsn) if _, err := os.Stat(dbDir); err != nil { if os.IsNotExist(err) { - // Директория не существует - пытаемся создать - if mkErr := os.MkdirAll(dbDir, 0775); mkErr != nil { - // Не смогли создать - вернём ошибку, пользователь должен использовать alr fix - return fmt.Errorf("cache directory does not exist, please run 'alr fix' to create it: %w", mkErr) - } + // Директория не существует - не пытаемся создать + // Пользователь должен использовать alr fix для создания системных каталогов + return fmt.Errorf("cache directory does not exist, please run 'sudo alr fix' to create it") } else { return fmt.Errorf("failed to check database directory: %w", err) } diff --git a/refresh.go b/refresh.go index 9d5782a..8808087 100644 --- a/refresh.go +++ b/refresh.go @@ -21,6 +21,7 @@ import ( "github.com/urfave/cli/v2" appbuilder "gitea.plemya-x.ru/Plemya-x/ALR/internal/cliutils/app_builder" + "gitea.plemya-x.ru/Plemya-x/ALR/internal/utils" ) func RefreshCmd() *cli.Command { @@ -29,6 +30,9 @@ func RefreshCmd() *cli.Command { Usage: gotext.Get("Pull all repositories that have changed"), Aliases: []string{"ref"}, Action: func(c *cli.Context) error { + if err := utils.CheckUserPrivileges(); err != nil { + return err + } ctx := c.Context