forked from Plemya-x/ALR
		
	wip
This commit is contained in:
		| @@ -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
									
									
									
									
									
								
							
							
						
						
									
										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 | ||||
| 		}, | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										17
									
								
								internal.go
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								internal.go
									
									
									
									
									
								
							| @@ -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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user