linux编译安装指令
configure、make、make install 命令
configure:配置,是用来检测你的安装平台的目标特征的。比如它会检测你是不是有 CC 或 GCC,并不是需要 CC 或 GCC,它是个 shell 脚本。configure 脚本负责在使用的系统上准备好软件的构建环境。确保接下来的构建和安装过程所需要的依赖准备好,并且搞清楚使用这些依赖需要的东西。
make:构建,用来编译,它从 Makefile 中读取指令,然后编译。下载的源码包一般没有一个最终的 Makefile 文件,一般是一个模版文件,然后 configure 根据系统的参数生成一个定制化的 Makefile 文件。这个过程会执行在 Makefile 文件中定义的一系列任务将软件源代码编译成可执行文件。
make install:安装,它也从 Makefile 中读取指令,安装到指定的位置。make install 命令就是将可执行文件、第三方依赖包和文档复制到正确的路径。
清除 make 生成的文件:make clean
清除 make 和 configure 生成的文件,包括 Makefile:make distclean
apt 源安装 php
由于 debian 11 带的 php 版本是 7.4,有点老,所以我们可以使用 debian 开发者 Ondřej Surý 维护的 php 源 deb.sury.org 。
注意:以下方式还可以安装 php 5.6 版本
1
2
3
4
5
6
7
8
9
10
11
12
13
# 首先,使用下面的命令安装所须的软件包:
apt install ca-certificates apt-transport-https software-properties-common -y
# 安装所须软件包后,使用以下命令将 Sury 存储库添加到 APT:
echo "deb [https://packages.sury.org/php/](https://packages.sury.org/php/) $( lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
# 然后,使用以下命令下载并添加 GPG 密钥:
wget -qO - [ https://packages.sury.org/php/apt.gpg]( https://packages.sury.org/php/apt.gpg) | apt-key add -
# 上述添加 GPG 密钥的命令会提示 Warning: apt-key is deprecated,但是可以执行成功,如果不想要报 Warning 可以换成下面的命令:
wget -O /etc/apt/trusted.gpg.d/php.gpg [ https://packages.sury.org/php/apt.gpg]( https://packages.sury.org/php/apt.gpg)
# 完成后,使用以下命令更新存储库,到此,sury 源添加完成。
apt update
安装 php 指定版本
1
2
3
4
5
6
7
8
# 如果要安装 php 的最新版本,可以执行:
apt install php-fpm php-mysql php-mbstring php-curl php-dom php-imagick php-zip php-gd php-intl
# 如果要安装指定的版本,例如安装 php8.0,可以执行:
apt install php8.0-fpm php8.0-mysql php8.0-mbstring php8.0-curl php8.0-dom php8.0-imagick php8.0-zip php8.0-gd php8.0-intl
apt install php5.6-fpm php5.6-mysql php5.6-mbstring php5.6-curl php5.6-dom php5.6-imagick php5.6-zip php5.6-gd php5.6-intl
# 注意,使用命令 apt install php8.0 后,会一并安装Apache。
# php 指的应该是整套能运行 php 的环境,php 需要在 libapache2-mod-php5, libapache2-mod-php5filter, php5-cgi, or php5-fpm 以上环境之一运行,如果没有则默认选了第一种,所以会推荐安装 apache。参考回答: https://learnku.com/articles/55616](https://learnku.com/articles/55616
启动 php-fpm:systemctl status php8.0-fpm.service
源码编译安装 php
安装编译程序和相关依赖,可以运行 ./configure
命令检查。缺啥安装啥
1
apt-get install gcc make libxml2 libxml2-dev zlib1g-dev libcurl4-gnutls-dev libreadline-dev
创建安装目录
1
mkdir -p /usr/local/php/5.6
下载 php 5.6 的源码包,解压后进入源码文件夹下
生成配置文件
1
./configure --prefix= /usr/local/php/5.6 --with-config-file-path= /usr/local/php/5.6 --enable-fpm --enable-cli
出现问题:报错 Cannot find OpenSSL's libraries
运行命令:find / -name libssl.so
,输出:/usr/lib/x86_64-linux-gnu/libssl.so
建立软连接:ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
重新编译即可
编译、安装
复制 php.ini
1
2
# php.ini-development(开发环境用)与php.ini-production(生产环境用)
cp php.ini-production /usr/local/php/5.6/php.ini
复制启动脚本
1
2
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm
chmod +x /etc/init.d/php5.6-fpm
复制生成 php-fpm.conf
文件
1
cp /usr/local/php/5.6/etc/php-fpm.conf.default /usr/local/php/5.6/etc/php-fpm.conf
修改 php-fpm.conf
1
2
3
去掉 pid = run/php-fpm.pid 前面的分号
并在listen = 127.0.0.1:9000后面添加
listen.allowed_clients = 127.0.0.1
参考: https://blog.csdn.net/qq_43017750/article/details/105053831
安装 nginx
安装:apt install nginx
nginx 配置文件
root、alias 配置区分: https://zhuanlan.zhihu.com/p/131009164
php 相关配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
.....
# pass PHP scripts to FastCGI server
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
location ~ \.php$ {
fastcgi_index index.php ;
include fastcgi_params ;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name ;
fastcgi_pass unix:/run/php/php5.6-fpm.sock ; # 使用unix sockets
# fastcgi_pass 127.0.0.1:9000; # tcp sockets
}
}
反向代理配置
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
server {
listen 80 ; # 代理服务器监听的端口
server_name 192 .168.10.1 ; # 代理服务器地址或绑定域名
# 访问http://192.168.10.1/,到http://192.168.10.2上
location / { # 访问80端口后的所有路径都转发到 proxy_pass 配置的ip中
proxy_pass http://192.168.10.2 ; # 配置真实网站的ip地址和端口号 【注:url地址需加上http:// 或 https://】
}
# 访问http://192.168.10.1/dvwa/这个路径,实际代理到http://127.0.0.1:49154/
location /dvwa/ {
proxy_pass http://127.0.0.1:49154/ ; # 加不加 / 的区别。绝对路径和相对路径的区别
# 加反斜杠:访问http://192.168.10.1/dvwa/代理到http://127.0.0.1:49154/下
# 不加反斜杠:访问http://192.168.10.1/dvwa/代理到http://127.0.0.1:49154/dvwa/下
proxy_redirect / /dvwa/ ; # 处理302跳转事件,将location的 / 路径,替换为/dvwa/,保证路径的正确。
}
# 访问http://192.168.10.1/pikachu/这个路径,实际代理到http://127.0.0.1:49156/
location /pikachu/ {
proxy_pass http://127.0.0.1:49156/ ;
}
# 访问http://192.168.10.1/sqli-lab/这个路径,实际代理到http://127.0.0.1:49158/
location /sqli-lab/ {
proxy_pass http://127.0.0.1:49158/ ;
}
}
ssl 配置
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
server {
#监听443端口
listen 443 ;
#你的域名
server_name lanhuli.top ;
ssl on ;
#ssl证书的pem文件路径
ssl_certificate /root/cert/www.lanhuli.top.pem ;
#ssl证书的key文件路径
ssl_certificate_key /root/cert/www.lanhuli.top.key ;
location / {
root /var/www/html ;
index index.php index.html ;
}
location ~ \.php$ {
include fastcgi_params ;
fastcgi_param SCRIPT_FILENAME /var/www/html $fastcgi_script_name ;
fastcgi_pass unix:/run/php/php8.0-fpm.sock ;
}
}
server {
listen 80 ;
server_name lanhuli.top ;
#将请求转成https
rewrite ^(.*) $ [https:// $host$1] (https:// $host$1 ) permanent ;
}
basic 认证配置
1)使用本机认证:auth_basic。还有另一种方式,这个比较简单,就用这个就行。
需要先安装 htpasswd 工具:yum install httpd-tools
或者 apt install apache2-utils
生成密码文件:htpasswd -c ./mypasswd 用户名
,然后输入密码。这个存放的文件路径可以随意指定(这个文件的存放路径必须要让 Nginx 有权限访问到 。可以放到 /usr/local/share/mypasswd
)。
2)修改 Nginx 的配置文件
注意:不要修改 Nginx 自带的默认配置文件,一定要新建一个配置文件。
新建配置文件:touch /etc/nginx/conf.d/my-nginx.conf
写入内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {
listen 26660 ; # 监听端口
server_name 127 .0.0.1 ;
index index.html ;
# auth_basic 认证配置,就这两行
auth_basic "User Authentication" ;
auth_basic_user_file /usr/local/share/mypasswd ; # 注意,这个文件的存放路径必须要让 Nginx 有权限访问到,不然报错
# Nginx 代理转发
location / {
proxy_pass http://127.0.0.1:80 ;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
}
}
如果使用 curl 和 wget 命令进行下载:
1
2
curl -u username:password URL
wget --http-user= username --http-passwd= passwd URL
上传文件限制大小问题
1)nginx 配置问题
nginx 服务器报错:413 Request Entity Too Large
打开配置文件 /etc/nginx/nginx.conf
。在 http{}段中加入 client_max_body_size 100m;
100 m 为允许最大上传的大小。然后重启 nginx
2)php 配置问题
上传的文件大小超过 php.ini 文件中定义的 upload_max_filesize 值
打开 php.ini,把 upload_max_filesize 和 post_max_size 修改为 100 M,然后重启。
注意:
通过 find 命令查找发现有两个 php.ini 文件
查看 phpinfo,发现使用的是 fpm 下的文件
安装 mysql
安装
1)配置 MySQL 存储库
MySQL 全球最流行的开源关系型数据库管理系统,它在默认的 Debian 存储库中不可用。 MariaDB 是 Debian 10 中的默认数据库系统。MySQL 已经为我们提供了一个 Debian 的 Deb 包,通常是十几 K。我们选择 download。使用 wget 进行下载
1
2
wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb
2)安装 MySQL
1
2
sudo apt update
sudo apt install mysql-server
安装完成后,MySQL 服务会默认自动运行。
重置密码(注意版本)
1、知道旧密码,登陆 MySQL
MySQL 8.0 之前:set password for root@localhost = password ('root 123');
MySQL 8.0 之后:ALTER user root@localhost IDENTIFIED BY 'root 0123';
问题:
简单密码不符合策略
这个与验证密码策略 validate_password_policy 的值有关。默认是 1,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。如果不想设置 8 位,或者想设置简单点,可以选择 Policy 0.
在修改策略之前它需要你先改密码
这是其它的一些密码设置
SHOW VARIABLES LIKE 'validate_password%';
1
2
3
set global validate_password_policy = 0 ;
set global validate_password_length = 6 ;
set password for root @ localhost = password ( 'root 123' );
2、忘记密码
第一步:在命令行输入 net stop mysql 命令关闭 mysql 服务
第二步:使用–skip-grant-tables 选项启动 mysql 服务(服务器将不加载权限判断,任何用户都能访问数据库)
在命令行输入 mysqld –skip-grant-tables
命令运行之后,用户无法再输入指令,此时如果在任务管理器中可以看到名称为 mysqld 的进程,则表示可以用 root 用户登录服务器了
第三步:打开另一个命令行窗口,输入不加密码的登录命令
mysql -u root
登录成功后可以使用 update 语句修改密码
修改完成后,必须使用 flush privileges 语句刷新权限表,这样新的密码才能生效
第四步:将输入 mysqld –skip-grant-tables 命令的命令行窗口关闭,接下来就可以使用新密码登录 mysql 服务器了
3、root 用户自带了一个随机密码
一般来说 mysql 安装完之后默认是没有密码的,但是在执行 mysqld –initialize 之后会初始化密码 (默认密码为随机的高强度密码)这个密码会储存在错误日志中。
找到日志:find / -name "mysqld.log"
打开查找:cat /var/log/mysqld.log|grep password
安装 Samba
安装:
1
2
3
4
apt install smaba smbclient samba-common # 安装 smaba 即可
# 用于实现 SMB/CIFS(Server Message Block/Common Internet File System)协议。samba 服务器提供了文件共享和打印服务,允许 Windows 客户端通过网络与 Linux/UNIX 服务器交互
# samba 软件包的公共文件和库。它包含一些共享的配置文件、脚本、语言文件和其他公共资源,这些资源被 samba 服务器和客户端程序所共享和使用。
# samba 软件包的客户端组件。它提供了一些用于与 samba 服务器进行交互的命令行工具,例如 smbclient、smbget 和 smbtree 等。这些工具允许用户在 Linux/UNIX 系统上访问和管理远程的 samba 共享文件夹。
指定账户访问
1
2
3
4
5
6
7
8
# 创建一个用来共享的目录
sudo mkdir -p /home/work/sharedir
# 创建一个账户,用来登录
sudo useradd smbuser -s /usr/sbin/nologin
# 修改文件权限使得 smbuser 用户能够访问共享路径
sudo chown smbuser: smbuser /home/work/sharedir
# 将用户 smbuser 添加到 samba 的 smbpasswd file 中(即在 samba 服务中注册该账户)
sudo smbpasswd -a smbuser
修改 samba 配置文件(/etc/samba/smb.conf
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 用户访问时看到的名字
[ myshare]
# 共享文件夹的注释说明
comment = 锐捷小主机共享
# 需要填写实际的共享文件夹的路径
path = /srv/samba/share
# 设置为可写入
writable = yes
#设置可访问的用户 ,此处为前面添加的用户 smbuser(注意 users 不要拼写错误)
valid users = xujiajun
#是否允许访客 ,否
guest ok = no
#可浏览 ,是
browsable = yes
# 新建文件的权限
create mask = 0777
# 新建目录即文件夹的权限
directory mask = 0777
配置含义
[共享名称]: 共享中看到的共享目录名
comment = 共享的描述.
path = 共享目录路径 (可以用%u、%m 这样的宏来代替路径如:/home/share/%u)
browseable = yes/no 指定该共享是否在“网上邻居”中可见。
writable = yes/no 指定该共享路径是否可写。
read only = yes/no 设置共享目录为只读 (注意设置不要与 writable 有冲突)
available = yes/no 指定该共享资源是否可用。
admin users = bobyuan,jane 指定该共享的管理员, 用户验证方式为“security=share”时,此项无效。
valid users = bobyuan,jane 允许访问该共享的用户或组-“@+组名”
invalid users = 禁止访问该共享的用户与组 (同上)
write list = 允许写入该共享的用户
public = yes/no 共享是否允许 guest 账户访问。
guest ok = yes/no 意义同“public”。
create mask = 0700 指定用户通过 Samba 在该共享目录中创建文件的默认权限。0600 代表创建文件的权限为 rw-------
directory mask = 0700 指定用户通过 Samba 在该共享目录中创建目录的默认权限。0600 代表创建目录的权限为 rwx------
安装 frp
frp 项目地址: https://github.com/fatedier/frp
官方文档: https://gofrp.org/zh-cn/
ssh 转发: https://gofrp.org/zh-cn/docs/examples/ssh/
服务端配置,修改 frps.toml
。新版 frp 配置和旧版的字段名不太一样。注意:新版字符串要加双引号 。参考:新版参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[ common ]
# 服务端监听地址,用于接收 frpc 的连接,默认监听 0.0.0.0。
bindAddr = "0.0.0.0"
# 10000 为服务端 frp 与客户端 frp 相互通信的端口。服务端监听端口,默认值为 7000。
bindPort = 10000
# HTTP 请求的监听端口为 8080
vhostHTTPPort = 8080
# 设置连接密钥
token = "qwer1234"
# 设置 frp 后台端口
dashboard_port = 8000
# 设置后台帐号和密码
dashboard_user = "admin"
dashboard_pwd = "××××××××××"
客户端配置,修改 frpc.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[ common ]
# 服务器的公网地址
serverAddr = "103.246.244.137"
# 10000 为服务端 frp 与客户端 frp 相互通信的端口
serverPort = 10000
# 设置连接密钥
token = "qwer1234"
[[ proxies ]]
name = "web" # name 值唯一
type = "http"
localPort = 80
customDomains = [ "omv.lanhuli.top" ]
[ smb ]
# 文件共享 smb 协议通过 tcp 通信
type = tcp
local_ip = 127.0 . 0.1
# smb 协议的本地端口
local_port = 445
# remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
# 设定远程端口,当访问服务器的 8090 端口时,数据会被转发到本地 445 端口
remote_port = 8089
服务端运行 frp 命令:./frps -c frps.toml
客户端运行 frp 命令:./frpc -c frpc.toml
我的配置
1
2
3
4
5
6
7
8
bindPort = 16669
auth . token = "123456"
# 服务端面板
webServer . addr = "0.0.0.0"
webServer . port = 16668
webServer . user = "123456789"
webServer . password = "123456789"
客户端
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
serverAddr = "x.x.x.x"
serverPort = 16669
auth . token = "123456"
# 客户端面板
webServer . addr = "0.0.0.0"
webServer . port = 7400
webServer . user = "admin"
webServer . password = "admin"
[[ proxies ]]
name = "omv"
type = "tcp"
localIP = "127.0.0.1"
localPort = 26660
remotePort = 16660
# docker 版的 qbittorrent 服务
[[ proxies ]]
name = "qbit"
type = "tcp"
localIP = "127.0.0.1"
localPort = 16661
remotePort = 16661
# docker 版的 jellyfin 服务
[[ proxies ]]
name = "jellyfin"
type = "tcp"
localIP = "127.0.0.1"
localPort = 26662
remotePort = 16662
2、后台运行 frp 程序
参考官网: https://gofrp.org/zh-cn/docs/setup/systemd/
创建 frps.service
文件
1
sudo vim /etc/systemd/system/frps.service
写入内容
1
2
3
4
5
6
7
8
9
10
11
12
13
[ Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[ Service]
Type = simple
# 启动 frps 的命令,需修改为您的 frps 的安装路径
ExecStart = /path/to/frps -c /path/to/frps.toml
[ Install]
WantedBy = multi-user.target
使用 systemd 命令管理 frps 服务
1
2
3
4
5
6
7
8
# 启动 frp
sudo systemctl start frps
# 停止 frp
sudo systemctl stop frps
# 重启 frp
sudo systemctl restart frps
# 查看 frp 状态
sudo systemctl status frps
设置 frps 开机自启动
1
sudo systemctl enable frps
客户端方法同上
安装 dnsmasq
安装:apt install dnsmasq