2016-03-25 01:18:05 -07:00
#!/bin/bash
2018-06-20 19:59:44 -07:00
#/ Usage: snipeit.sh [-vh]
2018-04-29 06:09:46 -07:00
#/
#/ Install Snipe-IT open source asset management.
#/
#/ OPTIONS:
#/ -v | --verbose Enable verbose output.
#/ -h | --help Show this message.
2016-03-25 01:18:05 -07:00
######################################################
# 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! #
2022-11-22 08:47:58 -08:00
# #
# Updated Snipe-IT Install Script #
# Update created by Aaron Myers #
# Change log #
2024-01-05 00:06:00 -08:00
# * add support for php8.2, awslinux2, alma 8/9 #
# * fix rocky8/9 support
# * remove Fedora support because short timelines #
2022-11-22 08:47:58 -08:00
# * Added support for CentOS/Rocky 9 #
# * Fixed CentOS 7 repository for PHP 7.4 #
# * Removed support for CentOS 6 #
2023-12-20 18:13:36 -08:00
# * Removed support for Ubuntu < 20.04 #
2022-11-22 08:47:58 -08:00
# * 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 #
2016-03-25 01:18:05 -07:00
######################################################
2018-04-29 06:09:46 -07:00
# 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-
2018-06-20 19:59:44 -07:00
exit 1
2018-04-29 06:09:46 -07:00
}
if [ -n " $show_help " ] ; then
print_usage
else
for x in " $@ " ; do
if [ " $x " = "--help" ] || [ " $x " = "-h" ] ; then
print_usage
fi
done
fi
2016-03-25 01:18:05 -07:00
# ensure running as root
if [ " $( id -u) " != "0" ] ; then
2017-10-05 00:02:14 -07:00
#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
2016-03-25 01:18:05 -07:00
fi
2017-10-05 00:02:14 -07:00
2016-03-25 01:18:05 -07:00
clear
2018-06-20 19:59:44 -07:00
readonly APP_USER = "snipeitapp"
readonly APP_NAME = "snipeit"
2018-07-30 18:09:37 -07:00
readonly APP_PATH = " /var/www/html/ $APP_NAME "
2022-11-22 08:47:58 -08:00
readonly APP_LOG = "/var/log/snipeit-install.log"
readonly COMPOSER_PATH = " /home/ $APP_USER "
2016-09-20 13:26:53 -07:00
progress ( ) {
2018-04-29 06:09:46 -07:00
spin[ 0] = "-"
spin[ 1] = "\\"
spin[ 2] = "|"
spin[ 3] = "/"
2018-06-20 19:59:44 -07:00
2018-04-29 06:09:46 -07:00
echo -n " "
while kill -0 " $pid " > /dev/null 2>& 1; do
for i in " ${ spin [@] } " ; do
echo -ne " \\b $i "
2018-06-20 19:59:44 -07:00
sleep .3
2017-10-07 12:45:25 -07:00
done
2018-04-29 06:09:46 -07:00
done
echo ""
2016-09-20 13:26:53 -07:00
}
2017-01-10 23:07:06 -08:00
log ( ) {
2018-04-29 06:09:46 -07:00
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
2016-09-29 22:37:05 -07:00
}
2022-11-22 08:47:58 -08:00
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
}
2018-04-29 06:09:46 -07:00
install_packages ( ) {
case $distro in
2022-11-22 08:47:58 -08:00
Ubuntu| Debian)
2018-04-29 06:09:46 -07:00
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 ;
; ;
2022-11-22 08:47:58 -08:00
Raspbian)
2018-07-27 12:57:39 -07:00
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 ;
; ;
2022-11-22 08:47:58 -08:00
Centos)
2018-04-29 06:09:46 -07:00
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
2018-03-04 21:48:44 -08:00
}
2018-04-29 06:09:46 -07:00
create_virtualhost ( ) {
{
echo "<VirtualHost *:80>"
2018-06-20 19:59:44 -07:00
echo " <Directory $APP_PATH /public> "
2018-04-29 06:09:46 -07:00
echo " Allow From All"
echo " AllowOverride All"
2018-07-23 20:40:04 -07:00
echo " Options -Indexes"
2018-04-29 06:09:46 -07:00
echo " </Directory>"
echo ""
2018-06-20 19:59:44 -07:00
echo " DocumentRoot $APP_PATH /public "
2018-04-29 06:09:46 -07:00
echo " ServerName $fqdn "
echo "</VirtualHost>"
} >> " $apachefile "
2018-03-04 21:48:44 -08:00
}
2018-06-20 19:59:44 -07:00
create_user ( ) {
echo "* Creating Snipe-IT user."
2022-11-22 08:47:58 -08:00
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 ""
2018-06-20 19:59:44 -07:00
else
adduser " $APP_USER "
2022-11-22 08:47:58 -08:00
usermod -a -G " $apache_group " " $APP_USER "
2018-06-20 19:59:44 -07:00
fi
}
run_as_app_user ( ) {
if ! hash sudo 2>/dev/null; then
2022-11-22 08:47:58 -08:00
su - $APP_USER -c " $@ "
2018-06-20 19:59:44 -07:00
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) "
2022-11-22 08:47:58 -08:00
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
2018-06-20 19:59:44 -07:00
fi
2022-11-22 08:47:58 -08:00
if [ [ " $distro " = = "Debian" ] ] ; then
2023-11-30 10:22:59 -08:00
run_as_app_user php $COMPOSER_PATH /composer-setup.php
run_as_app_user rm $COMPOSER_PATH /composer-setup.php
2022-11-22 08:47:58 -08:00
else
run_as_app_user php composer-setup.php
run_as_app_user rm composer-setup.php
fi
2018-06-20 19:59:44 -07:00
mv " $( eval echo ~$APP_USER ) " /composer.phar /usr/local/bin/composer
}
2018-04-29 06:09:46 -07:00
install_snipeit ( ) {
2018-06-20 19:59:44 -07:00
create_user
2018-04-29 06:09:46 -07:00
echo "* Creating MariaDB Database/User."
2024-01-04 16:42:43 -08:00
mysql -u root --execute= " CREATE DATABASE snipeit;CREATE USER snipeit_dbuser@localhost IDENTIFIED BY ' $mysqluserpw '; GRANT ALL PRIVILEGES ON snipeit.* TO snipeit_dbuser@localhost; "
2018-04-29 06:09:46 -07:00
2022-11-22 08:47:58 -08:00
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
2023-11-30 00:47:27 -08:00
pushd $APP_PATH
2024-01-08 10:08:52 -08:00
git checkout master
2023-11-30 00:47:27 -08:00
popd
2018-04-29 06:09:46 -07:00
echo "* Configuring .env file."
2018-06-20 19:59:44 -07:00
cp " $APP_PATH /.env.example " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
#TODO escape SED delimiter in variables
2018-06-20 19:59:44 -07:00
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 "
2023-12-20 18:13:36 -08:00
sed -i "s|^\\(DB_USERNAME=\\).*|\\1snipeit_dbuser|" " $APP_PATH /.env "
2021-04-14 10:22:31 -07:00
sed -i " s|^\\(DB_PASSWORD=\\).*|\\1' $mysqluserpw '| " " $APP_PATH /.env "
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(APP_URL=\\).*|\\1http:// $fqdn | " " $APP_PATH /.env "
echo "* Installing composer."
install_composer
2017-10-07 12:45:25 -07:00
2018-04-29 06:09:46 -07:00
echo "* Setting permissions."
2022-11-22 08:47:58 -08:00
for chmod_dir in " $APP_PATH /storage " " $APP_PATH /public/uploads " " $APP_PATH /bootstrap/cache " ; do
2018-06-20 19:59:44 -07:00
chmod -R 775 " $chmod_dir "
2018-04-29 06:09:46 -07:00
done
2017-10-06 22:58:41 -07:00
2018-06-20 19:59:44 -07:00
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
2022-11-22 08:47:58 -08:00
if [ [ " $distro " = = "Debian" ] ] ; then
2023-11-30 10:22:59 -08:00
run_as_app_user /usr/local/bin/composer install --no-dev --prefer-source --working-dir " $APP_PATH "
2022-11-22 08:47:58 -08:00
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
2018-06-20 19:59:44 -07:00
2022-11-22 08:47:58 -08:00
chgrp -R " $apache_group " " $APP_PATH /vendor "
2017-10-06 22:58:41 -07:00
2018-04-29 06:09:46 -07:00
echo "* Generating the application key."
2018-06-20 19:59:44 -07:00
log " php $APP_PATH /artisan key:generate --force "
2017-10-06 22:58:41 -07:00
2018-04-29 06:09:46 -07:00
echo "* Artisan Migrate."
2018-06-20 19:59:44 -07:00
log " php $APP_PATH /artisan migrate --force "
2018-04-29 06:09:46 -07:00
echo "* Creating scheduler cron."
2022-11-22 08:47:58 -08:00
( echo " * * * * * /usr/bin/php $APP_PATH /artisan schedule:run >> /dev/null 2>&1 " ) | run_as_app_user crontab -
2017-10-05 21:27:00 -07:00
}
2018-04-29 06:09:46 -07:00
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
2017-11-08 02:37:34 -08:00
}
2018-04-29 06:09:46 -07:00
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
2018-06-20 23:28:20 -07:00
chcon -R -h -t httpd_sys_rw_content_t " $APP_PATH /storage/ "
chcon -R -h -t httpd_sys_rw_content_t " $APP_PATH /public/ "
2018-04-29 06:09:46 -07:00
fi
2018-03-04 21:48:44 -08:00
}
2018-04-29 06:09:46 -07:00
set_hosts ( ) {
echo "* Setting up hosts file."
2018-06-20 19:59:44 -07:00
echo >> /etc/hosts " 127.0.0.1 $( hostname) $fqdn "
2018-03-15 10:20:42 -07:00
}
2021-04-05 21:06:53 -07:00
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
2018-04-29 06:09:46 -07:00
distro = " $( lsb_release -is) "
version = " $( lsb_release -rs) "
codename = " $( lsb_release -cs) "
2016-05-28 18:35:28 -07:00
elif [ -f /etc/os-release ] ; then
2018-06-20 19:59:44 -07:00
# shellcheck disable=SC1091
distro = " $( source /etc/os-release && echo " $ID " ) "
# shellcheck disable=SC1091
version = " $( source /etc/os-release && echo " $VERSION_ID " ) "
2018-04-29 06:09:46 -07:00
#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
2016-08-01 11:08:46 -07:00
elif [ -f /etc/centos-release ] ; then
2018-06-20 19:59:44 -07:00
distro = "centos"
2018-04-29 06:09:46 -07:00
version = "6"
2016-05-28 18:35:28 -07:00
else
2018-04-29 06:09:46 -07:00
distro = "unsupported"
2016-05-28 18:35:28 -07:00
fi
2016-03-25 01:18:05 -07:00
2018-06-20 19:59:44 -07:00
echo '
2017-10-02 12:59:53 -07:00
_____ _ __________
/ ___/____ ( _) ___ ___ / _/_ __/
\_ _ \/ __ \/ / __ \/ _ \_ _____ / / / /
___/ / / / / / /_/ / __/_____// / / /
/____/_/ /_/_/ .___/\_ __/ /___/ /_/
/_/
2018-06-20 19:59:44 -07:00
'
2016-03-25 01:18:05 -07:00
echo ""
2024-01-04 16:03:22 -08:00
echo " Welcome to Snipe-IT Inventory Installer for CentOS, Rocky, Debian, and Ubuntu!"
2022-11-22 08:47:58 -08:00
echo ""
echo " Installation log located: $APP_LOG "
2016-03-25 01:18:05 -07:00
echo ""
2016-05-16 21:22:33 -07:00
shopt -s nocasematch
2016-03-25 01:18:05 -07:00
case $distro in
2018-04-29 06:09:46 -07:00
*ubuntu*)
echo " The installer has detected $distro version $version codename $codename . "
2022-11-22 08:47:58 -08:00
distro = Ubuntu
2018-06-20 19:59:44 -07:00
apache_group = www-data
apachefile = /etc/apache2/sites-available/$APP_NAME .conf
2018-04-29 06:09:46 -07:00
; ;
2022-11-22 08:47:58 -08:00
*raspbian*)
2018-07-27 12:57:39 -07:00
echo " The installer has detected $distro version $version codename $codename . "
2022-11-22 08:47:58 -08:00
distro = Raspbian
2018-07-27 12:57:39 -07:00
apache_group = www-data
apachefile = /etc/apache2/sites-available/$APP_NAME .conf
; ;
2021-04-05 21:06:53 -07:00
*Debian| debian*)
2018-04-29 06:09:46 -07:00
echo " The installer has detected $distro version $version codename $codename . "
2022-11-22 08:47:58 -08:00
distro = Debian
2018-06-20 19:59:44 -07:00
apache_group = www-data
apachefile = /etc/apache2/sites-available/$APP_NAME .conf
2018-04-29 06:09:46 -07:00
; ;
2024-01-04 16:03:22 -08:00
*amzn*| *redhat*| *alma*| *rhel*| *rocky*)
2018-04-29 06:09:46 -07:00
echo " The installer has detected $distro version $version . "
2022-11-22 08:47:58 -08:00
distro = Centos
2018-06-20 19:59:44 -07:00
apache_group = apache
apachefile = /etc/httpd/conf.d/$APP_NAME .conf
2018-04-29 06:09:46 -07:00
; ;
*fedora*)
2024-01-04 16:03:22 -08:00
echo " The installer does not support Fedora"
exit 1
2018-04-29 06:09:46 -07:00
; ;
*)
2021-04-05 21:06:53 -07:00
echo " The installer was unable to determine your OS. Exiting for safety. Exiting for safety."
2018-06-20 19:59:44 -07:00
exit 1
2018-04-29 06:09:46 -07:00
; ;
2016-03-25 01:18:05 -07:00
esac
2016-05-16 21:22:33 -07:00
shopt -u nocasematch
2016-03-25 01:18:05 -07:00
2022-11-22 08:47:58 -08:00
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 ""
}
2016-03-25 01:18:05 -07:00
2022-11-22 08:47:58 -08:00
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
}
2016-03-25 01:18:05 -07:00
case $distro in
2022-11-22 08:47:58 -08:00
Debian)
2023-11-30 01:28:49 -08:00
if [ [ " $version " = ~ ^12 ] ] ; then
# Install for Debian 12.x
2023-11-20 14:06:28 -08:00
set_fqdn
set_dbpass
tzone = $( cat /etc/timezone)
2021-11-24 07:24:05 -08:00
2023-11-20 14:06:28 -08:00
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
2021-04-05 21:06:53 -07:00
2023-11-20 14:06:28 -08:00
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/
2023-11-30 10:22:59 -08:00
run_as_app_user php $APP_PATH /artisan cache:clear
2023-11-20 14:06:28 -08:00
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/
2023-11-30 10:22:59 -08:00
run_as_app_user php $APP_PATH /artisan cache:clear
2023-11-20 14:06:28 -08:00
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
2018-04-29 06:09:46 -07:00
2023-11-20 14:06:28 -08:00
echo "* Clearing cache and setting final permissions."
chmod 777 -R $APP_PATH /storage/framework/cache/
2023-11-30 10:22:59 -08:00
run_as_app_user php $APP_PATH /artisan cache:clear
2023-11-20 14:06:28 -08:00
chmod 775 -R $APP_PATH /storage/
2018-04-29 06:09:46 -07:00
2023-11-20 14:06:28 -08:00
elif [ [ " $version " = ~ ^9 ] ] ; then
eol
exit 1
else
echo " Unsupported Debian version. Version found: $version "
exit 1
fi
2018-04-29 06:09:46 -07:00
; ;
2022-11-22 08:47:58 -08:00
Ubuntu)
2023-11-30 11:28:13 -08:00
if [ " ${ version //./ } " -ge "2304" ] ; then
2023-11-30 11:43:16 -08:00
# Install for Ubuntu 23.04 and 23.10
2023-11-20 14:06:28 -08:00
set_fqdn
set_dbpass
tzone = $( cat /etc/timezone)
2023-11-30 11:28:13 -08:00
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."
2023-11-30 11:45:43 -08:00
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"
2023-11-30 11:28:13 -08:00
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
2023-11-30 10:22:59 -08:00
2023-11-20 14:06:28 -08:00
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."
2023-11-30 00:47:27 -08:00
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"
2023-11-20 14:06:28 -08:00
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)
2024-01-05 12:09:03 -08:00
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
2023-11-30 00:47:27 -08:00
2023-11-20 14:06:28 -08:00
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."
2023-11-30 00:47:27 -08:00
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"
2023-11-20 14:06:28 -08:00
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
; ;
2022-11-22 08:47:58 -08:00
Raspbian)
2023-11-20 14:06:28 -08:00
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
2018-07-27 12:57:39 -07:00
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
2024-01-05 12:09:03 -08:00
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
2019-01-10 13:18:30 -08:00
2023-11-20 14:06:28 -08:00
echo -n "* Updating installed packages."
log "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y upgrade" & pid = $!
progress
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
echo "* Installing Apache httpd, PHP, MariaDB and other requirements."
2023-11-30 00:47:27 -08:00
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"
2023-11-20 14:06:28 -08:00
install_packages
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
echo "* Configuring Apache."
create_virtualhost
log "phpenmod mcrypt"
log "phpenmod mbstring"
log "a2enmod rewrite"
log " a2ensite $APP_NAME .conf "
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
set_hosts
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
echo "* Starting MariaDB."
log "systemctl start mariadb.service"
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
echo "* Securing MariaDB."
/usr/bin/mysql_secure_installation
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
install_snipeit
2018-07-27 12:57:39 -07:00
2023-11-20 14:06:28 -08:00
echo "* Restarting Apache httpd."
log "systemctl restart apache2"
else
echo " Unsupported Raspbian version. Version found: $version "
exit 1
fi
2018-07-27 12:57:39 -07:00
; ;
2022-11-22 08:47:58 -08:00
Centos)
2023-11-20 14:06:28 -08:00
if [ [ " $version " = ~ ^6 ] ] ; then
eol
exit 1
2023-12-20 18:13:36 -08:00
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."
2024-01-04 16:42:43 -08:00
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"
2023-12-20 18:13:36 -08:00
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
2023-11-20 14:06:28 -08:00
elif [ [ " $version " = ~ ^7 ] ] ; then
# Install for CentOS/Redhat 7
set_fqdn
set_dbpass
tzone = $( timedatectl | gawk -F'[: ]' ' $9 ~ /zone/ {print $11}' ) ;
2017-10-05 00:02:14 -07:00
2023-11-20 14:06:28 -08:00
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"
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
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
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
echo "* Configuring Apache."
create_virtualhost
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
set_hosts
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
echo "* Setting MariaDB to start on boot and starting MariaDB."
log "systemctl enable mariadb.service"
log "systemctl start mariadb.service"
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
install_snipeit
2018-03-15 10:20:42 -07:00
2023-11-20 14:06:28 -08:00
set_firewall
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Setting Apache httpd to start on boot and starting service."
log "systemctl enable httpd.service"
log "systemctl restart httpd.service"
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
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/
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
set_selinux
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
elif [ [ " $version " = ~ ^8 ] ] ; then
# Install for CentOS/Redhat 8
set_fqdn
set_dbpass
tzone = $( timedatectl | grep "Time zone" | awk 'BEGIN { FS"("}; {print $3}' ) ;
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
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
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
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
2017-10-27 18:27:44 -07:00
2023-11-20 14:06:28 -08:00
echo "* Configuring Apache."
create_virtualhost
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
set_hosts
2017-10-02 12:59:53 -07:00
2023-11-20 14:06:28 -08:00
echo "* Setting MariaDB to start on boot and starting MariaDB."
log "systemctl enable mariadb.service"
log "systemctl start mariadb.service"
2017-10-28 09:17:19 -07:00
2023-11-20 14:06:28 -08:00
install_snipeit
2017-10-28 09:17:19 -07:00
2023-11-20 14:06:28 -08:00
set_firewall
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Setting Apache httpd to start on boot and starting service."
log "systemctl enable httpd.service"
log "systemctl restart httpd.service"
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
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/
2017-10-28 09:17:19 -07:00
2023-11-20 14:06:28 -08:00
set_selinux
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
elif [ [ " $version " = ~ ^9 ] ] ; then
2023-12-20 18:13:36 -08:00
# Install for CentOS/Alma/Redhat 9
2023-11-20 14:06:28 -08:00
set_fqdn
set_dbpass
tzone = $( timedatectl | grep "Time zone" | awk 'BEGIN { FS"("}; {print $3}' ) ;
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Adding EPEL-release repository."
log "dnf -y install wget epel-release" & pid = $!
2024-01-04 18:46:31 -08:00
progress
log "yum -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm" & pid = $!
2023-12-20 18:13:36 -08:00
progress
2024-01-04 16:55:30 -08:00
log "rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi.el9"
2023-12-20 18:13:36 -08:00
log "dnf -y module enable php:remi-8.2" & pid = $!
2023-11-20 14:06:28 -08:00
progress
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
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
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Configuring Apache."
create_virtualhost
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
set_hosts
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Setting MariaDB to start on boot and starting MariaDB."
log "systemctl enable mariadb.service"
log "systemctl start mariadb.service"
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
install_snipeit
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
set_firewall & pid = $!
progress
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Setting Apache httpd to start on boot and starting service."
log "systemctl enable httpd.service"
log "systemctl restart httpd.service"
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
echo "* Setting php-fpm to start on boot and starting service."
log "systemctl enable php-fpm.service"
log "systemctl restart php-fpm.service"
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
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/
2022-11-22 08:47:58 -08:00
2023-11-20 14:06:28 -08:00
set_selinux
else
echo " Unsupported CentOS version. Version found: $version "
exit 1
fi
2018-04-29 06:09:46 -07:00
; ;
2022-11-22 08:47:58 -08:00
*)
2023-11-20 14:06:28 -08:00
echo "Your OS was not detected correctly."
exit 1
2016-03-25 01:18:05 -07:00
esac
2017-10-05 21:27:00 -07:00
setupmail = default
until [ [ $setupmail = = "yes" ] ] || [ [ $setupmail = = "no" ] ] ; do
2022-11-22 08:47:58 -08:00
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) "
2017-10-07 12:45:25 -07:00
read -r setupmail
2017-10-05 21:27:00 -07:00
case $setupmail in
2018-04-29 06:09:46 -07:00
[ yY] | [ yY] [ Ee] [ Ss] )
echo -n " Outgoing mailserver address:"
read -r mailhost
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_HOST=\\).*|\\1 $mailhost | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " Server port number:"
read -r mailport
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_PORT=\\).*|\\1 $mailport | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " Username:"
read -r mailusername
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_USERNAME=\\).*|\\1 $mailusername | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " Password:"
read -rs mailpassword
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_PASSWORD=\\).*|\\1 $mailpassword | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo ""
2024-02-28 23:37:52 -08:00
echo -n " Verify TLS certificate on remote server? (true/false):"
read -r mailverifypeer
sed -i " s|^\\(MAIL_TLS_VERIFY_PEER=\\).*|\\1 $mailverifypeer | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " From address:"
read -r mailfromaddr
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_FROM_ADDR=\\).*|\\1 $mailfromaddr | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " From name:"
read -r mailfromname
2024-11-13 12:58:36 -08:00
sed -i " s|^\\(MAIL_FROM_NAME=\\).*|\\1\\' $mailfromname \\'| " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " Reply to address:"
read -r mailreplytoaddr
2018-06-20 19:59:44 -07:00
sed -i " s|^\\(MAIL_REPLYTO_ADDR=\\).*|\\1 $mailreplytoaddr | " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
echo -n " Reply to name:"
read -r mailreplytoname
2024-11-13 12:58:36 -08:00
sed -i " s|^\\(MAIL_REPLYTO_NAME=\\).*|\\1\\' $mailreplytoname \\'| " " $APP_PATH /.env "
2018-04-29 06:09:46 -07:00
setupmail = "yes"
; ;
[ nN] | [ n| N] [ O| o] )
setupmail = "no"
; ;
*) echo " Invalid answer. Please type y or n"
; ;
2017-10-05 21:27:00 -07:00
esac
done
2016-03-25 01:18:05 -07:00
echo ""
echo " ***Open http:// $fqdn to login to Snipe-IT.*** "
echo ""
echo ""
2022-11-22 08:47:58 -08:00
echo " * Installation log located in $APP_LOG . "
2016-09-29 22:37:05 -07:00
echo "* Finished!"
2017-10-28 09:17:19 -07:00
sleep 1