mirror of
https://github.com/mudler/luet.git
synced 2025-09-05 17:20:29 +00:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dcc5aae3cd | ||
|
99bf9e291d | ||
|
f1604c3b6f | ||
|
5b5735266a | ||
|
984366d3a5 |
@@ -38,7 +38,7 @@ var Verbose bool
|
|||||||
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
var LockedCommands = []string{"install", "uninstall", "upgrade"}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
LuetCLIVersion = "0.8.12"
|
LuetCLIVersion = "0.8.13"
|
||||||
LuetEnvPrefix = "LUET"
|
LuetEnvPrefix = "LUET"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
33
contrib/config/get_luet_root.sh
Executable file
33
contrib/config/get_luet_root.sh
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
export LUET_NOLOCK=true
|
||||||
|
|
||||||
|
LUET_VERSION=0.8.6
|
||||||
|
LUET_ROOTFS=${LUET_ROOTFS:-/}
|
||||||
|
LUET_DATABASE_PATH=${LUET_DATABASE_PATH:-/}
|
||||||
|
LUET_DATABASE_ENGINE=${LUET_DATABASE_ENGINE:-boltdb}
|
||||||
|
LUET_CONFIG_PROTECT=${LUET_CONFIG_PROTECT:-0}
|
||||||
|
|
||||||
|
wget -q https://github.com/mudler/luet/releases/download/0.8.6/luet-0.8.6-linux-amd64 -O luet
|
||||||
|
chmod +x luet
|
||||||
|
|
||||||
|
mkdir -p /etc/luet/repos.conf.d || true
|
||||||
|
if [ "${LUET_CONFIG_PROTECT}" = "1" ] ; then
|
||||||
|
mkdir -p /etc/luet/config.protect.d || true
|
||||||
|
wget -q https://raw.githubusercontent.com/mudler/luet/master/contrib/config/config.protect.d/01_etc.yml.example -O /etc/luet/config.protect.d/01_etc.yml
|
||||||
|
fi
|
||||||
|
wget -q https://raw.githubusercontent.com/mocaccinoOS/repository-index/master/packages/mocaccino-repository-index/mocaccino-repository-index.yml -O /etc/luet/repos.conf.d/mocaccino-repository-index.yml
|
||||||
|
|
||||||
|
cat > /etc/luet/luet.yaml <<EOF
|
||||||
|
general:
|
||||||
|
debug: false
|
||||||
|
system:
|
||||||
|
rootfs: ${LUET_ROOTFS}
|
||||||
|
database_path: "${LUET_DATABASE_PATH}"
|
||||||
|
database_engine: "${LUET_DATABASE_ENGINE}"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
./luet install repository/luet repository/mocaccino-repository-index
|
||||||
|
./luet install system/luet system/luet-extensions
|
||||||
|
|
||||||
|
rm -rf luet
|
@@ -627,18 +627,22 @@ func (l *LuetInstaller) uninstall(p pkg.Package, s *System) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
fi, err := os.Stat(target)
|
fi, err := os.Lstat(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Warning("Failed removing file (not present in the system target ?)", target, err.Error())
|
Warning("File not present in the system target ?", target, err.Error())
|
||||||
|
if err = os.Remove(target); err != nil {
|
||||||
|
Warning("Failed removing file", target, err.Error())
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
switch mode := fi.Mode(); {
|
switch mode := fi.Mode(); {
|
||||||
case mode.IsDir():
|
case mode.IsDir():
|
||||||
files, err := ioutil.ReadDir(target)
|
files, err := ioutil.ReadDir(target)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
Warning("Failed reading target", target, err.Error())
|
Warning("Failed reading folder", target, err.Error())
|
||||||
}
|
}
|
||||||
if len(files) != 0 {
|
if len(files) != 0 {
|
||||||
|
Warning("Preserving not-empty folder", target, err.Error())
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -374,6 +374,11 @@ func (db *BoltDatabase) FindPackages(p Package) (Packages, error) {
|
|||||||
|
|
||||||
// FindPackageVersions return the list of the packages beloging to cat/name
|
// FindPackageVersions return the list of the packages beloging to cat/name
|
||||||
func (db *BoltDatabase) FindPackageVersions(p Package) (Packages, error) {
|
func (db *BoltDatabase) FindPackageVersions(p Package) (Packages, error) {
|
||||||
|
// Provides: Treat as the replaced package here
|
||||||
|
if provided, err := db.getProvide(p); err == nil {
|
||||||
|
p = provided
|
||||||
|
}
|
||||||
|
|
||||||
var versionsInWorld []Package
|
var versionsInWorld []Package
|
||||||
for _, w := range db.World() {
|
for _, w := range db.World() {
|
||||||
if w.GetName() != p.GetName() || w.GetCategory() != p.GetCategory() {
|
if w.GetName() != p.GetName() || w.GetCategory() != p.GetCategory() {
|
||||||
|
@@ -225,6 +225,11 @@ func (db *InMemoryDatabase) FindPackage(p Package) (Package, error) {
|
|||||||
|
|
||||||
// FindPackages return the list of the packages beloging to cat/name
|
// FindPackages return the list of the packages beloging to cat/name
|
||||||
func (db *InMemoryDatabase) FindPackageVersions(p Package) (Packages, error) {
|
func (db *InMemoryDatabase) FindPackageVersions(p Package) (Packages, error) {
|
||||||
|
// Provides: Treat as the replaced package here
|
||||||
|
if provided, err := db.getProvide(p); err == nil {
|
||||||
|
p = provided
|
||||||
|
}
|
||||||
|
|
||||||
versions, ok := db.CacheNoVersion[p.GetPackageName()]
|
versions, ok := db.CacheNoVersion[p.GetPackageName()]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.New("No versions found for package")
|
return nil, errors.New("No versions found for package")
|
||||||
|
@@ -556,10 +556,11 @@ func (s *Parallel) Upgrade(checkconflicts, full bool) (pkg.Packages, PackagesAss
|
|||||||
|
|
||||||
toUninstall := pkg.Packages{}
|
toUninstall := pkg.Packages{}
|
||||||
toInstall := pkg.Packages{}
|
toInstall := pkg.Packages{}
|
||||||
availableCache := map[string]pkg.Packages{}
|
|
||||||
|
// we do this in memory so we take into account of provides
|
||||||
|
universe := pkg.NewInMemoryDatabase(false)
|
||||||
for _, p := range s.DefinitionDatabase.World() {
|
for _, p := range s.DefinitionDatabase.World() {
|
||||||
// Each one, should be expanded
|
universe.CreatePackage(p)
|
||||||
availableCache[p.GetName()+p.GetCategory()] = append(availableCache[p.GetName()+p.GetCategory()], p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
installedcopy := pkg.NewInMemoryDatabase(false)
|
installedcopy := pkg.NewInMemoryDatabase(false)
|
||||||
@@ -575,10 +576,10 @@ func (s *Parallel) Upgrade(checkconflicts, full bool) (pkg.Packages, PackagesAss
|
|||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
for p := range c {
|
for p := range c {
|
||||||
installedcopy.CreatePackage(p)
|
installedcopy.CreatePackage(p)
|
||||||
packages, ok := availableCache[p.GetName()+p.GetCategory()]
|
packages, err := universe.FindPackageVersions(p)
|
||||||
if ok && len(packages) != 0 {
|
if err == nil && len(packages) != 0 {
|
||||||
best := packages.Best(nil)
|
best := packages.Best(nil)
|
||||||
if best.GetVersion() != p.GetVersion() {
|
if !best.Matches(p) {
|
||||||
results <- []pkg.Package{p, best}
|
results <- []pkg.Package{p, best}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -489,20 +489,20 @@ func (s *Solver) Upgrade(checkconflicts, full bool) (pkg.Packages, PackagesAsser
|
|||||||
toUninstall := pkg.Packages{}
|
toUninstall := pkg.Packages{}
|
||||||
toInstall := pkg.Packages{}
|
toInstall := pkg.Packages{}
|
||||||
|
|
||||||
availableCache := map[string]pkg.Packages{}
|
// we do this in memory so we take into account of provides
|
||||||
|
universe := pkg.NewInMemoryDatabase(false)
|
||||||
for _, p := range s.DefinitionDatabase.World() {
|
for _, p := range s.DefinitionDatabase.World() {
|
||||||
// Each one, should be expanded
|
universe.CreatePackage(p)
|
||||||
availableCache[p.GetName()+p.GetCategory()] = append(availableCache[p.GetName()+p.GetCategory()], p)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
installedcopy := pkg.NewInMemoryDatabase(false)
|
installedcopy := pkg.NewInMemoryDatabase(false)
|
||||||
|
|
||||||
for _, p := range s.InstalledDatabase.World() {
|
for _, p := range s.InstalledDatabase.World() {
|
||||||
installedcopy.CreatePackage(p)
|
installedcopy.CreatePackage(p)
|
||||||
packages, ok := availableCache[p.GetName()+p.GetCategory()]
|
packages, err := universe.FindPackageVersions(p)
|
||||||
if ok && len(packages) != 0 {
|
if err == nil && len(packages) != 0 {
|
||||||
best := packages.Best(nil)
|
best := packages.Best(nil)
|
||||||
if best.GetVersion() != p.GetVersion() {
|
if !best.Matches(p) {
|
||||||
toUninstall = append(toUninstall, p)
|
toUninstall = append(toUninstall, p)
|
||||||
toInstall = append(toInstall, best)
|
toInstall = append(toInstall, best)
|
||||||
}
|
}
|
||||||
|
@@ -1209,7 +1209,6 @@ var _ = Describe("Solver", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
Context("Upgrades", func() {
|
Context("Upgrades", func() {
|
||||||
|
|
||||||
C := pkg.NewPackage("c", "1.5", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "a", Version: ">=1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
C := pkg.NewPackage("c", "1.5", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "a", Version: ">=1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
||||||
C.SetCategory("test")
|
C.SetCategory("test")
|
||||||
B := pkg.NewPackage("b", "1.0", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
B := pkg.NewPackage("b", "1.0", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
@@ -1219,6 +1218,17 @@ var _ = Describe("Solver", func() {
|
|||||||
A1 := pkg.NewPackage("a", "1.2", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "b", Version: "1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
A1 := pkg.NewPackage("a", "1.2", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "b", Version: "1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
||||||
A1.SetCategory("test")
|
A1.SetCategory("test")
|
||||||
|
|
||||||
|
BeforeEach(func() {
|
||||||
|
C = pkg.NewPackage("c", "1.5", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "a", Version: ">=1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
||||||
|
C.SetCategory("test")
|
||||||
|
B = pkg.NewPackage("b", "1.0", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||||
|
B.SetCategory("test")
|
||||||
|
A = pkg.NewPackage("a", "1.1", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "b", Version: "1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
||||||
|
A.SetCategory("test")
|
||||||
|
A1 = pkg.NewPackage("a", "1.2", []*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "b", Version: "1.0", Category: "test"}}, []*pkg.DefaultPackage{})
|
||||||
|
A1.SetCategory("test")
|
||||||
|
})
|
||||||
|
|
||||||
It("upgrades correctly", func() {
|
It("upgrades correctly", func() {
|
||||||
for _, p := range []pkg.Package{A1, B, C} {
|
for _, p := range []pkg.Package{A1, B, C} {
|
||||||
_, err := dbDefinitions.CreatePackage(p)
|
_, err := dbDefinitions.CreatePackage(p)
|
||||||
@@ -1240,7 +1250,31 @@ var _ = Describe("Solver", func() {
|
|||||||
Expect(solution).To(ContainElement(PackageAssert{Package: B, Value: true}))
|
Expect(solution).To(ContainElement(PackageAssert{Package: B, Value: true}))
|
||||||
Expect(solution).To(ContainElement(PackageAssert{Package: C, Value: false}))
|
Expect(solution).To(ContainElement(PackageAssert{Package: C, Value: false}))
|
||||||
Expect(len(solution)).To(Equal(3))
|
Expect(len(solution)).To(Equal(3))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("upgrades correctly with provides", func() {
|
||||||
|
B.SetProvides([]*pkg.DefaultPackage{&pkg.DefaultPackage{Name: "a", Version: ">=0", Category: "test"}, &pkg.DefaultPackage{Name: "c", Version: ">=0", Category: "test"}})
|
||||||
|
|
||||||
|
for _, p := range []pkg.Package{A1, B} {
|
||||||
|
_, err := dbDefinitions.CreatePackage(p)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, p := range []pkg.Package{A, C} {
|
||||||
|
_, err := dbInstalled.CreatePackage(p)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
}
|
||||||
|
uninstall, solution, err := s.Upgrade(true, true)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
||||||
|
Expect(len(uninstall)).To(Equal(2))
|
||||||
|
Expect(uninstall[1].GetName()).To(Equal("c"))
|
||||||
|
Expect(uninstall[1].GetVersion()).To(Equal("1.5"))
|
||||||
|
Expect(uninstall[0].GetName()).To(Equal("a"))
|
||||||
|
Expect(uninstall[0].GetVersion()).To(Equal("1.1"))
|
||||||
|
|
||||||
|
Expect(solution).To(ContainElement(PackageAssert{Package: B, Value: true}))
|
||||||
|
Expect(len(solution)).To(Equal(1))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("UpgradeUniverse upgrades correctly", func() {
|
It("UpgradeUniverse upgrades correctly", func() {
|
||||||
|
Reference in New Issue
Block a user