cleaned up kvm installation test. It works now.

svn path=/nixos/trunk/; revision=18986
This commit is contained in:
Marc Weber 2009-12-16 04:55:35 +00:00
parent 6c30ba3e48
commit 5bf9fdbe41

View File

@ -20,8 +20,6 @@ let
nixosTarball = makeTarball "nixos.tar.bz2" (cleanSource ../../..);
nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (cleanSource pkgs.path);
If test fails at "waiting for socket" rerun the test
*/
configuration_iso = ./configuration-iso.nix;
@ -55,6 +53,15 @@ let
# TODO test both: copyKernels = true and false. true doesn't work ?
debug = if false then ''
export DISPLAY=localhost:0.0
''
else
# That's crazy: You see nothing but your computer is doing a *lot* of work :-)
''
KVM_OPTIONS="-nographic"
'';
in
rec {
@ -65,10 +72,13 @@ rec {
# Is there a way to use kvm when not running as root?
# Would using uml provide any advantages?
# TODO add nix-env -i command and verify that root can install additional
# tools such as git or sshfs-fuse!
# TODO: Run installation withoun networking support ?
# This can be done by using either firewalls or building system by .drv path?
pkgs.runCommand "nixos-installation-test" { inherit systemDerivation; } ''
set -e
INFO(){ echo "INFO: " $@; }
die(){ echo $@; exit 1; }
@ -87,8 +97,7 @@ rec {
PATH=${pkgs.samba}/sbin:$PATH
# install the system
export DISPLAY=localhost:0.0
${debug}
SOCKET_NAME=65535.socket
@ -96,14 +105,12 @@ rec {
cat >> run-kvm.sh << EOF
#!/bin/sh -e
# don't ask me why I have to remove the socket.. If I don't it won't be
# reused by kvm_qemu!
rm $SOCKET_NAME || true
exec qemu-system-x86_64 -m 512 \
-no-kvm-irqchip \
-net nic,model=virtio -net user -smb /nix \
-hda image \
-redir tcp:''${SOCKET_NAME/.socket/}::22 \
$KVM_OPTIONS \
"\$@"
EOF
chmod +x run-kvm.sh
@ -117,13 +124,19 @@ rec {
waitTill(){
echo $1
while ! eval "$2"; do sleep 1; done
eval "while ! $2; do sleep 1; done"
}
SSH(){
# if timout occurs ssh command will be retried.
# Waiting forever doesn't seem to work because
# there seems to be a race condition where
# SSH connects but sshd doesn't notice it.
# Thus fail and retry
ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-o ProxyCommand="socat stdio ./$SOCKET_NAME" \
-o ConnectTimeout=1 \
root@127.0.0.1 \
"$@";
}
@ -138,11 +151,28 @@ rec {
# wait for socket
waitForSSHD(){
waitTill "waiting for socket in $TMP" '[ ! -e ./$SOCKET_NAME ]'
waitTill "waiting for sshd job" "SSH 'echo Hello > /dev/tty1' &> /dev/null"
}
nixBuildTest(){
INFO "verifying that nix-env -i works"
SSH_STDIN_E << EOF
cat >> test.nix << EOF_TEST
let pkgs = import /etc/nixos/nixpkgs/pkgs/top-level/all-packages.nix {};
in pkgs.stdenv.mkDerivation {
name = "test";
phases = "create_out";
create_out = "mkdir -p \\\$out/ok";
}
EOF_TEST
nix-build test.nix
[ -e result/ok ]
EOF
}
### test installting NixOS: install system then reboot
@ -157,10 +187,11 @@ rec {
waitForSSHD
nixBuildTest
# INSTALLATION
INFO "creating filesystem .."
SSH_STDIN_E << EOF
set -x
parted /dev/sda mklabel msdos
parted /dev/sda mkpart primary 0 2G
parted /dev/sda mkpart primary 1G 3G
@ -195,8 +226,9 @@ rec {
# has the generated configuration.nix file syntax errors?
nix-instantiate --eval-only /tmp/test.nix
echo 'export NIXOS_CONFIG=/etc/nixos/nixos/tests/test-nixos-install-from-cd/configuration.nix' >> /root/.bashrc
. ~/.bashrc
mkdir /mnt/root
echo 'export NIXOS_CONFIG=/etc/nixos/nixos/tests/test-nixos-install-from-cd/configuration.nix' >> /mnt/root/.bashrc
. /mnt/root/.bashrc
export NIX_OTHER_STORES=/nix-on-host
run-in-chroot "/nix/store/nixos-bootstrap --install --no-pull"
@ -209,24 +241,7 @@ rec {
RUN_KVM -boot c
waitForSSHD
INFO "verifying that nix-env -i works"
SSH_STDIN_E << EOF
cat >> test.nix << EOF_TEST
let pkgs = import /etc/nixos/nixpkgs/pkgs/top-level/all-packages.nix {};
in pkgs.stdenv.mkDerivation {
name = "test";
phases = "create_out";
create_out = "mkdir -p $out/ok";
}
EOF_TEST
set -x
nix-env -i -f test.nix
[ -e ~/.nix-profile/ok ]
EOF
nixBuildTest
SHUTDOWN_VM