Skip to content

Self Extracting Installer

Ziel des Ganzen ist ein Self Extracing Installer, also ein Archiv mit Installationsdateien das als Kopf das Installerskript enthält.

Zuerst ein Script erstellen, das die Logik enthält, hier ein sehr rudimentäres Beispiel:

#!/bin/bash

# Variable für den Installationspfad
INSTALL_LOCATION="/opt/my-userspace-program"

# Marker ab dem das Script endet und der Archivbereich beginnt
ARCHIVE=$(awk '/^__ARCHIVE__/ {print NR + 1; exit 0; }' "${0}")

# Ab marker ausgeben und tar in Zielverzeichnis entpacken
tail -n+${ARCHIVE} "${0}" | tar xpJ -C ${INSTALL_LOCATION}

Im Installer selbst ...

#!/bin/bash

# Installations Logik
echo "Doing some magic ..."

# Script beenden damit die Bash oder der entsprechende Shell-Interpreter nicht das Archiv ausführen ;)
exit 0

# Marker for archive begin
__ARCHIVE__

DIe Zusammenführung des Archivs und des Installers ist dann ein Kinderspiel. Am besten den Installer aber vorher kopieren ... ein Beispiel:

#!/bin/bash

TARGET_DIR="./dist"
cp installer.src.sh installer.sh

# Archiv packen
tar cJf $TARGET_DIR/installer.tar.xz --directory=src binary1 lib/*

# Archiv an Installer nach Marker anhängen
cat $TARGET_DIR/installer.tar.xz >> $TARGET_DIR/installer.sh

# Archiv entfernen
rm $TARGET_DIR/*.tar.xz