update readme and also fix bugs found during that
This commit is contained in:
parent
05b3e97a66
commit
556fd34b05
2
Makefile
2
Makefile
|
@ -18,7 +18,7 @@
|
||||||
.PHONY: all check clean dev-migrate dev-rollback
|
.PHONY: all check clean dev-migrate dev-rollback
|
||||||
|
|
||||||
all:
|
all:
|
||||||
raco setup ./crossfire/
|
raco pkg install ./crossfire
|
||||||
|
|
||||||
check:
|
check:
|
||||||
raco check-requires -- crossfire/*.rkt
|
raco check-requires -- crossfire/*.rkt
|
||||||
|
|
130
README.md
130
README.md
|
@ -22,6 +22,122 @@ distributed brute force infrastructure
|
||||||
|
|
||||||
takes the difficulty out of creating custom brute force jobs
|
takes the difficulty out of creating custom brute force jobs
|
||||||
|
|
||||||
|
## getting started with the extremely basic but currently working MVP
|
||||||
|
|
||||||
|
`cd` to the repo directory. hopefully you're already here :P
|
||||||
|
|
||||||
|
add user-level racket dir to your PATH
|
||||||
|
```bash
|
||||||
|
export PATH=$HOME/.racket/$(racket -e "(displayln (version))")/bin:$PATH
|
||||||
|
```
|
||||||
|
|
||||||
|
install package from repo
|
||||||
|
```bash
|
||||||
|
raco pkg install ./crossfire
|
||||||
|
```
|
||||||
|
|
||||||
|
setup development environment
|
||||||
|
```bash
|
||||||
|
export DATABASE_URL="sqlite:lib/crossfire.sqlite"
|
||||||
|
mkdir -p lib/projects
|
||||||
|
```
|
||||||
|
|
||||||
|
initialize server with some temporary dev commands (this assumes your computer is x86_64 linux)
|
||||||
|
the arch corresponds to the output of `gcc -dumpmachine` for the target
|
||||||
|
```bash
|
||||||
|
crossfire-server dev-new-agent meow x86_64-pc-linux-gnu # exports lib/meow.rktd
|
||||||
|
crossfire-server dev-export-client # exports lib/client0.rktd
|
||||||
|
```
|
||||||
|
|
||||||
|
start the server and a development version of the agent (WIP) using the exported agent config
|
||||||
|
```bash
|
||||||
|
crossfire-server
|
||||||
|
# somewhere else
|
||||||
|
racket crossfire/agent.rkt -c lib/meow.rktd
|
||||||
|
```
|
||||||
|
|
||||||
|
set up the client with access to the server using the previous client config
|
||||||
|
```bash
|
||||||
|
crossfire-client setup lib/client0.rktd
|
||||||
|
```
|
||||||
|
|
||||||
|
create a new project
|
||||||
|
```bash
|
||||||
|
crossfire-client new meow2
|
||||||
|
cd meow2
|
||||||
|
```
|
||||||
|
|
||||||
|
edit config `manifest.rktd`
|
||||||
|
- change `(mode stdio)` to `(mode callback)` (stdio mode isn't working yet)
|
||||||
|
- change `(command ...)` to `(command "./meow")`
|
||||||
|
|
||||||
|
generate files (Makefile, crossfire.c, crossfire.h -- these are support code for running your code
|
||||||
|
on agents. in callback mode, your code registers a callback with crossfire that gets called for each
|
||||||
|
possible input, and returns true or false)
|
||||||
|
```
|
||||||
|
crossfire-client generate
|
||||||
|
```
|
||||||
|
|
||||||
|
create a new source file `meow.c` with the following
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include "crossfire.h"
|
||||||
|
|
||||||
|
bool my_callback( vartype a,vartype b,vartype c,vartype d,vartype e,vartype f) {
|
||||||
|
return e == '4' && f == '2';
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
return crossfire_main(argc, argv, my_callback);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
update the makefile
|
||||||
|
```make
|
||||||
|
.PHONY: all clean
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-std=c11 -O3
|
||||||
|
LDFLAGS=-static
|
||||||
|
|
||||||
|
all: meow
|
||||||
|
|
||||||
|
meow: meow.o crossfire.o
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) meow meow.o
|
||||||
|
|
||||||
|
|
||||||
|
# crossfire rules
|
||||||
|
|
||||||
|
### leave this section alone
|
||||||
|
```
|
||||||
|
|
||||||
|
build project
|
||||||
|
```bash
|
||||||
|
make
|
||||||
|
```
|
||||||
|
|
||||||
|
now we're ready to submit
|
||||||
|
```bash
|
||||||
|
crossfire-client submit
|
||||||
|
```
|
||||||
|
|
||||||
|
check status of projects
|
||||||
|
```bash
|
||||||
|
crossfire-client status
|
||||||
|
```
|
||||||
|
|
||||||
|
this one completes pretty fast, so you should see 100% progress and one match
|
||||||
|
let's show the match (assuming the project ID from the status command is `1`)
|
||||||
|
```bash
|
||||||
|
crossfire-client show 1
|
||||||
|
```
|
||||||
|
|
||||||
|
aaaaand yeah that's all for now. smp is not supported yet. stdio mode is also not supported yet.
|
||||||
|
lots of stuff still probably broken tbh
|
||||||
|
contributions welcome,,,,
|
||||||
|
|
||||||
## status
|
## status
|
||||||
|
|
||||||
### base
|
### base
|
||||||
|
@ -40,7 +156,7 @@ takes the difficulty out of creating custom brute force jobs
|
||||||
- 🚧 codegen for input generator (in C)
|
- 🚧 codegen for input generator (in C)
|
||||||
- ✅ stdio mode
|
- ✅ stdio mode
|
||||||
- 🚧 callback mode
|
- 🚧 callback mode
|
||||||
- success reporting mechanism
|
- ✅ success reporting mechanism
|
||||||
- low priority: configurable "character" type -- currently a "character" is a uint64\_t
|
- low priority: configurable "character" type -- currently a "character" is a uint64\_t
|
||||||
|
|
||||||
### server: distribute jobs to workers
|
### server: distribute jobs to workers
|
||||||
|
@ -70,14 +186,18 @@ takes the difficulty out of creating custom brute force jobs
|
||||||
### client: submit jobs and view progress
|
### client: submit jobs and view progress
|
||||||
- ✅securely connect to server
|
- ✅securely connect to server
|
||||||
- command line interface
|
- command line interface
|
||||||
- `crossfire new`: create new crossfire project
|
- ✅ `crossfire new`: create new crossfire project
|
||||||
|
- ✅ `crossfire generate`: updates autogenerated files in a project
|
||||||
|
- ✅ `crossfire check`: checks some common misconfiguration issues
|
||||||
- `crossfire test`: test project locally, replicates configuration of server with single local
|
- `crossfire test`: test project locally, replicates configuration of server with single local
|
||||||
agent to debug issues
|
agent to debug issues
|
||||||
- low priority: `crossfire node-test`: submit a mini-task to a node that has the necessary
|
- low priority: `crossfire node-test`: submit a mini-task to a node that has the necessary
|
||||||
resources to debug issues
|
resources to debug issues
|
||||||
- `crossfire submit`: submit task to server
|
- ✅ `crossfire submit`: submit task to server
|
||||||
- `crossfire cancel`: cancels submitted task
|
- ✅ `crossfire delete`: cancels/deletes submitted task
|
||||||
- `crossfire status`: check status of task (or network as a whole)
|
- ✅ `crossfire status`: check status of server / task summary
|
||||||
|
- ✅ `crossfire show`: shows task details
|
||||||
|
- ✅ `crossfire setup`: sets up access to a server
|
||||||
- low priority: gui interface (racket/gui & framework time)
|
- low priority: gui interface (racket/gui & framework time)
|
||||||
|
|
||||||
## misc
|
## misc
|
||||||
|
|
|
@ -91,7 +91,7 @@
|
||||||
(void))
|
(void))
|
||||||
|
|
||||||
|
|
||||||
(define (cmd-update project-dir)
|
(define (cmd-generate project-dir)
|
||||||
(define priv-cache (build-path project-dir *cf-private-cache*))
|
(define priv-cache (build-path project-dir *cf-private-cache*))
|
||||||
(define mf (parse-manifest (call-with-input-file (build-path project-dir "manifest.rktd") read)))
|
(define mf (parse-manifest (call-with-input-file (build-path project-dir "manifest.rktd") read)))
|
||||||
(define new-files (generate-support-code mf))
|
(define new-files (generate-support-code mf))
|
||||||
|
@ -227,8 +227,8 @@
|
||||||
(apply report-status msg args)
|
(apply report-status msg args)
|
||||||
(exit 1))
|
(exit 1))
|
||||||
|
|
||||||
(define (interactive-update)
|
(define (interactive-generate)
|
||||||
(match (cmd-update (current-directory))
|
(match (cmd-generate (current-directory))
|
||||||
['() (report-status "generated files are up-to-date")]
|
['() (report-status "generated files are up-to-date")]
|
||||||
[(list msgs ...)
|
[(list msgs ...)
|
||||||
(for ([msg (in-list msgs)])
|
(for ([msg (in-list msgs)])
|
||||||
|
@ -285,9 +285,9 @@
|
||||||
(cmd-new project-name (string->symbol (flag-mode)))
|
(cmd-new project-name (string->symbol (flag-mode)))
|
||||||
(report-status "created new project ~a" project-name))
|
(report-status "created new project ~a" project-name))
|
||||||
|
|
||||||
(subcommand (update "Update generated files in a project")
|
(subcommand (generate "Update generated files in a project")
|
||||||
#:args ()
|
#:args ()
|
||||||
(interactive-update))
|
(interactive-generate))
|
||||||
|
|
||||||
(subcommand (check "Check over a project for issues")
|
(subcommand (check "Check over a project for issues")
|
||||||
#:args ()
|
#:args ()
|
||||||
|
@ -326,6 +326,8 @@
|
||||||
(define config
|
(define config
|
||||||
(call-with-input-file config-file read))
|
(call-with-input-file config-file read))
|
||||||
(cmd-setup config)
|
(cmd-setup config)
|
||||||
|
(report-status "testing server connection")
|
||||||
|
(cmd-status)
|
||||||
(report-status "successfully imported config")))
|
(report-status "successfully imported config")))
|
||||||
|
|
||||||
(define (print-usage)
|
(define (print-usage)
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
;; ok gamer move time
|
;; ok gamer move time
|
||||||
(define-runtime-path codegen-template "templates/codegen.rktc")
|
(define-runtime-path codegen-template "templates/codegen.rktc")
|
||||||
(define-runtime-path header-template "templates/header.rktc")
|
(define-runtime-path header-template "templates/header.rktc")
|
||||||
(define-runtime-path makefile-template "templates/Makefile.rkt")
|
(define-runtime-path makefile-template "templates/Makefile.rktmake")
|
||||||
(define-runtime-path manifest-template "templates/manifest.rktrktd")
|
(define-runtime-path manifest-template "templates/manifest.rktrktd")
|
||||||
|
|
||||||
;; TODO : make configurable
|
;; TODO : make configurable
|
||||||
|
|
|
@ -25,3 +25,6 @@
|
||||||
"north"))
|
"north"))
|
||||||
(define build-deps '("scribble-lib" "racket-doc" "rackunit-lib"))
|
(define build-deps '("scribble-lib" "racket-doc" "rackunit-lib"))
|
||||||
(define scribblings '(("scribblings/crossfire.scrbl" ())))
|
(define scribblings '(("scribblings/crossfire.scrbl" ())))
|
||||||
|
|
||||||
|
(define racket-launcher-names '("crossfire-server" "crossfire-client"))
|
||||||
|
(define racket-launcher-libraries '("server.rkt" "client.rkt"))
|
||||||
|
|
|
@ -891,7 +891,8 @@
|
||||||
;; create client if it doesn't exist yet
|
;; create client if it doesn't exist yet
|
||||||
(when (empty? (get-nodes 'client))
|
(when (empty? (get-nodes 'client))
|
||||||
(log-server-info "creating new client")
|
(log-server-info "creating new client")
|
||||||
(make-node "client0" "x-client" 'client '()))
|
(make-node "client0" "x-client" 'client '())
|
||||||
|
(void))
|
||||||
|
|
||||||
(define seckey (file->bytes *server-seckey-path*))
|
(define seckey (file->bytes *server-seckey-path*))
|
||||||
(define pubkey (crypto-sign-public-key seckey))
|
(define pubkey (crypto-sign-public-key seckey))
|
||||||
|
|
Loading…
Reference in New Issue