Improve VM support
authorMarius Gavrilescu <marius@ieval.ro>
Mon, 27 Apr 2015 15:16:11 +0000 (18:16 +0300)
committerMarius Gavrilescu <marius@ieval.ro>
Mon, 27 Apr 2015 15:16:11 +0000 (18:16 +0300)
ex/makevm
ex/runvm
ex/vm.conf
lib/Gruntmaster/Daemon/Format.pm
lib/Gruntmaster/Daemon/Runner/Interactive.pm

index bf240c3c58e66a78889a9a977a3df3898c7d6349..f6ed255feb5ac50c1ced488eb0dd96ddade79f7b 100755 (executable)
--- a/ex/makevm
+++ b/ex/makevm
@@ -1,7 +1,4 @@
 #!/bin/bash
-GROUP=$(getent group www-data | cut -f3 -d:)
-USER=$(getent passwd www-data | cut -f3 -d:)
-
 rm -rf vm/ vm.squashfs
 mkdir -p vm/proc/
 mount /proc -o bind vm/proc
@@ -9,28 +6,20 @@ multistrap -f ex/vm.conf
 ln -s vm/usr/bin/mawk vm/bin/awk
 echo '/sbin/poweroff -f' > vm/.bash_logout
 cat > vm/etc/fstab <<EOF
-virtfs /mnt 9p    trans=virtio,auto 0 0
-tmpfs  /tmp tmpfs defaults          0 0
+virtfs /mnt 9p    trans=virtio 0 0
+tmpfs  /tmp tmpfs defaults     0 0
 EOF
 cat > vm/.profile <<EOF
-mount -a
+mount /mnt
 stty -F /dev/ttyS1 -echo
 cd /mnt
 export PS1="# "
 EOF
-cat > vm/etc/initramfs-tools/modules <<EOF
-squashfs
-9p
-9pnet
-9pnet_virtio
-EOF
 cat >> vm/etc/sudoers <<EOF
 Defaults>nobody closefrom=5
 Defaults>nobody !env_check
 Defaults>nobody env_keep="ONLINE_JUDGE PATH HOME"
 EOF
 install gruntmaster-exec gruntmaster-compile vm/usr/bin/
-chroot vm update-initramfs -d -k 3.2.0-4-amd64
-chroot vm update-initramfs -c -k 3.2.0-4-amd64
 umount vm/proc
 mksquashfs vm vm.squashfs -comp lzo
index 208aedc34aff6264390c15a3ebba6956b3dbe7bb..8495e5106c4894258ee8df9c0e77b2306f474958 100755 (executable)
--- a/ex/runvm
+++ b/ex/runvm
@@ -1,15 +1,11 @@
 #!/bin/bash
-ROOT=/home/marius/git/gruntmaster-daemon
+ROOT=.
 
 qemu-system-x86_64 \
        -enable-kvm -cpu host -m 256MB \
        -nodefaults -nographic \
-       -kernel $ROOT/vm/boot/vmlinuz-3.2.0-4-amd64 \
-       -initrd $ROOT/vm/boot/initrd.img-3.2.0-4-amd64 \
-       -append 'root=/dev/vda console=ttyS0,38400 quiet init=/bin/bash --login' \
+       -kernel $ROOT/bzImage \
+       -append 'root=/dev/vda console=ttyS0,1200 init=/bin/bash --login' \
        -drive file=$ROOT/vm.squashfs,if=virtio,readonly \
        -virtfs local,id=virtfs0,path=.,security_model=none,mount_tag=virtfs \
-       -chardev stdio,id=stdio,signal=on \
-       -chardev pipe,id=hostpipe,path=$1 \
-       -serial chardev:stdio \
-       -serial chardev:hostpipe
+       -serial stdio "$@"
index f2aab06f6d97ab406eae9b0b1cf1cd7d9ed49acd..19a9092cc56b3528e6d7b1b28032bb18f0e2acdc 100644 (file)
@@ -5,9 +5,9 @@ bootstrap=Debian
 aptsources=Debian
 
 [Debian]
-packages=linux-image-3.2.0-4-amd64 mawk libbsd-resource-perl libipc-signal-perl gcc g++ mono-gmcs default-jdk golang-go gccgo ghc fpc perl python sudo
+packages=sysvinit-core mawk libbsd-resource-perl libipc-signal-perl gcc g++ mono-gmcs default-jdk golang-go gccgo ghc fpc perl python sudo
 source=http://ftp.ro.debian.org/debian
 keyring=debian-archive-keyring
-suite=wheezy
+suite=jessie
 components=main
 omitdebsrc=true
index bcfb2a4ebfe0a48db0adefe1bf3ef4583ea3db8f..6160a31e9460a08bba84bafb9f44eab524ffc89d 100644 (file)
@@ -11,7 +11,6 @@ use File::Basename qw/fileparse/;
 use File::Slurp qw/read_file write_file/;
 use List::MoreUtils qw/natatime/;
 use Log::Log4perl qw/get_logger/;
-use POSIX qw/mkfifo/;
 use String::ShellQuote qw/shell_quote/;
 use Try::Tiny;
 
@@ -23,13 +22,13 @@ our @EXPORT_OK = qw/prepare_files stopvms/;
 our (%vm);
 
 sub runvm {
-       my ($name) = @_;
+       my ($name, $arg) = @_;
        return unless $ENV{GRUNTMASTER_VM};
-       mkfifo "$name.in", 0600;
-       mkfifo "$name.out", 0600;
-       get_logger->trace("Starting VM $name");
+       my $cmd = $ENV{GRUNTMASTER_VM};
+       $cmd .= ' ' . $arg if $arg;
+       get_logger->trace("Starting VM $name ($cmd)");
        $vm{$name} = Expect::Simple->new({
-               Cmd => "$ENV{GRUNTMASTER_VM} $name",
+               Cmd => $cmd,
                Prompt => '# ',
                DisconnectCmd => 'exit',
                RawPty => 1,
@@ -104,7 +103,12 @@ sub prepare{
 
 sub prepare_files{
        my $meta = shift;
-       runvm $_ for keys %{$meta->{files}};
+       if ($meta->{runner} eq 'Interactive') {
+               runvm ver => '-serial unix:vm.sock,nowait,server';
+               runvm prog => '-serial unix:vm.sock,nowait';
+       } else {
+               runvm $_ for keys %{$meta->{files}};
+       }
 
        for my $file (values %{$meta->{files}}) {
                my ($format, $name, $content) = @{$file}{qw/format name content/};
index af1581e1fa805a89aee6ba8a4a1f41c9ceb14227..ed9a056f2aac09e5907a35f15a18d4b3c336f98a 100644 (file)
@@ -21,11 +21,6 @@ sub run{
        mkfifo 'fifo1', 0600 or die "$!\n" unless -e 'fifo1';
        mkfifo 'fifo2', 0600 or die "$!\n" unless -e 'fifo2';
 
-       if ($test == 1 && $ENV{GRUNTMASTER_VM}) {
-               exec 'cat <prog.out >ver.in' if fork;
-               exec 'cat <ver.out >prog.in' if fork;
-       }
-
        my $ret = fork // get_logger->logdie("Fork failed: $!");
        if ($ret) {
                try {
This page took 0.015578 seconds and 4 git commands to generate.