mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-09 23:24:06 -08:00
6129f4722f
using master until we make the switch to main. As master will keep working after we switch branches, main will _not_ work _until_ we switch, and if for some reason we have to delay the branch migration, this will remain broken until we fix it.
964 lines
31 KiB
Bash
Executable file
964 lines
31 KiB
Bash
Executable file
#!/bin/bash
|
|
#/ Usage: snipeit.sh [-vh]
|
|
#/
|
|
#/ Install Snipe-IT open source asset management.
|
|
#/
|
|
#/ OPTIONS:
|
|
#/ -v | --verbose Enable verbose output.
|
|
#/ -h | --help Show this message.
|
|
|
|
######################################################
|
|
# Snipe-It Install Script #
|
|
# Script created by Mike Tucker #
|
|
# mtucker6784@gmail.com #
|
|
# #
|
|
# Feel free to modify, but please give #
|
|
# credit where it's due. Thanks! #
|
|
# #
|
|
# Updated Snipe-IT Install Script #
|
|
# Update created by Aaron Myers #
|
|
# Change log #
|
|
# * add support for php8.2, awslinux2, alma 8/9 #
|
|
# * fix rocky8/9 support
|
|
# * remove Fedora support because short timelines #
|
|
# * Added support for CentOS/Rocky 9 #
|
|
# * Fixed CentOS 7 repository for PHP 7.4 #
|
|
# * Removed support for CentOS 6 #
|
|
# * Removed support for Ubuntu < 20.04 #
|
|
# * Removed support for Ubuntu 21 (EOL) #
|
|
# * Removed support for Debian < 9 (EOL) #
|
|
# * Fixed permissions issue with Laravel cache #
|
|
# * Moved OS check to start of script #
|
|
# * Fixed timezone awk #
|
|
# * Minor display and logging improvements #
|
|
######################################################
|
|
|
|
# Parse arguments
|
|
while true; do
|
|
case "$1" in
|
|
-h|--help)
|
|
show_help=true
|
|
shift
|
|
;;
|
|
-v|--verbose)
|
|
set -x
|
|
verbose=true
|
|
shift
|
|
;;
|
|
-*)
|
|
echo "Error: invalid argument: '$1'" 1>&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
|
|
print_usage () {
|
|
grep '^#/' <"$0" | cut -c 4-
|
|
exit 1
|
|
}
|
|
|
|
if [ -n "$show_help" ]; then
|
|
print_usage
|
|
else
|
|
for x in "$@"; do
|
|
if [ "$x" = "--help" ] || [ "$x" = "-h" ]; then
|
|
print_usage
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# ensure running as root
|
|
if [ "$(id -u)" != "0" ]; then
|
|
#Debian doesnt have sudo if root has a password.
|
|
if ! hash sudo 2>/dev/null; then
|
|
exec su -c "$0" "$@"
|
|
else
|
|
exec sudo "$0" "$@"
|
|
fi
|
|
fi
|
|
|
|
clear
|
|
|
|
readonly APP_USER="snipeitapp"
|
|
readonly APP_NAME="snipeit"
|
|
readonly APP_PATH="/var/www/html/$APP_NAME"
|
|
readonly APP_LOG="/var/log/snipeit-install.log"
|
|
readonly COMPOSER_PATH="/home/$APP_USER"
|
|
|
|
progress () {
|
|
spin[0]="-"
|
|
spin[1]="\\"
|
|
spin[2]="|"
|
|
spin[3]="/"
|
|
|
|
echo -n " "
|
|
while kill -0 "$pid" > /dev/null 2>&1; do
|
|
for i in "${spin[@]}"; do
|
|
echo -ne "\\b$i"
|
|
sleep .3
|
|
done
|
|
done
|
|
echo ""
|
|
}
|
|
|
|
log () {
|
|
if [ -n "$verbose" ]; then
|
|
eval "$@" |& tee -a /var/log/snipeit-install.log
|
|
else
|
|
eval "$@" |& tee -a /var/log/snipeit-install.log >/dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
eol () {
|
|
if [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]] || [[ "$distro" == "Raspbian" ]] ; then
|
|
echo -e "\e[31m** \n $distro version $version ($codename) has reached end of life (EOL) and is not supported\n**\e[0m"
|
|
else
|
|
echo "$distro version $version has reached end of life (EOL) and is not supported"
|
|
fi
|
|
}
|
|
|
|
install_packages () {
|
|
case $distro in
|
|
Ubuntu|Debian)
|
|
for p in $PACKAGES; do
|
|
if dpkg -s "$p" >/dev/null 2>&1; then
|
|
echo " * $p already installed"
|
|
else
|
|
echo " * Installing $p"
|
|
log "DEBIAN_FRONTEND=noninteractive apt-get install -y $p"
|
|
fi
|
|
done;
|
|
;;
|
|
Raspbian)
|
|
for p in $PACKAGES; do
|
|
if dpkg -s "$p" >/dev/null 2>&1; then
|
|
echo " * $p already installed"
|
|
else
|
|
echo " * Installing $p"
|
|
log "DEBIAN_FRONTEND=noninteractive apt-get install -y -t buster $p"
|
|
fi
|
|
done;
|
|
;;
|
|
Centos)
|
|
for p in $PACKAGES; do
|
|
if yum list installed "$p" >/dev/null 2>&1; then
|
|
echo " * $p already installed"
|
|
else
|
|
echo " * Installing $p"
|
|
log "yum -y install $p"
|
|
fi
|
|
done;
|
|
;;
|
|
esac
|
|
}
|
|
|
|
create_virtualhost () {
|
|
{
|
|
echo "<VirtualHost *:80>"
|
|
echo " <Directory $APP_PATH/public>"
|
|
echo " Allow From All"
|
|
echo " AllowOverride All"
|
|
echo " Options -Indexes"
|
|
echo " </Directory>"
|
|
echo ""
|
|
echo " DocumentRoot $APP_PATH/public"
|
|
echo " ServerName $fqdn"
|
|
echo "</VirtualHost>"
|
|
} >> "$apachefile"
|
|
}
|
|
|
|
create_user () {
|
|
echo "* Creating Snipe-IT user."
|
|
|
|
if [[ "$distro" == "Ubuntu" ]] || [[ "$distro" == "Debian" ]] || [[ "$distro" == "Raspbian" ]] ; then
|
|
/usr/sbin/adduser --quiet --disabled-password --gecos 'Snipe-IT User' "$APP_USER"
|
|
su -c "/usr/sbin/usermod -a -G "$apache_group" "$APP_USER""
|
|
else
|
|
adduser "$APP_USER"
|
|
usermod -a -G "$apache_group" "$APP_USER"
|
|
fi
|
|
}
|
|
|
|
run_as_app_user () {
|
|
if ! hash sudo 2>/dev/null; then
|
|
su - $APP_USER -c "$@"
|
|
else
|
|
sudo -i -u $APP_USER "$@"
|
|
fi
|
|
}
|
|
|
|
install_composer () {
|
|
# https://getcomposer.org/doc/faqs/how-to-install-composer-programmatically.md
|
|
EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)"
|
|
|
|
if [[ "$distro" == "Debian" ]]; then
|
|
wget -q -O $COMPOSER_PATH/composer-setup.php https://getcomposer.org/installer && chown $APP_USER:$APP_USER $COMPOSER_PATH/composer-setup.php
|
|
ACTUAL_SIGNATURE="$(sha384sum $COMPOSER_PATH/composer-setup.php | awk '{ print $1 }')"
|
|
else
|
|
run_as_app_user php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
|
ACTUAL_SIGNATURE="$(run_as_app_user php -r "echo hash_file('SHA384', 'composer-setup.php');")"
|
|
fi
|
|
|
|
if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ]; then
|
|
>?&2 echo 'ERROR: Invalid composer installer signature'
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "$distro" == "Debian" ]]; then
|
|
run_as_app_user php $COMPOSER_PATH/composer-setup.php
|
|
run_as_app_user rm $COMPOSER_PATH/composer-setup.php
|
|
else
|
|
run_as_app_user php composer-setup.php
|
|
run_as_app_user rm composer-setup.php
|
|
fi
|
|
|
|
mv "$(eval echo ~$APP_USER)"/composer.phar /usr/local/bin/composer
|
|
}
|
|
|
|
install_snipeit () {
|
|
create_user
|
|
echo "* Creating MariaDB Database/User."
|
|
mysql -u root --execute="CREATE DATABASE snipeit;CREATE USER snipeit_dbuser@localhost IDENTIFIED BY '$mysqluserpw'; GRANT ALL PRIVILEGES ON snipeit.* TO snipeit_dbuser@localhost;"
|
|
|
|
echo -e "\n\n* Cloning Snipe-IT from github to the web directory."
|
|
log "git clone https://github.com/snipe/snipe-it $APP_PATH" & pid=$!
|
|
progress
|
|
pushd $APP_PATH
|
|
git checkout master
|
|
popd
|
|
|
|
echo "* Configuring .env file."
|
|
cp "$APP_PATH/.env.example" "$APP_PATH/.env"
|
|
|
|
#TODO escape SED delimiter in variables
|
|
sed -i '1 i\#Created By Snipe-it Installer' "$APP_PATH/.env"
|
|
sed -i "s|^\\(APP_TIMEZONE=\\).*|\\1$tzone|" "$APP_PATH/.env"
|
|
sed -i "s|^\\(DB_HOST=\\).*|\\1localhost|" "$APP_PATH/.env"
|
|
sed -i "s|^\\(DB_DATABASE=\\).*|\\1snipeit|" "$APP_PATH/.env"
|
|
sed -i "s|^\\(DB_USERNAME=\\).*|\\1snipeit_dbuser|" "$APP_PATH/.env"
|
|
sed -i "s|^\\(DB_PASSWORD=\\).*|\\1'$mysqluserpw'|" "$APP_PATH/.env"
|
|
sed -i "s|^\\(APP_URL=\\).*|\\1http://$fqdn|" "$APP_PATH/.env"
|
|
|
|
echo "* Installing composer."
|
|
install_composer
|
|
|
|
echo "* Setting permissions."
|
|
for chmod_dir in "$APP_PATH/storage" "$APP_PATH/public/uploads" "$APP_PATH/bootstrap/cache"; do
|
|
chmod -R 775 "$chmod_dir"
|
|
done
|
|
|
|
chown -R "$APP_USER":"$apache_group" "$APP_PATH"
|
|
|
|
echo "* Running composer."
|
|
# We specify the path to composer because CentOS lacks /usr/local/bin in $PATH when using sudo
|
|
if [[ "$distro" == "Debian" ]]; then
|
|
run_as_app_user /usr/local/bin/composer install --no-dev --prefer-source --working-dir "$APP_PATH"
|
|
else
|
|
echo "* This can take 5 minutes or more. Tail $APP_LOG for more full command output." & pid=$!
|
|
progress
|
|
log "run_as_app_user /usr/local/bin/composer install --no-dev --prefer-source --working-dir "$APP_PATH""
|
|
fi
|
|
|
|
chgrp -R "$apache_group" "$APP_PATH/vendor"
|
|
|
|
echo "* Generating the application key."
|
|
log "php $APP_PATH/artisan key:generate --force"
|
|
|
|
echo "* Artisan Migrate."
|
|
log "php $APP_PATH/artisan migrate --force"
|
|
|
|
echo "* Creating scheduler cron."
|
|
(echo "* * * * * /usr/bin/php $APP_PATH/artisan schedule:run >> /dev/null 2>&1") | run_as_app_user crontab -
|
|
}
|
|
|
|
set_firewall () {
|
|
if [ "$(firewall-cmd --state)" == "running" ]; then
|
|
echo "* Configuring firewall to allow HTTP traffic only."
|
|
log "firewall-cmd --zone=public --add-port=http/tcp --permanent"
|
|
log "firewall-cmd --reload"
|
|
fi
|
|
}
|
|
|
|
set_selinux () {
|
|
#Check if SELinux is enforcing
|
|
if [ "$(getenforce)" == "Enforcing" ]; then
|
|
echo "* Configuring SELinux."
|
|
#Required for ldap integration
|
|
setsebool -P httpd_can_connect_ldap on
|
|
#Sets SELinux context type so that scripts running in the web server process are allowed read/write access
|
|
chcon -R -h -t httpd_sys_rw_content_t "$APP_PATH/storage/"
|
|
chcon -R -h -t httpd_sys_rw_content_t "$APP_PATH/public/"
|
|
fi
|
|
}
|
|
|
|
set_hosts () {
|
|
echo "* Setting up hosts file."
|
|
echo >> /etc/hosts "127.0.0.1 $(hostname) $fqdn"
|
|
}
|
|
|
|
rename_default_vhost () {
|
|
log "mv /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/111-default.conf"
|
|
log "mv /etc/apache2/sites-enabled/snipeit.conf /etc/apache2/sites-enabled/000-snipeit.conf"
|
|
}
|
|
|
|
|
|
if [[ -f /etc/debian_version || -f /etc/lsb-release ]]; then
|
|
distro="$(lsb_release -is)"
|
|
version="$(lsb_release -rs)"
|
|
codename="$(lsb_release -cs)"
|
|
elif [ -f /etc/os-release ]; then
|
|
# shellcheck disable=SC1091
|
|
distro="$(source /etc/os-release && echo "$ID")"
|
|
# shellcheck disable=SC1091
|
|
version="$(source /etc/os-release && echo "$VERSION_ID")"
|
|
#Order is important here. If /etc/os-release and /etc/centos-release exist, we're on centos 7.
|
|
#If only /etc/centos-release exist, we're on centos6(or earlier). Centos-release is less parsable,
|
|
#so lets assume that it's version 6 (Plus, who would be doing a new install of anything on centos5 at this point..)
|
|
#/etc/os-release properly detects fedora
|
|
elif [ -f /etc/centos-release ]; then
|
|
distro="centos"
|
|
version="6"
|
|
else
|
|
distro="unsupported"
|
|
fi
|
|
|
|
echo '
|
|
_____ _ __________
|
|
/ ___/____ (_)___ ___ / _/_ __/
|
|
\__ \/ __ \/ / __ \/ _ \______ / / / /
|
|
___/ / / / / / /_/ / __/_____// / / /
|
|
/____/_/ /_/_/ .___/\___/ /___/ /_/
|
|
/_/
|
|
'
|
|
|
|
echo ""
|
|
echo " Welcome to Snipe-IT Inventory Installer for CentOS, Rocky, Debian, and Ubuntu!"
|
|
echo ""
|
|
echo " Installation log located: $APP_LOG"
|
|
echo ""
|
|
shopt -s nocasematch
|
|
case $distro in
|
|
*ubuntu*)
|
|
echo " The installer has detected $distro version $version codename $codename."
|
|
distro=Ubuntu
|
|
apache_group=www-data
|
|
apachefile=/etc/apache2/sites-available/$APP_NAME.conf
|
|
;;
|
|
*raspbian*)
|
|
echo " The installer has detected $distro version $version codename $codename."
|
|
distro=Raspbian
|
|
apache_group=www-data
|
|
apachefile=/etc/apache2/sites-available/$APP_NAME.conf
|
|
;;
|
|
*Debian|debian*)
|
|
echo " The installer has detected $distro version $version codename $codename."
|
|
distro=Debian
|
|
apache_group=www-data
|
|
apachefile=/etc/apache2/sites-available/$APP_NAME.conf
|
|
;;
|
|
*amzn*|*redhat*|*alma*|*rhel*|*rocky*)
|
|
echo " The installer has detected $distro version $version."
|
|
distro=Centos
|
|
apache_group=apache
|
|
apachefile=/etc/httpd/conf.d/$APP_NAME.conf
|
|
;;
|
|
*fedora*)
|
|
echo " The installer does not support Fedora"
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo " The installer was unable to determine your OS. Exiting for safety. Exiting for safety."
|
|
exit 1
|
|
;;
|
|
esac
|
|
shopt -u nocasematch
|
|
|
|
set_fqdn () {
|
|
echo -n " Q. What is the FQDN of your server? ($(hostname --fqdn)): "
|
|
read -r fqdn
|
|
if [ -z "$fqdn" ]; then
|
|
readonly fqdn="$(hostname --fqdn)"
|
|
fi
|
|
echo " Setting to $fqdn"
|
|
echo ""
|
|
}
|
|
|
|
set_dbpass () {
|
|
ans=default
|
|
until [[ $ans == "yes" ]] || [[ $ans == "no" ]]; do
|
|
echo -n " Q. Do you want to automatically create the SnipeIT database user password? (y/n) "
|
|
read -r setpw
|
|
|
|
case $setpw in
|
|
[yY] | [yY][Ee][Ss] )
|
|
mysqluserpw="$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16; echo)"
|
|
echo ""
|
|
ans="yes"
|
|
;;
|
|
[nN] | [n|N][O|o] )
|
|
echo -n " Q. What do you want your snipeit user password to be?"
|
|
read -rs mysqluserpw
|
|
echo ""
|
|
ans="no"
|
|
;;
|
|
*) echo " Invalid answer. Please type y or n"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
case $distro in
|
|
Debian)
|
|
if [[ "$version" =~ ^12 ]]; then
|
|
# Install for Debian 12.x
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo "* Adding PHP repository."
|
|
log "apt-get install -y apt-transport-https lsb-release ca-certificates"
|
|
log "wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg"
|
|
echo "deb https://packages.sury.org/php/ $codename main" > /etc/apt/sources.list.d/php.list
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="mariadb-server mariadb-client apache2 libapache2-mod-php8.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
/usr/sbin/a2enmod rewrite
|
|
/usr/sbin/a2ensite $APP_NAME.conf
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
/usr/sbin/service apache2 restart
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
run_as_app_user php $APP_PATH/artisan cache:clear
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
elif [[ "$version" =~ ^11 ]]; then
|
|
# Install for Debian 11.x
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo "* Adding PHP repository."
|
|
log "apt-get install -y apt-transport-https lsb-release ca-certificates"
|
|
log "wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg"
|
|
echo "deb https://packages.sury.org/php/ $codename main" > /etc/apt/sources.list.d/php.list
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="mariadb-server mariadb-client apache2 libapache2-mod-php8.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
/usr/sbin/a2enmod rewrite
|
|
/usr/sbin/a2ensite $APP_NAME.conf
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
/usr/sbin/service apache2 restart
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
run_as_app_user php $APP_PATH/artisan cache:clear
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
elif [[ "$version" =~ ^10 ]]; then
|
|
# Install for Debian 10.x
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo "* Adding PHP repository."
|
|
log "apt-get install -y apt-transport-https lsb-release ca-certificates"
|
|
log "wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg"
|
|
echo "deb https://packages.sury.org/php/ $codename main" > /etc/apt/sources.list.d/php.list
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="mariadb-server mariadb-client apache2 libapache2-mod-php8.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
/usr/sbin/a2enmod rewrite
|
|
/usr/sbin/a2ensite $APP_NAME.conf
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
/usr/sbin/service apache2 restart
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
run_as_app_user php $APP_PATH/artisan cache:clear
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
elif [[ "$version" =~ ^9 ]]; then
|
|
eol
|
|
exit 1
|
|
else
|
|
echo "Unsupported Debian version. Version found: $version"
|
|
exit 1
|
|
fi
|
|
;;
|
|
Ubuntu)
|
|
if [ "${version//./}" -ge "2304" ]; then
|
|
# Install for Ubuntu 23.04 and 23.10
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="cron mariadb-server mariadb-client apache2 libapache2-mod-php php php-mcrypt php-curl php-mysql php-gd php-ldap php-zip php-mbstring php-xml php-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
log "phpenmod mcrypt"
|
|
log "phpenmod mbstring"
|
|
log "a2enmod rewrite"
|
|
log "a2ensite $APP_NAME.conf"
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Starting MariaDB."
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
log "systemctl restart apache2"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
elif [ "${version//./}" -eq "2204" ]; then
|
|
# Install for Ubuntu 22.04
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo "* Set up Ondrej PHP repository"
|
|
echo "# Odrej PHP repo for ability to choose non-distro PHP versions" > /etc/apt/sources.list.d/ppa_ondrej_php_$codename.list
|
|
echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $codename main" >> /etc/apt/sources.list.d/ppa_ondrej_php_$codename.list
|
|
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="cron mariadb-server mariadb-client apache2 libapache2-mod-php8.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
log "phpenmod mcrypt"
|
|
log "phpenmod mbstring"
|
|
log "a2enmod rewrite"
|
|
log "a2ensite $APP_NAME.conf"
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Starting MariaDB."
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
log "systemctl restart apache2"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
elif [ "${version//./}" == "2110" ]; then
|
|
# Ubuntu 21.10 is no longer supported
|
|
echo "Unsupported Ubuntu version. Version found: $version"
|
|
exit 1
|
|
elif [ "${version//./}" == "2004" ]; then
|
|
# Install for Ubuntu 20.04
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
|
|
echo "* Set up Ondrej PHP repository"
|
|
echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $codename main" >> /etc/apt/sources.list.d/ppa_ondrej_php_$codename.list
|
|
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="cron mariadb-server mariadb-client apache2 libapache2-mod-php8.28.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
log "phpenmod mcrypt"
|
|
log "phpenmod mbstring"
|
|
log "a2enmod rewrite"
|
|
log "a2ensite $APP_NAME.conf"
|
|
rename_default_vhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Starting MariaDB."
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
log "systemctl restart apache2"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
elif [ "${version//./}" == "1804" ]; then
|
|
eol
|
|
exit 1
|
|
else
|
|
echo "Unsupported Ubuntu version. Version found: $version"
|
|
exit 1
|
|
fi
|
|
;;
|
|
Raspbian)
|
|
if [[ "$version" =~ ^10 ]]; then
|
|
# Install for Raspbian 9.x
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(cat /etc/timezone)
|
|
cat >/etc/apt/sources.list.d/10-buster.list <<EOL
|
|
deb http://mirrordirector.raspbian.org/raspbian/ buster main contrib non-free rpi
|
|
EOL
|
|
|
|
cat >/etc/apt/preferences.d/10-buster <<EOL
|
|
Package: *
|
|
Pin: release n=stretch
|
|
Pin-Priority: 900
|
|
|
|
Package: *
|
|
Pin: release n=buster
|
|
Pin-Priority: 750
|
|
EOL
|
|
echo "* Set up Ondrej PHP repository"
|
|
echo "deb http://ppa.launchpad.net/ondrej/php/ubuntu $codename main" >> /etc/apt/sources.list.d/ppa_ondrej_php_$codename.list
|
|
|
|
echo -n "* Updating installed packages."
|
|
log "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="mariadb-server mariadb-client apache2 libapache2-mod-php8.2 php8.2 php8.2-mcrypt php8.2-curl php8.2-mysql php8.2-gd php8.2-ldap php8.2-zip php8.2-mbstring php8.2-xml php8.2-bcmath curl git unzip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
log "phpenmod mcrypt"
|
|
log "phpenmod mbstring"
|
|
log "a2enmod rewrite"
|
|
log "a2ensite $APP_NAME.conf"
|
|
|
|
set_hosts
|
|
|
|
echo "* Starting MariaDB."
|
|
log "systemctl start mariadb.service"
|
|
|
|
echo "* Securing MariaDB."
|
|
/usr/bin/mysql_secure_installation
|
|
|
|
install_snipeit
|
|
|
|
echo "* Restarting Apache httpd."
|
|
log "systemctl restart apache2"
|
|
else
|
|
echo "Unsupported Raspbian version. Version found: $version"
|
|
exit 1
|
|
fi
|
|
;;
|
|
Centos)
|
|
if [[ "$version" =~ ^6 ]]; then
|
|
eol
|
|
exit 1
|
|
elif [[ "$version" =~ ^2 || "$distro" == "amzn" ]]; then
|
|
# Install for amazon linux 2
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(timedatectl | gawk -F'[: ]' ' $9 ~ /zone/ {print $11}');
|
|
|
|
amazon-linux-extras install -y php8.2
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="httpd mariadb-server git unzip php php-mysqlnd php-bcmath php-embedded php-gd php-mbstring php-mcrypt php-ldap php-json php-simplexml php-process php-zip php-sodium"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Setting MariaDB to start on boot and starting MariaDB."
|
|
log "systemctl enable mariadb.service"
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
set_firewall
|
|
|
|
echo "* Setting Apache httpd to start on boot and starting service."
|
|
log "systemctl enable httpd.service"
|
|
log "systemctl restart httpd.service"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
set_selinux
|
|
|
|
elif [[ "$version" =~ ^7 ]]; then
|
|
# Install for CentOS/Redhat 7
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(timedatectl | gawk -F'[: ]' ' $9 ~ /zone/ {print $11}');
|
|
|
|
echo "* Adding Remi and EPEL-Release repositories."
|
|
log "yum -y install wget epel-release yum-utils" & pid=$!
|
|
progress
|
|
log "yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm" & pid=$!
|
|
progress
|
|
log "yum-config-manager --enable remi-php82"
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="httpd mariadb-server git unzip php php-mysqlnd php-bcmath php-embedded php-gd php-mbstring php-mcrypt php-ldap php-json php-simplexml php-process php-zip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Setting MariaDB to start on boot and starting MariaDB."
|
|
log "systemctl enable mariadb.service"
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
set_firewall
|
|
|
|
echo "* Setting Apache httpd to start on boot and starting service."
|
|
log "systemctl enable httpd.service"
|
|
log "systemctl restart httpd.service"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
set_selinux
|
|
|
|
elif [[ "$version" =~ ^8 ]]; then
|
|
# Install for CentOS/Redhat 8
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(timedatectl | grep "Time zone" | awk 'BEGIN { FS"("}; {print $3}');
|
|
|
|
echo "* Adding Remi and EPEL-Release repositories."
|
|
log "yum -y install wget epel-release yum-utils" & pid=$!
|
|
progress
|
|
log "yum -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm" & pid=$!
|
|
progress
|
|
log "rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el8"
|
|
log "dnf -y module enable php:remi-8.2" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
|
|
PACKAGES="httpd mariadb-server git unzip php php-mysqlnd php-bcmath php-embedded php-gd php-mbstring php-mcrypt php-ldap php-json php-simplexml php-process php-zip"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Setting MariaDB to start on boot and starting MariaDB."
|
|
log "systemctl enable mariadb.service"
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
set_firewall
|
|
|
|
echo "* Setting Apache httpd to start on boot and starting service."
|
|
log "systemctl enable httpd.service"
|
|
log "systemctl restart httpd.service"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
set_selinux
|
|
|
|
elif [[ "$version" =~ ^9 ]]; then
|
|
# Install for CentOS/Alma/Redhat 9
|
|
set_fqdn
|
|
set_dbpass
|
|
tzone=$(timedatectl | grep "Time zone" | awk 'BEGIN { FS"("}; {print $3}');
|
|
|
|
echo "* Adding EPEL-release repository."
|
|
log "dnf -y install wget epel-release" & pid=$!
|
|
progress
|
|
log "yum -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm" & pid=$!
|
|
progress
|
|
log "rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9"
|
|
log "dnf -y module enable php:remi-8.2" & pid=$!
|
|
progress
|
|
|
|
echo "* Installing Apache httpd, PHP, MariaDB, and other requirements."
|
|
PACKAGES="httpd mariadb-server git unzip php-mysqlnd php-bcmath php-cli php-embedded php-gd php-mbstring php-ldap php-simplexml php-process php-sodium php-pecl-zip php-fpm"
|
|
install_packages
|
|
|
|
echo "* Configuring Apache."
|
|
create_virtualhost
|
|
|
|
set_hosts
|
|
|
|
echo "* Setting MariaDB to start on boot and starting MariaDB."
|
|
log "systemctl enable mariadb.service"
|
|
log "systemctl start mariadb.service"
|
|
|
|
install_snipeit
|
|
|
|
set_firewall & pid=$!
|
|
progress
|
|
|
|
echo "* Setting Apache httpd to start on boot and starting service."
|
|
log "systemctl enable httpd.service"
|
|
log "systemctl restart httpd.service"
|
|
|
|
echo "* Setting php-fpm to start on boot and starting service."
|
|
log "systemctl enable php-fpm.service"
|
|
log "systemctl restart php-fpm.service"
|
|
|
|
echo "* Clearing cache and setting final permissions."
|
|
chmod 777 -R $APP_PATH/storage/framework/cache/
|
|
log "run_as_app_user php $APP_PATH/artisan cache:clear"
|
|
chmod 775 -R $APP_PATH/storage/
|
|
|
|
set_selinux
|
|
|
|
else
|
|
echo "Unsupported CentOS version. Version found: $version"
|
|
exit 1
|
|
fi
|
|
;;
|
|
*)
|
|
echo "Your OS was not detected correctly."
|
|
exit 1
|
|
esac
|
|
|
|
setupmail=default
|
|
until [[ $setupmail == "yes" ]] || [[ $setupmail == "no" ]]; do
|
|
echo " Q. Do you want to configure mail server settings now? This can be done later too. "
|
|
echo -n " * You will need mail server address, port, user and password among other items. (y/n) "
|
|
read -r setupmail
|
|
|
|
case $setupmail in
|
|
[yY] | [yY][Ee][Ss] )
|
|
echo -n " Outgoing mailserver address:"
|
|
read -r mailhost
|
|
sed -i "s|^\\(MAIL_HOST=\\).*|\\1$mailhost|" "$APP_PATH/.env"
|
|
|
|
echo -n " Server port number:"
|
|
read -r mailport
|
|
sed -i "s|^\\(MAIL_PORT=\\).*|\\1$mailport|" "$APP_PATH/.env"
|
|
|
|
echo -n " Username:"
|
|
read -r mailusername
|
|
sed -i "s|^\\(MAIL_USERNAME=\\).*|\\1$mailusername|" "$APP_PATH/.env"
|
|
|
|
echo -n " Password:"
|
|
read -rs mailpassword
|
|
sed -i "s|^\\(MAIL_PASSWORD=\\).*|\\1$mailpassword|" "$APP_PATH/.env"
|
|
echo ""
|
|
|
|
echo -n " Encryption(null/TLS/SSL):"
|
|
read -r mailencryption
|
|
sed -i "s|^\\(MAIL_ENCRYPTION=\\).*|\\1$mailencryption|" "$APP_PATH/.env"
|
|
|
|
echo -n " From address:"
|
|
read -r mailfromaddr
|
|
sed -i "s|^\\(MAIL_FROM_ADDR=\\).*|\\1$mailfromaddr|" "$APP_PATH/.env"
|
|
|
|
echo -n " From name:"
|
|
read -r mailfromname
|
|
sed -i "s|^\\(MAIL_FROM_NAME=\\).*|\\1$mailfromname|" "$APP_PATH/.env"
|
|
|
|
echo -n " Reply to address:"
|
|
read -r mailreplytoaddr
|
|
sed -i "s|^\\(MAIL_REPLYTO_ADDR=\\).*|\\1$mailreplytoaddr|" "$APP_PATH/.env"
|
|
|
|
echo -n " Reply to name:"
|
|
read -r mailreplytoname
|
|
sed -i "s|^\\(MAIL_REPLYTO_NAME=\\).*|\\1$mailreplytoname|" "$APP_PATH/.env"
|
|
setupmail="yes"
|
|
;;
|
|
[nN] | [n|N][O|o] )
|
|
setupmail="no"
|
|
;;
|
|
*) echo " Invalid answer. Please type y or n"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
echo ""
|
|
echo " ***Open http://$fqdn to login to Snipe-IT.***"
|
|
echo ""
|
|
echo ""
|
|
echo "* Cleaning up..."
|
|
# rm -f snipeit.sh
|
|
# rm -f install.sh
|
|
echo "* Installation log located in $APP_LOG."
|
|
echo "* Finished!"
|
|
sleep 1
|