#!/bin/bash ubuntu_version=$(lsb_release -rs) ubuntu_codename=$(lsb_release -cs) if [[ -e "/etc/needrestart/needrestart.conf" ]]; then sudo sed -E -i "s/(^|#)\\\$nrconf\{restart\}\s*=.*/\$nrconf\{restart\} = 'a';/g" /etc/needrestart/needrestart.conf sudo sed -E -i "s/(^|#)\\\$nrconf\{kernelhints\}\s*=.*/\$nrconf\{kernelhints\} = -1;/g" /etc/needrestart/needrestart.conf fi sudo apt update sudo apt install -y git org_pwd=$(pwd) if [[ $ubuntu_version > '22' ]]; then #In ubuntu 22, install linux-libc-dev instead of linux-kernel-headers sudo apt install -y linux-libc-dev software-properties-common build-essential else sudo apt install -y linux-kernel-headers software-properties-common build-essential fi if [[ ! -e "/usr/lib/x86_64-linux-gnu/librt.so" ]]; then sudo apt install -y libc6 libc6-dev sudo ln -s /usr/lib/x86_64-linux-gnu/librt.so.1 /usr/lib/x86_64-linux-gnu/librt.so fi org_pwd=$(pwd) if [[ $ubuntu_version =~ '14' ]]; then sudo apt install libgmp-dev -y fi echo "postfix postfix/mailname string $USER" | sudo debconf-set-selections echo "postfix postfix/main_mailer_type string 'Local only'" | sudo debconf-set-selections sudo apt-get install -y postfix sudo service postfix start #install nginx 1.23.1 wget http://gitlab.tp.rulingcom.com/erictyl/install_r45_on_ubuntu_1804lts_doc/-/raw/master/install_nginx.sh -O install_nginx.sh bash install_nginx.sh sudo nginx -t nginx_status="$(echo $?)" messages_logs="" function push_messages(){ if [[ ! -z "$1" ]]; then if [ -z "$messages_logs" ]; then messages_logs="$1" else messages_logs="$messages_logs $1" fi fi } function write_messages(){ echo "$messages_logs" echo "$messages_logs" > install_orbit_environment.log echo "Logs stored in install_orbit_environment.log!" } if [[ $ubuntu_version > '21' ]]; then function apt_add_key_func(){ url="$1" base_name="$(basename $url)" file_path="/etc/apt/trusted.gpg.d/$base_name" sudo wget "$url" -q -O "$file_path" if [[ -e "$file_path" ]]; then mime_type=`file -b --mime-type "$file_path"` if [[ $mime_type == "application/pgp-keys" ]]; then new_file_path=`echo "$file_path"| sed -E 's/(\.[^.]+$|$)/\.gpg/g'` cat $file_path|sudo gpg --dearmor -o $new_file_path rm -f $file_path file_path="$new_file_path" fi fi } else function apt_add_key_func(){ wget -qO - "$1" | sudo apt-key add - } fi if [ $nginx_status != "0" ]; then sudo sed -i 's/\([^#]include \/etc\/nginx\/sites-enabled\/*\)/\#\1/g' /etc/nginx/nginx.conf fi sudo service nginx restart openssl_dir="" need_export_apt_key="0" if [[ $ubuntu_version > '21' ]]; then # ruby must use openssl <= 1.1.1. Not support openssl 3.0 yet. need_export_apt_key="1" if [[ ! -d "/opt/openssl" ]]; then target_openssl_ver="1.1.1q" sudo bash -l -c " cd /root && wget https://www.openssl.org/source/openssl-$target_openssl_ver.tar.gz --no-check-certificate -O openssl-$target_openssl_ver.tar.gz && tar xzvf openssl-$target_openssl_ver.tar.gz && cd openssl-$target_openssl_ver && ./config no-ssl2 no-ssl3 zlib-dynamic -fPIC shared --prefix=/opt/openssl && make depend -j$cpu_cores && make install" openssl_ver="$target_openssl_ver" cd "$org_pwd" fi openssl_dir="/opt/openssl" sudo rm -rf /opt/openssl/ssl/certs sudo ln -s /etc/ssl/certs/ /opt/openssl/ssl/. sudo mkdir -p /etc/apt/trusted.gpg.d/ fi cd /etc/nginx/ sudo mkdir orbit_sites/ if [ -z "$(grep 'orbit_sites' nginx.conf)" ]; then sudo sed -i 's/\(include\ \/etc\/nginx\/sites-enabled\/\*\;\)/\1\n include\ \/etc\/nginx\/orbit_sites\/*;/g' nginx.conf fi if [[ $ubuntu_version > '22' ]]; then #Use root account prevent reading socket denied sudo sed -E -i 's/^[# ]*user.*/user root/g' /etc/nginx/nginx.conf fi cd $org_pwd sudo apt-get install gnupg -y if [[ $ubuntu_version =~ '14' ]]; then apt_add_key_func https://www.mongodb.org/static/pgp/server-3.2.asc echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list sudo apt-get update sudo apt-get install -y mongodb-org=3.2.22 mongodb-org-server=3.2.22 mongodb-org-shell=3.2.22 mongodb-org-mongos=3.2.22 mongodb-org-tools=3.2.22 sudo service mongod stop sudo rm -f /var/lib/mongodb/mongod.lock sudo rm -f /tmp/mongodb-27017.sock sudo chown mongodb:mongodb /var/lib/mongodb -R sudo chown mongodb:mongodb /var/log/mongodb -R sudo service mongod restart sleep 10 mongod --version exit_code="$(echo $?)" if [ $exit_code != 0 ] && [ $exit_code != 1 ]; then #mongo core dump push_messages "Mongo 3.2 core dump!" push_messages "Please install mongod by yourself!" else if [ -e /tmp/mongodb-27017.sock ]; then push_messages "Mongo start success!" else push_messages "mongo not yet start!" push_messages "Please check mongo status!" fi fi else # install mongod 6.0 apt_add_key_func https://www.mongodb.org/static/pgp/server-6.0.asc if [[ $ubuntu_version > '20' ]]; then sudo wget -nc http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo wget -nc http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo dpkg -i libssl-dev_1.1.1-1ubuntu2.1~18.04.20_amd64.deb echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list elif [[ $ubuntu_version =~ '18' ]] || [[ $ubuntu_version =~ '19' ]]; then echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list else echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list fi sudo apt-get update sudo apt-get remove mongodb-clients --purge sudo apt-get install -y mongodb-org=6.0.2 mongodb-org-database=6.0.2 mongodb-org-server=6.0.2 mongodb-mongosh mongodb-org-mongos=6.0.2 mongodb-org-tools=6.0.2 sudo service mongod stop sudo rm -f /var/lib/mongodb/mongod.lock sudo rm -f /tmp/mongodb-27017.sock sudo chown mongodb:mongodb /var/lib/mongodb -R sudo chown mongodb:mongodb /var/log/mongodb -R sudo service mongod restart sleep 10 if [[ ! -e /usr/bin/mongo ]]; then sudo ln -s /usr/bin/mongosh /usr/bin/mongo fi if [ -e /tmp/mongodb-27017.sock ]; then push_messages "Mongo start success!" else mongod --version exit_code="$(echo $?)" #if mongo 6 core dump, then install mongo 5 if [ $exit_code != 0 ] && [ $exit_code != 1 ]; then sudo apt-get purge mongodb-org* -y sudo rm -rf /var/log/mongodb sudo rm -rf /var/lib/mongodb apt_add_key_func https://www.mongodb.org/static/pgp/server-5.0.asc # install mongod 5.0 if [[ $ubuntu_version > '20' ]]; then sudo wget -nc http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo wget -nc http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl-dev_1.1.1-1ubuntu2.1~18.04.20_amd64.deb sudo dpkg -i libssl-dev_1.1.1-1ubuntu2.1~18.04.20_amd64.deb echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list elif [[ $ubuntu_version =~ '18' ]] || [[ $ubuntu_version =~ '19' ]]; then echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list else echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list fi sudo apt-get update sudo apt-get install -y mongodb-org=5.0.11 mongodb-org-database=5.0.11 mongodb-org-server=5.0.11 mongodb-mongosh mongodb-org-shell=5.0.11 mongodb-org-mongos=5.0.11 mongodb-org-tools=5.0.11 sudo rm -f /var/lib/mongodb/mongod.lock sudo rm -f /tmp/mongodb-27017.sock sudo chown mongodb:mongodb /var/lib/mongodb -R sudo chown mongodb:mongodb /var/log/mongodb -R sudo service mongod restart sleep 10 if [[ ! -e /usr/bin/mongo ]]; then sudo ln -s /usr/bin/mongosh /usr/bin/mongo fi if [ -e /tmp/mongodb-27017.sock ]; then push_messages "Mongo start success!" else mongod --version exit_code="$(echo $?)" #if mongo 5 core dump, then install mongo 4.4 if [ $exit_code != 0 ] && [ $exit_code != 1 ]; then sudo apt-get purge mongodb-org* -y sudo rm -rf /var/log/mongodb sudo rm -rf /var/lib/mongodb apt_add_key_func https://www.mongodb.org/static/pgp/server-4.4.asc if [[ $ubuntu_version > '20' ]]; then echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list elif [[ $ubuntu_version =~ '18' ]] || [[ $ubuntu_version =~ '19' ]]; then echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list else echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list fi sudo apt-get update sudo apt-get install -y mongodb-org=4.4.11 mongodb-org-server=4.4.11 mongodb-org-shell=4.4.11 mongodb-org-mongos=4.4.11 mongodb-org-tools=4.4.11 sudo service mongod restart sleep 10 if [[ ! -e /usr/bin/mongo ]]; then sudo ln -s /usr/bin/mongosh /usr/bin/mongo fi if [ -e /tmp/mongodb-27017.sock ]; then push_messages "Mongo start success!" else push_messages "mongo not yet start!" push_messages "Please check mongo status!" fi else push_messages "mongo not yet start!" push_messages "Please check mongo status!" fi fi else push_messages "mongo not yet start!" push_messages "Please check mongo status!" fi fi fi # build ImageMagick and install if [ -z $(which convert) ]; then remove_1_dir="0" if [[ ! -d "1" ]]; then remove_1_dir="1"; fi tmp_pwd="$(pwd)" sudo bash -l -c "cd /root && \ apt-get install libjpeg62 -y && \ wget -nc http://download.sourceforge.net/libpng/libpng-1.5.13.tar.gz && \ tar xvfz libpng-1.5.13.tar.gz && \ cd libpng-1.5.13/ && \ ./configure && \ make && sudo make install && \ apt install -y libltdl-dev graphviz libpng-dev libfftw3-dev && \ apt-get install -y libjpeg-turbo8-dev && \ apt install -y libgif-dev libjpeg-dev libopenexr-dev libpng-dev libwebp-dev && \ apt install -y cmake pkg-config libbrotli-dev && \ wget -nc https://imagemagick.org/archive/ImageMagick.tar.gz && \ tar xfz ImageMagick.tar.gz && \ cd /root/libpng-1.5.13/ImageMagick-7* && \ ./configure --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes --disable-shared --with-modules && \ make && make install && \ ln -s /usr/local/lib/* /usr/lib/. && \ ln -s /usr/local/lib/pkgconfig/* /usr/lib/pkgconfig/. && \ ln -s /usr/local/bin/* /usr/bin/. && \ convert -list configure" cd $tmp_pwd if [[ "$remove_1_dir" == "1" ]]; then rm -rf 1/ fi fi ## install rvm if [ -z $(which rvm) ]; then sudo apt-get install --reinstall ca-certificates -y sudo apt-add-repository -y ppa:rael-gc/rvm sudo apt-get update sudo apt-get install rvm -y sudo usermod -a -G rvm $USER echo 'source "/etc/profile.d/rvm.sh"' >> ~/.bashrc source "/etc/profile.d/rvm.sh" sudo chown $USER:$USER $HOME -R rvm user gemsets sudo chown $USER:$USER /usr/share/rvm -R fi source "/etc/profile.d/rvm.sh" # install ruby 2.7.6 if [[ -z "$openssl_dir" ]]; then rvm install 2.7.6 else rvm install 2.7.6 --with-openssl-dir="$openssl_dir" fi rvm --default use 2.7.6 gem install bundler -v 2.1.4 gem install zip gem install nokogiri -v 1.8.5 #for ruby 2.7.6 #gem install nokogiri -v 1.7.0.1 #for ruby 2.1.10 sudo apt-get install screen -y sudo sed -i 's/#cron\.\*/cron\.\*/g' /etc/rsyslog.d/50-default.conf sudo service rsyslog restart sudo mkdir /home/backup/db/ -p sudo mkdir /home/backup/orbit/ -p sudo apt-get install rsnapshot -y sudo sed -i 's/^[^#]etain/#retain/g' /etc/rsnapshot.conf sudo sed -i 's/\(retain\tdelta\t3\)/\1\nretain\tdaily\t7/g' /etc/rsnapshot.conf sudo sed -i 's/snapshot_root.*/snapshot_root\t\/home\/backup\/orbit/g' /etc/rsnapshot.conf sudo sed -i 's/^\(backup\t.*\)/#\1/g' /etc/rsnapshot.conf matched_backup_home=$(grep -P "backup\t$HOME" /etc/rsnapshot.conf|xargs) if [ -z $matched_backup_home ]; then sudo sed -i "$(echo "s/^\(#backup\t\/home\/\t\)/backup\t$(echo $HOME|sed 's/\//\\\//g')\tlocalhost\/\n\1/g")" /etc/rsnapshot.conf else matched_backup_home=$(grep -P "(^|\s+)backup\t$HOME" /etc/rsnapshot.conf|xargs) if [ -z $matched_backup_home ]; then sudo sed -i "$(echo "s/[#\s\t]*backup\t$(echo $HOME|sed 's/\//\\\//g')/backup\t$(echo $HOME|sed 's/\//\\\//g')/g")" /etc/rsnapshot.conf fi fi sudo wget -nc http://gitlab.tp.rulingcom.com/erictyl/install_r45_on_ubuntu_1804lts_doc/-/raw/master/orbit_logrotate -O /etc/logrotate.d/orbit sudo sed -i "s/rulingcom/$USER/g" /etc/logrotate.d/orbit sudo logrotate -d /etc/logrotate.conf sudo /usr/sbin/logrotate -f /etc/logrotate.conf sudo wget -nc http://gitlab.tp.rulingcom.com/erictyl/install_r45_on_ubuntu_1804lts_doc/-/raw/master/orbit_service.sh -O /etc/init.d/orbit sudo sed -i "s/ORBIT_USER=.*/ORBIT_USER=$USER/g" /etc/init.d/orbit sudo chmod 755 /etc/init.d/orbit sudo update-rc.d orbit defaults sudo systemctl enable mongod.service sudo_crontab_jobs=$(sudo crontab -l) if [[ "$sudo_crontab_jobs" =~ "@reboot /bin/bash -l -c" ]]; then push_messages "Already exist reboot crontab!" else push_messages "Adding reboot crontab!" echo "$sudo_crontab_jobs"$'\n''@reboot /bin/bash -l -c "rm -f /tmp/mongodb-27017.sock && chown mongodb:mongodb /var/lib/mongodb/ -R && chown mongodb:mongodb /var/log/mongodb -R && /usr/sbin/service mongod restart && /etc/init.d/orbit restart"'| sudo crontab - fi sudo_crontab_jobs=$(sudo crontab -l) if [[ "$sudo_crontab_jobs" =~ "mongodump -o /" ]]; then push_messages "Already exist mongodump crontab!" else push_messages "Adding mongodump crontab!" echo "$sudo_crontab_jobs"$'\n''0 3 * * * mongodump -o /home/backup/db/`date "+\%Y\%m\%d"`_db'| sudo crontab - fi sudo_crontab_jobs=$(sudo crontab -l) if [[ `echo "$sudo_crontab_jobs" | grep -P "rm -fr.*/db/"` ]]; then push_messages "Already exist remove old mongo backup crontab!" else push_messages "Adding remove old mongo backup crontab!" echo "$sudo_crontab_jobs"$'\n''0 4 * * * rm -fr /home/backup/db/`date --date="1 week ago" "+\%Y\%m\%d"`_db'| sudo crontab - fi sudo_crontab_jobs=$(sudo crontab -l) if [[ "$sudo_crontab_jobs" =~ "/usr/bin/rsnapshot" ]]; then push_messages "Already exist rsnapshot crontab!" else push_messages "Adding rsnapshot crontab!" echo "$sudo_crontab_jobs"$'\n''15 4 * * * /usr/bin/rsnapshot daily'| sudo crontab - fi push_messages "Finish setting orbit environment!" push_messages "Please install orbit web app and setting nginx for single web by yourself!" push_messages "You can use the following command to create web!" push_messages "$ sudo /etc/init.d/orbit create \$site_path" push_messages "Ex: sudo /etc/init.d/orbit create orbit_sites/orbit" push_messages "Ex: sudo /etc/init.d/orbit create /home/rulingcom/orbit_sites/orbit" write_messages