I have been thinking of writing some sort of utility for Linux that keeps track of all my installed software and configuration. Something that after doing a fresh install I can just run it and will restore my copy of Ubuntu as it used to be before doing the fresh install.

I do not know exactly where to start with this. I know that you can get a list of user installed software from dpkg -i | grep ii.

  • the /var/log/apt/history* files could be of interest. They include any command used to install/update/remove (parse for Command: to find them all). Keeping track of this, as well as file changes under /etc may be enough. I've been considering doing a mail server set up and feeding the /etc directory to a git repo to track what changes are actually made... but somewhat leery since usernames/passwords would be included... still could be useful for the class i teach
    – ivanivan
    Commented Mar 24, 2019 at 13:58

1 Answer 1


Debian and it descendants have a tool that allows you to create simple packages (with just dependencies). It is perfect for this job.

It is called equivs-build (I have no idea where the name comes from). It will create a .deb. You can install it with gdebi

Here is a makefile (you can do it manually if you want. The make file only adds 10% of the convenience, but documents the process.)

#create source
%.equivs-control: src/%.equivs-control
        @echo %linking "$@" from "$<"
        ln -s -t . "$<"

#make deb
%.deb: %.equivs-control
        @echo %making "$@" from "$<"
        equivs-build "$<"

#install one
.PHONY: %.install
%.install: %.deb
        @echo %installing "$<"
        sudo gdebi "$<"

But first you need to install the few tools.

ln -fs -T ../equivs src
ln -fs -t . src/makefile

#install what we need
sudo apt-get install equivs gdebi-core make

A config file src/my-packages_1.0_all.equivs-control

Section: local
Priority: optional
#Homepage: https:
Standards-Version: 3.9.2
Package: my-packages
Version: 1.0
Maintainer: ctrl-alt-delor@local>

Depends: python3-pystache, equivs, make, gdebi-core, intel-microcode, firmware-linux, multiarch-support, cpufrequtils, openssh-server, stow, etckeeper, ntp, bomstrip, nodejs, dos2unix, faketime, wget, nocache, schedtool, cpulimit, smem, inotify-tools, keepassx, mawk, mmv, yakuake, xdotool, acl, gparted, gufw, htop, sshfs, bindfs, k4dirstat, openssh-client, vim, rsync, emacs, vim, avahi-discover, yaml-mode, markdown, pandoc, dc, xinput, iotop, strace, curl, screen, kdesdk-dolphin-plugins, cvs, easygit, git, git-flow, git-gui, gitg, tig, kdesvn, subversion, hgview, mercurial-common, tortoisehg-nautilus, python-dulwich, task-british-desktop, task-british-kde-desktop, task-desktop, task-english, task-kde-desktop, task-laptop, redshift-plasmoid, gtk2-engines-oxygen, kde-config-gtk-style, kde-config-gtk-style-preview, libreoffice-style-oxygen, appmenu-qt, vlc, konversation, encfs, diffpdf, diffuse, dirdiff, kdiff3, meld, tor, idle3, ipython3-qtconsole, backintime-kde, couchapp, augeas-lenses, augeas-tools, augeas-doc, python3-augeas, sass-elisp, ruby-sass, eclipse-jdt, eclipse-mercurialeclipse, python3-requests, filepp, texlive-latex-base, texlive-latex-extra, tth, golang-mode, zenmap, wireshark

# Readme: <README.Debian file; defaults to a generic one>
Description: All of the stuff I want installed.
 This is managed by my install script system.

To use: - run shell script (this boots this install system) - run make my-packages_1.0_all.install

Careful if messing with the file names, part is from the Package: line, part is built in to the tool.

There are other configuration management tools that do a lot more, and are worth a look.


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .