潘逸安的博客

潘逸安

yum except KeyboardInterrupt

升级完python后,yum安装发现这个错误;

找了许久才发现是python的问题 

1
2
3
4
5
[root@localhost bin]# yum  
  File "/usr/bin/yum", line 30  
    except KeyboardInterrupt, e:  
                            ^  
SyntaxError: invalid syntax

解决的办法是:

1
vi /usr/bin/yum

将文件头

1
2
3
4
#!/usr/bin/python  
import sys  
try:  
    import yum  

修改为

1
2
3
4
5
#!/usr/bin/python2  
import sys  
try:  
    import yum  
问题解决

Mac中的定时任务利器-launchctl

launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。
launchctl是通过配置文件来指定执行周期和任务的。

当然mac也可以像linux系统一样,使用crontab命令来添加定时任务,这里就不赘述,具体可参见:OS X 添加定时任务
下面将手把手教你在mac上创建定时任务。(任务目标:每天晚上十点定时执行/Users/demo/helloworld.py的python程序)

1. 创建run.sh脚本

进入 helloworld.py 程序所在目录
cd /User/demo
创建run.sh脚本
vi run.sh
添加执行helloworld.py的命令

1
2
3
4
5
6
7
8
9
10
#!/bin/sh

# 记录一下开始时间
echo `date` >> /Users/demo/log &&
# 进入helloworld.py程序所在目录
cd /Users/demo &&
# 执行python脚本(注意前面要指定python运行环境/usr/bin/python,根据自己的情况改变)
/usr/bin/python helloworld.py
# 运行完成
echo 'finish' >> /Users/demo/log

:x保存退出
注意,脚本要改成可执行的权限
chmod 777 run.sh

2. 编写plist文件

launchctl 将根据plist文件的信息来启动任务。
plist脚本一般存放在以下目录:

  • /Library/LaunchDaemons –>只要系统启动了,哪怕用户不登陆系统也会被执行
  • /Library/LaunchAgents –>当用户登陆系统后才会被执行

更多的plist存放目录:

1
2
3
4
5
~/Library/LaunchAgents 由用户自己定义的任务项
/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

进入 ~/Library/LaunchAgents,创建一个plist文件com.demo.plist

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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Label唯一的标识 -->
<key>Label</key>
<string>com.demo.plist</string>
<!-- 指定要运行的脚本 -->
<key>ProgramArguments</key>
<array>
<string>/Users/demo/run.sh</string>
</array>
<!-- 指定要运行的时间 -->
<key>StartCalendarInterval</key>
<dict>
<key>Minute</key>
<integer>00</integer>
<key>Hour</key>
<integer>22</integer>
</dict>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/demo/run.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/demo/run.err</string>
</dict>
</plist>

3. 加载命令

launchctl load -w com.demo.plist
这样任务就加载成功了。
更多的命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.demo.plist

# 删除任务
$ launchctl unload -w com.demo.plist

# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.demo'

# 开始任务
$ launchctl start com.demo.plist

# 结束任务
$ launchctl stop com.demo.plist

如果任务呗修改了,那么必须先unload,然后重新load
start可以测试任务,这个是立即执行,不管时间到了没有
执行start和unload前,任务必须先load过,否则报错
stop可以停止任务

番外篇

plist支持两种方式配置执行时间:

  • StartInterval: 指定脚本每间隔多长时间(单位:秒)执行一次;
  • StartCalendarInterval: 可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置,包含下面的 key:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Minute <integer>
    The minute on which this job will be run.
    Hour <integer>
    The hour on which this job will be run.
    Day <integer>
    The day on which this job will be run.
    Weekday <integer>
    The weekday on which this job will be run (0 and 7 are Sunday).
    Month <integer>
    The month on which this job will be run.

plist部分参数说明:

1
2
3
4
5
6
7
Label:对应的需要保证全局唯一性;
Program:要运行的程序;
ProgramArguments:命令语句
StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array <dict>
StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒
StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件,这里建议不要使用 .log 作为后缀,会打不开里面的信息。
定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。

docker 常用命令列表

1、常用命令列表

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
// 搜索镜像
docker search ubuntu

// 下载镜像
docker pull ubuntu:latest

// 列出镜像
docker images

// 创建容器
docker run -i -t --name hello ubuntu /bin/bash

// 查看容器列表 -a 所有的包括已停止
docker ps -a

// 重启
docker restart hello

// 连接容器
docker attach hello

// 容器外执行容器的命令
docker exec hello echo '你好'

// 停止容器
docker stop hello

// 删除容器
docker rm hello

// 删除镜像
docker rmi ubuntu:latest

2、创建docker

1
2
3
4
5
// 在当前目录创建镜像
docker build --tag hello:0.1 .

// 运行
docker run --name hello-nginx -d -p 80:80 -v /root/data:/data hello:0.1

3、查看docker

1
2
3
4
5
6
7
8
9
10
11
// 查看docker的镜像历史
docker history hello:0.1

// 从修改中提交镜像
docker commit -a 'ppiian<ppiian@126.com>' -m 'this is commit' hello-nginx hello:0.2

// 查看镜像的修改
docker diff hello-nginx

// 查看镜像详情
docker inspect

4 不常用命令

1
2
3
4
5
6
7
// 重新构建
docker-compose build
// 启动
docker-composer up -d

// 批量删除三个月前的容器
docker rm `docker ps -a | grep '3 months' | awk '{print $1}'`

laravel + dingo/api + jwt 最佳实践

tymon/jwt-auth

安装

1
composer require tymon/jwt-auth:1.0.0-rc.5

需要注意的是jwtlaravel 5.7以上需要著名安装的版本

生成配置文件

1
php artisan jwt:secret

发布资源

1
2
3
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
# 或者不注明提供者,然后自己输入
php artisan vendor:publish

dingo/api

安装

1
composer requre dingo/api

发布资源

1
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

修改配置 config\api.php

1
2
3
4
5
6
7
8
9
10
...

'subtype' => env('API_SUBTYPE', 'blog'),
'prefix' => env('API_PREFIX', 'api'),
'auth' => [
'jwt' => 'Dingo\Api\Auth\Provider\JWT',

],
...

修改配置 config\auth.php 将默认

1
2
3
4
5
6
7
8
...

'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
...

mac下 valet 自定义普通域名的解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name iyineng.piian.cn;
root /Users/pan/code/iyineng/public;
index index.php;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/Users/pan/.config/valet/valet.sock;
include fastcgi_params;
}

location ~ /\.ht {
deny all;
}
}

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

upstream nginxtest{
server 127.0.0.1:8881 weight=1;
server 127.0.0.1:8882 weight=2;
server 127.0.0.1:8883 weight=1;
}
server {
listen 8881;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx1;
location / {
index index.html index.htm;
}
}
server {
listen 8882;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx2;
location / {
index index.html index.htm;
}
}
server {
listen 8883;
server_name 127.0.0.1;
root /Users/pan/code/nginx/nginx3;
location / {
index index.html index.htm;
}
}
server {
listen 8880;
server_name 127.0.0.1;
root /Users/pan/code;
location / {
proxy_pass http://nginxtest;
index index.html index.htm;
}
}

docker 负载均衡例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
upstream nginxtest{
server 127.0.0.1:8841 weight=1;
server 127.0.0.1:8842 weight=1;
server 127.0.0.1:8843 weight=1;
}

server {
listen 8880;
server_name 127.0.0.1;
root /Users/pan/code;
location / {
proxy_pass http://nginxtest;
}
}

docker 运行命令

1
2
3
4
5
6
docker run -d --name nginx3 -p 8843:80
-v ~/code/docker/nginx/nginx3/www:/usr/share/nginx/html
-v ~/code/docker/nginx/nginx3/conf/nginx.conf:/etc/nginx/nginx.conf
-v ~/code/docker/nginx/nginx3/logs:/var/log/nginx
nginx

编译安装nginx

编译安装nginx1.16.0

一、编译安装nginx

1、系统环境

1
2
3
4
[root@ansible-server ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@ansible-server ~]# uname -r
3.10.0-862.el7.x86_64

2、安装依赖

1
2
yum install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
useradd nginx -s /sbin/nologin -M

3、安装nginx1.16.0

1
2
3
4
5
6
7
8
mkdir -p /nulige/tools
cd /nulige/tools
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
make && make install

4、添加环境变量

1
2
3
4
[root@ansible-server sbin]# vi /etc/profile
export PATH="/usr/local/nginx/sbin"
#使环境变量生效
[root@ansible-server sbin]# source /etc/profile

5、查看版本,可以看到编译的模块

1
2
3
4
5
6
[root@ansible-server sbin]# nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module

6、配置启动服务

1
2
3
4
5
6
7
8
9
[root@ansible-server conf]# vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#重载并启动服务
[root@ansible-server conf]# systemctl daemon-reload
[root@ansible-server conf]# systemctl start nginx
[root@ansible-server conf]# systemctl enable nginx
[root@ansible-server conf]# systemctl status nginx
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; static; vendor preset: disabled)
Active: active (running) since Sat 2019-05-18 16:36:48 CST; 11s ago
Main PID: 26928 (nginx)
CGroup: /system.slice/nginx.service
├─26928 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
└─26929 nginx: worker process

May 18 16:36:48 ansible-server systemd[1]: Starting nginx - high performance web server...
May 18 16:36:48 ansible-server systemd[1]: Started nginx - high performance web server.

PHP二维数组排列组合

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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
`configure' 配置此包以适应多种系统。                   

Usage: ./configure [OPTION]... [VAR=VALUE]...

要分配环境变量 (e.g., CC, CFLAGS...), 请将其指定为
VAR=VALUE. 有关一些有用变量的说明,请参见下文

选项的默认值在括号中指定。

Configuration: 配置
-h, --help 显示此帮助并退出
--help=short 显示简短帮助
--help=recursive 显示附加包简短帮助
-V, --version 显示版本详情并退出
-q, --quiet, --silent 不打印 `checking ...' 信息
--cache-file=FILE 将测试结果缓存到文件FILE [disabled]
-C, --config-cache alias for `--cache-file=config.cache'
-n, --no-create 不创建输出文件
--srcdir=DIR find the sources in DIR [configure dir or `..']

Installation directories: 安装目录
--prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc. You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.
默认情况下, `make install'将安装`/usr/local/bin'、`/usr/local/lib'等。
您可以使用`--prefix`的去指定安装路径,
例如 `--prefix=$HOME`

For better control, use the options below.
为了更好地控制,请使用下面的选项。

Fine tuning of the installation directories:安装目录的微调:
--bindir=DIR user executables 用户可执行文件 [EPREFIX/bin]
--sbindir=DIR system admin executables 系统管理可执行文件 [EPREFIX/sbin]
--libexecdir=DIR program executables 程序可执行文件 [EPREFIX/libexec]
--sysconfdir=DIR read-only single-machine data 只读单机数据(配置文件路径) [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data 可修改的体系外数据 [PREFIX/com]
--localstatedir=DIR modifiable single-machine data 可修改的单机数据 [PREFIX/var]
--libdir=DIR object code libraries 对象代码库 [EPREFIX/lib]
--includedir=DIR C header files C语言头部文件 [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc 非gcc的C语言头部文件 [/usr/include]
--datarootdir=DIR read-only arch.-independent data root 只读的非依赖的结构数据根 [PREFIX/share]
--datadir=DIR read-only architecture-independent data 只读的非依赖的结构数据 [DATAROOTDIR]
--infodir=DIR info documentation 详情文档 [DATAROOTDIR/info]
--localedir=DIR locale-dependent data 区域依赖数据 [DATAROOTDIR/locale]
--mandir=DIR man documentation 手册 [DATAROOTDIR/man]
--docdir=DIR documentation root 根手册 [DATAROOTDIR/doc/PACKAGE]
--htmldir=DIR html documentation html文档 [DOCDIR]
--dvidir=DIR dvi documentation dvi文档 [DOCDIR]
--pdfdir=DIR pdf documentation pdf文档 [DOCDIR]
--psdir=DIR ps documentation ps文档 [DOCDIR]

System types: 系统类型
--build=BUILD configure for building on BUILD [guessed] 生成配置时
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET 编译时的编译器 [HOST]

Optional Features and Packages: 可选功能和软件包:
--disable-option-checking ignore unrecognized --enable/--with options 忽视默认启用或者默认附加的选项
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) 不包含功能
--enable-FEATURE[=ARG] include FEATURE [ARG=yes] 包含功能
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes] 使用包
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) 不使用某个包
--with-libdir=NAME Look for libraries in .../NAME rather than .../lib
--disable-rpath Disable passing additional runtime library search paths 禁用在搜索路径中传递其他运行库。
--enable-re2c-cgoto Enable -g flag to re2c to use computed goto gcc extension
--disable-gcc-global-regs whether to enable GCC global register variables

SAPI modules: SAPI模块

--with-apxs2=FILE Build shared Apache 2.0 Handler module. FILE is the optional
pathname to the Apache apxs tool apxs 构建共享的Apache2.0处理程序模块。文件是可选的Apache apxs工具apxs的路径名
--disable-cli Disable building CLI version of PHP 禁用生成PHP的CLI版本
(this forces --without-pear)
--enable-embed=TYPE EXPERIMENTAL: Enable building of embedded SAPI library
TYPE is either 'shared' or 'static'. TYPE=shared
--enable-fpm Enable building of the fpm SAPI executable 启用生成SAPI可执行文件
--with-fpm-user=USER Set the user for php-fpm to run as. (default: nobody) 将php fpm的运行用户设置为
--with-fpm-group=GRP Set the group for php-fpm to run as. For a system user, this 将php fpm的运行用户组设置为
should usually be set to match the fpm username (default: nobody)
--with-fpm-systemd Activate systemd integration
--with-fpm-acl Use POSIX Access Control Lists
--with-litespeed Build PHP as litespeed module
--enable-phpdbg Build phpdbg 构建phpdbg
--enable-phpdbg-webhelper Build phpdbg web SAPI support 构建phpdbg web SAPI
--enable-phpdbg-debug Build phpdbg in debug mode 构建phpdbg
--enable-phpdbg-readline Enable readline support in phpdbg (depends on static ext/readl
--disable-cgi Disable building CGI version of PHP 禁用生成PHP的CGI版本
--with-valgrind=DIR Enable valgrind support

General settings: 一般设置

--enable-gcov Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!! 启用GCOV代码覆盖率(需要LTP)-仅限开发人员!!
--enable-debug Compile with debugging symbols 开启debug
--with-layout=TYPE Set how installed files will be laid out. Type can
be either PHP or GNU [PHP]
--with-config-file-path=PATH
Set the path in which to look for php.ini [PREFIX/lib] 设置查找php.ini的路径
--with-config-file-scan-dir=PATH
Set the path where to scan for configuration files 设置扫描配置文件的路径
--enable-sigchild Enable PHP's own SIGCHLD handler
--enable-libgcc Enable explicitly linking against libgcc 启用针对libgcc的显式链接
--disable-short-tags Disable the short-form <? start tag by default 关闭php的短标签
--enable-dmalloc Enable dmalloc 开启 dmalloc
--disable-ipv6 Disable IPv6 support 关闭ipv6
--enable-dtrace Enable DTrace support
--enable-fd-setsize Set size of descriptor sets

Extensions: 扩展

--with-EXTENSION=shared[,PATH]

NOTE: Not all extensions can be build as 'shared'.

Example: --with-foobar=shared,/usr/local/foobar/

o Builds the foobar extension as shared extension.
o foobar package install prefix is /usr/local/foobar/


--disable-all Disable all extensions which are enabled by default 禁用默认启用的所有扩展

--disable-libxml Disable LIBXML support 关闭libxml
--with-libxml-dir=DIR LIBXML: libxml2 install prefix 指定libxml2的安装路径
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 1.0.1) 开启openssl
--with-kerberos=DIR OPENSSL: Include Kerberos support
--with-system-ciphers OPENSSL: Use system default cipher list instead of hardcoded valu 使用系统默认密码列表而不是硬编码值
--with-pcre-regex=DIR Include Perl Compatible Regular Expressions support.
DIR is the PCRE install prefix BUNDLED
--with-pcre-jit Enable PCRE JIT functionality (BUNDLED only)
--with-pcre-valgrind=DIR
Enable PCRE valgrind support. Developers only!
--without-sqlite3=DIR Do not include SQLite3 support. DIR is the prefix to
SQLite3 installation directory.
--with-zlib=DIR Include ZLIB support (requires zlib >= 1.2.0.4)
--with-zlib-dir=<DIR> Define the location of zlib install directory
--enable-bcmath Enable bc style precision math functions 启用精确数学函数
--with-bz2=DIR Include BZip2 support
--enable-calendar Enable support for calendar conversion
--disable-ctype Disable ctype functions
--with-curl=DIR Include cURL support
--enable-dba Build DBA with bundled modules. To build shared DBA
extension use --enable-dba=shared
--with-qdbm=DIR DBA: QDBM support
--with-gdbm=DIR DBA: GDBM support
--with-ndbm=DIR DBA: NDBM support
--with-db4=DIR DBA: Oracle Berkeley DB 4.x or 5.x support
--with-db3=DIR DBA: Oracle Berkeley DB 3.x support
--with-db2=DIR DBA: Oracle Berkeley DB 2.x support
--with-db1=DIR DBA: Oracle Berkeley DB 1.x support/emulation
--with-dbm=DIR DBA: DBM support
--with-tcadb=DIR DBA: Tokyo Cabinet abstract DB support
--with-lmdb=DIR DBA: Lightning memory-mapped database support
--without-cdb=DIR DBA: CDB support (bundled)
--disable-inifile DBA: INI support (bundled)
--disable-flatfile DBA: FlatFile support (bundled)
--disable-dom Disable DOM support
--with-libxml-dir=DIR DOM: libxml2 install prefix
--with-enchant=DIR Include enchant support.
GNU Aspell version 1.1.3 or higher required.
--enable-exif Enable EXIF (metadata from images) support
--disable-fileinfo Disable fileinfo support
--disable-filter Disable input filter support
--with-pcre-dir FILTER: pcre install prefix
--enable-ftp Enable FTP support
--with-openssl-dir=DIR FTP: openssl install prefix
--with-gd=DIR Include GD support. DIR is the GD library base
install directory BUNDLED
--with-webp-dir=DIR GD: Set the path to libwebp install prefix
--with-jpeg-dir=DIR GD: Set the path to libjpeg install prefix
--with-png-dir=DIR GD: Set the path to libpng install prefix
--with-zlib-dir=DIR GD: Set the path to libz install prefix
--with-xpm-dir=DIR GD: Set the path to libXpm install prefix
--with-freetype-dir=DIR GD: Set the path to FreeType 2 install prefix
--enable-gd-jis-conv GD: Enable JIS-mapped Japanese font support
--with-gettext=DIR Include GNU gettext support
--with-gmp=DIR Include GNU MP support
--with-mhash=DIR Include mhash support
--disable-hash Disable hash support
--without-iconv=DIR Exclude iconv support
--with-imap=DIR Include IMAP support. DIR is the c-client install prefix
--with-kerberos=DIR IMAP: Include Kerberos support. DIR is the Kerberos install prefi
--with-imap-ssl=DIR IMAP: Include SSL support. DIR is the OpenSSL install prefix
--with-interbase=DIR Include Firebird support. DIR is the Firebird base
install directory /opt/firebird
--enable-intl Enable internationalization support
--with-icu-dir=DIR Specify where ICU libraries and headers can be found
--disable-json Disable JavaScript Object Serialization support
--with-ldap=DIR Include LDAP support
--with-ldap-sasl=DIR LDAP: Include Cyrus SASL support
--enable-mbstring Enable multibyte string support
--disable-mbregex MBSTRING: Disable multibyte regex support
--disable-mbregex-backtrack
MBSTRING: Disable multibyte regex backtrack check
--with-libmbfl=DIR MBSTRING: Use external libmbfl. DIR is the libmbfl base
install directory BUNDLED
--with-onig=DIR MBSTRING: Use external oniguruma. DIR is the oniguruma install pr
If DIR is not set, the bundled oniguruma will be used
--with-mysqli=FILE Include MySQLi support. FILE is the path
to mysql_config. If no value or mysqlnd is passed
as FILE, the MySQL native driver will be used
--enable-embedded-mysqli
MYSQLi: Enable embedded support
Note: Does not work with MySQL native driver!
--with-mysql-sock=SOCKPATH
MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer.
If unspecified, the default locations are searched
--with-oci8=DIR Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOM
Use --with-oci8=instantclient,/path/to/instant/client/lib
to use an Oracle Instant Client installation
--with-odbcver=HEX Force support for the passed ODBC version. A hex number is expect
Use the special value of 0 to prevent an explicit ODBCVER to b
--with-adabas=DIR Include Adabas D support /usr/local
--with-sapdb=DIR Include SAP DB support /usr/local
--with-solid=DIR Include Solid support /usr/local/solid
--with-ibm-db2=DIR Include IBM DB2 support /home/db2inst1/sqllib
--with-ODBCRouter=DIR Include ODBCRouter.com support /usr
--with-empress=DIR Include Empress support \$EMPRESSPATH
(Empress Version >= 8.60 required)
--with-empress-bcs=DIR
Include Empress Local Access support \$EMPRESSPATH
(Empress Version >= 8.60 required)
--with-birdstep=DIR Include Birdstep support /usr/local/birdstep
--with-custom-odbc=DIR Include user defined ODBC support. DIR is ODBC install base
directory /usr/local. Make sure to define CUSTOM_ODBC_LIBS and
have some odbc.h in your include dirs. f.e. you should define
following for Sybase SQL Anywhere 5.5.00 on QNX, prior to
running this configure script:
CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\"
LDFLAGS=-lunix
CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\"
--with-iodbc=DIR Include iODBC support /usr/local
--with-esoob=DIR Include Easysoft OOB support /usr/local/easysoft/oob/client
--with-unixODBC=DIR Include unixODBC support /usr/local
--with-dbmaker=DIR Include DBMaker support
--disable-opcache Disable Zend OPcache support
--disable-opcache-file Disable file based caching
--disable-huge-code-pages
Disable copying PHP CODE pages into HUGE PAGES
--enable-pcntl Enable pcntl support (CLI/CGI only)
--disable-pdo Disable PHP Data Objects support
--with-pdo-dblib=DIR PDO: DBLIB-DB support. DIR is the FreeTDS home directory
--with-pdo-firebird=DIR PDO: Firebird support. DIR is the Firebird base
install directory /opt/firebird
--with-pdo-mysql=DIR PDO: MySQL support. DIR is the MySQL base directory
If no value or mysqlnd is passed as DIR, the
MySQL native driver will be used
--with-zlib-dir=DIR PDO_MySQL: Set the path to libz install prefix
--with-pdo-oci=DIR PDO: Oracle OCI support. DIR defaults to $ORACLE_HOME.
Use --with-pdo-oci=instantclient,/path/to/instant/client/lib
for an Oracle Instant Client installation.
--with-pdo-odbc=flavour,dir
PDO: Support for 'flavour' ODBC driver.
include and lib dirs are looked for under 'dir'.

'flavour' can be one of: ibm-db2, iODBC, unixODBC, generic
If ',dir' part is omitted, default for the flavour
you have selected will be used. e.g.:

--with-pdo-odbc=unixODBC

will check for unixODBC under /usr/local. You may attempt
to use an otherwise unsupported driver using the \"generic\"
flavour. The syntax for generic ODBC support is:

--with-pdo-odbc=generic,dir,libname,ldflags,cflags

When built as 'shared' the extension filename is always pdo_odbc.
--with-pdo-pgsql=DIR PDO: PostgreSQL support. DIR is the PostgreSQL base
install directory or the path to pg_config
--without-pdo-sqlite=DIR
PDO: sqlite 3 support. DIR is the sqlite base
install directory BUNDLED
--with-pgsql=DIR Include PostgreSQL support. DIR is the PostgreSQL
base install directory or the path to pg_config
--disable-phar Disable phar support
--disable-posix Disable POSIX-like functions
--with-pspell=DIR Include PSPELL support.
GNU Aspell version 0.50.0 or higher required
--with-libedit=DIR Include libedit readline replacement (CLI/CGI only)
--with-readline=DIR Include readline support (CLI/CGI only)
--with-recode=DIR Include recode support
--disable-session Disable session support
--with-mm=DIR SESSION: Include mm support for session storage
--enable-shmop Enable shmop support
--disable-simplexml Disable SimpleXML support
--with-libxml-dir=DIR SimpleXML: libxml2 install prefix
--with-snmp=DIR Include SNMP support
--with-openssl-dir=DIR SNMP: openssl install prefix
--enable-soap Enable SOAP support
--with-libxml-dir=DIR SOAP: libxml2 install prefix
--enable-sockets Enable sockets support
--with-sodium=DIR Include sodium support
--with-password-argon2=DIR Include Argon2 support in password_*. DIR is the Arg
--enable-sysvmsg Enable sysvmsg support
--enable-sysvsem Enable System V semaphore support
--enable-sysvshm Enable the System V shared memory support
--with-tidy=DIR Include TIDY support
--disable-tokenizer Disable tokenizer support
--enable-wddx Enable WDDX support
--with-libxml-dir=DIR WDDX: libxml2 install prefix
--with-libexpat-dir=DIR WDDX: libexpat dir for XMLRPC-EPI (deprecated)
--disable-xml Disable XML support
--with-libxml-dir=DIR XML: libxml2 install prefix
--with-libexpat-dir=DIR XML: libexpat install prefix (deprecated)
--disable-xmlreader Disable XMLReader support
--with-libxml-dir=DIR XMLReader: libxml2 install prefix
--with-xmlrpc=DIR Include XMLRPC-EPI support
--with-libxml-dir=DIR XMLRPC-EPI: libxml2 install prefix
--with-libexpat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated)
--with-iconv-dir=DIR XMLRPC-EPI: iconv dir for XMLRPC-EPI
--disable-xmlwriter Disable XMLWriter support
--with-libxml-dir=DIR XMLWriter: libxml2 install prefix
--with-xsl=DIR Include XSL support. DIR is the libxslt base
install directory (libxslt >= 1.1.0 required)
--enable-zend-test Enable zend-test extension
--enable-zip Include Zip read/write support
--with-zlib-dir=DIR ZIP: Set the path to libz install prefix
--with-pcre-dir ZIP: pcre install prefix
--with-libzip=DIR ZIP: use libzip
--enable-mysqlnd Enable mysqlnd explicitly, will be done implicitly
when required by other extensions
--disable-mysqlnd-compression-support
Disable support for the MySQL compressed protocol in mysqlnd
--with-zlib-dir=DIR mysqlnd: Set the path to libz install prefix

PEAR:

--with-pear=DIR Install PEAR in DIR [PREFIX/lib/php]
--without-pear Do not install PEAR

Zend:

--enable-maintainer-zts Enable thread safety - for code maintainers only!!
--disable-inline-optimization
If building zend_execute.lo fails, try this switch
--disable-zend-signals whether to enable zend signal handling

TSRM:

--with-tsrm-pth=pth-config
Use GNU Pth
--with-tsrm-st Use SGI's State Threads
--with-tsrm-pthreads Use POSIX threads (default)

Libtool:

--enable-shared=PKGS Build shared libraries default=yes
--enable-static=PKGS Build static libraries default=yes
--enable-fast-install=PKGS
Optimize for fast installation default=yes
--with-gnu-ld Assume the C compiler uses GNU ld default=no
--disable-libtool-lock Avoid locking (might break parallel builds)
--with-pic Try to use only PIC/non-PIC objects default=use both
--with-tags=TAGS Include additional configurations automatic


Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
YACC The `Yet Another Compiler Compiler' implementation to use.
Defaults to the first program found out of: `bison -y', `byacc',
`yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
This script will default YFLAGS to the empty string to avoid a
default value of `-d' given by some make applications.
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to the package provider.

Linux常用库介绍

GCC

GNU编译器套件,全名GNU Compiler Collection。是由 GNU 开发的编程语言编译器。现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器。

1
yum install -y gcc

GCC-C++

GNU的C++编译器

1
yum install -y gcc-c++

PCRE

PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由Philip Hazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。它由RegEx演化而来,实际上,Perl正则表达式也是源自于Henry Spencer写的RegEx。

1
yum install -y pcre

pcre-devel

pcre-devel是使用PCRE做二次开发时所需要的开发库,包括头文件等,这也是编译Nginx所必须使用的。

1
yum install -y pcre-devel

zlib

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。
同理,zlib是直接使用的库,zlib-devel是二次开发所需要的库。

1
yum install -y zlib zlib-devel

openssl

如果我们服务器不只是要支持HTTP,还要在更安全的ssl协议上传输HTTP,那么就需要拥有openssl了。另外,如果需要使用MD5,SHA1等散列函数,也会用到openssl。

1
yum install -y openssl