* More semi-purification of /etc.

svn path=/nixos/trunk/; revision=7290
This commit is contained in:
Eelco Dolstra 2006-12-09 02:51:42 +00:00
parent f20d572814
commit f049c35a86
12 changed files with 118 additions and 26 deletions

View File

@ -72,6 +72,16 @@ mkdir -m 0755 -p /var/log
ln -sf /nix/var/nix/profiles /nix/var/nix/gcroots/
# Set up the statically computed bits of /etc.
rm -f /etc/static
ln -s @etc@/etc /etc/static
for i in $(cd /etc/static && find * -type l); do
mkdir -p /etc/$(dirname $i)
rm -f /etc/$i
ln -s /etc/static/$i /etc/$i
done
# Ensure that the module tools can find the kernel modules.
export MODULE_DIR=@kernel@/lib/modules/
@ -95,15 +105,6 @@ udevtrigger
udevsettle # wait for udev to finish
# Necessary configuration for syslogd.
echo "*.* /dev/tty10" > /etc/syslog.conf
echo "syslog 514/udp" > /etc/services # required, even if we don't use it
# login/su absolutely need this.
test -e /etc/login.defs || touch /etc/login.defs
# Enable a password-less root login.
source @accounts@
@ -122,11 +123,6 @@ if ! test -e /etc/group; then
fi
# We need "localhost" (!!! destructive hack for NIXOS-41).
echo "127.0.0.1 localhost" > /etc/hosts
echo "hosts: files dns" > /etc/nsswitch.conf
# Set up Nix accounts.
if test -z "@readOnlyRoot@"; then
@ -161,15 +157,6 @@ rm -f /etc/event.d
ln -sf @upstartJobs@/etc/event.d /etc/event.d
# Show a nice greeting on each terminal.
cat > /etc/issue <<EOF
<<< Welcome to NixOS (\m) - Kernel \r (\l) >>>
EOF
# Additional path for the interactive shell.
PATH=@wrapperDir@:@fullPath@/bin:@fullPath@/sbin
@ -177,6 +164,9 @@ cat > /etc/profile <<EOF
export PATH=$PATH
export MODULE_DIR=$MODULE_DIR
export NIX_CONF_DIR=/nix/etc/nix
if test "\$HOME" != root; then
export NIX_REMOTE=daemon
fi
source $(dirname $(readlink -f $(type -tp nix-env)))/../etc/profile.d/nix.sh

View File

@ -9,6 +9,10 @@
, # The Upstart job configuration.
upstartJobs
, # Static configuration files to be placed (through symlinks) in
# /etc.
etc
, hostName
}:
@ -29,7 +33,7 @@ in
genericSubstituter {
src = ./boot-stage-2-init.sh;
isExecutable = true;
inherit shell kernel upstart readOnlyRoot upstartJobs hostName;
inherit shell kernel upstart readOnlyRoot upstartJobs etc hostName;
inherit startPath;
# We don't want to put all of `startPath' and `path' in $PATH, since

View File

@ -179,6 +179,56 @@ rec {
++ [pkgs.upstart];
};
etc = import ../helpers/make-etc.nix {
inherit (pkgs) stdenv;
configFiles = [
{ # TCP/UDP port assignments.
source = pkgs.iana_etc + "/etc/services";
target = "services";
}
{ # IP protocol numbers.
source = pkgs.iana_etc + "/etc/protocols";
target = "protocols";
}
{ # Hostname-to-IP mappings.
source = ./etc/hosts;
target = "hosts";
}
{ # Name Service Switch configuration file. Required by the C library.
source = ./etc/nsswitch.conf;
target = "nsswitch.conf";
}
{ # Configuration file for the system logging daemon.
source = ./etc/syslog.conf;
target = "syslog.conf";
}
{ # Friendly greeting on the virtual consoles.
source = ./etc/issue;
target = "issue";
}
{ # Configuration for pwdutils (login, passwd, useradd, etc.).
# You cannot login without it!
source = ./etc/login.defs;
target = "login.defs";
}
{ # SSH daemon configuration.
source = ./etc/sshd_config;
target = "ssh/sshd_config";
}
];
};
makeJob = import ../upstart-jobs/make-job.nix {
inherit (pkgs) stdenv;
@ -198,6 +248,7 @@ rec {
gnugrep utillinux kernel udev upstart;
inherit setuidWrapper;
inherit upstartJobs;
inherit etc;
shell = pkgs.bash + "/bin/sh";
# Additional stuff; add whatever you want here.

1
configuration/etc/hosts Normal file
View File

@ -0,0 +1 @@
127.0.0.1 localhost

4
configuration/etc/issue Normal file
View File

@ -0,0 +1,4 @@
<<< Welcome to NixOS (\m) - Kernel \r (\l) >>>

View File

@ -0,0 +1,11 @@
DEFAULT_HOME yes
SYSTEM_UID_MIN 100
SYSTEM_UID_MAX 499
UID_MIN 1000
UID_MAX 29999
SYSTEM_GID_MIN 100
SYSTEM_GID_MAX 499
GID_MIN 1000
GID_MAX 29999

View File

@ -0,0 +1,8 @@
passwd: compat
group: compat
hosts: files dns
networks: files dns
services: files
protocols: files

View File

@ -0,0 +1 @@
X11Forwarding yes

View File

@ -0,0 +1,3 @@
*.* /dev/tty10
*.* -/var/log/messages

11
helpers/make-etc.nix Normal file
View File

@ -0,0 +1,11 @@
{stdenv, configFiles}:
stdenv.mkDerivation {
name = "etc";
builder = ./make-etc.sh;
/* !!! Use toXML. */
sources = map (x: x.source) configFiles;
targets = map (x: x.target) configFiles;
}

10
helpers/make-etc.sh Normal file
View File

@ -0,0 +1,10 @@
source $stdenv/setup
ensureDir $out/etc
sources_=($sources)
targets_=($targets)
for ((i = 0; i < ${#targets_[@]}; i++)); do
ensureDir $out/etc/$(dirname ${targets_[$i]})
ln -s ${sources_[$i]} $out/etc/${targets_[$i]}
done

View File

@ -16,8 +16,6 @@ start script
mkdir -m 0755 -p /etc/ssh
echo 'X11Forwarding yes' > /etc/ssh/sshd_config
if ! test -f /etc/ssh/ssh_host_dsa_key; then
${openssh}/bin/ssh-keygen -t dsa -b 1024 -f /etc/ssh/ssh_host_dsa_key -N ''
fi