Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Script: Semaphore #596

Merged
merged 8 commits into from
Jan 1, 2025
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 97 additions & 0 deletions ct/semaphore.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/kristocopani/ProxmoxVE/build/misc/build.func)
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
# Copyright (c) 2021-2024 community-scripts ORG
# Author: kristocopani
# License: MIT
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
_____ __
/ ___/___ ____ ___ ____ _____ / /_ ____ ________
\__ \/ _ \/ __ `__ \/ __ `/ __ \/ __ \/ __ \/ ___/ _ \
___/ / __/ / / / / / /_/ / /_/ / / / / /_/ / / / __/
/____/\___/_/ /_/ /_/\__,_/ .___/_/ /_/\____/_/ \___/
/_/

EOF
}
header_info
echo -e "Loading..."
APP="Semaphore"
var_disk="4"
var_cpu="2"
var_ram="2048"
var_os="debian"
var_version="12"
variables
color
catch_errors

function default_settings() {
CT_TYPE="1"
PW=""
CT_ID=$NEXTID
HN=$NSAPP
DISK_SIZE="$var_disk"
CORE_COUNT="$var_cpu"
RAM_SIZE="$var_ram"
BRG="vmbr0"
NET="dhcp"
GATE=""
APT_CACHER=""
APT_CACHER_IP=""
DISABLEIP6="no"
MTU=""
SD=""
NS=""
MAC=""
VLAN=""
SSH="no"
VERB="no"
echo_default
}
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
function update_script() {
header_info
check_container_storage
check_container_resources

if [[ ! -f /etc/systemd/system/semaphore.service ]]; then
msg_error "No ${APP} Installation Found!"
exit
fi
RELEASE=$(curl -s https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Service"
systemctl stop semaphore
msg_ok "Stopped Service"

msg_info "Updating ${APP} to v${RELEASE}"
cd /opt
wget -q https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb
dpkg -i semaphore_${RELEASE}_linux_amd64.deb &>/dev/null
echo "${RELEASE}" >"/opt/${APP}_version.txt"
msg_ok "Updated ${APP} to v${RELEASE}"

msg_info "Starting Service"
systemctl start semaphore
msg_ok "Started Service"

msg_info "Cleaning up"
rm -rf /opt/semaphore_${RELEASE}_linux_amd64.deb
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at v${RELEASE}."
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} server should be reachable by connecting to the following server.
${BL}http://${IP}:3000${CL} \n"
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
84 changes: 84 additions & 0 deletions install/semaphore-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#!/usr/bin/env bash

# Copyright (c) 2021-2024 community-scripts ORG
# Author: kristocopani
# License: MIT
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os

msg_info "Installing Dependencies"
$STD apt-get install -y \
curl \
mc \
git \
gpg \
sudo
UBUNTU_CODENAME=jammy
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
wget -qO- "https://keyserver.ubuntu.com/pks/lookup?fingerprint=on&op=get&search=0x6125E2A8C77F2818FB7BD15B93C4A3FD7BB9C367" | gpg --dearmour >/usr/share/keyrings/ansible-archive-keyring.gpg
$STD echo "deb [signed-by=/usr/share/keyrings/ansible-archive-keyring.gpg] http://ppa.launchpad.net/ansible/ansible/ubuntu $UBUNTU_CODENAME main" | tee /etc/apt/sources.list.d/ansible.list
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
$STD apt update
$STD apt install -y \
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
ansible
msg_ok "Installed Dependencies"

msg_info "Installing Semaphore"
RELEASE=$(curl -s https://api.github.com/repos/semaphoreui/semaphore/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4) }')
mkdir -p /opt/semaphore
cd /opt/semaphore
wget -q https://github.com/semaphoreui/semaphore/releases/download/v${RELEASE}/semaphore_${RELEASE}_linux_amd64.deb
$STD dpkg -i semaphore_${RELEASE}_linux_amd64.deb
rm -rf semaphore_${RELEASE}_linux_amd64.deb
MickLesk marked this conversation as resolved.
Show resolved Hide resolved

json_cookie_hash=$(head -c32 /dev/urandom | base64)
json_cookie_encryption=$(head -c32 /dev/urandom | base64)
json_access_key_encryption=$(head -c32 /dev/urandom | base64)
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
cat <<EOF >/opt/semaphore/config.json
{
"bolt": {
"host": "/opt/semaphore/semaphore_db.bolt"
},
"tmp_path": "/opt/semaphore/tmp",
"cookie_hash": "${json_cookie_hash}",
"cookie_encryption": "${json_cookie_encryption}",
"access_key_encryption": "${json_access_key_encryption}"
}
EOF
$STD semaphore user add --admin --login admin --email [email protected] --name Administrator --password admin --config /opt/semaphore/config.json
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
echo "${RELEASE}" >"/opt/${APPLICATION}_version.txt"
msg_ok "Installed Semaphore"

msg_info "Creating Service"
cat <<EOF >/etc/systemd/system/semaphore.service
[Unit]
Description=Semaphore UI
Documentation=https://docs.semaphoreui.com/
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/bin/semaphore server --config /opt/semaphore/config.json
Restart=always
RestartSec=10s

[Install]
WantedBy=multi-user.target
EOF

systemctl enable --now -q semaphore.service
msg_ok "Created Service"

motd_ssh
customize

msg_info "Cleaning up"
rm -rf semaphore_${RELEASE}_linux_amd64.deb
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
39 changes: 39 additions & 0 deletions json/semaphore.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "Semaphore",
"slug": "semaphore",
"categories": [
11
],
"date_created": "2024-11-29",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://docs.semaphoreui.com/",
"website": "https://semaphoreui.com/",
"logo": "https://docs.semaphoreui.com/favicon.png?x=",
"description": "Semaphore UI is a modern web interface for managing popular DevOps tools",
"install_methods": [
{
"type": "default",
"script": "/ct/semaphore.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "Debian",
"version": "12"
}
}
],
"default_credentials": {
"username": "admin",
"password": "admin"
},
"notes": [
{
"text": "This instance uses BoltDB",
"type": "info"
}
]
}