Samuel Tan | d7ed851 | 2015-08-13 16:11:35 -0700 | [diff] [blame] | 1 | dhcpcd - DHCP client daemon |
| 2 | Copyright (c) 2006-2015 Roy Marples <roy@marples.name> |
| 3 | |
| 4 | |
| 5 | Installation |
| 6 | ------------ |
| 7 | ./configure; make; make install |
| 8 | man dhcpcd for command line options |
| 9 | man dhcpcd.conf for configuration options |
| 10 | man dhcpcd-run-hooks to learn how to hook scripts into dhcpcd events |
| 11 | |
| 12 | |
| 13 | Notes |
| 14 | ----- |
| 15 | If you're cross compiling you may need set the platform if OS is different |
| 16 | from the host. |
| 17 | --target=sparc-sun-netbsd5.0 |
| 18 | |
| 19 | If you're building for an MMU-less system where fork() does not work, you |
| 20 | should ./configure --disable-fork. |
| 21 | This also puts the --no-background flag on and stops the --background flag |
| 22 | from working. |
| 23 | |
| 24 | You can change the default dirs with these knobs. |
| 25 | For example, to satisfy FHS compliance you would do this:- |
| 26 | ./configure --libexecdir=/lib/dhcpcd dbdir=/var/lib/dhcpcd |
| 27 | |
| 28 | We now default to using -std=c99. For 64-bit linux, this always works, but |
| 29 | for 32-bit linux it requires either gnu99 or a patch to asm/types.h. |
| 30 | Most distros patch linux headers so this should work fine. |
| 31 | linux-2.6.24 finally ships with a working 32-bit header. |
| 32 | If your linux headers are older, or your distro hasn't patched them you can |
| 33 | set CSTD=gnu99 to work around this. |
| 34 | |
| 35 | Some BSD systems do not allow the manipulation of automatically added subnet |
| 36 | routes. You can find discussion here: |
| 37 | http://mail-index.netbsd.org/tech-net/2008/12/03/msg000896.html |
| 38 | BSD systems where this has been fixed or is known to work are: |
| 39 | NetBSD-5.0 |
| 40 | FreeBSD-10.0 |
| 41 | |
| 42 | Some BSD systems protect against IPv6 NS/NA messages by ensuring that the |
| 43 | source address matches a prefix on the recieved by a RA message. |
| 44 | This is an error as the correct check is for on-link prefixes as the |
| 45 | kernel may not be handling RA itself. |
| 46 | BSD systems where this has been fixed or is known to work are: |
| 47 | NetBSD-7.0 |
| 48 | OpenBSD-5.0 |
| 49 | patch submitted against FreeBSD-10.0 |
| 50 | |
| 51 | Some BSD systems do not announce IPv6 address flag changes, such as |
| 52 | IN6_IFF_TENTATIVE, IN6_IFF_DUPLICATED, etc. On these systems, |
| 53 | dhcpcd will poll a freshly added address until either IN6_IFF_TENTATIVE is |
| 54 | cleared or IN6_IFF_DUPLICATED is set and take action accordingly. |
| 55 | BSD systems where this has been fixed or is known to work are: |
| 56 | NetBSD-7.0 |
| 57 | |
| 58 | Some BSD systems do not announce cached neighbour route changes based |
| 59 | on reachability to userland. For such systems, IPv6 routers will always |
| 60 | be assumed to be reachable until they either stop being a router or expire. |
| 61 | BSD systems where this has been fixed or is known to work are: |
| 62 | NetBSD-7.99.3 |
| 63 | |
| 64 | Linux prior to 3.17 won't allow userland to manage IPv6 temporary addresses. |
| 65 | Either upgrade or don't allow dhcpcd to manage the RA, |
| 66 | so don't set either "ipv6ra_own" or "slaac private" in dhcpcd.conf if you |
| 67 | want to have working IPv6 temporary addresses. |
| 68 | SLAAC private addresses are just as private, just stable. |
| 69 | |
| 70 | ArchLinux presently sanitises all kernel headers to the latest version |
| 71 | regardless of the version for your CPU. As such, Arch presently ships a |
| 72 | 3.12 kernel with 3.17 headers which claim that it suppors temporary address |
| 73 | management and no automatic prefix route generation, both of which are |
| 74 | obviously false. You will have to patch support either in the kernel or |
| 75 | out of the headers (or dhcpcd itself) to have correct operation. |
| 76 | |
| 77 | We try and detect how dhcpcd should interact with system services at runtime. |
| 78 | If we cannot auto-detect how do to this, or it is wrong then |
| 79 | you can change this by passing shell commands to --serviceexists, |
| 80 | --servicecmd and optionally --servicestatus to ./configure or overriding |
| 81 | the service variables in a hook. |
| 82 | |
| 83 | Some systems have /dev management systems and some of these like to rename |
| 84 | interfaces. As this system would listen in the same way as dhcpcd to new |
| 85 | interface arrivals, dhcpcd needs to listen to the /dev management sytem |
| 86 | instead of the kernel. However, if the /dev management system breaks, stops |
| 87 | working, or changes to a new one, dhcpcd should still try and continue to work. |
| 88 | To facilitate this, dhcpcd allows a plugin to load to instruct dhcpcd when it |
| 89 | can use an interface. As of the time of writing only udev support is included. |
| 90 | You can disable this with --without-dev, or without-udev |
| 91 | |
| 92 | To shrink dhcpcd you can disable IPv4 or IPv6: |
| 93 | --disable-inet |
| 94 | --disable-inet6 |
| 95 | |
| 96 | You can also move the embedded extended configuration from the dhcpcd binary |
| 97 | to an external file (LIBEXECDIR/dhcpcd-definitions.conf) |
| 98 | --disable-embedded |
| 99 | If dhcpcd cannot load this file at runtime, dhcpcd will work but will not be |
| 100 | able to decode any DHCP/DHCPv6 options that are not defined by the user |
| 101 | in /etc/dhcpcd.conf. |
| 102 | |
| 103 | To prepare dhcpcd for import into a platform source tree (like NetBSD) |
| 104 | you can use the make import target to create /tmp/dhcpcd-$version and |
| 105 | populate it with all the source files and hooks needed. |
| 106 | In this instance, you may wish to disable some configured tests when |
| 107 | the binary has to run on older versions which lack support, such as getline. |
| 108 | ./configure --without-getline |
| 109 | |
| 110 | Building for distribution (ie making a dhcpcd source tarball) now requires |
| 111 | gmake-4 or any BSD make. |
| 112 | |
| 113 | |
| 114 | Hooks |
| 115 | ----- |
| 116 | Not all the hooks in dhcpcd-hooks are installed by default. |
| 117 | By default we install 01-test, 02-dump, 10-mtu, 10-wpa_supplicant, |
| 118 | 15-timezone, 20-resolv.conf, 29-lookup-hostname and 30-hostname. |
| 119 | The default dhcpcd.conf disables the lookup-hostname hook by default. |
| 120 | The configure program attempts to find hooks for systems you have installed. |
| 121 | To add more simply |
| 122 | ./configure -with-hook=ntp.conf |
| 123 | |
| 124 | Some system services expose the name of the service we are in, |
| 125 | by default dhcpcd will pick RC_SVCNAME from the environment. |
| 126 | You can override this in CPPFLAGS+= -DRC_SVCNAME="YOUR_SVCNAME". |
| 127 | This is important because dhcpcd will scrub the environment aside from $PATH |
| 128 | before running hooks. |
| 129 | This variable could be used to facilitate service re-entry so this chain could |
| 130 | happen in a custom OS hook: |
| 131 | dhcpcd service marked inactive && dhcpcd service starts |
| 132 | dependant services are not started because dhcpcd is inactive (not stopped) |
| 133 | dhcpcd hook tests $if_oneup && $if_ipwaited |
| 134 | if true, mark the dhcpcd service as started and then start dependencies |
| 135 | if false and the dhcpcd service was previously started, mark as inactive and |
| 136 | stop any dependant services. |
| 137 | |
| 138 | |
| 139 | Compatibility |
| 140 | ------------- |
| 141 | dhcpcd-5.0 is only fully command line compatible with dhcpcd-4.0 |
| 142 | For compatibility with older versions, use dhcpcd-4.0 |
| 143 | |
| 144 | |
| 145 | ChangeLog |
| 146 | --------- |
| 147 | We no longer supply a ChangeLog. |
| 148 | However, you're more than welcome to read the commit log at |
| 149 | http://roy.marples.name/projects/dhcpcd/timeline/ |