diff --git a/notes/zrq/20240208-01-notebook-errors.txt b/notes/zrq/20240208-01-notebook-errors.txt
new file mode 100644
index 00000000..3c807fa3
--- /dev/null
+++ b/notes/zrq/20240208-01-notebook-errors.txt
@@ -0,0 +1,911 @@
+#
+#
+#
+# Copyright (c) 2024, ROE (http://www.roe.ac.uk/)
+#
+# This information is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This information is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+#
+#
+#zrq-notes-time
+#zrq-notes-indent
+#zrq-notes-crypto
+#zrq-notes-ansible
+#zrq-notes-osformat
+#zrq-notes-zeppelin
+#
+
+ Target:
+
+ Deploy went through as normal, but example notebooks for test users fail.
+ Almost all the notebook fail with what looks like low level Python library issues.
+
+ Result:
+
+ Work in progress ...
+
+# -----------------------------------------------------
+
+1. Start here
+
+ No problems
+
+# -----------------------------------------------------
+
+2. Data holdings
+
+ No problems
+
+# -----------------------------------------------------
+
+3. Source counts over the sky
+
+ > Fail to execute line 21: hp.mollview(array_data, fig=1, nest=True, coord='CG', unit = 'Star counts per HEALPixel', title='Gaia DR3 source counts at HEALPix level %d'%(healpix_level), cmap='viridis', norm = 'log')
+ > Traceback (most recent call last):
+ > File "/usr/local/lib64/python3.11/site-packages/healpy/visufunc.py", line 275, in mollview
+ > b = im.norm.inverse(np.linspace(0, 1, im.cmap.N + 1))
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/healpy/projaxes.py", line 1195, in inverse
+ > return vmin * np.ma.power((vmax / vmin), val)
+ > ~~~~~^~~~~~
+ > ZeroDivisionError: float division by zero
+
+
+# -----------------------------------------------------
+
+4. Mean proper motions over the sky
+
+ > Fail to execute line 17: hp.mollview(array_data, fig = 1, coord='C', unit='mas/yr', nest=True, title='Mean RA proper motion at HEALPix level %d'%(healpix_level), cmap='rainbow')
+ > Traceback (most recent call last):
+ > File "/tmp/python8643931494195433022/zeppelin_python.py", line 162, in
+ > exec(code, _zcUserQueryNameSpace)
+ > File "", line 17, in
+ > File "/usr/local/lib64/python3.11/site-packages/healpy/visufunc.py", line 332, in mollview
+ > pylab.draw()
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/pyplot.py", line 1111, in draw
+ > gcf().canvas.draw_idle()
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 136, in draw_idle
+ > self.draw(*args, **kwargs)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backends/backend_agg.py", line 388, in draw
+ > self.figure.draw(self.renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 95, in draw_wrapper
+ > result = draw(artist, renderer, *args, **kwargs)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/figure.py", line 3154, in draw
+ > mimage._draw_list_compositing_images(
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 132, in _draw_list_compositing_images
+ > a.draw(renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/axes/_base.py", line 3070, in draw
+ > mimage._draw_list_compositing_images(
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 132, in _draw_list_compositing_images
+ > a.draw(renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 649, in draw
+ > im, l, b, trans = self.make_image(
+ > ^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 939, in make_image
+ > return self._make_image(self._A, bbox, transformed_bbox, clip,
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 553, in _make_image
+ > output = self.norm(resampled_masked)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/healpy/projaxes.py", line 1165, in __call__
+ > raise ValueError("values must all be positive")
+ > ValueError: values must all be positive
+
+
+# -----------------------------------------------------
+
+5. Working with Gaia XP spectra
+
+ > Fail to execute line 20: sampled_spectrum, sampling = convert(continuous_spectrum, save_file = False)
+ > Traceback (most recent call last):
+ > File "/tmp/python8643931494195433022/zeppelin_python.py", line 162, in
+ > exec(code, _zcUserQueryNameSpace)
+ > File "", line 20, in
+ > File "/usr/local/lib/python3.11/site-packages/gaiaxpy/converter/converter.py", line 62, in convert
+ > return _convert(input_object=input_object, sampling=sampling, truncation=truncation,
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib/python3.11/site-packages/gaiaxpy/converter/converter.py", line 94, in _convert
+ > spectra_df, positions = _create_spectra(parsed_input_data, truncation, design_matrices,
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib/python3.11/site-packages/gaiaxpy/converter/converter.py", line 173, in _create_spectra
+ > positions = spectra_series.iloc[0].get_positions()
+ > ~~~~~~~~~~~~~~~~~~~^^^
+ > File "/usr/local/lib64/python3.11/site-packages/pandas/core/indexing.py", line 1153, in __getitem__
+ > return self._getitem_axis(maybe_callable, axis=axis)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/pandas/core/indexing.py", line 1714, in _getitem_axis
+ > self._validate_integer(key, axis)
+ > File "/usr/local/lib64/python3.11/site-packages/pandas/core/indexing.py", line 1647, in _validate_integer
+ > raise IndexError("single positional indexer is out-of-bounds")
+ > IndexError: single positional indexer is out-of-bounds
+
+
+# -----------------------------------------------------
+
+6. Working with cross-matched surveys
+
+ > Traceback (most recent call last):
+ > File "/opt/spark/python/pyspark/serializers.py", line 437, in dumps
+ > return cloudpickle.dumps(obj, pickle_protocol)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 73, in dumps
+ > cp.dump(obj)
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 563, in dump
+ > return Pickler.dump(self, obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 653, in reducer_override
+ > return self._function_reduce(obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 526, in _function_reduce
+ > return self._dynamic_function_reduce(obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 507, in _dynamic_function_reduce
+ > state = _function_getstate(func)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 157, in _function_getstate
+ > f_globals_ref = _extract_code_globals(func.__code__)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle.py", line 236, in _extract_code_globals
+ > out_names = {names[oparg] for _, oparg in _walk_global_ops(co)}
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle.py", line 236, in
+ > out_names = {names[oparg] for _, oparg in _walk_global_ops(co)}
+ > ~~~~~^^^^^^^
+ > IndexError: tuple index out of range
+
+ > Fail to execute line 41: spark.udf.register('rasterize', cmd_raster_index, IntegerType())
+ > Traceback (most recent call last):
+ > File "/opt/spark/python/pyspark/serializers.py", line 437, in dumps
+ > return cloudpickle.dumps(obj, pickle_protocol)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 73, in dumps
+ > cp.dump(obj)
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 563, in dump
+ > return Pickler.dump(self, obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 653, in reducer_override
+ > return self._function_reduce(obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 526, in _function_reduce
+ > return self._dynamic_function_reduce(obj)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 507, in _dynamic_function_reduce
+ > state = _function_getstate(func)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle_fast.py", line 157, in _function_getstate
+ > f_globals_ref = _extract_code_globals(func.__code__)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle.py", line 236, in _extract_code_globals
+ > out_names = {names[oparg] for _, oparg in _walk_global_ops(co)}
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/cloudpickle/cloudpickle.py", line 236, in
+ > out_names = {names[oparg] for _, oparg in _walk_global_ops(co)}
+ > ~~~~~^^^^^^^
+ > IndexError: tuple index out of range
+ >
+ > During handling of the above exception, another exception occurred:
+ >
+ > Traceback (most recent call last):
+ > File "/tmp/python8643931494195433022/zeppelin_python.py", line 162, in
+ > exec(code, _zcUserQueryNameSpace)
+ > File "", line 41, in
+ > File "/opt/spark/python/pyspark/sql/udf.py", line 362, in register
+ > self.sparkSession._jsparkSession.udf().registerPython(name, register_udf._judf)
+ > ^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/sql/udf.py", line 161, in _judf
+ > self._judf_placeholder = self._create_judf()
+ > ^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/sql/udf.py", line 170, in _create_judf
+ > wrapped_func = _wrap_function(sc, self.func, self.returnType)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/sql/udf.py", line 34, in _wrap_function
+ > pickled_command, broadcast_vars, env, includes = _prepare_for_python_RDD(sc, command)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/rdd.py", line 2816, in _prepare_for_python_RDD
+ > pickled_command = ser.dumps(command)
+ > ^^^^^^^^^^^^^^^^^^
+ > File "/opt/spark/python/pyspark/serializers.py", line 447, in dumps
+ > raise pickle.PicklingError(msg)
+ > _pickle.PicklingError: Could not serialize object: IndexError: tuple index out of range
+
+# -----------------------------------------------------
+
+7. Good astrometric solutions via ML Random Forest classifier
+
+ > Fail to execute line 15: plot.show()
+ > Traceback (most recent call last):
+ > File "/tmp/python8643931494195433022/zeppelin_python.py", line 167, in
+ > exec(code, _zcUserQueryNameSpace)
+ > File "", line 15, in
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/pyplot.py", line 527, in show
+ > return _get_backend_mod().show(*args, **kwargs)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 72, in __call__
+ > manager.show(**kwargs)
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 208, in show
+ > zdisplay(self.canvas.figure, **kwargs)
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 290, in zdisplay
+ > src = fig.canvas.manager.angular_bind(**kwargs)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 162, in angular_bind
+ > src = self.canvas.get_bytes(**kwargs)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/tmp/python8643931494195433022/backend_zinline.py", line 96, in get_bytes
+ > self.print_figure(buf, **kwargs)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backend_bases.py", line 2193, in print_figure
+ > result = print_method(
+ > ^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backend_bases.py", line 2043, in
+ > print_method = functools.wraps(meth)(lambda *args, **kwargs: meth(
+ > ^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backends/backend_agg.py", line 497, in print_png
+ > self._print_pil(filename_or_obj, "png", pil_kwargs, metadata)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backends/backend_agg.py", line 445, in _print_pil
+ > FigureCanvasAgg.draw(self)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/backends/backend_agg.py", line 388, in draw
+ > self.figure.draw(self.renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 95, in draw_wrapper
+ > result = draw(artist, renderer, *args, **kwargs)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/figure.py", line 3154, in draw
+ > mimage._draw_list_compositing_images(
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 132, in _draw_list_compositing_images
+ > a.draw(renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/axes/_base.py", line 3070, in draw
+ > mimage._draw_list_compositing_images(
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 132, in _draw_list_compositing_images
+ > a.draw(renderer)
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/artist.py", line 72, in draw_wrapper
+ > return draw(artist, renderer)
+ > ^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 649, in draw
+ > im, l, b, trans = self.make_image(
+ > ^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 939, in make_image
+ > return self._make_image(self._A, bbox, transformed_bbox, clip,
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/matplotlib/image.py", line 553, in _make_image
+ > output = self.norm(resampled_masked)
+ > ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ > File "/usr/local/lib64/python3.11/site-packages/healpy/projaxes.py", line 1165, in __call__
+ > raise ValueError("values must all be positive")
+ > ValueError: values must all be positive--END--
+ >
+ >
+ > # -----------------------------------------------------
+ >
+ > 8. Tips and tricks
+ >
+ > org.apache.zeppelin.interpreter.InterpreterException: org.apache.zeppelin.interpreter.InterpreterException: Fail to open JupyterKernelInterpreter:
+ > org.apache.zeppelin.interpreter.InterpreterException: Kernel prerequisite is not meet: jupyter-client is not installed, installed packages:
+ > acme==2.8.0
+ > aenum==3.1.15
+ > anyio==4.2.0
+ > argon2-cffi==23.1.0
+ > argon2-cffi-bindings==21.2.0
+ > arrow==1.3.0
+ > astropy==5.3.4
+ > astroquery==0.4.6
+ > asttokens==2.4.1
+ > async-lru==2.0.4
+ > attrs==22.2.0
+ > Babel==2.14.0
+ > bcrypt==4.1.2
+ > beautifulsoup4==4.12.3
+ > bleach==6.1.0
+ > ceph==1.0.0
+ > cephfs==2.0.0
+ > certbot==2.8.0
+ > certbot-dns-duckdns==1.3
+ > certbot-nginx==2.8.0
+ > certifi==2024.2.2
+ > cffi==1.16.0
+ > charset-normalizer==3.1.0
+ > cloud-init==23.1.1
+ > comm==0.2.1
+ > ConfigArgParse==1.7
+ > configobj==5.0.8
+ > contourpy==1.2.0
+ > cryptography==42.0.2
+ > cycler==0.12.1
+ > Cython==0.29.36
+ > dbus-python==1.3.2
+ > debugpy==1.8.0
+ > decorator==5.1.1
+ > defusedxml==0.7.1
+ > distro==1.8.0
+ > dnspython==2.5.0
+ > dustmaps==1.0.12
+ > executing==2.0.1
+ > fastavro==1.9.3
+ > fastjsonschema==2.19.1
+ > fonttools==4.48.1
+ > fqdn==1.5.1
+ > gaiadmpsetup==0.1.5
+ > gaiadr3-zeropoint==0.0.4
+ > GaiaXPy==2.1.0
+ > gpg==1.17.1
+ > grpcio==1.59.3
+ > h11==0.14.0
+ > h5py==3.10.0
+ > hdbscan==0.8.33
+ > healpy==1.16.6
+ > html5lib==1.1
+ > httpcore==1.0.2
+ > httpx==0.26.0
+ > idna==3.4
+ > importlib-metadata==7.0.1
+ > ipykernel==6.29.2
+ > ipython==8.21.0
+ > ipywidgets==8.1.2
+ > isoduration==20.11.0
+ > jaraco.classes==3.3.1
+ > jc==1.24.0
+ > jedi==0.19.1
+ > jeepney==0.8.0
+ > Jinja2==3.0.3
+ > joblib==1.3.2
+ > josepy==1.14.0
+ > json5==0.9.14
+ > jsonpatch==1.21
+ > jsonpointer==2.0
+ > jsonschema==4.21.1
+ > jsonschema-specifications==2023.12.1
+ > jupyter==1.0.0
+ > jupyter-console==6.6.3
+ > jupyter-events==0.9.0
+ > jupyter-lsp==2.2.2
+ > jupyter_client==8.6.0
+ > jupyter_core==5.7.1
+ > jupyter_server==2.12.5
+ > jupyter_server_terminals==0.5.2
+ > jupyterlab==4.1.0
+ > jupyterlab_pygments==0.3.0
+ > jupyterlab_server==2.25.2
+ > jupyterlab_widgets==3.0.10
+ > keyring==24.3.0
+ > kiwisolver==1.4.5
+ > libcomps==0.1.18
+ > MarkupSafe==2.1.2
+ > matplotlib==3.8.2
+ > matplotlib-inline==0.1.6
+ > mimeparse==0.1.3
+ > mistune==3.0.2
+ > more-itertools==10.2.0
+ > mwdust==1.5.post0
+ > nbclient==0.9.0
+ > nbconvert==7.16.0
+ > nbformat==5.9.2
+ > nest-asyncio==1.6.0
+ > netifaces==0.11.0
+ > notebook==7.0.7
+ > notebook_shim==0.2.3
+ > numpy==1.26.2
+ > oauthlib==3.2.1
+ > overrides==7.7.0
+ > packaging==23.2
+ > pandas==2.1.3
+ > pandocfilters==1.5.1
+ > paramiko==3.4.0
+ > parsedatetime==2.6
+ > parso==0.8.3
+ > pexpect==4.9.0
+ > pillow==10.2.0
+ > platformdirs==4.2.0
+ > prettytable==0.7.2
+ > progressbar2==4.3.2
+ > prometheus-client==0.19.0
+ > prompt-toolkit==3.0.43
+ > protobuf==4.25.1
+ > psutil==5.9.8
+ > ptyprocess==0.7.0
+ > pure-eval==0.2.2
+ > pyarrow==14.0.1
+ > pycparser==2.21
+ > pyerfa==2.0.1.1
+ > Pygments==2.14.0
+ > PyMySQL==1.1.0
+ > PyNaCl==1.5.0
+ > pyOpenSSL==24.0.0
+ > pyparsing==3.1.1
+ > pyRFC3339==1.1
+ > pyrsistent==0.19.3
+ > pyserial==3.5
+ > PySocks==1.7.1
+ > python-dateutil==2.8.2
+ > python-json-logger==2.0.7
+ > python-utils==3.8.2
+ > pytz==2024.1
+ > pyvo==1.1
+ > PyYAML==6.0
+ > pyzmq==25.1.2
+ > qtconsole==5.5.1
+ > QtPy==2.4.1
+ > rados==2.0.0
+ > rbd==2.0.0
+ > referencing==0.33.0
+ > requests==2.31.0
+ > rfc3339-validator==0.1.4
+ > rfc3986-validator==0.1.1
+ > rgw==2.0.0
+ > rpds-py==0.17.1
+ > rpm==4.18.1
+ > ruamel.yaml==0.17.24
+ > ruamel.yaml.clib==0.2.7
+ > scikit-learn==1.3.2
+ > scipy==1.11.4
+ > SecretStorage==3.3.3
+ > selinux==3.5
+ > Send2Trash==1.8.2
+ > sepolicy==3.5
+ > setools==4.4.1
+ > six==1.16.0
+ > sniffio==1.3.0
+ > soupsieve==2.5
+ > stack-data==0.6.3
+ > systemd-python==235
+ > terminado==0.18.0
+ > threadpoolctl==3.2.0
+ > tinycss2==1.2.1
+ > tornado==6.4
+ > tqdm==4.66.1
+ > traitlets==5.14.1
+ > types-python-dateutil==2.8.19.20240106
+ > typing_extensions==4.9.0
+ > tzdata==2023.4
+ > uri-template==1.3.0
+ > urllib3==1.26.12
+ > wcwidth==0.2.13
+ > webcolors==1.13
+ > webencodings==0.5.1
+ > websocket-client==1.7.0
+ > widgetsnbextension==4.0.10
+ > xkcdpass==1.19.8
+ > xmltodict==0.12.0
+ > yarncleaner==0.1
+ > zipp==3.17.0
+ >
+ > at org.apache.zeppelin.jupyter.JupyterKernelInterpreter.open(JupyterKernelInterpreter.java:129)
+ > at org.apache.zeppelin.python.IPythonInterpreter.open(IPythonInterpreter.java:110)
+ > at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:844)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:752)
+ > at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
+ > at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:132)
+ > at org.apache.zeppelin.scheduler.FIFOScheduler.lambda$runJobInScheduler$0(FIFOScheduler.java:42)
+ > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+ > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+ > at java.lang.Thread.run(Thread.java:750)
+ >
+ > at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:76)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:844)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:752)
+ > at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
+ > at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:132)
+ > at org.apache.zeppelin.scheduler.FIFOScheduler.lambda$runJobInScheduler$0(FIFOScheduler.java:42)
+ > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+ > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+ > at java.lang.Thread.run(Thread.java:750)
+ > Caused by: org.apache.zeppelin.interpreter.InterpreterException: Fail to open JupyterKernelInterpreter:
+ > org.apache.zeppelin.interpreter.InterpreterException: Kernel prerequisite is not meet: jupyter-client is not installed, installed packages:
+ > acme==2.8.0
+ > aenum==3.1.15
+ > anyio==4.2.0
+ > argon2-cffi==23.1.0
+ > argon2-cffi-bindings==21.2.0
+ > arrow==1.3.0
+ > astropy==5.3.4
+ > astroquery==0.4.6
+ > asttokens==2.4.1
+ > async-lru==2.0.4
+ > attrs==22.2.0
+ > Babel==2.14.0
+ > bcrypt==4.1.2
+ > beautifulsoup4==4.12.3
+ > bleach==6.1.0
+ > ceph==1.0.0
+ > cephfs==2.0.0
+ > certbot==2.8.0
+ > certbot-dns-duckdns==1.3
+ > certbot-nginx==2.8.0
+ > certifi==2024.2.2
+ > cffi==1.16.0
+ > charset-normalizer==3.1.0
+ > cloud-init==23.1.1
+ > comm==0.2.1
+ > ConfigArgParse==1.7
+ > configobj==5.0.8
+ > contourpy==1.2.0
+ > cryptography==42.0.2
+ > cycler==0.12.1
+ > Cython==0.29.36
+ > dbus-python==1.3.2
+ > debugpy==1.8.0
+ > decorator==5.1.1
+ > defusedxml==0.7.1
+ > distro==1.8.0
+ > dnspython==2.5.0
+ > dustmaps==1.0.12
+ > executing==2.0.1
+ > fastavro==1.9.3
+ > fastjsonschema==2.19.1
+ > fonttools==4.48.1
+ > fqdn==1.5.1
+ > gaiadmpsetup==0.1.5
+ > gaiadr3-zeropoint==0.0.4
+ > GaiaXPy==2.1.0
+ > gpg==1.17.1
+ > grpcio==1.59.3
+ > h11==0.14.0
+ > h5py==3.10.0
+ > hdbscan==0.8.33
+ > healpy==1.16.6
+ > html5lib==1.1
+ > httpcore==1.0.2
+ > httpx==0.26.0
+ > idna==3.4
+ > importlib-metadata==7.0.1
+ > ipykernel==6.29.2
+ > ipython==8.21.0
+ > ipywidgets==8.1.2
+ > isoduration==20.11.0
+ > jaraco.classes==3.3.1
+ > jc==1.24.0
+ > jedi==0.19.1
+ > jeepney==0.8.0
+ > Jinja2==3.0.3
+ > joblib==1.3.2
+ > josepy==1.14.0
+ > json5==0.9.14
+ > jsonpatch==1.21
+ > jsonpointer==2.0
+ > jsonschema==4.21.1
+ > jsonschema-specifications==2023.12.1
+ > jupyter==1.0.0
+ > jupyter-console==6.6.3
+ > jupyter-events==0.9.0
+ > jupyter-lsp==2.2.2
+ > jupyter_client==8.6.0
+ > jupyter_core==5.7.1
+ > jupyter_server==2.12.5
+ > jupyter_server_terminals==0.5.2
+ > jupyterlab==4.1.0
+ > jupyterlab_pygments==0.3.0
+ > jupyterlab_server==2.25.2
+ > jupyterlab_widgets==3.0.10
+ > keyring==24.3.0
+ > kiwisolver==1.4.5
+ > libcomps==0.1.18
+ > MarkupSafe==2.1.2
+ > matplotlib==3.8.2
+ > matplotlib-inline==0.1.6
+ > mimeparse==0.1.3
+ > mistune==3.0.2
+ > more-itertools==10.2.0
+ > mwdust==1.5.post0
+ > nbclient==0.9.0
+ > nbconvert==7.16.0
+ > nbformat==5.9.2
+ > nest-asyncio==1.6.0
+ > netifaces==0.11.0
+ > notebook==7.0.7
+ > notebook_shim==0.2.3
+ > numpy==1.26.2
+ > oauthlib==3.2.1
+ > overrides==7.7.0
+ > packaging==23.2
+ > pandas==2.1.3
+ > pandocfilters==1.5.1
+ > paramiko==3.4.0
+ > parsedatetime==2.6
+ > parso==0.8.3
+ > pexpect==4.9.0
+ > pillow==10.2.0
+ > platformdirs==4.2.0
+ > prettytable==0.7.2
+ > progressbar2==4.3.2
+ > prometheus-client==0.19.0
+ > prompt-toolkit==3.0.43
+ > protobuf==4.25.1
+ > psutil==5.9.8
+ > ptyprocess==0.7.0
+ > pure-eval==0.2.2
+ > pyarrow==14.0.1
+ > pycparser==2.21
+ > pyerfa==2.0.1.1
+ > Pygments==2.14.0
+ > PyMySQL==1.1.0
+ > PyNaCl==1.5.0
+ > pyOpenSSL==24.0.0
+ > pyparsing==3.1.1
+ > pyRFC3339==1.1
+ > pyrsistent==0.19.3
+ > pyserial==3.5
+ > PySocks==1.7.1
+ > python-dateutil==2.8.2
+ > python-json-logger==2.0.7
+ > python-utils==3.8.2
+ > pytz==2024.1
+ > pyvo==1.1
+ > PyYAML==6.0
+ > pyzmq==25.1.2
+ > qtconsole==5.5.1
+ > QtPy==2.4.1
+ > rados==2.0.0
+ > rbd==2.0.0
+ > referencing==0.33.0
+ > requests==2.31.0
+ > rfc3339-validator==0.1.4
+ > rfc3986-validator==0.1.1
+ > rgw==2.0.0
+ > rpds-py==0.17.1
+ > rpm==4.18.1
+ > ruamel.yaml==0.17.24
+ > ruamel.yaml.clib==0.2.7
+ > scikit-learn==1.3.2
+ > scipy==1.11.4
+ > SecretStorage==3.3.3
+ > selinux==3.5
+ > Send2Trash==1.8.2
+ > sepolicy==3.5
+ > setools==4.4.1
+ > six==1.16.0
+ > sniffio==1.3.0
+ > soupsieve==2.5
+ > stack-data==0.6.3
+ > systemd-python==235
+ > terminado==0.18.0
+ > threadpoolctl==3.2.0
+ > tinycss2==1.2.1
+ > tornado==6.4
+ > tqdm==4.66.1
+ > traitlets==5.14.1
+ > types-python-dateutil==2.8.19.20240106
+ > typing_extensions==4.9.0
+ > tzdata==2023.4
+ > uri-template==1.3.0
+ > urllib3==1.26.12
+ > wcwidth==0.2.13
+ > webcolors==1.13
+ > webencodings==0.5.1
+ > websocket-client==1.7.0
+ > widgetsnbextension==4.0.10
+ > xkcdpass==1.19.8
+ > xmltodict==0.12.0
+ > yarncleaner==0.1
+ > zipp==3.17.0
+ >
+ > at org.apache.zeppelin.jupyter.JupyterKernelInterpreter.open(JupyterKernelInterpreter.java:129)
+ > at org.apache.zeppelin.python.IPythonInterpreter.open(IPythonInterpreter.java:110)
+ > at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:844)
+ > at org.apache.zeppelin.interpreter.remote.RemoteInterpreterServer$InterpretJob.jobRun(RemoteInterpreterServer.java:752)
+ > at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
+ > at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:132)
+ > at org.apache.zeppelin.scheduler.FIFOScheduler.lambda$runJobInScheduler$0(FIFOScheduler.java:42)
+ > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+ > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+ > at java.lang.Thread.run(Thread.java:750)
+ >
+ > at org.apache.zeppelin.jupyter.JupyterKernelInterpreter.open(JupyterKernelInterpreter.java:145)
+ > at org.apache.zeppelin.python.IPythonInterpreter.open(IPythonInterpreter.java:110)
+ > at org.apache.zeppelin.interpreter.LazyOpenInterpreter.open(LazyOpenInterpreter.java:70)
+ > ... 8 more
+ > Caused by: org.apache.zeppelin.interpreter.InterpreterException: Kernel prerequisite is not meet: jupyter-client is not installed, installed packages:
+ > acme==2.8.0
+ > aenum==3.1.15
+ > anyio==4.2.0
+ > argon2-cffi==23.1.0
+ > argon2-cffi-bindings==21.2.0
+ > arrow==1.3.0
+ > astropy==5.3.4
+ > astroquery==0.4.6
+ > asttokens==2.4.1
+ > async-lru==2.0.4
+ > attrs==22.2.0
+ > Babel==2.14.0
+ > bcrypt==4.1.2
+ > beautifulsoup4==4.12.3
+ > bleach==6.1.0
+ > ceph==1.0.0
+ > cephfs==2.0.0
+ > certbot==2.8.0
+ > certbot-dns-duckdns==1.3
+ > certbot-nginx==2.8.0
+ > certifi==2024.2.2
+ > cffi==1.16.0
+ > charset-normalizer==3.1.0
+ > cloud-init==23.1.1
+ > comm==0.2.1
+ > ConfigArgParse==1.7
+ > configobj==5.0.8
+ > contourpy==1.2.0
+ > cryptography==42.0.2
+ > cycler==0.12.1
+ > Cython==0.29.36
+ > dbus-python==1.3.2
+ > debugpy==1.8.0
+ > decorator==5.1.1
+ > defusedxml==0.7.1
+ > distro==1.8.0
+ > dnspython==2.5.0
+ > dustmaps==1.0.12
+ > executing==2.0.1
+ > fastavro==1.9.3
+ > fastjsonschema==2.19.1
+ > fonttools==4.48.1
+ > fqdn==1.5.1
+ > gaiadmpsetup==0.1.5
+ > gaiadr3-zeropoint==0.0.4
+ > GaiaXPy==2.1.0
+ > gpg==1.17.1
+ > grpcio==1.59.3
+ > h11==0.14.0
+ > h5py==3.10.0
+ > hdbscan==0.8.33
+ > healpy==1.16.6
+ > html5lib==1.1
+ > httpcore==1.0.2
+ > httpx==0.26.0
+ > idna==3.4
+ > importlib-metadata==7.0.1
+ > ipykernel==6.29.2
+ > ipython==8.21.0
+ > ipywidgets==8.1.2
+ > isoduration==20.11.0
+ > jaraco.classes==3.3.1
+ > jc==1.24.0
+ > jedi==0.19.1
+ > jeepney==0.8.0
+ > Jinja2==3.0.3
+ > joblib==1.3.2
+ > josepy==1.14.0
+ > json5==0.9.14
+ > jsonpatch==1.21
+ > jsonpointer==2.0
+ > jsonschema==4.21.1
+ > jsonschema-specifications==2023.12.1
+ > jupyter==1.0.0
+ > jupyter-console==6.6.3
+ > jupyter-events==0.9.0
+ > jupyter-lsp==2.2.2
+ > jupyter_client==8.6.0
+ > jupyter_core==5.7.1
+ > jupyter_server==2.12.5
+ > jupyter_server_terminals==0.5.2
+ > jupyterlab==4.1.0
+ > jupyterlab_pygments==0.3.0
+ > jupyterlab_server==2.25.2
+ > jupyterlab_widgets==3.0.10
+ > keyring==24.3.0
+ > kiwisolver==1.4.5
+ > libcomps==0.1.18
+ > MarkupSafe==2.1.2
+ > matplotlib==3.8.2
+ > matplotlib-inline==0.1.6
+ > mimeparse==0.1.3
+ > mistune==3.0.2
+ > more-itertools==10.2.0
+ > mwdust==1.5.post0
+ > nbclient==0.9.0
+ > nbconvert==7.16.0
+ > nbformat==5.9.2
+ > nest-asyncio==1.6.0
+ > netifaces==0.11.0
+ > notebook==7.0.7
+ > notebook_shim==0.2.3
+ > numpy==1.26.2
+ > oauthlib==3.2.1
+ > overrides==7.7.0
+ > packaging==23.2
+ > pandas==2.1.3
+ > pandocfilters==1.5.1
+ > paramiko==3.4.0
+ > parsedatetime==2.6
+ > parso==0.8.3
+ > pexpect==4.9.0
+ > pillow==10.2.0
+ > platformdirs==4.2.0
+ > prettytable==0.7.2
+ > progressbar2==4.3.2
+ > prometheus-client==0.19.0
+ > prompt-toolkit==3.0.43
+ > protobuf==4.25.1
+ > psutil==5.9.8
+ > ptyprocess==0.7.0
+ > pure-eval==0.2.2
+ > pyarrow==14.0.1
+ > pycparser==2.21
+ > pyerfa==2.0.1.1
+ > Pygments==2.14.0
+ > PyMySQL==1.1.0
+ > PyNaCl==1.5.0
+ > pyOpenSSL==24.0.0
+ > pyparsing==3.1.1
+ > pyRFC3339==1.1
+ > pyrsistent==0.19.3
+ > pyserial==3.5
+ > PySocks==1.7.1
+ > python-dateutil==2.8.2
+ > python-json-logger==2.0.7
+ > python-utils==3.8.2
+ > pytz==2024.1
+ > pyvo==1.1
+ > PyYAML==6.0
+ > pyzmq==25.1.2
+ > qtconsole==5.5.1
+ > QtPy==2.4.1
+ > rados==2.0.0
+ > rbd==2.0.0
+ > referencing==0.33.0
+ > requests==2.31.0
+ > rfc3339-validator==0.1.4
+ > rfc3986-validator==0.1.1
+ > rgw==2.0.0
+ > rpds-py==0.17.1
+ > rpm==4.18.1
+ > ruamel.yaml==0.17.24
+ > ruamel.yaml.clib==0.2.7
+ > scikit-learn==1.3.2
+ > scipy==1.11.4
+ > SecretStorage==3.3.3
+ > selinux==3.5
+ > Send2Trash==1.8.2
+ > sepolicy==3.5
+ > setools==4.4.1
+ > six==1.16.0
+ > sniffio==1.3.0
+ > soupsieve==2.5
+ > stack-data==0.6.3
+ > systemd-python==235
+ > terminado==0.18.0
+ > threadpoolctl==3.2.0
+ > tinycss2==1.2.1
+ > tornado==6.4
+ > tqdm==4.66.1
+ > traitlets==5.14.1
+ > types-python-dateutil==2.8.19.20240106
+ > typing_extensions==4.9.0
+ > tzdata==2023.4
+ > uri-template==1.3.0
+ > urllib3==1.26.12
+ > wcwidth==0.2.13
+ > webcolors==1.13
+ > webencodings==0.5.1
+ > websocket-client==1.7.0
+ > widgetsnbextension==4.0.10
+ > xkcdpass==1.19.8
+ > xmltodict==0.12.0
+ > yarncleaner==0.1
+ > zipp==3.17.0
+ >
+ > at org.apache.zeppelin.jupyter.JupyterKernelInterpreter.open(JupyterKernelInterpreter.java:129)
+ > ... 10 more--END--
+ >
diff --git a/notes/zrq/20240208-01-test-deploy.txt b/notes/zrq/20240208-01-test-deploy.txt
new file mode 100644
index 00000000..0b8aa08a
--- /dev/null
+++ b/notes/zrq/20240208-01-test-deploy.txt
@@ -0,0 +1,232 @@
+#
+#
+#
+# Copyright (c) 2024, ROE (http://www.roe.ac.uk/)
+#
+# This information is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This information is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+#
+#
+#zrq-notes-time
+#zrq-notes-indent
+#zrq-notes-crypto
+#zrq-notes-ansible
+#zrq-notes-osformat
+#zrq-notes-zeppelin
+#
+
+ Target:
+
+ Guess is that recent merge broke the Python libraries.
+ To test it, revert to pre-merge version and deploy.
+
+ Merge pull request #1240 from akrause2014/fedora-38
+ https://github.com/wfau/gaia-dmp/commit/dc85a92da5d22a73f29357f72c568b0c064989fd
+
+ Merge branch 'master' into fedora-38 <-- why !?
+ https://github.com/wfau/gaia-dmp/commit/ef6cb8cba69e79440d9c7df909c00f5c769c783f
+
+ Working deployment on Somerville Jade <-- state before Amy's branch was merged.
+ https://github.com/wfau/gaia-dmp/commit/7c1034a5362788fb099139cb3f7fa2e872e116a3
+
+ Result:
+
+ Work in progress ...
+
+
+# -----------------------------------------------------
+# Create a new branch.
+#[user@laptop]
+
+ branchname=notebook-debug
+
+ source "${HOME:?}/aglais.env"
+ pushd "${AGLAIS_CODE}"
+
+ newbranch=$(date '+%Y%m%d')-zrq-${branchname:?}
+
+ git checkout master
+
+ git checkout -b "${newbranch:?}"
+
+ popd
+
+
+# -----------------------------------------------------
+# Revert to pre-merge version.
+#[user@laptop]
+
+ source "${HOME:?}/aglais.env"
+ pushd "${AGLAIS_CODE}"
+
+ cp deployments/common/pip/requirements.txt \
+ deployments/common/pip/requirements.old
+
+ git checkout 7c1034a5362788fb099139cb3f7fa2e872e116a3
+
+ diff deployments/common/pip/requirements.txt \
+ deployments/common/pip/requirements.old
+
+ popd
+
+ > Note: switching to '7c1034a5362788fb099139cb3f7fa2e872e116a3'.
+ > ....
+ > ....
+ > HEAD is now at 7c1034a5 Working deployment on Somerville Jade
+
+ > 1,4c1,4
+ > < numpy==1.21.0
+ > < scipy==1.7.3
+ > < matplotlib==3.4.2
+ > < grpcio==1.53.0
+ > ---
+ > > numpy==1.26.2
+ > > scipy==1.11.4
+ > > matplotlib==3.8.2
+ > > grpcio==1.59.3
+ > ....
+ > ....
+
+
+# -----------------------------------------------------
+# Sanity check the current live host.
+#[user@laptop]
+
+ ssh fedora@live.gaia-dmp.uk \
+ '
+ date
+ hostname
+ '
+
+ > Thu 8 Feb 19:04:41 UTC 2024
+ > iris-gaia-green-20231027-zeppelin
+
+
+# -----------------------------------------------------
+# Create a container to work with.
+#[user@laptop]
+
+ agcolour=red
+
+ source "${HOME:?}/aglais.env"
+
+ configname=zeppelin-54.86-spark-6.26.43
+ agproxymap=3000:3000
+ clientname=ansibler-${agcolour}
+ cloudname=iris-gaia-${agcolour}
+
+ podman run \
+ --rm \
+ --tty \
+ --interactive \
+ --name "${clientname:?}" \
+ --hostname "${clientname:?}" \
+ --publish "${agproxymap:?}" \
+ --env "cloudname=${cloudname:?}" \
+ --env "configname=${configname:?}" \
+ --env "SSH_AUTH_SOCK=/mnt/ssh_auth_sock" \
+ --volume "${SSH_AUTH_SOCK:?}:/mnt/ssh_auth_sock:rw,z" \
+ --volume "${HOME:?}/clouds.yaml:/etc/openstack/clouds.yaml:ro,z" \
+ --volume "${AGLAIS_CODE:?}/deployments:/deployments:ro,z" \
+ ghcr.io/wfau/atolmis/ansible-client:2022.07.25 \
+ bash
+
+ > ....
+ > ....
+
+
+# -----------------------------------------------------
+# Deploy everything.
+#[root@ansibler]
+
+ source /deployments/hadoop-yarn/bin/deploy.sh
+
+ > ....
+ > ....
+ > aglais:
+ > status:
+ > deployment:
+ > type: hadoop-yarn
+ > conf: zeppelin-54.86-spark-6.26.43
+ > name: iris-gaia-red-20240208
+ > date: 20240208T192828
+ > hostname: zeppelin.gaia-dmp.uk
+ > spec:
+ > openstack:
+ > cloud:
+ > base: arcus
+ > name: iris-gaia-red
+
+
+# -----------------------------------------------------
+# Import our test users.
+#[root@ansibler]
+
+ # Note the old path location
+ source /deployments/zeppelin/bin/create-user-tools.sh
+
+ import-test-users
+
+ > ....
+ > ....
+
+
+ list-shiro-full \
+ /tmp/test-users.json
+
+ > [
+ > {
+ > "username": "Reyesfan",
+ > "password": "frightful satin overact manifesto",
+ > "passhash": "$shiro1$SHA-256$500000$bYtGVBhO6YDIxT6VMRm8dg==$IcfIkfV2OS5iUAhsQb2EW1i0Bi2qnZE7iQeEnx1XY/w=",
+ > "hashhash": "44fbd1eca95a32c9b51046ca79ab9611"
+ > },
+ > ....
+ > ....
+ > ]
+
+
+# -----------------------------------------------------
+# -----------------------------------------------------
+# Manually test the examples.
+#[user@desktop]
+
+ firefox \
+ --new-window \
+ 'https://red.gaia-dmp.uk/' \
+ &
+
+ 1. Start here
+ 2. Data holdings
+ 3. Source counts over the sky
+ 4. Mean proper motions over the sky
+ 5. Working with Gaia XP spectra
+ 6. Working with cross-matched surveys
+ 7. Good astrometric solutions via ML Random Forest classifier
+ 8. Tips and tricks
+
+ All worked as expected.
+
+ #
+ # Next step is to create a branch without the version chages.
+ # Can we undo one specific set of changes ?
+ #
+ # Possibly
+ # https://stackoverflow.com/questions/46724078/how-to-remove-specific-commits-from-git
+ # https://stackoverflow.com/q/46724078
+ #
+ # Alternativley, just revert the changes to the Python library versions,
+ # Fedora version, and Spark version.
+ #
+
diff --git a/notes/zrq/20240209-01handover-notes.txt b/notes/zrq/20240209-01handover-notes.txt
new file mode 100644
index 00000000..efef9d79
--- /dev/null
+++ b/notes/zrq/20240209-01handover-notes.txt
@@ -0,0 +1,306 @@
+#
+#
+#
+# Copyright (c) 2024, ROE (http://www.roe.ac.uk/)
+#
+# This information is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This information is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+#
+#
+#zrq-notes-time
+#zrq-notes-indent
+#zrq-notes-crypto
+#zrq-notes-ansible
+#zrq-notes-osformat
+#zrq-notes-zeppelin
+#
+
+ Target:
+
+ Handover notes ....
+
+ Result:
+
+ Work in progress ...
+
+# -----------------------------------------------------
+
+ Today's VM IP address is 64.23.132.172
+
+# -----------------------------------------------------
+# -----------------------------------------------------
+
+ How to create a new fedora image on Openstack
+ https://github.com/Zarquan/gaia-dmp/blob/20240208-zrq-notebook-debug/notes/zrq/20230922-01-images.txt
+
+ Basically, download the cloud image from fedora,
+ and upload as-is into an Openstack image.
+
+
+# -----------------------------------------------------
+# -----------------------------------------------------
+
+ How to connect to an existing deployment.
+ Based on notes from 20230725-02-cephfs-tests.txt
+ https://github.com/Zarquan/gaia-dmp/blob/20240208-zrq-notebook-debug/notes/zrq/20230725-02-cephfs-tests.txt
+
+# -----------------------------------------------------
+# Create a container to work with.
+#[user@desktop]
+
+ source "${HOME}/aglais.env"
+ ansi-client blue
+
+ > ....
+ > ....
+
+
+# -----------------------------------------------------
+# Download our deployment status.
+#[root@ansibler]
+
+ mkdir -p /opt/aglais
+ scp "${cloudname}.gaia-dmp.uk:/opt/aglais/aglais-status.yml" \
+ /opt/aglais/aglais-status.yml
+
+ cat /opt/aglais/aglais-status.yml
+
+ > aglais:
+ > status:
+ > deployment:
+ > type: hadoop-yarn
+ > conf: zeppelin-54.86-spark-6.26.43
+ > name: iris-gaia-blue-20240208
+ > date: 20240208T151053
+ > hostname: zeppelin.gaia-dmp.uk
+ > spec:
+ > openstack:
+ > cloud:
+ > base: arcus
+ > name: iris-gaia-blue
+
+
+# -----------------------------------------------------
+# Extract the cloud and configuration name.
+#[root@ansibler]
+
+ configname=$(
+ yq '.aglais.status.deployment.conf' /opt/aglais/aglais-status.yml
+ )
+
+ cloudname=$(
+ yq '.aglais.spec.openstack.cloud.name' /opt/aglais/aglais-status.yml
+ )
+
+# -----------------------------------------------------
+# Configure our Ansible client.
+#[root@ansibler]
+
+ inventory="/deployments/hadoop-yarn/ansible/config/${configname:?}.yml"
+
+ pushd "/deployments/hadoop-yarn/ansible"
+
+ ansible-playbook \
+ --inventory "${inventory:?}" \
+ '05-config-ssh.yml'
+
+ popd
+
+ > ....
+ > ....
+
+
+# -----------------------------------------------------
+# Check we can login using ssh.
+#[root@ansibler]
+
+ ssh zeppelin \
+ '
+ date
+ hostname
+ '
+
+ > Fri Feb 9 04:33:25 PM UTC 2024
+ > iris-gaia-blue-20240208-zeppelin
+
+
+# -----------------------------------------------------
+# Import our live users.
+#[root@ansibler]
+
+ source /deployments/admin/bin/create-user-tools.sh
+
+ import-live-users
+
+ > ....
+ > ....
+
+ # Check the log file.
+ less /tmp/test-users.json
+
+ #
+ # Seems to have issues mounting the userr home directories.
+ #
+
+ # List the shares we can see on blue.
+ openstack \
+ --os-cloud 'iris-gaia-blue' \
+ share list
+
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | 891aa140-e4c9-484e-bb28-8bc9ed111d92 | iris-gaia-blue-home-Florelight | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 0095314d-b390-4da4-9b4e-7da050a3bea2 | iris-gaia-blue-home-Surbron | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | c9cf5016-a2ae-4cfd-906d-9674a682817a | iris-gaia-blue-home-Thozzt | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | a2f52afa-511b-4a8f-92ed-e14af0787460 | iris-gaia-blue-user-Florelight | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | a1f3ee66-2b7a-4fb8-9e4c-de3c35bba537 | iris-gaia-blue-user-Surbron | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 18b33352-c05d-4f1b-8f9a-a5b87cff3dfe | iris-gaia-blue-user-Thozzt | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 57455d7e-f9d5-4b61-8cf3-45d47e043d73 | iris-gaia-data-home-DCrake | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 588b70d5-98dd-4cba-9058-04714a3ae12e | iris-gaia-data-user-DCrake | 10 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+
+
+ # List the shares we can see on data.
+ openstack \
+ --os-cloud 'iris-gaia-data' \
+ share list
+
+ > +--------------------------------------+------------------------------------+-------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
+ > +--------------------------------------+------------------------------------+-------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | c3c83cf6-5897-4194-b150-a29e83022a13 | aglais-data-gaia-dr3-2048 | 4196 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | .................................... | ........... |
+ > | .................................... | ........... |
+ > | 55b28681-5efe-4c40-90a0-d3e408632fb7 | iris-gaia-data-home-DMorris | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | .................................... | ........... |
+ > | .................................... | ........... |
+ > | 493b34ad-cbec-42ca-9308-36bc09b79528 | iris-gaia-data-user-DMorris | 1025 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | .................................... | ........... |
+ > | .................................... | ........... |
+ > +--------------------------------------+------------------------------------+-------+-------------+-----------+-----------+-----------------+------+-------------------+
+
+
+
+ # List my home directory share.
+ openstack \
+ --os-cloud 'iris-gaia-data' \
+ share show \
+ 'iris-gaia-data-home-DMorris'
+
+ > +---------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+ > | Field | Value |
+ > +---------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+ > | access_rules_status | active |
+ > | availability_zone | nova |
+ > | create_share_from_snapshot_support | False |
+ > | created_at | 2022-07-28T06:27:02.000000 |
+ > | description | None |
+ > | export_locations | |
+ > | | id = 0c90284d-c32f-4cae-86ab-8d41772a803a |
+ > | | path = 10.4.200.9:6789,10.4.200.13:6789,10.4.200.17:6789,10.4.200.25:6789,10.4.200.26:6789:/volumes/_nogroup/48d2f333-28d6-4e5d-bee4-03634334185d |
+ > | | preferred = False |
+ > | has_replicas | False |
+ > | id | 55b28681-5efe-4c40-90a0-d3e408632fb7 |
+ > | is_public | False |
+ > | is_soft_deleted | False |
+ > | mount_snapshot_support | False |
+ > | name | iris-gaia-data-home-DMorris |
+ > | progress | 100% |
+ > | project_id | e216e6b502134b6185380be6ccd0bf09 |
+ > | properties | |
+ > | replication_type | None |
+ > | revert_to_snapshot_support | False |
+ > | scheduled_to_be_deleted_at | None |
+ > | share_group_id | None |
+ > | share_network_id | None |
+ > | share_proto | CEPHFS |
+ > | share_type | 12668f5c-44e4-4b63-abf1-c56002ccc424 |
+ > | share_type_name | ceph01_cephfs |
+ > | size | 1 |
+ > | snapshot_id | None |
+ > | snapshot_support | False |
+ > | source_share_group_snapshot_member_id | None |
+ > | status | available |
+ > | task_state | None |
+ > | user_id | 5fa0c97a6dd14e01a3c7d91dad5c6b17 |
+ > | volume_type | ceph01_cephfs |
+ > +---------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------+
+
+ #
+ # Turns out we had a mix up with app credentials.
+ # Adding new users checked on iris-gaia-data for an existing share,
+ # but the app credentials meant we were looking at iris-gaia-data.
+ # create-user-home didn't find an existing home directory,
+ # so it created a new one what it thiught was data, but
+ # ended up creating them on blue instead.
+ #
+
+
+ # List the shares we can see on blue.
+ openstack \
+ --os-cloud 'iris-gaia-blue' \
+ share list \
+ --format json \
+ | jq -r '.[].Name'
+
+ > iris-gaia-blue-home-Florelight
+ > iris-gaia-blue-home-Surbron
+ > iris-gaia-blue-home-Thozzt
+ > iris-gaia-blue-user-Florelight
+ > iris-gaia-blue-user-Surbron
+ > iris-gaia-blue-user-Thozzt
+ > iris-gaia-data-home-DCrake
+ > iris-gaia-data-user-DCrake
+
+ #
+ # We only want to delete these.
+ #
+
+iris-gaia-data-home-DCrake
+iris-gaia-data-user-DCrake
+
+ #
+ # Delete the 'data' shares from blue.
+ openstack \
+ --os-cloud 'iris-gaia-blue' \
+ share delete \
+ 'iris-gaia-data-home-DCrake'
+
+ openstack \
+ --os-cloud 'iris-gaia-blue' \
+ share delete \
+ 'iris-gaia-data-user-DCrake'
+
+
+ # List the shares we can see on blue.
+ openstack \
+ --os-cloud 'iris-gaia-blue' \
+ share list
+
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+ > | 891aa140-e4c9-484e-bb28-8bc9ed111d92 | iris-gaia-blue-home-Florelight | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 0095314d-b390-4da4-9b4e-7da050a3bea2 | iris-gaia-blue-home-Surbron | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | c9cf5016-a2ae-4cfd-906d-9674a682817a | iris-gaia-blue-home-Thozzt | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | a2f52afa-511b-4a8f-92ed-e14af0787460 | iris-gaia-blue-user-Florelight | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | a1f3ee66-2b7a-4fb8-9e4c-de3c35bba537 | iris-gaia-blue-user-Surbron | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > | 18b33352-c05d-4f1b-8f9a-a5b87cff3dfe | iris-gaia-blue-user-Thozzt | 1 | CEPHFS | available | False | ceph01_cephfs | | nova |
+ > +--------------------------------------+--------------------------------+------+-------------+-----------+-----------+-----------------+------+-------------------+
+
+
+
+
+