Tool to automate Linux reinstall?
2026-07-16 19:20 UTC
Replies (24)
-
@jeena@piefed.jeena.net 2026-07-16 19:24
The best would be NixOS, but if you just want to automate your install which you have then Ansible.
-
@throwaway403@programming.dev 2026-07-16 19:30
I frequently reinstall Linux. Like, how many times in a year? And secondly, for what reason?
-
@thenextguy@sh.itjust.works 2026-07-16 19:36
Ansible, Salt, Puppet, Chef, Terraform, …
-
@spaghettiwestern@sh.itjust.works 2026-07-16 19:39
Not a full reinstall solution, but aptik is one of the only utilities I’ve found useful enough to pay for. Last time I reinstalled it saved me many hours of configuration.
-
@digdilem@lemmy.ml 2026-07-16 20:02
If a debian based distro there’s several ways to copy your package choices from one machine to another, the likes of using dpkg --get-selections and using that output on the new machine with --set-selections, but probably the easiest way is to use apt-clone, which streamlines that process to install the same packages on the new machine. As for your firefox and desktop packages, they’ll be saved in /home/username (usually in .hidden dirs) - so just copy all of that over. Alternatively, use an image cloner like clonezilla to make an exact disk copy and install that. Or run your machine as a vm inside Proxmox or another hypervisor. That way you can have instant snapshots before you do risky things, as well as multiple scheduled entire-machine backups.
-
@deadbeef79000@lemmy.nz 2026-07-16 20:36
Fedora offers kickstart. Others have cloudinit or ignition. Those are the ones if used personally.
-
@Nibodhika@lemmy.world 2026-07-16 21:45
You should have a look at NixOS. It’s a Linux distro where you declare the whole system in configuration like files, in a language called Nix (hence NixOS), then you run a command and that gets resolved into your system. It takes a long time to setup the first time, but it’s a breeze when you need to reinstall, and you will never need to reinstall as every boot is a fresh copy of the system you declared. There’s also a thing called home-manager which uses the Nix language to declare your home configuration. That part can be used in any other Linux by installing the home-manager package. You can declare your OS in a way that the home part is portable for machines running other systems. I do that, then my machines are very easy to declare, and with some groups for things like Base (Terminal, prompt, some things I expect to have on every system like Python, nvim fully configured, etc), Gaming (Steam mostly), UI (Sway, many GUI things I use like browser with extensions, etc) I can add configs for a new machine in instants depending on what I expected for it, and if I ever want to convert my “Steam machine” into a desktop it’s just a couple line changes, regenerate the config and it’s exactly the same as my laptop. Honestly I don’t think Nix is for everyone, but it’s a very niche thing that works extremely well for what it sets up to do, and if you’re in the target audience it’s a game changer.
-
@BartyDeCanter@piefed.social 2026-07-17 00:00
I use two tools for this: https://www.chezmoi.io/ for all my various dotfiles A bash script I’ve put together over the years that has a list of all the basics that I want and calls whatever the right installer is for them: apt, cargo, brew, or whatever. It has targets for a local workstation, a remote headless server, and MacOS. Then at then the end it runs chezmoi. Now, my use case is less “constant fresh install” and more “keep my environment the same across various devices”, as I mostly run Debian Stable and don’t feel the need to constantly tweak things.
-
@jollyrogue@lemmy.ml 2026-07-17 03:43
It’s possible to create a custom Linux ISO. That will solve the application installation problem.
-
@atzanteol@sh.itjust.works 2026-07-17 04:29
There are several tools. Ansible is an excellent cross platform tool for provisioning systems. I use it to manage packages, users, network and firewall configs, etc. across several systems.
-
@giacomo@lemmy.dbzer0.com 2026-07-17 04:38
bootc image
-
@kylian0087@lemmy.dbzer0.com 2026-07-17 04:38
Their are a load of ways to do this. I have seen some good once posted already like Ansible. But to give you some more options. Their is also imaging. You setup a system how you like and clone it essentially. A good tool for that is a fog server. Works cross platform too.
-
@thingsiplay@lemmy.ml 2026-07-17 04:46
I think the Archinstall script (that is part of the official Arch iso) can save the configuration, to reinstall with same setup again. But it does not go into details like your Firefox environment. Its there to setup the basic installation and eventually additional packages.
-
@beeng@discuss.tchncs.de 2026-07-17 11:24
NixOS
-
@SatyrSack@quokk.au 2026-07-17 11:28
I had found myself reinstalling and reconfiguring a lot of the same things over and over while distro hopping, so I came up with a bash script with some of the most common configuration changes and such. As an example, here is my Fedora post=install script: script #!/usr/bin/env bash # remove all permission restrictions from current directory #sudo chmod -R a+rwX . sudo hostnamectl set-hostname [redacted] # prompt for ssh password to use later if [[ $1 == "" ]]; then read -p "Enter ssh password: " ssh_pass else ssh_pass=$1 fi # default dnf prompts to 'y' sudo sh -c "echo 'defaultyes=True' >> /etc/dnf/dnf.conf" # install packages that are needed to add repos and other packages sudo dnf up -y && sudo dnf in curl flatpak wget -y #add repos sudo dnf copr enable lilay/topgrade -y sudo dnf copr enable aflyhorse/libjpeg -y sudo dnf config-manager addrepo --from-repofile=https://repository.mullvad.net/rpm/stable/mullvad.repo sudo dnf in https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm -y sudo dnf in https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm -y sudo sh -c 'curl -fsSL https://repo.librewolf.net/librewolf.repo | pkexec tee /etc/yum.repos.d/librewolf.repo' sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo echo -e "[gitlab.com_paulcarroty_vscodium_repo]\nname=gitlab.com_paulcarroty_vscodium_repo\nbaseurl=https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/rpms/\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg\nmetadata_expire=1h" | sudo tee -a /etc/yum.repos.d/vscodium.repo #install packages sudo dnf in augeas-devel btop cairo-devel cairo-gobject-devel cargo cmake codium dbus-devel expat-devel gifsicle gimp git kde-connect kdenlive libavcodec-freeworld librewolf libxkbcommon-devel lightdm-gtk-greeter-settings mpv mullvad-vpn ninja-build openssh-server openssl openssl-devel pipx python3-dbus python3-devel python3-pip rpmbuild syncthing thunderbird topgrade vlc sshpass -y sudo dnf in $(curl -s https://raw.githubusercontent.com/teervo/bitwig-fedora/refs/heads/main/bitwig-rpm.sh | bash -s 4.4.10) -y sudo dnf swap ffmpeg-free ffmpeg --allowerasing -y export PATH="$HOME/.cargo/bin:$PATH" && echo $'export PATH= \"$HOME/.cargo/bin:$PATH \"' >> ~/.bashrc cargo install gifski cargo-updateflatpak install com.github.iwalton3.jellyfin-media-player -y #pipx install numlockw pip install pandas odfpy #create ssh key, copy to servers ssh-keygen -q -t rsa -N '' /dev/null 2>&1 hosts=("10.0.0.10" "10.0.0.11") for host in "${hosts[@]}"; do ssh-keyscan -H $host >> ~/.ssh/known_hosts && sshpass -p "$ssh_pass" ssh-copy-id -o StrictHostKeyChecking=no [redacted]@$host && ssh -q [redacted]@$host exit done #enable/start ssh server sudo systemctl enable sshd sudo systemctl start sshd #add external drive to fstab to automount directory_secondary_drive=$HOME/nvme uuid=[redacted] sudo blkid sudo cp /etc/fstab /etc/fstab.bak sudo sh -c "echo 'UUID=$uuid $directory_secondary_drive btrfs rw,auto,user,exec 0 0' >> /etc/fstab" sudo mount -a #copy over custom config files directory_software=$directory_secondary_drive/sync/software cp -r $directory_software/setup/configs/* $HOME/.local/share/ #install fonts cp $directory_software/fonts/* $HOME/.fonts fc-cache -vf #set git credentials git config --global user.name "[redacted]" && git config --global user.email "[redacted]@yourdomain.com" #add aliases to bashrc echo $'alias pipup=\'pip list -o | cut -f1 -d\'\\\'\' \'\\\'\' | tr " " " " | awk \'\\\'\'{if(NR>=3)print}\'\\\'\' | cut -d\'\\\'\' \'\\\'\' -f1 | xargs -n1 pip install -U; pip install -U cyberdrop-dl-patched\'' >> ~/.bashrc echo $'alias up=\"topgrade -y && echo \'\\nChecking pip\\n\' && pipup\"' >> ~/.bashrc echo $'alias e=\"exit\"' >> ~/.bashrc #https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox #print ssh key echo $'\nPublic SSH key:' cat $HOME/.ssh/*.pub Note that I used [redacted] here in places for anonymity reasons. This could give you a decent starting point to do something similar.
-
@mathemachristian@lemmy.ml 2026-07-17 11:41
guix is pretty useful. You can install it on top of any distro, feed it the declaration of your desired set-up and it will reproduce it everytime
-
@Hund@feddit.nu 2026-07-17 12:04
There’s always pyinfra.
-
@eldavi@lemmy.ml 2026-07-17 16:41
all configuration management languages do this and have forums where people share their code so that you copy/paste and then tweak them to your own needs. ansible galaxy comes to mind. if you want pure linux, there’s also kickstart or preseed.
-
@tuhriel@discuss.tchncs.de 2026-07-17 19:05
I’m now trying out SUSE microOS for my mini servers. These are initially setup via combustion / ignition. you add these scripts to a usb stick and insert them during the first boot where they initialize fhe system. As far as I saw, at least ignition is quite open and supported by most distros
-
@ATS1312@lemmy.dbzer0.com 2026-07-17 23:55
This is why we put /home on a separate partition for reuse on new installs. It saves your users’ files. Your steam, WM, Firefox config, even document files are already basically portable between installs. And in those files, we may as well put a bash script that does your pacman/apt/dnf/emerge/yay for the everything. This could be easy like with Gentoo or a PITA like with Debian to just scrape from the system right before migration. Firefox is weird when you hop between distros. Some distros use the LTS (long term stable) version, others use the normal Stable branch… Does Debian still maintain an IceWeasel fork of Firefox? This means you may want to manually copy a folder to a backup location to manually slot it in after the distro-hop. Either way, you want to download a popular privacy-focused user.js file from Github ;)
-
@dropdrip@lemmy.ml 2026-07-18 01:39
I think the most optimal way of doing this would be a self-made shell script that expresses your preferences. You could then run it from whatever live-environment you choose and the result would be a familiar setup. The /home directory being on a separate partition from the rest is useful for preserving large-quantities of user-data. I’ve been impressed with the capacity of microSD cards. The idea of mounting /home to a microSD card and having a materially-portable home has been a novelty I’ve so far resisted.
-
@sudo_fig@lemmy.world 2026-07-18 02:05
I have tuxmate selfhosted
-
@l4nz@lemmy.world 2026-07-18 12:29
+1 for ansible
-
@vee@lemmy.zip 2026-07-18 14:37
imo, the best solution for this is easily NixOS explicit reproducible system configuration