Files
Jungfraujoch/DEPLOYMENT.html
T
2026-04-16 12:12:54 +00:00

36 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html> <html lang=en data-content_root="./"> <meta charset=utf-8 /> <meta name=viewport content="width=device-width, initial-scale=1.0" /><meta name=viewport content="width=device-width, initial-scale=1" /> <meta name=viewport content="width=device-width,initial-scale=1"> <meta http-equiv=x-ua-compatible content="ie=edge"> <meta name="lang:clipboard.copy" content="Copy to clipboard"> <meta name="lang:clipboard.copied" content="Copied to clipboard"> <meta name="lang:search.language" content=en > <meta name="lang:search.pipeline.stopwords" content=True > <meta name="lang:search.pipeline.trimmer" content=True > <meta name="lang:search.result.none" content="No matching documents"> <meta name="lang:search.result.one" content="1 matching document"> <meta name="lang:search.result.other" content="# matching documents"> <meta name="lang:search.tokenizer" content="[\s\-]+"> <link href="https://fonts.gstatic.com/" rel=preconnect crossorigin> <link href="https://fonts.googleapis.com/css?family=Roboto+Mono:400,500,700|Roboto:300,400,400i,700&display=fallback" rel=stylesheet > <style> body, input { font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif } code, kbd, pre { font-family: "Roboto Mono", "Courier New", Courier, monospace } </style> <link rel=stylesheet href="_static/stylesheets/application.css"/> <link rel=stylesheet href="_static/stylesheets/application-palette.css"/> <link rel=stylesheet href="_static/stylesheets/application-fixes.css"/> <link rel=stylesheet href="_static/fonts/material-icons.css"/> <meta name=theme-color content="#3f51b5"> <script src="_static/javascripts/modernizr.js"></script> <title>Deployment &#8212; Jungfraujoch 1.0.0-rc.135 documentation</title> <link rel=stylesheet type="text/css" href="_static/pygments.css?v=83e35b93" /> <link rel=stylesheet type="text/css" href="_static/material.css?v=79c92029" /> <script src="_static/documentation_options.js?v=d1fa3868"></script> <script src="_static/doctools.js?v=9bcbadda"></script> <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel=icon href="_static/jfjoch.png"/> <link rel=index title=Index href=genindex.html /> <link rel=search title=Search href=search.html /> <link rel=next title=Changelog href=CHANGELOG.html /> <link rel=prev title="Semantic versioning" href=VERSIONING.html /> <body dir=ltr data-md-color-primary=indigo data-md-color-accent=lime> <svg class=md-svg > <defs data-children-count=0 > <svg xmlns="http://www.w3.org/2000/svg" width=500 height=500 viewBox="0 0 500 500" id=__gitlab ><path fill=currentColor d="M93.667 473.347l90.684-279.097H2.983l90.684 279.097z" transform="translate(156.198 1.16)"/><path fill=currentColor d="M221.333 473.345L130.649 194.25H3.557l217.776 279.095z" transform="translate(28.531 1.16)" opacity=.7 /><path fill=currentColor d="M32 195.155L4.441 279.97a18.773 18.773 0 0 0 6.821 20.99l238.514 173.29L32 195.155z" transform="translate(.089 .256)" opacity=.5 /><path fill=currentColor d="M2.667-84.844h127.092L75.14-252.942c-2.811-8.649-15.047-8.649-17.856 0L2.667-84.844z" transform="translate(29.422 280.256)"/><path fill=currentColor d="M2.667 473.345L93.351 194.25h127.092L2.667 473.345z" transform="translate(247.198 1.16)" opacity=.7 /><path fill=currentColor d="M221.334 195.155l27.559 84.815a18.772 18.772 0 0 1-6.821 20.99L3.557 474.25l217.777-279.095z" transform="translate(246.307 .256)" opacity=.5 /><path fill=currentColor d="M130.667-84.844H3.575l54.618-168.098c2.811-8.649 15.047-8.649 17.856 0l54.618 168.098z" transform="translate(336.974 280.256)"/></svg> </defs> </svg> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer > <input class=md-toggle data-md-toggle=search type=checkbox id=__search > <label class=md-overlay data-md-component=overlay for=__drawer ></label> <a href="#DEPLOYMENT" tabindex=1 class=md-skip > Skip to content </a> <header class=md-header data-md-component=header > <nav class="md-header-nav md-grid"> <div class="md-flex navheader"> <div class="md-flex__cell md-flex__cell--shrink"> <a href=index.html title="Jungfraujoch 1.0.0-rc.135 documentation" class="md-header-nav__button md-logo"> <i class=md-icon >&#xe30d</i> </a> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--menu md-header-nav__button" for=__drawer ></label> </div> <div class="md-flex__cell md-flex__cell--stretch"> <div class="md-flex__ellipsis md-header-nav__title" data-md-component=title > <span class=md-header-nav__topic >PSI Jungfraujoch</span> <span class=md-header-nav__topic > Deployment </span> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <label class="md-icon md-icon--search md-header-nav__button" for=__search ></label> <div class=md-search data-md-component=search role=dialog > <label class=md-search__overlay for=__search ></label> <div class=md-search__inner role=search > <form class=md-search__form action=search.html method=get name=search > <input type=text class=md-search__input name=q placeholder=""Search"" autocapitalize=off autocomplete=off spellcheck=false data-md-component=query data-md-state=active > <label class="md-icon md-search__icon" for=__search ></label> <button type=reset class="md-icon md-search__icon" data-md-component=reset tabindex=-1 > &#xE5CD; </button> </form> <div class=md-search__output > <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=result > <div class=md-search-result__meta > Type to start searching </div> <ol class=md-search-result__list ></ol> </div> </div> </div> </div> </div> </div> <div class="md-flex__cell md-flex__cell--shrink"> <div class=md-header-nav__source > <a href="https://gitea.psi.ch/mx/jungfraujoch" title="Go to repository" class=md-source data-md-source=github > <div class=md-source__icon > <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width=28 height=28 > <use xlink:href="#__gitlab" width=24 height=24 ></use> </svg> </div> <div class=md-source__repository > Jungfraujoch </div> </a> </div> </div> <script src="_static/javascripts/version_dropdown.js"></script> <script> var json_loc = ""versions.json"", target_loc = "../", text = "Versions"; $( document ).ready( add_version_dropdown(json_loc, target_loc, text)); </script> </div> </nav> </header> <div class=md-container > <nav class=md-tabs data-md-component=tabs > <div class="md-tabs__inner md-grid"> <ul class=md-tabs__list > <li class=md-tabs__item ><a href=index.html class=md-tabs__link >Jungfraujoch 1.0.0-rc.135 documentation</a> </ul> </div> </nav> <main class=md-main > <div class="md-main__inner md-grid" data-md-component=container > <div class="md-sidebar md-sidebar--primary" data-md-component=navigation > <div class=md-sidebar__scrollwrap > <div class=md-sidebar__inner > <nav class="md-nav md-nav--primary" data-md-level=0 > <label class="md-nav__title md-nav__title--site" for=__drawer > <a href=index.html title="Jungfraujoch 1.0.0-rc.135 documentation" class="md-nav__button md-logo"> <i class=md-icon >&#xe30d</i> </a> <a href=index.html title="Jungfraujoch 1.0.0-rc.135 documentation">PSI Jungfraujoch</a> </label> <div class=md-nav__source > <a href="https://gitea.psi.ch/mx/jungfraujoch" title="Go to repository" class=md-source data-md-source=github > <div class=md-source__icon > <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 24 24" width=28 height=28 > <use xlink:href="#__gitlab" width=24 height=24 ></use> </svg> </div> <div class=md-source__repository > Jungfraujoch </div> </a> </div> <ul class=md-nav__list > <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >General</span></span> <li class=md-nav__item > <a href=ACKNOWLEDGEMENT.html class=md-nav__link >Acknowledgements</a> <li class=md-nav__item > <a href=LICENSE.html class=md-nav__link >License</a> <li class=md-nav__item > <a href=DETECTORS.html class=md-nav__link >Supported detectors</a> <li class=md-nav__item > <a href="DETECTORS.html#dectris-detectors" class=md-nav__link >DECTRIS detectors</a> <li class=md-nav__item > <a href=HARDWARE.html class=md-nav__link >Hardware requirements</a> <li class=md-nav__item > <a href=SOFTWARE.html class=md-nav__link >Software requirements</a> <li class=md-nav__item > <a href=VERSIONING.html class=md-nav__link >Semantic versioning</a> <li class=md-nav__item > <input class="md-toggle md-nav__toggle" data-md-toggle=toc type=checkbox id=__toc > <label class="md-nav__link md-nav__link--active" for=__toc > Deployment </label> <a href="#" class="md-nav__link md-nav__link--active">Deployment</a> <nav class="md-nav md-nav--secondary"> <ul class=md-nav__list data-md-scrollfix=""> </ul> </nav> <ul class=md-nav__list > <li class=md-nav__item > <a href="#install-main-jungfraujoch-code-and-frontend-web-interface" class=md-nav__link >Install main Jungfraujoch code and frontend web interface</a> <li class=md-nav__item > <a href="#flash-the-u55c-fpga-card-with-a-proper-image-and-install-linux-kernel-driver" class=md-nav__link >Flash the U55C FPGA card with a proper image and install Linux kernel driver.</a> <li class=md-nav__item > <a href="#install-jungfraujoch-writer" class=md-nav__link >Install Jungfraujoch writer</a> <li class=md-nav__item > <a href="#install-jungfraujoch-image-viewer" class=md-nav__link >Install Jungfraujoch image viewer</a> <li class=md-nav__item > <a href="#install-jungfraujoch-python-client" class=md-nav__link >Install Jungfraujoch Python client</a> </ul> <li class=md-nav__item > <a href=CHANGELOG.html class=md-nav__link >Changelog</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >Software</span></span> <li class=md-nav__item > <a href=JFJOCH_BROKER.html class=md-nav__link >jfjoch_broker</a> <li class=md-nav__item > <a href=JFJOCH_WRITER.html class=md-nav__link >jfjoch_writer</a> <li class=md-nav__item > <a href=SOFTWARE_INTEGRATION.html class=md-nav__link >Integration with MX data processing software</a> <li class=md-nav__item > <a href=TOOLS.html class=md-nav__link >Tools</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >FPGA</span></span> <li class=md-nav__item > <a href=FPGA.html class=md-nav__link >FPGA smartNIC</a> <li class=md-nav__item > <a href=FPGA_LICENSE.html class=md-nav__link >FPGA license</a> <li class=md-nav__item > <a href=FPGA_DESIGN.html class=md-nav__link >FPGA data flow</a> <li class=md-nav__item > <a href=FPGA_NETWORK.html class=md-nav__link >FPGA network</a> <li class=md-nav__item > <a href=FPGA_PCIE_DRIVER.html class=md-nav__link >FPGA PCIe driver</a> <li class=md-nav__item > <a href=FPGA_SETTINGS.html class=md-nav__link >FPGA advanced reference</a> <li class=md-nav__item > <a href=FPGA_DATA_ANALYSIS.html class=md-nav__link >FPGA data analysis</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >Reference</span></span> <li class=md-nav__item > <a href=DETECTOR_GEOMETRY.html class=md-nav__link >Detector geometry</a> <li class=md-nav__item > <a href=CPU_DATA_ANALYSIS.html class=md-nav__link >CPU-side crystallographic data analysis (Jungfraujoch)</a> <li class=md-nav__item > <a href=OPENAPI.html class=md-nav__link >OpenAPI</a> <li class=md-nav__item > <a href=OPENAPI_SPECS.html class=md-nav__link >OpenAPI specification</a> <li class=md-nav__item > <a href=CBOR.html class=md-nav__link >CBOR messages</a> <li class=md-nav__item > <a href=IMAGE_STREAM.html class=md-nav__link >Data streams</a> <li class=md-nav__item > <a href=PIXEL_MASK.html class=md-nav__link >Pixel mask</a> <li class=md-nav__item > <a href=WEB_FRONTEND.html class=md-nav__link >Web frontend</a> <li class=md-nav__item > <a href=TESTS.html class=md-nav__link >Tests</a> <li class=md-nav__item > <span class="md-nav__link caption"><span class=caption-text >OpenAPI Python client</span></span> <li class=md-nav__item > <a href="python_client/README.html" class=md-nav__link >jfjoch-client</a> <li class=md-nav__item > <a href="python_client/README.html#license-clarification" class=md-nav__link >License Clarification</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html" class=md-nav__link >jfjoch_client.DefaultApi</a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#cancel-post" class=md-nav__link ><strong>cancel_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-get" class=md-nav__link ><strong>config_azim_int_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-azim-int-put" class=md-nav__link ><strong>config_azim_int_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-get" class=md-nav__link ><strong>config_dark_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-dark-mask-put" class=md-nav__link ><strong>config_dark_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-get" class=md-nav__link ><strong>config_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-detector-put" class=md-nav__link ><strong>config_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-get" class=md-nav__link ><strong>config_file_writer_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-file-writer-put" class=md-nav__link ><strong>config_file_writer_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-conversion-post" class=md-nav__link ><strong>config_image_format_conversion_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-get" class=md-nav__link ><strong>config_image_format_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-put" class=md-nav__link ><strong>config_image_format_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-image-format-raw-post" class=md-nav__link ><strong>config_image_format_raw_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-get" class=md-nav__link ><strong>config_indexing_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-indexing-put" class=md-nav__link ><strong>config_indexing_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-get" class=md-nav__link ><strong>config_instrument_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-instrument-put" class=md-nav__link ><strong>config_instrument_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-put" class=md-nav__link ><strong>config_internal_generator_image_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-internal-generator-image-tiff-put" class=md-nav__link ><strong>config_internal_generator_image_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-get" class=md-nav__link ><strong>config_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-mask-tiff-get" class=md-nav__link ><strong>config_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-get" class=md-nav__link ><strong>config_roi_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-roi-put" class=md-nav__link ><strong>config_roi_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-get" class=md-nav__link ><strong>config_select_detector_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-select-detector-put" class=md-nav__link ><strong>config_select_detector_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-get" class=md-nav__link ><strong>config_spot_finding_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-spot-finding-put" class=md-nav__link ><strong>config_spot_finding_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-get" class=md-nav__link ><strong>config_user_mask_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-put" class=md-nav__link ><strong>config_user_mask_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-get" class=md-nav__link ><strong>config_user_mask_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-user-mask-tiff-put" class=md-nav__link ><strong>config_user_mask_tiff_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-get" class=md-nav__link ><strong>config_zeromq_metadata_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-metadata-put" class=md-nav__link ><strong>config_zeromq_metadata_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-get" class=md-nav__link ><strong>config_zeromq_preview_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#config-zeromq-preview-put" class=md-nav__link ><strong>config_zeromq_preview_put</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#deactivate-post" class=md-nav__link ><strong>deactivate_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#detector-status-get" class=md-nav__link ><strong>detector_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#fpga-status-get" class=md-nav__link ><strong>fpga_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-clear-post" class=md-nav__link ><strong>image_buffer_clear_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-cbor-get" class=md-nav__link ><strong>image_buffer_image_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-jpeg-get" class=md-nav__link ><strong>image_buffer_image_jpeg_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-image-tiff-get" class=md-nav__link ><strong>image_buffer_image_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-start-cbor-get" class=md-nav__link ><strong>image_buffer_start_cbor_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-buffer-status-get" class=md-nav__link ><strong>image_buffer_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#image-pusher-status-get" class=md-nav__link ><strong>image_pusher_status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#initialize-post" class=md-nav__link ><strong>initialize_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#pedestal-post" class=md-nav__link ><strong>pedestal_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-pedestal-tiff-get" class=md-nav__link ><strong>preview_pedestal_tiff_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-bin-get" class=md-nav__link ><strong>preview_plot_bin_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#preview-plot-get" class=md-nav__link ><strong>preview_plot_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#result-scan-get" class=md-nav__link ><strong>result_scan_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#start-post" class=md-nav__link ><strong>start_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-calibration-get" class=md-nav__link ><strong>statistics_calibration_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-data-collection-get" class=md-nav__link ><strong>statistics_data_collection_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#statistics-get" class=md-nav__link ><strong>statistics_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#status-get" class=md-nav__link ><strong>status_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#trigger-post" class=md-nav__link ><strong>trigger_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#version-get" class=md-nav__link ><strong>version_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#wait-till-done-post" class=md-nav__link ><strong>wait_till_done_post</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-event-code-get" class=md-nav__link ><strong>xfel_event_code_get</strong></a> <li class=md-nav__item > <a href="python_client/docs/DefaultApi.html#xfel-pulse-id-get" class=md-nav__link ><strong>xfel_pulse_id_get</strong></a> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=toc > <div class=md-sidebar__scrollwrap > <div class=md-sidebar__inner > <nav class="md-nav md-nav--secondary"> <ul class=md-nav__list data-md-scrollfix=""> </ul> </nav> </div> </div> </div> <div class=md-content > <article class="md-content__inner md-typeset" role=main > <section class="tex2jax_ignore mathjax_ignore" id=deployment > <h1 id=deployment--page-root >Deployment<a class=headerlink href="#deployment--page-root" title="Link to this heading"></a></h1> <p>To deploy Jungfraujoch, one needs to follow four steps:</p> <ol class="arabic simple"> <li><p>Install main Jungfraujoch code and frontend web interface</p> <li><p>Flash the U55C FPGA card with a proper image and install Linux kernel driver</p> <li><p>Install Jungfraujoch writer</p> <li><p>Install Python OpenAPI client</p> </ol> <p>Installation procedure depend a lot on the operating system. For RedHat Enterprise Linux 8, Rocky 8, or compatible installation can be done with prebuilt RPMs and is relatively straightforward. For other systems one needs to build software from source. Both ways will be presented.</p> <section id=install-main-jungfraujoch-code-and-frontend-web-interface > <h2 id=install-main-jungfraujoch-code-and-frontend-web-interface >Install main Jungfraujoch code and frontend web interface<a class=headerlink href="#install-main-jungfraujoch-code-and-frontend-web-interface" title="Link to this heading"></a></h2> <p>On RHEL 8 systems there is a <code class="docutils literal notranslate"><span class=pre >jfjoch-&lt;version&gt;-1.el8.x86_64.rpm</span></code> that needs to be installed and contains all the necessary software and web interface.</p> <p>On other OSes one needs to compile Jungfraujoch from source (from the repo directory):</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ mkdir build
$ cd build
$ cmake .. -DCMAKE_INSTALL_PREFIX=&lt;directory to install&gt;
$ make
$ sudo make install
</pre></div> </div> <p>For manual installation, we recommend to use non-standard directory (like <code class="docutils literal notranslate"><span class=pre >/opt/jfjoch</span></code>), to facilitate upgrades and removal. For DKMS to manage kernel module sources it is necessary to copy driver sources to <code class="docutils literal notranslate"><span class=pre >/usr/src/jfjoch-&lt;VERSION&gt;</span></code> directory. This requires extra flag in cmake <code class="docutils literal notranslate"><span class=pre >-DJFJOCH_INSTALL_DRIVER_SOURCE=ON</span></code>.</p> <p>Frontend web user interface has to be built separately with:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ cd build
$ make frontend
</pre></div> </div> <p>Frontend files (.html and .js) will be placed in <code class="docutils literal notranslate"><span class=pre >frontend/dist</span></code> (outside of <code class="docutils literal notranslate"><span class=pre >build/</span></code> directory!) and has to be copied to a general location, e.g. <code class="docutils literal notranslate"><span class=pre >/usr/local/jfjoch/frontend</span></code> or <code class="docutils literal notranslate"><span class=pre >/opt/jfjoch/frotend</span></code>.</p> </section> <section id=flash-the-u55c-fpga-card-with-a-proper-image-and-install-linux-kernel-driver > <h2 id=flash-the-u55c-fpga-card-with-a-proper-image-and-install-linux-kernel-driver >Flash the U55C FPGA card with a proper image and install Linux kernel driver.<a class=headerlink href="#flash-the-u55c-fpga-card-with-a-proper-image-and-install-linux-kernel-driver" title="Link to this heading"></a></h2> <section id=firmware-flashing > <h3 id=firmware-flashing >Firmware flashing<a class=headerlink href="#firmware-flashing" title="Link to this heading"></a></h3> <ol class="arabic simple"> <li><p>Check that the card is detected by OS with “lspci |grep Xilinx” and check the PCIe bus/device/function (BDF) number, <code class="docutils literal notranslate"><span class=pre >11:00.0</span></code> in this case:</p> </ol> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ lspci |grep Xilinx
23:00.0 Processing accelerators: Xilinx Corporation Device 3450 (rev 2)
</pre></div> </div> <p>Note the device number <code class="docutils literal notranslate"><span class=pre >3450</span></code> that identifies Jungfraujoch device (Jungfraujoch pass is 3450 m above sea level) and <code class="docutils literal notranslate"><span class=pre >rev</span> <span class=pre >2</span></code> identifying release of the firmware.</p> <ol class="arabic simple" start=2 > <li><p>Check the speed of the card, that it is detected as PCIe Gen4x8 device (needs to be done as root, otherwise configuration details are not given):</p> </ol> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ sudo lspci -vv -s &lt;PCIe slot number&gt;
23:00.0 Processing accelerators: Xilinx Corporation Device 3450
(...)
LnkSta: Speed 16GT/s (ok), Width x8 (ok)
(...)
</pre></div> </div> <ol class="arabic simple" start=3 > <li><p>Download the MCS image from release files or build it using Vivado (WARNING! building time can be about 8 hours and doesnt allways reach correct timing).</p> <li><p>Flash the card with <code class="docutils literal notranslate"><span class=pre >xbflash.qspi</span></code> tool (part of Jungfraujoch). For fresh card use:</p> </ol> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >sudo</span> <span class=n >xbflash</span><span class=o >.</span><span class=n >qspi</span> <span class=o >--</span><span class=n >primary</span> <span class=o >&lt;</span><span class=n >path</span> <span class=n >to</span> <span class=n >MCS</span> <span class=n >file</span><span class=o >&gt;</span> <span class=o >--</span><span class=n >card</span> <span class=o >&lt;</span><span class=n >PCIe</span> <span class=n >slot</span> <span class=kn >from</span> <span class=nn >above</span><span class=o >&gt;</span> <span class=o >--</span><span class=n >bar</span><span class=o >-</span><span class=n >offset</span> <span class=mh >0x1f06000</span>
</pre></div> </div> <p>For card that was already flashed with Jungfraujoch images:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >sudo</span> <span class=n >xbflash</span><span class=o >.</span><span class=n >qspi</span> <span class=o >--</span><span class=n >primary</span> <span class=o >&lt;</span><span class=n >path</span> <span class=n >to</span> <span class=n >MCS</span> <span class=n >file</span><span class=o >&gt;</span> <span class=o >--</span><span class=n >card</span> <span class=o >&lt;</span><span class=n >PCIe</span> <span class=n >slot</span> <span class=kn >from</span> <span class=nn >above</span><span class=o >&gt;</span>
</pre></div> </div> <p>It is necessary to confirm the operation by pressing <code class="docutils literal notranslate"><span class=pre >Y</span></code> key or one can add <code class="docutils literal notranslate"><span class=pre >--force</span></code> option to avoid confirmation. It is safe to run multiple flashing processes in parallel for different cards, for example in separate screen sessions.</p> <ol class="arabic simple" start=5 > <li><p>Cold reboot:</p> </ol> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >sudo</span> <span class=n >ipmitool</span> <span class=n >chassis</span> <span class=n >power</span> <span class=n >cycle</span>
</pre></div> </div> </section> <section id=install-pcie-driver > <h3 id=install-pcie-driver >Install PCIe driver<a class=headerlink href="#install-pcie-driver" title="Link to this heading"></a></h3> <p>For first run it is though recommended to try the driver without installing to the kernel directory:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ cd fpga/pcie_driver
$ make
$ sudo insmod jfjoch.ko
</pre></div> </div> <p>Check with <code class="docutils literal notranslate"><span class=pre >dmesg</span></code> that the device was properly found:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ dmesg |grep jfjoch
[ 431.624933] jfjoch 0000:23:00.0: enabling device (0140 -&gt; 0142)
[ 431.919147] misc jfjoch0: Jungfraujoch FPGA loaded with FW build: 5610030a
</pre></div> </div> <p>If things work, it is recommended to install the driver with DKMS, so it is rebuilt for kernel updates. On RHEL 8 you can install prebuilt RPM provided in the Gitlab package registry. On other systems follow procedure in <a class="reference internal" href=FPGA_PCIE_DRIVER.html ><span class="std std-doc">PCIe driver</span></a>.</p> <p>NOTE: Driver installation procedure on non-RHEL 8 systems is not well understood/optimized at the moment.</p> <p>NOTE: In case driver is included in the init RAM-disk image, it is necessary to rebuild the RAM-disk if driver is updated:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span>$ sudo dracut -f
</pre></div> </div> </section> <section id=configure-network > <h3 id=configure-network >Configure network<a class=headerlink href="#configure-network" title="Link to this heading"></a></h3> <p>Configure switch according to <a class="reference internal" href=FPGA_NETWORK.html ><span class="std std-doc">FPGA network guide</span></a> - specifically set manual speed and turn off auto-negotiation for the port used to connect U55C card and connect card to switch.</p> </section> <section id=running-jungfraujoch-software > <h3 id=running-jungfraujoch-software >Running Jungfraujoch software<a class=headerlink href="#running-jungfraujoch-software" title="Link to this heading"></a></h3> <p>Main Jungfraujoch service is called <code class="docutils literal notranslate"><span class=pre >jfjoch_broker</span></code>. It is responsible for handling data from FPGAs, doing processing, analysis, compression and sending images on ZeroMQ output. It is recommended to run the service as <code class="docutils literal notranslate"><span class=pre >systemd</span></code> service.</p> <p><code class="docutils literal notranslate"><span class=pre >jfjoch_broker</span></code> takes two parameters: JSON configuration file and HTTP port (default is 5232). Example JSON files are placed in <code class="docutils literal notranslate"><span class=pre >etc/</span></code> folder. JSON file format is also explained in the OpenAPI definition, as <code class="docutils literal notranslate"><span class=pre >jfjoch_settings</span></code> data structure.</p> <p>When running the service can be accessed via HTTP interface from a web browser for configuration and monitoring.</p> <p>To prepare the configuration file one also needs to reference calibration files: gain files for PSI JUNGFRAU and trim-bit files for PSI EIGER. These need to be obtained from the PSI Detector Group.</p> </section> <section id=card-verification > <h3 id=card-verification >Card verification<a class=headerlink href="#card-verification" title="Link to this heading"></a></h3> <p>To test that FPGA board is working properly without access to a JUNGFRAU detector, you can use <code class="docutils literal notranslate"><span class=pre >jfjoch_fpga_test</span></code> tool. For example to simulate 10M pixel system with 4 FPGA cards and 200k images on a 2 CPU system with 2 GPUs:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >jfjoch_fpga_test</span> <span class=o >~/</span><span class=n >nextgendcu</span><span class=o >/</span> <span class=o >-</span><span class=n >m20</span> <span class=o >-</span><span class=n >s4</span> <span class=o >-</span><span class=n >i</span> <span class=mi >200000</span> <span class=o >-</span><span class=n >Pn2g2</span>
</pre></div> </div> <p>Or 1M pixel system with one FPGA card:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >jfjoch_fpga_test</span> <span class=o >~/</span><span class=n >nextgendcu</span><span class=o >/</span> <span class=o >-</span><span class=n >m2</span> <span class=o >-</span><span class=n >s1</span> <span class=o >-</span><span class=n >i</span> <span class=mi >200000</span>
</pre></div> </div> </section> </section> <section id=install-jungfraujoch-writer > <h2 id=install-jungfraujoch-writer >Install Jungfraujoch writer<a class=headerlink href="#install-jungfraujoch-writer" title="Link to this heading"></a></h2> <p>Jungfraujoch writer is an additional service, that can connect to <code class="docutils literal notranslate"><span class=pre >jfjoch_broker</span></code> ZeroMQ interface and writes files according to NeXus/NXmx HDF5 standard.</p> <p>At the moment it is better to have a separate machine, with access to distributed file system, for writing images.</p> <p>Writer can be installed with a dedicated RPM file or compiled from source. For compilation, you can use the following commands:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >mkdir</span> <span class=n >build</span>
<span class=n >cd</span> <span class=n >build</span>
<span class=n >cmake</span> <span class=o >-</span><span class=n >DJFJOCH_WRITER_ONLY</span><span class=o >=</span><span class=n >ON</span> <span class=o >-</span><span class=n >DCMAKE_INSTALL_PREFIX</span><span class=o >=&lt;</span><span class=n >directory</span> <span class=n >to</span> <span class=n >install</span><span class=o >&gt;</span> <span class=o >..</span>
<span class=n >make</span> <span class=n >jfjoch</span>
</pre></div> </div> </section> <section id=install-jungfraujoch-image-viewer > <h2 id=install-jungfraujoch-image-viewer >Install Jungfraujoch image viewer<a class=headerlink href="#install-jungfraujoch-image-viewer" title="Link to this heading"></a></h2> <p>Jungfraujoch viewer is X-ray diffraction image viewer, that is optimized to open Jungfraujoch HDF5 files.</p> <p>The viewer is a Qt application and it requires recent version of the library, therefore it is an optional dependency.</p> <p>To include it in the building of Jungfraujoch use <code class="docutils literal notranslate"><span class=pre >-DJFJOCH_VIEWER_BUILD=ON</span></code> directive for CMake:</p> <div class="highlight-default notranslate"><div class=highlight ><pre><span></span><span class=n >mkdir</span> <span class=n >build</span>
<span class=n >cd</span> <span class=n >build</span>
<span class=n >cmake</span> <span class=o >-</span><span class=n >DJFJOCH_VIEWER_BUILD</span><span class=o >=</span><span class=n >ON</span> <span class=o >-</span><span class=n >DCMAKE_INSTALL_PREFIX</span><span class=o >=&lt;</span><span class=n >directory</span> <span class=n >to</span> <span class=n >install</span><span class=o >&gt;</span> <span class=o >..</span>
<span class=n >make</span> <span class=n >jfjoch</span>
</pre></div> </div> </section> <section id=install-jungfraujoch-python-client > <h2 id=install-jungfraujoch-python-client >Install Jungfraujoch Python client<a class=headerlink href="#install-jungfraujoch-python-client" title="Link to this heading"></a></h2> <p>Use pip:</p> <div class="highlight-shell notranslate"><div class=highlight ><pre><span></span>pip<span class=w > </span>install<span class=w > </span>jfjoch-client
</pre></div> </div> </section> </section> </article> </div> </div> </main> </div> <footer class=md-footer > <div class=md-footer-nav > <nav class="md-footer-nav__inner md-grid"> <a href=VERSIONING.html title="Semantic versioning" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel=prev > <div class="md-flex__cell md-flex__cell--shrink"> <i class="md-icon md-icon--arrow-back md-footer-nav__button"></i> </div> <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"> <span class=md-flex__ellipsis > <span class=md-footer-nav__direction > "Previous" </span> Semantic versioning </span> </div> </a> <a href=CHANGELOG.html title=Changelog class="md-flex md-footer-nav__link md-footer-nav__link--next" rel=next > <div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title"><span class=md-flex__ellipsis > <span class=md-footer-nav__direction > "Next" </span> Changelog </span> </div> <div class="md-flex__cell md-flex__cell--shrink"><i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i> </div> </a> </nav> </div> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-footer-copyright > <div class=md-footer-copyright__highlight > &#169; Copyright 2024, Paul Scherrer Institute. </div> Created using <a href="http://www.sphinx-doc.org/">Sphinx</a> 8.1.3. and <a href="https://github.com/bashtage/sphinx-material/">Material for Sphinx</a> </div> </div> </div> </footer> <script src="_static/javascripts/application.js"></script> <script>app.initialize({version: "1.0.4", url: {base: ".."}})</script>