stl-statilque-litterateur/var/lib/stl/scripts/manage__update

228 lines
5.8 KiB
Bash

#!/bin/bash
# Name: Statique Littérateur
# Type: update manager
# file: manage__update
# Folder: /var/lib/stl/scripts/
# By echolib (XMPP: im@echolib.re)
# License: GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
#------------
# funny stats
#------------
# lines: 227
# functions: 6
#-----------------------------------------------------------------------
#**********************************************************************
#======================================================================
# --------------------
# Update app & scripts
# --------------------
#======================================================================
update__OPTIONS() {
# Get installed version number
cur_stl_version=`awk 'NR==2 {print $3}' "$stl_bin"`
case "$1" in
version) version__installed ;;
-u) update__check ;;
-U) stl_upg=true;update__check ;;
update) update__conf ;;
esac
}
#======================================================================
# Show current version
#======================================================================
version__installed() {
echo "# STL installed: $cur_stl_version"
[[ -f "$stl_dir_help/last-version.md" ]] \
&& cat "$stl_dir_help/last-version.md"
exit
}
#======================================================================
# check if available update
# Also use for -U but then call upgrade__stl
#======================================================================
update__check() {
www_stl_version=`curl -s "$stl_repo" | awk 'NR==2 {print $3}'`
# Unknown fom repo
if ! [[ $www_stl_version ]];then
echo "! Unknown available version from repo"
exit
fi
# Same version fom repo
if [[ $cur_stl_version == $www_stl_version ]];then
echo "# STL is up to date: $www_stl_version"
exit
fi
# Versions Comparison functions
verlte() {
[ "$1" = "`printf '%s\n%s' "$1" "$2" | sort -V | head -n1`" ]
}
verlt() {
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
# Should be only for me (Local version is upper)
verlt $cur_stl_version $www_stl_version \
&& stl_new_version=true \
|| stl_old_version=true
# New version Found
[[ $stl_new_version ]] \
&& printf '%s %s\n' \
"# STL is available from repo:" \
"$cur_stl_version > $www_stl_version"
# Installed version is newer than fom repo
[[ $stl_old_version ]] \
&& printf '%s %s\n' \
"! STL Installed is newer than repo:" \
"$cur_stl_version > $www_stl_version"
[[ $stl_new_version ]] || exit
if ! (( `curl -o /dev/null -s -w "%{http_code}\n" "$stl_repo_lv"` \
>= 400 ));then
mkdir -p /tmp/STL
curl -L -o "/tmp/STL/last-version.md" "$stl_repo_lv" 2>/dev/null
[[ -f "/tmp/STL/last-version.md" ]] \
&& cat "/tmp/STL/last-version.md" #\
#&& rm -rf "/tmp/STL/"
fi
# Upgrade from -U (except for debian base)
[[ $stl_upg ]] || exit
# Debian based: exit and inform to use .deb
[[ `command -v apt` ]] \
&& echo "! System is Debian based. Use .deb instead" \
&& exit
echo
read -rp "- Do you want to update STL ? " stl_ask
case "$stl_ask" in
Y|y) upgrade__stl ;;
*) echo "# Maybe later...";exit ;;
esac
}
#======================================================================
# Download archive to /tmp
# check it and extract with rsync
#======================================================================
upgrade__stl() {
mkdir -p /tmp/STL
stl_dir_tgz="/tmp/STl/stl_main" # directory from extracted archive
# Download archive
curl -L -o /tmp/STL/stl-main.tar.gz "$stl_repo_tgz" 2>/dev/null
! [[ -f "/tmp/STL/stl-main.tar.gz" ]] \
&& echo "! Download error from url: $repo_tar" \
&& exit
# Extract archive
tar -xzf "/tmp/STL/stl-main.tar.gz" --directory "/tmp/STL/"
! [[ -d $stl_dir_tgz ]] \
&& echo "! Extract error from archive: /tmp/STL/stl-main.tar.gz" \
&& return
# Rsync from archive to System
rsync -a --exclude ".*" \
"/tmp/STL/stl_main/usr/" \
"/usr/" && \
printf '%s\n%s\n' \
"- Copy bin: /usr/local/bin/stl" \
"- Copy completion: /usr/share/bash-completion/completions/stl"
rsync -a --exclude ".*" \
"/tmp/STL/stl_main/etc/stl/" \
"/etc/stl/" && \
echo "- Copy configuration: /etc/stl/"
rsync -a --delete --exclude ".*" \
"/tmp/STL/stl_main/var/lib/stl/help/" \
"/var/lib/stl/help/" && \
echo "- Copy helps: /var/lib/stl/help/"
rsync -a --delete --exclude ".*" \
"/tmp/STL/stl_main/var/lib/stl/scripts/" \
"/var/lib/stl/scripts/" && \
echo "- Copy scripts: /var/lib/stl/scripts/"
# Cleaning
rm -rf "/tmp/STL/"
}
#======================================================================
# Checking and updating conf after STL update
#======================================================================
update__conf() {
domain__get
echo "# Configuration:"
# Sidebar
if [[ "$domain_dir_sidebar" && "$domain_file_sidebar_load" ]];then
echo " - Sidebar Ok"
else
cat << EOCONF >> "$stl_file_pwd_conf"
# Sidebar
domain_dir_sidebar="$PWD/articles/sidebar"
domain_file_sidebar_load="$PWD/articles/sidebar/stl.sidebar"
EOCONF
echo " - Sidebar configured"
fi
# Logs
echo
stl log clean all
# Create a backup of the config in db
rsync -a "$PWD/$stl_file_pwd_conf" \
"$stl_dir_db/$domain_name/$stl_file_pwd_conf.bkp"
# Re check all checked article to wirte DB
echo -e "\n# Database:"
update__database # Last process with exit
}
#======================================================================
# Force check all checked articles
#======================================================================
update__database() {
for db_check in $domain_db_articles/*.db
do
source "$db_check"
uri_dba="$article_uri_srv"
uri_dba=${uri_dba:1}
uri_dba=${uri_dba/.html/.stl}
if [[ $check_all ]];then
stl check -F "$uri_dba"
echo
else
stl check -F "$uri_dba" &>/dev/null
echo " - $uri_dba updated"
fi
done
exit
}