Transitioning from Ubuntu PPA to official binaries

I maintain my Julia installation from @staticfloat’s PPA, and I wish I could keep doing that.* However, it’s time for me to move on from version 0.5, which means I need to transition to the official binaries. How can I do this without creating version conflicts, or leaving obsolete junk files all over my system?

* Thank you, @staticfloat! Without the PPA, I might never have tried Julia.

Stability

Ideally, I’d like to make sure that I have at least one working Julia installation on my system at all times during the transition, because there’s no good time for my Julia code to be unavailable. I’d also like to be able to get back to my old system state if I really need to—for example, if I’m asked to run a program on short notice, and I discover that it no longer works under Julia 1.2.

Package files

Will the new package manager (introduced with Julia 1.0) respect the directory structure of ~/.julia set up by the old package manager, creating a v1.2 directory for the packages I install after the transition? If not, how do I transition to the new package manager?

Operating system integration

The newer Julia releases seem to live entirely in a single directory, but my installation has binaries scattered across many different directories, including

  • /usr/lib/x86_64-linux-gnu
  • /usr/bin
  • /usr/share
  • /usr/share/applications
  • /usr/share/lintian
  • /usr/share/doc
  • /usr/share/appdata
  • /usr/share/man
  • /usr/include
  • /usr/etc
  • /etc

Will Julia really still work the way I’m used to when all this stuff is gone?

It should be possible to install the official Julia binaries without interfering at all with your PPA-provided instlalation and without introducing any clutter. My process on linux is the following:

  • I download the official binaries from https://julialang.org/downloads/ and store them in a folder (I happen to use ~/apps, but you can put them anywhere you want). I keep each minor Julia version in a separate folder.
  • I then create a symlink in /usr/local/bin/ with the appropriate julia version. For example, I might do:
sudo ln -s /home/rdeits/apps/julia-1.2.0/bin/julia /usr/local/bin/julia-1.2

Having versioned symlinks means it’s easy to run different Julia versions, (e.g. running julia-1.2 or julia-0.7 as needed).

  • I then create one more symlink inside /usr/local/bin:
sudo ln -s julia-1.2 /usr/local/bin/julia

This means that when I run julia I get julia-1.2. I can then switch my “default” julia version just by changing that symlink.

And that’s it. Julia never needs to install anything system-wide, and all of the packages will live under separate folders inside ~/.julia, with separate folders for each minor version of Julia. None of the files installed by the PPA version of Julia will be necessary if you use the official binaries.

You also don’t need to do anything special to transition to the new package manager – it should just work and should not overwrite any of your packages from older Julia releases.

5 Likes

Unless you are maintaining a multi-user machine, just download and extract the tarball it wherever you like (eg I generally keep them in various directories like ~/src/julia-1.2), put it in the environment variable PATH, and you are done.

Some Linux users like to have a single directory for various scripts, eg ~/bin, and put that in PATH. In that case, just make a symlink to the Julia binary from there.

Generally it makes sense to keep multiple Julia binaries around, eg for testing on an earlier version, or trying out a pre-release, just name symlinks accordingly.

These may help:

The process described by @rdeits is essentially what we try to do in the script https://github.com/abelsiqueira/jill. We’d appreciate if you tried it.