206 lines
6 KiB
Bash
Executable file
206 lines
6 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# FusionInventory Client installation for MacOSX
|
|
#
|
|
|
|
# Copyright © Yorick Barbanneau
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the “Software”), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# The Software is provided “as is”, without warranty of any kind, express or
|
|
# implied, including but not limited to the warranties of merchantability,
|
|
# fitness for a particular purpose and noninfringement. In no event shall the
|
|
# authors or copyright holders be liable for any claim, damages or other
|
|
# liability, whether in an action of contract, tort or otherwise, arising from,
|
|
# out of or in connection with the software or the use or other dealings in the
|
|
# Software
|
|
|
|
|
|
FI_INSTALLER_URL=$(curl -s https://github.com/fusioninventory/fusioninventory-agent/releases | awk -F '"' '/href="(https:\/\/.*\.pkg\.tar\.gz)"/{ print $2 }' | head -n 1)
|
|
VERSION="1.0"
|
|
DEBUG=0
|
|
default_tags=""
|
|
default_password=""
|
|
default_user=""
|
|
default_server=""
|
|
|
|
usage () {
|
|
cat << EOF
|
|
|
|
MacOS FusionInventory Installer -- Install
|
|
FusionInventory agent on MacOSX
|
|
|
|
arg: -s|--server <server>
|
|
arg: -u|--user <username>
|
|
arg: -p|--password <password>
|
|
arg: -t|--tag <tags>
|
|
|
|
EOF
|
|
}
|
|
|
|
show_version () {
|
|
printf "mac_fusinv-install version %s\n" $VERSION
|
|
exit 0
|
|
}
|
|
process_args() {
|
|
# While getops doesn't handle long parameters
|
|
# I need an personnal function
|
|
# Inspired by http://mywiki.wooledge.org/BashFAQ/035
|
|
while :; do
|
|
|
|
case $1 in
|
|
-d|--debug)
|
|
DEBUG=1
|
|
;;
|
|
-h|-\?|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
-p|--password)
|
|
password="$2"
|
|
shift
|
|
;;
|
|
-s|--server)
|
|
server="$2"
|
|
shift
|
|
;;
|
|
-u|--user)
|
|
user="$2"
|
|
shift
|
|
;;
|
|
-t|--tag)
|
|
tags="${tags} ${2}"
|
|
shift
|
|
;;
|
|
-v|--version)
|
|
show_version
|
|
exit 0
|
|
;;
|
|
*)
|
|
break
|
|
esac
|
|
shift
|
|
done
|
|
}
|
|
|
|
error () {
|
|
local message
|
|
message="$*"
|
|
1>&2 printf "ERROR: %s%b%s\n" $'\e[1;31m' "$message" $'\e[0m'
|
|
}
|
|
|
|
warning () {
|
|
local message
|
|
message="$*"
|
|
printf "WARNING: %s%b%s\n" $'\e[1;33m' "$message" $'\e[0m'
|
|
}
|
|
|
|
fatal () {
|
|
local code
|
|
local message
|
|
code="$1"
|
|
shift
|
|
message="$*"
|
|
error "$message"
|
|
exit "$code"
|
|
}
|
|
|
|
debug () {
|
|
local message
|
|
message="$*"
|
|
if (( DEBUG == 1 ))
|
|
then
|
|
printf "DEBUG: %s%b%s\n" $'\e[1;34m' "$message" $'\e[0m'
|
|
fi
|
|
}
|
|
|
|
message () {
|
|
local message="$*"
|
|
printf "%b\n" "${message}"
|
|
}
|
|
|
|
validate () {
|
|
local message
|
|
message="$*"
|
|
printf "%s%b%s\n" $'\e[1;32m' "$message" $'\e[0m'
|
|
}
|
|
|
|
clean () {
|
|
if [ -n "$tmp_dir" ]
|
|
then
|
|
message "Clean temporary files:"
|
|
debug "Temporary directory to remove: ${tmp_dir}"
|
|
rm -rf "$tmp_dir" || error "Can't clean ${tmp_dir}"
|
|
validate "\t-> Done"
|
|
fi
|
|
}
|
|
|
|
|
|
# Check user
|
|
[[ "$(whoami)" == "root" ]] || fatal 1 "You must be root (or use sudo) tu run this script."
|
|
|
|
trap clean 0
|
|
[[ "$FI_INSTALLER_URL" == "" ]] && fatal 5 "can't grab F.I. installer URL, check your connexion\n" "err"
|
|
process_args "$@"
|
|
|
|
debug "Process variables"
|
|
server="${server:=$default_server}"
|
|
user="${user:=$default_user}"
|
|
password="${password:=$default_password}"
|
|
tags="${tags:=$default_tags}"
|
|
|
|
debug "create temporary directory"
|
|
tmp_dir=$(mktemp -d -t fi_installer)
|
|
debug " ->${tmp_dir}"
|
|
|
|
debug "Installer URL ${FI_INSTALLER_URL}"
|
|
message "Downloading installer"
|
|
curl -s -L "${FI_INSTALLER_URL}" -o "${tmp_dir}/Installer.tar.gz" > /dev/null || fatal 10 "Error on fusion inventory installer download"
|
|
validate "\t-> Installer downloaded"
|
|
|
|
debug "Extract ${tmp_dir}\Installer.tar.gz"
|
|
message "Extract: "
|
|
tar -xf "${tmp_dir}/Installer.tar.gz" --directory "$tmp_dir" &> /dev/null || fatal 11 "can't extract"
|
|
validate "\t-> Installer extracted"
|
|
|
|
fi_directory=$(ls -d ${tmp_dir}/*/)
|
|
debug "Extracted directory: ${tmp_dir}"
|
|
conf_file="${fi_directory}Contents/Resources/agent.cfg"
|
|
debug "Agent configuration file to process : ${conf_file}"
|
|
|
|
message "Process Fusion inventory configuration file:"
|
|
message "\t-> Remove comments and blank lines"
|
|
sed -i '' '/^#/ d' "${conf_file}" &> /dev/null || warning "Can't remove comment lines"
|
|
sed -i '' '/^$/ d' "${conf_file}" &> /dev/null|| warning "Can't remove blank lines"
|
|
validate "\t-> Removed"
|
|
|
|
message "Configure server with ${server}:"
|
|
sed -i '' '1i\
|
|
server =
|
|
' "${conf_file}" &> /dev/null || fatal 20 "Can't insert server variable in configuration"
|
|
sed -E -i '' "s|^(server\ =).*|\1 ${server}|g" "${conf_file}" || fatal 21 "Can't add current server in configuration file"
|
|
validate "\t-> Configured"
|
|
|
|
message "Put username and password for proxy"
|
|
sed -E -i '' "s/^(user\ =).*/\1 ${user}/g" "${conf_file}" || fatal 30 "Can't add username in configuration file"
|
|
sed -E -i '' "s/^(password\ =).*/\1 ${password}/g" "${conf_file}" || fatal 31 "Can't add password in configuration file"
|
|
validate "\t-> Username and pass added"
|
|
|
|
message "Put tags in configuration file:"
|
|
debug "Tags to add: ${tags}"
|
|
sed -E -i '' "s/^(tag\ =).*/\1 ${tags}/g" "${conf_file}" || warning "Can't add tags in configuration file"
|
|
validate "\t-> Tags added"
|
|
|
|
message "Install Fusion Inventory Package: "
|
|
debug "Package to install: ${fi_directory}"
|
|
installer -pkg "${fi_directory}" -target / &>/dev/null || fatal 50 "Can't install package"
|
|
validate "\t-> Installed"
|
|
exit 0
|