Compare commits

...

8 Commits

Author SHA1 Message Date
Ettore Di Giacinto
972421ae81 Tag 0.17.9 2021-09-06 15:46:58 +02:00
Ettore Di Giacinto
0bd373be2b Merge pull request #252 from Itxaka/consider_provides_names_on_install
installer: Take into consideration provides names
2021-09-06 15:45:25 +02:00
Itxaka
aba89db204 installer: Take into consideration provides names
When installing a package that has a provides values, the installer only
checks the original package against the resolved package. This leads to
the requires keyword not working as expected as the solved final package
is never gonna match the name of the old/superseeded package.

This patch checks the asked-to-install package name against the list of
names that the matched name provides.

Signed-off-by: Itxaka <igarcia@suse.com>
2021-09-06 14:58:50 +02:00
Itxaka
178690842f Show the package name on uninstall error (#251)
* Show the package name on uninstall error

Currently there is a generic message of error when uninstalling if one
of the provided packages is not found in the system. This is quite
obnoxious if you are providing luet a big list to uninstall as you dont
know which package is not installed and whats preventing you from
running the uninstall command.

This pathc is a very simple change that prints the packag name along
with the error to provide more info to the end user

Signed-off-by: Itxaka <igarcia@suse.com>

* Update pkg/installer/installer.go

Co-authored-by: Ettore Di Giacinto <mudler@users.noreply.github.com>

Co-authored-by: Ettore Di Giacinto <mudler@users.noreply.github.com>
2021-08-26 14:45:19 +02:00
Ettore Di Giacinto
58f4997a0f Makefile: multiarch-build should only build 2021-08-19 16:41:27 +02:00
Ettore Di Giacinto
5bb65e5b30 Get goreleaser from GH actions 2021-08-19 16:22:20 +02:00
Ettore Di Giacinto
4e918e6bd1 ci: fixup getting goreleaser before build 2021-08-19 11:53:59 +02:00
Daniele Rondina
0f545952cd cmd/config: simplify code (#246) 2021-08-11 16:26:34 +02:00
9 changed files with 59 additions and 134 deletions

View File

@@ -46,6 +46,10 @@ jobs:
sudo apt-get install -y upx && sudo -E env "PATH=$PATH" make deps sudo apt-get install -y upx && sudo -E env "PATH=$PATH" make deps
sudo curl -fSL "https://github.com/genuinetools/img/releases/download/v0.5.11/img-linux-amd64" -o "/usr/bin/img" sudo curl -fSL "https://github.com/genuinetools/img/releases/download/v0.5.11/img-linux-amd64" -o "/usr/bin/img"
sudo chmod a+x "/usr/bin/img" sudo chmod a+x "/usr/bin/img"
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
install-only: true
- name: Build - name: Build
run: sudo -E env "PATH=$PATH" make multiarch-build-small run: sudo -E env "PATH=$PATH" make multiarch-build-small
- name: Tests - name: Tests

View File

@@ -58,6 +58,10 @@ jobs:
sudo apt-get install -y upx && sudo -E env "PATH=$PATH" make deps sudo apt-get install -y upx && sudo -E env "PATH=$PATH" make deps
sudo curl -fSL "https://github.com/genuinetools/img/releases/download/v0.5.11/img-linux-amd64" -o "/usr/bin/img" sudo curl -fSL "https://github.com/genuinetools/img/releases/download/v0.5.11/img-linux-amd64" -o "/usr/bin/img"
sudo chmod a+x "/usr/bin/img" sudo chmod a+x "/usr/bin/img"
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
install-only: true
- name: Build test - name: Build test
run: sudo -E env "PATH=$PATH" make multiarch-build-small run: sudo -E env "PATH=$PATH" make multiarch-build-small
- name: Tests - name: Tests

View File

@@ -85,11 +85,10 @@ test-docker:
bash -c "make test" bash -c "make test"
multiarch-build: multiarch-build:
GO111MODULE=on go get -u github.com/goreleaser/goreleaser goreleaser build --snapshot --rm-dist
goreleaser release --auto-snapshot --skip-publish --rm-dist
multiarch-build-small: multiarch-build-small:
@$(MAKE) multiarch-build @$(MAKE) multiarch-build
for file in $(ROOT_DIR)/release/**/* ; do \ for file in $(ROOT_DIR)/release/**/* ; do \
upx --brute -1 $${file} ; \ upx --brute -1 $${file} ; \
done done

View File

@@ -19,7 +19,7 @@ import (
"fmt" "fmt"
config "github.com/mudler/luet/pkg/config" config "github.com/mudler/luet/pkg/config"
installer "github.com/mudler/luet/pkg/installer" . "github.com/mudler/luet/pkg/logger"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@@ -30,46 +30,12 @@ var configCmd = &cobra.Command{
Long: `Show luet configuration`, Long: `Show luet configuration`,
Aliases: []string{"c"}, Aliases: []string{"c"},
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
fmt.Println(config.LuetCfg.GetLogging()) data, err := config.LuetCfg.YAML()
fmt.Println(config.LuetCfg.GetGeneral()) if err != nil {
fmt.Println(config.LuetCfg.GetSystem()) Fatal(err.Error())
if len(config.LuetCfg.CacheRepositories) > 0 {
fmt.Println("repetitors:")
for _, r := range config.LuetCfg.CacheRepositories {
fmt.Println(" - ", r.String())
}
}
if len(config.LuetCfg.SystemRepositories) > 0 {
fmt.Println("repositories:")
for _, r := range config.LuetCfg.SystemRepositories {
fmt.Println(" - ", r.String())
}
} }
if len(config.LuetCfg.RepositoriesConfDir) > 0 { fmt.Println(string(data))
fmt.Println("repos_confdir:")
for _, dir := range config.LuetCfg.RepositoriesConfDir {
fmt.Println(" - ", dir)
}
}
if len(config.LuetCfg.ConfigProtectConfDir) > 0 {
// Load config protect configs
installer.LoadConfigProtectConfs(config.LuetCfg)
fmt.Println("config_protect_confdir:")
for _, dir := range config.LuetCfg.ConfigProtectConfDir {
fmt.Println(" - ", dir)
}
if len(config.LuetCfg.GetConfigProtectConfFiles()) > 0 {
fmt.Println("protect_conf_files:")
for _, file := range config.LuetCfg.GetConfigProtectConfFiles() {
fmt.Println(" - ", file.String())
}
}
}
}, },
} }

View File

@@ -41,7 +41,7 @@ var Verbose bool
var LockedCommands = []string{"install", "uninstall", "upgrade"} var LockedCommands = []string{"install", "uninstall", "upgrade"}
const ( const (
LuetCLIVersion = "0.17.8" LuetCLIVersion = "0.17.9"
LuetEnvPrefix = "LUET" LuetEnvPrefix = "LUET"
license = ` license = `
Luet Copyright (C) 2019-2021 Ettore Di Giacinto Luet Copyright (C) 2019-2021 Ettore Di Giacinto

View File

@@ -58,7 +58,7 @@ var upgradeCmd = &cobra.Command{
downloadOnly, _ := cmd.Flags().GetBool("download-only") downloadOnly, _ := cmd.Flags().GetBool("download-only")
util.SetSystemConfig() util.SetSystemConfig()
util.SetSolverConfig() opts := util.SetSolverConfig()
if concurrent { if concurrent {
LuetCfg.GetSolverOptions().Implementation = solver.ParallelSimple LuetCfg.GetSolverOptions().Implementation = solver.ParallelSimple
@@ -66,7 +66,7 @@ var upgradeCmd = &cobra.Command{
LuetCfg.GetSolverOptions().Implementation = solver.SingleCoreSimple LuetCfg.GetSolverOptions().Implementation = solver.SingleCoreSimple
} }
Debug("Solver", LuetCfg.GetSolverOptions().String()) Debug("Solver", opts.CompactString())
// Load config protect configs // Load config protect configs
installer.LoadConfigProtectConfs(LuetCfg) installer.LoadConfigProtectConfs(LuetCfg)

View File

@@ -26,14 +26,13 @@ import (
"strings" "strings"
"time" "time"
"github.com/pkg/errors"
fileHelper "github.com/mudler/luet/pkg/helpers/file" fileHelper "github.com/mudler/luet/pkg/helpers/file"
pkg "github.com/mudler/luet/pkg/package" pkg "github.com/mudler/luet/pkg/package"
solver "github.com/mudler/luet/pkg/solver" solver "github.com/mudler/luet/pkg/solver"
"github.com/pkg/errors"
v "github.com/spf13/viper" v "github.com/spf13/viper"
"gopkg.in/yaml.v2"
) )
var LuetCfg = NewLuetConfig(v.GetViper()) var LuetCfg = NewLuetConfig(v.GetViper())
@@ -57,22 +56,22 @@ type LuetLoggingConfig struct {
} }
type LuetGeneralConfig struct { type LuetGeneralConfig struct {
SameOwner bool `mapstructure:"same_owner"` SameOwner bool `yaml:"same_owner,omitempty" mapstructure:"same_owner"`
Concurrency int `mapstructure:"concurrency"` Concurrency int `yaml:"concurrency,omitempty" mapstructure:"concurrency"`
Debug bool `mapstructure:"debug"` Debug bool `yaml:"debug,omitempty" mapstructure:"debug"`
ShowBuildOutput bool `mapstructure:"show_build_output"` ShowBuildOutput bool `yaml:"show_build_output,omitempty" mapstructure:"show_build_output"`
SpinnerMs int `mapstructure:"spinner_ms"` SpinnerMs int `yaml:"spinner_ms,omitempty" mapstructure:"spinner_ms"`
SpinnerCharset int `mapstructure:"spinner_charset"` SpinnerCharset int `yaml:"spinner_charset,omitempty" mapstructure:"spinner_charset"`
FatalWarns bool `mapstructure:"fatal_warnings"` FatalWarns bool `yaml:"fatal_warnings,omitempty" mapstructure:"fatal_warnings"`
} }
type LuetSolverOptions struct { type LuetSolverOptions struct {
solver.Options solver.Options `yaml:"options,omitempty"`
Type string `mapstructure:"type"` Type string `yaml:"type,omitempty" mapstructure:"type"`
LearnRate float32 `mapstructure:"rate"` LearnRate float32 `yaml:"rate,omitempty" mapstructure:"rate"`
Discount float32 `mapstructure:"discount"` Discount float32 `yaml:"discount,omitempty" mapstructure:"discount"`
MaxAttempts int `mapstructure:"max_attempts"` MaxAttempts int `yaml:"max_attempts,omitempty" mapstructure:"max_attempts"`
Implementation solver.SolverType `mapstructure:"implementation"` Implementation solver.SolverType `yaml:"implementation,omitempty" mapstructure:"implementation"`
} }
func (opts LuetSolverOptions) ResolverIsSet() bool { func (opts LuetSolverOptions) ResolverIsSet() bool {
@@ -179,9 +178,9 @@ type LuetRepository struct {
// Serialized options not used in repository configuration // Serialized options not used in repository configuration
// Incremented value that identify revision of the repository in a user-friendly way. // Incremented value that identify revision of the repository in a user-friendly way.
Revision int `json:"revision,omitempty" yaml:"-,omitempty" mapstructure:"-,omitempty"` Revision int `json:"revision,omitempty" yaml:"-" mapstructure:"-"`
// Epoch time in seconds // Epoch time in seconds
LastUpdate string `json:"last_update,omitempty" yaml:"-,omitempty" mapstructure:"-,omitempty"` LastUpdate string `json:"last_update,omitempty" yaml:"-" mapstructure:"-"`
} }
func NewLuetRepository(name, t, descr string, urls []string, priority int, enable, cached bool) *LuetRepository { func NewLuetRepository(name, t, descr string, urls []string, priority int, enable, cached bool) *LuetRepository {
@@ -227,23 +226,23 @@ type LuetKV struct {
} }
type LuetConfig struct { type LuetConfig struct {
Viper *v.Viper Viper *v.Viper `yaml:"-"`
Logging LuetLoggingConfig `mapstructure:"logging"` Logging LuetLoggingConfig `yaml:"logging,omitempty" mapstructure:"logging"`
General LuetGeneralConfig `mapstructure:"general"` General LuetGeneralConfig `yaml:"general,omitempty" mapstructure:"general"`
System LuetSystemConfig `mapstructure:"system"` System LuetSystemConfig `yaml:"system" mapstructure:"system"`
Solver LuetSolverOptions `mapstructure:"solver"` Solver LuetSolverOptions `yaml:"solver,omitempty" mapstructure:"solver"`
RepositoriesConfDir []string `mapstructure:"repos_confdir"` RepositoriesConfDir []string `yaml:"repos_confdir,omitempty" mapstructure:"repos_confdir"`
ConfigProtectConfDir []string `mapstructure:"config_protect_confdir"` ConfigProtectConfDir []string `yaml:"config_protect_confdir,omitempty" mapstructure:"config_protect_confdir"`
ConfigProtectSkip bool `mapstructure:"config_protect_skip"` ConfigProtectSkip bool `yaml:"config_protect_skip,omitempty" mapstructure:"config_protect_skip"`
ConfigFromHost bool `mapstructure:"config_from_host"` ConfigFromHost bool `yaml:"config_from_host,omitempty" mapstructure:"config_from_host"`
CacheRepositories []LuetRepository `mapstructure:"repetitors"` CacheRepositories []LuetRepository `yaml:"repetitors,omitempty" mapstructure:"repetitors"`
SystemRepositories []LuetRepository `mapstructure:"repositories"` SystemRepositories []LuetRepository `yaml:"repositories,omitempty" mapstructure:"repositories"`
FinalizerEnvs []LuetKV `json:"finalizer_envs,omitempty" yaml:"finalizer_envs,omitempty" mapstructure:"finalizer_envs,omitempty"` FinalizerEnvs []LuetKV `json:"finalizer_envs,omitempty" yaml:"finalizer_envs,omitempty" mapstructure:"finalizer_envs,omitempty"`
ConfigProtectConfFiles []ConfigProtectConfFile ConfigProtectConfFiles []ConfigProtectConfFile `yaml:"-" mapstructure:"-"`
} }
func NewLuetConfig(viper *v.Viper) *LuetConfig { func NewLuetConfig(viper *v.Viper) *LuetConfig {
@@ -381,6 +380,10 @@ func (c *LuetConfig) GetSolverOptions() *LuetSolverOptions {
return &c.Solver return &c.Solver
} }
func (c *LuetConfig) YAML() ([]byte, error) {
return yaml.Marshal(c)
}
func (c *LuetConfig) GetConfigProtectConfFiles() []ConfigProtectConfFile { func (c *LuetConfig) GetConfigProtectConfFiles() []ConfigProtectConfFile {
return c.ConfigProtectConfFiles return c.ConfigProtectConfFiles
} }
@@ -409,34 +412,6 @@ func (c *LuetConfig) GetSystemRepository(name string) (*LuetRepository, error) {
return ans, nil return ans, nil
} }
func (c *LuetSolverOptions) String() string {
ans := fmt.Sprintf(`
solver:
type: %s
rate: %f
discount: %f
max_attempts: %d`, c.Type, c.LearnRate, c.Discount,
c.MaxAttempts)
return ans
}
func (c *LuetGeneralConfig) String() string {
ans := fmt.Sprintf(`
general:
concurrency: %d
same_owner: %t
debug: %t
fatal_warnings: %t
show_build_output: %t
spinner_ms: %d
spinner_charset: %d`, c.Concurrency, c.SameOwner, c.Debug,
c.FatalWarns, c.ShowBuildOutput,
c.SpinnerMs, c.SpinnerCharset)
return ans
}
func (c *LuetGeneralConfig) GetSpinnerMs() time.Duration { func (c *LuetGeneralConfig) GetSpinnerMs() time.Duration {
duration, err := time.ParseDuration(fmt.Sprintf("%dms", c.SpinnerMs)) duration, err := time.ParseDuration(fmt.Sprintf("%dms", c.SpinnerMs))
if err != nil { if err != nil {
@@ -449,34 +424,6 @@ func (c *LuetLoggingConfig) SetLogLevel(s string) {
c.Level = s c.Level = s
} }
func (c *LuetLoggingConfig) String() string {
ans := fmt.Sprintf(`
logging:
enable_logfile: %t
path: %s
json_format: %t
color: %t
enable_emoji: %t
level: %s`, c.EnableLogFile, c.Path, c.JsonFormat,
c.Color, c.EnableEmoji, c.Level)
return ans
}
func (c *LuetSystemConfig) String() string {
ans := fmt.Sprintf(`
system:
database_engine: %s
database_path: %s
pkgs_cache_path: %s
tmpdir_base: %s
rootfs: %s`,
c.DatabaseEngine, c.DatabasePath, c.PkgsCachePath,
c.TmpDirBase, c.Rootfs)
return ans
}
func (c *LuetSystemConfig) InitTmpDir() error { func (c *LuetSystemConfig) InitTmpDir() error {
if !filepath.IsAbs(c.TmpDirBase) { if !filepath.IsAbs(c.TmpDirBase) {
abs, err := fileHelper.Rel2Abs(c.TmpDirBase) abs, err := fileHelper.Rel2Abs(c.TmpDirBase)

View File

@@ -551,6 +551,11 @@ func (l *LuetInstaller) Install(cp pkg.Packages, s *System) error {
if m.Package.GetName() == p.GetName() { if m.Package.GetName() == p.GetName() {
found = true found = true
} }
for _, pack := range m.Package.GetProvides() {
if pack.GetName() == p.GetName() {
found = true
}
}
} }
if !found { if !found {
@@ -1133,7 +1138,7 @@ func (l *LuetInstaller) computeUninstall(o Option, s *System, packs ...pkg.Packa
func (l *LuetInstaller) generateUninstallFn(o Option, s *System, packs ...pkg.Package) (pkg.Packages, func() error, error) { func (l *LuetInstaller) generateUninstallFn(o Option, s *System, packs ...pkg.Package) (pkg.Packages, func() error, error) {
for _, p := range packs { for _, p := range packs {
if packs, _ := s.Database.FindPackages(p); len(packs) == 0 { if packs, _ := s.Database.FindPackages(p); len(packs) == 0 {
return nil, nil, errors.New("Package not found in the system") return nil, nil, errors.New(fmt.Sprintf("Package %s not found in the system", p.HumanReadableString()))
} }
} }

View File

@@ -64,8 +64,8 @@ type Solver struct {
} }
type Options struct { type Options struct {
Type SolverType Type SolverType `yaml:"type,omitempty"`
Concurrency int Concurrency int `yaml:"concurrency,omitempty"`
} }
// NewSolver accepts as argument two lists of packages, the first is the initial set, // NewSolver accepts as argument two lists of packages, the first is the initial set,