There is a really cool (meta) package manager I wrote. Usually you are kind of bound to specific package managers depending on your Linux distribution of choice. With ZPKG you can just use any package manager on any Linux distribution. It is still alpha/beta but already works fairly well. Let's take a look.
Let's take the exemplary use case that you are on Ubuntu Linux and want to do some quick image editing with Gimp. You totally could install that with
snap, for example:
apt-get install gimp
While that is the "official" way of doing that and apt does a fairly good job, there are still some things I don't like so much.
- You have to use the root user. I personally try to avoid that.
- The package integrates into the system and e.G. creates new users, installs services, configuration files etc. That could be desired, but causes "bloat" on the whole system.
- Ubuntu packages are stable, but sometimes a little outdated (imho) in comparison to other distributions.
- I find apt slow in comparison to e.G.
apkfrom alpine. Big packages can take up quite some time.
So what I do in that specific use case of just quickly wanting Gimp to edit an image or so without putting too much weight on my global system installation, is to use ZPKG. Let's takes a look:
zpkg add gimp --from alpine:edge --apk gimp
Or a shorter less explicit invocation
zpkg add -A gimp
Make sure you have this directory in your PATH:
And voilà you can type gimp in any terminal in order to use it. Interestingly the whole installation is on your home folder and completely independent from the Linux Distribution or it's libc implementation. So you could do things like share your home folder across multiple Linux Distributions and still use the same programs.
Another thing that I think is pretty nice, is that with zpkg you can also package other packages. Let me explain:
$ zpkg package gimp gimp.zpkg # that is the "gimp" we just installed Install package locally: tar -xf gimp.zpkg -C ~/.local Install package globally: tar -xf gimp.zpkg -C /usr/local
ZPKG itself is distributed as a zpkg package, so this is how to actually install it:
curl -Lf https://github.com/ihucos/zpkg/releases/download/0.2.4/zpkg.zpkg | tar -xJf - -C ~/.local
So in other words, with ZPKG you can also create packages, that are completely distribution agnostic.
Of course you can also do stuff like upgrading installed packages, removing them, and so on. Check it out :-)
The implementation details include overlay filesystem, user namespaces, hard links and other interesting topics that I will hopefully follow up on more posts :-)