* Move the dhclient exit hooks file to the dhclient module, where it

belongs.

svn path=/nixos/branches/modular-nixos/; revision=15755
This commit is contained in:
Eelco Dolstra 2009-05-27 23:30:29 +00:00
parent 3c6ae39a0d
commit 05a08adf91
4 changed files with 62 additions and 58 deletions

View File

@ -109,14 +109,6 @@ let
target = "default/useradd"; target = "default/useradd";
} }
{ # Dhclient hooks for emitting ip-up/ip-down events.
source = pkgs.substituteAll {
src = ./dhclient-exit-hooks;
inherit (pkgs) upstart glibc;
};
target = "dhclient-exit-hooks";
}
{ # Script executed when the shell starts as a non-login shell (system-wide version). { # Script executed when the shell starts as a non-login shell (system-wide version).
source = pkgs.substituteAll { source = pkgs.substituteAll {
src = ./bashrc.sh; src = ./bashrc.sh;

View File

@ -1,11 +0,0 @@
echo "$reason" >> /tmp/dhcp-exit
echo "$exit_status" >> /tmp/dhcp-exit
if test "$reason" = BOUND -o "$reason" = REBOOT; then
@glibc@/sbin/nscd --invalidate hosts
@upstart@/sbin/initctl emit ip-up
fi
if test "$reason" = EXPIRE -o "$reason" = RELEASE; then
@upstart@/sbin/initctl emit ip-down
fi

View File

@ -38,6 +38,7 @@ in
###### implementation ###### implementation
let let
ifEnable = arg: ifEnable = arg:
if config.networking.useDHCP then arg if config.networking.useDHCP then arg
else if builtins.isList arg then [] else if builtins.isList arg then []
@ -51,6 +52,22 @@ let
map (i: i.name) (lib.filter (i: i ? ipAddress) config.networking.interfaces); map (i: i.name) (lib.filter (i: i ? ipAddress) config.networking.interfaces);
stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant. stateDir = "/var/lib/dhcp"; # Don't use /var/state/dhcp; not FHS-compliant.
dhclientExitHooks = pkgs.writeText "dhclient-exit-hooks"
''
echo "$reason" >> /tmp/dhcp-exit
echo "$exit_status" >> /tmp/dhcp-exit
if test "$reason" = BOUND -o "$reason" = REBOOT; then
${pkgs.glibc}/sbin/nscd --invalidate hosts
${pkgs.upstart}/sbin/initctl emit ip-up
fi
if test "$reason" = EXPIRE -o "$reason" = RELEASE; then
${pkgs.upstart}/sbin/initctl emit ip-down
fi
'';
in in
{ {
@ -59,14 +76,13 @@ in
options options
]; ];
services = { services.extraJobs = ifEnable [{
extraJobs = ifEnable [{
name = "dhclient"; name = "dhclient";
extraPath = [dhcp]; extraPath = [dhcp];
job = " job = ''
description \"DHCP client\" description "DHCP client"
start on network-interfaces/started start on network-interfaces/started
stop on network-interfaces/stop stop on network-interfaces/stop
@ -80,23 +96,30 @@ script
interfaces= interfaces=
for i in $(cd /sys/class/net && ls -d *); do for i in $(cd /sys/class/net && ls -d *); do
if ! for j in ${toString ignoredInterfaces}; do echo $j; done | grep -F -x -q \"$i\"; then if ! for j in ${toString ignoredInterfaces}; do echo $j; done | grep -F -x -q "$i"; then
echo \"Running dhclient on $i\" echo "Running dhclient on $i"
interfaces=\"$interfaces $i\" interfaces="$interfaces $i"
fi fi
done done
if test -z \"$interfaces\"; then if test -z "$interfaces"; then
echo 'No interfaces on which to start dhclient!' echo 'No interfaces on which to start dhclient!'
exit 1 exit 1
fi fi
mkdir -m 755 -p ${stateDir} mkdir -m 755 -p ${stateDir}
exec ${dhcp}/sbin/dhclient -d $interfaces -e \"PATH=$PATH\" -lf ${stateDir}/dhclient.leases exec ${dhcp}/sbin/dhclient -d $interfaces -e "PATH=$PATH" -lf ${stateDir}/dhclient.leases
end script end script
"; '';
}]; }];
};
environment.etc = ifEnable
[ # Dhclient hooks for emitting ip-up/ip-down events.
{ source = dhclientExitHooks;
target = "dhclient-exit-hooks";
}
];
} }

View File

@ -80,7 +80,7 @@ let
echo Duplicate entry: $i; echo Duplicate entry: $i;
fi; fi;
done done
''; ''; # */
in in