This handy NSIS installer script installs both OpenVPN as well as a set of configuration data. It makes it super easy to package and distribute OpenVPN and Configurations to Windows users (like in a corporate environment)

Building OpenVPN Installer

These commands will be executed from the Windows command line, these for example come from our make.bat file.

c:\Program Files\NSIS\makensis.exe \
    /Doutput_exe="vpn-output.exe" \
    /Dclient_cfg="vpn-config" \
    edoceo_openvpn_installer.nsi

Update the comamnd to substitue the desired configuration directory for vpn-config. Also, other files will need to be preset, such as logo icons or images.<

OpenVPN Installer Directory Structure

./edoceo_openvpn_installer.nsi
./images/logo.bmp
./images/logo.ico
./images/logo.png
./make.bat
./source
./source/openvpn-2.2.2-install.exe
./vpn-config
./vpn-config/ca.crt
./vpn-config/client.crt
./vpn-config/client.key
./vpn-config/client.ovpn
./vpn-config/dh.pem
./vpn-config/ta.key

Nullsoft Installer for OpenVPN

#
# OpenVPN Application and Configuration Installer
# @version $Id$
#

# Set Defaults
# Allows for /DOUTPUT_EXE=something.exe /DCLIENT_CFG=config\file.cfg

!ifndef CONFIG_DIR
    !define CONFIG_DIR "config"
!endif

!ifndef OUTPUT_EXE
    !define OUTPUT_EXE "vpn-install.exe"
!endif

BrandingText "Edoceo OpenVPN Installer"
Caption "Edoceo Automagic OpenVPN Installer"
CompletedText "Edoceo Automagic OpenVPN Installation Complete"
# ComponentText "OpenVPN"
Icon images\logo.ico
InstallColors 336699 333333
InstProgressFlags colored smooth
Name "OpenVPN Installer"
OutFile ${OUTPUT_EXE}
RequestExecutionLevel admin
ShowInstDetails show
XPStyle off
# TargetMinimalOS 5.1

Section ""

#    Var /GLOBAL targetdir

    # Maybe warn that directory is not here?
    # @todo check for OpenVPN Dir in Registry

    DetailPrint "Checking OpenVPN"
    IfFileExists "$PROGRAMFILES32\OpenVPN\bin\openvpn-gui-1.0.3.exe" goodVPN failVPN
    failVPN:
        MessageBox MB_OK "We must install OpenVPN First, please complete the following installer choosing Next or Continue as necessary"
        SetOutPath $EXEDIR
        DetailPrint "Extracting OpenVPN $OUTDIR"
        # Bundle OpenVPN Installer
        File source\openvpn-2.2.2-install.exe
        # ExecShell "open" "$EXEDIR\openvpn-2.1.1-install.exe"
        ExecWait "$EXEDIR\openvpn-2.2.2-install.exe" $0
        # Zero == Success, One == Fail, handle
        IntCmp $0 0 goodInstall
            DetailPrint "Failed to Install: $0"
            MessageBox MB_OK|MB_ICONSTOP "Failed to install OpenVPN, this is required to continue. Installation aborted."
            Quit
        goodInstall:
        Goto doneVPN
    goodVPN:
        DetailPrint "OpenVPN Already Installed"
    doneVPN:

    # @todo read registry for install values?
    # @todo find the registry entries for the OpenVPN configuration
    # ReadRegStr $0 HKLM Software\
    # SetOutPath $0
    SetOutPath "$PROGRAMFILES32\OpenVPN\config"

    # Full contents of Config
    File /r /x .svn ${CONFIG_DIR}

    # un-installer
    WriteUninstaller "$EXEDIR\remove-edoceo-openvpn.exe"

SectionEnd