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

Add Wavelog Script #259

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 4 commits
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
109 changes: 109 additions & 0 deletions ct/wavelog.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#!/usr/bin/env bash
source <(curl -s https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/misc/build.func)
# Copyright (c) 2021-2024 community-scripts ORG
# Author: Don Locke (DonLocke)
# License: MIT
# https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE

function header_info {
clear
cat <<"EOF"
_ __ __
| | / /___ __ _____ / / ____ ____ _
| | /| / / __ `/ | / / _ \/ / / __ \/ __ '/
| |/ |/ / /_/ /| |/ / __/ /___/ /_/ / /_/ /
|__/|__/\__,_/ |___/\___/_____/\____/\__, /
/____/
EOF
}
header_info
echo -e "Loading..."
APP="Wavelog"
var_disk="2"
var_cpu="1"
var_ram="512"
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
}

function update_script() {
header_info
if [[ ! -d /opt/wavelog ]]; then msg_error "No ${APP} Installation Found!"; exit; fi
RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | cut -d '"' -f 4)
if [[ ! -f /opt/${APP}_version.txt ]] || [[ "${RELEASE}" != "$(cat /opt/${APP}_version.txt)" ]]; then
msg_info "Stopping Services"
systemctl stop apache2
msg_ok "Services Stopped"

msg_info "Updating ${APP} to ${RELEASE}"
cp /opt/wavelog/application/config/config.php /opt/config.php
cp /opt/wavelog/application/config/database.php /opt/database.php
cp -r /opt/wavelog/userdata /opt/userdata
if [[ -f /opt/wavelog/assets/js/sections/custom.js ]]; then
cp /opt/wavelog/assets/js/sections/custom.js /opt/custom.js
fi
wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip"
unzip -q ${RELEASE}.zip
cp -r wavelog-${RELEASE}/* /opt/wavelog
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should remove content in old /opt/wavelog first to make sure we don't mix old files with new

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also make sure to test that data/settings migration is working afterwards

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated, and I just retested that data (users, logbook entries, etc) are preserved across updates.

rm -rf wavelog-${RELEASE}
rm -rf /opt/wavelog/install
mv /opt/config.php /opt/wavelog/application/config/config.php
mv /opt/database.php /opt/wavelog/application/config/database.php
cp -r /opt/userdata/* /opt/wavelog/userdata
rm -rf /opt/userdata
if [[ -f /opt/custom.js ]]; then
mv /opt/custom.js /opt/wavelog/assets/js/sections/custom.js
fi
chown -R www-data:www-data /opt/wavelog/
find /opt/wavelog/ -type d -exec chmod 755 {} \;
find /opt/wavelog/ -type f -exec chmod 664 {} \;
echo "${RELEASE}" >/opt/${APP}_version.txt
msg_ok "Updated ${APP}"

msg_info "Starting Services"
systemctl start apache2
msg_ok "Started Services"

msg_info "Cleaning Up"
rm -rf ${RELEASE}.zip
msg_ok "Cleaned"
msg_ok "Updated Successfully"
else
msg_ok "No update required. ${APP} is already at ${RELEASE}"
fi
exit
}

start
build_container
description

msg_ok "Completed Successfully!\n"
echo -e "${APP} should be reachable by going to the following URL.
${BL}http://${IP}${CL} \n"
88 changes: 88 additions & 0 deletions install/wavelog-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
#!/usr/bin/env bash

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

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 \
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
curl \
libapache2-mod-php \
mariadb-server \
mc \
php8.2-{curl,mbstring,mysql,xml,zip} \
sudo \
unzip
msg_ok "Installed Dependencies"

msg_info "Setting up Database"
DB_NAME=wavelog
DB_USER=waveloguser
DB_PASS=$(openssl rand -base64 18 | tr -dc 'a-zA-Z0-9' | head -c13)
$STD mysql -u root -e "CREATE DATABASE $DB_NAME;"
$STD mysql -u root -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED WITH mysql_native_password AS PASSWORD('$DB_PASS');"
$STD mysql -u root -e "GRANT ALL ON $DB_NAME.* TO '$DB_USER'@'localhost'; FLUSH PRIVILEGES;"
{
echo "Wavelog-Credentials"
echo "Wavelog Database User: $DB_USER"
echo "Wavelog Database Password: $DB_PASS"
echo "Wavelog Database Name: $DB_NAME"
} >> ~/wavelog.creds
msg_ok "Set up database"

msg_info "Setting up PHP"
sed -i '/max_execution_time/s/= .*/= 600/' /etc/php/8.2/apache2/php.ini
sed -i '/memory_limit/s/= .*/= 256M/' /etc/php/8.2/apache2/php.ini
sed -i '/upload_max_filesize/s/= .*/= 8M/' /etc/php/8.2/apache2/php.ini
msg_ok "Set up PHP"

msg_info "Installing Wavelog"
RELEASE=$(curl -s https://api.github.com/repos/wavelog/wavelog/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3) }')
wget -q "https://github.com/wavelog/wavelog/archive/refs/tags/${RELEASE}.zip"
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
unzip -q ${RELEASE}.zip
mv wavelog-${RELEASE}/ /opt/wavelog
chown -R www-data:www-data /opt/wavelog/
find /opt/wavelog/ -type d -exec chmod 755 {} \;
find /opt/wavelog/ -type f -exec chmod 664 {} \;
echo "${RELEASE}" >/opt/${APPLICATION}_version.txt
msg_ok "Installed Wavelog"

msg_info "Creating Service"
cat <<EOF >/etc/apache2/sites-available/wavelog.conf
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /opt/wavelog

<Directory /opt/wavelog>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
EOF
$STD a2ensite wavelog.conf
$STD a2dissite 000-default.conf
$STD systemctl reload apache2
msg_ok "Created Service"

motd_ssh
customize

msg_info "Cleaning up"
rm -f ${RELEASE}.zip
$STD apt-get -y autoremove
$STD apt-get -y autoclean
msg_ok "Cleaned"
39 changes: 39 additions & 0 deletions json/wavelog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{
"name": "Wavelog",
"slug": "wavelog",
"categories": [
0
],
"date_created": "2024-11-12",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": "80",
"documentation": "https://github.com/wavelog/wavelog/wiki",
"website": "https://www.wavelog.org/",
"logo": "https://raw.githubusercontent.com/wavelog/wavelog/refs/heads/master/assets/logo/wavelog_logo_cosmo.png",
"description": "Wavelog is a self-hosted PHP application that allows you to log your amateur radio contacts anywhere. All you need is a web browser and active internet connection.",
"install_methods": [
{
"type": "default",
"script": "ct/wavelog.sh",
"resources": {
"cpu": "1",
"ram": "512",
"hdd": "2",
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Database credentials are saved in: `~/wavelog.creds`",
MickLesk marked this conversation as resolved.
Show resolved Hide resolved
"type": "info"
}
]
}