Browse Source

* system/options.nix: gone :-)

svn path=/nixos/branches/modular-nixos/; revision=15772
nsd-state-dir
Eelco Dolstra 14 years ago
parent
commit
c6c9304b95
  1. 2
      lib/eval-config.nix
  2. 8
      modules/system/upstart/upstart.nix
  3. 54
      modules/tasks/kbd.nix
  4. 230
      modules/tasks/network-interfaces.nix
  5. 84
      system/options.nix

2
lib/eval-config.nix

@ -7,7 +7,7 @@
rec {
configComponents = [
configuration
(import ../system/options.nix)
{ require = import ../modules/module-list.nix; }
];
config =

8
modules/system/upstart/upstart.nix

@ -58,13 +58,7 @@ let
optional = cond: service: pkgs.lib.optional cond (makeJob service);
requiredTTYs = config.requiredTTYs;
jobs = map makeJob []
# User-defined events.
++ (map makeJob (config.services.extraJobs));
jobs = map makeJob config.services.extraJobs;
# Create an etc/event.d directory containing symlinks to the
# specified list of Upstart job files.

54
modules/tasks/kbd.nix

@ -1,7 +1,39 @@
{pkgs, config, ...}:
let
inherit (pkgs.lib) mkOption;
###### interface
# most options are defined in i18n.nix
options = {
boot.extraTTYs = pkgs.lib.mkOption {
default = [];
example = [8 9];
description = "
Tty (virtual console) devices, in addition to the consoles on
which mingetty and syslogd run, that must be initialised.
Only useful if you have some program that you want to run on
some fixed console. For example, the NixOS installation CD
opens the manual in a web browser on console 7, so it sets
<option>boot.extraTTYs</option> to <literal>[7]</literal>.
";
};
# dummy option so that requiredTTYs can be passed
requiredTTYs = pkgs.lib.mkOption {
default = [];
description = "
FIXME: find another place for this option.
FIXME: find a good description.
";
};
};
###### implementation
# think about where to put this chunk of code!
# required by other pieces as well
@ -16,26 +48,10 @@ let
in
###### implementation
# most options are defined in i18n.nix
{
require = [options];
inherit requiredTTYs; # pass them to upstart-job/default.nix
# dummy option so that requiredTTYs can be passed, see above (FIXME)
require = [
{
requiredTTYs = mkOption {
default = [];
description = "
FIXME: find another place for this option.
FIXME: find a good description.
";
};
}
];
inherit requiredTTYs; # pass them to ./modules/tasks/tty-backgrounds.nix
services = {
extraJobs = [{

230
modules/tasks/network-interfaces.nix

@ -1,9 +1,70 @@
{pkgs, config, ...}:
###### implementation
let
inherit (pkgs.lib) mkOption;
###### interface
options = {
networking.hostName = mkOption {
default = "nixos";
description = "
The name of the machine. Leave it empty if you want to obtain
it from a DHCP server (if using DHCP).
";
};
networking.nativeIPv6 = mkOption {
default = false;
description = "
Whether to use IPv6 even though gw6c is not used. For example,
for Postfix.
";
};
networking.defaultGateway = mkOption {
default = "";
example = "131.211.84.1";
description = "
The default gateway. It can be left empty if it is auto-detected through DHCP.
";
};
networking.nameservers = mkOption {
default = [];
example = ["130.161.158.4" "130.161.33.17"];
description = "
The list of nameservers. It can be left empty if it is auto-detected through DHCP.
";
};
networking.domain = mkOption {
default = "";
example = "home";
description = "
The domain. It can be left empty if it is auto-detected through DHCP.
";
};
networking.localCommands = mkOption {
default = "";
example = "text=anything; echo You can put $text here.";
description = "
Shell commands to be executed at the end of the
<literal>network-interfaces</literal> Upstart job. Note that if
you are using DHCP to obtain the network configuration,
interfaces may not be fully configured yet.
";
};
};
###### implementation
inherit (pkgs) nettools wirelesstools bash writeText;
cfg = config.networking;
@ -18,92 +79,91 @@ let
in
{
services = {
extraJobs = [{
name = "network-interfaces";
job = ''
start on udev
stop on shutdown
start script
export PATH=${modprobe}/sbin:$PATH
modprobe af_packet || true
for i in $(cd /sys/class/net && ls -d *); do
echo "Bringing up network device $i..."
${nettools}/sbin/ifconfig $i up || true
done
# Configure the manually specified interfaces.
names=(${toString names})
ipAddresses=(${toString ipAddresses})
subnetMasks=(${toString subnetMasks})
essids=(${toString essids})
wepKeys=(${toString wepKeys})
for ((n = 0; n < ''${#names[*]}; n++)); do
name=''${names[$n]}
ipAddress=''${ipAddresses[$n]}
subnetMask=''${subnetMasks[$n]}
essid=''${essids[$n]}
wepKey=''${wepKeys[$n]}
# Set wireless networking stuff.
if test "$essid" != default; then
${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true
fi
if test "$wepKey" != nokey; then
${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true
fi
# Set IP address / netmask.
if test "$ipAddress" != dhcp; then
echo "Configuring interface $name..."
extraFlags=
if test "$subnetMask" != default; then
extraFlags="$extraFlags netmask $subnetMask"
fi
${nettools}/sbin/ifconfig "$name" "$ipAddress" $extraFlags || true
fi
done
# Set the nameservers.
if test -n "${toString cfg.nameservers}"; then
rm -f /etc/resolv.conf
if test -n "${cfg.domain}"; then
echo "domain ${cfg.domain}" >> /etc/resolv.conf
require = [options];
services.extraJobs = [{
name = "network-interfaces";
job = ''
start on udev
stop on shutdown
start script
export PATH=${modprobe}/sbin:$PATH
modprobe af_packet || true
for i in $(cd /sys/class/net && ls -d *); do
echo "Bringing up network device $i..."
${nettools}/sbin/ifconfig $i up || true
done
# Configure the manually specified interfaces.
names=(${toString names})
ipAddresses=(${toString ipAddresses})
subnetMasks=(${toString subnetMasks})
essids=(${toString essids})
wepKeys=(${toString wepKeys})
for ((n = 0; n < ''${#names[*]}; n++)); do
name=''${names[$n]}
ipAddress=''${ipAddresses[$n]}
subnetMask=''${subnetMasks[$n]}
essid=''${essids[$n]}
wepKey=''${wepKeys[$n]}
# Set wireless networking stuff.
if test "$essid" != default; then
${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true
fi
if test "$wepKey" != nokey; then
${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true
fi
# Set IP address / netmask.
if test "$ipAddress" != dhcp; then
echo "Configuring interface $name..."
extraFlags=
if test "$subnetMask" != default; then
extraFlags="$extraFlags netmask $subnetMask"
fi
for i in ${toString cfg.nameservers}; do
echo "nameserver $i" >> /etc/resolv.conf
done
${nettools}/sbin/ifconfig "$name" "$ipAddress" $extraFlags || true
fi
# Set the default gateway.
if test -n "${cfg.defaultGateway}"; then
${nettools}/sbin/route add default gw "${cfg.defaultGateway}" || true
done
# Set the nameservers.
if test -n "${toString cfg.nameservers}"; then
rm -f /etc/resolv.conf
if test -n "${cfg.domain}"; then
echo "domain ${cfg.domain}" >> /etc/resolv.conf
fi
# Run any user-specified commands.
${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true
end script
# Hack: Upstart doesn't yet support what we want: a service that
# doesn't have a running process associated with it.
respawn sleep 100000
stop script
for i in $(cd /sys/class/net && ls -d *); do
echo "Taking down network device $i..."
${nettools}/sbin/ifconfig $i down || true
for i in ${toString cfg.nameservers}; do
echo "nameserver $i" >> /etc/resolv.conf
done
end script
'';
}];
};
fi
# Set the default gateway.
if test -n "${cfg.defaultGateway}"; then
${nettools}/sbin/route add default gw "${cfg.defaultGateway}" || true
fi
# Run any user-specified commands.
${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true
end script
# Hack: Upstart doesn't yet support what we want: a service that
# doesn't have a running process associated with it.
respawn sleep 100000
stop script
for i in $(cd /sys/class/net && ls -d *); do
echo "Taking down network device $i..."
${nettools}/sbin/ifconfig $i down || true
done
end script
'';
}];
}

84
system/options.nix

@ -1,84 +0,0 @@
{pkgs, config, ...}:
let
inherit (pkgs.lib) mkOption mergeOneOption;
in
{
boot = {
extraTTYs = mkOption {
default = [];
example = [8 9];
description = "
Tty (virtual console) devices, in addition to the consoles on
which mingetty and syslogd run, that must be initialised.
Only useful if you have some program that you want to run on
some fixed console. For example, the NixOS installation CD
opens the manual in a web browser on console 7, so it sets
<option>boot.extraTTYs</option> to <literal>[7]</literal>.
";
};
};
networking = {
hostName = mkOption {
default = "nixos";
description = "
The name of the machine. Leave it empty if you want to obtain
it from a DHCP server (if using DHCP).
";
};
nativeIPv6 = mkOption {
default = false;
description = "
Whether to use IPv6 even though gw6c is not used. For example,
for Postfix.
";
};
defaultGateway = mkOption {
default = "";
example = "131.211.84.1";
description = "
The default gateway. It can be left empty if it is auto-detected through DHCP.
";
};
nameservers = mkOption {
default = [];
example = ["130.161.158.4" "130.161.33.17"];
description = "
The list of nameservers. It can be left empty if it is auto-detected through DHCP.
";
};
domain = mkOption {
default = "";
example = "home";
description = "
The domain. It can be left empty if it is auto-detected through DHCP.
";
};
localCommands = mkOption {
default = "";
example = "text=anything; echo You can put $text here.";
description = "
Shell commands to be executed at the end of the
<literal>network-interfaces</literal> Upstart job. Note that if
you are using DHCP to obtain the network configuration,
interfaces may not be fully configured yet.
";
};
};
require = import ../modules/module-list.nix;
}
Loading…
Cancel
Save