Runroot is a powerful feature to detect and define layout at runtime. This document helps to guide through how runroot works.
For management and setup of runroots, please refer to
Why do we need runroot¶
Runroot is a replacing approach for the previous
TS_ROOT is based on replacing a compile-time package install root location.
Layouts for many systems have data location that are absolute paths that are defined without
$PREFIX variable. So, the current logic is difficult to follow
and not consistent between trafficserver programs. Furthermore, it is not easy to modify subdirectory locations.
So, we have the runroot which makes ATS easier to use, develop and deploy.
Everything in runroot will go through the class:Layout class and all the layout is defined by a single YAML file:
- Command line option
- Look in current directory and look up N (default 4) directories for
- Look in executable directory and look up N directories for
- Compiler defaults in layout class
Right now, the following programs are integrated with the runroot logic: traffic_server, traffic_manager, traffic_ctl, traffic_layout, traffic_crashlog, traffic_logcat, traffic_logstat.
The YAML file¶
The runroot file (runroot.yaml) can be placed at any location in the filesystem and still be used to define the locations for required Traffic Server files.
So we can run traffic_server, for example, by
Below is an example of
prefix: /home/myname/runroot exec_prefix: /home/myname/runroot bindir: /home/myname/runroot/bin sbindir: /home/myname/runroot/bin sysconfdir: /etc/trafficserver datadir: /home/myname/runroot/share/trafficserver includedir: /home/myname/runroot/include libdir: /home/myname/runroot/lib libexecdir: /libexec/trafficserver localstatedir: /var runtimedir: /var/trafficserver logdir: /home/myname/runroot/logdir cachedir: /var/trafficserver
The path can be both relative or absolute. We can define wherever we want the directory to be. All the items we need to
runroot.yaml are shown above and the entries can be optional. For example, if sysconfdir is not in the file, runroot will
set the sysconfidir, at runtime, to be the default built time sysconfdir concatenated with the prefix.
We can create, remove and verify runroot using
traffic_layout program. It is fully documented in the appendices.
Guide for development¶
Basic runroot functionality is handled in
are the main methods for the runroot. The
Layout class will then get the global variable from
runroot.cc to set up the directories properly.
Issue or bug¶
This functionality should be stable and if there is any issue or bug, please report it on the GitHub and @chitianhao.