diff --git a/CMakeLists.txt b/CMakeLists.txt index e5a433f..76641fe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,11 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.14) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) project(cgproxy VERSION 0.16) + +include(GNUInstallDirs) + add_compile_options(-Wall -Wextra -Wpedantic -Wno-unused-result -Wno-unused-parameter) # for clangd @@ -12,8 +15,6 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(build_tools OFF) option(build_test OFF) -set(basic_permission OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - add_subdirectory(src) add_subdirectory(pack) if (build_tools) @@ -23,23 +24,19 @@ if (build_test) add_subdirectory(test) endif() -install(FILES cgproxyd DESTINATION /usr/bin PERMISSIONS ${basic_permission}) -install(FILES cgnoproxy DESTINATION /usr/bin PERMISSIONS ${basic_permission}) -install(FILES cgproxy.service DESTINATION /usr/lib/systemd/system/) -install(FILES config.json DESTINATION /etc/cgproxy/) -install(FILES cgroup-tproxy.sh DESTINATION /usr/share/cgproxy/scripts/ PERMISSIONS ${basic_permission}) -install(FILES readme.md DESTINATION /usr/share/doc/cgproxy/) +# instal scripts and other things +install(PROGRAMS cgproxyd TYPE BIN) +install(PROGRAMS cgnoproxy TYPE BIN) +install(PROGRAMS cgroup-tproxy.sh DESTINATION /usr/share/cgproxy/scripts/) +install(FILES cgproxy.service DESTINATION ${CMAKE_INSTALL_LIBDIR}/systemd/system/) +install(FILES config.json DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/cgproxy/) +install(FILES readme.md DESTINATION ${CMAKE_INSTALL_DOCDIR}/cgproxy/) # man pages -set(man_gz -${PROJECT_BINARY_DIR}/cgproxyd.1.gz -${PROJECT_BINARY_DIR}/cgproxy.1.gz -${PROJECT_BINARY_DIR}/cgnoproxy.1.gz -) -add_custom_target(man +set(man_gz ${PROJECT_SOURCE_DIR}/man/cgproxyd.1.gz ${PROJECT_SOURCE_DIR}/man/cgproxy.1.gz ${PROJECT_SOURCE_DIR}/man/cgnoproxy.1.gz) +add_custom_command(OUTPUT ${man_gz} COMMAND gzip -fk cgproxyd.1 cgproxy.1 cgnoproxy.1 - COMMAND mv *.gz ${PROJECT_BINARY_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/man ) -add_dependencies(main man) -install(FILES ${man_gz} DESTINATION /usr/share/man/man1/) +add_custom_target(man ALL DEPENDS ${man_gz}) +install(FILES ${man_gz} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1/) diff --git a/execsnoop-libbpf/Makefile b/execsnoop-libbpf/Makefile index 9e2909b..7203add 100644 --- a/execsnoop-libbpf/Makefile +++ b/execsnoop-libbpf/Makefile @@ -67,12 +67,12 @@ $(OUTPUT)/%.bpf.o: %.bpf.c $(LIBBPF_OBJ) $(wildcard %.h) vmlinux.h | $(OUTPUT) vmlinux.h: $(Q)$(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h -$(LIBBPF_OBJ): patch - $(Q)cd $(LIBBPF_DIR) && make DESTDIR=${OUTPUT} prefix=$(OUTPUT) install install_headers +$(LIBBPF_OBJ): + $(Q)cd $(LIBBPF_DIR) && make DESTDIR=${OUTPUT} prefix=$(OUTPUT) CPPFLAGS="-fPIC" install install_headers -patch: | $(LIBBPF_DIR)/Makefile - @echo "patching libbpf-fPIC.patch" - $(Q)cd libbpf/src && patch -p1 --forward -i ../../libbpf-fPIC.patch || true +# patch: | $(LIBBPF_DIR)/Makefile +# @echo "patching libbpf-fPIC.patch" +# $(Q)cd libbpf/src && patch -p1 --forward -i ../../libbpf-fPIC.patch || true # build libexecsnoop.so $(LIBSO): execsnoop_share.cpp $(OUTPUT)/execsnoop.skel.h $(LIBBPF_OBJ) $(COMMON_OBJ) | $(OUTPUT) diff --git a/readme.md b/readme.md index c6e50f8..c0c1208 100644 --- a/readme.md +++ b/readme.md @@ -55,8 +55,7 @@ Main feature: ## How to install ```bash -cd execsnoop-libbpf && make CFLAGS="-O2 -Wall -s" libexecsnoop.so -mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release .. && make install +mkdir build && cd build && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/ .. && make install ``` - It is alreay in [archlinux AUR](https://aur.archlinux.org/packages/?K=cgproxy). diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2cc975e..d9574b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,6 +10,14 @@ add_executable(main main.cpp target_link_libraries(main PRIVATE nlohmann_json::nlohmann_json Threads::Threads ${CMAKE_DL_LIBS}) set_target_properties(main PROPERTIES LINKER_LANGUAGE CXX) set_target_properties(main PROPERTIES OUTPUT_NAME cgproxy) +install(TARGETS main RUNTIME) -install(TARGETS main DESTINATION /usr/bin PERMISSIONS ${basic_permission}) -install(FILES ../execsnoop-libbpf/libexecsnoop.so DESTINATION /usr/lib/cgproxy/ PERMISSIONS ${basic_permission}) \ No newline at end of file +# execsnoop related +set(execsnoop ${PROJECT_SOURCE_DIR}/execsnoop-libbpf/libexecsnoop.so) +add_custom_command(OUTPUT ${execsnoop} +COMMAND make CFLAGS=\"-O2 -Wall -s -DNDEBUG\" libexecsnoop.so +WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/execsnoop-libbpf +BYPRODUCTS ${PROJECT_SOURCE_DIR}/execsnoop-libbpf/build +) +add_custom_target(execsnoop ALL DEPENDS ${execsnoop}) +install(PROGRAMS ${execsnoop} DESTINATION ${CMAKE_INSTALL_LIBDIR}/cgproxy/) \ No newline at end of file