| installdir="$HOME/.eclipsesettings" |
| if test ! -d $installdir; then |
| mkdir $installdir |
| if test ! -d $installdir; then |
| echo fail:cannot create $installdir |
| exit 1 |
| fi |
| fi |
| cat > $installdir/bootstrap.sh <<-\EOF |
| #!/bin/sh |
| installdir="$HOME/.eclipsesettings" |
| proxytmp=$installdir/proxy.b64 |
| success=false |
| |
| cleanup() { |
| rm -f $installdir/bootstrap.sh |
| } |
| |
| trap 'cleanup' EXIT |
| |
| parent_is_not_orphan () { |
| parent=`ps -ef|awk '$2=='$$'{print $3}'` |
| let parent=$parent+0 |
| if [[ $parent -eq 1 ]]; then |
| return 1 |
| fi |
| return 0 |
| } |
| |
| do_check() { |
| java_vers=`java -version 2>&1` |
| case "$java_vers" in |
| *"not found") |
| echo "fail:could not find a valid java installation" |
| return |
| ;; |
| esac |
| major=`expr "$java_vers" : ".* version \"\([0-9]*\)\.[0-9]*.*\""` |
| minor=`expr "$java_vers" : ".* version \"[0-9]*\.\([0-9]*\).*\""` |
| if test "$major" -ge 2 -o "$minor" -ge 8; then |
| : |
| else |
| echo "fail:invalid java version $major.$minor; must be >= 1.8" |
| return |
| fi |
| case "`uname`" in |
| Linux) |
| osname="linux"; |
| osarch=`uname -m`; |
| proxydir=$installdir/proxy; |
| plugins=$proxydir/plugins;; |
| Darwin) |
| osname="macosx"; |
| osarch=`uname -m`; |
| proxydir=$installdir/Proxy.app; |
| plugins=$proxydir/Contents/Eclipse/plugins;; |
| *) |
| echo fail:system not supported; |
| return;; |
| esac |
| proxy=not_found |
| if test -d $proxydir; then |
| bundle="org.eclipse.remote.proxy.server.core_$1.jar" |
| if test -f $plugins/$bundle; then |
| proxy=found |
| else |
| mv $proxydir $proxydir.pre_$1 |
| fi |
| fi |
| echo ok:$proxy/$osname/$osarch |
| } |
| |
| do_download() { |
| dd of=$proxytmp ibs=680 count=$1 |
| IFS= read -r last |
| echo "$last" >> $proxytmp |
| base64 --decode < $proxytmp | (cd $installdir && tar zxvf -) > /dev/null 2>&1 |
| if test $? -eq 0; then |
| echo ok |
| else |
| echo fail:download failed |
| fi |
| } |
| |
| # |
| # Start java in background so we can clean up after connection is dropped. The only way to tell if this |
| # has happened is to poll if ppid has changed to 1 (i.e. we no longer have a controlling terminal) |
| # |
| start_server() { |
| # enable debugoptions in order to attach a debugger |
| #debugoptions="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044,quiet=y" |
| |
| # use globbing to find launcher version |
| java -cp $plugins/org.eclipse.equinox.launcher_1.*.jar \ |
| $debugoptions \ |
| org.eclipse.equinox.launcher.Main \ |
| -application org.eclipse.remote.proxy.server.core.application \ |
| -noExit 0<&0 & |
| |
| pid=$! |
| |
| trap 'kill $pid; exit' HUP INT TERM |
| |
| while parent_is_not_orphan; do |
| sleep 10 |
| done |
| |
| kill $pid |
| } |
| |
| echo running |
| |
| while read line arg; do |
| case $line in |
| check) do_check $arg;; |
| download) do_download $arg;; |
| start) start_server;; |
| exit) break;; |
| *) echo fail:unrecognized command:$line; exit 1;; |
| esac |
| done |
| exit 0 |
| EOF |
| chmod 755 $installdir/bootstrap.sh |
| exec $installdir/bootstrap.sh |