pbot/modules/compiler_vm
Tomasz Kramkowski b5d8f72254 License project under MPL2
This patch adds the file LICENSE which is the verbatim copy of the
Mozilla Public License Version 2.0 as retreived from
https://www.mozilla.org/media/MPL/2.0/index.815ca599c9df.txt on
2017-03-05.

This patch also places license headers for the MPL2 type A variant of
the license header in the following files:

PBot/AntiFlood.pm
PBot/BanTracker.pm
PBot/BlackList.pm
PBot/BotAdminCommands.pm
PBot/BotAdmins.pm
PBot/ChanOpCommands.pm
PBot/ChanOps.pm
PBot/Channels.pm
PBot/Commands.pm
PBot/DualIndexHashObject.pm
PBot/EventDispatcher.pm
PBot/FactoidCommands.pm
PBot/FactoidModuleLauncher.pm
PBot/Factoids.pm
PBot/HashObject.pm
PBot/IRCHandlers.pm
PBot/IgnoreList.pm
PBot/IgnoreListCommands.pm
PBot/Interpreter.pm
PBot/LagChecker.pm
PBot/Logger.pm
PBot/MessageHistory.pm
PBot/MessageHistory_SQLite.pm
PBot/NickList.pm
PBot/PBot.pm
PBot/Plugins.pm
PBot/Plugins/AntiAway.pm
PBot/Plugins/AntiKickAutoRejoin.pm
PBot/Plugins/AntiRepeat.pm
PBot/Plugins/AntiTwitter.pm
PBot/Plugins/AutoRejoin.pm
PBot/Plugins/Counter.pm
PBot/Plugins/Quotegrabs.pm
PBot/Plugins/Quotegrabs/Quotegrabs_Hashtable.pm
PBot/Plugins/Quotegrabs/Quotegrabs_SQLite.pm
PBot/Plugins/UrlTitles.pm
PBot/Plugins/_Example.pm
PBot/Refresher.pm
PBot/Registerable.pm
PBot/Registry.pm
PBot/RegistryCommands.pm
PBot/SQLiteLogger.pm
PBot/SQLiteLoggerLayer.pm
PBot/SelectHandler.pm
PBot/StdinReader.pm
PBot/Timer.pm
PBot/Utils/ParseDate.pm
PBot/VERSION.pm
build/update-version.pl
modules/acronym.pl
modules/ago.pl
modules/c11std.pl
modules/c2english.pl
modules/c2english/CGrammar.pm
modules/c2english/c2eng.pl
modules/c99std.pl
modules/cdecl.pl
modules/cfaq.pl
modules/cjeopardy/IRCColors.pm
modules/cjeopardy/QStatskeeper.pm
modules/cjeopardy/Scorekeeper.pm
modules/cjeopardy/cjeopardy.pl
modules/cjeopardy/cjeopardy_answer.pl
modules/cjeopardy/cjeopardy_filter.pl
modules/cjeopardy/cjeopardy_hint.pl
modules/cjeopardy/cjeopardy_qstats.pl
modules/cjeopardy/cjeopardy_scores.pl
modules/cjeopardy/cjeopardy_show.pl
modules/codepad.pl
modules/compiler_block.pl
modules/compiler_client.pl
modules/compiler_vm/Diff.pm
modules/compiler_vm/cc
modules/compiler_vm/compiler_client.pl
modules/compiler_vm/compiler_server.pl
modules/compiler_vm/compiler_server_vbox_win32.pl
modules/compiler_vm/compiler_server_watchdog.pl
modules/compiler_vm/compiler_vm_client.pl
modules/compiler_vm/compiler_vm_server.pl
modules/compiler_vm/compiler_watchdog.pl
modules/compiler_vm/languages/_c_base.pm
modules/compiler_vm/languages/_default.pm
modules/compiler_vm/languages/bash.pm
modules/compiler_vm/languages/bc.pm
modules/compiler_vm/languages/bf.pm
modules/compiler_vm/languages/c11.pm
modules/compiler_vm/languages/c89.pm
modules/compiler_vm/languages/c99.pm
modules/compiler_vm/languages/clang.pm
modules/compiler_vm/languages/clang11.pm
modules/compiler_vm/languages/clang89.pm
modules/compiler_vm/languages/clang99.pm
modules/compiler_vm/languages/clangpp.pm
modules/compiler_vm/languages/clisp.pm
modules/compiler_vm/languages/cpp.pm
modules/compiler_vm/languages/freebasic.pm
modules/compiler_vm/languages/go.pm
modules/compiler_vm/languages/haskell.pm
modules/compiler_vm/languages/java.pm
modules/compiler_vm/languages/javascript.pm
modules/compiler_vm/languages/ksh.pm
modules/compiler_vm/languages/lua.pm
modules/compiler_vm/languages/perl.pm
modules/compiler_vm/languages/python.pm
modules/compiler_vm/languages/python3.pm
modules/compiler_vm/languages/qbasic.pm
modules/compiler_vm/languages/scheme.pm
modules/compiler_vm/languages/server/_c_base.pm
modules/compiler_vm/languages/server/_default.pm
modules/compiler_vm/languages/server/c11.pm
modules/compiler_vm/languages/server/c89.pm
modules/compiler_vm/languages/server/c99.pm
modules/compiler_vm/languages/server/clang.pm
modules/compiler_vm/languages/server/clang11.pm
modules/compiler_vm/languages/server/clang89.pm
modules/compiler_vm/languages/server/clang99.pm
modules/compiler_vm/languages/server/cpp.pm
modules/compiler_vm/languages/server/freebasic.pm
modules/compiler_vm/languages/server/haskell.pm
modules/compiler_vm/languages/server/java.pm
modules/compiler_vm/languages/server/qbasic.pm
modules/compiler_vm/languages/server/tendra.pm
modules/compiler_vm/languages/sh.pm
modules/compiler_vm/languages/tendra.pm
modules/compliment
modules/cstd.pl
modules/define.pl
modules/dice_roll.pl
modules/excuse.sh
modules/expand_macros.pl
modules/fnord.pl
modules/funnyish_quote.pl
modules/g.pl
modules/gdefine.pl
modules/gen_cfacts.pl
modules/gencstd.pl
modules/get_title.pl
modules/getcfact.pl
modules/google.pl
modules/gspy.pl
modules/gtop10.pl
modules/gtop15.pl
modules/headlines.pl
modules/horoscope
modules/horrorscope
modules/ideone.pl
modules/insult.pl
modules/love_quote.pl
modules/man.pl
modules/map.pl
modules/math.pl
modules/prototype.pl
modules/qalc.pl
modules/random_quote.pl
modules/seen.pl
modules/urban
modules/weather.pl
modules/wikipedia.pl
pbot.pl
pbot.sh

It is highly recommended that this list of files is reviewed to ensure
that all files are the copyright of the sole maintainer of the
repository. If any files with license headers contain the intellectual
property of anyone else, it is recommended that a request is made to
revise this patch or that the explicit permission of the co-author is
gained to allow for the license of the work to be changed.

I (Tomasz Kramkowski), the contributor, take no responsibility for any
legal action taken against the maintainer of this repository for
incorrectly claiming copyright to any work not owned by the maintainer
of this repository.
2017-03-06 00:31:15 +00:00
..
history Add history directory (compiler_vm) 2015-07-12 02:48:22 -07:00
languages License project under MPL2 2017-03-06 00:31:15 +00:00
misc Add print_last_statement() and other misc compiler_vm fixes 2015-07-12 02:54:08 -07:00
Diff.pm License project under MPL2 2017-03-06 00:31:15 +00:00
README ulimit for core files no longer necessary 2012-08-02 05:02:27 +00:00
cc License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_client.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_server.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_server_vbox_win32.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_server_watchdog.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_vm_client.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_vm_server.pl License project under MPL2 2017-03-06 00:31:15 +00:00
compiler_watchdog.pl License project under MPL2 2017-03-06 00:31:15 +00:00

README

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.