this post was submitted on 10 Aug 2024
70 points (100.0% liked)

Linux

48338 readers
444 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

I'm looking for interesting tools to automate managing packaging and configuring everything automated.

And yeah I know about NixOS but I like to distro hop and experiment so I for now know these:

  • Ansible - automating many machines, using different package names as vars and package managers.
  • Bash - the most native and compatible scripting language that can be.
  • Chezmoi - for dotfiles.

For now that's it. I'm looking forward for your suggestions!

all 50 comments
sorted by: hot top controversial new old
[–] [email protected] 21 points 3 months ago (2 children)

Nix, the package manager, is distro-agnostic. Add Home Manager on top of it and you're good to go; both packages and dotfiles are dealt with.

[–] [email protected] 14 points 3 months ago (1 children)

I do this in combination with Nix-Darwin for one of my machines. I also have some Kubernetes clusters and RISC-V machines running bare metal executables using NixOS-Anywhere and some other stuff.

[–] [email protected] 3 points 3 months ago

That does not sound like some basic stuff though. 😆

[–] [email protected] 3 points 3 months ago

Hm I see, thanks. A good one when you have it installed on every machine.

[–] [email protected] 17 points 3 months ago (1 children)

And yeah I know about NixOS but I like to distro hop and experiment

If you know about NixOS, then you probably know this, but Nix, the package manager/the language behind NixOS, is cross-platform.

I daily drive NixOS, but I also use Nix (and home-manager) on my Fedora music laptop, my Ubuntu home file-server, and my work Windows machine (WSL) to install and configure neovim automatically instead of copying a config, installing all the packages, and running check health over and over again until everything is set up.

I just copy my neovim.nix file over (also other things like zsh.nix) and run home-manager switch

You don't have to use NixOS to take advantage of its benefits.

[–] [email protected] 3 points 3 months ago (1 children)

It always seemed to me like Nix package manager is not "native" enough or there are some downsides compared to dnf or apt. If that's not the case I think I've got my answer.

[–] [email protected] 3 points 3 months ago

From an outsider perspective (I haven't used Nix at all), the downsides I see are that it's extra software on top of the defaults for any given distro, it's not optimized for the distro (meaning it might pull in dependencies that already exist or not use distro specific APIs/libs), and it doesn't adhere to the motivations of the distro (e.g. not adhering to the DFSGs for Debian).

And of course, most of the packages are community maintained and there's the immutability, which might be a hinderance to some use cases, but not for me.

All in all, not really the worst if you're not worried about space or getting the absolute most in performance and not an ideologue, but it's enough to make me stick with APT. I chose Debian because of its commitment to FOSS, not the stability nor performance.

[–] [email protected] 9 points 3 months ago

flakes and lock files are next level.

[–] [email protected] 8 points 3 months ago (2 children)

i’ve used Chezmoi for years now pretty successfully. works on my Mac and Linux machines. it probably could be made to work on Windows. i am transitioning to NixOS, but i’ll probably keep using it anyway, since i still have Macs for work (and because they’re great laptops don’t @ me). the only real downside is that it only works for the home folder, so i have to manually control stuff for /etc, but i generally prefer user configuration for most tools anyway.

i had messed around with Ansible for this in the past, but i didn’t really like it for this use case. it’s been a while tho so it’s hard to say why.

not to pile on, but you might also look at GNU Stow. i decided against it, but it’s there.

obligatory i s’pose: https://github.com/covercash2/dotfiles

[–] [email protected] 2 points 3 months ago (1 children)

I’m not a Mac fan, but I do keep a Hackintosh VM with GPU passthrough to run the occasional XCode and the like or send a text message when I’m too lazy to pull out my iPhone. I will say that MacOS’s standardized interface is rather nice, though.

[–] [email protected] 1 points 3 months ago (1 children)

Wow, you went through hell with this Hacintosh. Interesting that you have an iPhone not Android when you use Linux.

[–] [email protected] 2 points 3 months ago (1 children)

On one hand, I did go through heck at one point trying to get the config.plist right to no avail. I then found some guy’s preconfigured OpenCore image made specifically for virtual machines (I usually avoid such things, but as a VM is basically a standardized platform, I’ll take it), upon which my life has been very easy ever since. Passthrough was just a matter of copying my Windows passthrough scripts.

One day, I want to buy a Google Pixel and run LineageOS, but I’m not in the position to do that right now.

[–] [email protected] 1 points 3 months ago (1 children)

Oh, do you have a steps to reproduce it?

I'm writing from [GrapheneOS] (https://grapheneos.org/) right now. I recommend it more over LineageOS as it seemed more polished and profiled. I have OnePlus 7 Pro with LineageOS MicroG though.

[–] [email protected] 1 points 3 months ago

For the GPU passthrough, I reused what I did for Windows 10. After that, I think you have to add a few QEMU flags in the Virt Manager XML (have to find them), but after that, you just download an OpenCore ISO from https://github.com/thenickdude/KVM-Opencore and it pretty much just works (except for audio, which is something I’m working ob. I got a Pulse server running on MacOS once and forwarded it to my Linux sound server over the virtual network, but I haven’t been able to replicate that.) Every few months, they’ll update it with the latest OpenCore.

[–] [email protected] 2 points 3 months ago

Yeah I see everyone saying chezmoi is great.

Ansible seems fine but also complicate many thing not doing something in bash.

GNU Stow seems even more complication than Ansible.

Bash seems the most simplest one.

[–] [email protected] 7 points 3 months ago* (last edited 3 months ago)

I’ve tried to move as much as I can into Flatpak. That way I can just copy my .var folder, and all my apps are migrated.

For other things like my configs, I use a git repo.

[–] [email protected] 7 points 3 months ago (1 children)

I haven't. But having my home dir be a git repo helps a great deal. The rest I install when I need it

[–] [email protected] 8 points 3 months ago

chezmoi does basically that, without actually making your home dir a git repo, it just syncs it. It also supports templating and per-machine differences. Pretty cool really.

[–] [email protected] 7 points 3 months ago (1 children)

You can make a custom distro based on one of the Universal Blue or Fedora Atomic images.

https://github.com/ublue-os/image-template

You could also go to the bleeding edge, make a Containerfile, and use bootc and podman to build a bootable container.

[–] [email protected] 4 points 3 months ago (1 children)

I recently installed Bazzite exclusively for gaming but I need to read more about Atomic distro.

[–] [email protected] 2 points 3 months ago

It's very interesting. I'm still learning about it all, too..

[–] [email protected] 5 points 3 months ago (1 children)

Ansible is probably the most mature

[–] [email protected] 2 points 3 months ago

And industry sstandard, yeah.

[–] [email protected] 5 points 3 months ago (3 children)

One thing I like to have with me is the AppImage version of programs when possible, since they usually work out of the box. Also helps ensuring I don't depend on the availability of whatever package manager the system uses.

[–] [email protected] 3 points 3 months ago

I’ve become a Flatpak fan for a similar reason.

[–] [email protected] 1 points 3 months ago (1 children)

Do they also embed the configuration inside of them? But for many dependencies and binaries I don't think that would be a good case scenario compared to package manager.

[–] [email protected] 1 points 3 months ago* (last edited 3 months ago)

There are cases where AppImages aren't viable indeed, like with programs that require ring 0 access. But limitations exist for all formats, so perhaps another good alternative is having multiple versions of a given program, like downloading the equivalent deb package through apt while also keeping the appimage version. It would bloat the storage for a potential automated configuration, but it should help with ensuring compatibility.

[–] [email protected] 1 points 3 months ago
[–] [email protected] 4 points 3 months ago (1 children)

Most of my files are different across machines because of different themes etc. The only dotfiles I have synced across machines are my .zshrc, .gitconfig, .ideavimrc (not my actual vimrc because it has some machine-specific theming), and .p10k.zsh. I have them all in a folder synced with syncthing and then I symlink ~/.zshrc to e.g. ~/dotfiles/.zshrc.

[–] [email protected] 3 points 3 months ago

Chezmoi has an amazing templating feature to address different files on different machines. It’s worth the time to set up.

[–] [email protected] 4 points 3 months ago

Chezmoi looks interesting. I’ve just been using xstow.

[–] [email protected] 3 points 3 months ago

After some manual reinstalls and much repetition, I've been using a custom script for the past year or so, which I'm slowly open sourcing through a rewrite.

[–] [email protected] 3 points 3 months ago

My dotfiles aren't distro-specific because they're symlinks into a git repo (or tarball) + a homegrown shell script to make them, and that's about the end of it.

My NixOS configuration is split between must-have CLI tools/nice-to-have CLI tools/hardware-related CLI tools/GUI tools and functions as a suitable reference for non-Nix distros, even having a few comments on what the package names are elsewhere, but installation is ultimately still manual.

[–] [email protected] 3 points 3 months ago

I have a custom /etc/profile that loads /etc/session.d/$HOSTNAME-$USER scripts.

[–] [email protected] 2 points 3 months ago (1 children)

I’ll be frank - I never have, though I probably should. For me, if an application’s configuration ever annoys me enough, I just manually copy the config from a machine that I already did the config.

One day, I may set up a shell script based on Debian’s Debootstrap that feeds it a list of packages (I think you can provide it a text file with a list of packages) to get everything set up, but that day is not today.

[–] [email protected] 9 points 3 months ago (1 children)

Perhaps you’re tired of hearing it but this is very close to exactly how NixOS works with home manager.

[–] [email protected] 2 points 3 months ago

Quite honestly, I almost chose NixOS over Debian a few years for that reason, but I prefer the community support of Debian. Of course, that could change, but right now, I’m not in a big distro-hopping mood nor am I sufficiently unhappy with Debian. On a side note, it kind of bothered me that you couldn’t use Nix to configure e.g the layout of your XFCE desktop. If I ever transition, maybe I’ll put in some time one summer to make that all work.

[–] [email protected] 2 points 3 months ago

@Psyhackological I've cut the Gordian knot by running one distro everywhere

[–] [email protected] 2 points 3 months ago

I use vcsh and myrepos.

vcsh allows you to run multiple git repos that share ~ as their root, and mr simplifies/automates the management of those multiple repos. You can check out my setup here.

[–] [email protected] 2 points 3 months ago (1 children)

I use SaltStack to automate my servers. Just feels better than Ansible to me.
For my PC and laptop I don't do anything, I haven't hopped distribution since I started using Tumbleweed a few years ago.

[–] [email protected] 1 points 3 months ago (1 children)

I heard about Salt being better alternative than Ansible. Why? I see.

[–] [email protected] 2 points 3 months ago (1 children)

The clear cut of state data, pillar data and formulae feels more intuitive to me than Ansible's playbook organization.

[–] [email protected] 1 points 3 months ago (1 children)

For person using only Ansible I don't know what are you talking about. 😆

[–] [email protected] 2 points 3 months ago (1 children)

ansible claims to be lots of things it's not. It's supposed to be idempotent. It's not, you can execute arbitrary scripts. You don't need an agent on the machines.... but it might just decide to stop supporting your version of python one day. It's okayish for setting up some machines, but absolutely sucks for maintaining them.

[–] [email protected] 1 points 3 months ago
[–] [email protected] 2 points 3 months ago

I wrote my own program, filetailor. It's similar to Chezmoi but uses inline comments instead of templates for machine-specific lines. This allows me to make edits directly to my local files and then sync those changes to other machines.

I also use Ansible.

[–] [email protected] 1 points 3 months ago (1 children)

I have a Linux setup script that downloads a bunch of config files and sets them up. I also have backups of my zshrc and other configs, and that helps a ton too. I have a Linux scripts repo on GitHub where I toss all my Linux scripts and that's quite helpful too.

[–] [email protected] 2 points 3 months ago (1 children)
[–] [email protected] 1 points 3 months ago* (last edited 3 months ago)

Nope. I'm more of a dev than a sysadmin these days, pretty much always have been, so I never bothered learning something like Ansible or Puppet or Chef etc. A couple Bash scripts can get me nearly entirely set up so it's all I ever really needed.