# Julia kernel on JupyterHub system-wide LDAP

**URL:** <https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809>\
**Category:** General Usage\
**Tags:** ldap\
**Created:** [September 11, 2018, 1:01pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809 "2018-09-11T13:01:19Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![New1nd](https://avatars.discourse-cdn.com/v4/letter/n/958977/32.png) [@New1nd](https://discourse.julialang.org/u/New1nd)\
**Post date:** [September 11, 2018, 1:01pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/1 "2018-09-11T13:01:19Z")

</div>

Hello,

OS : Debian 9.5  
Julia : Version 1.0  
I’m trying to make Julia kernel work on my JupyterHub. I need the kernel to work for multiple users and not only for the local user / root. I configured JupyterHub with an LDAP authentificator and works fine.  
Here is what i’have done at the moment and the error that i’m getting :

```julia
[user@serv:~]$ tar xvf julia-1.0.0-linux-x86_64.tar.gz
[user@serv:~]$ sudo mv julia-*/ /opt/
[user@serv:~]$ sudo ln -s /opt/julia-*/bin/julia /usr/local/bin/julia
[user@serv:~]# source activate jupenv
(jupenv) [user@serv:~]# julia
julia> using Pkg
julia> Pkg.add("IJulia")
   Cloning default registries into /root/.julia/registries
   Cloning registry General from "https://github.com/JuliaRegistries/General.git"
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...
 Installed Conda ─────────── v1.0.1
 Installed IJulia ────────── v1.11.1
 Installed Compat ────────── v1.1.0
 Installed MbedTLS ───────── v0.6.0
 Installed BinaryProvider ── v0.4.2
 Installed VersionParsing ── v1.1.2
 Installed ZMQ ───────────── v1.0.0
 Installed SoftGlobalScope ─ v1.0.4
 Installed JSON ──────────── v0.19.0
  Updating `~/.julia/environments/v1.0/Project.toml`
  [7073ff75] + IJulia v1.11.1
  Updating `~/.julia/environments/v1.0/Manifest.toml`
  [b99e7846] + BinaryProvider v0.4.2
  [34da2185] + Compat v1.1.0
  [8f4d0f93] + Conda v1.0.1
  [7073ff75] + IJulia v1.11.1
  [682c06a0] + JSON v0.19.0
  [739be429] + MbedTLS v0.6.0
  [b85f4697] + SoftGlobalScope v1.0.4
  [81def892] + VersionParsing v1.1.2
  [c2297ded] + ZMQ v1.0.0
  [2a0f44e3] + Base64 
  [ade2ca70] + Dates 
  [8bb1440f] + DelimitedFiles 
  [8ba89e20] + Distributed 
  [7b1f6079] + FileWatching 
  [b77e0a4c] + InteractiveUtils 
  [76f85450] + LibGit2 
  [8f399da3] + Libdl 
  [37e2e46d] + LinearAlgebra 
  [56ddb016] + Logging 
  [d6f4376e] + Markdown 
  [a63ad114] + Mmap 
  [44cfe95a] + Pkg 
  [de0858da] + Printf 
  [3fa0cd96] + REPL 
  [9a3f8284] + Random 
  [ea8e919c] + SHA 
  [9e88b42a] + Serialization 
  [1a1011a3] + SharedArrays 
  [6462fe0b] + Sockets 
  [2f01184e] + SparseArrays 
  [10745b16] + Statistics 
  [8dfed614] + Test 
  [cf7118a7] + UUIDs 
  [4ec0a83e] + Unicode 
  Building Conda ──→ `~/.julia/packages/Conda/m7vem/deps/build.log`
  Building ZMQ ────→ `~/.julia/packages/ZMQ/ABGOx/deps/build.log`
  Building MbedTLS → `~/.julia/packages/MbedTLS/Qo8TN/deps/build.log`
  Building IJulia ─→ `~/.julia/packages/IJulia/k5o7j/deps/build.log`
[user@serv:~]# mkdir /usr/local/share/jupyter/kernels/julia-1.0.0
[user@serv:~]# cp /home/user/.julia/packages/IJulia/k5o7j/src/kernel.jl /usr/local/share/jupyter/kernels/julia-1.0.0/
[user@serv:~]# cp /home/user/.local/share/jupyter/kernels/julia-1.0/kernel.json /usr/local/share/jupyter/kernels/julia-1.0.0/
[user@serv:~]# cp /home/user/.local/share/jupyter/kernels/julia-1.0/logo-32x32.png /usr/local/share/jupyter/kernels/julia-1.0.0/
[user@serv:~]# cp /home/user/.local/share/jupyter/kernels/julia-1.0/logo-64x64.png /usr/local/share/jupyter/kernels/julia-1.0.0/
[user@serv:~]# nano /usr/local/share/jupyter/kernels/julia-1.0.0/kernel.json

{
  "display_name": "Julia 1.0.0",
  "argv": [
    "/opt/julia-1.0.0/bin/julia",
    "-i",
    "--startup-file=yes",
    "--color=yes",
    "/usr/local/share/jupyter/kernels/julia-1.0.0/kernel.jl",
    "{connection_file}"
  ],
  "language": "julia"
}

```

Error that JupyterHub displays :

```julia
ERROR: LoadError: ArgumentError: Package IJulia not found in current path:
- Run `Pkg.add("IJulia")` to install the IJulia package.

Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:817
 [2] include at ./boot.jl:317 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1038
 [4] include(::Module, ::String) at ./sysimg.jl:29
 [5] exec_options(::Base.JLOptions) at ./client.jl:229
 [6] _start() at ./client.jl:421
in expression starting at /usr/local/share/jupyter/kernels/julia-1.0.0/kernel.jl:1

```

I would like to know the right way to make the Julia kernel work on JupyterHub and make it work for all users with out errors or crashs.

Best regards.

---

<div class="post-metadata">

**Author:** ![svaksha](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/svaksha/32/881_2.png) [@svaksha](https://discourse.julialang.org/u/svaksha)\
**Post date:** [September 11, 2018, 1:54pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/2 "2018-09-11T13:54:49Z")

</div>

@New1nd, from, [Pkg · The Julia Language](https://docs.julialang.org/en/v1.0.0/stdlib/Pkg/#Pkg.add), The Pkg REPL-mode is entered from the Julia REPL using the key ]. Once there, try to add IJulia again with the command `add IJulia`.

---

<div class="post-metadata">

**Author:** ![New1nd](https://avatars.discourse-cdn.com/v4/letter/n/958977/32.png) [@New1nd](https://discourse.julialang.org/u/New1nd)\
**Post date:** [September 11, 2018, 2:43pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/3 "2018-09-11T14:43:29Z")

</div>

@svaksha

```julia
(v1.0) pkg> add IJulia
  Updating registry at `~/.julia/registries/General`
  Updating git-repo `https://github.com/JuliaRegistries/General.git`
 Resolving package versions...
  Updating `~/.julia/environments/v1.0/Project.toml`
 [no changes]
  Updating `~/.julia/environments/v1.0/Manifest.toml`
 [no changes]

```

While running JupyterHub when i want to use Julia kernel i still got the same error :

```julia
ERROR: LoadError: ArgumentError: Package IJulia not found in current path:
- Run `Pkg.add("IJulia")` to install the IJulia package.

Stacktrace:
 [1] require(::Module, ::Symbol) at ./loading.jl:817
 [2] include at ./boot.jl:317 [inlined]
 [3] include_relative(::Module, ::String) at ./loading.jl:1038
 [4] include(::Module, ::String) at ./sysimg.jl:29
 [5] exec_options(::Base.JLOptions) at ./client.jl:229
 [6] _start() at ./client.jl:421
in expression starting at /usr/local/share/jupyter/kernels/julia-1.0.0/kernel.jl:1

```

---

<div class="post-metadata">

**Author:** ![barche](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barche/32/79_2.png) [@barche](https://discourse.julialang.org/u/barche)\
**Post date:** [September 11, 2018, 6:49pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/4 "2018-09-11T18:49:05Z")

</div>

Is the first installation command running as the same user as the jupyterhub notebook? I am using jupyterhub with a docker image for the user servers, I can share the Dockerfile if this would be a solution for you.

---

<div class="post-metadata">

**Author:** ![New1nd](https://avatars.discourse-cdn.com/v4/letter/n/958977/32.png) [@New1nd](https://discourse.julialang.org/u/New1nd)\
**Post date:** [September 12, 2018, 7:38am UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/5 "2018-09-12T07:38:59Z")

</div>

@barche No it isn’t. When i launch the JupyterHub server only for the local users on the system, everything works fine. When i launch it with an LDAP authenticator configuration, users can only run Python and R kernels, JupyterHub displays that IJulia is not installed when a user wants to use Julia kernel.

I would like to make the Julia kernel work system-wide like Python and R. In R you can do this command `installspec(user = FALSE)` to make it work system-wide. What can i do to make something equivalent to that command with an LDAP configuration ?

Here is my JupyterHub configuration for a better understanding :

```julia
c.LDAPAuthenticator.bind_dn_template = ' ***********************'
c.LDAPAuthenticator.user_search_base = ' ******************'
c.LDAPAuthenticator.user_attribute = ' ******************'
c.LDAPAuthenticator.server_address = ' *******************'
c.LDAPAuthenticator.lookup_dn = False
c.LDAPAuthenticator.lookup_dn_user_dn_attribute = ' *************************'
c.LDAPAuthenticator.escape_userdn = False

c.LocalAuthenticator.create_system_users = True
c.LocalAuthenticator.add_user_cmd = ['adduser', '-q', '--home', '/students/USERNAME', '--gecos', '""', '--disabled-password', '--force-badname']

c.JupyterHub.allow_named_servers = False
c.JupyterHub.authenticator_class = 'ldapauthenticator.ldapauthenticator.LDAPLocalAuthenticator'
c.JupyterHub.bind_url = ' ******************'
c.JupyterHub.default_url = '/hub/home'
c.JupyterHub.proxy_class = 'jupyterhub.proxy.ConfigurableHTTPProxy'
c.JupyterHub.ssl_cert = '/etc/ssl/ **************.******.crt'
c.JupyterHub.ssl_key = '/etc/ssl/ *******.key'
c.JupyterHub.subdomain_host = ' *******************'

c.Spawner.default_url = '/tree'

c.Authenticator.admin_users = [' *****', '***********', ' **********']

```

---

<div class="post-metadata">

**Author:** ![barche](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/barche/32/79_2.png) [@barche](https://discourse.julialang.org/u/barche)\
**Post date:** [September 12, 2018, 11:15am UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/6 "2018-09-12T11:15:57Z")

</div>

> [@New1nd](#):
>
> I would like to make the Julia kernel work system-wide like Python and R. In R you can do this command `installspec(user = FALSE)` to make it work system-wide. What can i do to make something equivalent to that command with an LDAP configuration ?

I think you can use the `JULIA_DEPOT_PATH` environment variable ([documentation](https://docs.julialang.org/en/v1/stdlib/Pkg/)) for that. If you set this to a globally visible location (e.g. `/opt/julia-depot` or something) when installing IJulia from the console, it should install everything there. For the ldap users, you then need to make sure this path is appended to `JULIA_DEPOT_PATH`, since the first entry is expected to be a user-writable location.

---

<div class="post-metadata">

**Author:** ![New1nd](https://avatars.discourse-cdn.com/v4/letter/n/958977/32.png) [@New1nd](https://discourse.julialang.org/u/New1nd)\
**Post date:** [September 13, 2018, 1:17pm UTC](https://discourse.julialang.org/t/julia-kernel-on-jupyterhub-system-wide-ldap/14809/7 "2018-09-13T13:17:52Z")

</div>

@barche Thank you. It works fine now. 👌
