From 73b2f7f3b5f7e6b5082cfdd84f7b8c44fc7ad656 Mon Sep 17 00:00:00 2001 From: dragonmuffin dragonmuffin Date: Mon, 5 May 2025 14:44:26 +0500 Subject: [PATCH] . --- .gitignore | 3 ++- Makefile | 22 +++++++++------------- proto | 2 +- starter/ns_exec.c | 9 +++------ starter/starter.c | 7 +++---- starter/starter.h | 1 + tests/transport_test | Bin 92024 -> 0 bytes tests/transport_test.c | 22 +++++++++++++--------- transport/transport | Bin 105840 -> 0 bytes transport/transport.c | 36 +++++++++++++++++++++++++++++++++++- 10 files changed, 67 insertions(+), 35 deletions(-) delete mode 100755 tests/transport_test delete mode 100755 transport/transport diff --git a/.gitignore b/.gitignore index 5f55502..7947d06 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,9 @@ /starter/alpine-make-rootfs/ /run /starter/shared -/starter/starter +/starter/starter.so /starter/minrootfs +/transport/transport /pkg/go/gen /gen /runs diff --git a/Makefile b/Makefile index 619d406..6f3a04e 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,11 @@ .PHONY: all clean install uninstall test PROTOBUF=/usr/include/ -STARTER=starter GEN=gen -SRCS=$(STARTER)/cgroup_prepare.c $(STARTER)/ns_exec.c $(STARTER)/util.c $(STARTER)/starter.c RUNS=runs PROTO_OUT=$(GEN)/google/protobuf/empty.pb-c.c $(GEN)/google/protobuf/empty.pb-c.h $(GEN)/google/protobuf/timestamp.pb-c.c $(GEN)/google/protobuf/timestamp.pb-c.h $(GEN)/google/protobuf/duration.pb-c.c $(GEN)/google/protobuf/duration.pb-c.h gen/runner/v1/runner.pb-c.c gen/runner/v1/runner.pb-c.c -all: $(STARTER)/alpine-make-rootfs $(STARTER)/minrootfs $(STARTER)/starter transport/transport $(RUNS) +all: starter/alpine-make-rootfs starter/minrootfs starter/starter.so transport/transport $(RUNS) $(GEN)/google/protobuf/empty.pb-c.c $(GEN)/google/protobuf/empty.pb-c.h $(GEN)/google/protobuf/timestamp.pb-c.c $(GEN)/google/protobuf/timestamp.pb-c.h $(GEN)/google/protobuf/duration.pb-c.c $(GEN)/google/protobuf/duration.pb-c.h $(GEN)/runner/v1/runner.pb-c.c $(GEN)/runner/v1/runner.pb-c.h $(GEN): mkdir -p $(GEN) @@ -21,23 +19,21 @@ $(GEN)/google/protobuf/timestamp.pb-c.c $(GEN)/google/protobuf/timestamp.pb-c.h: $(GEN)/google/protobuf/duration.pb-c.c $(GEN)/google/protobuf/duration.pb-c.h: $(PROTOBUF)/google/protobuf/duration.proto $(GEN) protoc --c_out=$(GEN) google/protobuf/duration.proto -I $(PROTOBUF) -gen/runner/v1/runner.pb-c.c gen/runner/v1/runner.pb-c.h: proto/runner/v1/runner.proto $(GEN) +$(GEN)/runner/v1/runner.pb-c.c $(GEN)/runner/v1/runner.pb-c.h: proto/runner/v1/runner.proto $(GEN) protoc --c_out=$(GEN) runner/v1/runner.proto -I proto -$(STARTER)/alpine-make-rootfs: +starter/alpine-make-rootfs: git clone https://github.com/alpinelinux/alpine-make-rootfs starter/alpine-make-rootfs -$(STARTER)/minrootfs: $(STARTER)/create_rootfs.sh - $(STARTER)/create_rootfs.sh +starter/minrootfs: starter/create_rootfs.sh + starter/create_rootfs.sh -$(STARTER)/starter: $(PROTO) $(STARTER)/starter.c $(STARTER)/cgroup_prepare.c $(STARTER)/ns_exec.c Makefile - #$(CC) -shared -o $(STARTER)/starter $(SRCS) -g -fsanitize=address -fsanitize=leak -fno-omit-frame-pointer -lrabbitmq -lprotobuf-c -I gen - $(CC) -fPIC -shared -o $(STARTER)/starter $(SRCS) -lrabbitmq -lprotobuf-c -I gen - #$(CC) $(STARTER)/starter.c -o $(STARTER)/starter +starter/starter.so: $(PROTO) starter/starter.c starter/cgroup_prepare.c starter/ns_exec.c starter/util.c + $(CC) -fPIC -shared -o starter/starter.so $^ -lrabbitmq -lprotobuf-c -I gen -transport/transport: $(PROTO) transport/utils.c transport/transport.c transport/transport.h - $(CC) -o $@ gen/runner/v1/runner.pb-c.c transport/utils.c transport/transport.c -I . -I gen -lrabbitmq -lprotobuf-c -g -fsanitize=address -fsanitize=leak -fno-omit-frame-pointer +transport/transport: $(PROTO) transport/utils.c transport/transport.c transport/transport.h starter/starter.so + $(CC) -o $@ gen/runner/v1/runner.pb-c.c transport/utils.c transport/transport.c starter/starter.so -I . -I starter -I gen -lrabbitmq -lprotobuf-c -lcurl -fsanitize=address -g $(RUNS): mkdir $(RUNS) diff --git a/proto b/proto index 360832a..1138a54 160000 --- a/proto +++ b/proto @@ -1 +1 @@ -Subproject commit 360832a5ab10821a76b7df5e23950e217f2c5221 +Subproject commit 1138a5406c554ec29059da2da2a16eb001cc7b36 diff --git a/starter/ns_exec.c b/starter/ns_exec.c index 5e2008c..df56da2 100644 --- a/starter/ns_exec.c +++ b/starter/ns_exec.c @@ -9,14 +9,12 @@ void procfs_prepare() #define hostname "runner" #define put_old "oldfs" -void mnt_prepare(char* rootfs, char* shared_mountpoint) { - char* shared_folder = NULL; - asprintf(&shared_folder, "../%s", shared_mountpoint); +void mnt_prepare(char* rootfs, char* shared_folder) { if (mount(rootfs, rootfs, "ext4", MS_BIND,"")) die("failed to mount %s: %m", rootfs); if (chdir(rootfs)) die("falied to cd:%m"); //if (mount("/sys","sys","sysfs",0,"")) die("failed to mount sysfs: %m"); //if (mount("/dev","dev","udev",0,"")) die("failed to mount: %m"); - if (mkdir("shared", 0777) && errno != EEXIST) die("Failed to mkdir %s: %m\n", shared_mountpoint); + if (mkdir("shared", 0777) && errno != EEXIST) die("Failed to mkdir: %m\n"); if (mount(shared_folder, "shared", "ext4", MS_BIND, "")) die("failed to mount shared folder: %m"); if (mkdir(put_old, 0000) && errno != EEXIST) die("Failed to mkdir %s: %m\n", put_old); if (syscall(SYS_pivot_root, ".", put_old)) die("Failed to pivot_root from %s to %s: %m\n", rootfs, put_old); @@ -24,7 +22,6 @@ void mnt_prepare(char* rootfs, char* shared_mountpoint) { procfs_prepare(); if (umount2(put_old, MNT_DETACH)) die("Failed to umount put_old %s: %m\n", put_old); if (rmdir(put_old)) die("Failed to rmdir: %m"); - free(shared_folder); } void ro_fs(char* shared_mountpoint) { char* shared_folder = malloc(strlen(shared_mountpoint)+4); @@ -69,7 +66,7 @@ int nsrun(void* arg) { char* env[]={ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "PWD=/", - NULL, + (char*)0, }; if (execve(cmd, argv, env) == -1) die("failed to exec,%m"); return 1;// removes warning diff --git a/starter/starter.c b/starter/starter.c index 771fa14..bd54b2e 100644 --- a/starter/starter.c +++ b/starter/starter.c @@ -48,13 +48,12 @@ static void prepare_userns(int pid) { write_file(path, line); } -int starter(char* working_path, struct limits limits, struct params params) { +int starter(char* shared_folder, char* minrootfs_path, struct limits limits, struct params params) { + puts("starter started"); if(setuid(0)) die("must be run as root"); if(setgid(0)) die("must be run as root"); // get binary path - char* real_path=working_path; - //get_real_path(real_path, argv[0]); - if(chdir(real_path)) die("unable to chdir to binary path: %m"); + if(chdir(minrootfs_path)) die("unable to chdir: %m"); // set random seed srand(time(NULL)); // setup parameters diff --git a/starter/starter.h b/starter/starter.h index 953d613..acbf732 100644 --- a/starter/starter.h +++ b/starter/starter.h @@ -51,3 +51,4 @@ extern void await_setup(int pipe); extern int nsrun(void* arg); extern void die_func(const char *fmt, ...); extern void write_file(char* path, char* line); +extern int starter(char* shared_folder, char* minrootfs_path, struct limits limits, struct params params); diff --git a/tests/transport_test b/tests/transport_test deleted file mode 100755 index 1e558e630b8b0a57544864ce36f6d7424c0a43f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92024 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 sm$}?)A^^~CHbE)MoaSlA43t=CIA2c diff --git a/tests/transport_test.c b/tests/transport_test.c index b8f73f3..7e52c2c 100644 --- a/tests/transport_test.c +++ b/tests/transport_test.c @@ -51,12 +51,13 @@ void send_to_rbmq(struct connection_data condata, char const* msg) amqp_basic_publish(condata.conn, 1, amqp_cstring_bytes(condata.exchange), amqp_cstring_bytes(condata.routingkey), 0, 0, &props, amqp_cstring_bytes(msg)), "Publishing"; } -void build_serialize(int32_t solution_id, char* binding_key, int32_t language, char* solution, void** buf) { +void build_serialize(int32_t solution_id, char* binding_key, int32_t language, char* solution_uri, char* executable_uri, void** buf) { struct Runner__V1__Build build = RUNNER__V1__BUILD__INIT; - build.solution_id = solution_id; - build.binding_key = binding_key; - build.language = language; - build.solution = solution; + build.solution_id = solution_id; + build.binding_key = binding_key; + build.language = language; + build.solution_uri = solution_uri; + build.executable_uri = executable_uri; struct Runner__V1__Instruction inst = RUNNER__V1__INSTRUCTION__INIT; inst.instruction_case = RUNNER__V1__INSTRUCTION__INSTRUCTION_BUILD; @@ -91,11 +92,14 @@ int main(int argc, char const *const *argv) { void *messagebody; char* binding_key; asprintf(&binding_key,"bktest"); - char* solution; - asprintf(&solution,"soltest"); - build_serialize(0,binding_key,1,solution,&messagebody); + char* solution_uri; + asprintf(&solution_uri,"http://localhost/code.cpp"); + char* executable_uri; + asprintf(&executable_uri,"http://localhost/executable"); + build_serialize(0,binding_key,1,solution_uri, executable_uri, &messagebody); free(binding_key); - free(solution); + free(solution_uri); + free(executable_uri); send_to_rbmq(condata,messagebody); free(messagebody); diff --git a/transport/transport b/transport/transport deleted file mode 100755 index 2f424e266514ba0061ccc68b4304dc31d3805e0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105840 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 Z5I<6{oMT!ww)`ER)R?~zDG)hT{~w@!DbD}^ diff --git a/transport/transport.c b/transport/transport.c index 680607d..65c8844 100644 --- a/transport/transport.c +++ b/transport/transport.c @@ -1,5 +1,6 @@ #include "transport/transport.h" #include "starter/starter.h" +#include "curl/curl.h" void prepare_amqp_connection(int argc, char const *const *argv,struct connection_data *condata) { int status; @@ -45,7 +46,27 @@ void prepare_amqp_connection(int argc, char const *const *argv,struct connection amqp_assert(amqp_get_rpc_reply(condata->conn)); } +void download_file(char* uri, char* path) { + FILE* f = fopen(path, "w"); + //fwrite("test", 4,1,f); + CURL *handle; + handle = curl_easy_init(); + curl_easy_setopt(handle, CURLOPT_URL, uri); + curl_easy_setopt(handle, CURLOPT_WRITEDATA, f); + CURLcode code = curl_easy_perform(handle); + if(code==CURLE_OK) { + int response_code; + curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, &response_code); + printf("response code:%d", response_code); + } else {puts("not success");} + sleep(1); + //puts(res); + curl_easy_cleanup(handle); + fclose(f); +} + int main(int argc, char const *const *argv) { + curl_global_init (CURL_GLOBAL_ALL); struct connection_data condata; prepare_amqp_connection(argc,argv,&condata); @@ -70,7 +91,20 @@ int main(int argc, char const *const *argv) { switch(inst->instruction_case) { case RUNNER__V1__INSTRUCTION__INSTRUCTION_BUILD: puts("build request recieved"); - printf("solution_id: %d\nbinding_key:%s\nlanguage:%d\nsolution:%s\n\n",inst->build->solution_id,inst->build->binding_key,inst->build->language,inst->build->solution); + printf("solution_id: %d\nbinding_key:%s\nlanguage:%d\nsolution uri:%s\nexecutable uri: %s\n\n",inst->build->solution_id,inst->build->binding_key,inst->build->language,inst->build->solution_uri, inst->build->executable_uri); + download_file(inst->build->solution_uri, "/home/dragonmuffin/ms-runner/runs/solution"); + //struct limits limits; + //limits.memory = 10000000; + //limits.core = 2; + //limits.time = 3000; + //limits.processes = 1; + + //struct params params; + //params.shared_folder = "/home/dragonmuffin/ms-runner/runs/"; + //params.argv = (char*[]){"/bin/ls", "/", NULL}; + + //starter("/home/dragonmuffin/ms-runner/runs", "/home/dragonmuffin/ms-runner/starter", limits, params); // fix this + break; case RUNNER__V1__INSTRUCTION__INSTRUCTION_RUN: puts("run request recieved");