AppImageCommunity / pkg2appimage

Tool and recipes to convert existing deb packages to AppImage
http://appimage.org
MIT License
694 stars 216 forks source link

Heads up: Feature request filed for Eclipse to provide its own AppImage #85

Open fusion809 opened 8 years ago

fusion809 commented 8 years ago

Hi,

I thought you's ought to know that I just filed a feature request at Eclipse's Bugzilla requesting that they provide AppImage builds for Eclipse: https://bugs.eclipse.org/bugs/show_bug.cgi?id=500802. To-be-honest I'm surprised that this repo provides IDEA Community Edition (IDEA-CE) as an AppImage but not Eclipse as Eclipse is more general-purpose with support for more programming languages than IDEA-CE (which only supports Java).

Thanks for your time, Brenton

fusion809 commented 8 years ago

I just wrote my own AppImage Recipe for Eclipse ftw, my first AppImage. Feel free to incorporate it into this repo.

probonopd commented 8 years ago

Yay, you got a response on the Eclipse bugtracker. Since I am not registered there, please leave a note there pointing them here; I am happy to help with any questions they might have.

I have already created AppImages for a number of substantial Java-based apps, including

and others.

fusion809 commented 8 years ago

Done. What about NetBeans? It's fairly popular and supports several programming languages.

probonopd commented 8 years ago

Haven't looked at it so far. Want to give it a try yourself?

fusion809 commented 8 years ago

Seems like a real challenge. See NetBeans on Linux is distributed as a shell script (that is over 100 MB in size, so there must be some binary components to it) and I don't know how to turn that into an AppImage. There are some zip archives provided but from what I can tell they're just for nightly developmental releases.

fusion809 commented 8 years ago

Nvm I've found some zip releases for the latest stable release (8.1) https://netbeans.org/downloads/zip.html. I'll see what I can do with 'em.

fusion809 commented 8 years ago

Success! I have made a NetBeans AppImage Recipe and built an AppImage from it. It's over 330 MB in size, so I can't upload it to Bintray (I get the error message Request Entity Too Large% when I try to).

probonopd commented 8 years ago

Can you slim it down, e.g., by removing documentation and/or examples?

fusion809 commented 8 years ago

Yep, good idea, I'll see what I can do.

fusion809 commented 8 years ago

I've cut it down to 288.875 MB, I could cut it down further by deleting locales, but that'll minimize its potential to be used by non-English speakers. Do you know if 288.875 MB is small enough for Bintray?

fusion809 commented 8 years ago

Nvm, I found out for myself, 250 MB is the size limit https://bintray.com/docs/usermanual/uploads/uploads_manuallyuploadingfilestoaversion.html.

fusion809 commented 8 years ago

OK, removing locales gets it down to 264 MB... Still too big. I've committed my latest edits to my Recipe in this effort to cut down its size, this is what I'm using atm to cut down its size (L38-L44):

find usr \
  -name "docs" -exec rm -rf '{}' \; \
  -or -name "*.exe" -exec rm '{}' \; \
  -or -name "*.pdf" -exec rm '{}' \; \
  -or -name "*.png" -exec rm '{}' \; \
  -or -name "locale" -exec rm -rf '{}' \; \
  -or -name "*.zip" -exec rm '{}' +

If you have any further suggestions I will be happy to hear them.

probonopd commented 8 years ago

Loop-mount the AppImage and run baobab on the mountpoint to see what consumes space...

fusion809 commented 8 years ago

Now whenever I try to launch NetBeans with this AppImage I get the error message:


Warning - could not install some modules: org.apache.commons.lang - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-commons-lang.jar: Not found bundle:org.apache.commons.lang org.apache.ws.commons.util - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-ws-commons-util.jar: Not found bundle:org.apache.ws.commons.util org.apache.commons.io - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-commons-io.jar: Not found bundle:org.apache.commons.io org.apache.commons.codec - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-commons-codec.jar: Not found bundle:org.apache.commons.codec org.apache.commons.logging - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-commons-logging.jar: Not found bundle:org.apache.commons.logging org.apache.commons.httpclient - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-commons-httpclient.jar: Not found bundle:org.apache.commons.httpclient org.apache.xmlrpc - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-apache-xmlrpc.jar: Not found bundle:org.apache.xmlrpc com.jcraft.jzlib - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/com-jcraft-jzlib.jar: Not found bundle:com.jcraft.jzlib com.googlecode.javaewah.JavaEWAH - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/com-googlecode-javaewah-JavaEWAH.jar: Not found bundle:com.googlecode.javaewah.JavaEWAH org.eclipse.equinox.common - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-equinox-common.jar: Not found bundle:org.eclipse.equinox.common org.eclipse.core.runtime.compatibility.auth - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-core-runtime-compatibility-auth.jar: Not found bundle:org.eclipse.core.runtime.compatibility.auth org.eclipse.core.jobs - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-core-jobs.jar: Not found bundle:org.eclipse.core.jobs org.eclipse.equinox.registry - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-equinox-registry.jar: Not found bundle:org.eclipse.equinox.registry org.eclipse.equinox.preferences - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-equinox-preferences.jar: Not found bundle:org.eclipse.equinox.preferences org.eclipse.core.contenttype - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-core-contenttype.jar: Not found bundle:org.eclipse.core.contenttype org.eclipse.equinox.app - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-equinox-app.jar: Not found bundle:org.eclipse.equinox.app com.jcraft.jsch - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/com-jcraft-jsch.jar: Not found bundle:com.jcraft.jsch org.eclipse.jgit - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-jgit.jar: Not found bundle:org.eclipse.jgit org.eclipse.core.runtime - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-core-runtime.jar: Not found bundle:org.eclipse.core.runtime org.eclipse.mylyn.wikitext.core - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-wikitext-core.jar: Not found bundle:org.eclipse.mylyn.wikitext.core org.eclipse.equinox.security - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-equinox-security.jar: Not found bundle:org.eclipse.equinox.security org.eclipse.core.net - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-core-net.jar: Not found bundle:org.eclipse.core.net org.eclipse.mylyn.commons.core - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-commons-core.jar: Not found bundle:org.eclipse.mylyn.commons.core org.eclipse.mylyn.commons.net - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-commons-net.jar: Not found bundle:org.eclipse.mylyn.commons.net org.eclipse.mylyn.commons.xmlrpc - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-commons-xmlrpc.jar: Not found bundle:org.eclipse.mylyn.commons.xmlrpc org.eclipse.mylyn.commons.repositories.core - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-commons-repositories-core.jar: Not found bundle:org.eclipse.mylyn.commons.repositories.core org.eclipse.mylyn.tasks.core - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-tasks-core.jar: Not found bundle:org.eclipse.mylyn.tasks.core org.eclipse.mylyn.bugzilla.core - org.netbeans.InvalidException: Netigso: /tmp/.mount_tCL0ki/usr/ide/modules/org-eclipse-mylyn-bugzilla-core.jar: Not found bundle:org.eclipse.mylyn.bugzilla.core

I have tried changing my Recipe back to the way it was before I started to delete unessential items, in case I deleted something I needed, but I still get the same error message upon launching the updated AppImage... Any ideas? Originally when I started creating NetBeans AppImages I didn't get this error message.

fusion809 commented 8 years ago

I have even tried switching to a different OS (namely I was using Arch Linux and I switched to Ubuntu), yet the error is still there.

probonopd commented 8 years ago

Eclipse AppImage is not working for me, kinda defeats the point; when run, it just says:

A Java Runtime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse-cpp. No Java virtual machine was found after searching the following locations: /tmp/.mount_1eFSCT/usr/bin/jre/bin/java. java in your current PATH

Please bundle a JRE like my examples do. An AppImage is supposed to be a standalone bundle.

fusion809 commented 8 years ago

How do ya bundle a JRE? I looked at your IDEA recipe and I can't see where a JRE is bundled in? https://github.com/probonopd/AppImages/blob/master/recipes/idea/Recipe. Is it in the ideaIC tarball?

fusion809 commented 8 years ago

Nvm I saw ya pycharm Recipe.

fusion809 commented 8 years ago

Done, fixed in commit #b0134a0

fusion809 commented 8 years ago

The problem now is that my Eclipse AppImage is too large to upload to Bintray. Although as a work-around I've uploaded it to my AppImages GitHub repo https://github.com/fusion809/AppImages/releases/tag/Eclipse-4.6.0-1.

probonopd commented 8 years ago

Please see my annotations in https://github.com/probonopd/AppImages/blob/master/recipes/eclipse/Recipe

fusion809 commented 8 years ago

Thanks, they were helpful. Although, hardcoding links is something that is kinda tricky, if I understand what you mean by 'hardcoding' in the first-place. If by hard-coding you mean how I use a link that doesn't auto-adjust when $VERSION is adjusted (as the neon in the URL refers to the 4.6.0 release), then well that's gonna be a challenge as code-names are used in the URL and I can hardly change the upstream URL of the tarball to change the codename for the version number. If you mean the fact I used a specific mirror, instead of a more general link well I'm not sure how to create a less mirror-specific link.

probonopd commented 8 years ago

What I mean is that the version should not be in the entire script. The script should get the latest version from the official release download pages. See my other examples on how to do this.

Also, JRE is not on the $PATH...

fusion809 commented 8 years ago

Yep I saw that comment in the Recipe, although not sure how to fix that. All I can think of is to move the jre binary contents to usr/bin.

fusion809 commented 8 years ago

I think there's something wrong with your functions.sh file too — I keep getting the error message:

rm: cannot remove '../out/eclipse-cpp-4.6.0-x86_64.AppImage': No such file or directory
['/tmp/.mount_K8NaM1/package', './eclipse-cpp.AppDir/', '../out/eclipse-cpp-4.6.0-.AppImage']
Icon could not be found based on information in desktop file, aborting

whenever I run this new Recipe.

probonopd commented 8 years ago

"Icon could not be found based on information in desktop file, aborting" means that your icon does not match the information in the desktop file. It is explained in https://github.com/AppImage/AppImageSpec/blob/master/draft.md#contents-of-the-image

Assuming the name of your app is "eclipse", then you should have Icon=eclipse in eclipse.desktop and eclipse.png in the root directory of the AppDir. Note that Icon=eclipse has no suffix.

fusion809 commented 7 years ago

@probonopd You seem like a magician when it comes to determining the latest version of a software from within a shell script, so I gotta ask can you come up with one for Eclipse? I have posted a question to this effect at the Eclipse forums, although I can't share it as it is still awaiting moderator approval.

fusion809 commented 7 years ago

Not sure, but maybe this web page https://www.eclipse.org/downloads/ is key to producing a shell command to determine this.

fusion809 commented 7 years ago

Oh hallelujah I managed it myself:

VERSION=$(wget -q https://www.eclipse.org/downloads/ -O - | grep "64" | head -n 1 | cut -d '"' -f 4 | cut -d '/' -f 8)

works, although it just gives me the code name 'neon' but that's enough to provide an auto-updating download link.

fusion809 commented 7 years ago

I'm getting an error:

**
Gtk:ERROR:/build/gtk+3.0-VoKwSM/gtk+3.0-3.20.9/./gtk/gtkiconhelper.c:493:ensure_surface_for_gicon: assertion failed: (destination)

it launches but then crashes giving this error. With the yaml:

app: eclipse-cpp

ingredients:
  script:
    - VERSION="$(wget -q https://www.eclipse.org/downloads/ -O - | grep "64" | head -n 1 | cut -d '"' -f 4 | cut -d '/' -f 8)"
    - echo $VERSION > VERSION
    - URL="http://mirror.internode.on.net/pub/eclipse/technology/epp/downloads/release/$VERSION/R/eclipse-cpp-$VERSION-R-linux-gtk-x86_64.tar.gz"
    - wget -c "$URL" --trust-server-names
    - tar zxvf eclipse*.gz
    - wget -c --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jre-8u66-linux-x64.tar.gz

script:
  - cp -r ../eclipse/* usr/bin/
  - mkdir -p usr/lib/jvm/
  - tar xf ../jre*.gz -C usr/lib/jvm/
  - mkdir -p bin
  - ( cd ./bin; ln -sf ../usr/lib/jvm/jre*/bin/java . )
  - cp ../../eclipse.png .
  - cat > eclipse-cpp.desktop <<EOF
  - [Desktop Entry]
  - Version=1.0
  - Type=Application
  - Name=Eclipse C++ IDE
  - Icon=eclipse
  - Exec=eclipse
  - Categories=Development;IDE;C;C++
  - Terminal=false
  - EOF
probonopd commented 7 years ago

And this doesn't happen if you use the same downloaded ingredients without AppImage?

fusion809 commented 7 years ago

On my Ubuntu 16.04 system on which I built the AppImage (which also has Eclipse installed so I'm not sure if you can trust this result) running usr/bin/eclipse.wrapper from the AppDir causes it to launch without difficulty, if that's what you're asking?

fusion809 commented 7 years ago

Oh wait a minute, in my 16.10 VM (without Eclipse or Java installed) it actually launches OK as standard user (non-root user). Just was as root it failed.

probonopd commented 7 years ago

yml file above errors for me with

+ mkdir -p usr/lib/jvm/
+ tar xf ../jre-8u66-linux-x64.tar.gz -C usr/lib/jvm/
+ mkdir -p bin
+ cd ./bin
+ ln -sf ../usr/lib/jvm/jre1.8.0_66/bin/java .
+ cp ../../eclipse.png .
cp: cannot stat '../../eclipse.png': No such file or directory
fusion809 commented 7 years ago

Doesn't for me as my repo has an eclipse.png in the same directory as my yaml.

probonopd commented 7 years ago

Why not make the recipe download that from an upstream location?

fusion809 commented 7 years ago

Minimizing possible future dead links. The image files aren't that big so doesn't add that much size to my repo.