diff --git a/docs/guides/user-environment.rst b/docs/guides/user-environment.rst new file mode 100644 index 0000000..45b4816 --- /dev/null +++ b/docs/guides/user-environment.rst @@ -0,0 +1,154 @@ +.. _user_environment: + +Customizing user environment +============================ + +:abbr:`TLJH (The Littlest JupyterHub)` starts all users in the same `conda `_ +environment. Packages / libraries installed in this environment are available +to all users on the JupyterHub. Users with :ref:`admin_access` can install packages +easily. + +.. _user_environment_pip: + +Installing pip packages +----------------------- + +`pip `_ is the recomended tool for installing packages +in Python from the `Python Packaging Index (PyPI) `_. PyPI has +almost 145,000 packages in it right now, so a lot of what you need is going to be there! + +1. Log in as an admin user and open a Terminal in your Jupyter Notebook. + + .. image:: ../images/new_terminal_button.png + :alt: New Terminal button under New menu + + If you already have a terminal open as an admin user, that should work too! + +2. Install a package! + + .. code-block:: bash + + sudo -E pip install numpy + + This installs the ``numpy`` library from PyPI and makes it available + to all users. + + .. note:: + + If you get an error message like ``sudo: pip: command not found``, + make sure you are not missing the ``-E`` parameter after ``sudo``. + +.. _user_environment_conda: + +Installing conda packages +------------------------- + +Conda lets you install new languages (such as new versions of python, node, R, etc) +as well as packages in those languages. For lots of scientific software, installing +with conda is often simpler & easier than installing with pip - especially if it +links to C / Fortran code. + +We recommend installing packages from `conda-forge `_, +a community maintained repository of conda packages. + +1. Log in as an admin user and open a Terminal in your Jupyter Notebook. + + .. image:: ../images/new_terminal_button.png + :alt: New Terminal button under New menu + + If you already have a terminal open as an admin user, that should work too! + +2. Install a package! + + .. code-block:: bash + + sudo -E conda install -c conda-forge gdal + + This installs the ``gdal`` library from ``conda-forge`` and makes it available + to all users. ``gdal`` is much harder to install with pip. + + .. note:: + + If you get an error message like ``sudo: conda: command not found``, + make sure you are not missing the ``-E`` parameter after ``sudo``. + +.. _user_environment_apt: + +Installing apt packages +----------------------- + +`apt `_ is the official package +manager for the `Ubuntu Linux distribution `_. You can install +utilities (such as ``vim``, ``sl``, ``htop``, etc), servers (``postgres``, ``mysql``, ``nginx``, etc) +and a lot more languages than present in ``conda`` (``haskell``, ``prolog``, ``INTERCAL``). +Some third party software (such as `RStudio `_) +is distributed as ``.deb`` files, which are the files ``apt`` uses to install software. + +You can search for packages with `Ubuntu Package search `_ - +make sure to look in the version of Ubuntu you are using! + +1. Log in as an admin user and open a Terminal in your Jupyter Notebook. + + .. image:: ../images/new_terminal_button.png + :alt: New Terminal button under New menu + + If you already have a terminal open as an admin user, that should work too! + +2. Update list of packages available. This makes sure you get the latest version of + the packages possible from the repositories. + + .. code-block:: bash + + sudo apt update + +3. Install the packages you want. + + .. code-block:: bash + + sudo apt install mysql-server git + + This installs (and starts) a ``MySQL `` database server + and ``git``. + + +User environment location +------------------------- + +The user environment is a conda enviornment set up in ``/opt/tljh/user``, with +a Python3 kernel as the default. It is readable by all users, but writeable only +by users who have root access. This makes it possible for JupyterHub admins (who have +root access with ``sudo``) to install software in the user environment easily. + +Accessing user environment outside JupyterHub +--------------------------------------------- + +We add ``/opt/tljh/user/bin`` to the ``$PATH`` environment variable for all JupyterHub +users, so everything installed in the user environment is available to them automatically. +If you are using ``ssh`` to access your server instead, you can get access to the same +environment with: + +.. code-block:: bash + + export PATH=/opt/tljh/user/bin:${PATH} + +Whenever you run any command now, the user environment will be searched first before +your system environment is. So if you run ``python3 ``, it'll use the ``python3`` +installed in the user environment (``/opt/tljh/user/bin/python3``) rather than the ``python3`` +installed in your system environment (``/usr/bin/python3``). This is usually what you want! + +To make this change 'stick', you can add the line to the end of the ``.bashrc`` file in +your home directory. + +When using ``sudo``, the ``PATH`` environment variable is usually reset, for security +reasons. This leads to error messages like: + +.. code-block:: console + + $ sudo conda install -c conda-forge gdal + sudo: conda: command not found + +The most common & portable way to fix this when using ``ssh`` is: + +.. code-block:: bash + + sudo PATH=${PATH} conda install -c conda-forge gdal diff --git a/docs/index.rst b/docs/index.rst index ad24d0c..dd48462 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -41,6 +41,7 @@ Guides provide in-depth explanations of specific topics. guides/requirements guides/install guides/admin + guides/user-environment Troubleshooting =============== diff --git a/docs/tutorials/quickstart.rst b/docs/tutorials/quickstart.rst index 8b1569f..addfc42 100644 --- a/docs/tutorials/quickstart.rst +++ b/docs/tutorials/quickstart.rst @@ -98,7 +98,9 @@ let the changes take effect. Congratulations, you are now an admin user in JupyterHub! Most administrative actions can now be performed from inside the Terminal in Jupyter Notebooks, -without requiring SSH usage. See :ref:`admin_access` for more information. +without requiring SSH usage. + +See :ref:`admin_access` for more information. Step 3: Install conda / pip packages for all users -------------------------------------------------- @@ -109,11 +111,11 @@ available to all users. Admin users can install packages in this environment with ``sudo -E``. 1. As an admin user, open a terminal in your notebook server -2. Install ``numpy`` from `conda-forge `_. +2. Install `gdal `_ from `conda-forge `_. .. code-block:: bash - sudo -E conda install -c conda-forge numpy + sudo -E conda install -c conda-forge gdal The ``sudo -E`` is very important! @@ -121,8 +123,10 @@ with ``sudo -E``. .. code-block:: bash - sudo -E pip install there + sudo -E pip install numpy -The packages ``numpy`` and ``there`` are now available to all users in JupyterHub. +The packages ``gdal`` and ``numpy`` are now available to all users in JupyterHub. If a user already had a python notebook running, they have to restart their notebook's kernel to make the new libraries available. + +See :ref:`user_environment` for more information.