3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-25 21:39:27 +01:00

Rename compiler_vm to pbot-vm and other misc applet updates

This commit is contained in:
Pragmatic Software 2022-02-14 16:33:29 -08:00
parent 4316f26797
commit 3cfedcf3b8
75 changed files with 32 additions and 102 deletions

View File

@ -1,43 +0,0 @@
#!/usr/bin/env perl
# SPDX-FileCopyrightText: 2021 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
# compiler_client.pl connects to compiler_server.pl hosted at PeerAddr/PeerPort below
# and sends a nick, language and code, then retreives and prints the compilation/execution output.
#
# this way we can run the compiler virtual machine on any remote server.
use warnings;
use strict;
use IO::Socket::INET;
use JSON;
my $sock = IO::Socket::INET->new(
PeerAddr => '192.168.0.42',
PeerPort => 9000,
Proto => 'tcp'
);
if (not defined $sock) {
print "Fatal error compiling: $!; try again later\n";
die $!;
}
my $json = join ' ', @ARGV;
my $h = decode_json $json;
$h->{code} =~ s/\s*}\s*$//;
my $lang = $h->{lang} // "c11";
if ($code =~ s/-lang=([^ ]+)//) { $lang = lc $1; }
$h->{lang} = $lang;
$json = encode_json $h;
print $sock "$json\n";
while (my $line = <$sock>) { print "$line"; }
close $sock;

View File

@ -1,42 +0,0 @@
#!/usr/bin/perl
# SPDX-FileCopyrightText: 2021 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
# compiler_client.pl connects to compiler_server.pl hosted at PeerAddr/PeerPort below
# and sends a nick, language and code, then retreives and prints the compilation/execution output.
#
# this way we can run the compiler virtual machine on any remote server.
use warnings;
use strict;
use IO::Socket;
use JSON;
my $sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 9000,
Proto => 'tcp'
);
if (not defined $sock) {
print "Fatal error compiling: $!; try again later\n";
die $!;
}
my $json = join ' ', @ARGV;
my $h = decode_json $json;
my $lang = $h->{lang} // "c11";
if ($h->{code} =~ s/-lang=([^ ]+)//) { $lang = lc $1; }
$h->{lang} = $lang;
$json = encode_json $h;
print $sock "$json\n";
while (my $line = <$sock>) { print "$line"; }
close $sock;

4
applets/horrorscope vendored
View File

@ -1,4 +0,0 @@
#!/bin/sh
# SPDX-FileCopyrightText: 2021 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
~/pbot/modules/lookupbot.pl horrorscope "$*"

BIN
data/factoids.sqlite3 vendored

Binary file not shown.

View File

@ -327,6 +327,7 @@
* [Create a new virtual machine](VirtualMachine.md#create-a-new-virtual-machine) * [Create a new virtual machine](VirtualMachine.md#create-a-new-virtual-machine)
* [Install Linux in the virtual machine](VirtualMachine.md#install-linux-in-the-virtual-machine) * [Install Linux in the virtual machine](VirtualMachine.md#install-linux-in-the-virtual-machine)
* [Set up serial ports](VirtualMachine.md#set-up-serial-ports) * [Set up serial ports](VirtualMachine.md#set-up-serial-ports)
* [Set up virtio-vsock](VirtualMachine.md#set-up-virtio-vsock)
* [Reboot virtual machine](VirtualMachine.md#reboot-virtual-machine) * [Reboot virtual machine](VirtualMachine.md#reboot-virtual-machine)
* [Install software](VirtualMachine.md#install-software) * [Install software](VirtualMachine.md#install-software)
* [Install Perl](VirtualMachine.md#install-perl) * [Install Perl](VirtualMachine.md#install-perl)

View File

@ -128,7 +128,7 @@ depending on your hardware and network configuration.
#### Set up serial ports #### Set up serial ports
While the installation is in progress, switch to a terminal on your host system. Go into the While the installation is in progress, switch to a terminal on your host system. Go into the
`applets/compiler_vm/host/devices` directory and run the `add-serials` script to add the `serial-2.xml` and `applets/pbot-vm/host/devices` directory and run the `add-serials` script to add the `serial-2.xml` and
`serial-3.xml` files to the configuration for the `pbot-vm` libvirt machine. `serial-3.xml` files to the configuration for the `pbot-vm` libvirt machine.
host$ ./add-serials host$ ./add-serials
@ -195,7 +195,7 @@ We must attach a `vhost-vsock-pci` device to the guest to enable VM sockets comm
Each VM on a hypervisor must have a unique context ID (CID). Each service within the VM must Each VM on a hypervisor must have a unique context ID (CID). Each service within the VM must
have a unique port. The PBot VM Guest defaults to `7` for the CID and `5555` for the port. have a unique port. The PBot VM Guest defaults to `7` for the CID and `5555` for the port.
While still in the `applets/compiler_vm/host/devices` directory, run the `add-vsock` script: While still in the `applets/pbot-vm/host/devices` directory, run the `add-vsock` script:
host$ ./add-vsock host$ ./add-vsock
@ -238,22 +238,30 @@ as well as a few Perl modules.
#### Install PBot VM Guest #### Install PBot VM Guest
Next we install the PBot VM Guest server script that fosters communication between the virtual machine guest Next we install the PBot VM Guest server script that fosters communication between the virtual machine guest
and the physical host system. We'll do this inside the virtual machine guest system, logged on as `root` and the physical host system. We'll do this inside the virtual machine guest system, logged on as `root`
while in the `/root` directory. Feel free to `chdir` to `/tmp` if you prefer. while in the `/tmp` directory.
guest$ chdir /tmp
The `rsync` command isn't installed with a Fedora minimal install, but `scp` is available. Replace The `rsync` command isn't installed with a Fedora minimal install, but `scp` is available. Replace
`192.168.100.42` below with your own local IP address; `user` with the user account that has the `192.168.100.42` below with your own local IP address; `user` with the user account that has the
PBot directory; and `pbot` with the path to the directory. PBot directory; and `pbot` with the path to the directory.
guest$ scp -r user@192.168.100.42:~/pbot/applets/compiler_vm/guest . guest$ scp -r user@192.168.100.42:~/pbot/applets/pbot-vm/guest .
Once that's done, run the following command: Once that's done, run the following command:
guest$ ./guest/bin/setup-guest guest$ ./guest/bin/setup-guest
After running the `setup-guest` script, we need to make the environment changes take effect: This will install `guest-server` to `/usr/local/bin/`, set up some environment variables and
harden the guest system. After running the `setup-guest` script, we need to make the environment
changes take effect:
guest$ source /root/.bashrc guest$ source /root/.bashrc
We no longer need the `/tmp/guest/` stuff. We can delete it:
guest$ rm -rf guest/
#### Start PBot VM Guest #### Start PBot VM Guest
We're ready to start the PBot VM Guest server. On the guest, as `root`, execute the command: We're ready to start the PBot VM Guest server. On the guest, as `root`, execute the command:
@ -273,9 +281,11 @@ under [Set up serial ports](#set-up-serial-ports) and that your network configur
access. access.
Let's make sure the PBot VM Guest server is listening for and can execute commands. The `vm-exec` command Let's make sure the PBot VM Guest server is listening for and can execute commands. The `vm-exec` command
in the `applets/compiler_vm/host/bin` directory allows you to send commands from the shell. allows you to send commands from the shell. Change your currect working directory to `applets/pbot-vm/host/bin`
and run the `vm-exec` command:
host$ vm-exec -lang=sh echo hello world host$ cd applets/pbot-vm/host/bin
host$ ./vm-exec -lang=sh echo hello world
This should output some logging noise followed by "hello world". You can test other language modules This should output some logging noise followed by "hello world". You can test other language modules
by changing the `-lang=` option. I recommend testing and verifying that all of your desired language by changing the `-lang=` option. I recommend testing and verifying that all of your desired language
@ -284,7 +294,7 @@ modules are configured before going on to the next step.
If you have multiple PBot VM Guests, or if you used a different TCP port, you can specify the If you have multiple PBot VM Guests, or if you used a different TCP port, you can specify the
`PBOTVM_SERIAL` environment variable when executing the `vm-exec` command: `PBOTVM_SERIAL` environment variable when executing the `vm-exec` command:
host$ PBOTVM_SERIAL=7777 vm-exec -lang=sh echo test host$ PBOTVM_SERIAL=7777 ./vm-exec -lang=sh echo test
#### Save initial state #### Save initial state
Switch back to an available terminal on the physical host machine. Enter the following command Switch back to an available terminal on the physical host machine. Enter the following command
@ -305,10 +315,11 @@ virtual machine will continue running in the background until it is manually shu
`shutdown now -h` inside the VM or via `virsh shutdown pbot-vm` on the host). `shutdown now -h` inside the VM or via `virsh shutdown pbot-vm` on the host).
## Start PBot VM Host ## Start PBot VM Host
To start the PBot VM Host server, execute the `vm-server` script in the To start the PBot VM Host server, change your current working directory to `applets/pbot-vm/host/bin`
`applets/compiler_vm/host/bin` directory on the host. and execute the `vm-server` script:
host$ vm-server host$ cd applets/pbot-vm/host/bin
host$ ./vm-server
This will start a TCP server on port `9000`. It will listen for incoming commands and This will start a TCP server on port `9000`. It will listen for incoming commands and
pass them along to the virtual machine's TCP serial port `5555`. It will also monitor pass them along to the virtual machine's TCP serial port `5555`. It will also monitor
@ -322,8 +333,15 @@ use `other-vm` with a longer `30` second timeout, on different serial and heartb
### Test PBot ### Test PBot
All done. Everything is set up now. All done. Everything is set up now.
PBot is already preconfigured with commands that invoke the `applets/compiler_client.pl` PBot is already preconfigured with commands that invoke the `host/bin/vm-client`
script (a copy of `host/bin/vm-client`) to send VM commands to port `9000`. script to send VM commands to `vm-server` on the default port `9000`:
<pragma-> factshow sh
<PBot> [global] sh: /call cc -lang=sh
<pragma-> factshow cc
<PBot> [global] cc: /call compiler {"nick":"$nick:json","channel":"$channel:json","code":"$args:json"}
<pragma-> factshow compiler
<PBot> [global] compiler: pbot-vm/host/bin/vm-client [applet]
In your instance of PBot, the `sh echo hello` command should output `hello`. In your instance of PBot, the `sh echo hello` command should output `hello`.