1
0
mirror of https://github.com/mudler/luet.git synced 2025-05-08 00:06:26 +00:00
📦 🐳 0-dependency Container-based Package Manager
Go to file
Ettore Di Giacinto 1d5ce53443
Add luet box command
It adds only the 'exec' subcommand to spawn processes in custom boxes

Relates to 
2020-04-18 11:43:14 +02:00
cmd Add luet box command 2020-04-18 11:43:14 +02:00
contrib/config 💥 Refactor and split repository.yaml file 2020-03-24 00:05:16 +01:00
pkg Consume our moby fork 2020-04-18 11:41:34 +02:00
scripts Tweak ginkgo parameters 2020-03-22 22:07:46 +01:00
tests Allow to finalizer to specify entrypoint command 2020-04-14 17:46:39 +02:00
vendor Update vendor 2020-04-18 11:42:34 +02:00
.gitignore Add integration tests 2019-12-31 15:22:11 +01:00
.travis.yml Make test-coverage in one step, deploy release only on tags 2020-03-22 10:55:04 +01:00
Dockerfile Add ca cert to scratch image 2019-12-03 16:29:13 +01:00
go.mod Consume our moby fork 2020-04-18 11:41:34 +02:00
go.sum Consume our moby fork 2020-04-18 11:41:34 +02:00
LICENSE Add copy of LICENSE 2019-11-04 11:01:41 +01:00
main.go Add cmd/ and main.go 2019-10-31 12:38:58 +01:00
Makefile Annotate git hash and time in displayed version 2020-04-12 14:37:49 +02:00
README.md Add quay.io badge 2020-04-13 18:11:02 +02:00

luet - Container-based Package manager

Docker Repository on Quay Go Report Card Build Status GoDoc codecov

Luet is a multi-platform Package Manager based off from containers - it uses Docker (and other tech) to sandbox your builds and generate packages from them. It has zero dependencies and it is well suitable for "from scratch" environments. It can also version entire rootfs and enables delivery of OTA-alike updates, making it a perfect fit for the Edge computing era and IoT embedded devices.

It offers a simple specfile format in YAML notation to define both packages and rootfs. As it is based on containers, it can be used to build seed stages for Linux From Scratch installations and it can build and track updates for those systems.

It is written entirely in Golang and where used as package manager, it can run in from scratch environment, with zero dependencies.

In a glance

  • Luet can reuse Gentoo's portage tree hierarchy, and it is heavily inspired from it.
  • It builds, installs, uninstalls and perform upgrades on machines
  • Installer doesn't depend on anything ( 0 dep installer !), statically built
  • Support for packages as "layers"
  • It uses SAT solving techniques to solve the deptree ( Inspired by OPIUM )

Install

To install luet, you can grab a release on the Release page or compile it in your machine (requires Golang installed):

$ git clone https://github.com/mudler/luet.git
$ cd luet
$ make build

Status

Luet is not feature-complete yet, it can build, install/uninstall/upgrade packages - but it doesn't support yet all the features you would normally expect from a Package Manager nowadays.

Dependency solving

Luet uses SAT and Reinforcement learning engine for dependency solving. It encodes the package requirements into a SAT problem, using gophersat to solve the dependency tree and give a concrete model as result.

SAT encoding

Each package and its constraints are encoded and built around OPIUM. Additionally, Luet treats also selectors seamlessly while building the model, adding ALO ( At least one ) and AMO ( At most one ) rules to guarantee coherence within the installed system.

Reinforcement learning

Luet also implements a small and portable qlearning agent that will try to solve conflict on your behalf when they arises while trying to validate your queries against the system model.

To leverage it, simply pass --solver-type qlearning to the subcommands that supports it ( you can check out by invoking --help ).

Documentation

Documentation is available, or run luet --help, any subcommand is documented as well, try e.g.: luet build --help.

Authors

Luet is here thanks to our amazing contributors!.

Luet was originally created by Ettore Di Giacinto, mudler@sabayon.org, mudler@gentoo.org.

License

Luet is distributed under the terms of GPLv3, check out the LICENSE file.