From: Keith Packard Date: Sun, 16 Feb 2014 21:01:29 +0000 (-0800) Subject: Add linux installer script X-Git-Tag: 1.3.2.2~186^2 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=de2a619900ee23911c866d5aaff63a0f9388bfc7;hp=-c Add linux installer script Create a linux installer shell script that unpacks the archive in a sensible place and adds a .desktop file to the environment Signed-off-by: Keith Packard --- de2a619900ee23911c866d5aaff63a0f9388bfc7 diff --git a/altosui/Makefile.am b/altosui/Makefile.am index 32a3df97..20b234ab 100644 --- a/altosui/Makefile.am +++ b/altosui/Makefile.am @@ -171,6 +171,7 @@ DOC=$(ALTUSMETRUM_DOC) $(ALTOS_DOC) $(TELEMETRY_DOC) $(TEMPLATE_DOC) # Distribution targets LINUX_DIST=Altos-Linux-$(VERSION).tar.bz2 +LINUX_SH=Altos-Linux-$(VERSION).sh MACOSX_DIST=Altos-Mac-$(VERSION).dmg WINDOWS_DIST=Altos-Windows-$(VERSION_DASH).exe @@ -179,7 +180,7 @@ FAT_FILES=$(FATJAR) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) $(JFR LINUX_LIBS=libaltos32.so libaltos64.so LINUX_FILES=$(FAT_FILES) $(LINUX_LIBS) $(FIRMWARE) $(DOC) -LINUX_EXTRA=altosui-fat +LINUX_EXTRA=altosui-fat ../debian/altos.desktop ../debian/altusmetrum.xpm MACOSX_INFO_PLIST=Info.plist MACOSX_FILES=$(FAT_FILES) libaltos.dylib $(MACOSX_INFO_PLIST) $(DOC) ReadMe-Mac.rtf @@ -191,7 +192,7 @@ all-local: classes/altosui $(JAR) altosui altosui-test altosui-jdb clean-local: -rm -rf classes $(JAR) $(FATJAR) \ - $(LINUX_DIST) $(MACOSX_DIST) windows $(WINDOWS_DIST) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) \ + $(LINUX_DIST) $(LINUX_SH) $(MACOSX_DIST) windows $(WINDOWS_DIST) $(ALTOSLIB_CLASS) $(ALTOSUILIB_CLASS) $(FREETTS_CLASS) \ $(JFREECHART_CLASS) $(JCOMMON_CLASS) $(LIBALTOS) Manifest.txt Manifest-fat.txt altos-windows.log altos-windows.nsi \ altosui altosui-test altosui-jdb macosx linux @@ -200,15 +201,20 @@ if FATINSTALL FATTARGET=$(FATDIR)/$(VERSION) LINUX_DIST_TARGET=$(FATTARGET)/$(LINUX_DIST) +LINUX_SH_TARGET=$(FATTARGET)/$(LINUX_SH) MACOSX_DIST_TARGET=$(FATTARGET)/$(MACOSX_DIST) WINDOWS_DIST_TARGET=$(FATTARGET)/$(WINDOWS_DIST) -fat: $(LINUX_DIST_TARGET) $(MACOSX_DIST_TARGET) $(WINDOWS_DIST_TARGET) +fat: $(LINUX_DIST_TARGET) $(LINUX_SH_TARGET) $(MACOSX_DIST_TARGET) $(WINDOWS_DIST_TARGET) $(LINUX_DIST_TARGET): $(LINUX_DIST) mkdir -p $(FATTARGET) cp -p $< $@ +$(LINUX_SH_TARGET): $(LINUX_SH) + mkdir -p $(FATTARGET) + cp -p $< $@ + $(MACOSX_DIST_TARGET): $(MACOSX_DIST) mkdir -p $(FATTARGET) cp -p $< $@ @@ -218,7 +224,7 @@ $(WINDOWS_DIST_TARGET): $(WINDOWS_DIST) cp -p $< $@ else -fat: $(LINUX_DIST) $(MACOSX_DIST) $(WINDOWS_DIST) +fat: $(LINUX_DIST) $(LINUX_SH) $(MACOSX_DIST) $(WINDOWS_DIST) endif @@ -329,10 +335,16 @@ $(LINUX_DIST): $(LINUX_FILES) $(LINUX_EXTRA) -rm -rf linux mkdir -p linux/AltOS cp -p $(LINUX_FILES) linux/AltOS + sed -e 's;/usr/bin;%BIN%;' -e 's;/usr/share/pixmaps;%BIN%;' $(srcdir)/../debian/altos.desktop > linux/AltOS/altos.desktop.in + cp -p $(srcdir)/../debian/altusmetrum.xpm linux/AltOS/altusmetrum.xpm cp -p altosui-fat linux/AltOS/altosui chmod +x linux/AltOS/altosui tar cjf $@ -C linux AltOS +$(LINUX_SH): $(LINUX_DIST) linux-install.sh + cat linux-install.sh $(LINUX_DIST) > $@ + chmod +x $@ + $(MACOSX_DIST): $(MACOSX_FILES) $(MACOSX_EXTRA) Makefile -rm -f $@ -rm -rf macosx diff --git a/altosui/linux-install.sh b/altosui/linux-install.sh new file mode 100644 index 00000000..c5101eb4 --- /dev/null +++ b/altosui/linux-install.sh @@ -0,0 +1,190 @@ +#!/bin/sh + +can_ask=y + +finish() +{ + if [ "$can_ask" = "y" ]; then + echo "" + echo -n "Press enter to continue..." + read foo + fi + exit $1 +} + +# +# Make sure we have a terminal to talk to +# + +if tty -s; then + : +else + case "$DISPLAY" in + "") + echo 'No user input available' + can_ask=n + ;; + *) + GUESS_XTERMS="x-terminal-emulator xterm rxvt roxterm gnome-terminal dtterm eterm Eterm kvt konsole aterm" + for a in $GUESS_XTERMS; do + if type $a >/dev/null 2>&1; then + XTERM=$a + break + fi + done + case "$XTERM" in + "") + echo 'No terminal emulator available' + can_ask=n + ;; + *) + exec "$XTERM" -e "sh '$0'" + ;; + esac + ;; + esac +fi + +# +# Make sure we can run java +# + +echo -n "Checking for java..." + +if java -version > /dev/null 2>&1; then + echo " found it." +else + echo " java isn't working." + echo "" + echo "You'll need to install a java runtime system" + echo "on this computer before AltOS will work properly." + finish 1 +fi + +# +# Pick an installation target +# + +if [ '(' -d /opt -a -w /opt ')' -o '(' -d /opt/AltOS -a -w /opt/AltOS ')' ]; then + target_default=/opt +else + target_default="$HOME" +fi + +case "$#" in +0) + echo -n "Installation location [default: $target_default] " + if [ "$can_ask" = "y" ]; then + read target + else + echo "" + target="" + fi + case "$target" in + "") + target="$target_default" + ;; + esac + ;; +*) + target="$1" + ;; +esac + +target_altos="$target"/AltOS + +echo -n "Installing to $target..." + +# +# Make sure the target exists +# +mkdir -p "$target_altos" + +if [ ! -d "$target_altos" ]; then + echo "$target_altos does not exist and cannot be created" + finish 1 +fi + +if [ ! -w "$target_altos" ]; then + echo "$target_altos cannot be written" + finish 1 +fi + +# +# Unpack the tar archive appended to the end of this script +# +archive_line=`awk '/^__ARCHIVE_BELOW__/ {print NR + 1; exit 0; }' "$0"` + +tail -n+$archive_line "$0" | tar xjf - -C "$target" + +case $? in +0) + echo " done." + ;; +*) + echo "Install failed." + finish 1 + ;; +esac + +# +# Create the .desktop file by editing the paths +# +case "$target" in +/*) + target_abs="$target" + ;; +*) + target_abs=`pwd`/$target + ;; +esac + +BIN="$target_abs"/AltOS + +desktop="$target"/AltOS/altos.desktop + +rm -f "$desktop" +sed "s;%BIN%;$BIN;" "$target"/AltOS/altos.desktop.in > "$desktop" + +# +# Figure out where to install the .desktop file. If we can, write it +# to the public /usr/share/applications, otherwise, write it to the +# per-user ~/.local/share/applications +# + +public=/usr/share/applications +private=$HOME/.local/share/applications +apps="" + +if [ -d "$public" -a -w "$public" ]; then + apps="$public" +else + mkdir -p "$private" >/dev/null 2>&1 + if [ -d "$private" -a -w "$private" ]; then + apps="$private" + fi +fi + +case "$apps" in +"") + echo "Cannot install application icon" + finish 1 + ;; +esac + +echo -n "Installing .desktop file to $apps..." + +cp "$desktop" "$apps" + +case "$?" in +0) + echo " done." + ;; +*) + echo " failed." + ;; +esac + +finish 0 + +__ARCHIVE_BELOW__