diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6d5206b --- /dev/null +++ b/.gitignore @@ -0,0 +1,52 @@ +# Prerequisites +*.d + +# Object files +*.o +*.ko +*.obj +*.elf + +# Linker output +*.ilk +*.map +*.exp + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + +# Debug files +*.dSYM/ +*.su +*.idb +*.pdb + +# Kernel Module Compile Results +*.mod* +*.cmd +.tmp_versions/ +modules.order +Module.symvers +Mkfile.old +dkms.conf \ No newline at end of file diff --git a/Makefile b/Makefile index 49e0ae7..37451f4 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,114 @@ -SUBDIRS = libmysyslog libmysyslog-text libmysyslog-json libmysyslog-client libmysyslog-daemon +# Определяем переменные для исходных файлов +LIB_DIR = libmysyslog +CLIENT_DIR = libmysyslog-client +DAEMON_DIR = libmysyslog-daemon +JSON_DIR = libmysyslog-json +TEXT_DIR = libmysyslog-text -all: - @for dir in $(SUBDIRS); do \ - $(MAKE) -C $$dir; \ - done +LIB_SOURCE = $(LIB_DIR)/libmysyslog.c +JSON_SOURCE = $(JSON_DIR)/libmysyslog-json.c +TEXT_SOURCE = $(TEXT_DIR)/libmysyslog-text.c +CLIENT_SOURCE = $(CLIENT_DIR)/libmysyslog-client.c +DAEMON_SOURCE = $(DAEMON_DIR)/libmysyslog-daemon.c +# Пути для unit-файла systemd и переменные пакетов +UNIT_FILE = /etc/systemd/system/libmysyslog-daemon.service + +version = 1.0 +revision = 0 +architecture = all + +all: build_lib build_apps deb + @echo "\nСборка завершена. Используйте:\n" + @echo " make systemd_unit_file # Создание systemd unit-файла" + @echo " make astra_repo # Создание локального репозитория" + +# Сборка библиотек +build_lib: + @cc $(LIB_SOURCE) -shared -o $(LIB_DIR)/libmysyslog.so + @cc $(JSON_SOURCE) -shared -o $(JSON_DIR)/libmysyslog-json.so + @cc $(TEXT_SOURCE) -shared -o $(TEXT_DIR)/libmysyslog-text.so + +# Сборка клиентского приложения и демона +build_apps: + @cc $(CLIENT_SOURCE) -o log_client -L$(LIB_DIR) -lmysyslog + @cc $(DAEMON_SOURCE) -o log_daemon -L$(LIB_DIR) -lmysyslog + +# Генерация systemd unit-файла +systemd_unit_file: + @touch $(UNIT_FILE) + @chmod 664 $(UNIT_FILE) + @echo "[Unit]" >> $(UNIT_FILE) + @echo "Description=Daemon for logging with libmysyslog" >> $(UNIT_FILE) + @echo "[Service]" >> $(UNIT_FILE) + @echo "ExecStart=/usr/local/bin/log_daemon" >> $(UNIT_FILE) + @echo "Type=forking" >> $(UNIT_FILE) + @echo "PIDFile=/run/libmysyslog-daemon.pid" >> $(UNIT_FILE) + @echo "[Install]" >> $(UNIT_FILE) + @echo "WantedBy=multi-user.target" >> $(UNIT_FILE) + +# Создание пакетов .deb +deb: deb_client deb_daemon deb_lib + @rm -fr MySyslog_client_${version}-${revision}_${architecture} + @rm -fr MySyslog_daemon_${version}-${revision}_${architecture} + @rm -fr MySyslog_library_${version}-${revision}_${architecture} + +deb_client: + @mkdir -p MySyslog_client_${version}-${revision}_${architecture}/DEBIAN + @touch MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + + @echo "Package: mysyslog-client" >> MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Version: $(version)" >> MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Architecture: $(architecture)" >> MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Maintainer: gandc " >> MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Description: Client for libmysyslog logging system" >> MySyslog_client_${version}-${revision}_${architecture}/DEBIAN/control + + @mkdir -p MySyslog_client_${version}-${revision}_${architecture}/usr/local/bin + @cp log_client MySyslog_client_${version}-${revision}_${architecture}/usr/local/bin + @dpkg-deb --root-owner-group --build MySyslog_client_${version}-${revision}_${architecture} + +deb_daemon: + @mkdir -p MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN + @touch MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + + @echo "Package: mysyslog-daemon" >> MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Version: $(version)" >> MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Architecture: $(architecture)" >> MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Maintainer: gandc " >> MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Description: Daemon for libmysyslog logging system" >> MySyslog_daemon_${version}-${revision}_${architecture}/DEBIAN/control + + @mkdir -p MySyslog_daemon_${version}-${revision}_${architecture}/usr/local/bin + @cp log_daemon MySyslog_daemon_${version}-${revision}_${architecture}/usr/local/bin + @dpkg-deb --root-owner-group --build MySyslog_daemon_${version}-${revision}_${architecture} + +deb_lib: + @mkdir -p MySyslog_library_${version}-${revision}_${architecture}/DEBIAN + @touch MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + + @echo "Package: libmysyslog" >> MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Version: $(version)" >> MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Architecture: $(architecture)" >> MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Maintainer: gandc " >> MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + @echo "Description: Core library for mysyslog logging" >> MySyslog_library_${version}-${revision}_${architecture}/DEBIAN/control + + @mkdir -p MySyslog_library_${version}-${revision}_${architecture}/usr/local/lib + @mkdir -p MySyslog_library_${version}-${revision}_${architecture}/usr/local/include + @cp $(LIB_DIR)/libmysyslog.so MySyslog_library_${version}-${revision}_${architecture}/usr/local/lib + @cp $(LIB_DIR)/libmysyslog.h MySyslog_library_${version}-${revision}_${architecture}/usr/local/include + @dpkg-deb --root-owner-group --build MySyslog_library_${version}-${revision}_${architecture} + +# Создание локального репозитория APT +astra_repo: + @mkdir -p /usr/local/repos + @cp *.deb /usr/local/repos + @dpkg-scanpackages /usr/local/repos /dev/null | gzip -9c > /usr/local/repos/Packages.gz + @echo "deb [trusted=yes] file:/usr/local/repos ./" > /etc/apt/sources.list.d/mysyslog.list + @sudo apt-get update + +# Очистка временных файлов clean: - @for dir in $(SUBDIRS); do \ - $(MAKE) -C $$dir clean; \ - done - -.PHONY: all clean \ No newline at end of file + @rm -f $(LIB_DIR)/libmysyslog.so $(JSON_DIR)/libmysyslog-json.so $(TEXT_DIR)/libmysyslog-text.so + @rm -f log_client log_daemon + @rm -fr MySyslog_client_${version}-${revision}_${architecture}* + @rm -fr MySyslog_daemon_${version}-${revision}_${architecture}* + @rm -fr MySyslog_library_${version}-${revision}_${architecture}* diff --git a/mysyslog-daemon/Makefile b/mysyslog-daemon/Makefile index 79c1b61..5319824 100644 --- a/mysyslog-daemon/Makefile +++ b/mysyslog-daemon/Makefile @@ -1,16 +1,17 @@ CC = gcc -CFLAGS = -Wall -g -LDFLAGS = -lm +CFLAGS = -Wall -Wextra -I../libmysyslog +LDFLAGS = -L../libmysyslog -lmysyslog +TARGET = libmysyslog-daemon -LIBS = -lmysyslog -lmysyslog-text -lmysyslog-json +all: $(TARGET) -all: mysyslog-daemon +$(TARGET): libmysyslog-daemon.o + $(CC) -o $(TARGET) libmysyslog-daemon.o $(LDFLAGS) -mysyslog-daemon: src/mysyslog-daemon.o -$(CC) -o $@ $^ $(LIBS) +libmysyslog-daemon.o: libmysyslog-daemon.c + $(CC) $(CFLAGS) -c libmysyslog-daemon.c -clean: rm -f src/*.o mysyslog-daemon +clean: + rm -f $(TARGET) *.o -deb: # Deb package building logic - -.PHONY: all clean deb \ No newline at end of file +.PHONY: all clean \ No newline at end of file diff --git a/mysyslog-daemon/libmysyslog-daemon.c b/mysyslog-daemon/libmysyslog-daemon.c new file mode 100644 index 0000000..902971d --- /dev/null +++ b/mysyslog-daemon/libmysyslog-daemon.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include "libmysyslog.h" + +#define CONFIG_PATH "/etc/mysyslog/mysyslog.cfg" + +static volatile int keepRunning = 1; + +void intHandler(int dummy) { + keepRunning = 0; +} + +void read_config(const char* path, int* level, int* driver, int* format, char* log_path) { + FILE* file = fopen(path, "r"); + if (!file) { + fprintf(stderr, "Could not open config file: %s\n", path); + exit(EXIT_FAILURE); + } + + fscanf(file, "level=%d\n", level); + fscanf(file, "driver=%d\n", driver); + fscanf(file, "format=%d\n", format); + fscanf(file, "path=%s\n", log_path); + fclose(file); +} + +int main() { + signal(SIGINT, intHandler); + signal(SIGTERM, intHandler); + + int level, driver, format; + char log_path[256]; + + read_config(CONFIG_PATH, &level, &driver, &format, log_path); + + while (keepRunning) { + mysyslog("Daemon log message", level, driver, format, log_path); + sleep(5); // Log every 5 seconds + } + + return 0; +} \ No newline at end of file diff --git a/mysyslog-daemon/mysyslog.cfg b/mysyslog-daemon/mysyslog.cfg new file mode 100644 index 0000000..898c676 --- /dev/null +++ b/mysyslog-daemon/mysyslog.cfg @@ -0,0 +1,4 @@ +level=1 +driver=0 +format=0 +path=/var/log/mysyslog.log \ No newline at end of file diff --git a/mysyslog-daemon/src/mysyslog-daemon.c b/mysyslog-daemon/src/mysyslog-daemon.c deleted file mode 100644 index 139d561..0000000 --- a/mysyslog-daemon/src/mysyslog-daemon.c +++ /dev/null @@ -1,27 +0,0 @@ -#include -#include -#include -#include -#include "mysyslog.h" - -static volatile int keep_running = 1; - -void int_handler(int dummy) { - keep_running = 0; -} - -int main() { - signal(SIGINT, int_handler); - signal(SIGTERM, int_handler); - - const char* path = "/var/log/mysyslog.log"; - int driver = 1; // Default to text driver - int format = 1; // Default to text format - - while (keep_running) { - mysyslog("Daemon log message", INFO, driver, format, path); - sleep(60); // Log every minute - } - - return 0; -}