Difference: EpicsContainer (1 vs. 17)

Revision 17
12 Nov 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 37 to 37
 

Default run command (standalone):
Changed:
<
<
docker run -dit -v <PATH_ON_HOST>:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
>
>
docker run -dit -v :/config [OPTIONS] paluma.rub.de/panda-ioc ./
 

The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`
Line: 62 to 62
  To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`

OPTIONS:

  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
Deleted:
<
<
  • Connect with same credentials as (current) user:
    `--user $(id -u):$(id -g)
 
  • Connect being a member of e.g. group dialout:
    `--group-add: $(getent group | grep dialout | cut -d ":" -f 3)
  • Connect to ethernet devices:
    Works without any additional settings
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio`
Line: 85 to 84
 

Usage

Default run command (PC with two NICs required):
Changed:
<
<
docker run -d --network host -v <PATH_ON_HOST>:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PV_LIST> -access <ACCESS_FILE>
>
>
docker run -d --network host -v :/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist -access 
 

The ca-gateway image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the gateway configuration (access file and pvlist) which is mounted at `/config`
Line: 99 to 98
 

Usage

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v <PATH_ON_HOST>:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v :/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings 
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Line: 113 to 112
 

Usage

Default run command (standalone):
Changed:
<
<
docker run -d -v <PATH_ON_HOST>:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings <SETTINGS_FILE>
>
>
docker run -d -v :/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings 
 

The archive-engine image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing custom configuration settings and engine-configuration file(s) which is mounted at `/home/panda-dcs/config`
Line: 133 to 132
 

Hameg HMP4040 LV Power Supply

  1. Install Docker (refer to the links at the top of this page!)
  2. Create a directory, where you will store the needed configuration files for our IOC
Changed:
<
<
    mkdir ${HOME}/hameg_demo
  1. Now create a file called "hameg_demo.sub"
>
>

  1. Now create a file called "hameg_demo.sub"
  inside this newly created directory with the following content to get access to all for channels of this device
%CODE{"bash"}% file "/databases/hmp4040.db"
Line: 146 to 148
  { 3, hmp_1 } } %ENDCODE%
Changed:
<
<
  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
  2. USB:
>
>

  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
  2. USB:
 
  1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
Changed:
<
<
  1. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
    Create a file "hameg_demo.cmd" within the directory we created at the beginning:
>
>
  1. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
    Create a file "hameg_demo.cmd" within the directory we created at the beginning:
  %CODE{"bash"}% #!/pandaIoc epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" )
Line: 175 to 177
 

iocInit() %ENDCODE%
Changed:
<
<
    1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
      This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
    1. Now start the docker container to run your IOC:
      docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
  1. Ethernet:
>
>

    1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
      This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.

    1. Now start the docker container to run your IOC:
      docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd

  1. Ethernet:
 
  1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
Changed:
<
<
  1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
    Create a file "hameg_demo.cmd" within the directory we created at the beginning:
>
>
  1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
    Create a file "hameg_demo.cmd" within the directory we created at the beginning:
  %CODE{"bash"}% #!/pandaIoc epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" )
Line: 195 to 199
  dbLoadTemplate ("/config/hameg_demo.sub" )

iocInit()
Changed:
<
<
%ENDCODE%
>
>
%ENDCODE%
 
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
Deleted:
<
<
 


Wiener PL5xx and Wiener MPOD LV power supplies (SNMP)

  1. Install Docker (refer to the links at the top of this page!)
Changed:
<
<
  1. Create a directory, where you will store the needed configuration files for our IOC
    mkdir ${HOME}/wiener_demo
>
>
  1. Create a directory, where you will store the needed configuration files for our IOC

 
  1. Connect the Wiener MPOD (or PL5xx) via ethernet to your PC and look up the IP address of the device (e.g. 192.168.0.5)
  2. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
%CODE%
Line: 218 to 223
  { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 } } %ENDCODE%
Changed:
<
<
  1. Now create the startup script for the IOC
>
>
  1. Now create the startup script for the IOC
  %CODE{"bash"}% #!/pandaIoc epicsEnvSet( "WCR", "guru WIENER-CRATE-MIB::" )
Line: 230 to 235
 

iocInit() %ENDCODE%
Changed:
<
<
  1. Now start the docker container to run your IOC:
>
>
  1. Now start the docker container to run your IOC:
 
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

-- PeterZumbruch - 12 Nov 2019
Revision 16
12 Nov 2019 - Main.PeterZumbruch
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 62 to 62
  To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`

OPTIONS:

  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
Added:
>
>
  • Connect with same credentials as (current) user:
    `--user $(id -u):$(id -g)
  • Connect being a member of e.g. group dialout:
    `--group-add: $(getent group | grep dialout | cut -d ":" -f 3)
 
  • Connect to ethernet devices:
    Works without any additional settings
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio`
  • Connect to I2C (arm only):
    `--device /dev/i2c-<NUM>`
Line: 231 to 233
 
  1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
Changed:
<
<
-- PeterZumbruch - 17 Oct 2019
>
>
-- PeterZumbruch - 12 Nov 2019
Revision 15
17 Oct 2019 - Main.PeterZumbruch
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 37 to 37
 

Default run command (standalone):
Changed:
<
<
docker run -dit -v &lt;PATH_ON_HOST&gt;:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
>
>
docker run -dit -v <PATH_ON_HOST>:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
 

The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`
Line: 83 to 83
 

Usage

Default run command (PC with two NICs required):
Changed:
<
<
docker run -d --network host -v &lt;PATH_ON_HOST&gt;:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist &lt;PV_LIST&gt; -access &lt;ACCESS_FILE&gt;
>
>
docker run -d --network host -v <PATH_ON_HOST>:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PV_LIST> -access <ACCESS_FILE>
 

The ca-gateway image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the gateway configuration (access file and pvlist) which is mounted at `/config`
Line: 97 to 97
 

Usage

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v &lt;PATH_ON_HOST&gt;:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v <PATH_ON_HOST>:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Line: 111 to 111
 

Usage

Default run command (standalone):
Changed:
<
<
docker run -d -v &lt;PATH_ON_HOST&gt;:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings &lt;SETTINGS_FILE&gt;
>
>
docker run -d -v <PATH_ON_HOST>:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings <SETTINGS_FILE>
 

The archive-engine image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing custom configuration settings and engine-configuration file(s) which is mounted at `/home/panda-dcs/config`
Line: 230 to 230
  %ENDCODE%
  1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
Deleted:
<
<
 

-- PeterZumbruch - 17 Oct 2019
Revision 14
17 Oct 2019 - Main.PeterZumbruch
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 175 to 175
  %ENDCODE%
    1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
      This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
Changed:
<
<
    1. Now start the docker container to run your IOC:
        <
        docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
    1. Ethernet:
>
>
    1. Now start the docker container to run your IOC:
      docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
  1. Ethernet:
 
    1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
    2. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
      Create a file "hameg_demo.cmd" within the directory we created at the beginning:
Changed:
<
<
%CODE%
>
>
%CODE{"bash"}%
  #!/pandaIoc epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
Line: 193 to 193
  dbLoadTemplate ("/config/hameg_demo.sub" )

iocInit()
Changed:
<
<
%ENDCODE%
>
>
%ENDCODE%
 
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
Changed:
<
<
      1. Now start the docker container to run your IOC:
>
>
      1. Now start the docker container to run your IOC:
 
docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
Added:
>
>


 

Wiener PL5xx and Wiener MPOD LV power supplies (SNMP)

  1. Install Docker (refer to the links at the top of this page!)
  2. Create a directory, where you will store the needed configuration files for our IOC
Changed:
<
<
mkdir ${HOME}/wiener_demo
>
>
    mkdir ${HOME}/wiener_demo
 
  1. Connect the Wiener MPOD (or PL5xx) via ethernet to your PC and look up the IP address of the device (e.g. 192.168.0.5)
Changed:
<
<
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
>
>
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
  %CODE% file "/databases/WienerPL500.db" {
Line: 214 to 217
  } %ENDCODE%
  1. Now create the startup script for the IOC
Changed:
<
<
%CODE%
>
>
%CODE{"bash"}%
  #!/pandaIoc epicsEnvSet( "WCR", "guru WIENER-CRATE-MIB::" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
Line: 229 to 232
 
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

Changed:
<
<
-- FlorianFeldbauer - 21 Aug 2019
>
>
-- PeterZumbruch - 17 Oct 2019
Revision 13
17 Oct 2019 - Main.PeterZumbruch
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 16 to 16
 
docker pull paluma.rub.de/<IMAGENAME>

You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `:latest` (default)
Added:
>
>

For a deeper look in the docker build process, you might have a look at the build repository https://panda-repo.gsi.de/f.feldbauer/epics-docker.
 

Images

panda-ioc

Line: 72 to 74
 
    • PVaccess: `--network host`

Tags

  • 1.0.0, 1, latest
    based on epics-base:7.0.3, asyn 4.36, autosave 5.10, calc 3.7.3, modbus 3.0, devSnmp 1.0.0.1, StreamDevice 2.8.9, drvAsynI2C 1.0.2, devGpio 1.0.6
Added:
>
>
--
 

ca-gateway

Docker Image providing the Channel Access gateway.
Line: 87 to 90
  The CLIENT IP is the broadcast address of the network with the IOCs, the SERVER IP is the local IP address of the network to the supervisory layer.

Tags

  • 2.1.1.0, 2, latest
Added:
>
>
--
 

phoebus

The phoebus image provides the Phoebus GUI toolchain, to create, edit and run OPIs.
Line: 100 to 104
  The phoebus image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the display files and custom configuration settings which is mounted at `/home/panda-dcs/config`

Tags

  • 4.6.0-SNAPSHOT, 4, latest
Added:
>
>
--
 

archive-engine

The archive-engine image provides the Phoebus RDB archiver.
Line: 115 to 120
  The CA address list must be configured manually in settings file (or use `--network host`).

Tags

  • 4.6.0-SNAPSHOT, 4, latest
Added:
>
>
--
 

sncseq base image

This is a base image to create Docker images for sequencer programs and cannot be used directly. The Sequencer programs are collected at our PANDA Gitlab server
Line: 124 to 130
 

Examples of using the panda-ioc

Hameg HMP4040 LV Power Supply

  1. Install Docker (refer to the links at the top of this page!)
Changed:
<
<
  1. Create a directory, where you will store the needed configuration files for our IOC
mkdir ${HOME}/hameg_demo

  1. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    %CODE%
>
>
  1. Create a directory, where you will store the needed configuration files for our IOC
    mkdir ${HOME}/hameg_demo
  1. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    %CODE{"bash"}%
  file "/databases/hmp4040.db" { pattern { CHAN, PORT }
Line: 137 to 144
  { 3, hmp_1 } } %ENDCODE%
Changed:
<
<
  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
    1. USB:
>
>
  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
  2. USB:
 
      1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
      2. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
Changed:
<
<
%CODE%
>
>
%CODE{"bash"}%
  #!/pandaIoc epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
Line: 164 to 173
 

iocInit() %ENDCODE%
Changed:
<
<
      1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd

    1. Ethernet:
>
>
    1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
      This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
    1. Now start the docker container to run your IOC:
        <
        docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
    1. Ethernet:
 
      1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
      2. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        %CODE%
Line: 219 to 227
  %ENDCODE%
  1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
Added:
>
>
 

-- FlorianFeldbauer - 21 Aug 2019
Revision 12
30 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 35 to 35
 

Default run command (standalone):
Changed:
<
<
docker run -dit -v :/config [OPTIONS] paluma.rub.de/panda-ioc ./
>
>
docker run -dit -v &lt;PATH_ON_HOST&gt;:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
 

The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`
Line: 80 to 80
 

Usage

Default run command (PC with two NICs required):
Changed:
<
<
docker run -d --network host -v :/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist -access 
>
>
docker run -d --network host -v &lt;PATH_ON_HOST&gt;:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist &lt;PV_LIST&gt; -access &lt;ACCESS_FILE&gt;
 

The ca-gateway image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the gateway configuration (access file and pvlist) which is mounted at `/config`
Line: 93 to 93
 

Usage

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v :/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings 
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v &lt;PATH_ON_HOST&gt;:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Line: 106 to 106
 

Usage

Default run command (standalone):
Changed:
<
<
docker run -d -v :/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings 
>
>
docker run -d -v &lt;PATH_ON_HOST&gt;:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings &lt;SETTINGS_FILE&gt;
 

The archive-engine image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing custom configuration settings and engine-configuration file(s) which is mounted at `/home/panda-dcs/config`
Line: 164 to 164
 

iocInit() %ENDCODE%
Added:
>
>
 
      1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
Line: 184 to 186
 

iocInit() %ENDCODE%
Added:
>
>
 
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
Revision 11
27 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Usefull links:

Changed:
<
<
>
>
 

Docker Container

The PANDA DCS Software will be distributed and maintained using Docker containers. All containers have been tested extensively under Debian 9 and 10. The gateway and IOC containers were also tested under Windows 10 (only connection to network devices!)
Deleted:
<
<
When installing Docker CE for Windows 10, chose "Linux Containers" when aksed which kind of containers you want to use on your system.
  All docker images listed below can be downloaded and used with:
Changed:
<
<
docker pull paluma.rub.de/<IMAGENAME>

You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `:latest` (default)
>
>
docker pull paluma.rub.de/<IMAGENAME>
 
Changed:
<
<
All images are rebuild and reuploaded to the registry server every Saturday night.
>
>
You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `:latest` (default)
 

Images

panda-ioc

Line: 38 to 34
 

Usage

Default run command (standalone):
Deleted:
<
<
docker run -dit -v <PATH_ON_YOUR_HOST>:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
 
Changed:
<
<
The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`
>
>
docker run -dit -v :/config [OPTIONS] paluma.rub.de/panda-ioc ./

The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`
 

An example IOC startupscript looks like this
Changed:
<
<
#!/pandaIoc
>
>
%CODE% #!/pandaIoc
  epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 ) pandaIoc_registerRecordDeviceDriver( pdbbase )

## Load device drivers and records at this point
Added:
>
>
drvAsynIPPortConfigure( "huber", "192.168.0.5 TCP", 0, 0, 0 )
  ## Load record instances
Changed:
<
<
dbLoadRecords( "/config/dbExample2.db", "user=Test, no=1, scan='1 second'" )
>
>
dbLoadRecords( "/database/Huber_Unistate_425.db", "subsys=LMD, sector=H1, PORT=huber" )
 
Changed:
<
<
iocInit()
>
>
iocInit() %ENDCODE%
 

The preinstalled database files provided with this Docker image are located at `/databases` within the container's filesystem. A list of all available database and protocol files can be found on the PANDA Gitlab server.
Added:
>
>

To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`
 

OPTIONS:

  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
  • Connect to ethernet devices:
    Works without any additional settings
Line: 68 to 70
 
  • Access remote PVs:
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
Deleted:
<
<
To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`
 

Tags

  • 1.0.0, 1, latest
    based on epics-base:7.0.3, asyn 4.36, autosave 5.10, calc 3.7.3, modbus 3.0, devSnmp 1.0.0.1, StreamDevice 2.8.9, drvAsynI2C 1.0.2, devGpio 1.0.6

ca-gateway

Line: 79 to 80
 

Usage

Default run command (PC with two NICs required):
Changed:
<
<
docker run -d --network host -v <PATH_ON_HOST>:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>
>
>
docker run -d --network host -v :/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist -access 
 

The ca-gateway image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the gateway configuration (access file and pvlist) which is mounted at `/config`
Line: 92 to 93
 

Usage

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v <PATH_ON_HOST>:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v :/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings 
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Line: 105 to 106
 

Usage

Default run command (standalone):
Changed:
<
<
docker run -d -v <PATH_ON_HOST>:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings <SETTINGS_FILE>
>
>
docker run -d -v :/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings 
 

The archive-engine image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing custom configuration settings and engine-configuration file(s) which is mounted at `/home/panda-dcs/config`
Line: 122 to 123
 

Examples of using the panda-ioc

Hameg HMP4040 LV Power Supply

Changed:
<
<
  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/hameg_demo
  3. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    file "/databases/hmp4040.db"
>
>
  1. Install Docker (refer to the links at the top of this page!)
  2. Create a directory, where you will store the needed configuration files for our IOC
mkdir ${HOME}/hameg_demo

  1. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    %CODE% file "/databases/hmp4040.db"
  { pattern { CHAN, PORT } { 0, hmp_1 } { 1, hmp_1 } { 2, hmp_1 } { 3, hmp_1 }
Changed:
<
<
}
>
>
} %ENDCODE%
 
  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
    1. USB:
      1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
Changed:
<
<
      1. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/pandaIoc
>
>
      1. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        %CODE% #!/pandaIoc
  epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 ) pandaIoc_registerRecordDeviceDriver( pdbbase )
Line: 155 to 162
  ## Load record instances dbLoadTemplate ("/config/hameg_demo.sub" )
Changed:
<
<
iocInit()
>
>
iocInit() %ENDCODE%
 
      1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
Changed:
<
<
      1. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
>
>
      1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
 
    1. Ethernet:
      1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
Changed:
<
<
      1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/pandaIoc
>
>
      1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        %CODE% #!/pandaIoc
  epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 ) pandaIoc_registerRecordDeviceDriver( pdbbase )
Line: 171 to 182
  ## Load record instances dbLoadTemplate ("/config/hameg_demo.sub" )
Changed:
<
<
iocInit()
>
>
iocInit() %ENDCODE%
 
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
Changed:
<
<
      1. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
>
>
      1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
 

Wiener PL5xx and Wiener MPOD LV power supplies (SNMP)

Changed:
<
<
  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/wiener_demo
>
>
  1. Install Docker (refer to the links at the top of this page!)
  2. Create a directory, where you will store the needed configuration files for our IOC
mkdir ${HOME}/wiener_demo
 
  1. Connect the Wiener MPOD (or PL5xx) via ethernet to your PC and look up the IP address of the device (e.g. 192.168.0.5)
Changed:
<
<
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
    file "/databases/WienerPL500.db"
    {
    pattern { subsys, dev, sector, CRATE, CH }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u0 }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 }
    }
  2. Now create the startup script for the IOC
    #!/pandaIoc
>
>
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
file "/databases/WienerPL500.db"
{
        pattern { subsys, dev, sector, CRATE, CH }
        { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u0 }
        { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 }
}

  1. Now create the startup script for the IOC
    %CODE% #!/pandaIoc
  epicsEnvSet( "WCR", "guru WIENER-CRATE-MIB::" ) dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 ) pandaIoc_registerRecordDeviceDriver( pdbbase )
Line: 187 to 211
  ## Load record instances dbLoadTemplate ("/config/wiener_demo.sub" )
Changed:
<
<
iocInit()
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

>
>
iocInit() %ENDCODE%
  1. Now start the docker container to run your IOC:
docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
 

-- FlorianFeldbauer - 21 Aug 2019
Revision 10
23 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 15 to 15
  When installing Docker CE for Windows 10, chose "Linux Containers" when aksed which kind of containers you want to use on your system.

All docker images listed below can be downloaded and used with:
Deleted:
<
<
 
docker pull paluma.rub.de/<IMAGENAME>
Changed:
<
<
You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `latest` (default)
>
>
You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `:latest` (default)

All images are rebuild and reuploaded to the registry server every Saturday night.
 
Changed:
<
<

Usage

>
>

Images

 

panda-ioc

Added:
>
>
The panda-ioc image provides a ready to use EPICS IOC with the following device support routines:
  • asyn
  • autosave
  • calc
  • modbus
  • devSnmp
  • StreamDevice
  • drvAsynI2C
  • devGpio

The image is available for amd64 and arm/v7

Usage

  Default run command (standalone):
Added:
>
>
docker run -dit -v <PATH_ON_YOUR_HOST>:/config [OPTIONS] paluma.rub.de/panda-ioc ./<YOUR_ST.CMD>
 
Changed:
<
<
docker run -dit [VOLUMES] [OPTIONS] paluma.rub.de/panda-ioc ./[ST.CMD]

Volumes:

>
>
The panda-ioc image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the IOC startup script, and substitution files which is mounted at `/config`

An example IOC startupscript looks like this
#!/pandaIoc
epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" )
dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
pandaIoc_registerRecordDeviceDriver( pdbbase )

## Load device drivers and records at this point
## Load record instances
dbLoadRecords( "/config/dbExample2.db", "user=Test, no=1, scan='1 second'" )
 
Changed:
<
<
The panda-ioc image offers three mountable Volumes
  • /home/panda-dcs/config: This directory should contain the substitution files and start up scripts for your IOC.
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from our git repo are copied here)
  • /home/panda-dcs/databases: This directory contains the database files for the IOC (if this directory is empty, all database files from our git repo are copied here)
Mount volumes with: `-v <PATH_ON_HOST>:/home/panda-dcs/config`

OPTIONS can be:

>
>
iocInit()

The preinstalled database files provided with this Docker image are located at `/databases` within the container's filesystem. A list of all available database and protocol files can be found on the PANDA Gitlab server.

OPTIONS:

 
  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
  • Connect to ethernet devices:
    Works without any additional settings
Changed:
<
<
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio --group-add $(grep gpio /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's gpio group, does not work in compose files!)
  • Connect to I2C (arm only):
    `--device /dev/i2c-<NUM> --group-add $(grep i2c /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's i2c group, does not work in compose files!)
>
>
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio`
  • Connect to I2C (arm only):
    `--device /dev/i2c-<NUM>`
 
  • Connect to CAN bus devices:
    `--network host`
  • Access PVs from remote:
Changed:
<
<
    • CA: `-p 5064-5065:5064-5065 -p 5064-5065:5064-5065/udp` (might be sufficient to publish CAS ports)
>
>
    • CA: `-p 5064-5065:5064-5065 -p 5064-5065:5064-5065/udp`
 
    • PVaccess: `--network host`
  • Access remote PVs:
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
Changed:
<
<
To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q
>
>
To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`

Tags

  • 1.0.0, 1, latest
    based on epics-base:7.0.3, asyn 4.36, autosave 5.10, calc 3.7.3, modbus 3.0, devSnmp 1.0.0.1, StreamDevice 2.8.9, drvAsynI2C 1.0.2, devGpio 1.0.6
 

ca-gateway

Added:
>
>
Docker Image providing the Channel Access gateway.

The image is available for amd64 and arm/v7

Usage

  Default run command (PC with two NICs required):
Added:
>
>
docker run -d --network host -v <PATH_ON_HOST>:/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>
 
Changed:
<
<
docker run -d --network host -v <PATH_ON_HOST>:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>
>
>
The ca-gateway image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the gateway configuration (access file and pvlist) which is mounted at `/config`
 
Changed:
<
<
The directory `/home/panda-dcs/config` must contain the configuration files for the gateway, i.e. PVLIST_FILE and ACCESS_FILE.

Phoebus

>
>
The CLIENT IP is the broadcast address of the network with the IOCs, the SERVER IP is the local IP address of the network to the supervisory layer.

Tags

  • 2.1.1.0, 2, latest

phoebus

 
Changed:
<
<
Default run command (standalone)
>
>
The phoebus image provides the Phoebus GUI toolchain, to create, edit and run OPIs.

Usage

 
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v ${PWD}/phoebus-config:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
>
>
Default run command (standalone)
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v <PATH_ON_HOST>:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Changed:
<
<
The directory `/home/panda-dcs/config` contains configuration files and bob files (display-files)

Archive-Engine

>
>
The phoebus image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing the display files and custom configuration settings which is mounted at `/home/panda-dcs/config`

Tags

  • 4.6.0-SNAPSHOT, 4, latest

archive-engine

The archive-engine image provides the Phoebus RDB archiver.

Usage

 

Default run command (standalone):
Added:
>
>
docker run -d -v <PATH_ON_HOST>:/home/panda-dcs/config -p 4812 paluma.rub.de/archive-engine -engine <ENGINE> -settings <SETTINGS_FILE>
 
Changed:
<
<
docker run -d -v ${PWD}/phoebus-config:/home/panda-dcs/config -p 4812:4812 paluma.rub.de/archive-engine -engine Test -settings <SETTINGS_FILE>
>
>
The archive-engine image works with Volumes. With volumes you can mount a local directory from your host system into the Docker container (see `-v` option).
You need a directory on your host containing custom configuration settings and engine-configuration file(s) which is mounted at `/home/panda-dcs/config`
 
Changed:
<
<
If there are any `*.xml` files present in the `/home/panda-dcs/config` directory at the first start of the container, the archive engine will import them as new engines (using `-replace_engine -steal_channels`). The basename of the xml-files is used as engine name.
CA address list must be configured manually in settings file (or use `--network host`).
>
>
When the container is started for the first time, any `*.xml` files present in `/home/panda-dcs/config` are imported as new engines into the archiver configuration (using `-replace_engine -steal_channels`). The basename of the xml-files is used as engine name.

The CA address list must be configured manually in settings file (or use `--network host`).

Tags

  • 4.6.0-SNAPSHOT, 4, latest

sncseq base image

This is a base image to create Docker images for sequencer programs and cannot be used directly. The Sequencer programs are collected at our PANDA Gitlab server

The image is available for amd64 and arm/v7
 
Changed:
<
<

Examples

>
>

Examples of using the panda-ioc

 

Hameg HMP4040 LV Power Supply

  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/hameg_demo
Changed:
<
<
  1. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    file "/epics/databases/hmp4040.db"
>
>
  1. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    file "/databases/hmp4040.db"
  { pattern { CHAN, PORT } { 0, hmp_1 }
Line: 84 to 134
  }
  1. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
    1. USB:
Changed:
<
<
      1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
      2. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/epics/ioc/bin/linux-x86_64/pandaIoc
        
        epicsEnvSet( "ARCH",                 "linux-x86_64" )
        epicsEnvSet( "TOP",                  "/epics/ioc" )
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/home/panda-dcs/protocols" )
        
        ## Register all support components
        dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 )
>
>
      1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
      2. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/pandaIoc
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" )
        dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
  pandaIoc_registerRecordDeviceDriver( pdbbase )
Deleted:
<
<
## Load drivers
  ## Connect to R&S HMP4040 with HO732 via usb-serial interface drvAsynSerialPortConfigure( "hmp_1", "/dev/ttyAMA0", 0, 0, 0 ) asynSetOption( "hmp_1", 0, "baud", "9600" )
Line: 109 to 153
  asynSetOption( "hmp_1", 0, "ixany", "N" )

## Load record instances
Changed:
<
<
dbLoadTemplate ("/home/panda-dcs/config/hameg_demo.sub" )
>
>
dbLoadTemplate ("/config/hameg_demo.sub" )
 

iocInit()
Changed:
<
<
      1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/home/panda-dcs/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
>
>
      1. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
 
    1. Ethernet:
      1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
Changed:
<
<
      1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/epics/ioc/bin/linux-x86_64/pandaIoc
        
        epicsEnvSet( "ARCH",                 "linux-x86_64" )
        epicsEnvSet( "TOP",                  "/epics/ioc" )
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/home/panda-dcs/protocols" )
        
        ## Register all support components
        dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 )
>
>
      1. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/pandaIoc
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/protocols" )
        dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
  pandaIoc_registerRecordDeviceDriver( pdbbase )
Deleted:
<
<
## Load drivers
  ## Connect to R&S HMP4040 with HO732 via usb-serial interface drvAsynIPPortConfigure( "hmp_1", "192.168.0.5:5025 TCP", 0, 0, 0 )

## Load record instances
Changed:
<
<
dbLoadTemplate ("/home/panda-dcs/config/hameg_demo.sub" )
>
>
dbLoadTemplate ("/config/hameg_demo.sub" )
 

iocInit()
Changed:
<
<
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
>
>
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
 

Wiener PL5xx and Wiener MPOD LV power supplies (SNMP)

  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/wiener_demo
  3. Connect the Wiener MPOD (or PL5xx) via ethernet to your PC and look up the IP address of the device (e.g. 192.168.0.5)
Changed:
<
<
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
    file "/epics/databases/WienerPL500.db"
    {
    pattern { subsys, dev, sector, CRATE, CH }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u0 }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 }
    }
  2. Now create the startup script for the IOC
    #!/epics/ioc/bin/linux-x86_64/pandaIoc
    
    epicsEnvSet( "ARCH", "linux-x86_64" )
    epicsEnvSet( "TOP",  "/epics/ioc" )
>
>
  1. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
    file "/databases/WienerPL500.db"
    {
    pattern { subsys, dev, sector, CRATE, CH }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u0 }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 }
    }
  2. Now create the startup script for the IOC
    #!/pandaIoc
  epicsEnvSet( "WCR", "guru WIENER-CRATE-MIB::" )
Changed:
<
<

## Register all support components dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 )
>
>
dbLoadDatabase( "/dbd/pandaIoc.dbd", 0, 0 )
  pandaIoc_registerRecordDeviceDriver( pdbbase )

## Load record instances
Changed:
<
<
dbLoadTemplate ("/home/panda-dcs/config/wiener_demo.sub" )
>
>
dbLoadTemplate ("/config/wiener_demo.sub" )
 

iocInit()
Changed:
<
<
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

List of Images and Tags

epics-base

This image is only needed if you want do create your own IOC Docker image. It is just a base image for the panda-ioc and ca-gateway images.
  • 7.0.3
    EPICS base 7.0.3, based on Debian-Buster
  • 7.0.2
    EPICS base 7.0.2, based on Debian-Stretch
  • 7.0.2-raspi
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the BeagleBone Black

panda-ioc

Image with ready-to-use EPICS IOC. Includes asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9
  • 7.0.2
    Based on "epics-base:7.0.2", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9, drvasyni2c 1.0.2, devgpio 1.0.6
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9, drvasyni2c 1.0.2, devgpio 1.0.6

ca-gateway

Image with ready to use CA-Gateway
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", CA-Gateway R2.1.1.0
  • 7.0.2
    Based on "epics-base:7.0.2", CA-Gateway R2.1.1.0

Phoebus

Image with the main Phoebus product
  • openjdk11, latest

Archive-Engine

Image with the archive-engine from Phoebus
  • openjdk11, latest
>
>
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

 

-- FlorianFeldbauer - 21 Aug 2019
Revision 9
10 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 7 to 7
 
Added:
>
>
 

Docker Container

The PANDA DCS Software will be distributed and maintained using Docker containers. All containers have been tested extensively under Debian 9 and 10. The gateway and IOC containers were also tested under Windows 10 (only connection to network devices!)
Line: 22 to 24
 

panda-ioc

Default run command (standalone):
Deleted:
<
<
docker run -dit -v ${PWD}/ioc-config:/home/panda-dcs/config [OPTIONS] paluma.rub.de/panda-ioc ./[ST.CMD]
 
Changed:
<
<
The panda-ioc image offers three mountable volumes:
>
>
docker run -dit [VOLUMES] [OPTIONS] paluma.rub.de/panda-ioc ./[ST.CMD]

Volumes:

The panda-ioc image offers three mountable Volumes
 
  • /home/panda-dcs/config: This directory should contain the substitution files and start up scripts for your IOC.
Changed:
<
<
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from git repo are copied here)
  • /home/panda-dcs/databases: This directory contains the database files for the IOC (if this directory is empty, all database files from git repo are copied here)
OPTIONS can be:
  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
>
>
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from our git repo are copied here)
  • /home/panda-dcs/databases: This directory contains the database files for the IOC (if this directory is empty, all database files from our git repo are copied here)
Mount volumes with: `-v <PATH_ON_HOST>:/home/panda-dcs/config`

OPTIONS can be:

  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
 
  • Connect to ethernet devices:
    Works without any additional settings
Changed:
<
<
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio --group-add $(grep gpio /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's gpio group, does not work in compose files!)
  • Connect to I2C (arm only):
    `--device /dev/i2c-<NUM> --group-add $(grep i2c /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's i2c group, does not work in compose files!)
  • Connect to CAN bus devices:
    `--network host`
>
>
  • Connect to GPIOs (arm only):
    `-v /sys/class/gpio --group-add $(grep gpio /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's gpio group, does not work in compose files!)
  • Connect to I2C (arm only):
    `--device /dev/i2c-<NUM> --group-add $(grep i2c /etc/group | awk -F':' '{ print $3 }')`
    (add panda-dcs user to host's i2c group, does not work in compose files!)
  • Connect to CAN bus devices:
    `--network host`
 
  • Access PVs from remote:
Changed:
<
<
    • CA: `-p 5064-5065:5064-5065 -p 5064-5065:5064-5065/udp` (might be sufficient to publish CAS ports)
    • PVaccess: `--network host`
>
>
    • CA: `-p 5064-5065:5064-5065 -p 5064-5065:5064-5065/udp` (might be sufficient to publish CAS ports)
    • PVaccess: `--network host`
 
  • Access remote PVs:
Changed:
<
<
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
To run commands within the IOC container use `docker attach <CONTAINER ID>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q
>
>
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
To run commands within the IOC container use `docker attach <CONTAINER ID/NAME>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q
 

ca-gateway

Default run command (PC with two NICs required):
Deleted:
<
<
docker run -d --network host -v ${PWD}/ioc-config:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>
 
Changed:
<
<
The directory `/home/panda-dcs/config` contains the configuration files for the gateway, i.e. PVLIST_FILE and ACCESS_FILE
>
>
docker run -d --network host -v <PATH_ON_HOST>:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>

The directory `/home/panda-dcs/config` must contain the configuration files for the gateway, i.e. PVLIST_FILE and ACCESS_FILE.
 

Phoebus

Default run command (standalone)
Revision 8
10 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 154 to 149
  iocInit()
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

List of Images and Tags

Changed:
<
<

epics-base

>
>

epics-base

 

This image is only needed if you want do create your own IOC Docker image. It is just a base image for the panda-ioc and ca-gateway images.
  • 7.0.3
    EPICS base 7.0.3, based on Debian-Buster
  • 7.0.2
    EPICS base 7.0.2, based on Debian-Stretch
  • 7.0.2-raspi
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the BeagleBone Black
Changed:
<
<

panda-ioc

>
>

panda-ioc

 

Image with ready-to-use EPICS IOC. Includes asyn, stream, autosave, calc, modbus and snmp device support modules
Changed:
<
<
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi"
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack"

ca-gateway

>
>
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9
  • 7.0.2
    Based on "epics-base:7.0.2", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9, drvasyni2c 1.0.2, devgpio 1.0.6
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack", asyn 4.36, autosave 5.10, calc 3.7.3 modbus 3.0, snmp 1.0.0.1, stream 2.8.9, drvasyni2c 1.0.2, devgpio 1.0.6

ca-gateway

 

Image with ready to use CA-Gateway
Changed:
<
<
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"

Phoebus

>
>
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", CA-Gateway R2.1.1.0
  • 7.0.2
    Based on "epics-base:7.0.2", CA-Gateway R2.1.1.0

Phoebus

 

Image with the main Phoebus product
  • openjdk11, latest
Changed:
<
<

Archive-Engine

>
>

Archive-Engine

 

Image with the archive-engine from Phoebus
  • openjdk11, latest
Revision 7
09 Sep 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Usefull links:

Changed:
<
<
>
>
 

Docker Container

Changed:
<
<
The PANDA DCS Software will be distributed and maintained using Docker containers. All containers have been tested extensively under Debian 9 and 10. The gateway and IOC containers were also tested under Windows 10.
>
>
The PANDA DCS Software will be distributed and maintained using Docker containers. All containers have been tested extensively under Debian 9 and 10. The gateway and IOC containers were also tested under Windows 10 (only connection to network devices!)
 

When installing Docker CE for Windows 10, chose "Linux Containers" when aksed which kind of containers you want to use on your system.

All docker images listed below can be downloaded and used with:
Changed:
<
<
docker pull paluma.rub.de/<IMAGENAME>:<TAG>
>
>
docker pull paluma.rub.de/<IMAGENAME>
 
Changed:
<
<
It is recommended to always use tag `latest`.
>
>
You can also download a specific version by appending `:<TAG>` to the above command, but it is recommended to use `latest` (default)
 
Changed:
<
<

List of Images and Tags

epics-base

Base image for panda-ioc and ca-gateway images.
  • 7.0.3
    EPICS base 7.0.3, based on Debian-Buster
  • 7.0.2
    EPICS base 7.0.2, based on Debian-Stretch
  • 7.0.2-raspi
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the BeagleBone Black

panda-ioc

Image with ready-to-use EPICS IOC. Includes asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi"
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack"

ca-gateway

Image with ready to use CA-Gateway
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"

Phoebus

Image with the main Phoebus product
  • openjdk11, latest

Archive-Engine

Image with the archive-engine from Phoebus
  • openjdk11, latest

Usage

panda-ioc

>
>

Usage

panda-ioc

 

Default run command (standalone):
Line: 56 to 28
 

The panda-ioc image offers three mountable volumes:
  • /home/panda-dcs/config: This directory should contain the substitution files and start up scripts for your IOC.
Changed:
<
<
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from git repo are copied here)
>
>
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from git repo are copied here)
 
  • /home/panda-dcs/databases: This directory contains the database files for the IOC (if this directory is empty, all database files from git repo are copied here)
OPTIONS can be:
  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
Line: 71 to 43
 
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
To run commands within the IOC container use `docker attach <CONTAINER ID>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q
Changed:
<
<

ca-gateway

>
>

ca-gateway

 

Default run command (PC with two NICs required):

docker run -d --network host -v ${PWD}/ioc-config:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>

The directory `/home/panda-dcs/config` contains the configuration files for the gateway, i.e. PVLIST_FILE and ACCESS_FILE
Changed:
<
<

Phoebus

>
>

Phoebus

 

Default run command (standalone)
Line: 87 to 59
  On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.

The directory `/home/panda-dcs/config` contains configuration files and bob files (display-files)
Changed:
<
<

Archive-Engine

>
>

Archive-Engine

 

Default run command (standalone):
Line: 180 to 152
  dbLoadTemplate ("/home/panda-dcs/config/wiener_demo.sub" )

iocInit()
Changed:
<
<
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
>
>
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./wiener_demo.cmd

List of Images and Tags

epics-base

This image is only needed if you want do create your own IOC Docker image. It is just a base image for the panda-ioc and ca-gateway images.
  • 7.0.3
    EPICS base 7.0.3, based on Debian-Buster
  • 7.0.2
    EPICS base 7.0.2, based on Debian-Stretch
  • 7.0.2-raspi
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the BeagleBone Black

panda-ioc

Image with ready-to-use EPICS IOC. Includes asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi"
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack"

ca-gateway

Image with ready to use CA-Gateway
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"

Phoebus

Image with the main Phoebus product
  • openjdk11, latest

Archive-Engine

Image with the archive-engine from Phoebus
  • openjdk11, latest
  -- FlorianFeldbauer - 21 Aug 2019
Revision 6
23 Aug 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 161 to 161
  iocInit()
      1. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      2. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
Added:
>
>

Wiener PL5xx and Wiener MPOD LV power supplies (SNMP)

  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/wiener_demo
  3. Connect the Wiener MPOD (or PL5xx) via ethernet to your PC and look up the IP address of the device (e.g. 192.168.0.5)
  4. Now create a file called "wiener_demo.sub" inside this newly created directory with the following content to get access to channels 'u0' and 'u1' of this device. The macro CRATE is either the hostname or the IP address of the MPOD crate.
    file "/epics/databases/WienerPL500.db"
    {
    pattern { subsys, dev, sector, CRATE, CH }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u0 }
    { LMD, MUPIX, P0:H1:D3:S2, 192.168.0.5, u1 }
    }
  5. Now create the startup script for the IOC
    #!/epics/ioc/bin/linux-x86_64/pandaIoc
    
    epicsEnvSet( "ARCH", "linux-x86_64" )
    epicsEnvSet( "TOP",  "/epics/ioc" )
    epicsEnvSet( "WCR",  "guru WIENER-CRATE-MIB::" )
 
Added:
>
>
## Register all support components dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 ) pandaIoc_registerRecordDeviceDriver( pdbbase )

## Load record instances dbLoadTemplate ("/home/panda-dcs/config/wiener_demo.sub" )

iocInit()
  1. Now start the docker container to run your IOC:
    docker run -dit -v ${HOME}/wiener_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./wiener_demo.cmd
  -- FlorianFeldbauer - 21 Aug 2019
Revision 5
23 Aug 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 94 to 94
 
docker run -d -v ${PWD}/phoebus-config:/home/panda-dcs/config -p 4812:4812 paluma.rub.de/archive-engine -engine Test -settings <SETTINGS_FILE>

If there are any `*.xml` files present in the `/home/panda-dcs/config` directory at the first start of the container, the archive engine will import them as new engines (using `-replace_engine -steal_channels`). The basename of the xml-files is used as engine name.
CA address list must be configured manually in settings file (or use `--network host`).
Added:
>
>

Examples

Hameg HMP4040 LV Power Supply

  1. First we need to install Docker CE (refer to the links at the top of this page!)
  2. Create a directory, where we will store some files needed for our IOC
    mkdir ${HOME}/hameg_demo
  3. Now create a file called "hameg_demo.sub" inside this newly created directory with the following content to get access to all for channels of this device
    file "/epics/databases/hmp4040.db"
    {
     pattern { CHAN, PORT }
       { 0, hmp_1 }
       { 1, hmp_1 }
       { 2, hmp_1 }
       { 3, hmp_1 }
    }
  4. The HMP4040 has two interfaces for remote control: USB and Ethernet. I will discuss both
    1. USB:
      1. Connect the HMP4040 to our PC via USB. Under linux, the device will show up under `/dev/ttyAMA0` or similar.
      2. Now we need a startup script for our EPICS IOC, which opens the serial interface and configures it so we can talk to the HMP4040. The default settings of the HMP4040 is 8N1 at 9600baud.
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/epics/ioc/bin/linux-x86_64/pandaIoc
        
        epicsEnvSet( "ARCH",                 "linux-x86_64" )
        epicsEnvSet( "TOP",                  "/epics/ioc" )
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/home/panda-dcs/protocols" )
        
        ## Register all support components
        dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 )
        pandaIoc_registerRecordDeviceDriver( pdbbase )
        
        ## Load drivers
        ## Connect to R&S HMP4040 with HO732 via usb-serial interface
        drvAsynSerialPortConfigure( "hmp_1", "/dev/ttyAMA0", 0, 0, 0 )
        asynSetOption( "hmp_1", 0, "baud", "9600" )
        asynSetOption( "hmp_1", 0, "bits", "8" )
        asynSetOption( "hmp_1", 0, "parity", "none" )
        asynSetOption( "hmp_1", 0, "stop", "1" )
        asynSetOption( "hmp_1", 0, "clocal", "Y" )
        asynSetOption( "hmp_1", 0, "crtscts", "N" )
        asynSetOption( "hmp_1", 0, "ixon", "N" )
        asynSetOption( "hmp_1", 0, "ixoff", "N" )
        asynSetOption( "hmp_1", 0, "ixany", "N" )
        
        ## Load record instances
        dbLoadTemplate ("/home/panda-dcs/config/hameg_demo.sub" )
        
        iocInit()
      3. Note in the file above: the first parameter of `drvAsynSerialPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a handle for the serial port at "/dev/ttyAMA0", configures this port and afterwards loads all needed records via the substitution file we created in the beginning.
      4. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/home/panda-dcs/config --device /dev/ttyAMA0 paluma.rub.de/panda-ioc ./hameg_demo.cmd
    2. Ethernet:
      1. Connect the HMP4040 to our PC via Ethernet cable. You need a DHCP server and need to get the IP address assigned to the HMP4040 (e.g. 192.168.0.5)
      2. Now we need a startup script for our EPICS IOC, which opens a TCP/IP port to the HMP4040
        Create a file "hameg_demo.cmd" within the directory we created at the beginning:
        #!/epics/ioc/bin/linux-x86_64/pandaIoc
        
        epicsEnvSet( "ARCH",                 "linux-x86_64" )
        epicsEnvSet( "TOP",                  "/epics/ioc" )
        epicsEnvSet( "STREAM_PROTOCOL_PATH", "/home/panda-dcs/protocols" )
        
        ## Register all support components
        dbLoadDatabase( "$(TOP)/dbd/pandaIoc.dbd", 0, 0 )
        pandaIoc_registerRecordDeviceDriver( pdbbase )
        
        ## Load drivers
        ## Connect to R&S HMP4040 with HO732 via usb-serial interface
        drvAsynIPPortConfigure( "hmp_1", "192.168.0.5:5025 TCP", 0, 0, 0 )
        
        ## Load record instances
        dbLoadTemplate ("/home/panda-dcs/config/hameg_demo.sub" )
        
        iocInit()
      3. Note in the file above: the first parameter of `drvAsynIPPortConfigure` is an internal name for the newly created device handle. This has to be the same name we used in our "hameg_demo.sub" as value for the PORT macro.
        This startup script now creates a TCP/IP connection to the HMP4040 and loads all needed records via the substitution file we created in the beginning.
      4. Now start the docker container to run your IOC:
        docker run -dit -v ${HOME}/hameg_demo:/home/panda-dcs/config paluma.rub.de/panda-ioc ./hameg_demo.cmd
 

-- FlorianFeldbauer - 21 Aug 2019
Revision 4
22 Aug 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Usefull links:

Added:
>
>
 

Docker Container

Line: 45 to 46
 

Archive-Engine

Image with the archive-engine from Phoebus
Changed:
<
<
  • openjdk11, latest

>
>
  • openjdk11, latest
 

Usage

panda-ioc

Default run command (standalone):
Changed:
<
<
docker run -dit -v ${TOP}/ioc-config:/home/panda-dcs/config [OPTIONS] paluma.rub.de/panda-ioc ./hameg_demo.cmd

The directory `ioc-config` contains the start-up script (e.g. hameg_demo.cmd) and the needed substitution files.
>
>
docker run -dit -v ${PWD}/ioc-config:/home/panda-dcs/config [OPTIONS] paluma.rub.de/panda-ioc ./[ST.CMD]
 
Added:
>
>
The panda-ioc image offers three mountable volumes:
  • /home/panda-dcs/config: This directory should contain the substitution files and start up scripts for your IOC.
  • /home/panda-dcs/protocols: This directory contains the protocol files for StreamDevice (if this directory is empty, all protocol files from git repo are copied here)
  • /home/panda-dcs/databases: This directory contains the database files for the IOC (if this directory is empty, all database files from git repo are copied here)
  OPTIONS can be:
  • Connect to serial devices:
    `--device /dev/<DEVICENAME>`
  • Connect to ethernet devices:
    Works without any additional settings
Line: 68 to 70
 
  • Access remote PVs:
    • CA: `-e EPICS_CA_AUTO_ADDR_LIST=no -e EPICS_CA_ADDR_LIST=<LIST OF IP ADDRESSES>`
      UDP broadcasts are not forwarded by Docker's default network (bridge). Setting `EPICS_CA_ADDR_LIST` to the broadcast address (e.g. `192.168.0.255`) does not work
      Alternatively use `--network host`
    • PVaccess: `--network host`
Changed:
<
<
To run commands within the IOC container use `docker attach <CONTAINER ID>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q`
>
>
To run commands within the IOC container use `docker attach <CONTAINER ID>` and you should see the EPICS IOC command prompt.
To detach from the container again use `CTRL+p CTRL+q
 

ca-gateway

Changed:
<
<
Default run command (standalone on PC with two NICs, not tested):
>
>
Default run command (PC with two NICs required):
 
Changed:
<
<
docker run -d --network host -v ${TOP}/ioc-config:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist gw_pvlist -access gw_access
>
>
docker run -d --network host -v ${PWD}/ioc-config:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist <PVLIST_FILE> -access <ACCESS_FILE>
 
Changed:
<
<
The directory `ioc-config` contains the configuration files for the gateway (e.g. gw_pvlist, gw_access)
>
>
The directory `/home/panda-dcs/config` contains the configuration files for the gateway, i.e. PVLIST_FILE and ACCESS_FILE
 

Phoebus

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v ${TOP}/phoebus-config:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings phoebus-settings.ini
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v ${PWD}/phoebus-config:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings <SETTINGS_FILE>
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Changed:
<
<
The directory `phoebus-config` contains configuration files and bob files (display-files)
>
>
The directory `/home/panda-dcs/config` contains configuration files and bob files (display-files)
 

Archive-Engine

Default run command (standalone):
Changed:
<
<
docker run -d -v ${TOP}/phoebus-config:/home/panda-dcs/config -p 4812:4812 paluma.rub.de/archive-engine -engine Test -settings archiver-settings.ini
>
>
docker run -d -v ${PWD}/phoebus-config:/home/panda-dcs/config -p 4812:4812 paluma.rub.de/archive-engine -engine Test -settings <SETTINGS_FILE>
 

If there are any `*.xml` files present in the `/home/panda-dcs/config` directory at the first start of the container, the archive engine will import them as new engines (using `-replace_engine -steal_channels`). The basename of the xml-files is used as engine name.
CA address list must be configured manually in settings file (or use `--network host`).
Revision 3
22 Aug 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 19 to 20
 

List of Images and Tags

epics-base

Changed:
<
<
  • 7.0.3
    Container with EPICS base 7.0.3 installed, based on Debian-Buster
  • 7.0.2
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch
  • 7.0.2-raspi
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the BeagleBone Black
>
>

Base image for panda-ioc and ca-gateway images.
  • 7.0.3
    EPICS base 7.0.3, based on Debian-Buster
  • 7.0.2
    EPICS base 7.0.2, based on Debian-Stretch
  • 7.0.2-raspi
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    EPICS base 7.0.2, based on Debian-Stretch, cross-build for usage on the BeagleBone Black
 

panda-ioc

Changed:
<
<
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.2
    Based on "epics-base:7.0.2", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules, cross-build for usage on the BeagleBone Black
>
>

Image with ready-to-use EPICS IOC. Includes asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Based on "epics-base:7.0.2-raspi"
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Based on "epics-base:7.0.2-beagleboneblack"
 

ca-gateway

Changed:
<
<
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", provides channel access gateway
  • 7.0.2
    Based on "epics-base:7.0.2", provides channel access gateway
>
>

Image with ready to use CA-Gateway
  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3"
  • 7.0.2
    Based on "epics-base:7.0.2"
 

Phoebus

Changed:
<
<
  • openjdk11, latest
    Phoebus package
>
>

Image with the main Phoebus product
  • openjdk11, latest
 

Archive-Engine

Changed:
<
<
  • openjdk11, latest
    Phoebus Archive-Engine
>
>

Image with the archive-engine from Phoebus
  • openjdk11, latest

 

Usage

panda-ioc

Revision 2
21 Aug 2019 - Main.FlorianFeldbauer
Line: 1 to 1
 
META TOPICPARENT name="WebHome"

Container Virtualization for PANDA DCS

Line: 19 to 19
 

List of Images and Tags

epics-base

Changed:
<
<
  • 7.0.3, 7, latest
    Container with EPICS base 7.0.3 installed, based on Debian-Buster
>
>
  • 7.0.3
    Container with EPICS base 7.0.3 installed, based on Debian-Buster
 
  • 7.0.2
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch
Changed:
<
<
  • 7.0.2-raspi, 7-raspi, raspi-latest
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack, 7-bbb, bbb-latest
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the BeagleBone Black
>
>
  • 7.0.2-raspi
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the Raspberry pi
  • 7.0.2-beagleboneblack
    Container with EPICS base 7.0.2 installed, based on Debian-Stretch, cross-build for usage on the BeagleBone Black
 

panda-ioc

  • 7.0.3, 7, latest
    Based on "epics-base:7.0.3", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules
  • 7.0.2
    Based on "epics-base:7.0.2", provides an IOC with asyn, stream, autosave, calc, modbus and snmp device support modules
Line: 39 to 39
 

panda-ioc

Default run command (standalone):
Changed:
<
<
docker run -dit -v ${TOP}/ioc-config:/home/panda-dcs/config [OPTIONS] panda-ioc:7.0.2 ./hameg_demo.cmd
>
>
docker run -dit -v ${TOP}/ioc-config:/home/panda-dcs/config [OPTIONS] paluma.rub.de/panda-ioc ./hameg_demo.cmd
 

The directory `ioc-config` contains the start-up script (e.g. hameg_demo.cmd) and the needed substitution files.
Line: 59 to 59
 

ca-gateway

Default run command (standalone on PC with two NICs, not tested):
Changed:
<
<
docker run -d --network host -v ${TOP}/ioc-config:/home/panda-dcs/config ca-gateway:7.0.2 -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist gw_pvlist -access gw_access
>
>
docker run -d --network host -v ${TOP}/ioc-config:/home/panda-dcs/config paluma.rub.de/ca-gateway -cip <CLIENT IP> -sip <SERVER IP> -server -pvlist gw_pvlist -access gw_access
 

The directory `ioc-config` contains the configuration files for the gateway (e.g. gw_pvlist, gw_access)

Phoebus

Default run command (standalone)
Changed:
<
<
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v ${TOP}/phoebus-config:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix phoebus:openjdk11 -settings phoebus-settings.ini
>
>
docker run --network host -e DISPLAY=$DISPLAY --device /dev/dri -v ${TOP}/phoebus-config:/home/panda-dcs/config -v /tmp/.X11-unix:/tmp/.X11-unix paluma.rub.de/phoebus -settings phoebus-settings.ini
 

On the host system a user with `UID=1000` has to exists with read/write access to the X server of the host system.
Line: 73 to 73
 

Archive-Engine

Default run command (standalone):
Changed:
<
<
docker run -d -v ${TOP}/phoebus-config:/home/panda-dcs/config -p 4812:4812 archive-engine:openjdk11 -engine Test -settings archiver-settings.ini
>
>
docker run -d -v ${TOP}/phoebus-config:/home/panda-dcs/config -p 4812:4812 paluma.rub.de/archive-engine -engine Test -settings archiver-settings.ini
 

If there are any `*.xml` files present in the `/home/panda-dcs/config` directory at the first start of the container, the archive engine will import them as new engines (using `-replace_engine -steal_channels`). The basename of the xml-files is used as engine name.
CA address list must be configured manually in settings file (or use `--network host`).
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding PANDA Wiki? Send feedback
Imprint (in German)
Privacy Policy (in German)