Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

210
Views
Build environment isolation and file system diffing

Alright so after trying to chase down the dependencies for various pieces of software for the n-th time and replicating work that various people do for all the different linux distributions I would like to know if there is a better way of bundling various pieces of software into one .rpm or .deb file for easier distribution.

My current set up for doing this is a frankenstein monster of various tools but mainly Vagrant and libguestfs (built from source running in Fedora because none of the distributions actually ship it with virt-diff). Here are the steps I currently follow:

  1. Spin up a base OS using either a Vagrant box or by create one from live CDs.
  2. Export the .vmdk and call it base-image.
  3. Spin up an exact replica of the previous image and go to town: use the package manager, or some other means, to download, compile, and install all the pieces that I need. Once again, export the .vmdk and call it non-base-image.
  4. Make both base images available to the Fedora guest OS that has libguestfs.
  5. Use virt-diff to diff the two images and dump that data to file called diff.
  6. Run several ruby scripts to massage diff into another format that contains the information I need and none of the stuff I don't like things in /var.
  7. Run another script to generate a command script for guestfish with a bunch of copy-out commands.
  8. Run the guestfish script.
  9. Run another script to regenerate the symlinks from diff because guestfish can't do it.
  10. Turn the resulting folder structure into a .deb or .rpm file and ship it.

I would like to know if there is a better way to do this. You'd think there would be but I haven't figured it out.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

I would definitely consider something along the lines of:

A)

  • yum list (select your packages/dependencies whatever)
  • use yumdownloader on the previous list (or use th pkgs you have already downloaded)
  • createrepo
  • ship on media with install script that adds the cd repo to repolist, etc.

or B)

first two steps as above, then pack the rpms into an archive build a package that contains all of the above and kicks off the actual install of the rpms (along the lines of rpm -Uvh /tmp/repo/*) as a late script (in the cleanup phase, maybe). Dunno if this can be done avoiding locks on the rpm database.

over 4 years ago · Santiago Trujillo Report

0

I think you reached the point of complexity - indeed a frankenstein monster - where you should stop fearing of making proper packages with dependencies. We did this in my previous work - we had a set of fabricated rpm packages - and it was very easy and straightforward, including:

  • pre/post install scripts
  • uninstall scripts
  • dependencies

We never had to do anything you just described. And for the customer, installing even a set of packages was very easy!

You can follow a reference manual of how to build RPM package for more info.

EDIT: If you need a single installation package, then create this master packge, that would contain all the other packages (with dependencies set properly) and installed them in the post-install script (and uninstalled them in the uninstall script).

over 4 years ago · Santiago Trujillo Report

0

Is the problem primarily that of ensuring that your customers have installed all the standard upstream distro packages necessary for your package to run?

If that's the case, then I believe the most straightforward solution would be to leverage the yum and apt infrastructure to have those tools track down and install the necessary prerequisite packages.

If you supply a native yum/apt repository with complete pre-req specs (the hard work you've apparently already completed). Then the standard system install tool takes care of the rest. See link below for more on creating a personal repository for yum/apt.

For off-line customers, you can supply media with your software, and a mirror - or mirror subset - of the upstream distro, and instructions for adding them to yum config/apt config.

Yum Creating a Yum Repository in the Fedora Deployment Guide

Apt How To Setup A Debian Repository on the Debian Wiki

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!