228 lines
5.8 KiB
Bash
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
|
|
}
|