diff --git a/Makefile b/Makefile index 4cb2b64..25e96fd 100644 --- a/Makefile +++ b/Makefile @@ -1,107 +1,31 @@ -CC = gcc -PKG_CONFIG = pkg-config -CONFIG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libconfig) -CONFIG_LDFLAGS := $(shell $(PKG_CONFIG) --libs libconfig) - -CFLAGS = -Wall -O2 -Ilibmysyslog $(CONFIG_CFLAGS) -LDFLAGS = -L$(BUILD_DIR) -lmysyslog $(CONFIG_LDFLAGS) - -BUILD_DIR = build - -LIB_SRC = libmysyslog/libmysyslog.c -LIB_OBJ = $(BUILD_DIR)/libmysyslog.o -LIB_A = $(BUILD_DIR)/libmysyslog.a - -CLIENT_DIR := myRPC-client/src -CLIENT_SRC := $(CLIENT_DIR)/myRPC-client.c -CLIENT_OBJ := $(BUILD_DIR)/myRPC-client.o -CLIENT_BIN := $(BUILD_DIR)/myRPC-client - -SERVER_DIR := myRPC-server/src -SERVER_SRC := $(SERVER_DIR)/myRPC-server.c -SERVER_OBJ := $(BUILD_DIR)/myRPC-server.o -SERVER_BIN := $(BUILD_DIR)/myRPC-server - -version = 1.0 -revision = 0 -architecture = all - .PHONY: all clean deb repo systemd_install -all: $(BUILD_DIR) $(LIB_A) $(CLIENT_BIN) $(SERVER_BIN) - -$(BUILD_DIR): - mkdir -p $(BUILD_DIR) - -$(LIB_OBJ): $(LIB_SRC) | $(BUILD_DIR) - $(CC) $(CFLAGS) -fPIC -c $< -o $@ - -$(LIB_A): $(LIB_OBJ) - ar rcs $@ $^ - -$(CLIENT_OBJ): $(CLIENT_SRC) | $(BUILD_DIR) - $(CC) $(CFLAGS) -c $< -o $@ - -$(CLIENT_BIN): $(CLIENT_OBJ) - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) - -$(SERVER_OBJ): $(SERVER_SRC) | $(BUILD_DIR) - $(CC) $(CFLAGS) -c $< -o $@ - -$(SERVER_BIN): $(SERVER_OBJ) - $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) - -############################################################################### -# Создание deb-пакетов -############################################################################### - -deb: deb_client deb_server - @rm -rf MyRPC_client_$(version)-$(revision)_$(architecture) - @rm -rf MyRPC_server_$(version)-$(revision)_$(architecture) - -deb_client: - @mkdir -p MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN - @printf "Package: myrpc-client\nVersion: $(version)\nArchitecture: $(architecture)\nMaintainer: gandc \nDescription: Client for remote command execution via myRPC\n" > MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN/control - @mkdir -p MyRPC_client_$(version)-$(revision)_$(architecture)/usr/local/bin - @cp $(CLIENT_BIN) MyRPC_client_$(version)-$(revision)_$(architecture)/usr/local/bin - @dpkg-deb --root-owner-group --build MyRPC_client_$(version)-$(revision)_$(architecture) - -deb_server: - @mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN - @printf "Package: myrpc-server\nVersion: $(version)\nArchitecture: $(architecture)\nMaintainer: gandc \nDescription: Server for remote command execution via myRPC\n" > MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/control - @mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/usr/local/bin - @cp $(SERVER_BIN) MyRPC_server_$(version)-$(revision)_$(architecture)/usr/local/bin - @mkdir -p MyRPC_server_$(version)-$(revision)_$(architecture)/lib/systemd/system - @cp systemd/myrpc-server.service MyRPC_server_$(version)-$(revision)_$(architecture)/lib/systemd/system - @printf "#!/bin/sh\nsystemctl daemon-reload\n" > MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/postinst - @chmod 755 MyRPC_server_$(version)-$(revision)_$(architecture)/DEBIAN/postinst - @dpkg-deb --root-owner-group --build MyRPC_server_$(version)-$(revision)_$(architecture) - -############################################################################### -# Создание локального репозитория APT -############################################################################### - -repo: - @mkdir -p /usr/local/repos - @cp *.deb /usr/local/repos - @cd /usr/local/repos && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz - @echo "deb [trusted=yes] file:/usr/local/repos ./" | sudo tee /etc/apt/sources.list.d/myrpc.list - @sudo apt-get update - -############################################################################### -# Установка systemd unit-файла -############################################################################### - -systemd_install: - @echo "Installing systemd unit for myrpc-server..." - @sudo cp systemd/myrpc-server.service /etc/systemd/system/ - @sudo systemctl daemon-reload - @echo "Done. You can now sudo systemctl enable myrpc-server && sudo systemctl start myrpc-server" - -############################################################################### -# Очистка -############################################################################### +all: clean + $(MAKE) -C libmysyslog all + $(MAKE) -C myRPC-client all + $(MAKE) -C myRPC-server all clean: - rm -rf $(BUILD_DIR) - rm -f *.deb \ No newline at end of file + $(MAKE) -C libmysyslog clean + $(MAKE) -C myRPC-client clean + $(MAKE) -C myRPC-server clean + rm -f *.deb + +deb: all + $(MAKE) -C libmysyslog deb + $(MAKE) -C myRPC-client deb + $(MAKE) -C myRPC-server deb + mv libmysyslog/*.deb . + mv myRPC-client/*.deb . + mv myRPC-server/*.deb . + +repo: deb + mkdir -p /usr/local/repos + cp *.deb /usr/local/repos + cd /usr/local/repos && dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz + echo "deb [trusted=yes] file:/usr/local/repos ./" | sudo tee /etc/apt/sources.list.d/myrpc.list + sudo apt-get update + +systemd_install: + sudo cp systemd/myrpc-server.service /etc/systemd/system/ + sudo systemctl daemon-reload \ No newline at end of file diff --git a/README.md b/README.md index 2ea1a48..442ec33 100644 --- a/README.md +++ b/README.md @@ -10,16 +10,19 @@ myRPC/ ├── libmysyslog/ │ ├── Makefile +│ ├── README.md │ ├── libmysyslog.c │ └── libmysyslog.h ├── systemd/ │ └── myrpc-server.service ├── myRPC-client/ │ ├── Makefile +│ ├── README.md │ └── src/ │ └── myRPC-client.c ├── myRPC-server │ ├── Makefile +│ ├── README.md │ └── src/ │ └── myRPC-server.c └── Makefile @@ -39,10 +42,18 @@ myRPC/ make all ``` -Сборка производится в директории `build`. Там же будут размещены исполняемые файлы: +Сборка производится в директории соответствующих подпроектам дирректориях. Там же будут размещены исполняемые файлы: -- `build/myRPC-client` -- `build/myRPC-server` +- `myRPC-client/myRPC-client` +- `myRPC-server/myRPC-server` + +### Подлючение библиотеки проекта + +1. При работе на локальном машине, требуется подключить библиотеку `libmysyslog` для работоспособности проекта. +2. Выполните следующую команду: +```sh +export LD_LIBRARY_PATH=/home/user/myRPC/libmysyslog:$LD_LIBRARY_PATH +``` ## Использование @@ -69,19 +80,19 @@ make all Запустите сервер: ```bash -sudo ./build/myRPC-server +sudo myRPC-server ``` ### Использование клиента ```bash -./build/myRPC-client -h <адрес_сервера> -p <порт> -s -c "команда bash" +myRPC-client -h <адрес_сервера> -p <порт> -s -c "команда bash" ``` Пример: ```bash -./build/myRPC-client -h 127.0.0.1 -p 1234 -s -c "ls -la" +myRPC-client -h 127.0.0.1 -p 1234 -s -c "ls -la" ``` ## Создание deb-пакетов diff --git a/myRPC-client/Makefile b/myRPC-client/Makefile index 6463bd2..f3f7dc2 100644 --- a/myRPC-client/Makefile +++ b/myRPC-client/Makefile @@ -9,9 +9,9 @@ SRC := src/myRPC-client.c OBJ := myRPC-client.o BIN := myRPC-client -version := 1.0 -revision := 0 -architecture := all +version := 1.0 +revision := 0 +architecture := all .PHONY: all clean deb @@ -27,10 +27,10 @@ $(OBJ): $(SRC) $(BIN): $(OBJ) $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -deb: deb_client +deb: deb_client all @rm -rf MyRPC_client_$(version)-$(revision)_$(architecture) -deb_client: +deb_client: mkdir -p MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN printf "Package: myrpc-client\nVersion: $(version)\nArchitecture: $(architecture)\nDepends: libmysyslog\nMaintainer: gandc \nDescription: Client for remote command execution via myRPC\n" \ > MyRPC_client_$(version)-$(revision)_$(architecture)/DEBIAN/control diff --git a/myRPC-client/README.md b/myRPC-client/README.md new file mode 100644 index 0000000..5a4f0c0 --- /dev/null +++ b/myRPC-client/README.md @@ -0,0 +1,25 @@ +Консольная утилита для отправки команд на удалённый myRPC-сервер. + +## Сборка + +```bash +cd myRPC-client +make all +``` + +В результате появится исполняемый файл `myRPC-client`. + +## Использование + +```bash +./myRPC-client -s|--stream | -d|--dgram \ + -h \ + -p <порт> \ + -c|--command "bash команда" +``` + +Примеры: +```bash +./myRPC-client -s -h 192.168.0.10 -p 1234 -c "ls -la /tmp" +./myRPC-client --dgram --host 10.0.0.5 --port 4321 --command "df -h" +``` \ No newline at end of file diff --git a/myRPC-server/Makefile b/myRPC-server/Makefile index 48bc016..8485b28 100644 --- a/myRPC-server/Makefile +++ b/myRPC-server/Makefile @@ -4,12 +4,10 @@ PKG_CONFIG := pkg-config CONFIG_CFLAGS := $(shell $(PKG_CONFIG) --cflags libconfig) CONFIG_LDFLAGS := $(shell $(PKG_CONFIG) --libs libconfig) -#LIBDIR := ../libmysyslog +LIBDIR := ../libmysyslog -CFLAGS := -Wall -O2 -#-Wall -O2 -I$(LIBDIR) $(CONFIG_CFLAGS) -LDFLAGS := -#-L$(LIBDIR) -lmysyslog $(CONFIG_LDFLAGS) +CFLAGS := -Wall -O2 -I$(LIBDIR) $(CONFIG_CFLAGS) +LDFLAGS := -L$(LIBDIR) -lmysyslog $(CONFIG_LDFLAGS) SRC := src/myRPC-server.c OBJ := myRPC-server.o @@ -39,7 +37,7 @@ $(BIN): $(OBJ) # deb ############################################################################### -deb: deb_server +deb: deb_server all @rm -rf MyRPC_server_$(version)-$(revision)_$(architecture) deb_server: diff --git a/myRPC-server/README.md b/myRPC-server/README.md new file mode 100644 index 0000000..e7a14fe --- /dev/null +++ b/myRPC-server/README.md @@ -0,0 +1,57 @@ +Служба-демон для удалённого выполнения команд по протоколу myRPC. + +## Зависимости + +- GCC (gcc) +- libconfig (`libconfig-dev`) +- libmysyslog (собирается в подпроекте `libmysyslog`) +- pkg-config + +Установите зависимости: +```bash +sudo apt-get update +sudo apt-get install -y gcc make libconfig-dev pkg-config +``` + +## Сборка + +```bash +cd myRPC-server +make all +``` + +- Соберётся бинарник `myRPC-server` в текущей папке. +- Он автоматически требует, чтобы в соседней папке `../libmysyslog` уже была собрана библиотека `libmysyslog.a` или `.so`. Если не собрана, запустите там `make all`. + +## Настройка + +1. Создайте каталог `/etc/myRPC`: + ```bash + sudo mkdir -p /etc/myRPC + ``` +2. Файл `/etc/myRPC/myRPC.conf`: + ```conf + port = 1234; + socket_type = "stream"; # stream или dgram + ``` +3. Файл `/etc/myRPC/users.conf` — список разрешённых пользователей, по одному на строку: + ``` + alice + bob + ``` + +## Запуск +```bash +sudo ./myRPC-server +``` + +## Пакет + +Создать DEB-пакет: +```bash +make deb +``` +Получится `MyRPC_server_1.0-0_all.deb`. Устанавливается командой: +```bash +sudo dpkg -i MyRPC_server_1.0-0_all.deb +``` \ No newline at end of file