Linux常用软件安装脚本

注意:使用 source 脚本名来执行,sh 会新创建子 shell,子 shell 设置的环境变量不会影响到父 shell

MySQL

安装
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/bin/bash

software_dir="/usr/local/software"
mysql_package="mysql-8.0.26-linux-glibc2.12-x86_64"
mysql_package_xz=${mysql_package}.tar.xz
mysql_package_url="https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz"
mysql_dir="/usr/local/mysql"
mysql_data_dir=${mysql_dir}/data
mysql_log_dir=${mysql_dir}/log
mysql_user="mysql"
mysql_user_group="mysql"
mysql_username="root" # 不可改
mysql_password=""
mysql_init_password="admin123456"
mysql_profile="/etc/profile.d/mysql.sh"

# 创建目录
function create_dir() {
if [ ! -d $1 ]; then
mkdir -p $1
echo "=====>创建文件夹:$1"
fi
}

# 压缩包存储目录
create_dir $software_dir
cd $software_dir

# mysql安装包是否存在,不存在则下载
if [ ! -f ${software_dir}'/'${mysql_package_xz} ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载mysql安装包到:$software_dir"
wget $mysql_package_url
fi

echo "=====>解压缩mysql安装包"
tar -xf $mysql_package_xz

# 移动文件并创建目录
mv $mysql_package $mysql_dir
create_dir $mysql_data_dir
create_dir $mysql_log_dir
cd $mysql_dir

egrep "^$mysql_user_group" /etc/group >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "=====>创建mysql用户组"
groupadd $mysql_user_group
fi

egrep "^$mysql_user" /etc/passwd >/dev/null 2>&1
if [ $? -ne 0 ]
then
echo "=====>创建mysql用户"
useradd -g $mysql_user_group $mysql_user
fi

echo "=====>添加mysql用户权限"
chown -R ${mysql_user_group}'.'${mysql_user} .

echo "=====>修改my.cnf配置文件"
echo "[mysqld]
# mysql 安装根目录
basedir=$mysql_dir
# mysql 数据文件所在位置
datadir=$mysql_data_dir
# socket 文件所在位置
socket=$mysql_dir/mysql.sock
# 日志文件
log-error=$mysql_log_dir/mysql.log
# pid
pid-file=$mysql_dir/mysql.pid
# 数据默认字符集
character-set-server=utf8mb4
# 数据库字符集对应一些排序等规则,注意要和 character-set-server 对应
collation-server=utf8mb4_general_ci
# 端口
port=3306
# sql 模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 最大连接数
max_connections=2048
# 最大错误连接数
max_connect_errors=1000
# mysql 打开的文件描述符限制,当 open_files_limit 没有被配置的时候,比较 max_connections*5 和 ulimit -n 的值,哪个大用哪个
# 当 open_file_limit 被配置的时候,比较 open_files_limit 和 max_connections*5 的值,哪个大用哪个
open_files_limit = 65535
# mysql 服务的唯一编号,每个 mysql 服务 id 需唯一
server-id=1
# sql 数据包发送的大小
max_allowed_packet=128M
# mysql 连接闲置超过一定时间后将会被强行关闭,默认为 8 个小时,interactive_timeout 参数需要同时配置才能生效
interactive_timeout=1800
wait_timeout=1800
# 慢查询sql日志设置
slow_query_log=1
slow_query_log_file=$mysql_log_dir/mysqld_slow.log
# 慢查询执行的秒数,必须达到此值可被记录
long_query_time=2
# 检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit=100

[client]
socket=$mysql_dir/mysql.sock
default-character-set=utf8mb4" > /etc/my.cnf

echo "=====>数据库初始化"
./bin/mysqld --user=$mysql_user --basedir=$mysql_dir --datadir=$mysql_data_dir --initialize

echo "=====>设置服务开机自启动"
cp -a ${mysql_dir}/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld

echo "=====>配置环境变量"
echo "MYSQL_HOME=$mysql_dir
PATH=\$PATH:\$MYSQL_HOME/bin" > $mysql_profile
source $mysql_profile

echo "=====>启动mysql服务"
systemctl restart mysql > /dev/null 2>&1

echo "=====>设置mysql配置,修改密码,远程访问"
mysql_password=`awk '/A temporary password/{print $NF}' ./log/mysql.log`
mysql -uroot -p"$mysql_password" -e "
alter user 'root'@'localhost' identified with mysql_native_password by '$mysql_init_password';
use mysql;
update user set host='%' where user='root' limit 1;
flush privileges;" --connect-expired-password >/dev/null 2>&1

echo "=====>开启3306端口"
firewall-cmd --zone=public --add-port=3306/tcp --permanent >/dev/null 2>&1
firewall-cmd --reload >/dev/null 2>&1
卸载
1
2
3
4
5
#!/bin/bash

kill -9 $(ps -ef | grep mysql | awk '{printf " " $2}') 2>/dev/null
rm -rf /usr/local/mysql
rm -rf /etc/profile.d/mysql.sh

Redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/bash

software_dir="/usr/local/software"
redis_package="redis-6.2.6"
redis_package_gz=${redis_package}.tar.gz
redis_package_url="https://download.redis.io/releases/redis-6.2.6.tar.gz"
redis_dir="/usr/local/redis"
redis_initd="/etc/init.d/redis"
redis_config=${redis_dir}/etc/redis.conf

# 创建目录
function create_dir() {
if [ ! -d $1 ]; then
mkdir -p $1
echo "=====>创建文件夹:$1"
fi
}

# 压缩包存储目录
create_dir $software_dir
cd $software_dir

# redis安装包是否存在,不存在则下载
if [ ! -f ${software_dir}'/'${redis_package_gz} ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载redis安装包到:$software_dir"
wget --no-check-certificate $redis_package_url
fi

echo "=====>解压缩redis安装包"
tar -xf $redis_package_gz

# 移动文件
mv $redis_package $redis_dir
cd $redis_dir

echo "=====>安装redis必要依赖"
yum -y install gcc gcc-c++ >/dev/null 2>&1

echo "=====>编译安装redis"
make >/dev/null 2>&1 && make install >/dev/null 2>&1

# 文件统一管理
mkdir etc bin
mv redis.conf ${redis_dir}/etc
cd src
mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server ${redis_dir}/bin

echo "=====>设置redis自启动"
cp ${redis_dir}/utils/redis_init_script $redis_initd
sed 's:EXEC=/usr/local/bin/redis-server:EXEC=/usr/local/redis/bin/redis-server:' -i $redis_initd
sed 's:CLIEXEC=/usr/local/bin/redis-cli:CLIEXEC=/usr/local/redis/bin/redis-cli:' -i $redis_initd
sed '19c CONF=/usr/local/redis/etc/redis.conf' -i $redis_initd
chkconfig redis on

echo "=====>修改redis配置"
sed 's:daemonize no:daemonize yes:' -i $redis_config
sed 's:bind 127.0.0.1:# bind 127.0.0.1:' -i $redis_config
sed 's:# requirepass foobared:requirepass admin123456:' -i $redis_config

echo "=====>启动redis服务"
systemctl start redis > /dev/null 2>&1

echo "=====>开启6379端口"
firewall-cmd --zone=public --add-port=6379/tcp --permanent >/dev/null 2>&1
firewall-cmd --reload >/dev/null 2>&1

Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash

software_dir="/usr/local/software"
nginx_package="nginx-1.22.0"
nginx_package_gz="${nginx_package}.tar.gz"
nginx_package_url="http://nginx.org/download/nginx-1.22.0.tar.gz"
nginx_dir="/usr/local/nginx"
nginx_log_dir=$nginx/logs

# 创建目录
function create_dir() {
if [ ! -d $1 ]; then
mkdir -p $1
echo "=====>创建文件夹:$1"
fi
}

# 压缩包存储目录
create_dir $software_dir
cd $software_dir

# mysql安装包是否存在,不存在则下载
if [ ! -f ${software_dir}'/'${nginx_package_gz} ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载nginx安装包到:$software_dir"
wget $nginx_package_url
fi


echo "=====>解压缩nginx安装包"
tar -xf $nginx_package_gz

# 移动到指定目录
mv $nginx_package $nginx_dir
cd $nginx_dir
create_dir $nginx_log_dir

echo "=====>安装nginx必要依赖"
yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel >/dev/null 2>&1

echo "=====>生成makefile"
./configure --prefix=$nginx_dir \
--conf-path=${nginx_dir}/conf/nginx.conf \
--pid-path=${nginx_dir}/nginx.pid \
--error-log-path=${nginx_log_dir}/error.log \
--http-log-path=${nginx_log_dir}/access.log \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-stream \
--with-http_realip_module \
--with-http_flv_module \
--with-http_random_index_module \
--with-mail \
--with-pcre >/dev/null 2>&1

echo "=====>编译安装nginx"
make >/dev/null 2>&1 && make install >/dev/null 2>&1

echo "=====>设置开机自启"
echo "[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=${nginx_dir}/sbin/nginx -c ${nginx_dir}/conf/nginx.conf
ExecReload=${nginx_dir}/sbin/nginx -s reload -c ${nginx_dir}/conf/nginx.conf
ExecStop=${nginx_dir}/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target" > /usr/lib/systemd/system/nginx.service
systemctl enable nginx >/dev/null 2>&1

echo "=====>启动nginx"
systemctl start nginx

echo "=====>开启80端口"
firewall-cmd --zone=public --add-port=80/tcp --permanent >/dev/null 2>&1
firewall-cmd --reload >/dev/null 2>&1

Minio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/bash

software_dir="/usr/local/software"
minio_dir="/usr/local/minio"
minio_username="admin"
minio_password="admin123456"
minio_url="https://dl.minio.io/server/minio/release/linux-amd64/minio"

# minio是否存在,不存在则下载
if [ ! -f ${software_dir}/minio ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载minio到:$software_dir"
wget $minio_url
fi

# 创建目录
mkdir $minio_dir ${minio_dir}/config ${minio_dir}/data
cp minio $minio_dir && cd $minio_dir

echo "=====>赋予权限"
chmod +x minio

echo "=====>设置minio自启动"
echo "[Unit]
Description=minio
After=network.target

[Service]
Environment=\"MINIO_ROOT_USER=$minio_username\"
Environment=\"MINIO_ROOT_PASSWORD=$minio_password\"
ExecStart=$minio_dir/minio server --console-address=:9001 --config-dir $minio_dir/config $minio_dir/data
ExecReload="/bin/kill -s HUP '$MAINPID'"
ExecStop="/bin/kill -s QUIT '$MAINPID'"
StandardOutput=$minio_dir/minio.log
PrivateTmp=true

[Install]
WantedBy=multi-user.target" > /usr/lib/systemd/system/minio.service
systemctl enable minio >/dev/null 2>&1

echo "=====>启动minio,访问 ip:9001"
systemctl start minio

echo "=====>开启端口"
firewall-cmd --zone=public --add-port=9000-9001/tcp --permanent >/dev/null 2>&1
firewall-cmd --reload >/dev/null 2>&1

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

software_dir="/usr/local/software"
java_package="jdk-17.0.5"
java_package_gz=${java_package}_linux-x64_bin.tar.gz
java_package_url="https://download.oracle.com/java/17/archive/jdk-17.0.5_linux-x64_bin.tar.gz"
java_dir="/usr/local/java"
java_version="17"
java_profile="/etc/profile.d/java.sh"

# 创建目录
function create_dir() {
if [ ! -d $1 ]; then
mkdir -p $1
echo "=====>创建文件夹:$1"
fi
}

# 压缩包存储目录
create_dir $software_dir
cd $software_dir

# 创建java存储目录
create_dir $java_dir

# java安装包是否存在,不存在则下载
if [ ! -f ${software_dir}'/'${java_package_gz} ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载java安装包到:$software_dir"
wget $java_package_url
fi

echo "=====>解压缩java安装包"
tar -xf $java_package_gz

# 移动文件
mv $java_package $java_dir/$java_version

echo "=====>配置环境变量"
echo "JAVA_HOME=$java_dir/$java_version
PATH=\$PATH:\$JAVA_HOME/bin" > $java_profile
source $java_profile

Nacos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash

software_dir="/usr/local/software"
nacos_package_gz="nacos-server-2.1.0.tar.gz"
nacos_package_url="https://github.com/alibaba/nacos/releases/download/2.1.0/nacos-server-2.1.0.tar.gz"
nacos_dir="/usr/local/nacos"
nacos_version="2.1.0"
nacos_conf_properties=$nacos_dir/$nacos_version/conf/application.properties
nacos_conf_sql=$nacos_dir/$nacos_version/conf/nacos-mysql.sql
java_home="/usr/local/java/17"
mysql_username=root
mysql_password=admin123456

# 创建目录
function create_dir() {
if [ ! -d $1 ]; then
mkdir -p $1
echo "=====>创建文件夹:$1"
fi
}

# 压缩包存储目录
create_dir $software_dir
cd $software_dir

# nacos安装包是否存在,不存在则下载
if [ ! -f ${software_dir}'/'${nacos_package_gz} ]; then
if ! command -v wget; then
echo "=====>安装wget命令"
yum -y install wget >/dev/null 2>&1
fi

echo "=====>下载nacos安装包到:$software_dir"
wget $nacos_package_url
fi

echo "=====>解压缩nacos安装包"
tar -xf $nacos_package_gz

# 创建目录
create_dir $nacos_dir

# 移动文件
mv nacos $nacos_dir/$nacos_version

echo "=====>执行sql"
mysql -u$mysql_username -p"$mysql_password" -e "create database nacos_config;" --connect-expired-password >/dev/null 2>&1
mysql -u$mysql_username -p"$mysql_password" -Dnacos_config < $nacos_conf_sql >/dev/null 2>&1

echo "=====>修改配置文件"
sed '33c spring.datasource.platform=mysql' -i $nacos_conf_properties
sed '36c db.num=1' -i $nacos_conf_properties
sed '39c db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai' -i $nacos_conf_properties
sed '40c db.user.0='$mysql_username -i $nacos_conf_properties
sed '41c db.password.0='$mysql_password -i $nacos_conf_properties

echo "=====>设置开机自启动"
echo "[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=$JAVA_HOME"
ExecStart=$nacos_dir/$nacos_version/bin/startup.sh -m standalone
ExecReload=$nacos_dir/$nacos_version/bin/shutdown.sh
ExecStop=$nacos_dir/$nacos_version/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target" > /usr/lib/systemd/system/nacos.service
systemctl enable nacos >/dev/null 2>&1

echo "=====>启动nacos"
systemctl start nacos

echo "=====>开启8848端口"
firewall-cmd --zone=public --add-port=8848/tcp --permanent >/dev/null 2>&1
firewall-cmd --reload >/dev/null 2>&1