diff --git a/scripts/_common.sh b/scripts/_common.sh index d2e99a8..042d78a 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -166,4 +166,10 @@ check_proc_zabbixagent(){ ynh_print_err "Zabbix agent not started, try to start it with the yunohost interface." ynh_print_err "If Zabbix agent can't start, please open a issue on https://github.com/YunoHost-Apps/zabbix_ynh/issues" fi +} + +install_zabbix_repo(){ + ynh_add_extra_apt_repos__3_path=$(find /var/cache/yunohost/ -name "ynh_add_extra_apt_repos__3") + source "$ynh_add_extra_apt_repos__3_path" + ynh_install_extra_repo --repo="http://repo.zabbix.com/zabbix/4.2/debian $(lsb_release -sc) main" --key=https://repo.zabbix.com/zabbix-official-repo.key --priority=999 --name=zabbix } \ No newline at end of file diff --git a/scripts/backup b/scripts/backup index 745ff1b..29016eb 100644 --- a/scripts/backup +++ b/scripts/backup @@ -66,13 +66,4 @@ ynh_backup "/etc/php/7.0/fpm/pool.d/$app.conf" # BACKUP THE MYSQL DATABASE #================================================= -ynh_mysql_dump_db "$db_name" > db.sql - -#================================================= -# SPECIFIC BACKUP -#================================================= -if [ $nonfree ];then - ynh_backup /etc/apt/sources.list.d/non-free.list - ynh_backup /etc/apt/preferences.d -fi - +ynh_mysql_dump_db "$db_name" > db.sql \ No newline at end of file diff --git a/scripts/install b/scripts/install index 5b31c1d..556c1f3 100644 --- a/scripts/install +++ b/scripts/install @@ -97,11 +97,10 @@ ynh_app_setting_set "$app" language "$language" ### - And the section "UPGRADE DEPENDENCIES" in the upgrade script ynh_print_info "Remove Zabbix if already installed" apt purge zabbix* -y +rm -fr /var/cache/apt/archives/zabbix-server-mysql* ynh_print_info "Install Zabbix repository" -wget -q "https://repo.zabbix.com/zabbix/4.2/debian/pool/main/z/zabbix-release/zabbix-release_4.2-1%2Bstretch_all.deb" -dpkg -i zabbix-release_*.deb -rm zabbix-release_*.deb +install_zabbix_repo ynh_print_info "Update and install dependencies" #ynh_package_update no need cause ynh_install_app_dependencies after @@ -109,7 +108,7 @@ ynh_install_app_dependencies libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libapru dpkg -i --force-confmiss /var/cache/apt/archives/zabbix-server-mysql* DEBIAN_FRONTEND=noninteractive apt-mark hold zabbix-server-mysql zabbix-frontend-php -sed -i "s/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/g" /etc/locale.gen +ynh_replace_string --match_string="# fr_FR.UTF-8 UTF-8" --replace_string="fr_FR.UTF-8 UTF-8" --target_file=/etc/locale.gen locale-gen ln -s /usr/share/zabbix "$final_path" @@ -277,32 +276,17 @@ systemctl reload nginx ### `ynh_replace_string` is used to replace a string in a file. ### (It's compatible with sed regular expressions syntax) ynh_print_info "Generate zabbix config files" - -echo "/usr/share/zabbix/conf/zabbix.conf.php +confServerPath=$(find /var/cache/yunohost/ -name "usr_share_zabbix_conf_zabbix.conf.php") +cp "$confServerPath" /usr/share/zabbix/conf/zabbix.conf.php +ynh_replace_string --match_string="db_name" --replace_string="$db_name" --target_file=/usr/share/zabbix/conf/zabbix.conf.php +ynh_replace_string --match_string="db_user" --replace_string="$db_user" --target_file=/usr/share/zabbix/conf/zabbix.conf.php +ynh_replace_string --match_string="db_pwd" --replace_string="$db_pwd" --target_file=/usr/share/zabbix/conf/zabbix.conf.php chown -R www-data. /usr/share/zabbix -sed -i "s/DBName=zabbix/DBName=$db_name/g" /etc/zabbix/zabbix_server.conf -sed -i "s/DBUser=zabbix/DBUser=$db_user/g" /etc/zabbix/zabbix_server.conf -sed -i "126a DBPassword=$db_pwd" /etc/zabbix/zabbix_server.conf +ynh_replace_string --match_string="DBName=zabbix" --replace_string="DBName=$db_name" --target_file=/etc/zabbix/zabbix_server.conf +ynh_replace_string --match_string="DBUser=zabbix" --replace_string="DBUser=$db_user" --target_file=/etc/zabbix/zabbix_server.conf +ynh_replace_string --match_string="# DBPassword=" --replace_string="# DBPassword=\nDBPassword=$db_pwd" --target_file=/etc/zabbix/zabbix_server.conf ynh_replace_string --match_string="# Timeout=3" --replace_string="# Timeout=3\nTimeout=10" --target_file=/etc/zabbix/zabbix_agentd.conf diff --git a/scripts/remove b/scripts/remove index 3c6bddf..d66e7de 100644 --- a/scripts/remove +++ b/scripts/remove @@ -114,7 +114,8 @@ ynh_secure_remove "/etc/sudoers.d/zabbix" nonfreepackagelist=$(dpkg-query -W -f='${Section}\t${Package}\n' | grep ^non-free) if [ $(echo $nonfreepackagelist | wc -l) -eq 1 ] && [ $(echo $nonfreepackagelist | grep -c "snmp-mibs-downloader") -eq 1 ] ;then ynh_print_info "Removing snmp-mibs-downloader (non-free package)" - sed -i.$(date "+%m%d%y") 's/ snmp-mibs-downloader,//g' /var/lib/dpkg/status + cp /var/lib/dpkg/status{,.$(date "+%m%d%y")} + ynh_replace_string --match_string=" snmp-mibs-downloader," --replace_string="" --target_file=/var/lib/dpkg/status DEBIAN_FRONTEND=noninteractive apt purge snmp-mibs-downloader -y if [ -f /etc/apt/sources.list.d/non-free.list ];then ynh_secure_remove /etc/apt/sources.list.d/non-free.list diff --git a/scripts/restore b/scripts/restore index 0e41db4..d72d507 100644 --- a/scripts/restore +++ b/scripts/restore @@ -52,10 +52,7 @@ nonfree=$(ynh_app_setting_get $app nonfree) #================================================= ynh_print_info "Install Zabbix repository" - -wget -q "https://repo.zabbix.com/zabbix/4.0/debian/pool/main/z/zabbix-release/zabbix-release_4.0-2+stretch_all.deb" -dpkg -i zabbix-release_*.deb -rm zabbix-release_*.deb +install_zabbix_repo ynh_print_info "Update and install dependencies" ynh_package_update @@ -63,10 +60,9 @@ ynh_install_app_dependencies libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libapru DEBIAN_FRONTEND=noninteractive apt-mark hold zabbix-server-mysql zabbix-frontend-php -sed -i "s/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/g" /etc/locale.gen +ynh_replace_string --match_string="# fr_FR.UTF-8 UTF-8" --replace_string="fr_FR.UTF-8 UTF-8" --target_file=/etc/locale.gen locale-gen - ln -s /usr/share/zabbix /var/www/zabbix rm $final_path/conf/zabbix.conf.php diff --git a/scripts/upgrade b/scripts/upgrade index 2e13060..3535742 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -14,8 +14,7 @@ source /usr/share/yunohost/helpers #================================================= app=$YNH_APP_INSTANCE_NAME -trustedversion="1:4.2.1-1+stretch" -trustedVersionRepo="4.2-1+stretch" +trustedversion="1:4.2.4-1+stretch" export domain=$(ynh_app_setting_get "$app" domain) export path_url=$(ynh_app_setting_get "$app" path) #admin=$(ynh_app_setting_get "$app" admin) #not used @@ -97,7 +96,9 @@ path_url=$(ynh_normalize_url_path "$path_url") nonfreepackagelist=$(dpkg-query -W -f='${Section}\t${Package}\n' | grep ^non-free) if [ $(echo $nonfreepackagelist | wc -l) -eq 1 ] && [ $(echo $nonfreepackagelist | grep -c "snmp-mibs-downloader") -eq 1 ] ;then ynh_print_info "Removing snmp-mibs-downloader (non-free package)" - sed -i.$(date "+%m%d%y") 's/ snmp-mibs-downloader,//g' /var/lib/dpkg/status + #want backup file , cannot use ynh_replace_string + cp /var/lib/dpkg/status{,.$(date "+%m%d%y")} + ynh_replace_string --match_string=" snmp-mibs-downloader," --replace_string="" --target_file=/var/lib/dpkg/status DEBIAN_FRONTEND=noninteractive apt purge snmp-mibs-downloader -y if [ -f /etc/apt/sources.list.d/non-free.list ];then ynh_secure_remove /etc/apt/sources.list.d/non-free.list @@ -111,23 +112,18 @@ if [ $timeout_ok -ne 1 ] ;then systemctl enable zabbix-agent && systemctl restart zabbix-agent fi +#patch if zabbix-release installed +if [ "$(dpkg -l zabbix-release 2>/dev/null | wc -l)" -ne 0 ];then + DEBIAN_FRONTEND=noninteractive apt purge zabbix-release -y + install_zabbix_repo +fi + #================================================= # STANDARD UPGRADE STEPS #================================================= #REMOVE DUPLICATE LOG ENTRY IN LOGROTATE PATCH IF NEEDED ynh_remove_logrotate -zabbixRepoInstalledVersion=$(apt-cache policy zabbix-release | sed -n '2p' | grep -Po ".*: \K(.*)") - -if [ "$trustedVersionRepo" != "$zabbixRepoInstalledVersion" ];then - DEBIAN_FRONTEND=noninteractive apt remove zabbix-release -y - ynh_print_info "Install New Zabbix repository" - - wget -q "https://repo.zabbix.com/zabbix/4.2/debian/pool/main/z/zabbix-release/zabbix-release_4.2-1%2Bstretch_all.deb" - dpkg -i zabbix-release_*.deb - rm zabbix-release_*.deb -fi - ynh_print_info "Check if new zabbix version is available on repo" ynh_package_update diff --git a/sources/extra_files/app/usr_share_zabbix_conf_zabbix.conf.php b/sources/extra_files/app/usr_share_zabbix_conf_zabbix.conf.php new file mode 100644 index 0000000..67b13e6 --- /dev/null +++ b/sources/extra_files/app/usr_share_zabbix_conf_zabbix.conf.php @@ -0,0 +1,19 @@ + /dev/null + fi + + # Update the list of package with the new repo + ynh_package_update +} + +# Remove an extra repository and the assiociated configuration. +# +# usage: ynh_remove_extra_repo [--name=name] +# | arg: -n, --name - Name for the files for this repo, $app as default value. +ynh_remove_extra_repo () { + # Declare an array to define the options of this helper. + local legacy_args=n + declare -Ar args_array=( [n]=name= ) + local name + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + name="${name:-$app}" + + ynh_secure_remove "/etc/apt/sources.list.d/$name.list" + ynh_secure_remove "/etc/apt/preferences.d/$name" + ynh_secure_remove "/etc/apt/trusted.gpg.d/$name.gpg" + ynh_secure_remove "/etc/apt/trusted.gpg.d/$name.asc" + + # Update the list of package to exclude the old repo + ynh_package_update +} + +# Install packages from an extra repository properly. +# +# usage: ynh_install_extra_app_dependencies --repo="repo" --package="dep1 dep2" [--key=key_url] [--name=name] +# | arg: -r, --repo - Complete url of the extra repository. +# | arg: -p, --package - The packages to install from this extra repository +# | arg: -k, --key - url to get the public key. +# | arg: -n, --name - Name for the files for this repo, $app as default value. +ynh_install_extra_app_dependencies () { + # Declare an array to define the options of this helper. + local legacy_args=rpkn + declare -Ar args_array=( [r]=repo= [p]=package= [k]=key= [n]=name= ) + local repo + local package + local key + local name + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + name="${name:-$app}" + key=${key:-0} + + # Set a key only if asked + if [ -n "$key" ] + then + key="--key=$key" + fi + # Add an extra repository for those packages + ynh_install_extra_repo --repo="$repo" $key --priority=995 --name=$name + + # Install requested dependencies from this extra repository. + ynh_add_app_dependencies --package="$package" + + # Remove this extra repository after packages are installed + ynh_remove_extra_repo --name=$app +} + +#================================================= + +# patched version of ynh_install_app_dependencies to be used with ynh_add_app_dependencies + +# Define and install dependencies with a equivs control file +# This helper can/should only be called once per app +# +# usage: ynh_install_app_dependencies dep [dep [...]] +# | arg: dep - the package name to install in dependence +# You can give a choice between some package with this syntax : "dep1|dep2" +# Example : ynh_install_app_dependencies dep1 dep2 "dep3|dep4|dep5" +# This mean in the dependence tree : dep1 & dep2 & (dep3 | dep4 | dep5) +# +# Requires YunoHost version 2.6.4 or higher. +ynh_install_app_dependencies () { + local dependencies=$@ + dependencies="$(echo "$dependencies" | sed 's/\([^\<=\>]\)\ \([^(]\)/\1, \2/g')" + dependencies=${dependencies//|/ | } + local manifest_path="../manifest.json" + if [ ! -e "$manifest_path" ]; then + manifest_path="../settings/manifest.json" # Into the restore script, the manifest is not at the same place + fi + + local version=$(grep '\"version\": ' "$manifest_path" | cut -d '"' -f 4) # Retrieve the version number in the manifest file. + if [ ${#version} -eq 0 ]; then + version="1.0" + fi + local dep_app=${app//_/-} # Replace all '_' by '-' + + # Handle specific versions + if [[ "$dependencies" =~ [\<=\>] ]] + then + # Replace version specifications by relationships syntax + # https://www.debian.org/doc/debian-policy/ch-relationships.html + # Sed clarification + # [^(\<=\>] ignore if it begins by ( or < = >. To not apply twice. + # [\<=\>] matches < = or > + # \+ matches one or more occurence of the previous characters, for >= or >>. + # [^,]\+ matches all characters except ',' + # Ex: package>=1.0 will be replaced by package (>= 1.0) + dependencies="$(echo "$dependencies" | sed 's/\([^(\<=\>]\)\([\<=\>]\+\)\([^,]\+\)/\1 (\2 \3)/g')" + fi + + cat > /tmp/${dep_app}-ynh-deps.control << EOF # Make a control file for equivs-build +Section: misc +Priority: optional +Package: ${dep_app}-ynh-deps +Version: ${version} +Depends: ${dependencies} +Architecture: all +Description: Fake package for $app (YunoHost app) dependencies + This meta-package is only responsible of installing its dependencies. +EOF + ynh_package_install_from_equivs /tmp/${dep_app}-ynh-deps.control \ + || ynh_die --message="Unable to install dependencies" # Install the fake package and its dependencies + rm /tmp/${dep_app}-ynh-deps.control + ynh_app_setting_set --app=$app --key=apt_dependencies --value="$dependencies" +} + +ynh_add_app_dependencies () { + # Declare an array to define the options of this helper. + local legacy_args=pr + declare -Ar args_array=( [p]=package= [r]=replace) + local package + local replace + # Manage arguments with getopts + ynh_handle_getopts_args "$@" + replace=${replace:-0} + + local current_dependencies="" + if [ $replace -eq 0 ] + then + local dep_app=${app//_/-} # Replace all '_' by '-' + if ynh_package_is_installed --package="${dep_app}-ynh-deps" + then + current_dependencies="$(dpkg-query --show --showformat='${Depends}' ${dep_app}-ynh-deps) " + fi + + current_dependencies=${current_dependencies// | /|} + fi + + ynh_install_app_dependencies "${current_dependencies}${package}" +}