Difference between revisions of "Debian Appliance Builder"

From Proxmox VE
Jump to navigation Jump to search
(drop some outdated links)
(41 intermediate revisions by 6 users not shown)
Line 1: Line 1:
=Introduction=
+
== Introduction ==
Creating high quality appliances is a difficult task and requires deep knowledge of the underlying operating system. So we created the 'Debian Appliance Builder' to simplify that task.
 
'dab' is a script to automate the creation of OpenVZ appliances. It is basically a rewrite of debootstrap in perl, but uses OpenVZ instead of chroot and generates OpenVZ templates. Another difference is that it supports multi-stage building of templates. That way you can execute arbitrary scripts between package installation steps to accomplish what you want.
 
  
Furthermore, some common tasks are fully automated - like setting up a database server (mysql or postgres). To accomplish minimal template creation time, packages are cached to a local directory, so you do not need a local Debian/Ubuntu mirror (although this would speed up the first run).
+
Creating high quality appliances is a difficult task and requires deep knowledge of the underlying operating system. So we created the 'Debian Appliance Builder' to simplify that task. 'dab' is a script to automate the creation of OpenVZ appliances. It is basically a rewrite of debootstrap in perl, but uses OpenVZ instead of chroot and generates OpenVZ and now also LXC templates. Another difference is that it supports multi-stage building of templates. That way you can execute arbitrary scripts between package installation steps to accomplish what you want.
All generated templates includes an appliance description file. Those can be used to build appliance repositories.
+
 
 +
Furthermore, some common tasks are fully automated - like setting up a database server (mysql or postgres). To accomplish minimal template creation time, packages are cached to a local directory, so you do not need a local Debian mirror (although this would speed up the first run). All generated templates includes an appliance description file. Those can be used to build appliance repositories.  
  
 
'dab' is licensed under GPLv2 (Open source).
 
'dab' is licensed under GPLv2 (Open source).
==Main features==
 
*Fully automated build process with standard 'make' scripts
 
*Local package cache
 
*Multi-stage build process
 
*Creates and includes appliance description files
 
*Simplifies various tasks like database installation
 
*Appliances can be certified and integrated into the Proxmox VE download directory
 
*Supports Debian and Ubuntu based appliances
 
*Generates 32 or 64 bit appliances
 
*Automatic dependency resolution
 
  
==Target audience==
+
The version of this page having the OpenVZ DAB Manual is [http://pve.proxmox.com/mediawiki/index.php?title=Debian_Appliance_Builder&oldid=7718 here] | [[Media:Debian_Appliance_Builder_-_OpenVZ_2015-10-22.zip|here]] | [http://web.archive.org/web/20150912221447/http://pve.proxmox.com/wiki/Pvectl_manual Pvectl manual] | [http://web.archive.org/web/20150912222146/http://pve.proxmox.com/wiki/Qm_manual Qm Manual] | [http://web.archive.org/web/20150912221208/http://pve.proxmox.com/wiki/Vzctl_manual Vzctl Manual]
'dab' is an easy way for software vendors and open source project to package their product into a "ready-to-run" appliance. Appliances can be published into the Proxmox VE appliance download directory to reach the target customer. See [[Download_templates_(Video)]].
 
  
In order to work with 'dab', basic Linux knowledge is needed.
+
== Main features ==
  
=Installation=
+
*Fully automated build process with standard 'make' scripts
The script needs to be run as root, so it is not recommended to start it on a production machine with running containers.
+
*Local package cache
==System requirements==
+
*Multi-stage build process
Prepare your operating system - you can install 'dab' on the following operating systems:
+
*Creates and includes appliance description files
*Proxmox VE (fastest)
+
*Simplifies various tasks like database installation
*Proxmox VE inside Proxmox VE (KVM) - (most comfortable)
+
*Appliances can be certified and integrated into the Proxmox VE download directory
*Proxmox VE inside VMWare/XEN 64bit virtual machine
+
*Supports Debian 5, 6, 7 and 8 based appliances
*Debian 64/Ubuntu 64 with OpenVZ Kernel (not tested)
+
*Generates 32 or 64 bit appliances
 +
*Automatic dependency resolution
  
=='dab' installation==
+
== Target audience ==
Log into Proxmox VE, and install 'dab' using apt:
 
<pre>apt-get install dab</pre>
 
  
Or download and install it manually:
+
'dab' is an easy way for software vendors and open source project to package their product into a "ready-to-run" appliance. Appliances can be published into the Proxmox VE appliance download directory to reach the target customer. See [[Download templates (Video)]].
  
<pre>wget http://download.proxmox.com/debian/dists/lenny/pve/binary-amd64/dab_1.1-6_all.deb
+
In order to work with 'dab', basic Linux knowledge is needed.
dpkg -i dab_1.1-6_all.deb</pre>
 
  
A sample install on Proxmox VE 1.3 will output the following:
+
== DAB for LXC in PVE 4+ ==
<pre>
+
[http://forum.proxmox.com/threads/23541-DAB-for-LXC-in-PVE-4 DAB can now be used to create LXC templates] where the SSH keys are regenerated at creation / cloning time.
apt-get install dab
 
  
Reading package lists... Done
+
== Updates to DAB ==
Building dependency tree
+
DAB is developed in the Git Repo at:
Reading state information... Done
+
https://git.proxmox.com/?p=dab.git;a=summary
The following extra packages will be installed:
 
  binutils make
 
Suggested packages:
 
  binutils-doc make-doc
 
The following NEW packages will be installed:
 
  binutils dab make
 
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
 
Need to get 3157kB of archives.
 
After this operation, 9351kB of additional disk space will be used.
 
Do you want to continue [Y/n]? y
 
Get:1 http://download.proxmox.com lenny/pve dab 1.1-3 [26.7kB]
 
Get:2 http://ftp.debian.org lenny/main binutils 2.18.1~cvs20080103-7 [2730kB]
 
Get:3 http://ftp.debian.org lenny/main make 3.81-5 [401kB]
 
Fetched 3157kB in 19s (160kB/s)
 
Selecting previously deselected package binutils.
 
(Reading database ... 24838 files and directories currently installed.)
 
Unpacking binutils (from .../binutils_2.18.1~cvs20080103-7_amd64.deb) ...
 
Selecting previously deselected package make.
 
Unpacking make (from .../archives/make_3.81-5_amd64.deb) ...
 
Selecting previously deselected package dab.
 
Unpacking dab (from .../apt/archives/dab_1.1-3_all.deb) ...
 
Processing triggers for man-db ...
 
Setting up binutils (2.18.1~cvs20080103-7) ...
 
Setting up make (3.81-5) ...
 
Setting up dab (1.1-3) ...
 
</pre>
 
  
=='dab' sample templates==
+
The DAB binary is located at:
A set of examples is also available. Simply download them:
+
/usr/share/perl5/PVE/DAB.pm
  
Check for current examples at ftp://download.proxmox.com/sources/
+
An [[Media:Unofficial_DAB_for_PVE3.zip|unofficial backported DAB for PVE 3.x]] is [http://forum.proxmox.com/threads/23541-DAB-for-LXC-in-PVE-4?p=117985#post117985 discussed here].
  
<pre>wget ftp://download.proxmox.com/sources/dab-pve-appliances_2010-05-25.tar.gz</pre>
+
OpenVZ '''conf''' directory in PVE 1.x is at <tt>/etc/vz/conf</tt> whilst in PVE 3 it is in <tt>/etc/pve/openvz/</tt> and is set in '''DAB.pm''' as my <tt>$cfgdir = "/etc/vz/conf";</tt> or my <tt>$cfgdir = "/etc/pve/openvz";</tt> around line 312.
  
Unpack with tar:
+
== Installation ==
  
<pre>tar -zxvf dab-pve-appliances_2010-05-25.tar.gz</pre>
+
The script needs to be run as root, so it is not recommended to start it on a production machine with running containers.  
  
=='dab' manual pages==
+
== System requirements ==
The package includes a manual page:
 
<pre>man dab</pre>
 
  
<pre>
+
Prepare your operating system - you can install 'dab' on the following operating systems:
dab(1)                User Contributed Perl Documentation              dab(1)
 
  
NAME
+
*Proxmox VE (fastest)  
      dab - Debian OpenVZ Appliance Builder
+
*Proxmox VE inside Proxmox VE (KVM) - (most comfortable)  
 
+
*Proxmox VE inside VMWare/XEN 64bit virtual machine
SYNOPSIS
+
*Debian 64/Ubuntu 64 with OpenVZ Kernel (not tested)
      dab command [OPTIONS]
 
      dab init
 
          Downloads the package descriptions form the repository. Also
 
          truncates the "logfile".
 
 
 
      dab bootstrap
 
          Bootstrap a debian system and allocate a temporary container (we
 
          use IDs 90000 and above).
 
 
 
          --exim
 
              Use exim as MTA (we use postfix by default)
 
 
 
          --minimal
 
              Do not install standard packages.
 
 
 
      dab veid
 
          Print used container ID.
 
 
 
      dab basedir
 
          Print container private directory.
 
 
 
      dab packagefile
 
          Print the appliance file name.
 
 
 
      dab install pkg ...
 
          Install one or more packages. pkg can also refer to a file named
 
          "xyz.pkglist" which contains a list of packages. All dependencies
 
          are automatically installed.
 
 
 
      dab unpack pkg ...
 
          Unpack one or more packages. pkg can also refer to a file named
 
          "xyz.pkglist" which contains a list of packages. All dependencies
 
          are automatically unpacked.
 
 
 
      dab exec CMD ARGS
 
          Executes command CMD inside the container.
 
 
 
      dab enter
 
          Calls "vzctl enter CTID" - this is for debugging only.
 
 
 
      dab task mysql
 
          Install a mysql database server. During appliance generation we use
 
          "admin" as mysql root password (also stored in /root/.my.cnf).
 
 
 
          --password=XXX
 
              Specify the mysql root password. The special value "random" can
 
              be use to generate a random root password when the appliance is
 
              started first time (stored in /root/.my.cnf)
 
 
 
          --start
 
              Start the mysql server (if you want to execute sql commands
 
              during appliance generation).
 
 
 
      dab task postgres
 
          Install a postgres database server.
 
 
 
          --version=XXX
 
              Select Postgres version. Posible values are 7.4, 8.1 and 8.3
 
              (depends on the selected suite).
 
 
 
          --start
 
              Start the postgres server (if you want to execute sql commands
 
              during appliance generation).
 
 
 
      dab task php
 
          Install php5.
 
 
 
          --memlimit=i
 
              Set the php memory_limit.
 
 
 
      dab finalize
 
          Cleanup everything inside the container and generate the final
 
          appliance package.
 
 
 
          --keepmycnf
 
              Do not delete file "/root/.my.cfg" (mysql).
 
 
 
      dab list
 
          List installed packages.
 
 
 
          --verbose
 
              Also print package versions.
 
 
 
      dab clean
 
          Remove all temporary file and destroy the used OpenVZ container.
 
  
      dab dist-clean
+
== 'dab' installation ==
          Like clean, but also removes the package cache (except when you
 
          specified your own cache directory in the config file)
 
  
DESCRIPTION
+
Log into Proxmox VE, and install 'dab' using apt:
      dab is a script to automate the creation of OpenVZ appliances. It is
+
<pre>apt-get install dab</pre>
      basically a rewrite of debootstrap in perl, but uses OpenVZ instead of
+
Or download and install it manually:
      chroot and generates OpenVZ templates. Another difference is that it
+
<pre>wget http://download.proxmox.com/debian/dists/squeeze/pve/binary-amd64/dab_1.2-3_all.deb</pre>
      supports multi-stage building of templates. That way you can execute
+
The bleeding edge known to work and is available at:
      arbitrary scripts between to accomplish what you want.
+
<pre>wget http://download.proxmox.com/debian/dists/squeeze/pvetest/binary-amd64/dab_1.2-4_all.deb</pre>
 +
Both <tt>ftp://</tt> and <tt>http://</tt> work for the '''wget''' URLs above.
  
      Furthermore some common tasks are fully automated, like setting up a
+
== 'dab' sample templates ==
      database server (mysql or postgres).
 
  
      To accomplish minimal template creation time, packages are cached to a
+
Check for current examples: Latest build files: https://git.proxmox.com/?p=dab-pve-appliances.git;a=summary
      local directory, so you do not need a local debian mirror (although
 
      this would speed up the first run).
 
  
      See http://pve.proxmox.com/wiki/Debian_Appliance_Builder for examples.
+
Older examples are on ftp://download.proxmox.com/sources/
 +
<pre>wget http://download.proxmox.com/sources/dab-pve-appliances_2011-09-13.tar.gz</pre>
 +
Unpack with tar:
 +
<pre>tar -zxvf dab-pve-appliances_2011-09-13.tar.gz</pre>
  
      This script need to be run as root, so it is not recommended to start
+
== Build Virtual Appliances ==
      it on a production machine with running container. Proxmox VE
 
      (http://pve.proxmox.com) is the preferred environment, because it is
 
      able to log the console output when a container starts. You wont be
 
      able to detect errors during container startup when running on standard
 
      OpenVZ. So many people run Proxmox VE inside a KVM or VMWare 64bit
 
      virtual machine to build appliances.
 
  
      All generated templates includes an appliance description file. Those
+
We published several examples to show how to work with 'dab'. To start, just build a first OS template based on our examples. If you understand the basics, you can start customizing your own appliance (based on a standard OS template).  
      can be used to build appliance repositories.
 
  
CONFIGURATION
+
=== Basic recommendations ===
      Configuration is read from the file "dab.conf" inside the current
 
      working directory. The files contains key value pairs, separated by
 
      colon.
 
  
      Suite: etch|lenny|hardy|intrepid|jaunty
+
*Choose the best suitable base OS (squeeze)
        The Debian or Ubuntu suite.
+
*Choose the right architecture (i383 or amd64)
 +
*Always try to use deb packages for applications (instead of tar.gz files)
 +
*Pre-configure applications as much as possible (PHP, Apache, MySql, Postgresql, etc.) - based on the recommendations of the software
 +
*Use unique keys and passwords (auto generate them during first start-up)
 +
*Define the update procedure for users running the appliance in production: if you use Debian packages, update is easy (apt-get update)
 +
*Contact the Proxmox support team for help [http://forum.proxmox.com/ Proxmox Support Forum]
  
      Source: URL [components]
+
== Debian 6 Standard (Squeeze, i386)  ==
        Defines a source location. By default we use the following for
 
        debian:
 
  
          Source: http://ftp.debian.org/debian SUITE main contrib
+
This example shows the basic steps when creating appliances with 'dab'. First step is to create a temporary working directory and cd into that directory (or just cd into the previously un-tared examples):  
          Source: http://security.debian.org SUITE/updates main contrib
+
<pre>mkdir debian-6.0-standard
 
+
cd debian-6.0-standard
        Note: SUITE is a variable and will be substituted.
+
</pre>  
 
+
Now you need to create/edit the configuration file called 'dab.conf':  
        There are also reasonable defaults for Ubuntu. If you do not specify
+
<pre>Suite: lenny
        any source the defaults are used.
 
 
 
      Depends: dependencies
 
        Debian like package dependencies. This can be used to make sure that
 
        speific package versions are available.
 
 
 
      CacheDir: path
 
        Allows you to specify the directory where downloaded packages are
 
        cached.
 
 
 
      Mirror: SRCURL => DSTURL
 
        Define a mirror location. for example:
 
 
 
          Mirror: http://ftp.debian.org/debian => ftp://mirror/debian
 
 
 
      All other settings in this files are also included into the appliance
 
      description file.
 
 
 
      Name: name
 
        The name of the appliance.
 
 
 
        Appliance names must consist only of lower case letters (a-z), digits
 
        (0-9), plus (+) and minus (-) signs, and periods (.). They must be at
 
        least two characters long and must start with an alphanumeric
 
        character.
 
 
 
      Architecture: i386|amd64
 
        Target architecture.
 
 
 
      Version: upstream_version[-build_revision]
 
        The version number of an appliance.
 
 
 
        =item: Section: section
 
 
 
        This field specifies an application area into which the appliance has
 
        been classified. Currently we use the following section names:
 
        system, admin, www
 
 
 
      Maintainer: name <email>
 
        The appliance maintainer's name and email address. The name should
 
        come first, then the email address inside angle brackets <> (in
 
        RFC822 format).
 
 
 
      Infopage: URL
 
        Link to web page containing more informations about this appliance.
 
 
 
      Description: single line synopsis
 
          extended description over several lines (indended by space) may follow.
 
 
 
Appliance description file
 
      All generated templates includes an appliance description file called
 
 
 
        /etc/appliance.info
 
 
 
      this is the first file inside the tar archive. That way it can be
 
      easily exctracted without scanning the whole archive. The file itself
 
      contains informations like a debian "control" file. It can be used to
 
      build appliance repositories.
 
 
 
      Most fields are directly copied from the configuration file "dab.conf".
 
 
 
      Additionally there are some auto-generated files:
 
 
 
      Installed-Size: bytes
 
          It gives the total amount of disk space required to install the
 
          named appliance. The disk space is represented in megabytes as a
 
          simple decimal number.
 
 
 
      Type: type
 
          This is always "openvz".
 
 
 
      OS: [debian-4.0|debian-5.0|ubuntu-8.0]
 
          Operation system.
 
 
 
      Appliance repositories usually add additional fields:
 
 
 
      md5sum: md5sum
 
          MD5 checksum
 
 
 
FILES
 
      The following files are created inside your working directory:
 
 
 
        dab.conf          appliance configuration file
 
 
 
        logfile          contains installation logs
 
 
 
        .veid            stores the used container ID
 
 
 
        cache/*          default package cache directory
 
 
 
        info/*            package information cache
 
 
 
AUTHOR
 
      Dietmar Maurer <dietmar@proxmox.com>
 
 
 
      Many thanks to Proxmox Server Solutions (www.proxmox.com) for
 
      sponsoring this work.
 
 
 
COPYRIGHT AND DISCLAIMER
 
      Copyright (C) 2007-2009 Proxmox Server Solutions GmbH
 
 
 
      Copyright: dab is under GNU GPL, the GNU General Public License.
 
 
 
      This program is free software; you can redistribute it and/or modify it
 
      under the terms of the GNU General Public License as published by the
 
      Free Software Foundation; version 2 dated June, 1991.
 
 
 
      This program is distributed in the hope that it will be useful, but
 
      WITHOUT ANY WARRANTY; without even the implied warranty of
 
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
      General Public License for more details.
 
 
 
      You should have received a copy of the GNU General Public License along
 
      with this program; if not, write to the Free Software Foundation, Inc.,
 
      51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
 
 
POD ERRORS
 
      Hey! The above document had some coding errors, which are explained
 
      below:
 
 
 
      Around line 382:
 
          =back without =over
 
 
 
1.1                              2010-08-19                            dab(1)
 
</pre>
 
 
 
=Build Virtual Appliances=
 
We published several examples to show how to work with 'dab'. To start, just build a first OS template based on our examples. If you understand the basics, you can start customizing your own appliance (based on a standard OS template).
 
 
 
Basic recommendations:
 
*Choose the best suitable base OS (Debian Etch or Lenny, Ubuntu Hardy)
 
*Choose the right architecture (32 or 64 bit): unless your appliance needs a lot of RAM choose 32 bit
 
*Always try to use Debian/Ubuntu packages for applications (instead of tar.gz files)
 
*Pre-configure applications as much as possible (PHP, Apache, MySql, Postgresql, etc.) - based on the recommendations of the software
 
*Use unique keys and passwords (auto generate them during first start-up)
 
*Define the update procedure for users running the appliance in production: if you use Debian packages, update is easy (apt-get update)
 
*Contact the Proxmox support team for help [http://www.proxmox.com/forum/ Proxmox Support Forum]
 
*And finally: Get certified! See [[Certification Overview]]
 
 
 
==Debian 5 Standard (Lenny, 32bit)==
 
This example shows the basic steps when creating appliances with 'dab'. First step is to create a temporary working directory and cd into that directory (or just cd into the previously un-tared examples):
 
<pre>
 
mkdir debian-5.0-standard
 
cd debian-5.0-standard
 
</pre>
 
 
 
Now you need to create/edit the configuration file called 'dab.conf':
 
 
 
<pre>
 
Suite: lenny
 
 
Architecture: i386
 
Architecture: i386
Name: debian-5.0-standard
+
Name: debian-6.0-standard
Version: 5.0-1
+
Version: 6.0-1
 
Section: system
 
Section: system
Maintainer: Proxmox Support Team <support@proxmox.com>
+
Maintainer: Proxmox Support Team &lt;support@proxmox.com&gt;
Infopage: http://pve.proxmox.com/wiki/Debian_5.0_Standard
+
Infopage: http://pve.proxmox.com/wiki/Debian_6.0_Standard
Description: Debian 5.0 (standard)
+
Description: Debian 6.0 (standard)
 
  A small Debian Lenny system including all standard packages.
 
  A small Debian Lenny system including all standard packages.
</pre>
+
</pre>  
 
+
Next step: Download the available package lists:  
Next step: Download the available package lists:
+
<pre>dab init</pre>  
<pre>dab init</pre>
+
Start the creation process with:  
 
+
<pre>dab bootstrap</pre>  
Start the creation process with:
+
Finally build the final appliance package with:  
 
+
<pre>dab finalize</pre>  
<pre>dab bootstrap</pre>
+
Thats all. Simply upload the final template to your Proxmox VE server (/var/lib/vz/template/cache/) and test what you created. Sure, always check if everything went well before releasing a template. For this purpose all output is logged to a file called 'logfile'.
 
 
Finally build the final appliance package with:
 
<pre>dab finalize</pre>
 
  
Thats all. Simply upload the final template to your Proxmox VE server (/var/lib/vz/template/cache/) and test what you created. Sure, always check if everything went well before releasing a template. For this purpose all output is logged to a file called 'logfile'.
+
When finished you may want to cleanup your working directory with:  
 
+
<pre>dab clean</pre>  
When finished you may want to cleanup your working directory with:
+
or use 'dist-clean' if you also want to erase the package cache directory:  
<pre>dab clean</pre>
+
<pre>dab dist-clean</pre>  
 
+
<br> You can automate above steps using make. Simply create a file called 'Makefile' (here is an example):  
or use 'dist-clean' if you also want to erase the package cache directory:
+
<pre>BASEDIR:=$(shell dab basedir)
<pre>dab dist-clean</pre>
 
 
 
 
 
You can automate above steps using make. Simply create a file called 'Makefile' (here is an example):
 
 
 
<pre>
 
BASEDIR:=$(shell dab basedir)
 
  
 
all: info/init_ok
 
all: info/init_ok
Line 433: Line 136:
 
         dab dist-clean
 
         dab dist-clean
 
         rm -f *~
 
         rm -f *~
</pre>
+
</pre>  
 
+
To start template creation you can now simply type:  
To start template creation you can now simply type:
+
<pre>make</pre>  
<pre>make</pre>
+
and
 
+
<pre>make clean</pre>
and
+
to cleanup the directory.
  
<pre>make clean</pre>
+
The '''[[Build your first DAB Appliance Template]]''' page shows how to practically setup '''DAB''' and get along building templates.
  
to cleanup the directory.
+
== Other OS sample Appliances  ==
 +
These example OS templates are included in the [https://git.proxmox.com/?p=dab-pve-appliances.git;a=summary dab-pve-appliances] 
  
==Other OS sample Appliances==
+
You can find descriptions of available Virtual Appliances [[:Category: Virtual Appliances|here]].
These example OS templates are included in the [ftp://download.proxmox.com/sources/dab-pve-appliances_2010-02-04.tar.gz dab-pve-appliances] (42.5 MB)
 
*[[Debian 4.0 Standard]] (Etch, 32bit)
 
*Debian 4 Standard (Etch, 64bit)
 
*[[Debian 5.0 Standard]] (Lenny, 64bit)
 
*[[Ubuntu Hardy Standard]] (Hardy, 32bit)
 
*Ubuntu 8.04 Standard (Hardy, 64bit)
 
  
==Sample Application Appliances==
+
== Get support ==
These example application templates are included in the [ftp://download.proxmox.com/sources/dab-pve-appliances_2010-02-04.tar.gz dab-pve-appliances] (42.5 MB)
 
*[[Acquia Drupal]] (Debian Etch, 32 bit)
 
*[[Drupal]] (Debian Lenny, 32 bit)
 
*[[MediaWiki]] (Debian Lenny, 32 bit)
 
*[[Joomla!]] (Debian Lenny, 32 bit)
 
*[[Wordpress]] (Debian Lenny, 32 bit)
 
*[[RT Request Tracker]] (Debian Lenny, 32 bit)
 
*[[X11 Terminal Server]] (with GNOME, Debian Lenny 32 bit)
 
  
=Howto certify a Virtual Appliance=
+
[[Get support]] including commercial support offering concerning 'dab'.
See [[Certification_Overview]]
 
  
=Get support=
+
== Related Forum Posts ==
[[Get_support]] including commercial support offering concerning 'dab'.
+
* [http://forum.proxmox.com/threads/1919-Makefile-dab-template ATUIN's generic DAB File Template]
 +
* [http://forum.proxmox.com/threads/19894-Mods-to-Updated-DAB-pm Oct 2014 mods to DAB.pm] based on the [https://git.proxmox.com/?p=dab.git;a=summary DAB Git Repo] - [[Media:DAB_127_2014-10-02.zip|Cache]]
  
[[Category: Virtual Appliances]][[Category: HOWTO]]
+
[[Category:Virtual Appliances]] [[Category:HOWTO]]

Revision as of 14:07, 16 November 2020

Introduction

Creating high quality appliances is a difficult task and requires deep knowledge of the underlying operating system. So we created the 'Debian Appliance Builder' to simplify that task. 'dab' is a script to automate the creation of OpenVZ appliances. It is basically a rewrite of debootstrap in perl, but uses OpenVZ instead of chroot and generates OpenVZ and now also LXC templates. Another difference is that it supports multi-stage building of templates. That way you can execute arbitrary scripts between package installation steps to accomplish what you want.

Furthermore, some common tasks are fully automated - like setting up a database server (mysql or postgres). To accomplish minimal template creation time, packages are cached to a local directory, so you do not need a local Debian mirror (although this would speed up the first run). All generated templates includes an appliance description file. Those can be used to build appliance repositories.

'dab' is licensed under GPLv2 (Open source).

The version of this page having the OpenVZ DAB Manual is here | here | Pvectl manual | Qm Manual | Vzctl Manual

Main features

  • Fully automated build process with standard 'make' scripts
  • Local package cache
  • Multi-stage build process
  • Creates and includes appliance description files
  • Simplifies various tasks like database installation
  • Appliances can be certified and integrated into the Proxmox VE download directory
  • Supports Debian 5, 6, 7 and 8 based appliances
  • Generates 32 or 64 bit appliances
  • Automatic dependency resolution

Target audience

'dab' is an easy way for software vendors and open source project to package their product into a "ready-to-run" appliance. Appliances can be published into the Proxmox VE appliance download directory to reach the target customer. See Download templates (Video).

In order to work with 'dab', basic Linux knowledge is needed.

DAB for LXC in PVE 4+

DAB can now be used to create LXC templates where the SSH keys are regenerated at creation / cloning time.

Updates to DAB

DAB is developed in the Git Repo at:

https://git.proxmox.com/?p=dab.git;a=summary

The DAB binary is located at:

/usr/share/perl5/PVE/DAB.pm

An unofficial backported DAB for PVE 3.x is discussed here.

OpenVZ conf directory in PVE 1.x is at /etc/vz/conf whilst in PVE 3 it is in /etc/pve/openvz/ and is set in DAB.pm as my $cfgdir = "/etc/vz/conf"; or my $cfgdir = "/etc/pve/openvz"; around line 312.

Installation

The script needs to be run as root, so it is not recommended to start it on a production machine with running containers.

System requirements

Prepare your operating system - you can install 'dab' on the following operating systems:

  • Proxmox VE (fastest)
  • Proxmox VE inside Proxmox VE (KVM) - (most comfortable)
  • Proxmox VE inside VMWare/XEN 64bit virtual machine
  • Debian 64/Ubuntu 64 with OpenVZ Kernel (not tested)

'dab' installation

Log into Proxmox VE, and install 'dab' using apt:

apt-get install dab

Or download and install it manually:

wget http://download.proxmox.com/debian/dists/squeeze/pve/binary-amd64/dab_1.2-3_all.deb

The bleeding edge known to work and is available at:

wget http://download.proxmox.com/debian/dists/squeeze/pvetest/binary-amd64/dab_1.2-4_all.deb

Both ftp:// and http:// work for the wget URLs above.

'dab' sample templates

Check for current examples: Latest build files: https://git.proxmox.com/?p=dab-pve-appliances.git;a=summary

Older examples are on ftp://download.proxmox.com/sources/

wget http://download.proxmox.com/sources/dab-pve-appliances_2011-09-13.tar.gz

Unpack with tar:

tar -zxvf dab-pve-appliances_2011-09-13.tar.gz

Build Virtual Appliances

We published several examples to show how to work with 'dab'. To start, just build a first OS template based on our examples. If you understand the basics, you can start customizing your own appliance (based on a standard OS template).

Basic recommendations

  • Choose the best suitable base OS (squeeze)
  • Choose the right architecture (i383 or amd64)
  • Always try to use deb packages for applications (instead of tar.gz files)
  • Pre-configure applications as much as possible (PHP, Apache, MySql, Postgresql, etc.) - based on the recommendations of the software
  • Use unique keys and passwords (auto generate them during first start-up)
  • Define the update procedure for users running the appliance in production: if you use Debian packages, update is easy (apt-get update)
  • Contact the Proxmox support team for help Proxmox Support Forum

Debian 6 Standard (Squeeze, i386)

This example shows the basic steps when creating appliances with 'dab'. First step is to create a temporary working directory and cd into that directory (or just cd into the previously un-tared examples):

mkdir debian-6.0-standard
cd debian-6.0-standard

Now you need to create/edit the configuration file called 'dab.conf':

Suite: lenny
Architecture: i386
Name: debian-6.0-standard
Version: 6.0-1
Section: system
Maintainer: Proxmox Support Team <support@proxmox.com>
Infopage: http://pve.proxmox.com/wiki/Debian_6.0_Standard
Description: Debian 6.0 (standard)
 A small Debian Lenny system including all standard packages.

Next step: Download the available package lists:

dab init

Start the creation process with:

dab bootstrap

Finally build the final appliance package with:

dab finalize

Thats all. Simply upload the final template to your Proxmox VE server (/var/lib/vz/template/cache/) and test what you created. Sure, always check if everything went well before releasing a template. For this purpose all output is logged to a file called 'logfile'.

When finished you may want to cleanup your working directory with:

dab clean

or use 'dist-clean' if you also want to erase the package cache directory:

dab dist-clean


You can automate above steps using make. Simply create a file called 'Makefile' (here is an example):

BASEDIR:=$(shell dab basedir)

all: info/init_ok
        dab bootstrap
        dab finalize

info/init_ok: dab.conf
        dab init
        touch $@

.PHONY: clean
clean:
        dab clean
        rm -f *~

.PHONY: dist-clean
dist-clean:
        dab dist-clean
        rm -f *~

To start template creation you can now simply type:

make

and

make clean

to cleanup the directory.

The Build your first DAB Appliance Template page shows how to practically setup DAB and get along building templates.

Other OS sample Appliances

These example OS templates are included in the dab-pve-appliances

You can find descriptions of available Virtual Appliances here.

Get support

Get support including commercial support offering concerning 'dab'.

Related Forum Posts