1 | .. $Id: installation.rst 607 2011-08-05 20:38:58Z jemian $ |
---|
2 | |
---|
3 | Installation Instructions for Pilatus Detectors |
---|
4 | ------------------------------------------------------------------------------------------------- |
---|
5 | |
---|
6 | There are several steps to the installation process. This page was written during the |
---|
7 | installation of this code at 15ID-D on the USAXS/SAXS Pilatus 100k detector. You might |
---|
8 | need to change some values to fit your situation. |
---|
9 | |
---|
10 | #. Install the EPICS database into an existing IOC. |
---|
11 | #. Install GUI support screens for MEDM or CSS-BOY |
---|
12 | #. Install Enthought Python Distribution with PyEPICS on Pilatus host computer. |
---|
13 | #. Install (and test and configure) ``epicsdf.py`` on Pilatus host computer. |
---|
14 | #. Start ``cron`` task to keep epicsdf.py running on Pilatus host computer. |
---|
15 | |
---|
16 | |
---|
17 | Install EPICS database in existing IOC |
---|
18 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
19 | |
---|
20 | These instructions assume the support database will run in an existing |
---|
21 | EPICS IOC. In this example, ``<TOP>`` |
---|
22 | is the absolute directory path to the IOC's top-level directory. |
---|
23 | In that directory, there will be some directory *someApp* where the source |
---|
24 | code for the IOC resides. |
---|
25 | |
---|
26 | 1. Check out support from subversion:: |
---|
27 | |
---|
28 | cd /tmp |
---|
29 | svn co https://subversion.xor.aps.anl.gov/bcdaext/epicsdf epicsdf |
---|
30 | cd epicsdf |
---|
31 | |
---|
32 | 2. Copy support database to ``<TOP>/someApp/Db`` directory:: |
---|
33 | |
---|
34 | cd /net/s15dserv/xorApps/epics/synApps_5_4/ioc/15iddLAX/15iddLAXApp/Db |
---|
35 | cp /tmp/epicsdf/epics/epicsdf.db ./ |
---|
36 | svn add epicsdf.db |
---|
37 | svn propset svn:eol-style native epicsdf.db |
---|
38 | svn propset svn:keywords "Author Date Id Revision Url" epicsdf.db |
---|
39 | |
---|
40 | 3. Copy autosave request file to <TOP>/iocBoot/iocNAME directory:: |
---|
41 | |
---|
42 | cd /net/s15dserv/xorApps/epics/synApps_5_4/ioc/15iddLAX/iocBoot/ioc15iddLAX |
---|
43 | cp /tmp/epicsdf/epics/epicsdf.req ./ |
---|
44 | svn add epicsdf.req |
---|
45 | svn propset svn:eol-style native epicsdf.req |
---|
46 | svn propset svn:keywords "Author Date Id Revision Url" epicsdf.req |
---|
47 | |
---|
48 | 4. Call support database from ``st.cmd`` file (edit that file and add like this *before* ``iocInit``):: |
---|
49 | |
---|
50 | # 2011-08-01,PRJ |
---|
51 | # database support for "df" command on Pilatus detector computer |
---|
52 | # https://subversion.xor.aps.anl.gov/bcdaext/epicsdf/doc/build/html/index.html |
---|
53 | dbLoadRecords("$(TOP)/15iddLAXApp/Db/epicsdf.db", "P=15iddLAX:,D=p100k:") |
---|
54 | |
---|
55 | 5. Register autosave request from ``auto_settings.req`` file (edit that file and add anywhere, usually at the end):: |
---|
56 | |
---|
57 | # 2011-08-01,PRJ |
---|
58 | # database support for "df" command on Pilatus detector computer |
---|
59 | # https://subversion.xor.aps.anl.gov/bcdaext/epicsdf/doc/build/html/index.html |
---|
60 | file epicsdf.req P=$(P),D=p100k: |
---|
61 | |
---|
62 | Keep the directory ``/tmp/epicsdf`` for use in the next step, to install the GUI support. |
---|
63 | |
---|
64 | |
---|
65 | Install GUI support |
---|
66 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
67 | |
---|
68 | There are support screens for MEDM and CSS-BOY in the ``epics/`` |
---|
69 | subdirectory. |
---|
70 | |
---|
71 | * ``epics/epicsdf.adl`` : MEDM screen, needs macros ``P`` and ``D`` defined |
---|
72 | * ``epics/epicsdf.opi`` : CSS-BOY screen, needs macros ``P`` and ``D`` defined |
---|
73 | * ``epics/starter.opi`` : CSS-BOY screen, defines ``P`` and ``D`` and calls ``epicsdf.opi`` |
---|
74 | |
---|
75 | Copy these screens to the appropriate directory for the tool you use:: |
---|
76 | |
---|
77 | cd /net/s15dserv/xorApps/epics/synApps_5_4/ioc/15iddLAX/15iddLAXApp/op/adl |
---|
78 | cp /tmp/epicsdf/epics/epicsdf.adl ./ |
---|
79 | svn add epicsdf.adl |
---|
80 | |
---|
81 | The MEDM screen can be called from the command line with a command such as:: |
---|
82 | |
---|
83 | medm -x -macro P=15iddLAX:,D=p100k: epicsdf.adl & |
---|
84 | |
---|
85 | The directory ``/tmp/epicsdf`` can be discarded now. |
---|
86 | |
---|
87 | |
---|
88 | |
---|
89 | Install Enthought Python Distribution |
---|
90 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
91 | |
---|
92 | :warning: Procedure to install PyEPICS is flawed. |
---|
93 | On Linux, fails to find libCom.so.3.14... |
---|
94 | Works when matching libCom.so.(ver.sion) is copied to same place. |
---|
95 | |
---|
96 | These instructions describe installation of 32-bit support on the Pilatus host computer (usually SUSE Linux). |
---|
97 | |
---|
98 | 1. Copy deployment software to Pilatus host computer:: |
---|
99 | |
---|
100 | cd /tmp |
---|
101 | svn co https://subversion.xor.aps.anl.gov/bcdaext/epd_deployment epd_deployment |
---|
102 | cd epd_deployment |
---|
103 | |
---|
104 | 2. Copy Enthought installer to Pilatus host computer:: |
---|
105 | |
---|
106 | cp /APSshare/epd/downloads/epd-7.1-2-rh5-x86_64.sh ./images |
---|
107 | chmod +x ./images/epd-7.1-2-rh5-x86_64.sh |
---|
108 | |
---|
109 | 3. Check the installation script for valid paths against what is available on the Pilatus host computer. |
---|
110 | There are several scripts. Here, just edit the macros in the 64-bit script |
---|
111 | |
---|
112 | * ``install-rhel5-64.sh``: installer shell script for 64-bit support |
---|
113 | |
---|
114 | ============= ====================================================== |
---|
115 | macro meaning |
---|
116 | ============= ====================================================== |
---|
117 | ``SRC`` relative path to the Enthought installer script |
---|
118 | ``LIBCA`` absolute path to EPICS ``libCa.so`` built for this OS |
---|
119 | ``EPD_ROOT`` absolute path under which this EPD will be installed |
---|
120 | ============= ====================================================== |
---|
121 | |
---|
122 | :note: |
---|
123 | Consider adding the path defined by ``${EPD_ROOT}/bin`` |
---|
124 | to the shell ``PATH`` variable. |
---|
125 | |
---|
126 | :note: |
---|
127 | Suggest ``EPD_ROOT=/home/det/epd`` for Pilatus detectors. This makes |
---|
128 | the Python executable available at |
---|
129 | ``/home/det/epd/rh5-x86_64/bin/python`` |
---|
130 | |
---|
131 | These parameters seem to work well: |
---|
132 | |
---|
133 | SRC=/tmp/epd_deployment/images/epd-7.1-2-rh5-x86_64.sh |
---|
134 | LIBCA=/home/det/epics/base-3.14.9/lib/linux-x86_64/libca.so.3.14 |
---|
135 | EPD_ROOT=/home/det/epd |
---|
136 | |
---|
137 | 4. Run installation script:: |
---|
138 | |
---|
139 | /bin/sh ./install-rhel5-64.sh |
---|
140 | |
---|
141 | The directory ``/tmp/epd_deployment`` can be discarded now. |
---|
142 | |
---|
143 | 5. Consider defining this environment variable:: |
---|
144 | |
---|
145 | EPD=/home/det/epd/rh5-x86_64 |
---|
146 | |
---|
147 | Test PyEPICS |
---|
148 | ~~~~~~~~~~~~ |
---|
149 | |
---|
150 | Test the Python EPICS support (`PyEPICS <http://cars9.uchicago.edu/software/python/pyepics3/>`_) |
---|
151 | by printing the APS storage ring current. |
---|
152 | |
---|
153 | :: |
---|
154 | |
---|
155 | command_line> ${EPD}/bin/python |
---|
156 | import epics |
---|
157 | print epics.caget('S:SRcurrentAI') |
---|
158 | |
---|
159 | |
---|
160 | This can be run as:: |
---|
161 | |
---|
162 | ${EPD_ROOT}/bin/python test_pyepics.py |
---|
163 | |
---|
164 | If this fails on the ``import epics`` statement, then the ``libCa.so`` module |
---|
165 | is probably not found. |
---|
166 | |
---|
167 | |
---|
168 | Install ``epicsdf`` Python client code |
---|
169 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
170 | |
---|
171 | 1. Check out support from subversion:: |
---|
172 | |
---|
173 | cd ~ |
---|
174 | svn co https://subversion.xor.aps.anl.gov/bcdaext/epicsdf epicsdf |
---|
175 | cd epicsdf |
---|
176 | |
---|
177 | 2. Revise ``self.sender`` in :file:`src/epicsdf.py`. |
---|
178 | Specify the name of a valid APS email address as the sender. |
---|
179 | The :meth:`epicsdf.sendmail()` |
---|
180 | sends mail using the ``mail`` program on the host operating system. By default, the |
---|
181 | Pilatus detectors are in the ``dectris.localdomain`` which is not allowed to send |
---|
182 | mail within the APS. |
---|
183 | |
---|
184 | Test epicsdf |
---|
185 | ~~~~~~~~~~~~ |
---|
186 | |
---|
187 | Try running the program directly. Note the program accepts a single PV prefix |
---|
188 | as its argument (including the ``df:``):: |
---|
189 | |
---|
190 | /home/det/epd/rh5-x86_64/bin/python src/epicsdf.py 15iddLAX:p100:df: |
---|
191 | |
---|
192 | Configure ``epicsdf`` |
---|
193 | ~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
194 | |
---|
195 | Verify that the starter shell script ``shell/epicsdf.sh`` works properly. |
---|
196 | Move to the ``shell`` directory and edit both files. Adjust these items: |
---|
197 | |
---|
198 | =================== ========================================================= |
---|
199 | macro example value |
---|
200 | =================== ========================================================= |
---|
201 | DATABASE_PREFIX 15iddLAX:p100:df: |
---|
202 | APP_BASE_DIR /home/det/epicsdf |
---|
203 | PYTHON /home/det/epd/rh5-x86_64/bin/python |
---|
204 | =================== ========================================================= |
---|
205 | |
---|
206 | These parameters seem to work well (replace ``yyyyyyy:zzzzzz`` with correct PV parts): |
---|
207 | |
---|
208 | DATABASE_PREFIX=yyyyyyy:zzzzzz:df: |
---|
209 | APP_BASE_DIR=/home/det/epicsdf |
---|
210 | PYTHON=/home/det/epd/rh5-x86_64/bin/python |
---|
211 | |
---|
212 | Test this by running each of these commands individually and looking at the output |
---|
213 | in the ``shell/epicsdf.log`` log file:: |
---|
214 | |
---|
215 | shell/epicsdf.sh start # should start the program |
---|
216 | shell/epicsdf.sh status # should say program is running |
---|
217 | shell/epicsdf.sh stop # should stop program |
---|
218 | shell/epicsdf.sh restart # should start program |
---|
219 | shell/epicsdf.sh restart # should stop and then start program |
---|
220 | shell/epicsdf.sh checkup # does nothing this time |
---|
221 | shell/epicsdf.sh stop # should stop program |
---|
222 | shell/epicsdf.sh checkup # should start program |
---|
223 | shell/epicsdf.sh checkup # does nothing this time |
---|
224 | |
---|
225 | For convenience, you could also (enter the ``shell`` directory and) |
---|
226 | type ``make start``, ``make stop``, ... |
---|
227 | |
---|
228 | Note: |
---|
229 | The first time ``shell/epicsdf.sh`` is run, the log file will contain some |
---|
230 | error information since the PID file has not yet been created. No problem |
---|
231 | for the first time. Maybe some additional code will be added to work around this. |
---|
232 | **Ignore this error if it occurs the first time.** You could even scrape it out |
---|
233 | of the log file. |
---|
234 | |
---|
235 | :: |
---|
236 | |
---|
237 | # ===== shell/epicsdf.sh start ===== Tue Aug 2 15:01:29 CDT 2011 ================================== |
---|
238 | /bin/cat: /home/det/epicsdf/shell/epicsdf.pid: No such file or directory |
---|
239 | ERROR: List of process IDs must follow -p. |
---|
240 | ********* simple selection ********* ********* selection by list ********* |
---|
241 | -A all processes -C by command name |
---|
242 | -N negate selection -G by real group ID (supports names) |
---|
243 | -a all w/ tty except session leaders -U by real user ID (supports names) |
---|
244 | -d all except session leaders -g by session OR by effective group name |
---|
245 | -e all processes -p by process ID |
---|
246 | T all processes on this terminal -s processes in the sessions given |
---|
247 | a all w/ tty, including other users -t by tty |
---|
248 | g OBSOLETE -- DO NOT USE -u by effective user ID (supports names) |
---|
249 | r only running processes U processes for specified users |
---|
250 | x processes w/o controlling ttys t by tty |
---|
251 | *********** output format ********** *********** long options *********** |
---|
252 | -o,o user-defined -f full --Group --User --pid --cols --ppid |
---|
253 | -j,j job control s signal --group --user --sid --rows --info |
---|
254 | -O,O preloaded -o v virtual memory --cumulative --format --deselect |
---|
255 | -l,l long u user-oriented --sort --tty --forest --version |
---|
256 | -F extra full X registers --heading --no-heading --context |
---|
257 | ********* misc options ********* |
---|
258 | -V,V show version L list format codes f ASCII art forest |
---|
259 | -m,m,-L,-T,H threads S children in sum -y change -l format |
---|
260 | -M,Z security data c true command name -c scheduling class |
---|
261 | -w,w wide output n numeric WCHAN,UID -H process hierarchy |
---|
262 | # started 9233: /home/det/epd/rh5-x86_64/bin/python /home/det/epicsdf/src/epicsdf.py 15iddLAX:p100:df: |
---|
263 | |
---|
264 | |
---|
265 | Start periodic ``cron`` task |
---|
266 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
267 | |
---|
268 | To ensure that the Python client program is restarted wfter a host reboot |
---|
269 | (or some other reason it has stopped), a periodic cron task checks that |
---|
270 | there is a PID running on the system and that PID is our python job. This |
---|
271 | is done by periodically calling:: |
---|
272 | |
---|
273 | epics/epicsdf.sh checkup |
---|
274 | |
---|
275 | which will start a new client program if it is not running. |
---|
276 | The ``cron`` task is started by:: |
---|
277 | |
---|
278 | crontab -e |
---|
279 | |
---|
280 | :note: You will probably need to know how to use the ``vi`` editor. Good luck! |
---|
281 | |
---|
282 | Add these contents to the end of the list, save, and then quit the editor. |
---|
283 | (Runs a *checkup* every 5 minutes.):: |
---|
284 | |
---|
285 | # cron task |
---|
286 | # epicsdf- |
---|
287 | # watch some local disk partition and report it to EPICS, |
---|
288 | # send emails if space runs low |
---|
289 | */5 * * * * /home/det/epicsdf/shell/epicsdf.sh checkup |
---|
290 | |
---|
291 | |
---|
292 | a few VI editor commands |
---|
293 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
---|
294 | |
---|
295 | These are the few VI editor commands to help you edit the ``cron`` task. |
---|
296 | The notation ``[esc]`` means to press the *escape* key. If you need more |
---|
297 | help, you need the manual. |
---|
298 | |
---|
299 | ============== ============================================ |
---|
300 | command meaning |
---|
301 | ============== ============================================ |
---|
302 | i start *insert* mode (so you can enter text) |
---|
303 | [esc] leave insert mode |
---|
304 | :w! save: write the contents back to the file |
---|
305 | but do not quit ``vi`` yet. |
---|
306 | :q! quit: Leave the program. If you have not |
---|
307 | saved first with ``:w!``, your changes |
---|
308 | will be lost -- forever. |
---|
309 | This is how you do a *cancel - no save*. |
---|
310 | ZZ save and quit |
---|
311 | ============== ============================================ |
---|
312 | |
---|