Apt-bundle: brew bundle for apt

Posted by sadeshmukh 4 days ago

Counter32Comment24OpenOriginal

Comments

Comment by curt15 3 hours ago

Brew got one thing right that no Linux package manager seems to emulate: it doesn't require root for normal operations and even goes so far as to error out if running as root (https://docs.brew.sh/FAQ#why-does-homebrew-say-sudo-is-bad).

Comment by matrss 22 minutes ago

Brew _is_ a linux package manager.

There is also conda/mamba/pixi/etc. (anything in the conda-forge ecosystem) that can be used without root. Then there are Guix and nix, which (mostly) require to be set up by someone with root privileges, but which then allow unprivileged users to install packages for themselves. I think I have even used emerge rootless-ly at some point a few years ago.

Comment by hiciu 2 hours ago

"let's allow any user process to modify my binaries" is not something to be proud of...

Comment by pzmarzly 2 hours ago

It needs world-writtable /opt/homebrew, so I guess a Linux equivalent would be Nix (which IIUC requires writable /nix).

For something that only uses your home folder, I recommend checking out mise https://mise.jdx.dev/

Comment by mmarx 1 hour ago

In multi-user mode, Nix uses dedicated build users to write to the store. There is also single-user mode, but that also doesn't require a world-writable store.

Comment by exploderate 2 hours ago

Or just homebrew on Linux?

Comment by WhyNotHugo 2 hours ago

apk uses a similar approach by default, and I think it's a wonderful way for a package manager to operate.

Basically, /etc/apk/world keeps a list of explicitly installed packages.

When you manually install a package, it's added to this list, when you manually remove a package, it's removed from the list.

Installation and upgrading (and "fixing) merely ensures that those packages and their dependencies are installed, no more, no less. This also automatically cleans up stale, unused dependencies.

It's a lovely way to get deterministic results. You can just back-up that world file, or copy it to another machine and get the exact same installation.

Comment by creshal 1 hour ago

apt-mark manual has allowed the same functionality in apt since forever and probably inspired apk's copy of it :)

Comment by pzmarzly 4 hours ago

Looking at internal/commands/install.go, it only installs new packages, but doesn't uninstall removed ones. That's the biggest benefit of Brew bundle gone.

BTW how much of it is vibe coded?

Comment by 3 hours ago

Comment by exploderate 2 hours ago

So, this is better than `dpkg --get-selections/--set-selections`? Oh, because it's partial?

Comment by letmeinhere 3 hours ago

aconfmgr[https://github.com/CyberShadow/aconfmgr] is a kinda similar project for pacman-based distributions.

The difference is that it strives to track all non-user files, (not just packages, and especially /etc), but you can adopt it partially.

Comment by Arrowmaster 2 hours ago

I hate the Aptfile format after looking at it.

The ppa directive hints that this is intended for Ubuntu because otherwise installing PPAs is a great way to break a non Ubuntu distro.

The deb directive uses the old and soon to be deprecated .list file extension. DEB822 format is the replacement.

The key directive adds the key as globally trusted for all repos instead of locking it to a specific repo as recommended by Debian. I think this is required under the new DEB822 repo format.

Comment by pamcake 6 hours ago

Big fan! Was like magic at first but now I have a big bunch of Aptfiles to deal with instead... Currently working on solving that with the next-generation tool apt-bundle-bunch, which has a simple declarative format to manage your apt-bundle projects in an Aptbundlefile. It's already great for agents and Im working with Claude on a curl|sh install for the v1.

Comment by Imustaskforhelp 5 hours ago

> Big fan! Was like magic at first but now I have a big bunch of Aptfiles to deal with instead... Currently working on solving that with the next-generation tool apt-bundle-bunch, which has a simple declarative format to manage your apt-bundle projects in an Aptbundlefile. It's already great for agents and Im working with Claude on a curl|sh install for the v1.

Good luck share the progress and let us know how it goes. Is it similar to nix? but from what I can feel, is intending to be simpler?

Comment by jraph 3 hours ago

This appears to be a Show HN.

Comment by jbverschoor 3 hours ago

Put in my mise.toml :)

Comment by lifetimerubyist 6 hours ago

man the things people come up with to avoid writing bash scripts

Comment by yxhuvud 5 hours ago

Given your username, do you have the same reaction to bundler?

Comment by c-hendricks 4 hours ago

What shell scripts would help here? I love me some shell scripting but always reached for debfoster before falling in love with Pac-Man's `-Qe` and `-Qt`

Edit: oh this aptfile doesn't do the one thing I actually use brew bundle for: cleaning up the mess of leftover packages

Comment by seemaze 3 hours ago

I've been loving the Alpine Package Keeper, especially easily maintaining desired packaging state in /etc/apk/world

https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper#Worl...

Comment by lifetimerubyist 3 hours ago

What is this tool solving that I can't do with apt+bash already?

Comment by c-hendricks 1 hour ago

Probably nothing other than the fact that you don't have to maintain it and have less worries about portability, like most command line utilities.

Still, can you share your script?

Comment by migmaldo 5 hours ago

I wish I could upvote this more than once.

Comment by SubiculumCode 4 hours ago

I am having a hard time seeing that the install config isn't just basically bash with some aliases...but I still haven't had my second cup of coffee.