This repository has been archived on 2022-02-23. You can view files and clone it, but cannot push or open issues or pull requests.
archive_hook.sh/setup.sh

73 lines
2.5 KiB
Bash
Raw Permalink Normal View History

2020-04-26 22:08:08 +00:00
#! /bin/bash
# TODO: currently setup.sh assumes you're a sudoer, not root
2020-04-26 22:08:08 +00:00
DEST="/usr/local/bin"
2020-04-27 15:02:11 +00:00
# TODO: Make trigger configurable
2020-04-28 09:39:44 +00:00
TRIGGER=./triggers/git-build
DATABASE=./databases/unix
2020-04-27 15:58:17 +00:00
2020-04-27 15:02:11 +00:00
# Autodetect forgehook user if it's already setup
2020-04-28 09:54:52 +00:00
owner=$(find /usr/local/bin/forgehook -maxdepth 0 -printf '%u')
2020-04-27 15:02:11 +00:00
if [[ $? = 0 ]]; then
echo "[setup.sh] Found existing setup owned by user $owner. Using this user."
else
# OK it's not setup yet, maybe try a user from argument?
if [ $# -gt 0 ]; then
owner="$1"
echo "[setup.sh] Setup for user $owner"
else
# Default value
2020-04-27 15:02:11 +00:00
owner="forgehook"
echo "[setup.sh] No setup user found. Using default value $owner"
fi
fi
2020-04-26 22:08:08 +00:00
# If the user doesn't exist, create it
if ! id -u "$owner" > /dev/null 2>&1; then
# We need to create the forgehook user
echo "[setup.sh] User $owner doesn't exist yet. Creating it."
sudo useradd --create-home --shell /bin/bash --user-group --system --home-dir /opt/forgehook "$owner"
fi
2020-04-27 15:02:11 +00:00
# TODO: Check we can escalade privileges
# Everyone can execute (user-facing wrapper)
2020-04-27 15:58:17 +00:00
sudo cp bin/forgehook $DEST
2020-04-27 15:23:42 +00:00
sudo chown "$owner:$owner" $DEST/forgehook
# Only $owner can execute
2020-04-28 09:54:52 +00:00
sudo cp $DATABASE $DEST/forgehook-db
sudo chown "$owner:$owner" $DEST/forgehook-db
sudo chmod 744 $DEST/forgehook-db
2020-04-26 22:08:08 +00:00
# Only root should execute
sudo cp bin/forgehook-notify $DEST/forgehook-notify
sudo chown "$owner:$owner" $DEST/forgehook-notify
sudo chmod 744 $DEST/forgehook-notify
2020-04-26 22:08:08 +00:00
# Everyone can execute (wrapper script for build manager such as git-build)
sudo cp $TRIGGER $DEST/forgehook-trigger
sudo chown "$owner:$owner" $DEST/forgehook-trigger
sudo chmod 755 $DEST/forgehook-trigger
2020-04-26 22:08:08 +00:00
2020-04-27 15:23:42 +00:00
echo "[setup.sh] Installed forgehook to $DEST for $owner"
2020-04-26 22:08:08 +00:00
2020-04-27 15:08:33 +00:00
# Auto setup sudo rules
SUDO_SETUP=0
if ! sudo grep "forgehook-db" /etc/sudoers > /dev/null; then
2020-04-27 15:08:33 +00:00
SUDO_SETUP=1
# Need to open a dedicated shell through sudo or we don't have permissions
sudo sh -c "echo ALL ALL=\("$owner"\) NOPASSWD: /usr/local/bin/forgehook-db >> /etc/sudoers"
2020-04-26 22:08:08 +00:00
fi
if ! sudo grep "forgehook-notify" /etc/sudoers > /dev/null; then
2020-04-27 15:08:33 +00:00
SUDO_SETUP=1
# TODO: permission for forgehook-notify should belong to group, not user so we can give
# permission to run notifications without having access to database for 3rd party tools
# if you need a tool that has access to db please run it as forgehook user!
sudo sh -c "echo "$owner" ALL=NOPASSWD: /usr/local/bin/forgehook-notify >> /etc/sudoers"
2020-04-27 15:08:33 +00:00
fi
2020-04-27 15:23:42 +00:00
[[ $SUDO_SETUP = 1 ]] && echo "[setup.sh] sudo rules have been installed for forgehook"