Linux基础服务二进制一键安装shell脚本

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Linux基础服务二进制一键安装shell脚本
  • 服务版本:


mysql-8.0.20

redis-5.0.0

jdk1.8.0_321

tomcat-8.0.1

minio-RELEASE.2021-10-23T03-28-24Z

nginx-1.20.2


  • 压缩包地址:


链接:https://pan.baidu.com/s/1xz5Ag0rHWUhMovTPiCgm4g?pwd=8dyr

提取码:8dyr


  • 解压之后执行前需要修改脚本,init.sh为安装脚本,这个压缩包自带所需的离线yum源,根据自己需求定义函数
#!/bin/bash
#此脚本所有的安装目录全部都在${max_dir}下,这个变量的会筛选出当前机器空间最大的挂载目录
#请在解压目录执行此脚本
file=$PWD
max_dir=$(df|sed '1d'|awk '$1 ~ "/dev/"{print $4,$6}'|awk 'BEGIN{max=0}{size=$1;if(size>=max){max=size;point=$2}}END{print point}')
if [ ${max_dir} != "/home" ] ; then 
  [ ! -d "${max_dir}/fosafer" ] && mkdir ${max_dir}/fosafer 
  [ ! -L "/home/fosafer" ] && ln -sf ${max_dir}/fosafer /home/fosafer 
  max_dir="${max_dir}/fosafer"
else
  [ ! -d "/home/fosafer" ] && mkdir /home/fosafer 
  max_dir="/home/fosafer"
fi
function init_yum(){
[ ! -d "/etc/yum.repos.d/bak" ] && mkdir /etc/yum.repos.d/bak 
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat << EOF >  /etc/yum.repos.d/init.repo
[init]
name=init
baseurl=file://${file}/rpm
gpgcheck=0    
enabled=1
EOF
yum clean all && \
yum makecache 
if [ $? -eq 0 ];then
    echo -e "\033[32m yum is ok \033[0m"
else
    echo -e "\033[31m yum no ok \033[0m"
    exit
fi
}
#安装mysql8.0.20
function mysql_install(){
rpm_mysql=`rpm -qa | grep mysql | wc -l`
rpm_mariadb=`rpm -qa | grep mariadb | wc -l`
if [[ $rpm_mysql -ge 1 ]];then
    for i in `rpm -qa | grep mysql`;do
        rpm -e --nodeps $i
    done
fi    
if [[ $rpm_mariadb -ge 1 ]];then
    for i in `rpm -qa | grep mariadb`;do
        rpm -e --nodeps $i
    done
fi
yum -y install jemalloc openssl-devel libaio 2&>/dev/null && \
cd ${max_dir} && \
#wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz && \
tar -xf $file/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz && \
mv mysql-8.0.20-linux-glibc2.12-x86_64 ${max_dir}/mysql && \
groupadd mysql && \
useradd -r -g mysql -s /sbin/nologin mysql && \
mkdir -p ${max_dir}/mysql/data && \
mkdir -p ${max_dir}/mysql/logs && \
mkdir -p ${max_dir}/mysql/conf && \
mkdir -p ${max_dir}/mysql/status && \
chown -R mysql:mysql ${max_dir}/mysql/data/ && \
chown -R mysql:mysql ${max_dir}/mysql/logs/ && \
chown -R mysql:mysql ${max_dir}/mysql/status/ && \
chmod -R 755 ${max_dir}/mysql/status/ && \
chmod -R 755 ${max_dir}/mysql/data/ && \
chmod -R 755 ${max_dir}/mysql/logs/ && \
cat << -EOF > ${max_dir}/mysql/conf/my.cnf  
[mysqld]
port=3306
basedir=${max_dir}/mysql
datadir=${max_dir}/mysql/data
log-error=${max_dir}/mysql/logs/error.log
socket=${max_dir}/mysql/status/mysql.sock
user=mysql
default_authentication_plugin=mysql_native_password
skip_host_cache
skip-name-resolve=1
#skip-grant-tables
default-time_zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[client]
port=3306
socket=${max_dir}/mysql/status/mysql.sock
-EOF
${max_dir}/mysql/bin/mysqld --defaults-file=${max_dir}/mysql/conf/my.cnf --initialize --user=mysql && \
passwd=`tail -1 ${max_dir}/mysql/logs/error.log  | awk '{print $13}' `
echo "mysql初始化密码为:$passwd"
${max_dir}/mysql/bin/mysqld_safe --defaults-file=${max_dir}/mysql/conf/my.cnf &
}
#修改mysql密码为fosafer.com
function mysql_init(){
if_mysql=`netstat -ntpl | grep mysqld | wc -l`
if [[ $if_mysql -ge 1 ]];then
    ${max_dir}/mysql/bin/mysqladmin -uroot -p"$1" -S ${max_dir}/mysql/status/mysql.sock password 'fosafer.com' 
    ${max_dir}/mysql/bin/mysql -uroot -pfosafer.com -S ${max_dir}/mysql/status/mysql.sock -e "show databases" 
    if [ $? -eq 0 ];then
        echo -e "\033[32m mysql inited \033[0m"
    fi
else
    echo -e "\033[31m mysql no started \033[0m"
fi 
}
#安装redis5.0
function redis_install(){
yum -y install lrzsz gcc  2&>/dev/null && \
cd ${max_dir} && \
#wget http://download.redis.io/releases/redis-5.0.0.tar.gz && \
tar -xf $file/redis-5.0.0.tar.gz  && \
cd ${max_dir}/redis-5.0.0 && \
make   
make install   
cd ${max_dir}/redis-5.0.0 && \
cp redis.conf redis.conf_bak  && \
sed -i 's/bind 127\.0\.0\.1/bind 0\.0\.0\.0/g' redis.conf && \
sed -i 's/protected-mode yes/protected-mode no/g' redis.conf && \
sed -i 's/daemonize no/daemonize yes/g' redis.conf && \
cd src/ && \
./redis-server ${max_dir}/redis-5.0.0/redis.conf  
sleep 5
if_redis=`netstat -ntpl | grep redis|wc -l`
if [ $if_redis -ge 1 ];then
    echo -e "\033[32m redis installed \033[0m"
    #[ ! -L "/usr/local/bin/redis-server" ] && ln -s ${max_dir}/redis-5.0.0/src/redis-server /usr/local/bin/redis-server
    #[ ! -L "/usr/local/bin/redis-cli" ] && ln -s ${max_dir}/redis-5.0.0/src/redis-cli /usr/local/bin/redis-cli
    #source /etc/profile
else
    echo -e "\033[31m redis no started \033[0m"
fi
}
#安装jdk1.8
function jdk_install(){
cd ${max_dir} && \
tar -xf $file/jdk-8u321-linux-x64.tar.gz && \
ln -s jdk1.8.0_321/ jdk && \
echo "export JAVA_HOME=${max_dir}/jdk" >/etc/profile.d/jdk.sh && \
source /etc/profile.d/jdk.sh && \
echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile.d/jdk.sh && \
source /etc/profile.d/jdk.sh  && \
java -version 2&>/dev/null
if [ $? -eq 0 ];then
    echo -e "\033[32m jdk installed \033[0m"
else
    echo -e "\033[31m jdk install error \033[0m"
fi
}
#部署tomcat8.5
function tomcat_install(){
cd ${max_dir} && \
tar -xf $file/apache-tomcat-8.0.1.tar.gz && \
mv apache-tomcat-8.0.1 tomcat && \
cd ${max_dir}/tomcat/bin && \
./startup.sh  2&>/dev/null && \
sleep 5
if_tomcat=`netstat -ntpl|grep "java" | wc -l`
if [ $if_tomcat -ge 1 ];then
    echo -e "\033[32m tomcat installed \033[0m"
else
    echo -e "\033[31m tomcat no started \033[0m"
fi
}
#部署minio
function minio_install(){
cd ${max_dir} && \
tar -xf $file/minio_amd64_install.tar.gz && \
cd minio_amd64_install && \
bash ctl.sh install && \
bash ctl.sh start 
sleep 5
if_minio=`netstat -ntpl | grep minio | wc -l`
if [ $if_minio -ge 1 ];then
    echo -e "\033[32m minio installed \033[0m"
else
    echo -e "\033[31m minio install error \033[0m"
fi
}
#部署nginx
function nginx_install(){
yum -y install gcc gcc-c++ zlib-devel openssl openssl-devel 2&>/dev/null && \
cd ${max_dir} && \
tar -xf $file/nginx-1.20.2.tar.gz && \
tar -xf $file/pcre-8.40.tar.gz && \
cd ${max_dir}/pcre-8.40 && \
./configure && make && make install && \
cd ${max_dir}/nginx-1.20.2 && \
./configure --prefix=${max_dir}/nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module && \
make && make install && \
ln -s ${max_dir}/nginx/sbin/nginx /usr/local/sbin/ 
nginx
sleep 5
if_nginx=`netstat -ntpl | grep "nginx" | wc -l `
if [ $if_nginx -ge 1 ];then
    echo -e "\033[32m nginx installed \033[0m"
else
    echo -e "\033[31m nginx no started \033[0m"
fi
}
function init_1(){
init_yum
minio_install
jdk_install
tomcat_install
nginx_install
redis_install
mysql_install
}
#第一次执行,进行安装服务
init_1
#最后需要手动输入一下回车键,然后修改脚本开始第二次执行即可
#第二次修改mysql密码即可
#等待上面几个函数执行完成之后,执行下面这个修改mysql密码,执行脚本后面跟初始化密码,可以使用单引号括住,以免识别密码错误,执行时要把上面的几个函数调用注释掉
#mysql_init $1


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
20天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
2月前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
48 5
linux系统服务二!
|
2月前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
59 3
linux系统服务!!!
|
2月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
51 0
Linux 如何更改默认 Shell
|
3月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
87 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
413 3
|
2月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
170 3
|
2月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
97 1