Anolis 8.8 软件包部署适配(二)

系统版本

cat /etc/os-release

代码语言:javascript
复制
NAME="Anolis OS"
VERSION="8.8"
ID="anolis"
ID_LIKE="rhel fedora centos"
VERSION_ID="8.8"
PLATFORM_ID="platform:an8"
PRETTY_NAME="Anolis OS 8.8"
ANSI_COLOR="0;31"
HOME_URL="https://openanolis.cn/"

内核版本

uname -r

代码语言:javascript
复制
5.10.134-13.an8.x86_64

Anolis软件仓库

  • BaseOS:BaseOS 软件包源,提供安装基础的所有核心包。
  • AppStream:AppStream 软件包源,提供额外的多场景,多用途的用户态程序,数据库等。
  • Extras:Extras软件包源,提供第三方仓库源。
  • PowerTools:PowerTools 软件包源, 提供开发者需要的额外包。
  • Plus:Plus 软件包源,提供社区滚动内核以及相应的组件。
  • DDE:DDE 软件包源,提供 DDE 桌面环境以及相应的组件。
  • kernel-5.10:5.10 内核源,提供 5.10 内核包以及相应的组件。
  • HighAvailability:高可用软件包源,提供高可用功能所需的软件包。

Anolis 镜像仓

代码语言:javascript
复制
http://mirrors.openanolis.cn/anolis

MySQL 8.0.32 部署

1,安装mysql

代码语言:javascript
复制
dnf install mysql mysql-server

2,启动数据库

代码语言:javascript
复制
systemctl  start  mysqld && systemctl  enable  mysqld

3,初始化数据库

代码语言:javascript
复制
mysql_secure_installation

4,登录测试

代码语言:javascript
复制
mysql -uroot  -p

5,查看MySQL版本信息

mysql -V

代码语言:javascript
复制
mysql  Ver 8.0.32 for Linux on x86_64 (Source distribution)

重置root密码

代码语言:javascript
复制
alter user 'root'@'localhost' identified by "password";
flush privileges;

查看数据库用户权限和用户授权

代码语言:javascript
复制
select  host,user,plugin,authentication_string from mysql.user;
SHOW GRANTS FOR 'zabbix'@'%';

PHP 8.0.26 安装

Anolis 8.8 系统php软件默认使用 php7.2 流模块,安装php8.0需要切换软件流模块。

1,查看php软件流模块

代码语言:javascript
复制
dnf module  list  php 

2,切换php安装版本

代码语言:javascript
复制
dnf module  install php:8.0

3,安装php软件包

代码语言:javascript
复制
dnf  install php php-fpm php-mysqlnd php-cli  php-gd php-mbstring php-xml php-bcmath php-ldap

dnf module 介绍

查看系统可用的软件包使用 dnf search NAME,dnf list NAME,命令只列出来已经启用的模块流的模块包,可选流的软件包并不在其中。dnf module list 系统可用的模块,并查看哪些流是默认的或已经启用。

安装软件包

软件包可以通过运行dnf install NAME命令按常规方式安装。任何传统的软件包,或者来自已启用模块的模块化软件包都可以通过这种方式安装。来自其他模块流的包可以通过启用模块流,然后安装单个包,或者直接使用dnf module install。

启用模块

启用一个模块流并使其软件包可供安装,对于已经安装过一个版本,再执行启用会报错

代码语言:javascript
复制
dnf module enable nginx:1.22

安装模块

代码语言:javascript
复制
dnf module install nginx:1.22

Nginx 编译安装

1,安装Nginx依赖软件包

代码语言:javascript
复制
dnf install  libxml2 libxml2-devel libxslt-devel  gcc gcc-c++ make pcre  pcre-devel zlib zlib-devel openssl openssl-devel perl-ExtUtils-Embed gd-devel  -y

2,创建nginx用户、用户组

代码语言:javascript
复制
groupadd   nginx
useradd -s /sbin/nologin -M -g nginx nginx

3,编译 Nginx

代码语言:javascript
复制
下载Nginx 源码包
wget -P /mnt http://nginx.org/download/nginx-1.20.1.tar.gz
解压nginx压缩包
tar -zxvf /mnt/nginx-1.20.1.tar.gz -C /opt
进入到解压目录
cd /opt/nginx-1.20.1/

4,创建 nginx Makefile文件

代码语言:javascript
复制
./configure --user=nginx --group=nginx \
--prefix=/usr/local/nginx/ \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre

参数:--prefix=/usr/local/nginx/ 指定nginx 服务安装目录

5,编译安装

代码语言:javascript
复制
make && make install

6,Nginx 目录介绍

nginx 安装目录 /usr/local/nginx

修改目录文件属主属组

代码语言:javascript
复制
chown -R  nginx:nginx  /usr/local/nginx/

/usr/local/nginx目录有4个文件目录分别是conf、html、logs、sbin

  • conf 配置文件目录
  • html 网站的静态文件目录
  • sbin 可执行(启动)文件目录
  • logs 日志存储目录

7,配置nginx开机启动文件

代码语言:javascript
复制
cat << EOF >> /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
 
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx reload
ExecStop=/usr/local/nginx/sbin/nginx quit
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target
EOF

8,启动并开机启动 nginx

代码语言:javascript
复制
systemctl start nginx.service  && systemctl enable nginx.service

9,查看进程

代码语言:javascript
复制
ps -ef | grep nginx 或 ps -aux | grep nginx

10,nginx 软链接

启动、重启、关闭都需要进入/usr/lcoal/nginx/sbin下目录通过./nginx 执行,创建一个软链接到/usr/bin/nginx

代码语言:javascript
复制
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

Nginx 添加编译模块

1,进入到解压目录

代码语言:javascript
复制
cd /opt/nginx-1.20.1/

2,重新创建Makefile文件

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-http_stub_status_module

3,执行make,生成二进制文件

代码语言:javascript
复制
make

执行make完毕后,objs目录下会生成新的nginx执行文件。

注意:不要执行make install,不要会覆盖原有/usr/local/nginx/目录下nginx二进制包。

4,替换nginx 执行文件

代码语言:javascript
复制
备份nginx

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
复制新的ngin执行文件到/usr/local/nginx/sbin目录下进行替换
cp -f /opt/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/nginx
cp: overwrite '/usr/local/nginx/sbin/nginx'? y

5,检查配置

代码语言:javascript
复制
cd /usr/local/nginx/sbin
./nginx -t

6,重启nginx 验证

代码语言:javascript
复制
重载nginx配置文件
cd /usr/local/nginx/sbin/
./nginx -s reload
查看nginx 加载模块和版本
nginx -V

Nginx 编译安装版本升级

1,下载nginx升级包

代码语言:javascript
复制
下载Nginx 源码包
wget -P /mnt http://nginx.org/download/nginx-1.23.4.tar.gz
解压nginx压缩包
tar -zxvf /mnt/nginx-1.23.4.tar.gz -C /opt
进入到解压目录
cd /opt/nginx-1.23.4/

2,创建Makefile文件

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx/ --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-debug --with-http_stub_status_module

3,执行make,生成二进制文件

执行make命令,make 执行make完毕后,objs目录下会生成升级的nginx执行文件

4,升级替换nginx 执行文件

代码语言:javascript
复制
备份原版本nginx执行文件
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak01
替换二进制启动文件
cp -f /opt/nginx-1.23.4/objs/nginx/usr/local/nginx/sbin/
cp: overwrite '/usr/local/nginx/sbin/nginx'? y
重载nginx配置
nginx -s reload

Anolis 官方的镜像仓库缺失libssh2-devel、fping软件包需要编译安装

libssh2-devel 软件包

libssh2官方网站

https://libssh2.org/

代码语言:javascript
复制
下载libssh2源码压缩包
wget https://libssh2.org/download/libssh2-1.10.0.tar.gz
tar -zxvf libssh2-1.10.0.tar.gz
cd libssh2-1.10.0
/configure --prefix=/usr/local/libssh2
make && make install
创建 "libssh2.so.1" 的软链接 "/usr/local/libssh2/lib/libssh2.so.1"
ln -s /usr/local/libssh2/lib/libssh2.so.1 /usr/lib64/

fping软件包

fping 官方网站

https://fping.org/

代码语言:javascript
复制
下载fping软件包
wget https://fping.org/dist/fping-5.1.tar.gz
tar -zvxf fping-5.1.tar.gz
./configure --prefix=/usr/local/fping
make && make install
fping 执行文件
/usr/local/fping/sbin

fping测试

代码语言:javascript
复制
/usr/local/fping/sbin/fping ::1

SUID(Set User ID) SGID(Set Group ID)

SUID(Set User ID)和SGID(Set Group ID)是Linux系统中的两个权限特性。允许特定用户或组以文件以及执行程序的属主或属组的身份执行文件,而不是以当前用户的权限执行。

SUID允许一个可执行程序在执行时以文件所有者的身份运行,而不是执行该程序的用户的身份。

附加SUID权限

代码语言:javascript
复制
chmod u+s /usr/local/fping/sbin/fping

撤销SUID权限

代码语言:javascript
复制
chmod u-s /usr/local/fping/sbin/fping

测试

代码语言:javascript
复制
su - zabbix -s /bin/sh -c "/usr/local/fping/sbin/fping ::1"

SGID允许一个可执行程序在执行时以文件组的身份运行,而不是执行该程序的用户的身份。例如,一个目录被设置为SGID,当用户在该目录下创建新文件时,新文件将继承该目录的组所有权。