.. _installation_ubuntu_22:
Installing Neper on Ubuntu 22
=============================
.. important:: Read first: :ref:`introduction`, especially :ref:`installing_neper` and :ref:`testing_neper`.
This tutotial describes how to install Neper step by step on a *fresh* Ubuntu 22 distribution. It may apply to other Ubuntu distributions too, and may be adapted to other distributions quite easily. General installation instructions are provided in :ref:`introduction` (:ref:`installing_neper`), and this tutorial does not aim to substitute to it. However, we adopt here a different approach by managing (dependency) issues as they occur during the installation on a fresh Ubuntu 22 distribution (which misses packages that would typically already be present on older installations).
Downloading Neper
-----------------
We first download the last official version from the website (https://neper.info), :code:`neper-4.6.1.tar.gz` at the time of writing.
It is then a good idea to move the archive to a dedicated directory, for example :file:`~/Progs`, and work from there.
We create directory :file:`~/Progs` and move the archive into it:
.. code-block:: console
$ mkdir ~/Progs
$ mv neper-4.6.1.tar.gz ~/Progs
We change directory to :file:`Progs` and unarchive the code:
.. code-block:: console
$ cd ~/Progs
$ tar -zxf neper-4.6.1.tar.gz
Compiling Neper
---------------
We first compile Neper using the commands provided in :ref:`installing_neper` (namely, we should follow the :command:`cmake`, :command:`make`, :command:`make install` sequence):
.. code-block:: console
$ cd neper-4.6.1
$ cd src
$ mkdir build
$ cd build
$ cmake ..
Command 'cmake' not found, but can be installed with:
sudo snap install cmake # version 3.26.4, or
sudo apt install cmake # version 3.22.1-1ubuntu1.22.04.1
See 'snap info cmake' for additional versions.
We follow the terminal output and install :command:`cmake`:
.. code-block:: console
$ sudo apt install cmake
We re-run Cmake:
.. code-block:: console
$ cmake ..
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is unknown
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
CMake Error at CMakeLists.txt:11 (project):
No CMAKE_CXX_COMPILER could be found.
Tell CMake where to find the compiler by setting either the environment
variable "CXX" or the CMake cache entry CMAKE_CXX_COMPILER to the full path
to the compiler, or to the compiler name if it is in the PATH.
-- Configuring incomplete, errors occurred!
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeOutput.log".
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeError.log".
A CXX (C++) compiler is missing. The GNU C++ compiler is :command:`g++`; so, we install it:
.. code-block:: console
$ sudo apt install g++
We re-run Cmake:
.. code-block:: console
$ cmake ..
-- WARNING: you are using the obsolete 'PKGCONFIG' macro, use FindPkgConfig
-- WARNING: PKGCONFIG() indicates that the tool pkg-config has not been found on your system. You should install it.
FindGSL.cmake: gsl-config/pkg-config gsl not found. Please set
it manually. GSL_CONFIG=GSL_CONFIG-NOTFOUND
CMake Error at CMakeLists.txt:46 (_message):
GSL required, please specify it's location.
Call Stack (most recent call first):
cmake/FindGSL.cmake:178 (MESSAGE)
CMakeLists.txt:103 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeOutput.log".
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeError.log".
We follow the terminal output and install :command:`pkg-config`:
.. code-block:: console
$ sudo apt install pkg-config
We re-run Cmake:
.. code-block:: console
$ cmake ..
-- WARNING: you are using the obsolete 'PKGCONFIG' macro, use FindPkgConfig
-- PKGCONFIG() indicates that gsl is not installed (install the package which contains gsl.pc if you want to support this feature)
FindGSL.cmake: gsl-config/pkg-config gsl not found. Please set
it manually. GSL_CONFIG=GSL_CONFIG-NOTFOUND
CMake Error at CMakeLists.txt:46 (_message):
GSL required, please specify it's location.
Call Stack (most recent call first):
cmake/FindGSL.cmake:178 (MESSAGE)
CMakeLists.txt:103 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeOutput.log".
See also "/home/rquey/Progs/neper-4.6.1/src/build/CMakeFiles/CMakeError.log".
We have to install :command:`gsl`. We search for it as follows (it is a library, so, we prefix it with :command:`lib` in the search):
.. code-block:: console
$ sudo apt search libgsl
Sorting... Done
Full Text Search... Done
libgsl-dbg/jammy 2.7.1+dfsg-3 amd64
GNU Scientific Library (GSL) -- debug symbols package
libgsl-dev/jammy 2.7.1+dfsg-3 amd64
GNU Scientific Library (GSL) -- development package
libgsl27/jammy 2.7.1+dfsg-3 amd64
GNU Scientific Library (GSL) -- library package
libgslcblas0/jammy 2.7.1+dfsg-3 amd64
GNU Scientific Library (GSL) -- blas library package
libocamlgsl-ocaml/jammy 1.24.3-1build3 amd64
GNU scientific library for OCaml
libocamlgsl-ocaml-dev/jammy 1.24.3-1build3 amd64
GNU scientific library for OCaml
:command:`libgsl-dev` is the one we need; so, we install it:
.. code-block:: console
$ sudo apt install libgsl-dev
We re-run Cmake:
.. code-block:: console
$ cmake ..
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Could NOT find system Scotch - using built-in
-- Could NOT find system NLopt - using built-in
-- Neper is set to be installed in: /usr/local/bin and /usr/share
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rquey/Progs/neper-4.6.1/src/build
It now seems good to go. We can compile:
.. code-block:: console
$ make
[ 0%] Building C object contrib/nlopt/CMakeFiles/nlopt.dir/src/algs/direct/DIRect.c.o
...
[100%] Built target neper
We can already install Neper (with root permissions):
.. code-block:: console
$ sudo make install
which copies the :file:`neper` binary to a system location and makes the :command:`neper` command available system-wide.
.. note:: It is also possible to simply copy the :file:`neper` binary to a user location, e.g. :file:`~/bin/`, and make it visible to the system by including :file:`~/bin` to your :code:`$PATH`, by adding :code:`PATH=$PATH:~/bin` to your :file:`~/.bashrc` file (assuming you are using the Bash shell (:command:`echo $SHELL`)).
We can now test the installation:
.. code-block:: console
$ ctest
Test project /home/rquey/Progs/neper/neper/src/build
Start 1: T/dim
1/461 Test #1: T/dim ................................... Passed 0.02 sec
[...]
90% tests passed, 44 tests failed out of 461
Total Test time (real) = 48.33 sec
The following tests FAILED:
129 - M/cl (Failed)
130 - M/cl_expr (Failed)
133 - M/clmin (Failed)
134 - M/clratio (Failed)
135 - M/cut (Failed)
136 - M/dim (Failed)
137 - M/dim2 (Failed)
138 - M/dim_expr (Failed)
139 - M/faset (Failed)
142 - M/interface (Failed)
143 - M/interface2 (Failed)
144 - M/interface3 (Failed)
145 - M/mesh2dalgo_dela (Failed)
146 - M/mesh2dalgo_fron (Failed)
147 - M/mesh2dalgo_mead (Failed)
148 - M/mesh2dalgo_netg (Failed)
149 - M/mesh3dalgo_netggmne (Failed)
150 - M/mesh3dalgo_netggmsh (Failed)
151 - M/mesh3dalgo_netgnetg (Failed)
152 - M/meshing (Failed)
154 - M/meshqualdisexpr (Failed)
155 - M/meshqualexpr (Failed)
156 - M/meshqualmin (Failed)
157 - M/morpho_cube (Failed)
158 - M/nset1 (Failed)
159 - M/nset2 (Failed)
160 - M/nset3 (Failed)
161 - M/order (Failed)
162 - M/order_dim2 (Failed)
166 - M/part2 (Failed)
167 - M/part_dim2 (Failed)
168 - M/pl (Failed)
169 - M/rcl (Failed)
170 - M/rcl_expr (Failed)
173 - M/remesh1 (Failed)
174 - M/remesh2 (Failed)
175 - M/remesh3 (Failed)
176 - M/remesh4 (Failed)
182 - M/statelsetco (Failed)
188 - M/stateltco (Failed)
190 - M/tesr_dim2 (Failed)
193 - M/tess2ddim3 (Failed)
211 - V/asymptote (Failed)
326 - V/povray (Failed)
Some tests failed because we have not install the run-time dependencies: Gmsh, Asymptote and POV-Ray (see :ref:`installing_neper`).
Installing Gmsh
---------------
Gmsh is available from the package manager (meaning that we could run :command:`sudo apt install gmsh` to install it); however, it is worth installing it from source since it will run much faster.
We download the source code from the website (https://gmsh.info), latest version. It is then a good idea to move it to :file:`~/Progs`, where Neper already is:
.. code-block:: console
$ mv gmsh-4.11.1-source.tgz ~/Progs/
$ tar -zxf gmsh-4.11.1-source.tgz
$ cd ~/Progs/gmsh-4.11.1-source
We can then compile it. As Gmsh is also managed with CMake, installation is no much different from that of Neper itself:
.. code-block:: console
$ mkdir build
$ cd build
$ cmake ..
-- The CXX compiler identification is GNU 11.3.0
-- The C compiler identification is GNU 11.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Could NOT find Git (missing: GIT_EXECUTABLE)
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of size_t
-- Check size of size_t - done
-- Found 64Bit
-- Found OpenMP_C: -fopenmp (found version "4.5")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Found OpenMP
-- Found Eigen[contrib]
-- Found Mesh
-- Found Solver
-- Found Post
-- Found Plugins
-- Found Parser
-- Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR)
-- Could NOT find X11 (missing: X11_X11_INCLUDE_PATH X11_X11_LIB)
-- Could NOT find FLTK (missing: FLTK_LIBRARIES FLTK_INCLUDE_DIR)
-- Found ONELAB
-- Found ONELABMetamodel
-- Found ANN[contrib]
-- Found ALGLIB[contrib]
-- Found DIntegration
-- Found Kbipack
-- GMP not found: Kbipack uses long int
-- Found MathEx[contrib]
-- Found Metis[contrib]
-- Found TetGen/BR
-- Found Voro++[contrib]
-- Found OptHom
-- Found DomHex
-- Found QuadTri
-- Found Blossom
-- Found Netgen
-- Found Bamg
-- Found Hxt
-- Found QuadMeshingTools
-- Found WinslowUntangler
-- Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS) (found version "")
-- HDF5 not found
-- Found Gmm[contrib]
-- Could NOT find Freetype (missing: FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS)
-- Looking for vsnprintf
-- Looking for vsnprintf - found
-- Looking for sys/socket.h
-- Looking for sys/socket.h - found
-- Check size of socklen_t
-- Check size of socklen_t - done
-- Check size of intptr_t
-- Check size of intptr_t - done
-- Looking for dlfcn.h
-- Looking for dlfcn.h - found
-- Found Dlopen
-- Looking for linux/joystick.h
-- Looking for linux/joystick.h - found
-- Found LinuxJoystick
-- Performing Test WALL
-- Performing Test WALL - Success
-- Performing Test WCAST
-- Performing Test WCAST - Failed
-- Performing Test WDEPREC
-- Performing Test WDEPREC - Success
-- Performing Test WIND
-- Performing Test WIND - Success
-- Performing Test WATTR
-- Performing Test WATTR - Success
-- Performing Test NOWARN
-- Performing Test NOWARN - Success
-- Performing Test NOOPT
-- Performing Test NOOPT - Success
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/api/square.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/baffles.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/boolean.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/chamfer.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/coherence.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/compsolid.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/compsolid2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/extend_field.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/extrude.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/extrude2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fillet.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fillet2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fillet3.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fillet4.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fillet_chamfer.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fleur.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/fragment_numbering.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/hybrid_occ_builtin.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/hyperboloid.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/import.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/import2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/intersect_line_volume.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/neuron.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/number_of_tets.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/periodic.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/periodic_embedded.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/pipe.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/primitives.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/revolve.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/revolve2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/shell_sewing.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple2.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple3.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple4.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple5.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple6.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/simple7.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/slicer.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/slicer_surfaces.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/spherical_surf.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/spline.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/step_assembly.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/surface_filling.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/thicksolid.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/thrusections.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/transfinite.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/transform.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/boolean/twist.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/examples/post_processing/compute_area_volume.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t16.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t17.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t18.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t19.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t20.geo
Skipping test /home/rquey/Progs/gmsh-4.11.1-source/tutorials/t21.geo
--
-- Gmsh 4.11.1 has been configured for Linux64
--
-- * Build options: 64Bit ALGLIB[contrib] ANN[contrib] Bamg Blossom DIntegration Dlopen DomHex Eigen[contrib] Gmm[contrib] Hxt Kbipack LinuxJoystick MathEx[contrib] Mesh Metis[contrib] Netgen ONELAB ONELABMetamodel OpenMP OptHom Parser Plugins Post QuadMeshingTools QuadTri Solver TetGen/BR Voro++[contrib] WinslowUntangler
-- * Build type: RelWithDebInfo
-- * C compiler: /usr/bin/cc
-- * C++ compiler: /usr/bin/c++
-- * Install prefix: /usr/local
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rquey/Progs/gmsh-4.11.1-source/build
Configuration completed and is sufficient for Neper. So, we can make and install:
.. code-block:: console
$ make
$ sudo make install
The second command copies the :file:`gmsh` binary file to a system location, which makes the command available to Neper.
Back to Neper's build directory, we re-run the tests:
.. code-block:: console
$ cd ~/Progs/neper-4.6.1/src/build
$ ctest
99% tests passed, 2 tests failed out of 461
Total Test time (real) = 47.92 sec
The following tests FAILED:
211 - V/asymptote (Failed)
325 - V/povray (Failed)
Errors while running CTest
All "M" tests now pass.
.. note:: We could also re-run only the "M" tests, using :command:`ctest -R M`.
Installing POV-Ray and Asymptote
--------------------------------
We install povray as follows:
.. code-block:: console
$ sudo apt install povray
We re-run the tests:
.. code-block:: console
$ ctest
99% tests passed, 1 tests failed out of 461
Total Test time (real) = 47.92 sec
The following tests FAILED:
211 - V/asymptote (Failed)
Errors while running CTest
.. note:: We could also simply run :code:`ctest -R V/povray`
We now install Asymptote, which itself required full Tex Live, as we know from :ref:`installing_neper`:
.. code-block:: console
$ sudo apt install asymptote
$ sudo apt install texlive-full
We re-run the tests:
.. code-block:: console
$ ctest
[...]
100% tests passed, 0 tests failed out of 461
.. note:: We could also simply run :code:`ctest -R V/asymptote`
Depending on your use of Neper, it may be necessary to make the following changes in your :file:`/etc/ImageMagick-6/policy.xml` file:
- Comment out the following lines:
.. code-block:: console
- Increase the following limits (especially :data:`memory` and :data:`disk`):
.. code-block:: console
The installation is now complete!
Improving Gmsh's Installation (optional)
----------------------------------------
Back to Gmsh, the Gmsh installation may be improved so that we can actually open Gmsh's GUI, by installing OpenGL's development package (OpenGL itself may already be installed) and FLTK:
.. code-block:: console
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install libfltk1.3 libfltk1.3-dev
$ cd ~/Progs/gmsh-4.11.1-source
$ cmake ..
$ make
$ sudo make install
Installing Neper's documentation (optional)
-------------------------------------------
Neper's documentation is available online, but we can also build our own local copy:
From the :file:`doc` directory, we compile the documentation:
.. code-block:: console
$ cd ~/Progs/neper-4.6.0/doc
$ make html
sphinx-build -b html -d build/doctrees . build/html
Traceback (most recent call last):
File "/home/rquey/.local/bin/sphinx-build", line 5, in
from sphinx.cmd.build import main
ModuleNotFoundError: No module named 'sphinx'
make: *** [Makefile:53: html] Error 1
Sphinx is missing. We install it:
.. code-block:: console
$ sudo apt-get install python3-sphinx
We re-compile the documentation:
.. code-block:: console
$ make html
sphinx-build -b html -d build/doctrees . build/html
Running Sphinx v4.3.2
loading translations [en]... done
loading pickled environment... done
WARNING: sphinx_rtd_theme (< 0.3.0) found. It will not be available since Sphinx-6.0
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 11 source files that are out of date
updating environment: [config changed ('version')] 11 added, 0 changed, 0 removed
reading sources... [100%] versions
/home/rquey/Progs/fepx/doc/copying.rst:24: WARNING: duplicate citation DAWSON15, other instance in /home/rquey/Progs/fepx/doc/develhistory.rst
/home/rquey/Progs/fepx/doc/develhistory.rst:77: WARNING: duplicate citation DAWSON15, other instance in /home/rquey/Progs/fepx/doc/copying.rst
/home/rquey/Progs/fepx/doc/input.rst:1020: WARNING: Explicit markup ends without a blank line; unexpected unindent.
looking for now-outdated files... none found
pickling environment... done
checking consistency... done
preparing documents... done
writing output... [100%] versions
/home/rquey/Progs/fepx/doc/versions.rst:7: WARNING: Pygments lexer name 'plain' is not known
generating indices... genindex done
writing additional pages... search done
copying images... [100%] images/minimalbcs.png
copying static files... done
copying extra files... done
dumping search index in English (code: en)... done
dumping object inventory... done
build succeeded, 5 warnings.
The HTML pages are in build/html.
Build finished. The HTML pages are in build/html.
All done! We may now copy the :file:`html` directory to somewhere more appropriate (there is no :command:`make install` command for the documentation).