diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..aa50ebd2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +dnsonly + diff --git a/build b/build new file mode 100755 index 00000000..bbde1f9f --- /dev/null +++ b/build @@ -0,0 +1,52 @@ +#!/bin/bash + +# get build data +if [[ "$BUILD_COMMIT" == "" ]]; then + BUILD_COMMIT=$(git describe --all --long --abbrev=99 --dirty 2>/dev/null) +fi +if [[ "$BUILD_USER" == "" ]]; then + BUILD_USER=$(id -un) +fi +if [[ "$BUILD_HOST" == "" ]]; then + BUILD_HOST=$(hostname -f) +fi +if [[ "$BUILD_DATE" == "" ]]; then + BUILD_DATE=$(date +%d.%m.%Y) +fi +if [[ "$BUILD_SOURCE" == "" ]]; then + BUILD_SOURCE=$(git remote -v | grep origin | cut -f2 | cut -d" " -f1 | head -n 1) +fi +if [[ "$BUILD_SOURCE" == "" ]]; then + BUILD_SOURCE=$(git remote -v | cut -f2 | cut -d" " -f1 | head -n 1) +fi +BUILD_BUILDOPTIONS=$(echo $* | sed "s/ /ยง/g") + +# check +if [[ "$BUILD_COMMIT" == "" ]]; then + echo "could not automatically determine BUILD_COMMIT, please supply manually as environment variable." + exit 1 +fi +if [[ "$BUILD_USER" == "" ]]; then + echo "could not automatically determine BUILD_USER, please supply manually as environment variable." + exit 1 +fi +if [[ "$BUILD_HOST" == "" ]]; then + echo "could not automatically determine BUILD_HOST, please supply manually as environment variable." + exit 1 +fi +if [[ "$BUILD_DATE" == "" ]]; then + echo "could not automatically determine BUILD_DATE, please supply manually as environment variable." + exit 1 +fi +if [[ "$BUILD_SOURCE" == "" ]]; then + echo "could not automatically determine BUILD_SOURCE, please supply manually as environment variable." + exit 1 +fi + +echo "Please notice, that this build script includes metadata into the build." +echo "This information is useful for debugging and license compliance." +echo "Run the compiled binary with the -version flag to see the information included." + +# build +BUILD_PATH="github.com/Safing/portbase/info" +go build -ldflags "-X ${BUILD_PATH}.commit=${BUILD_COMMIT} -X ${BUILD_PATH}.buildOptions=${BUILD_BUILDOPTIONS} -X ${BUILD_PATH}.buildUser=${BUILD_USER} -X ${BUILD_PATH}.buildHost=${BUILD_HOST} -X ${BUILD_PATH}.buildDate=${BUILD_DATE} -X ${BUILD_PATH}.buildSource=${BUILD_SOURCE}" $* diff --git a/dnsonly.go b/dnsonly.go new file mode 100644 index 00000000..ac331bad --- /dev/null +++ b/dnsonly.go @@ -0,0 +1,58 @@ +package main + +import ( + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/Safing/portbase/info" + "github.com/Safing/portbase/log" + "github.com/Safing/portbase/modules" + // include packages here + + _ "github.com/Safing/portbase/database/dbmodule" + _ "github.com/Safing/portbase/database/storage/badger" + _ "github.com/Safing/portmaster/intel" + _ "github.com/Safing/portmaster/nameserver/only" +) + +func main() { + + // Set Info + info.Set("Portmaster (DNS only)", "0.0.1") + + // Start + err := modules.Start() + if err != nil { + if err == modules.ErrCleanExit { + os.Exit(0) + } else { + err = modules.Shutdown() + if err != nil { + log.Shutdown() + } + os.Exit(1) + } + } + + // Shutdown + // catch interrupt for clean shutdown + signalCh := make(chan os.Signal) + signal.Notify( + signalCh, + os.Interrupt, + syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGTERM, + syscall.SIGQUIT, + ) + select { + case <-signalCh: + fmt.Println(" ") + log.Warning("main: program was interrupted, shutting down.") + modules.Shutdown() + case <-modules.ShuttingDown(): + } + +}