Skip to content
Ladar Levison edited this page Jul 8, 2019 · 3 revisions

Contributing

In broad terms, if you want to contribute the configuration for an operating system that is very similar to an existing configuration, it's relatively easy. You can use the res/scripts/add.sh script to automate most of the cutting/pasting. For example, if you wanted to add a CentOS 8 config, based on the existing CentOS 7 config, you would run:

res/scripts/add.sh centos7 centos8 https://url.tld/centos/iso/c8.iso d818b61f9d8...

Note the add.sh script needs to be run from the repository root. Assuming all the parameters are provided, the script is designed to copy an existing config (like centos7) from the 5 existing generic JSON files, and then to those same JSON files a new config (like centos8). The script will replace the install ISO URL/HASH values with the values provided, and update any references to the old config string (ie centos7) in the various scripts/configs automatically (ie they would become centos8). This process includes copying the auto-install configuration inside the http directory, and any distro specific modules in the scripts directory, and finally, creating a Vagrantfile template in the tpl directory. This means, with our example http/generic.centos7.vagrant.cfg gets copied as http/generic.centos8.vagrant.cfg, the scripts/centos7/ directory (and its contents) will get duplicated as scripts/centos8/, and the tpl/generic-centos7.rb / tpl/roboxes-centos7.rb files get copied as tpl/generic-centos8.rb / tpl/roboxes-centos8.rb respectively.

The add.sh script isn't perfect, but it should get you started. The script will automatically replace any instances of the original box name (ie centos7) with the new box name (ie centos8), but you still need to review the files manually as there might be URLs, etc, that which reference the original box version and need to be updated manually.

You'll also need to update the scripts to match the distro. For example, if you're migrating a distro that previously used init.d to one based on systemd (like with CentOS 6 to 7), you would need to update the various scripts to use systemctl instead of the chkconfig and service commands. You should pay special attention to the package manager, and package names, as they may be different as well. For example you might need to replace yum with dnf (such as with CentOS 7 to 8).

Once you have an initial config, you'll need to test it by running:

./robox.sh box generic-NEWNAME-HYPERVISOR

Where NEWNAME is the new box config name you provided above, ie centos8 and HYPERVISOR is one of the following: vmware|virtualbox|hyperv|libvirt|parallels ... this will test your new config using the provided config. From there you can refine/remove/add config scripts which optimize the config for use as a base box image. Hopefully testing will point you to any problems, such as issues with the boot command sequence specificed in the JSON, etc.

Of course if you want to add something completely new, it's the same process you just need to add all the files/update all the JSON by hand.

Once your done and you've tested the new config on at least 1 hypervisor (preferably several, or even all), submit a pull request. Assuming the box config looks matches existing conventions, and it builds on the various platform, it will get accepted, and become part of the ongoing the build pipeline, and official robox images will be released.

If the config doesn't follow conventions, breaks an existing config, or doesn't build across all platforms, it may get placed on a branch, so it can be refined.

Virtualization Providers

The res/providers/providers.sh provides a semi-automated method for properly installing/configuring various virtualization providers/tools. Specifically it includes the commands need to setup and configure libvirt/LXC/Docker/VirtualBox and VMWare. The script has been developed and tested on CentOS 7, so you may run into issues using it verbatim on other distros/platforms. Please submit a pull request with any improvements you create and/or adaptations for non-CentOS build hosts. Note this script will make changes to your system limitations/firewall settings as well. Please review the script before running it to ensure it's appropriate for your environment.

Installing Packer / Vagrant

The aforementioned res/providers/providers.sh script will also attempt to detect and install the latest official Vagrant/Packer releases. The res/providers/packer.sh script should be used to download and compile packer from source. If there are any patches needed to build the robox configs, which have not been accepted upstream, they will be applied by this script as well.

Operating System Candidates

The following operating systems are all being considered as potential additions to the Robox project. when they get added is largely determined by the popularity of the distro, community interest, and available resources. Feel free to voice your support for any of the candidates below.

Forks or Variants of Current Distros

  • Devuan (ttps://devuan.org/)
  • Oracle 6 (already building v7)
  • Scientific Linux v6/v7

Independent Linux Distros

Security Focused

  • Tails
  • Kali
  • Qubes

Graphical Desktops

  • Mint
  • MacOS
  • Windows
  • Manjaro

Esoteric Operating Systems

Nostalgic Throwbacks

  • OpenSolaris
  • FreeDOS
  • Plan 9
  • AIX

Alternative Architectures

There has been limited interest in building images for the following legacy, and/or alternative CPU architectures.

  • Arm
  • Power PC
  • x86 (32 bit)