|
| 1 | +Appendix D.3. Environment Variables and .RC files {#nc_env_quickstart} |
| 2 | +============================== |
| 3 | + |
| 4 | +The netCDF-c library provides several parameterization mechanisms to |
| 5 | +control its behavior at run-time. The term _run-time_ means that the |
| 6 | +library's behavior can be changed every time the library is initialized |
| 7 | + |
| 8 | +The most commonly used parameterization mechanisms are: |
| 9 | +1. Environment Variables -- accessed by the getenv() function. |
| 10 | +2. .RC files -- accessed from the file system. |
| 11 | + |
| 12 | +## Environment Variables {#nc_env_vars} |
| 13 | + |
| 14 | +The following table describes (most of) the environment variables |
| 15 | +used by the netcdf-c library. There are some not listed that are only |
| 16 | +used for specialized debugging. |
| 17 | + |
| 18 | +<table> |
| 19 | +<tr><th>Name<th>Description |
| 20 | +<tr><td>ALLUSERSPROFILE<td>This is more-or-less the Windows equivalent of "HOME" |
| 21 | +<tr><td>AWS_ACCESS_KEY_ID<td>Used by the aws access libraries; overrides ${HOME}/.aws/config entries. |
| 22 | +<tr><td>AWS_CONFIG_FILE<td>Used by the aws access libraries; specifies absolute path to the config file. |
| 23 | +<tr><td>AWS_DEFAULT_REGION<td>Used by the aws access libraries; specifies default S3 region. |
| 24 | +<tr><td>AWS_PROFILE<td>Used by the aws access libraries; specifies default AWS profile. |
| 25 | +<tr><td>AWS_REGION<td>Used by the aws access libraries; specifies specific region to use. |
| 26 | +<tr><td>AWS_SECRET_ACCESS_KEY<td>Used by the aws access libraries; overrides ${HOME}/.aws/config entries. |
| 27 | +<tr><td>CURLOPT_VERBOSE<td>Causes libcurl to produce verbose output. |
| 28 | +<tr><td>HOME<td>The user's home directory. |
| 29 | +<tr><td>MSYS2_PREFIX<td>If platform is MSYS2, then specify the root prefix. |
| 30 | +<tr><td>NC_DEFAULT_CREATE_PERMS<td>For NCZarr, specify the default creation permissions for a file. |
| 31 | +<tr><td>NC_DEFAULT_DIR_PERMS<td>For NCZarr, specify the default creation permissions for a directory. |
| 32 | +<tr><td>NCLOGGING<td>Specify the log level: one of "OFF","ERR","WARN","NOTE","DEBUG". |
| 33 | +<tr><td>NCPATHDEBUG<td>Causes path manager to output debugging information. |
| 34 | +<tr><td>NCRCENV_HOME<td>Overrides ${HOME} as the location of the .rc file. |
| 35 | +<tr><td>NCRCENV_IGNORE<td>Causes any .rc files to be ignored. |
| 36 | +<tr><td>NCRCENV_RC<td>The absolute path to use for the .rc file. |
| 37 | +<tr><td>NCTRACING<td>Specify the level of tracing detail. |
| 38 | +<tr><td>NCZARRFORMAT<td>Force use of a specific Zarr format version: 2 or 3. |
| 39 | +<tr><td>NETCDF_LOG_LEVEL<td>Specify the log level for HDF5 logging (separate from e.g. NCLOGGING). |
| 40 | +<tr><td>TEMP<td>For Windows platform, specifies the location of a directory to store temporary files. |
| 41 | +<tr><td>USERPROFILE<td>For Windows platform, overrides ${HOME}. |
| 42 | +</table> |
| 43 | + |
| 44 | +## Resource Control (.rc) Files {#nc_env_rc} |
| 45 | + |
| 46 | +In addition to using environment variables, |
| 47 | +the netcdf-c library supports run-time configuration |
| 48 | +of the library using the so-called ".rc" file mechanism. |
| 49 | +This means that as part of its initialization, the netcdf-c |
| 50 | +library will search for and process a set of files where |
| 51 | +these files contain entries specifying (key,value) pairs. |
| 52 | +These pairs are compiled into a single internal database |
| 53 | +that can be queried by other parts of the netcdf-c library. |
| 54 | + |
| 55 | +### Locating The _.rc_ Files |
| 56 | + |
| 57 | +For historical reasons, multiple .rc files are allowed. |
| 58 | + |
| 59 | +### Search Order |
| 60 | + |
| 61 | +The netcdf-c library searches for, and loads from, the following files, |
| 62 | +in this order: |
| 63 | +1. $HOME/.ncrc |
| 64 | +2. $HOME/.dodsrc |
| 65 | +3. $CWD/.ncrc |
| 66 | +4. $CWD/.dodsrc |
| 67 | + |
| 68 | +*$HOME* is the user's home directory and *$CWD* is the current working directory. |
| 69 | +Entries in later files override any of the earlier files |
| 70 | + |
| 71 | +It is strongly suggested that you pick a uniform location and a uniform name |
| 72 | +and use them always. Otherwise you may observe unexpected results |
| 73 | +when the netcdf-c library loads an rc file you did not expect. |
| 74 | + |
| 75 | +### RC File Format |
| 76 | + |
| 77 | +The rc file format is a series of lines of the general form: |
| 78 | +```` |
| 79 | + [<URL>]<key>=<value> |
| 80 | +```` |
| 81 | +where the bracket-enclosed URL is optional. Note that the brackets |
| 82 | +are part of the line. |
| 83 | + |
| 84 | +### URL Constrained RC File Entries |
| 85 | + |
| 86 | +Each line of the rc file can begin with a URL enclosed in |
| 87 | +square brackets. The parts of the URL that are used for choosing |
| 88 | +an entry are the host, the port, and the URL path. |
| 89 | +Note that the host+port is the only part used when searching for |
| 90 | +libcurl related entries. This is because libcurl's authorization grain is not |
| 91 | +any finer than host+port level. |
| 92 | +The URL path may be used for non-curl related entries. |
| 93 | +Also note that the protocol is ignored. |
| 94 | + |
| 95 | +Here are some examples. |
| 96 | +```` |
| 97 | + [https://remotetest.unidata.ucar.edu/thredds]HTTP.VERBOSE=1 |
| 98 | +or |
| 99 | + [https://fake.ucar.edu:9090]HTTP.VERBOSE=0 |
| 100 | +```` |
| 101 | + |
| 102 | +For selection purposes, the host+port+path is used when the path argument |
| 103 | +for _nc_open()_ or _nc_create()_ takes the form of a URL. |
| 104 | +If the url request from, say, the _netcdf_open_ method |
| 105 | +has a host,port, and path matching one of the prefixes in the rc file, then |
| 106 | +the corresponding entry will be used, otherwise ignored. |
| 107 | +This means that an entry with a matching host+port+path will take |
| 108 | +precedence over an entry without a host+port+path. |
| 109 | + |
| 110 | +For example, passing this URL to _nc_open_ |
| 111 | +```` |
| 112 | + http://remotetest.unidata.ucar.edu/thredds/dodsC/testdata/testData.nc |
| 113 | +```` |
| 114 | +will have HTTP.VERBOSE set to 1 because its host and path match the example above. |
| 115 | + |
| 116 | +Similarly, using this path |
| 117 | +```` |
| 118 | + http://fake.ucar.edu:9090/dts/test.01 |
| 119 | +```` |
| 120 | +will have HTTP.VERBOSE set to 0 because its host+port matches the example above. |
| 121 | + |
| 122 | +### Programmatic Access to .rc File |
| 123 | + |
| 124 | +It is possible for client programs to query and modify the internal .rc database |
| 125 | +through the following API. |
| 126 | +* ````char* nc_rc_get(const char* key);```` |
| 127 | + Get the value corresponding to key or return NULL if not defined. The caller must free the resulting value. |
| 128 | +* ````int nc_rc_set(const char* key, const char* value);```` |
| 129 | + Set/overwrite the value corresponding to the specified key. |
| 130 | + |
| 131 | +Note that this API does not (currently) support URL prefixed keys, so the client will need to take this into account. |
| 132 | + |
| 133 | +### Defined .rc file keys |
| 134 | + |
| 135 | +There a a number of keys used by the netcdf-c library. Most of them |
| 136 | +are authorization-related. The file "auth.md" describes these keys. |
| 137 | + |
| 138 | +Other keys are as follows: |
| 139 | +* libdap4/d4curlfunctions.c and oc2/ocinternal.c |
| 140 | + - HTTP.READ.BUFFERSIZE -- set the read buffer size for DAP2/4 connection |
| 141 | + - HTTP.KEEPALIVE -- turn on keep-alive for DAP2/4 connection |
| 142 | +* libdispatch/ds3util.c |
| 143 | + - AWS.PROFILE -- alternate way to specify the default AWS profile |
| 144 | + - AWS.REGION -- alternate way to specify the default AWS region |
| 145 | +* libnczarr/zinternal.c |
| 146 | + - ZARR.DIMENSION_SEPARATOR -- alternate way to specify the Zarr dimension separator character |
| 147 | +* oc2/occurlfunctions.c |
| 148 | + - HTTP.NETRC -- alternate way to specify the path of the .netrc file |
| 149 | + |
| 150 | +## Point of Contact {#nc_env_poc} |
| 151 | + |
| 152 | +__Author__: Dennis Heimbigner<br> |
| 153 | +__Email__: dmh at ucar dot edu<br> |
| 154 | +__Initial Version__: 01/09/2023<br> |
| 155 | +__Last Revised__: 07/30/2024 |
0 commit comments