diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml index 380abda..52ffbec 100644 --- a/.github/workflows/cmake.yml +++ b/.github/workflows/cmake.yml @@ -21,7 +21,10 @@ jobs: - name: Checkout submodules uses: actions/checkout@v3.3.0 with: - submodules: true + submodules: recursive + + - name: Install Dependencies + run: sudo apt install libcurl4-openssl-dev - name: Configure CMake # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. diff --git a/.gitmodules b/.gitmodules index 4071851..8af07bb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -3,3 +3,6 @@ url = ../../pybind/pybind11 branch = stable +[submodule "extern/DockerClient"] + path = extern/DockerClient + url = git@github.com:piotr-maker/DockerClient.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 033508b..d2eaafb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,11 +3,16 @@ cmake_minimum_required(VERSION 3.22) project(container-lib) set(CMAKE_CXX_STANDARD 17) -include_directories(include) -# add_library(container-lib src/container-lib.cpp src/cgroups.c) +#creates container-lib add_library(container-lib src/container-lib.cpp src/cgroups.cpp) add_executable(test_exec main.cpp) target_link_libraries(test_exec container-lib) +#creates docker-lib +#include_directories(include extern/DockerClient/include/ extern/DockerClient/rapidjson/include/) #этой строки быть не должно, костыль, чтобы собиралось +add_subdirectory(extern/DockerClient) +add_library(docker-lib src/docker-lib.cpp) + +#adds pybind add_subdirectory(extern/pybind11) -pybind11_add_module(container_lib_py src/wrapper.cpp src/container-lib.cpp src/cgroups.cpp) +pybind11_add_module(container_lib_py src/wrapper.cpp src/container-lib.cpp src/cgroups.cpp) \ No newline at end of file diff --git a/Readme.md b/Readme.md index 51d9617..2eb7573 100644 --- a/Readme.md +++ b/Readme.md @@ -3,6 +3,11 @@ system that smells *bebra* and gives rating for it ![alt text](https://media.istockphoto.com/id/182203609/ru/%D1%84%D0%BE%D1%82%D0%BE/%D0%BF%D0%B0%D0%BB%D0%B5%D1%86-%D0%B2%D0%B2%D0%B5%D1%80%D1%85.jpg?s=1024x1024&w=is&k=20&c=f1IwGeHj3E52Cmif8WhdDxL2qcnGGaJvQARQ43RiMIo=) testing jew +## Dependences +- [pybind11](https://github.com/pybind/pybind11) +- libcurl4-openssl-dev +- [Docker-Client](https://github.com/piotr-maker/DockerClient/tree/8af68f7b5d2283f766b3c2e8161ae423ec105aa3) + ## Features - our project :) - blackjack diff --git a/docker_test.cpp b/docker_test.cpp new file mode 100644 index 0000000..0dc0b1e --- /dev/null +++ b/docker_test.cpp @@ -0,0 +1,10 @@ +#include "docker-lib/docker-lib.hpp" +#include + +using namespace std; + +int main() { + DockerLib::container cont; + cont.init_container(); + return 0; +} diff --git a/extern/DockerClient b/extern/DockerClient new file mode 160000 index 0000000..8af68f7 --- /dev/null +++ b/extern/DockerClient @@ -0,0 +1 @@ +Subproject commit 8af68f7b5d2283f766b3c2e8161ae423ec105aa3 diff --git a/include/docker-lib/docker-lib.hpp b/include/docker-lib/docker-lib.hpp new file mode 100644 index 0000000..6621cb5 --- /dev/null +++ b/include/docker-lib/docker-lib.hpp @@ -0,0 +1,17 @@ +#include "docker-cpp/docker.h" +#include + +namespace DockerLib { + +class container { + private: + //void init_container(); + void delete_container(); + + public: + void init_container(); + void start(std::string path_to_program, std::string args); + std::string get_output(); +}; + +} // namespace DockerLib diff --git a/main.cpp b/main.cpp index 073dbf2..752e9da 100644 --- a/main.cpp +++ b/main.cpp @@ -2,7 +2,8 @@ int main(int argc, char *argv[]) { ContainerLib::Container cont; - cont.start(argv[1], {0, 0, 10, "test", 50000, "container-lib",0.1}, "", {}); + cont.start(argv[1], {0, 0, 10, "test", 50000, "container-lib", 0.1}, "", + {}); cont.sync("container-lib"); std::string str = cont.get_buf(); std::cout << std::endl << "OUTPUT:: " << str << std::endl; diff --git a/src/container-lib.cpp b/src/container-lib.cpp index 6e20154..825c8dc 100644 --- a/src/container-lib.cpp +++ b/src/container-lib.cpp @@ -2,7 +2,8 @@ #include "container-lib/cgroups.hpp" #include -void ContainerLib::Container::ptrace_process(launch_options options, std::set forbidden_syscalls) { +void ContainerLib::Container::ptrace_process( + launch_options options, std::set forbidden_syscalls) { int status, exit_status; waitpid(slave_proc, &status, 0); @@ -44,13 +45,13 @@ void ContainerLib::Container::ptrace_process(launch_options options, std::set forbidden_syscalls) { +void ContainerLib::Container::start(std::string path_to_binary, + launch_options options, std::string args, + std::set forbidden_syscalls) { std::random_device r; std::default_random_engine e(r()); std::uniform_int_distribution uniform_dist(0, 16); int coreCPU = uniform_dist(e); - init_cgroup(options.memory, options.cpu_usage, options.cgroup_id.c_str(), coreCPU); + init_cgroup(options.memory, options.cpu_usage, options.cgroup_id.c_str(), + coreCPU); pipe_init(); ptrace_proc = fork(); if (ptrace_proc != 0) { @@ -252,11 +256,13 @@ void ContainerLib::Container::start(std::string path_to_binary, launch_options o return; } else { close(pipe_for_exit_status[0]); - create_processes(std::move(path_to_binary), std::move(args), options, forbidden_syscalls); + create_processes(std::move(path_to_binary), std::move(args), options, + forbidden_syscalls); } } -ContainerLib::Container::ExitStatus ContainerLib::Container::sync(const char cgroup_id[20]) { +ContainerLib::Container::ExitStatus +ContainerLib::Container::sync(const char cgroup_id[20]) { int ptrace_status; waitpid(ptrace_proc, &ptrace_status, 0); ExitStatus status; @@ -270,7 +276,8 @@ ContainerLib::Container::ExitStatus ContainerLib::Container::sync(const char cgr void ContainerLib::Container::create_processes( std::string path_to_binary, std::string args, - ContainerLib::Container::launch_options options, std::set forbidden_syscalls) { + ContainerLib::Container::launch_options options, + std::set forbidden_syscalls) { slave_proc = fork(); if (slave_proc != 0) { ptrace_process(options, forbidden_syscalls); diff --git a/src/docker-lib.cpp b/src/docker-lib.cpp new file mode 100644 index 0000000..817d32d --- /dev/null +++ b/src/docker-lib.cpp @@ -0,0 +1,14 @@ +#include "docker-lib/docker-lib.hpp" + +void DockerLib::container::init_container() { + Docker client = Docker(); + /*JSON_DOCUMENT doc = client.list_containers(true); + std::cout << jsonToString(doc) << std::endl;*/ + std::cout << "HELLO, I`M DOCKER!" << std::endl; +} + +void DockerLib::container::delete_container() {} + +void DockerLib::container::start(std::string path_to_program, std::string args) {} + +std::string DockerLib::container::get_output() {return "";} \ No newline at end of file diff --git a/src/wrapper.cpp b/src/wrapper.cpp index c58b1d2..276b5c3 100644 --- a/src/wrapper.cpp +++ b/src/wrapper.cpp @@ -14,8 +14,8 @@ PYBIND11_MODULE(container_lib_py, m) { "starts containerization process. Launch options struct: int time " "- start time, int forks_amount - Amount of sub-processes, int " "forks_threshold - Maximum amount of sub-processes") - .def("get_buf", &Container::get_buf, "get buf"); - + .def("get_buf", &Container::get_buf, "get buf"); + py::enum_(container, "ExitStatus") .value("ok", Container::ExitStatus::ok) .value("compilation_error", Container::ExitStatus::compilation_error) @@ -44,5 +44,4 @@ PYBIND11_MODULE(container_lib_py, m) { .def_readwrite("memory", &Container::launch_options::memory) .def_readwrite("cgroup_id", &Container::launch_options::cgroup_id) .def_readwrite("input", &Container::launch_options::input); - }