I have a lot of packages and configurations done to setup my dev machine. I have other developers in my team and want them to have the same setup to start with to ensure compatibility and availability of tools.

How do I automate configuring the other dev machines?

I found Puppet and Chef which do the same for multiple servers. I won't hesitate to learn them or use them unless they are overkill for my use case.

I also found Remastersys to repeat my installation with a custom live disc, but I look forward to:

  • Run my setup on an already installed systems.
  • Be distro agnostic.
  • Remastersys doesn't seem to fit.

So, what tool should I be looking at to get it done?

Sample Use case:

  • Want x, y, z packages to be installed after a fresh install of Ubuntu or Arch.
  • Can I go distro agnostic? [Giving my devs the choice of distro - still keeping the same packages with no extra effort.]
  • Configure simple servers like MySQL or PostgreSQL.
  • Have often used tools like Meld, Google Chrome, Firefox, etc.

My use case is not a server-like use case. All I want is to repeat my setup keeping me decoupled from underlying system details.

Shell scripting can be an option, but its really hard to maintain something so low level like a shell script.

I suppose this a general problem to solve. There must be something I am missing.

1 Answer 1


You do need some form of configuration management. Puppet, Chef, CFengine, one of those. Basic setup of each is somewhat trivial, but they get complex very quickly. There are many different How-To's out there for each.

Do NOT go distro agnostic. It's nice to be able to use different distributions, but don't expect compatibility. Different distros have different versions of apache, php, mysql, etc., etc., etc. To be distro agnostic you need to be willing to package AND maintain those packages for each distribution (to keep your critical software at the same version across distros.)

I know you are asking specifically about your dev environment here, but it is also important to keep your production environment in sync with your dev environment. No one likes to push code to the production environment only to find out that you've been developing against a library version that hasn't yet seen the light of day in production. Keeping the different environments in sync is critical to reduce downtime.

  • Interesting.. I should not be aiming for distro agnostic. So.. it has to be puppet (or something like that) if not shell-script ? Apr 28, 2013 at 14:13
  • Some form of configuration management would be best (puppet, chef, cfengine, etc.) There are also other ways to do this, like Vagrant I'm afraid that none of the options are exceptionally trivial. Hopefully you kept great notes about what you added and changed. If you added any software that wasn't available upstream, I'd highly suggest putting that in a package compatible with your distro (rpm, deb, etc.) then put that package in your locally maintained repo. Apr 28, 2013 at 23:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.