# Presentation: 125355

## D0 OnlineSoftware DevelopmentAlan JonckheereOnline WorkshopJune 3-4, 1999

- D0 OnlineSoftware DevelopmentAlan JonckheereOnline WorkshopJune 3-4, 1999

## Introduction

- We assume that you are reasonably familiar with the D0 computing environment on the offline machines
- Quick overview of Online environment
- Operating Systems/disks/product areas
- Configuration Management
- problem and requirements
- tools/getting started/example development sessions
- testing
- Publishing
- Use

## Environment

- Operating systems
- OSF1 (d0ola, d0olb, [d0decfm01 eventually])
- Linux (d0linux1, [d0lxbld1/2/3])
- IRIX ([d02ka])
- NT ([d0ntwg01])
- Disks
- User home areas: ~<user>
- backed up by system/quotas -> *small*
- personal: source code, mail etc.
- Project disks - /prj_root/nnn
- shared not backed up by system/no quotas -> *large*
- large data sets, shared executables etc.
- D02ka:/prj_root/711/online_1 and /prj_root/776/online_2
**ONLINE: NO **University disks - /tmp_root/nnn

## Environment (cont’d) 

- Scratch disks - /scratchx/<usr>
- unmanaged/no quotas,
- cleaned up by system using various strategies
- .o, .a, data - files that can be reconstructed easily
- UPS Products (ups “setup”)
- /usr/products (/fnal/ups on offline Linux)
- FNAL supported products, emacs, tcl/tk etc
- /d0usr/products (D0 /usr/products)
- newer/older versions of /usr/products (ie cern)
- modifications of or additions to /usr/products (ie d0emacs)
- “Standalone” D0 products (ie TestData)
- /d0dist/dist (D0RunII)
- The major D0 code base (D0RunII)
- ONLINE db for specifically online products.

## Configuration Management

- Problem is slightly different online
- Offline: ***Two*** main executables
- D0Reco and D0gstar
- Highly coupled through interface routines
- use most of the large number of component packages
- Online: large number of “independent” executables
- couple through network interface calls
- use a much smaller number of common component packages.

## OFFLINE

- D0Reco

- D0gstar

- D0RunII code base

## ONLINE

- Coor

- Examines

- Online packages

- Data Logger

- Comics

## Requirements

- Offline (and L3 filters)
- Need to be *very* sure that all the code will work together.
- This implies that D0RunII vxx.xx.xx must correspond to a well defined set of component packages that are all built together.
- Online (L3 filters excepted)
- Coupling is not nearly so tight.
- Need to be able to “slip-in” a new version of an executable without having to rebuild the entire code base.
- Executables do *not* need to be built all at once, or from the same code base.

## Code development tools

- Uses the **same** tools that are used Offline
- CVS (setup d0cvs -> Offline repository)
- SoftRelTools/CTBUILD
- newrel/addpkg etc.
- UPS/UPD for “setup” and distribution
- setup D0RunII <version>
- On IRIX (d02ka) or Linux use “t” release series (t00.53.00 or later)
- On OSF/NT use “nt” series (nt00.10.00 or later)
- subset of “t” series, available on all four platforms

- _TIP_
- http://www-d0.fnal.gov/software
- /cmgt/cmgt.html

## Getting Started

- Gain Read and/or Write access to the cvs repository
- mail to *d0-release-mgr@fnal.gov*
- username@ip-address
- Everyone on D0’s FNAL machines already has read access
- Ask for a new, empty package
- mail to *d0-release-mgr@fnal.gov*
- package name
- usernames and email addressesof everyone needing write access

- _TIP_
- http://www-d0.fnal.gov/software
- /cmgt/getting_started_at_d0.html

## New Package (on d02ka)

- 1> cd /prj_root/776/online_2/jonckheere
- 2> setup n32; setup D0RunII t00.55.00; setup d0cvs
- 3> newrel -t t00.55.00 *myonl*; cd *myonl*
- 4> addpkg -h analysis
- 5> mkdir *mypkg;* mkdir *mypkg/mypkg*
- 6> cd include; ln -s ../*mypkg/mypkg mypkg*
- 7>>> copy files from analyze into *mypkg*; edit/rename files
- 8> cd (*myonl*); gmake
- 9>>>loop to 7 until it works
- 10> cd (*myonl/mypkg*)
- 11> rm <**everything you don’t want in cvs**>
- 12> cvs import -m”*useful comment”  mypkg myname v00-00-00*
- 13> cvs rtag v00-00-01 *mypkg*
- 14> test on all platforms
- 15> “Publish”

## Modify Package (on d02ka)

- 1> cd /prj_root/776/online_2/jonckheere
- 2> setup n32; setup D0RunII t00.55.00; setup d0cvs
- 3> newrel -t t00.55.00 *myonl*; cd *myonl*
- 4> addpkg -h *mypkg*
- 5>  edit files
- 6> cd (*myonl*); gmake
- 7>>>loop to 5 until it works
- 8> cd (*myonl/mypkg*)
- 9> cvs commit -m”*useful comment” *
- 10> cvs rtag <version> *mypkg*
- 11> test on all platforms
- 12> “Publish”

## Testing

- Test on each platform
- Login to: d02ka, d0lxbld1, d0decfm01 (or d0ola), d0ntwg01
- newrel/addpkg/gmake
- OR use the web builderhttp://d0ntwg01.fnal.gov/d0releases/
- To debug you’ll have to use the first method. Debugging is beyond the scope of this talk.

## Publishing

- All code that can be linked against is “published” as part of a “release”. This code is available for everyone to use.
- “t” series: mail to *d0-release-mgr@fnal.gov*
*“**nt” series: http://d0ntwg01.fnal.gov/d0releases/add_to_release/*
- Offline **executables **are “published” as part of a “code release”
- “setup D0RunII <version>” puts the D0RunII bin/<SRT-flavor>/ directory in you PATH.
- Component packages are “setup” as dependent products of D0RunII

## Publishing (Cont’d)

- Online **executables** will be “published” in two ways:
- As part of a release, same as the offline code
- As a standalone executable:
- copy ***only*** the binaries, data files, rcp files etc into a separate area *to be determined*
- create a ups/directory and a *mypkg*.table file
- declare it as a “standalone” ups products.
- Can be done from a “personal” release when needed.***Should be done in an emergency only.***

## Using Executables

- Offline
- [setup n32]     *IRIX only, will be going away*
- setup D0RunII <version>
- .../bin/<flavor>/ is added to your PATH
- packages which define env vars, aliases etc are setup as dependent products
- Online
- same as Offline for development/testing OR
- setup D0online (doesn’t exist yet)
- sets up just the executables that have been separately published and declared as “current”
- Puts each product’s bin/ directory onto your PATH, defines env vars, aliases etc.
- Defines overall aliases (start/stop???)