Skip to content

Instantly share code, notes, and snippets.

@mansurali901
Created September 23, 2019 17:13
Show Gist options
  • Save mansurali901/5d1ae02a8f63c53db842d0d830583bae to your computer and use it in GitHub Desktop.
Save mansurali901/5d1ae02a8f63c53db842d0d830583bae to your computer and use it in GitHub Desktop.
#!/bin/bash
TIMEFORMAT='It took %R seconds to complete this process.'
time {
# Defining variables
threads=$[$(nproc)+1]
# Build local yum cache and install development tools
echo "[1/16] Installing the 'Developer Tools' yum group.."
yum -y makecache >/dev/null 2>&1 && yum -y groupinstall "Development Tools" >/dev/null 2>&1
# Install other necessary binaries
echo "[2/16] Installing necessary binaries.."
yum -y install curl cmake >/dev/null 2>&1
# Download source tarballs
echo "[3/16] Downloading source tarballs.."
curl ftp://xmlsoft.org/libxml2/LATEST_LIBXML2 -o libxml2.tar.gz >/dev/null 2>&1
curl https://www.openssl.org/source/openssl-1.0.2l.tar.gz -o openssl.tar.gz >/dev/null 2>&1
curl https://www.zlib.net/zlib-1.2.11.tar.gz -o zlib.tar.gz >/dev/null 2>&1
curl http://apache.40b.nl/httpd/httpd-2.4.25.tar.gz -o httpd.tar.gz >/dev/null 2>&1
curl https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz -o pcre.tar.gz >/dev/null 2>&1
curl http://apache.mirror.triple-it.nl/apr/apr-1.5.2.tar.gz -o apr.tar.gz >/dev/null 2>&1
curl http://apache.mirror.triple-it.nl/apr/apr-util-1.5.4.tar.gz -o apr-util.tar.gz >/dev/null 2>&1
curl https://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz -o ncurses.tar.gz >/dev/null 2>&1
curl https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz -o mysql.tar.gz -L >/dev/null 2>&1
# Make source directories
echo "[4/16] Creating source+build directories.."
mkdir libxml2
mkdir openssl
mkdir zlib
mkdir httpd
mkdir pcre
tar -xvzf httpd.tar.gz -C httpd --strip 1 >/dev/null 2>&1 && rm httpd.tar.gz
mkdir httpd/srclib/apr
mkdir httpd/srclib/apr-util
mkdir ncurses
mkdir mysql
# Clone PHP sources
echo "[5/16] Cloning PHP 7.1.5 from Github.."
git clone -b php-7.1.5 https://github.com/php/php-src.git php7 >/dev/null 2>&1
# Extract source packages
echo "[6/16] Extracting source tarballs.."
tar -xvzf libxml2.tar.gz -C libxml2 --strip 1 >/dev/null 2>&1 && rm libxml2.tar.gz
tar -xvzf openssl.tar.gz -C openssl --strip 1 >/dev/null 2>&1 && rm openssl.tar.gz
tar -xvzf zlib.tar.gz -C zlib --strip 1 >/dev/null 2>&1 && rm zlib.tar.gz
tar -xvzf pcre.tar.gz -C pcre --strip 1 >/dev/null 2>&1 && rm pcre.tar.gz
tar -xvzf apr.tar.gz -C httpd/srclib/apr --strip 1 >/dev/null 2>&1 && rm apr.tar.gz
tar -xvzf apr-util.tar.gz -C httpd/srclib/apr-util --strip 1 >/dev/null 2>&1 && rm apr-util.tar.gz
tar -xvzf ncurses.tar.gz -C ncurses --strip 1 >/dev/null 2>&1 && rm ncurses.tar.gz
tar -xvzf mysql.tar.gz -C mysql --strip 1 >/dev/null 2>&1 && rm mysql.tar.gz
# Pre-compile ncurses
echo "[7/16] Compiling ncurses.."
mkdir /opt/ncurses
cd ncurses
./configure --prefix=/opt/ncurses --with-shared >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Pre-compile mysql
echo "[8/16] Compiling MySQL.."
mkdir /opt/mysql
cd mysql
cmake -DWITH_BOOST=boost/ -DCMAKE_INSTALL_PREFIX:PATH=/opt/mysql -DCURSES_LIBRARY=/opt/ncurses/lib/libncurses.so -DCURSES_INCLUDE_PATH=/opt/ncurses/include . >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Pre-compile openssl
echo "[9/16] Compiling OpenSSL.."
mkdir /opt/openssl
cd openssl
./config --prefix=/opt/openssl -fPIC >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Pre-compile libxml2
echo "[10/16] Compiling LibXML2.."
mkdir /opt/libxml2
cd libxml2
./configure --without-python --prefix=/opt/libxml2 >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Pre-compile pcre
echo "[11/16] Compiling PCRE.."
mkdir /opt/pcre
cd pcre
./configure --prefix=/opt/pcre >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Pre-compile zlib
echo "[12/16] Compiling zlib.."
mkdir /opt/zlib
cd zlib
./configure --prefix=/opt/zlib >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Compile httpd
echo "[13/16] Compiling httpd.."
mkdir /opt/httpd
cd httpd
./configure --with-pcre=/opt/pcre --with-z=/opt/zlib --with-libxml2=/opt/libxml2 --with-ssl=/opt/openssl --with-included-apr --enable-ssl --prefix=/opt/httpd >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd ..
# Compile PHP7
echo "[14/16] Compiling PHP7.."
mkdir /opt/php7
cd php7
./buildconf --force >/dev/null 2>&1 && ./configure --with-apxs2=/opt/httpd/bin/apxs --prefix=/opt/php7 --with-libxml-dir=/opt/libxml2 >/dev/null 2>&1
make -j$threads >/dev/null 2>&1 && make install >/dev/null 2>&1
cd .
# Cleanup time!
echo "[15/16] Cleaning up.."
rm -rf php7 && rm -rf httpd && rm -rf zlib && rm -rf pcre && rm -rf libxml2 && rm -rf openssl && rm -rf mysql && rm -rf ncurses
echo "[16/16] Finishing configuration for httpd, PHP7 and MySQL.."
useradd -s /sbin/nologin mysql
mkdir /opt/mysql/data
chown -R mysql:mysql /opt/mysql/data
mkdir /opt/mysql/data
echo ""
echo "Initializing MySQL:"
echo ""
/opt/mysql/bin/mysqld --initialize --datadir=/opt/mysql/data --user=mysql
echo ""
echo "You can start the MySQL daemon with:"
echo "/opt/mysql/bin/mysqld --user=mysql --datadir=/opt/mysql/data --socket=/opt/mysql/data/mysql.sock"
echo ""
useradd -s /sbin/nologin www-data
chown -R www-data:www-data /opt/httpd/htdocs
sed -i 's/User daemon/User www-data/g' /opt/httpd/conf/httpd.conf
sed -i 's/Group daemon/Group www-data/g' /opt/httpd/conf/httpd.conf
mkdir /opt/certificates
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /opt/certificates/selfsigned.key -out /opt/certificates/selfsigned.crt -subj "/C=NL/ST=Zuid-Holland/L=Dordrecht/O=bartsimons.me/OU=IT Department/CN=bartsimons.me" >/dev/null 2>&1
currentdate=$(date)
echo "" >> /opt/httpd/conf/httpd.conf
echo "# Appended at: ${currentdate}" >> /opt/httpd/conf/httpd.conf
echo "LoadModule ssl_module modules/mod_ssl.so" >> /opt/httpd/conf/httpd.conf
echo "<FilesMatch \.php$>" >> /opt/httpd/conf/httpd.conf
echo " SetHandler application/x-httpd-php" >> /opt/httpd/conf/httpd.conf
echo "</FilesMatch>" >> /opt/httpd/conf/httpd.conf
echo "Listen 443" >> /opt/httpd/conf/httpd.conf
echo "<VirtualHost *:443>" >> /opt/httpd/conf/httpd.conf
echo " SSLEngine on" >> /opt/httpd/conf/httpd.conf
echo " SSLCertificateFile /opt/certificates/selfsigned.crt" >> /opt/httpd/conf/httpd.conf
echo " SSLCertificateKeyFile /opt/certificates/selfsigned.key" >> /opt/httpd/conf/httpd.conf
echo "</VirtualHost>" >> /opt/httpd/conf/httpd.conf
echo "You can start the HTTPD daemon with:"
echo "/opt/httpd/bin/httpd"
echo ""
echo "Done!"
echo ""
echo ""
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment