diff --git a/Cargo.lock b/Cargo.lock index 0588719..a156419 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -134,7 +134,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] -name = "compose-watcher" +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "dispenser" version = "0.1.0" dependencies = [ "base64", @@ -150,15 +159,6 @@ dependencies = [ "urlencoding", ] -[[package]] -name = "crc32fast" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" -dependencies = [ - "cfg-if", -] - [[package]] name = "env_filter" version = "0.1.2" diff --git a/Cargo.toml b/Cargo.toml index c80c334..05ec8b6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "compose-watcher" +name = "dispenser" version = "0.1.0" edition = "2021" license = "MIT" diff --git a/Makefile b/Makefile index 737f569..84c442f 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ .PHONY: build-deb build-rpm WORK_DIR=$(shell pwd) -TARGET_BIN=target/x86_64-unknown-linux-musl/release/compose-watcher -USR_BIN_DEB=deb/usr/local/bin/compose-watcher -USR_BIN_RPM=rpm/usr/local/bin/compose-watcher +TARGET_BIN=target/x86_64-unknown-linux-musl/release/dispenser +USR_BIN_DEB=deb/usr/local/bin/dispenser +USR_BIN_RPM=rpm/usr/local/bin/dispenser $(TARGET_BIN): CARGO_TARGET_DIR="./target" cargo build --release --target "x86_64-unknown-linux-musl" @@ -18,10 +18,10 @@ $(USR_BIN_DEB): $(TARGET_BIN) build-deb: $(USR_BIN_DEB) dpkg-deb --build deb - mv deb.deb compose-watcher.deb + mv deb.deb dispenser.deb build-rpm: $(USR_BIN_RPM) cp -r rpm/ rpmbuild - mkdir -p rpmbuild/opt/compose-watcher + mkdir -p rpmbuild/opt/dispenser rpmbuild --target=x86_64 --buildroot $(WORK_DIR)/rpmbuild \ - -bb rpmbuild/compose-watcher.spec + -bb rpmbuild/dispenser.spec diff --git a/README.md b/README.md index 78179f7..9de62a0 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -# Compose Watcher +# Dispenser This tool manages Docker Compose instances by constantly looking for new versions of images to deploying seemlessly. -Compose Watcher works as a daemon that runs in the background of the host server. +Dispenser works as a daemon that runs in the background of the host server. ## Build @@ -23,7 +23,7 @@ make build-rpm ``` -This should create a file called roughly `../compose-watcher-$VERSION.x86_64.rpm`. +This should create a file called roughly `../dispenser-$VERSION.x86_64.rpm`. ### Deb (Debian & Ubuntu) @@ -40,5 +40,5 @@ Once these dependencies are installed run: make build-deb ``` -This should create a file called roughly `./compose-watcher.deb`. +This should create a file called roughly `./dispenser.deb`. diff --git a/deb/DEBIAN/control b/deb/DEBIAN/control index 891eda6..6153341 100644 --- a/deb/DEBIAN/control +++ b/deb/DEBIAN/control @@ -1,6 +1,6 @@ -Package: compose-watcher +Package: dispenser Version: 0.1 Maintainer: ixpantia S.A. Architecture: amd64 Description: Continously Deploy services with Docker Compose -Depends: docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugin +Depends: docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugin, gnupg2, pass diff --git a/deb/DEBIAN/postinst b/deb/DEBIAN/postinst index b11781d..f1671f6 100755 --- a/deb/DEBIAN/postinst +++ b/deb/DEBIAN/postinst @@ -1,22 +1,23 @@ #!/bin/sh set -e -# Create the 'compose-watcher' user and home directory if it doesn't exist -if ! id -u compose-watcher > /dev/null 2>&1; then - useradd -r -d /opt/compose-watcher -s /bin/false compose-watcher - mkdir -p /opt/compose-watcher - chown compose-watcher:compose-watcher /opt/compose-watcher +# Create the 'dispenser' user and home directory if it doesn't exist +if ! id -u dispenser > /dev/null 2>&1; then + useradd -r -d /opt/dispenser -s /bin/bash dispenser + usermod -aG docker dispenser + mkdir -p /opt/dispenser + chown dispenser:dispenser /opt/dispenser fi -# Create the compose-watcher.toml file if it doesn't exist -if [ ! -f /opt/compose-watcher/compose-watcher.toml ]; then - echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/compose-watcher/compose-watcher.toml - chown compose-watcher:compose-watcher /opt/compose-watcher/compose-watcher.toml +# Create the dispenser.toml file if it doesn't exist +if [ ! -f /opt/dispenser/dispenser.toml ]; then + echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/dispenser/dispenser.toml + chown dispenser:dispenser /opt/dispenser/dispenser.toml fi # Restart the service on upgrade if [ "$1" = "configure" ]; then systemctl daemon-reload || true - systemctl enable compose-watcher.service || true - systemctl start compose-watcher.service || true + systemctl enable dispenser.service || true + systemctl start dispenser.service || true fi diff --git a/deb/DEBIAN/postrm b/deb/DEBIAN/postrm index 788d107..003f9bf 100755 --- a/deb/DEBIAN/postrm +++ b/deb/DEBIAN/postrm @@ -3,13 +3,13 @@ set -e if [ "$1" = "purge" ]; then systemctl daemon-reload || true - rm -f /lib/systemd/system/compose-watcher.service + rm -f /lib/systemd/system/dispenser.service fi -rm -rf /usr/local/bin/compose-watcher +rm -rf /usr/local/bin/dispenser if [ "$1" = "purge" ]; then - # Remove the compose-watcher user and its home directory - userdel -r compose-watcher || true - rm -rf /opt/compose-watcher + # Remove the dispenser user and its home directory + userdel -r dispenser || true + rm -rf /opt/dispenser fi diff --git a/deb/DEBIAN/prerm b/deb/DEBIAN/prerm index a097968..e258bc2 100755 --- a/deb/DEBIAN/prerm +++ b/deb/DEBIAN/prerm @@ -2,6 +2,6 @@ set -e if [ "$1" = "remove" ]; then - systemctl stop compose-watcher.service || true - systemctl disable compose-watcher.service || true + systemctl stop dispenser.service || true + systemctl disable dispenser.service || true fi diff --git a/deb/lib/systemd/system/compose-watcher.service b/deb/lib/systemd/system/dispenser.service similarity index 62% rename from deb/lib/systemd/system/compose-watcher.service rename to deb/lib/systemd/system/dispenser.service index 5b09e34..4323f52 100644 --- a/deb/lib/systemd/system/compose-watcher.service +++ b/deb/lib/systemd/system/dispenser.service @@ -7,11 +7,11 @@ StartLimitIntervalSec=0 Type=simple Restart=always RestartSec=1 -User=compose-watcher +User=dispenser Environment="RUST_LOG=info" -ExecStart=/usr/local/bin/compose-watcher --config /opt/compose-watcher/compose-watcher.toml +ExecStart=/usr/local/bin/dispenser --config /opt/dispenser/dispenser.toml ExecReload=/bin/kill -HUP $MAINPID -WorkingDirectory=/opt/compose-watcher +WorkingDirectory=/opt/dispenser [Install] WantedBy=multi-user.target diff --git a/deb/usr/local/bin/dispenser b/deb/usr/local/bin/dispenser new file mode 100755 index 0000000..19c8e40 Binary files /dev/null and b/deb/usr/local/bin/dispenser differ diff --git a/rpm/compose-watcher.spec b/rpm/compose-watcher.spec deleted file mode 100644 index 20d68ad..0000000 --- a/rpm/compose-watcher.spec +++ /dev/null @@ -1,65 +0,0 @@ -Buildroot: /home/andres/projects/ixpantia/imasd/contpose/compose-watcher-0.1 -Name: compose-watcher -Version: 0.1 -Release: 0 -Summary: Continously Deploy services with Docker Compose -License: see /usr/share/doc/compose-watcher/copyright -Distribution: Debian -Group: Converted/unknown -Requires: docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin - -%define _rpmdir ../ -%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm -%define _unpackaged_files_terminate_build 0 - -%post -#!/bin/sh -set -e - -# Create the 'compose-watcher' user and home directory if it doesn't exist -if ! id -u compose-watcher > /dev/null 2>&1; then - useradd -r -d /opt/compose-watcher -s /bin/false compose-watcher - mkdir -p /opt/compose-watcher - chown compose-watcher:compose-watcher /opt/compose-watcher -fi - -# Create the compose-watcher.toml file if it doesn't exist -if [ ! -f /opt/compose-watcher/compose-watcher.toml ]; then - echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/compose-watcher/compose-watcher.toml - chown compose-watcher:compose-watcher /opt/compose-watcher/compose-watcher.toml -fi - -# Restart the service on upgrade -systemctl daemon-reload || true -systemctl enable compose-watcher.service || true -systemctl start compose-watcher.service || true - - -%preun -#!/bin/sh -set -e - -systemctl stop compose-watcher.service || true -systemctl disable compose-watcher.service || true - - -%postun -#!/bin/sh -set -e - -systemctl daemon-reload || true -rm -f /lib/systemd/system/compose-watcher.service - -rm -rf /usr/local/bin/compose-watcher - -# Remove the compose-watcher user and its home directory -userdel -r compose-watcher || true -rm -rf /opt/compose-watcher - - -%description - -%files -%dir "/opt/compose-watcher" -"/lib/systemd/system/compose-watcher.service" -"/usr/local/bin/compose-watcher" diff --git a/rpm/dispenser.spec b/rpm/dispenser.spec new file mode 100644 index 0000000..6f8ffd7 --- /dev/null +++ b/rpm/dispenser.spec @@ -0,0 +1,65 @@ +Name: dispenser +Version: 0.1 +Release: 0 +Summary: Continously Deploy services with Docker Compose +License: see /usr/share/doc/dispenser/copyright +Distribution: Debian +Group: Converted/unknown +Requires: docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin, gnupg2, pass + +%define _rpmdir ./ +%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm +%define _unpackaged_files_terminate_build 0 + +%post +#!/bin/sh +set -e + +# Create the 'dispenser' user and home directory if it doesn't exist +if ! id -u dispenser > /dev/null 2>&1; then + useradd -r -d /opt/dispenser -s /bin/bash dispenser + usermod -aG docker dispenser + mkdir -p /opt/dispenser + chown dispenser:dispenser /opt/dispenser +fi + +# Create the dispenser.toml file if it doesn't exist +if [ ! -f /opt/dispenser/dispenser.toml ]; then + echo "delay=60 # Will watch for updates every 60 seconds" >> /opt/dispenser/dispenser.toml + chown dispenser:dispenser /opt/dispenser/dispenser.toml +fi + +# Restart the service on upgrade +systemctl daemon-reload || true +systemctl enable dispenser.service || true +systemctl start dispenser.service || true + + +%preun +#!/bin/sh +set -e + +systemctl stop dispenser.service || true +systemctl disable dispenser.service || true + + +%postun +#!/bin/sh +set -e + +systemctl daemon-reload || true +rm -f /lib/systemd/system/dispenser.service + +rm -rf /usr/local/bin/dispenser + +# Remove the dispenser user and its home directory +userdel -r dispenser || true +rm -rf /opt/dispenser + + +%description + +%files +%dir "/opt/dispenser" +"/usr/lib/systemd/system/dispenser.service" +"/usr/local/bin/dispenser" diff --git a/rpm/lib/systemd/system/compose-watcher.service b/rpm/usr/lib/systemd/system/dispenser.service similarity index 62% rename from rpm/lib/systemd/system/compose-watcher.service rename to rpm/usr/lib/systemd/system/dispenser.service index 5b09e34..4323f52 100644 --- a/rpm/lib/systemd/system/compose-watcher.service +++ b/rpm/usr/lib/systemd/system/dispenser.service @@ -7,11 +7,11 @@ StartLimitIntervalSec=0 Type=simple Restart=always RestartSec=1 -User=compose-watcher +User=dispenser Environment="RUST_LOG=info" -ExecStart=/usr/local/bin/compose-watcher --config /opt/compose-watcher/compose-watcher.toml +ExecStart=/usr/local/bin/dispenser --config /opt/dispenser/dispenser.toml ExecReload=/bin/kill -HUP $MAINPID -WorkingDirectory=/opt/compose-watcher +WorkingDirectory=/opt/dispenser [Install] WantedBy=multi-user.target diff --git a/src/cli.rs b/src/cli.rs index 40907e1..63802db 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -7,7 +7,7 @@ use clap::Parser; #[command(version, about, long_about = None)] pub struct Args { /// Path to the config file. - #[arg(short, long, default_value = "compose-watcher.toml")] + #[arg(short, long, default_value = "dispenser.toml")] pub config: PathBuf, } diff --git a/src/login.rs b/src/login.rs index e75801e..fe76d77 100644 --- a/src/login.rs +++ b/src/login.rs @@ -1,5 +1,3 @@ -// cat ~/my_password.txt | docker login --username foo --password-stdin - use base64::Engine; use std::collections::HashMap; use std::env;