* system/options.nix: gone :-)

svn path=/nixos/branches/modular-nixos/; revision=15772
This commit is contained in:
Eelco Dolstra 2009-05-28 16:03:48 +00:00
parent fc9111fadf
commit c6c9304b95
5 changed files with 183 additions and 197 deletions

View File

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

View File

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

View File

@ -1,7 +1,39 @@
{pkgs, config, ...}: {pkgs, config, ...}:
let 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! # think about where to put this chunk of code!
# required by other pieces as well # required by other pieces as well
@ -16,26 +48,10 @@ let
in in
###### implementation
# most options are defined in i18n.nix
{ {
require = [options];
inherit requiredTTYs; # pass them to upstart-job/default.nix inherit requiredTTYs; # pass them to ./modules/tasks/tty-backgrounds.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.
";
};
}
];
services = { services = {
extraJobs = [{ extraJobs = [{

View File

@ -1,9 +1,70 @@
{pkgs, config, ...}: {pkgs, config, ...}:
###### implementation
let 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; inherit (pkgs) nettools wirelesstools bash writeText;
cfg = config.networking; cfg = config.networking;
@ -18,92 +79,91 @@ let
in in
{ {
services = { require = [options];
extraJobs = [{
name = "network-interfaces";
job = '' services.extraJobs = [{
start on udev name = "network-interfaces";
stop on shutdown
start script job = ''
export PATH=${modprobe}/sbin:$PATH start on udev
modprobe af_packet || true stop on shutdown
for i in $(cd /sys/class/net && ls -d *); do start script
echo "Bringing up network device $i..." export PATH=${modprobe}/sbin:$PATH
${nettools}/sbin/ifconfig $i up || true modprobe af_packet || true
done
# Configure the manually specified interfaces. for i in $(cd /sys/class/net && ls -d *); do
names=(${toString names}) echo "Bringing up network device $i..."
ipAddresses=(${toString ipAddresses}) ${nettools}/sbin/ifconfig $i up || true
subnetMasks=(${toString subnetMasks}) done
essids=(${toString essids})
wepKeys=(${toString wepKeys})
for ((n = 0; n < ''${#names[*]}; n++)); do # Configure the manually specified interfaces.
name=''${names[$n]} names=(${toString names})
ipAddress=''${ipAddresses[$n]} ipAddresses=(${toString ipAddresses})
subnetMask=''${subnetMasks[$n]} subnetMasks=(${toString subnetMasks})
essid=''${essids[$n]} essids=(${toString essids})
wepKey=''${wepKeys[$n]} wepKeys=(${toString wepKeys})
# Set wireless networking stuff. for ((n = 0; n < ''${#names[*]}; n++)); do
if test "$essid" != default; then name=''${names[$n]}
${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true ipAddress=''${ipAddresses[$n]}
fi subnetMask=''${subnetMasks[$n]}
essid=''${essids[$n]}
wepKey=''${wepKeys[$n]}
if test "$wepKey" != nokey; then # Set wireless networking stuff.
${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true if test "$essid" != default; then
fi ${wirelesstools}/sbin/iwconfig "$name" essid "$essid" || true
# 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
fi
for i in ${toString cfg.nameservers}; do
echo "nameserver $i" >> /etc/resolv.conf
done
fi fi
# Set the default gateway. if test "$wepKey" != nokey; then
if test -n "${cfg.defaultGateway}"; then ${wirelesstools}/sbin/iwconfig "$name" key "$(cat "$wepKey")" || true
${nettools}/sbin/route add default gw "${cfg.defaultGateway}" || true
fi fi
# Run any user-specified commands. # Set IP address / netmask.
${bash}/bin/sh ${writeText "local-net-cmds" cfg.localCommands} || true 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
end script done
# Hack: Upstart doesn't yet support what we want: a service that # Set the nameservers.
# doesn't have a running process associated with it. if test -n "${toString cfg.nameservers}"; then
respawn sleep 100000 rm -f /etc/resolv.conf
if test -n "${cfg.domain}"; then
stop script echo "domain ${cfg.domain}" >> /etc/resolv.conf
for i in $(cd /sys/class/net && ls -d *); do fi
echo "Taking down network device $i..." for i in ${toString cfg.nameservers}; do
${nettools}/sbin/ifconfig $i down || true echo "nameserver $i" >> /etc/resolv.conf
done 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
'';
}];
} }

View File

@ -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;
}