| // This file is part of chrony |
| // |
| // Copyright (C) Richard P. Curnow 1997-2003 |
| // Copyright (C) Miroslav Lichvar 2009-2016 |
| // |
| // This program is free software; you can redistribute it and/or modify |
| // it under the terms of version 2 of the GNU General Public License as |
| // published by the Free Software Foundation. |
| // |
| // This program is distributed in the hope that it will be useful, but |
| // WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // General Public License for more details. |
| // |
| // You should have received a copy of the GNU General Public License along |
| // with this program; if not, write to the Free Software Foundation, Inc., |
| // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| |
| = Installation |
| |
| The software is distributed as source code which has to be compiled. The source |
| code is supplied in the form of a gzipped tar file, which unpacks to a |
| subdirectory identifying the name and version of the program. |
| |
| After unpacking the source code, change directory into it, and type |
| |
| ---- |
| ./configure |
| ---- |
| |
| This is a shell script that automatically determines the system type. There is |
| an optional parameter `--prefix`, which indicates the directory tree where the |
| software should be installed. For example, |
| |
| ---- |
| ./configure --prefix=/opt/free |
| ---- |
| |
| will install the `chronyd` daemon into `/opt/free/sbin` and the `chronyc` |
| control program into `/opt/free/bin`. The default value for the prefix is |
| `/usr/local`. |
| |
| The `configure` script assumes you want to use `gcc` as your compiler. If you |
| want to use a different compiler, you can configure this way: |
| |
| ---- |
| CC=cc ./configure --prefix=/opt/free |
| ---- |
| |
| for Bourne-family shells, or |
| |
| ---- |
| setenv CC cc |
| setenv CFLAGS -O |
| ./configure --prefix=/opt/free |
| ---- |
| |
| for C-family shells. |
| |
| If the software cannot (yet) be built on your system, an error message will be |
| shown. Otherwise, `Makefile` will be generated. |
| |
| On Linux, if development files for the libcap library are available, `chronyd` |
| will be built with support for dropping root privileges. On other systems no |
| extra library is needed. The default user which `chronyd` should run as can be |
| specified with the `--with-user` option of the `configure` script. |
| |
| If development files for the POSIX threads library are available, `chronyd` |
| will be built with support for asynchronous resolving of hostnames specified in |
| the `server`, `peer`, and `pool` directives. This allows `chronyd` operating as |
| a server to respond to client requests when resolving a hostname. If you don't |
| want to enable the support, specify the `--disable-asyncdns` flag to |
| `configure`. |
| |
| If development files for the https://www.lysator.liu.se/~nisse/nettle/[Nettle], |
| https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS[NSS], or |
| http://www.libtom.net/LibTomCrypt/[libtomcrypt] library are available, |
| `chronyd` will be built with support for other cryptographic hash functions |
| than MD5, which can be used for NTP authentication with a symmetric key. If you |
| don't want to enable the support, specify the `--disable-sechash` flag to |
| `configure`. |
| |
| If development files for the editline or readline library are available, |
| `chronyc` will be built with line editing support. If you don't want this, |
| specify the `--disable-readline` flag to `configure`. |
| |
| If a `timepps.h` header is available (e.g. from the |
| http://linuxpps.org[LinuxPPS project]), `chronyd` will be built with PPS API |
| reference clock driver. If the header is installed in a location that isn't |
| normally searched by the compiler, you can add it to the searched locations by |
| setting the `CPPFLAGS` variable to `-I/path/to/timepps`. |
| |
| The `--help` option can be specified to `configure` to print all options |
| supported by the script. |
| |
| Now type |
| |
| ---- |
| make |
| ---- |
| |
| to build the programs. |
| |
| If you want to build the manual in HTML, type |
| |
| ---- |
| make docs |
| ---- |
| |
| Once the programs have been successfully compiled, they need to be installed in |
| their target locations. This step normally needs to be performed by the |
| superuser, and requires the following command to be entered. |
| |
| ---- |
| make install |
| ---- |
| |
| This will install the binaries and man pages. |
| |
| To install the HTML version of the manual, enter the command |
| |
| ---- |
| make install-docs |
| ---- |
| |
| Now that the software is successfully installed, the next step is to set up a |
| configuration file. The default location of the file is _/etc/chrony.conf_. |
| Several examples of configuration with comments are included in the examples |
| directory. Suppose you want to use public NTP servers from the pool.ntp.org |
| project as your time reference. A minimal useful configuration file could be |
| |
| ---- |
| pool pool.ntp.org iburst |
| makestep 1.0 3 |
| rtcsync |
| ---- |
| |
| Then, `chronyd` can be run. For security reasons, it's recommended to create an |
| unprivileged user for `chronyd` and specify it with the `-u` command-line |
| option or the `user` directive in the configuration file, or set the default |
| user with the `--with-user` configure option before building. |
| |
| == Support for system call filtering |
| |
| `chronyd` can be built with support for the Linux secure computing (seccomp) |
| facility. This requires development files for the |
| https://github.com/seccomp/libseccomp[libseccomp] library and the |
| `--enable-scfilter` option specified to `configure`. The `-F` option of |
| `chronyd` will enable a system call filter, which should significantly reduce |
| the kernel attack surface and possibly prevent kernel exploits from `chronyd` |
| if it is compromised. |
| |
| == Support for line editing libraries |
| |
| `chronyc` can be built with support for line editing, this allows you to use |
| the cursor keys to replay and edit old commands. Two libraries are supported |
| which provide such functionality, editline and GNU readline. |
| |
| Please note that readline since version 6.0 is licensed under GPLv3+ which is |
| incompatible with chrony's license GPLv2. You should use editline instead if |
| you don't want to use older readline versions. |
| |
| The `configure` script will automatically enable the line editing support if |
| one of the supported libraries is available. If they are both available, the |
| editline library will be used. |
| |
| If you don't want to use it (in which case `chronyc` will use a minimal command |
| line interface), invoke `configure` like this: |
| |
| ---- |
| ./configure --disable-readline other-options... |
| ---- |
| |
| If you have editline, readline or ncurses installed in locations that aren't |
| normally searched by the compiler and linker, you need to use extra options: |
| |
| `--with-readline-includes=directory_name`:: |
| This defines the name of the directory above the one where `readline.h` is. |
| `readline.h` is assumed to be in `editline` or `readline` subdirectory of the |
| named directory. |
| |
| `--with-readline-library=directory_name`:: |
| This defines the directory containing the `libedit.a` or `libedit.so` file, |
| or `libreadline.a` or `libreadline.so` file. |
| |
| `--with-ncurses-library=directory_name`:: |
| This defines the directory containing the `libncurses.a` or `libncurses.so` |
| file. |
| |
| == Extra options for package builders |
| |
| The `configure` and `make` procedures have some extra options that may be |
| useful if you are building a distribution package for `chrony`. |
| |
| The `--mandir=DIR` option to `configure` specifies an installation directory |
| for the man pages. This overrides the `man` subdirectory of the argument to the |
| `--prefix` option. |
| |
| ---- |
| ./configure --prefix=/usr --mandir=/usr/share/man |
| ---- |
| |
| to set both options together. |
| |
| The final option is the `DESTDIR` option to the `make` command. For example, |
| you could use the commands |
| |
| ---- |
| ./configure --prefix=/usr --mandir=/usr/share/man |
| make all docs |
| make install DESTDIR=./tmp |
| cd tmp |
| tar cvf - . | gzip -9 > chrony.tar.gz |
| ---- |
| |
| to build a package. When untarred within the root directory, this will install |
| the files to the intended final locations. |