diff --git a/README.md b/README.md index d2f3338..0b786eb 100644 --- a/README.md +++ b/README.md @@ -51,13 +51,13 @@ Next to this, you can pass ANY zaf config options by *ZAF_* prefix. Interresting ZAF_GIT='1'# Default # Git repository. Can be your local version - ZAF_PLUGINS_GITURL='https://github.com/limosek/zaf-plugins.git' + ZAF_REPO_GITURL='https://github.com/limosek/zaf-plugins.git' # Where to install plugins ZAF_PLUGINS_DIR='/usr/lib/zaf/plugins' # Plugins can be downloaded from http[s] too - ZAF_PLUGINS_URL='https://raw.githubusercontent.com/limosek/zaf-plugins/master/' + ZAF_REPO_URL='https://raw.githubusercontent.com/limosek/zaf-plugins/master/' ``` @@ -72,7 +72,7 @@ curl -k https://raw.githubusercontent.com/limosek/zaf/1.0/install.sh | sh -s aut Z_Server=zabbix.server.local \ Z_ServerActive=zabbix.server.local \ Z_HostnameItem=system.hostname Z_RefreshActiveChecks=60 \ - ZAF_PLUGINS_GITURL="git://gitserver.local" + ZAF_REPO_GITURL="git://gitserver.local" ``` ### Packaged version diff --git a/files/zaf.conf-deb.template b/files/zaf.conf-deb.template deleted file mode 100644 index d6a8345..0000000 --- a/files/zaf.conf-deb.template +++ /dev/null @@ -1,12 +0,0 @@ -ZAF_PKG='dpkg' -ZAF_AGENT_PKG='zabbix-agent' -ZAF_TMP_BASE='/tmp/zaf' -ZAF_LIB_DIR='/usr/lib/zaf' -ZAF_BIN_DIR='/usr/bin' -ZAF_PLUGINS_DIR='/usr/lib/zaf/plugins' -ZAF_PLUGINS_URL='https://raw.githubusercontent.com/limosek/zaf-plugins/master/' -ZAF_PLUGINS_GITURL='https://github.com/limosek/zaf-plugins.git' -ZAF_REPO_DIR='/usr/lib/zaf/repo' -ZAF_AGENT_CONFIGD='/etc/zabbix/zabbix_agentd.d' -ZAF_AGENT_BIN='/usr/sbin/zabbix_agentd' -ZAF_AGENT_RESTART='service zabbix-agent restart' diff --git a/install.sh b/install.sh index ad5e72b..f1a6be4 100755 --- a/install.sh +++ b/install.sh @@ -99,9 +99,10 @@ zaf_set_option(){ local description if ! grep -q "^$1=" ${ZAF_CFG_FILE}; then echo "$1='$2'" >>${ZAF_CFG_FILE} - zaf_dbg "Saving $1 to $2 in ${ZAF_CFG_FILE}" >&2 + zaf_dbg "Saving $1 to $2 in ${ZAF_CFG_FILE}" else - zaf_wrn "Preserving $1 to $2 in ${ZAF_CFG_FILE}" >&2 + sed -i "s#^$1=\(.*\)#$1='$2'#" ${ZAF_CFG_FILE} + zaf_dbg "Changing $1 to $2 in ${ZAF_CFG_FILE}" fi } @@ -215,8 +216,8 @@ zaf_configure(){ zaf_get_option ZAF_LIB_DIR "Libraries directory" "/usr/lib/zaf" "$INSTALL_MODE" zaf_get_option ZAF_BIN_DIR "Directory to put binaries" "/usr/bin" "$INSTALL_MODE" zaf_get_option ZAF_PLUGINS_DIR "Plugins directory" "${ZAF_LIB_DIR}/plugins" "$INSTALL_MODE" - [ "${ZAF_GIT}" = 1 ] && zaf_get_option ZAF_PLUGINS_GITURL "Git plugins repository" "https://github.com/limosek/zaf-plugins.git" "$INSTALL_MODE" - zaf_get_option ZAF_PLUGINS_URL "Plugins http[s] repository" "https://raw.githubusercontent.com/limosek/zaf-plugins/master/" "$INSTALL_MODE" + [ "${ZAF_GIT}" = 1 ] && zaf_get_option ZAF_REPO_GITURL "Git plugins repository" "https://github.com/limosek/zaf-plugins.git" "$INSTALL_MODE" + zaf_get_option ZAF_REPO_URL "Plugins http[s] repository" "https://raw.githubusercontent.com/limosek/zaf-plugins/master/" "$INSTALL_MODE" zaf_get_option ZAF_REPO_DIR "Plugins directory" "${ZAF_LIB_DIR}/repo" "$INSTALL_MODE" zaf_get_option ZAF_AGENT_CONFIG "Zabbix agent config" "/etc/zabbix/zabbix_agentd.conf" "$INSTALL_MODE" ! [ -d "${ZAF_AGENT_CONFIGD}" ] && [ -d "/etc/zabbix/zabbix_agentd.d" ] && ZAF_AGENT_CONFIGD="/etc/zabbix/zabbix_agentd.d" @@ -243,15 +244,14 @@ zaf_configure(){ zaf_set_option ZAF_LIB_DIR "$ZAF_LIB_DIR" zaf_set_option ZAF_BIN_DIR "$ZAF_BIN_DIR" zaf_set_option ZAF_PLUGINS_DIR "$ZAF_PLUGINS_DIR" - zaf_set_option ZAF_PLUGINS_URL "$ZAF_PLUGINS_URL" - [ "${ZAF_GIT}" = 1 ] && zaf_set_option ZAF_PLUGINS_GITURL "$ZAF_PLUGINS_GITURL" + zaf_set_option ZAF_REPO_URL "$ZAF_REPO_URL" + [ "${ZAF_GIT}" = 1 ] && zaf_set_option ZAF_REPO_GITURL "$ZAF_REPO_GITURL" zaf_set_option ZAF_REPO_DIR "$ZAF_REPO_DIR" zaf_set_option ZAF_AGENT_CONFIG "$ZAF_AGENT_CONFIG" zaf_set_option ZAF_AGENT_CONFIGD "$ZAF_AGENT_CONFIGD" zaf_set_option ZAF_AGENT_BIN "$ZAF_AGENT_BIN" zaf_set_option ZAF_AGENT_RESTART "$ZAF_AGENT_RESTART" [ -n "$ZAF_PREPACKAGED_DIR" ] && zaf_set_option ZAF_PREPACKAGED_DIR "$ZAF_PREPACKAGED_DIR" - ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}-$$" if zaf_is_root; then zaf_configure_agent $ZAF_AGENT_OPTIONS "$@" @@ -274,7 +274,6 @@ zaf_install_all() { zaf_install_bin $i ${ZAF_BIN_DIR}/ done zaf_install_dir ${ZAF_PLUGINS_DIR} - zaf_install_dir ${ZAF_TMP_DIR}/p/zaf zaf_install_dir ${ZAF_PLUGINS_DIR} zaf_install_dir ${ZAF_BIN_DIR} } @@ -291,7 +290,7 @@ zaf_postconfigure() { exit 1 fi else - [ "${ZAF_GIT}" = 1 ] && [ -n "${INSTALL_PREFIX}" ] && git clone "${ZAF_PLUGINS_GITURL}" "${INSTALL_PREFIX}/${ZAF_REPO_DIR}" + [ "${ZAF_GIT}" = 1 ] && [ -n "${INSTALL_PREFIX}" ] && git clone "${ZAF_REPO_GITURL}" "${INSTALL_PREFIX}/${ZAF_REPO_DIR}" fi zaf_wrn "Install done. Use 'zaf' to get started." true @@ -300,7 +299,7 @@ zaf_postconfigure() { if [ -f "${ZAF_CFG_FILE}" ]; then . "${ZAF_CFG_FILE}" fi -ZAF_TMP_DIR="${ZAF_TMP_BASE-/tmp/zaf}-${USER}-$$" +ZAF_TMP_DIR="/tmp/zaf-installer/" # If debug is on, do not remove tmp dir if [ "$ZAF_DEBUG" -le 3 ]; then diff --git a/lib/ctrl.lib.sh b/lib/ctrl.lib.sh index 34ad79d..05f9b12 100644 --- a/lib/ctrl.lib.sh +++ b/lib/ctrl.lib.sh @@ -71,12 +71,13 @@ zaf_ctrl_get_item_option() { zaf_ctrl_check_deps() { local deps deps=$(zaf_ctrl_get_global_block <$1 | zaf_block_get_option "Depends-${ZAF_PKG}" ) - zaf_os_specific zaf_check_deps $deps + if ! zaf_os_specific zaf_check_deps $deps; then + zaf_err "Missing one of dependend system packages: $deps" + fi deps=$(zaf_ctrl_get_global_block <$1 | zaf_block_get_option "Depends-bin" ) for cmd in $deps; do if ! which $cmd >/dev/null; then - zaf_wrn "Missing binary dependency $cmd. Please install it first." - return 1 + zaf_err "Missing binary dependency $cmd. Please install it first." fi done } diff --git a/lib/os.lib.sh b/lib/os.lib.sh index a90b6a0..3972114 100644 --- a/lib/os.lib.sh +++ b/lib/os.lib.sh @@ -147,7 +147,7 @@ zaf_check_deps_rpm() { zaf_check_deps_opkg() { local p for p in $*; do - opkg info $p | grep -q 'Package:' || { echo "Missing package $p" >&2; return 1; } + opkg info $p | grep -q 'Package:' || { return 1; } done } @@ -156,7 +156,7 @@ zaf_check_deps_opkg() { zaf_check_deps_pkg() { local p for p in $*; do - pkg query -x "Package: %n" $p| grep -q 'Package:' || { echo "Missing package $p" >&2; return 1; } + pkg query -x "Package: %n" $p| grep -q 'Package:' || { return 1; } done } diff --git a/lib/zaf.lib.sh b/lib/zaf.lib.sh index 2d74bb8..9e1fbfe 100644 --- a/lib/zaf.lib.sh +++ b/lib/zaf.lib.sh @@ -144,10 +144,10 @@ zaf_check_agent_config() { # Update repo zaf_update_repo() { [ "$ZAF_GIT" != 1 ] && { zaf_err "Git is disabled or is not installed. Exiting."; } - if [ -z "${ZAF_PLUGINS_GITURL}" ] || [ -z "${ZAF_REPO_DIR}" ]; then + if [ -z "${ZAF_REPO_GITURL}" ] || [ -z "${ZAF_REPO_DIR}" ]; then zaf_err "This system is not configured for git repository." else - [ ! -d "${ZAF_REPO_DIR}" ] && git clone "${ZAF_PLUGINS_GITURL}" "${ZAF_REPO_DIR}" + [ ! -d "${ZAF_REPO_DIR}" ] && git clone "${ZAF_REPO_GITURL}" "${ZAF_REPO_DIR}" (cd ${ZAF_REPO_DIR} && git pull) fi } @@ -171,7 +171,11 @@ zaf_get_plugin_url() { if [ -n "${ZAF_PREPACKAGED_DIR}" ] && [ -d "${ZAF_PREPACKAGED_DIR}/$1" ]; then url="${ZAF_PREPACKAGED_DIR}/$1" else - zaf_err "Plugin $1 not found." + if [ -n "${ZAF_REPO_URL}" ]; then + url="${ZAF_REPO_URL}/$1" + else + zaf_err "Cannot find plugin $1" + fi fi fi fi @@ -183,6 +187,7 @@ zaf_get_plugin_url() { zaf_plugin_info() { local control="$1" + ! [ -f "$control" ] && zaf_err "Control file $control not found." plugin=$(zaf_ctrl_get_global_block <"${control}" | zaf_block_get_option Plugin) pdescription=$(zaf_ctrl_get_global_block <"${control}" | zaf_block_get_moption Description) pmaintainer=$(zaf_ctrl_get_global_block <"${control}" | zaf_block_get_option Maintainer) @@ -209,7 +214,7 @@ zaf_prepare_plugin() { local plugindir local control - url=$(zaf_get_plugin_url "$1")/control.zaf + url=$(zaf_get_plugin_url "$1")/control.zaf || exit $? plugindir="$2" control=${plugindir}/control.zaf zaf_install_dir "$plugindir" @@ -217,7 +222,7 @@ zaf_prepare_plugin() { if zaf_fetch_url "$url" >"${control}"; then zaf_ctrl_check_deps "${control}" else - zaf_err "Cannot fetch or write control file!" + zaf_err "prepare_plugin: Cannot fetch or write control file $control from url $url!" fi } @@ -231,7 +236,7 @@ zaf_install_plugin() { url=$(zaf_get_plugin_url "$1") plugin=$(zaf_ctrl_get_global_block <"${ZAF_TMP_DIR}/plugin/control.zaf" | zaf_block_get_option Plugin) plugindir="${ZAF_PLUGINS_DIR}"/$plugin - if zaf_prepare_plugin "$1" $plugindir; then + if [ -n "$plugin" ] && zaf_prepare_plugin "$1" $plugindir; then control=${plugindir}/control.zaf [ "$ZAF_DEBUG" -gt 0 ] && zaf_plugin_info "${control}" zaf_ctrl_check_deps "${control}" @@ -240,7 +245,7 @@ zaf_install_plugin() { | zaf_far '{PLUGINDIR}' "${plugindir}" >${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf zaf_dbg "Generated ${ZAF_AGENT_CONFIGD}/zaf_${plugin}.conf" else - zaf_err "Cannot install plugin $plugin to $plugindir!" + zaf_err "Cannot install plugin '$plugin' to $plugindir!" fi else zaf_err "Cannot prepare plugin $1" diff --git a/zaf b/zaf index 70f2e13..0870985 100755 --- a/zaf +++ b/zaf @@ -19,6 +19,7 @@ done [ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}" [ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1 +export ZAF_DEBUG # If debug is on, do not remove tmp dir if [ "$ZAF_DEBUG" -le 3 ]; then @@ -39,6 +40,25 @@ else [ -f ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh ] && . ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh fi +zaf_shift(){ + local s + + if echo $1 |grep -q "="; then + if echo $2 |grep -q "="; then + if echo $3 |grep -q "="; then + s=3 + else + s=2 + fi + else + s=1 + fi + else + s=0 + fi + echo $s +} + case $1 in check-agent-config) @@ -46,24 +66,25 @@ check-agent-config) ;; update) - zaf_wrn "Updating repository ${ZAF_PLUGINS_GITURL}..." + zaf_wrn "Updating repository ${ZAF_REPO_GITURL}..." zaf_update_repo ;; show) - if [ -z "$2" ]; then + shift $(zaf_shift "$@") + if [ -z "$1" ]; then zaf_list_plugins | while read plugin; do zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf done - else - if zaf_list_plugins | grep -q "^$2"; then - zaf_plugin_info $ZAF_PLUGINS_DIR/$2/control.zaf + else + if zaf_list_plugins | grep -q "^$1"; then + [ -f $ZAF_PLUGINS_DIR/$1/control.zaf ] && zaf_plugin_info $ZAF_PLUGINS_DIR/$1/control.zaf || zaf_err "Plugin $1 not installed." else - if echo $2 |grep -q ^http; then - zaf_prepare_plugin "$2" "$ZAF_TMP_DIR/plugin" + if echo $1 |grep -q ^http; then + zaf_prepare_plugin "$1" "$ZAF_TMP_DIR/plugin" zaf_plugin_info "$ZAF_TMP_DIR/plugin/control.zaf" else - zaf_err "Plugin $2 not installed." + zaf_err "Plugin $1 not installed." fi fi fi @@ -74,37 +95,39 @@ plugins) ;; items) - if [ -z "$2" ]; then + shift $(zaf_shift "$@") + if [ -z "$1" ]; then zaf_list_items else - zaf_list_plugin_items "$2" + zaf_list_plugin_items "$1" fi ;; test) - if echo $2|grep -q '\.'; then - zaf_test_item "$2" + shift $(zaf_shift "$@") + if echo $1|grep -q '\.'; then + zaf_test_item "$1" exit fi - if [ -n "$2" ]; then - shift + if [ -n "$1" ]; then plugins="$@" else plugins="$(zaf_list_plugins)" fi for p in $plugins; do + ! zaf_is_plugin $p && zaf_err "Unknown plugin $p" for i in $(zaf_list_plugin_items $p); do echo $i: $(zaf_test_item $i) done done ;; get) - if echo $2|grep -q '\.'; then - zaf_get_item "$2" + shift $(zaf_shift "$@") + if echo $1|grep -q '\.'; then + zaf_get_item "$1" exit fi - if [ -n "$2" ]; then - shift + if [ -n "$1" ]; then plugins="$@" else plugins="$(zaf_list_plugins)" @@ -116,7 +139,7 @@ get) done ;; install) - shift; + shift $(zaf_shift "$@") [ -z "$1" ] && echo "$0 install plugin [plugin]..." for p in $@; do if zaf_is_plugin "$p"; then @@ -130,7 +153,8 @@ install) ;; reinstall) - shift; + shift $(zaf_shift "$@") + shift [ -z "$1" ] && echo "$0 reinstall plugin [plugin]..." for p in $@; do if zaf_is_plugin "$p"; then @@ -144,7 +168,7 @@ reinstall) ;; remove) - shift; + shift $(zaf_shift "$@") [ -z "$1" ] && echo "$0 remove plugin [plugin]..." for p in $@; do if zaf_is_plugin "$p"; then @@ -156,26 +180,23 @@ remove) ;; self-upgrade) + shift $(zaf_shift "$@") zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-upgrade." rm -rf /tmp/zaf-installer && mkdir /tmp/zaf-installer if ! which curl >/dev/null; then zaf_err "Curl not found. Cannot continue. Please install it." fi - [ -z "$2" ] && auto=auto - set -e - mkdir -p /tmp/zaf-installer \ - && cd /tmp/zaf-installer \ - && (for i in lib/zaf.lib.sh lib/os.lib.sh lib/ctrl.lib.sh install.sh ; do echo curl -f -k -s -L -o - "$ZAF_URL/$i" >&2; curl -f -k -s -L -o - "$ZAF_URL/$i"; done) >install.sh \ - && chmod +x install.sh \ - && exec ./install.sh $auto "$@" + [ -z "$1" ] && auto=auto + zaf_fetch_url $ZAF_URL/$ZAF_VERSION/install.sh | exec sh -s "$@" exit ;; self-remove) + shift $(zaf_shift "$@") zaf_os_specific zaf_check_deps zaf && zaf_err "Zaf is installed as system package. Cannot self-remove." . /etc/zaf.conf - if [ "$2" = "force" ]; then + if [ "$1" = "force" ]; then rm -rf /etc/zaf.conf ${ZAF_PLUGINS_DIR} ${ZAF_REPO_DIR} ${ZAF_LIB_DIR} \ ${ZAF_BIN_DIR}/zaf ${ZAF_AGENT_CONFIGD}/zaf_* else @@ -190,6 +211,8 @@ self-remove) *) echo "$0 Version ${ZAF_VERSION}. Please use some of this commands:" + echo "$0 Cmd [ZAF_OPTION=value] ..." + echo "Commands:" echo "$0 update To update repo" echo "$0 plugins To list installed plugins" echo "$0 show [plugin] To show installed plugins or plugin info" @@ -200,6 +223,7 @@ self-remove) echo "$0 remove plugin To remove plugin" echo "$0 self-upgrade To self-upgrade zaf" echo "$0 self-remove To self-remove zaf and its config" + echo ;; esac