mirror of
				https://github.com/pragma-/pbot.git
				synced 2025-11-04 00:27:23 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Installation:
 | 
						|
 | 
						|
If you want to run the compiler inside a virtual machine for more security,
 | 
						|
these scripts are designed to work with qemu 0.11.1.  This is required in
 | 
						|
order to use PBot's trigger.  
 | 
						|
 | 
						|
In addition, you can use the provided 'cc' script to use your local compiler tools
 | 
						|
without installing qemu.  No PBot installation or configuration is required in this case.
 | 
						|
 | 
						|
To use the local non-vm 'cc' script, you will need to have gcc, gdb and astyle installed locally.
 | 
						|
 | 
						|
Be aware that you need to single-quote or escape the code if you use the local 'cc' within a shell,
 | 
						|
e.g.:  ./cc $'char s[] = "hello, world"; puts(s);  if(s[0] == \'h\') puts("true");' 
 | 
						|
 | 
						|
WARNING: Using the local 'cc' script outside of the virtual machine will not use qemu at all; 
 | 
						|
         it will affect local system -- compile "safe" code!
 | 
						|
 | 
						|
Virtual machine installation:
 | 
						|
 | 
						|
You will need to download qemu and set up a virtual machine containing a system
 | 
						|
with a compiler and, optionally, sensible ulimits/fork-preventation/other security.
 | 
						|
 | 
						|
1) copy compiler_vm_server.pl and compiler_watchdog.pl to the virtual machine.
 | 
						|
2) then start up the compiler_vm_server.pl script inside the virtual machine
 | 
						|
3) then connect to qemu's monitor and issue the 'savevm 1' command to save the virtual state
 | 
						|
   (After compiles, this state will be loaded via 'loadvm 1' to reset everything within the machine 
 | 
						|
    for a clean and working environment for subsequent compiles.)
 | 
						|
 | 
						|
Now the virtual machine state 1 is saved in a state where it is listening for incoming code.  You can 
 | 
						|
go ahead and quit qemu without shutting down the guest operating sytem.
 | 
						|
 | 
						|
Starting the virtual machine for PBot:
 | 
						|
 | 
						|
Now that the virtual machine is configured and saved, you may launch the local server to listen for
 | 
						|
code from PBot to send to the virtual machine's server.  To do so, run the compiler_server.pl script.
 | 
						|
 | 
						|
Dependencies:
 | 
						|
 | 
						|
gcc (tested with 4.4.4)
 | 
						|
gdb (tested with 7.2)
 | 
						|
astyle (tested with 1.24 -- not working with astyle 2.0)
 | 
						|
 | 
						|
Files:
 | 
						|
 | 
						|
(Read within each file for configuration instructions.)
 | 
						|
 | 
						|
- cc: Allows you to use the compiler locally with or without qemu installed.
 | 
						|
      Can be used within virtual machine for testing.
 | 
						|
      Requires only compiler_vm_client.pl, compiler_vm_server.pl and compiler_watchdog.pl.
 | 
						|
      Must have gcc, gdb and astyle installed locally if not used within virtual machine.
 | 
						|
      WARNING: If not used within virtual machine will not use qemu at all and will 
 | 
						|
               affect local system -- compile "safe" code!
 | 
						|
 | 
						|
- compiler_client.pl:  Main entry point for compiling snippets.  Sends over TCP to
 | 
						|
                       compiler_server.pl.  This file can be run be run from the
 | 
						|
                       client machine or anywhere.
 | 
						|
 | 
						|
- compiler_server.pl:  Responsible for setting up a TCP server to listen for
 | 
						|
                       incoming compile requests; and launching and resetting
 | 
						|
                       the virtual machine.  Sends to compiler_vm_client.pl.
 | 
						|
                       Run this file on the server hosting the virtual machine.
 | 
						|
 | 
						|
- compiler_vm_client.pl: Responsible for sending snippets to the virtual
 | 
						|
                         machine.  Also expands/translates and formats
 | 
						|
                         snippets into compilable code (with main function and
 | 
						|
                         headers), and handles "interactive-editing".
 | 
						|
                         Sends over TCP to qemu serial port, waits for result,
 | 
						|
                         then sends result back caller (compiler_server.pl).
 | 
						|
                         Run this file on the server hosting the virtual machine.
 | 
						|
 | 
						|
- compiler_vm_server.pl: Runs on the system inside the virtual machine.
 | 
						|
                         This script listens for incoming code snippets over
 | 
						|
                         the virtual machine's serial port.
 | 
						|
                         Calls compiler_watchdog.pl to monitor its exit signal
 | 
						|
                         or exit status, then returns result back over serial
 | 
						|
                         port (to compiler_vm_client.pl).
 | 
						|
 | 
						|
- compiler_watchdog.pl: Runs a program and watches its exit signals/status.
 | 
						|
                        Run within the virtual machine.
 | 
						|
 | 
						|
*** The following files are just auxiliary tools to start/connect to qemu, provided
 | 
						|
for convenience only.  Perhaps they will be useful during installation/testing:
 | 
						|
 | 
						|
- monitor: Connects to qemu monitor (internal console) over TCP.
 | 
						|
 | 
						|
- serial: Connects to qemu serial port over TCP.
 | 
						|
 | 
						|
- runqemu: Launches qemu with a visible window, but without networking support.
 | 
						|
 | 
						|
- runeqmu.net: Launches qemu with a visible window, and with networking support.
 | 
						|
               You may load a state previously saved with runqemu and reboot it
 | 
						|
               or otherwise reload its networking configuration to gain networking.
 | 
						|
 |