Epics_On_RPi Documentation



Similar documents
Setting up PostgreSQL

Adafruit's Raspberry Pi Lesson 7. Remote Control with VNC

Installing FEAR on Windows, Linux, and Mac Systems

Go to CGTech Help Library. Installing CGTech Products

FirstClass Synchronization Services Install Guide

Integrating Apache Web Server with Tomcat Application Server

2. Boot using the Debian Net Install cd and when prompted to continue type "linux26", this will load the 2.6 kernel

A SHORT INTRODUCTION TO DUPLICITY WITH CLOUD OBJECT STORAGE. Version

Raspberry Pi Webserver

MySQL Backups: From strategy to Implementation

AlienVault Unified Security Management (USM) 4.x-5.x. Deploying HIDS Agents to Linux Hosts

LAE Enterprise Server Installation Guide

Installing IBM Websphere Application Server 7 and 8 on OS4 Enterprise Linux

LSN 10 Linux Overview

IT6204 Systems & Network Administration. (Optional)

Embedded Based Web Server for CMS and Automation System

IUCLID 5 Guidance and support. Installation Guide Distributed Version. Linux - Apache Tomcat - PostgreSQL

Linux Development Environment Description Based on VirtualBox Structure

User Manual - Help Utility Download MMPCT. (Mission Mode Project Commercial Taxes) User Manual Help-Utility

Installing Virtual Coordinator (VC) in Linux Systems that use RPM (Red Hat, Fedora, CentOS) Document # 15807A1-103 Date: Aug 06, 2012

CPSC 226 Lab Nine Fall 2015

WebIOPi. Installation Walk-through Macros

Creating a DUO MFA Service in AWS

1. Product Information

Online Backup Client User Manual Linux

Partek Flow Installation Guide

Fuse ESB Enterprise Installation Guide

Adafruit's Raspberry Pi Lesson 6. Using SSH

INTEGRAL OFF-LINE SCIENTIFIC ANALYSIS

How to Install Multicraft on a VPS or Dedicated Server (Ubuntu bit)

Revolution R Enterprise 7 Hadoop Configuration Guide

Using a login script for deployment of Kaspersky Network Agent to Mac OS X clients

RecoveryVault Express Client User Manual

2015 Exelis Visual Information Solutions, Inc., a subsidiary of Harris Corporation

Q N X S O F T W A R E D E V E L O P M E N T P L A T F O R M v Steps to Developing a QNX Program Quickstart Guide

EVault for Data Protection Manager. Course 361 Protecting Linux and UNIX with EVault

Linux command line. An introduction to the Linux command line for genomics. Susan Fairley

Computer Science and Engineering Linux Cisco VPN Client Installation and Setup Guide

How to Create, Setup, and Configure an Ubuntu Router with a Transparent Proxy.

Cloud Homework instructions for AWS default instance (Red Hat based)

SendMIME Pro Installation & Users Guide

Online Backup Linux Client User Manual

Online Backup Client User Manual

Kognitio Technote Kognitio v8.x Hadoop Connector Setup

Cassandra Installation over Ubuntu 1. Installing VMware player:

EZcast Installation guide

Prepare the environment Practical Part 1.1

Pwn Plug Community Edition 1.1 Installation Guide

ARMSDK-VM Virtual Appliance A preconfigured Linux system

Install BA Server with Your Own BA Repository

Introduction to analyzing big data using Amazon Web Services

RHadoop and MapR. Accessing Enterprise- Grade Hadoop from R. Version 2.0 (14.March.2014)

10 STEPS TO YOUR FIRST QNX PROGRAM. QUICKSTART GUIDE Second Edition

Sophos Anti-Virus for Linux configuration guide. Product version: 9

Student installation of TinyOS

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Net/FSE Installation Guide v1.0.1, 1/21/2008

Installation of PHP, MariaDB, and Apache

CCM 4350 Week 11. Security Architecture and Engineering. Guest Lecturer: Mr Louis Slabbert School of Science and Technology.

SUSE Manager in the Public Cloud. SUSE Manager Server in the Public Cloud

Installing an open source version of MateCat

Installing F-Secure Anti-Virus (FSAV) Table of Contents. FSAV 8.x and FSLS 7.x End of Life. FSAV 9.x and FSLS 9.x End of Life

PiFace Control & Display

RHadoop Installation Guide for Red Hat Enterprise Linux

BF2CC Daemon Linux Installation Guide

CPE111 COMPUTER EXPLORATION

Spectrum Spatial Analyst Version 4.0. Installation Guide for Linux. Contents:

Management Utilities Configuration for UAC Environments

CLOUD INFRASTRUCTURE VIRTUAL SERVER (SHARED) DATA IMPORT GUIDE


Procedure to Create and Duplicate Master LiveUSB Stick

Extending Remote Desktop for Large Installations. Distributed Package Installs

Solr Bridge Search Installation Guide

ALERT installation setup

QEMU-KVM + D-System Monitor Setup Manual

INF-110. GPFS Installation

SNPsyn documentation. Release 1.1b. Tomaž Curk Gregor Rot Davor Sluga Uroš Lotrič Blaž Zupan

HOW TO BUILD A VMWARE APPLIANCE: A CASE STUDY

SAP HANA Client Installation and Update Guide

Sophos Anti-Virus for Linux configuration guide. Product version: 9

Installing OCFA on Ubuntu. Practical installation procedures, Installing The Open Computer Forensics Architecture on Ubuntu

Mercury User Guide v1.1

Incremental Backup Script. Jason Healy, Director of Networks and Systems

Introduction to Linux and Cluster Basics for the CCR General Computing Cluster

OpenGeo Suite for Linux Release 3.0

Using Symantec NetBackup with Symantec Security Information Manager 4.5

Online Backup Client User Manual

JobScheduler Installation by Copying

HOWTO: Set up a Vyatta device with ThreatSTOP in router mode

CA and SSL Certificates

Installation Guide for Basler pylon 2.3.x for Linux

Adafruit NFC/RFID on Raspberry Pi

The BackTrack Successor

Acronis Backup & Recovery 10 Server for Linux. Update 5. Installation Guide

Command Line - Part 1

Linux System Administration on Red Hat

Basic C Shell. helpdesk@stat.rice.edu. 11th August 2003

SETTING UP RASPBERRY PI FOR TOPPY FTP ACCESS. (Draft 5)

GTk+ and GTkGLExt Build Process for Windows 32- bit

Transcription:

Epics_On_RPi Documentation Release 2014.0317.2 Pete Jemian May 30, 2015

Contents 1 Raspberry Pi Distribution 3 2 Preparing for EPICS 5 3 EPICS Base 7 3.1 Downloading............................................... 7 3.2 Building................................................. 7 3.3 Starting.................................................. 8 3.4 Environment Declarations........................................ 8 4 synapps 9 4.1 Download................................................. 9 4.2 Configuring................................................ 9 4.3 xxx module: reconfigure......................................... 10 4.4 Install necessary EPICS Extensions................................... 11 4.5 Install other support........................................... 11 4.6 Building................................................. 11 5 PyEpics 13 5.1 Preparing Python............................................. 13 5.2 Install PyEpics.............................................. 13 5.3 Testing PyEpics............................................. 14 5.4 Testing PyEpics with an IOC...................................... 14 6 Files 17 7 Delimiters: Parentheses, Braces, and Back-Quotes 19 8 Contributions 21 i

ii

What is EPICS? For those who haven t heard, EPICS (http://www.aps.anl.gov/epics) is an open-source control system used worldwide for the routine operation and control of many particle accelerators such as FermiLab and SLAC, for the operation of scientific telescopes such as the Gemini and Keck telescopes, X-ray synchrotrons such as the Advanced Photon Source and the Diamond Light Source, neutron diffraction facilities such as the Spallation Neutron Source, and lots of other neat stuff. The system is scalable and runs on lots of different hardware. Here, we show you how to run EPICS on the Raspberry Pi! Contents Raspberry Pi Distribution Preparing for EPICS EPICS Base synapps PyEpics Files Here is how I installed the Experimental Physics and Industrial Control System software (EPICS) 1 on the Raspberry Pi 2. The EPICS software is a client/server system. To keep things simple, we will run both the server and a client on the Raspberry Pi. (Clients on other computers on our LAN might be able to interact with our EPICS server as well but we will not discuss that now.) The EPICS server we will use is built in several parts: EPICS Base provides all the development libraries and a few applications and utilities. synapps provides additional capabilities that will be useful in real projects. We only use a little of it here, though. There are many, many possible EPICS clients. Since the RPi already has Python, we ll work with that: PyEpics is an EPICS binding to the Python language, allowing us to build a simple client and interact with our server. 1 EPICS: http://www.aps.anl.gov/epics 2 RPi: http://www.raspberrypi.org/ Contents 1

2 Contents

CHAPTER 1 Raspberry Pi Distribution hardware Raspberry Pi, model B, RASPBRRY-MODB-512M 1 software 2012-12-16 wheezy-raspbian distribution 2 Installed wheezy-raspbian distribution on a 16 GB SD card. (It is helpful, but not necessary, to expand the partition to use the full memory of the SD card using raspi-config before starting X11): Filesystem Size Used Avail Use% Mounted on rootfs 15G 2.4G 12G 18% / /dev/root 15G 2.4G 12G 18% / devtmpfs 220M 0 220M 0% /dev tmpfs 44M 252K 44M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 88M 68K 88M 1% /run/shm /dev/mmcblk0p1 56M 17M 40M 30% /boot 1 vendor: http://www.newark.com/jsp/search/productdetail.jsp?sku=43w5302 2 wheezy-raspbian: http://downloads.raspberrypi.org/images/raspbian/2012-12-16-wheezy-raspbian/2012-12-16-wheezy-raspbian.zip 3

4 Chapter 1. Raspberry Pi Distribution

CHAPTER 2 Preparing for EPICS EPICS is flexible about where (which directory path) it is placed. Still, it helps to use standard locations. We ll build it from a directory in the pi account, but make a link to that directory called /usr/local/epics. You ll need to open a terminal window: 1 cd ~ 2 mkdir -p ~/Apps/epics 3 sudo su 4 cd /usr/local 5 ln -s /home/pi/apps/epics 6 exit 7 cd ~/Apps/epics By making the epics directory in pi account, we will be able to modify any of our EPICS resources without needing to gain higher privileges. 5

6 Chapter 2. Preparing for EPICS

CHAPTER 3 EPICS Base EPICS Base is very easy to build. The wheezy-raspbian distribution already has all the tools necessary to build EPICS Base. All that is necessary is to define the host architecture and then build it. 3.1 Downloading The latest stable version of EPICS Base is 3.14.12.3 (3.15 is released but is still not recommended for production use): 1 wget http://www.aps.anl.gov/epics/download/base/baser3.14.12.3.tar.gz 2 tar xzf baser3.14.12.3.tar.gz 3 ln -s./base-3.14.12.3./base 3.2 Building note the backticks Note the use of backticks in the export command. They evaluate the enclosed text as a command and return the result. For more discussion, see the section below titled Delimiters: Parentheses, Braces, and Back-Quotes. EPICS base can be built for many different operating systems and computers. Each build is directed by the EPICS_HOST_ARCH environment variable. A command is provided to determine the best choice amongst all the systems for which EPICS currently has definitions. Here is the way to set the environment variable on any UNIX or Linux OS using the bash shell (use either of these two commands, they are equivalent in the bash shell: 1 export EPICS_HOST_ARCH=`/usr/local/epics/base/startup/EpicsHostArch` 2 export EPICS_HOST_ARCH=$(/usr/local/epics/base/startup/EpicsHostArch) We can check this value by printing it to the command-line (remember, we are logged in as root): 1 echo $EPICS_HOST_ARCH 2 linux-arm Good! EPICS base will build for a Linux OS on an ARM architecture. This matches my Raspberry Pi. Tip: The export command above will be useful for future software development. Add it to the ~/.bash_aliases file if it exists, otherwise add it to the ~/.bashrc file with a text editor (such as nano ~/.bashrc). Now, build EPICS base for the first time: 7

1 cd ~/Apps/epics/base 2 make This process took about 50 minutes. 3.3 Starting It is possible to start an EPICS IOC at this point, although there is not much added functionality configured. We can prove to ourselves that things will start. Use this linux command: 1./bin/linux-arm/softIoc and EPICS will start with a basic command line prompt: 1 epics> At this prompt, type: iocinit and lines like these (different time stamp) will be printed: 1 Starting iocinit 2 ############################################################################ 3 ## EPICS R3.14.12.3 $Date: Mon 2012-12-17 14:11:47-0600$ 4 ## EPICS Base built Jan 19 2013 5 ############################################################################ 6 iocrun: All initialization complete 7 epics> Congratulations! EPICS Base has now been built on the Raspberry Pi. 3.4 Environment Declarations To simplify using the tools from EPICS base, (~/.bash_aliases): consider making these declarations in your environment 1 export EPICS_ROOT=/usr/local/epics 2 export EPICS_BASE=${EPICS_ROOT}/base 3 export EPICS_HOST_ARCH=`${EPICS_BASE}/startup/EpicsHostArch` 4 export EPICS_BASE_BIN=${EPICS_BASE}/bin/${EPICS_HOST_ARCH} 5 export EPICS_BASE_LIB=${EPICS_BASE}/lib/${EPICS_HOST_ARCH} 6 if [ "${LD_LIBRARY_PATH}" ]; then 7 export LD_LIBRARY_PATH=${EPICS_BASE_LIB} 8 else 9 export LD_LIBRARY_PATH=${EPICS_BASE_LIB}:${LD_LIBRARY_PATH} 10 fi 11 export PATH=${PATH}:${EPICS_BASE_BIN} Note: We are being a bit cautious here, not to remove any existing definition of LD_LIBRARY_PATH. After EPICS base has been built, we see that it has taken ~35 MB of storage: 1 pi@raspberrypi:~$ du -sc base-3.14.12.3 2 35636 base-3.14.12.3 8 Chapter 3. EPICS Base

CHAPTER 4 synapps synapps is a collection of software tools that help to create a control system for beamlines. It contains beamline-control and data-acquisition components for an EPICS based control system. There are instructions for installing synapps posted online: http://www.aps.anl.gov/bcda/synapps/synapps_5_6.html 4.1 Download The current release of synapps (as this was written in 2013-02) is v5.6. The compressed source archive file is available from the BCDA group at APS. The file should be 149 MB: 1 wget http://www.aps.anl.gov/bcda/synapps/tar/synapps_5_6.tar.gz 2 tar xzf synapps_5_6.tar.gz Uncompressed and unconfigured, the synapps_5_6 source folder is ~541 MB. 4.2 Configuring All work will be relative to this folder: 1 cd ~/Apps/epics/synApps_5_6/support Follow the instructions in the README file. These are the changes I made to run on the Raspberry Pi. file configure/config_site configure/release changes no changes SUPPORT=/usr/local/epics/synApps_5_6/support EPICS_BASE=/usr/local/epics/base After modifying configure/release, propagate changes to all module RELEASE files by running: cd ~/Apps/epics/synApps_5_6/support make release Edit Makefile and remove support for these modules: ALLEN_BRADLEY DAC128V IP330 9

IPUNIDIG LOVE IP VAC SOFTGLUE QUADEM DELAYGEN CAMAC VME AREA_DETECTOR DXP 4.3 xxx module: reconfigure The xxx module is an example and template EPICS IOC, demonstrating configuration of many synapps modules. APS beam line IOCs are built using xxx as a template. In xxx-5-6/configure/release, place a comment on lines 19 and 32 to remove build support for areadetector in xxx: #AREA_DETECTOR=$(SUPPORT)/areaDetector-1-8beta1 #IP=$(SUPPORT)/ip-2-13 In xxx-5-6/xxxapp/src/xxxcommoninclude.dbd, place a comment on line 34: #include "ipsupport.dbd" Then, in xxx-5-6/xxxapp/src/makefile, comment out all lines that refer to areadetector components, such as ADsupport, NDPlugin*, simdetector, and netcdf, as well as dxp support. Here are the lines I found: #iocxxxwin32_dbd += ADSupport.dbd NDFileNetCDF.dbd #xxx_libs_win32 += ADBase NDPlugin netcdf #iocxxxcygwin_dbd += ADSupport.dbd NDFileNetCDF.dbd #xxx_libs_cygwin32 += ADBase NDPlugin netcdf #iocxxxcygwin_dbd += ADSupport.dbd NDFileNetCDF.dbd #xxx_libs_cygwin32 += ADBase NDPlugin netcdf #iocxxxlinux_dbd += ADSupport.dbd NDFileNetCDF.dbd #xxx_libs_linux += ADBase NDPlugin netcdf #iocxxxcygwin_dbd += simdetectorsupport.dbd commondriversupport.dbd #xxx_libs_cygwin32 += simdetector #iocxxxlinux_dbd += simdetectorsupport.dbd commondriversupport.dbd #xxx_libs_linux += simdetector #xxx_common_libs += ip In xxx-5-6/xxxapp/src/makefile, place a comment to remove support for the ip common library: #xxx_common_libs += ip 10 Chapter 4. synapps

4.4 Install necessary EPICS Extensions synapps 5.6 requires the msi EPICS extension. First, setup the extensions subdirectory 1 cd ~/Apps/epics 2 wget http://www.aps.anl.gov/epics/download/extensions/extensionstop_20120904.tar.gz 3 tar xzf extensionstop_20120904.tar.gz Now, download msi, unpack, build, and install it: 1 wget http://www.aps.anl.gov/epics/download/extensions/msi1-5.tar.gz 2 cd extensions/src 3 tar xzf../../msi1-5.tar.gz 4 cd msi1-5 5 make Make these additional declarations in your environment (~/.bash_aliases): 1 export EPICS_EXT=${EPICS_ROOT}/extensions 2 export EPICS_EXT_BIN=${EPICS_EXT}/bin/${EPICS_HOST_ARCH} 3 export EPICS_EXT_LIB=${EPICS_EXT}/lib/${EPICS_HOST_ARCH} 4 if [ "" = "${LD_LIBRARY_PATH}" ]; then 5 export LD_LIBRARY_PATH=${EPICS_EXT_LIB} 6 else 7 export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${EPICS_BASE_LIB} 8 fi 9 export PATH=${PATH}:${EPICS_EXT_BIN} 4.5 Install other support The EPICS sequencer needs the re2c package (http://re2c.org/). This is available through the standard package installation repositories: 1 sudo apt-get install re2c 4.6 Building Now, build the components of synapps selected in the Makefile: 1 cd ~/Apps/epics/synApps_5_6/support 2 make release 3 make rebuild The make rebuild step took about 70 minutes. 4.4. Install necessary EPICS Extensions 11

12 Chapter 4. synapps

CHAPTER 5 PyEpics It is possible to run the PyEpics support from Matt Newville (http://cars.uchicago.edu/software/python/pyepics3/) on the Raspberry Pi! 5.1 Preparing Python To simplify installation, we ll use easy_install (from setuptools). Note: The additions to the Python installation will be done as root. Here s how to become root on the default wheezy-raspbian distribution. sudo su First, install the setuptools package from the wheezy repository. (Also, as long as we re here, the ipython shell is very helpful.) Let s load them both: sudo apt-get install python-setuptools ipython Next, we want to know which version of Python will be run: # which python /usr/bin/python ls -lafg /usr/bin/python lrwxrwxrwx 1 root 9 Jun 5 2012 /usr/bin/python -> python2.7* Python 2.7 will be run. 5.2 Install PyEpics With the setuptools installed, it becomes simple to install PyEpics (still as root): easy_install -U PyEpics The installation will complain about missing EPICS support libraries (libca and libcom). Now, we can address that (still as root): cd /usr/local/lib/python2.7/dist-packages/pyepics-3.2.1-py2.7.egg cp /home/pi/apps/epics/base-3.14.12.3/lib/linux-arm/libca.so.3.14./ cp /home/pi/apps/epics/base-3.14.12.3/lib/linux-arm/libcom.so.3.14./ 13

ln -s libca.so.3.14 ln -s libcom.so.3.14 libca.so libcom.so Now, exit from root back to the pi account session: exit 5.3 Testing PyEpics First, you might be eager to see that PyEpics will load. Save this code in the file verify.py (in whatever folder you wish, we ll use /home/pi): 1 #!/usr/bin/env python 2 3 import epics 4 5 print epics. version 6 print epics. file Also, remember to make the file executable: chmod +x verify.py Now, run this and hope for the best:./verify.py 3.2.1 /usr/local/lib/python2.7/dist-packages/epics/ init.pyc This shows that PyEpics was installed but it does not test that EPICS is working. 5.4 Testing PyEpics with an IOC Note: We ll need to use several tools at the same time. It is easiest to create several terminal windows. To test that EPICS communications are working, we need to do some preparations. 5.4.1 softioc The simplest way to do this is to use the softioc support from EPICS base with a simple EPICS database. Save this into a file called simple.db: 1 record(bo, "rpi:trigger") 2 { 3 field(desc, "trigger PV") 4 field(znam, "off") 5 field(onam, "on") 6 } 7 record(stringout, "rpi:message") 8 { 9 field(desc, "message on the RPi") 10 field(val, "RPi default message") 11 } 14 Chapter 5. PyEpics

Note: The file simple.db defines two EPICS records: rpi:trigger and rpi:message. The first record can take the value of 0 or 1, which also have the string values of off and on, respectively. The second record is a string. Now, run the EPICS soft IOC support with this database: 1 pi@raspberrypi:~$ softioc -d simple.db 2 Starting iocinit 3 ############################################################################ 4 ## EPICS R3.14.12.3 $Date: Mon 2012-12-17 14:11:47-0600$ 5 ## EPICS Base built Jan 19 2013 6 ############################################################################ 7 iocrun: All initialization complete 8 epics> dbl 9 rpi:trigger 10 rpi:message 11 epics> 5.4.2 camonitor In a separate terminal window, watch the soft IOC for any changes to EPICS PVs we created above: pi@raspberrypi:~$ camonitor rpi:trigger rpi:trigger.desc rpi:message rpi:message.desc rpi:trigger <undefined> off UDF INVALID rpi:trigger.desc <undefined> trigger PV UDF INVALID rpi:message <undefined> RPi default message UDF INVALID rpi:message.desc <undefined> message on the RPi UDF INVALID 5.4.3 Python code Now, let s communicate with the PVs of the softioc. Put this code in file test.py: 1 #!/usr/bin/env python 2 3 import epics 4 5 print epics.caget('rpi:trigger.desc') 6 print epics.caget('rpi:trigger') 7 print epics.caget('rpi:message.desc') 8 print epics.caget('rpi:message') 9 10 epics.caput('rpi:message', 'setting trigger') 11 epics.caput('rpi:trigger', 1) 12 print epics.caget('rpi:trigger.desc') 13 print epics.caget('rpi:trigger') 14 print epics.caget('rpi:message.desc') 15 print epics.caget('rpi:message') 16 17 epics.caput('rpi:message', 'clearing trigger') 18 epics.caput('rpi:trigger', 0) 19 print epics.caget('rpi:trigger.desc') 20 print epics.caget('rpi:trigger') 21 print epics.caget('rpi:message.desc') 22 print epics.caget('rpi:message') Make the file executable and then run it: 5.4. Testing PyEpics with an IOC 15

pi@raspberrypi:~$ chmod +x test.py pi@raspberrypi:~$./test.py trigger PV 0 message on the RPi RPi default message trigger PV 1 message on the RPi setting trigger trigger PV 0 message on the RPi clearing trigger pi@raspberrypi:~$ Note that new messages have also printed on the terminal running camonitor: rpi:message rpi:trigger rpi:message rpi:trigger 2013-01-21 08:20:28.658746 setting trigger 2013-01-21 08:20:28.664845 on 2013-01-21 08:20:28.697210 clearing trigger 2013-01-21 08:20:28.702967 off 16 Chapter 5. PyEpics

CHAPTER 6 Files These files, described above, are available for direct download: file description verify.py test that PyEpics is installed simple.db simple EPICS database to test PyEpics communications with EPICS test.py Python code to test PyEpics communications with EPICS 17

18 Chapter 6. Files

CHAPTER 7 Delimiters: Parentheses, Braces, and Back-Quotes In the code examples above, a combination of parentheses, braces, and back-quotes (a.k.a. accent grave or backtick) are used. In the /bin/bash shell, braces, { and }, are used to delimit the scope of symbol names during shell expansion. In the code examples above, the delimiters are probably unnecessary. Using these delimiters is a cautious practice to adopt. Parentheses are not recognized in this context: ~$ echo $EPICS_ROOT /usr/local/epics ~$ echo ${EPICS_ROOT} /usr/local/epics ~$ echo $(EPICS_ROOT) EPICS_ROOT: command not found However, in the various files and commands that configure and command the EPICS components, parentheses, ( and ), are the required delimiters. See these examples from above: #AREA_DETECTOR=$(SUPPORT)/areaDetector-1-8beta1 #IP=$(SUPPORT)/ip-2-13 Sometimes, in a shell script, it is necessary to assign a variable with the value obtained from a command line tool. One common way to do that, shared by bash and some other shells such as tcsh, is to enclose the command line tool with the back-quote character. See this example: ~$ echo $SHELL /bin/bash ~$ echo `/usr/local/epics/base-3.14.12.3/startup/epicshostarch` linux-x86_64 An alternative way to do this assignment in bash was pointed out, to use shell expansion with parentheses as the delimiters, such as: ~$ echo $(/usr/local/epics/base-3.14.12.3/startup/epicshostarch) linux-x86_64 19

20 Chapter 7. Delimiters: Parentheses, Braces, and Back-Quotes

CHAPTER 8 Contributions Torsten Boegershausen has wrapped up the EPICS installation into a single bash shell script. That work is available on GitHub: https://github.com/tboegi/install-epics 21