FEC Filesystem
This document describes filesystem and boot process for a FESA frontend computer (commonly referred to as FEC).
General Boot Process
- bios executes PXE bootrequest
- receive PXE loader, receive kernel and initrd
- start Linux
- configure Network with DHCP (ip, hostname, routes, nameserver)
- execute bootscripts of ramdisk (starting ssh, ntpd, snmp, ...)
- execute nfsinit, which will start the fesa initialization, that is ...
- ... mount fesa folder by nfs
- set symbolic links according to FEC (hostname, architecture)
- execute fesa boot scripts (global, arch, local)
General Filesystem Layout for SCUs running a 32-bit OS Image
The base filesystem is a initrd. Initrd contains all files needed to boot the FEC and bring up the network. This part is more or less generic for all embedded Linux systems (FESA or other). Next it will mount the so called nfs init which contains the fesa startscript.
The acc6 cluster changed some paths (due to different filesystems). The export share moved to it's own filesystem outside of usr. The fesa scratch and data directories moved to it's own filesystem outside of usr or export. Readonly is
/common/export
, readwrite is under
/common/fesadata
path on fec |
symlinks to |
which is on the nfs/blades acc6 |
el6, 64bit |
note |
/opt/nfsinit |
|
/common/export/nfsinit |
/common/export/nfsinit |
readonly |
/opt/fesa/nfs |
|
/common/export/fesa |
/common/export/fesa |
readonly |
/opt/fesa/scratch |
|
/common/fesadata/scratch |
- |
readwrite, squash to fesauser |
/opt/fesa/data |
|
/common/fesadata/data/<host> |
/common/fesadata/data/<host> |
readwrite, squash to fesauser |
/opt/fesa/global |
/opt/fesa/nfs/global |
/common/export/fesa/global |
- |
readonly |
/opt/fesa/arch |
/opt/fesa/nfs/arch/<arch> |
/common/export/fesa/arch/<arch> |
- |
readonly |
/opt/fesa/local |
/opt/fesa/nfs/local/<host> |
/common/export/fesa/local/<host> |
- |
readonly |
/opt/fesa/du |
- |
- |
copied from /common/export/fesa/local/<host> |
ramdisk |
Where <arch> is i686, x86_64 or ppc (uname -m). <host> is the short hostname (hostname -s).
libraries
Basic libraries can be found inside the ramdisk on
/lib
and
/usr/lib
. The environment variable LD_LIBRARY_PATH additionaly searches in
/opt/fesa/local/lib
and
/opt/fesa/arch/lib
.
binaries
PATH contains searches in
/opt/fesa/local/bin
and
/opt/fesa/arch/bin
.
boot
The boot process will execute scripts in this order (paths on the fec)
/etc/init/boot
/etc/init/boot.d/
/opt/nfsinit/host/
/opt/fesa/global/init
/opt/fesa/arch/init
/opt/fesa/local/init
FESA Classes
Fesa Classes consist of a binary and an instantiation document (XML format). This document is host specific and belongs into the data directory
/common/usr/export/fesa/data/<host>/prod/fesa-data/
( on acc6
/common/fesadata/data/<host>/prod/fesa-data/
)
Virtual FEC
Some FESA classes may not require a FEC. They run on one of the production systems of the asl cluster. For this there is a serviceguard service that provides a virtual IP for
fcs00a.acc.gsi.de
. For each FESA binary there is a serviceguard service that controls this equipment software.
An effort has been made to make the location of configuration files and scripts similiar to normal FECs. Instantiation documents live at locations such as
/common/usr/export/fesa/fcs00a/prod/fesa-data/. Binaries somewhere below
/common/usr/export/fesa/<CPU>/
. Startscripts
/common/usr/export/fesa/local/fcs00a/init/
.
However, these startscripts are slightly different to those for normal FECs.
SCUs/FECs running a 64-bit OS Image
64-bit FECs have a different nfsinit script.
- bios executes PXE bootrequest
- receive PXE loader, receive kernel and initrd
- start Linux
- configure network with DHCP (ip, hostname, routes, nameserver)
- execute bootscripts of ramdisk (starting ssh, ntpd, snmp, ...)
- execute nfsinit, which will start the fesa initialization, that is
- mount fesa folder via nfs, readonly
- mount fesadata folder via nfs, readwrite
- search for deploy units and their configuration and copy them to ramdisk
- spawn a daemon process for each deploy unit
FESA deploy-units are searched at
/common/export/fesa/local/HOSTNAME/
for each deploy unit the init expects a folder that includes the unit, the instance file, cmw.cfg, fesa.cfg, etc. The folder must have the same name as the unit. For example:
testDU/
testDU/cmw.cfg
testDU/fesa.cfg
testDU/log.cfg
testDU/messages.cfg
testDU/messagesLab.cfg
testDU/testDU
testDU/testDU.instance
Units are started by slackdaemon. Slackdaemon is a wrapper process, it will cleanly detach from the terminal, capture stdout and stderr, restart any crashed FESA deploy-unit.
Starting / Stopping Manually
To restart a running FESA deploy-unit:
daemon -n testDU --restart
To copy it from nfs again and start (or restart), rerun the init script
e.g. /opt/nfsinit/HOSTNAME/50_fesa
To manually stop a FESA deploy-unit:
daemon -n testDU --stop
How to adjust a FEC for the current 64bit structure
- Change link to FESA script in /common/export/nfsinit/vmla0x to ../global/fesa_64bit
- In /common/tftp/csco/pxe/pxelinux.cfg switch link with hostname of FEC to *scuxl, either virtual_scuxl for virtual frontends or scuxl for real frontends
Hints for Debugging
(added by
DB)
- consider using the diagnostic logging. Logon to the web service and filter for the FECs HOSTNAME.
- on the ASL cluster
- check that folder
/common/fesadata/data/HOSTNAME
exists.
- check that the symbolic link /common/export/nfsinit/HOSTNAME/50_fesaexists and is pointing to the right script
-
50_fesa -> ../global/fesa_64bit
for 64 bit systems
-
50_fesa -> ../global/fesa
for 32 bit systems
White Rabbit based Timing
Currently: If a FESA deploy-unit's instantiation document is configured to use White Rabbit based timing the daemon automatically applies the required FESA start parameters (-usrArgs -WR). This is done by searching for
timingDomain value="FAIR"
in the instance file.