Difference between revisions of "Deploying Your Application"

From Lazarus wiki
Jump to navigationJump to search
Line 362: Line 362:
Once the installation is complete, you "unmount" (eject) the mounted disk image by dragging it to the trash. You can also delete the .dmg file by dragging it to the trash as well.
Once the installation is complete, you "unmount" (eject) the mounted disk image by dragging it to the trash. You can also delete the .dmg file by dragging it to the trash as well.
You can also read [http://el-tramo.be/guides/fancy-dmg this guide to create a fancy disk image].
=== Using PackageMaker on Mac OS X ===
=== Using PackageMaker on Mac OS X ===

Revision as of 12:47, 8 September 2011

English (en) español (es) français (fr) 日本語 (ja) português (pt)

Windows Installers


Inno Setup is a free installer for Windows programs. It may be used completely free of charge, even when deploying commercial applications, full source code is available (Borland Delphi 2.0-5.0). (http://www.jrsoftware.org/).

Supports all versions of Windows in use today -- Windows 95, 98, 2000, 2003, XP, Me, NT 4.0. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX's and type libraries, and install fonts. Creation of shortcuts anywhere, including in the Start Menu and on the desktop. Creation of registry and .INI entries; Integrated Pascal scripting engine; Support for multilingual installs; Support for passworded and encrypted installs; Silent install and uninstall.

Inno Setup is copyrighted software, not public domain software. There are some restrictions on distribution and use; see the http://www.jrsoftware.org/files/is/license.txt file for details.

Inno Setup is used to create the Lazarus installer for Windows.


InstallJammer a multiplatform, open source GUI installer designed to be completely cross-platform and function on Windows and most all versions of UNIX with eventual support for Mac OS X.


HJ-Install is a freeware installer for Windows 95, 98, ME, NT 4.0, 2000 and XP. It is created with Internet distributed, CD-Rom, single-floppy and multi-floppy installations in mind, but it can also be used in network situations and as a stand-alone scripting engine. The installer is small and adds only 138 Kb. It doesn't support changing the registry and ini files, and un-install. See http://www.freebyte.com/hjinstall/

LizaJet Installer

LizaJet Installer is a commercial installer, but a free edition is available. Uses Object Pascal for scripting. See http://www.lizajet.com

NSIS (Nullsoft Scriptable Install System)

A professional open source system to create Windows installers. A full-featured NSIS installer has an overhead of only 34 KB. See http://nsis.sourceforge.net/Main_Page and http://hmne.sourceforge.net/

Windows Installer XML (WiX) toolset

A toolset that builds Windows installation packages from XML source code. The toolset supports a command line environment that developers may integrate into their build processes to build MSI and MSM setup packages. See http://wix.sourceforge.net/

Unix installers

Creating a RPM Package on Linux

On Linux, the best way to deploy applications is by using the native package system. Of the many package systems available, RPM (RedHat Package Manager) is the most commonly utilized format, and is defined as the standard one in the Linux Standard Base.

To create a RPM file, you need to create a spec text file with the information necessary to build the software, and also an environment to build that spec. The best editor to create RPM packages is Emacs, because it recognizes the spec extension, highlights the text appropriately and even has a menu option to build rpm packages.

To build the rpm file use either the emacs menu or this command line (man rpmbuild for more information):

rpmbuild -ba --clean $HOME/RPM/SPECS/myprogram.spec

Setting up your build environment

RPM Packages are installed as root to the base system (/ directory), but an accident as root can destroy your machine. To avoid this, packages can be build as a normal user. The build process includes a real install, to make sure the package works, but this install is made to a fake root directory represented by the $RPM_BUILD_ROOT variable.

First, go to your home directory (or another directory inside it) and create the following directory structure:


RPM/BUILD - This directory is utilized by RPM to build the package.

RPM/RPMS - Here you can find binary RPMs after you build them.

RPM/SOURCES - Place your compressed tar files and patches here.

RPM/SPECS - Place all your spec files here.

RPM/SRPMS - Here you can find source RPMs after you build them.

Next you will need to create a configuration file to tell rpm builder software where he can find your build directories. Go to your home directory and create a file named .rpmmacros and place the text bellow on it. Make sure to change the directories to the correct ones on your system.

%_topdir                /home/felipe/RPM/
%_tmppath               /home/felipe/tmp

%_signature             gpg
%_gpg_name              Mandrakelinux
%_gpg_path              ~/.gnupg

Creating a binary only package

The easiest way to create a RPM package is to make it install already compiled software. There are some reason why we might want to avoid compiling the software in the spec file:

  • It requires creating a Makefile and makefiles are complex
  • Some packages don't have any binary software in them, so they don't need to be built.

Each RPM Package contains a single compressed tar archive. Place the archive under the RPM/SOURCES directory. Zip, gz and bz2 compressions should work ok. The file can either contain the full source of the project if you with to create a source and a binary package or a directory with the files already in place, like if they were installed in the user machine, if you with to create a binary only package.

To build a binary package open a spec file with Emacs text editor. On Emacs open the menu "RPM spec" --> "RPM Build" --> "Build Binary Package". This will create a .rpm file under the directory RPM/RPMS

Bellow is a spec file that doesn't build the software. In this case the software is a Braille Course composed of html and Macromedia Flash files. Flash files cannot be build on Linux, so it's not possible to create a source package in this case.

%define name    braillevirtual 
%define version 1.0 
%define release mdk 
%define dir     braillevirtual
%define root    /home/felipe/tmp/ROOT/

Summary:   Curso On-Line de Braille
Name:      %{name}
Version:   %{version}
Release:   %{release}
Vendor:    Laboratório de Brinquedos da Faculdade de Educação da USP
URL:       www.braillevirtual.fe.usp.br
License:   Distribuível livremente
Group:     Books/Other
Packager:  Felipe Monteiro de Carvalho
Source0:   home/felipe/Programacao/SOURCES/braillevirtual.tar.bz2
BuildRoot: %{root}

O Braille Virtual é um curso on-line público e gratuito destinado à difusão e ensino do sistema Braille de leitura e escrita para cegos a pessoas que vêem. É orientado especialmente a pais, crianças, professores e funcionários de escolas inclusivas e pretende facilitar a comunicação entre estas pessoas e as pessoas com cegueira.

cp braillevirtual.tar.bz2 $RPM_BUILD_DIR
rm -rf %{dir}
rm -f braillevirtual.tar
bunzip2 -d braillevirtual.tar.bz2
tar -xvf braillevirtual.tar

rm -rf $RPM_BUILD_ROOT/usr/share/%{dir}
cp -r $RPM_BUILD_DIR/%{dir} $RPM_BUILD_ROOT/usr/share/

rm -rf $RPM_BUILD_DIR/*.*



* Mon Oct 24 2005 1.0-mdk.noarch.rpm

- Nova atualização do pacote de instalação. Inclusão dos exercícios avançados.

* Wed May 12 2005 1.0-mdk.noarch.rpm

- Atualizei o pacote para refletir as mudanças no site. Várias pequenas mudanças.

* Sun May 05 2005 1.0-1mdk.i586.rpm

- O pacote de instalação do braille Virtual para linux é criado.

Creating a source and binary package

Linux distributions only accept RPM packages that can build the software. This will probably require creating build scripts and/or a Makefile. For more information see the section Deploying_Your_Application#Creating_a_Makefile_for_your_Lazarus_software.

You need to use the %build section to compile the software.

Bellow is an example of a spec file capable of building the software. Be very careful when studing this as every little detail is important and follows a precise pattern.

Name:           magnifier
Version:        3.2.1
Release:        1
Summary:        Virtual Magnifying Glass
Group:          Accessibility
License:        GPL Version 2
URL:            http://magnifier.sourceforge.net
Source0:        http://internap.dl.sourceforge.net/sourceforge/magnifier/magnifier-3.2.1.zip
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires:  fpc >= 2.0.2, lazarus >= 0.9.12
Requires:       ImageMagick


Virtual Magnifying Glass is a free, open source, multiplatform, screen magnification tool. It is simple, customizable, and easy-to-use.

%setup -q magnifier

make TARGET=%{_target_cpu}





* Wed Feb 15 2006 Felipe Monteiro de Carvalho <felipemonteiro.carvalho at gmail.com> - 3.2-mdk.i386.rpm
- The Linux RPM package is created.

Creating a Debian Package on Linux

Please, write me.

In the mean time have a look at this tutorial written by IBM.

Automating the creation of RPM and DEB packages

To simplify the work of creating RPM and DEB packages one can create a script which generates them, just like is done here:



GUInseng is a a GTK+ based installer for Linux released under GPL.

The Zero Install system

The Zero Install system is a Python based install system that aims to provide a better way of installing software than traditional systems (tarballs, apt-get, bundles, setup.exe, etc).

Creating a Makefile for your Lazarus software

The following is a command line build system for a Lazarus software. This is particularly useful if you wish to create an RPM package suitable for including on GNU/Linux distributions. The comments on the files should explain what each part does.


# Detects and parses the architecture

ARCH=$(uname -m)

case "$ARCH" in

 "i686") ARCH="i386";;

 "i586") ARCH="i386";;

 "i486") ARCH="i386";;


echo "Target architecture: $ARCH"

# Detects and parses the OS


echo "Target operating system: $OS"

# Command line to build the sofware

fpc -S2cgi -OG1 -gl -WG -vewnhi -l -Fu/usr/lib/lazarus/components/opengl/gtk2x11/ -Fi/usr/lib/lazarus/components/opengl/gtk2x11/include/ -Fu/usr/lib/lazarus/components/jpeg/ -Fu/usr/lib/lazarus/lcl/units/$ARCH-$OS/ -Fu/usr/lib/lazarus/lcl/units/$ARCH-$OS/ -Fu/usr/lib/lazarus/lcl/units/$ARCH-$OS/gtk2/ -Fu/usr/lib/lazarus/packager/units/$ARCH-$OS/ -Fu. -o./magnifier -dLCL -dLCLgtk2 magnifier.dpr


# Parses command line options. Currently supported options are:
# DESTDIR		Destination root directory


for arg; do

  case $arg in




# Does the install
# "mkdir -p" is equivalent to ForceDirectories pascal function

mkdir -p $DESTDIR/usr/share/magnifier

cp ./topleft.bmp $DESTDIR/usr/share/magnifier/
cp ./topright.bmp $DESTDIR/usr/share/magnifier/
cp ./bottomleft.bmp $DESTDIR/usr/share/magnifier/
cp ./bottomright.bmp $DESTDIR/usr/share/magnifier/
cp ./top.bmp $DESTDIR/usr/share/magnifier/
cp ./left.bmp $DESTDIR/usr/share/magnifier/
cp ./bottom.bmp $DESTDIR/usr/share/magnifier/
cp ./right.bmp $DESTDIR/usr/share/magnifier/
cp ./icon3.ico $DESTDIR/usr/share/magnifier/

mkdir -p $DESTDIR/usr/bin

cp ./magnifier $DESTDIR/usr/bin/


rm -rf *.o
rm -rf *.ppu

rm -rf *.pas~
rm -rf *.sh~
rm -rf *.bak

rm -rf *~

rm -rf magnifier


# Don´t use "rm -rf" in here, because you should only remove the files you created
rm -f /usr/share/magnifier/topleft.bmp
rm -f /usr/share/magnifier/topright.bmp
rm -f /usr/share/magnifier/bottomleft.bmp
rm -f /usr/share/magnifier/bottomright.bmp
rm -f /usr/share/magnifier/top.bmp
rm -f /usr/share/magnifier/left.bmp
rm -f /usr/share/magnifier/bottom.bmp
rm -f /usr/share/magnifier/right.bmp
rm -f /usr/share/magnifier/icon3.ico

rm -f /usr/share/magnifier/magnifier

rm -f /usr/bin/magnifier

rmdir /usr/share/magnifier


# Targets

# The First target is the one build when there is nothing on make command line




Mac OS X installers

An Application Bundle

Most OS X programs are distributed as a disk image file (.dmg extension). Normally you download or copy a program's .dmg file to your Mac and double-click it. This "mounts" the disk image and opens it in a window on the desktop, where you'll typically see an application bundle as described in the previous point. To install, a user simply has to drag this bundle to his hard drive, and uninstalling consists of deleting the bundle. You get bonus points in case the application can also run directly from the (read-only) disk image.

See Application Bundle for information on how to create an application bundle.

Once the installation is complete, you "unmount" (eject) the mounted disk image by dragging it to the trash. You can also delete the .dmg file by dragging it to the trash as well.

You can also read this guide to create a fancy disk image.

Using PackageMaker on Mac OS X

If you absolutely require that several files are installed in different locations, then (and only then!) should you create a package file (.pkg extension). This package file can then be moved, downloaded or emailed. Once the end user has it, they can double-click the package and the Installer.app is launched, which will perform the installation.

The installer .pkg file is actually a directory, as is the resulting application bundle (.app extension) that it copies to the Applications folder. To the user, .pkg and .app files look and act like ordinary files, but they're really directories whose details have been hidden from the user. You can see what's inside a .pkg or .app file by entering normal cd commands in a terminal window (for example, cd progname.app) or by Ctrl-clicking the file and choosing Show Package Contents from the popup menu.

You create .pkg files using PackageMaker, which is installed along with the Xcode tools in /Developer/Applications/Utilities. With PackageMaker, you select the folder containing the files you want to package and set other installation options, for example whether a password must be entered to install the program. Note that the folder you select can be an .app file. Choose File | Create Package to create the .pkg file. You can also save your settings for future use in PackageMaker by choosing File | Save to create a .pmsp file that you name (.pmproj with later versions).

To create a .dmg file, run the OS X Disk Utility, which is installed in /Applications/ Utilities. Select Images | New | Image from Folder and choose the folder containing your .pkg file and any other files you want to include in the disk image. In the Convert Image dialog, enter the name of the .dmg file to create, select where it should be saved, and select "compressed" as the image format. The .dmg file that Disk Utility creates is then ready for distribution.

Installing X11 and GTK on Mac OS X

GUI apps created with Lazarus that use the GTK widgetset require X11 and the GTK libraries to run. X11 is included with Mac OS X, but is installed by default on a user's Mac only with Mac OS X 10.5 and later. Even then, the user might have decided not to install it, so you'll want to mention this in your app's readme file.

To install the GTK libraries on a user's system, you should include instructions for using Fink or MacPorts. Do not manually package the libraries and install those in the default Fink/MacPorts locations, because then they may be overwritten in case the user decides to install one of these distributions. A good practice is to put those libraries in the application bundle itself, which requires using the install_name_tool program. Putting them somewhere else is possible, but in most cases not conform to the Apple Guidelines as well as not what users expect. Before simply using directories common to other systems, you should carefully read the guidelines about the file system layout File System Overview.