-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfeed.xml
626 lines (558 loc) · 34.8 KB
/
feed.xml
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
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Khadgar Blog</title>
<description></description>
<link>http://khadgar.me/</link>
<atom:link href="http://khadgar.me/feed.xml" rel="self" type="application/rss+xml" />
<pubDate>Sat, 19 May 2018 21:17:50 +0800</pubDate>
<lastBuildDate>Sat, 19 May 2018 21:17:50 +0800</lastBuildDate>
<generator>Jekyll v3.1.6</generator>
<item>
<title>PHP</title>
<description><h2 id="mongo">mongo扩展</h2>
<p>PHP的Mongodb扩展有两种, mongo.so和 mongodb.so,其中mongodb.so为最新的扩展,mongo.so已经不推荐使用。</p>
<h4 id="mongophp">mongo扩展版本对应PHP版本</h4>
<table>
<thead>
<tr>
<th style="text-align: left">PHP Driver</th>
<th style="text-align: left">PHP 5.3</th>
<th style="text-align: left">PHP 5.4</th>
<th style="text-align: left">PHP 5.5</th>
<th style="text-align: left">PHP 5.6</th>
<th style="text-align: left">PHP 7.0</th>
<th style="text-align: left">PHP 7.1</th>
<th style="text-align: left">PHP 7.2</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">mongodb-1.4</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
</tr>
<tr>
<td style="text-align: left">mongodb-1.3</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
</tr>
<tr>
<td style="text-align: left">mongodb-1.2</td>
<td style="text-align: left"> </td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongodb-1.1</td>
<td style="text-align: left"> </td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongodb-1.0</td>
<td style="text-align: left"> </td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.6</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.5</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.4</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.3</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
</tbody>
</table>
<h4 id="mongomongodb">mongo扩展版本对应mongodb的版本</h4>
<table>
<thead>
<tr>
<th style="text-align: left">PHP Driver</th>
<th style="text-align: left">MongoDB 2.6</th>
<th style="text-align: left">MongoDB 3.0</th>
<th style="text-align: left">MongoDB 3.2</th>
<th style="text-align: left">MongoDB 3.4</th>
<th style="text-align: left">MongoDB 3.6</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">PHPLIB 1.3 + mongodb-1.4</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
</tr>
<tr>
<td style="text-align: left">PHPLIB 1.2 + mongodb-1.3</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">PHPLIB 1.1 + mongodb-1.2</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">PHPLIB 1.0 + mongodb-1.1</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongodb-1.0</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.6</td>
<td style="text-align: left">✓</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.5</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
<tr>
<td style="text-align: left">mongo-1.4</td>
<td style="text-align: left">✓</td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
<td style="text-align: left"> </td>
</tr>
</tbody>
</table>
<h4 id="mongoso">mongo.so用法</h4>
<p><a href="http://php.net/manual/en/book.mongo.php" target="_blank">传送门</a></p>
<h4 id="mongodbso">mongodb.so用法</h4>
<p><a href="http://php.net/manual/en/set.mongodb.php" target="_blank">传送门</a></p>
<h2 id="no-candidate-servers-foundmongoso">No candidate servers found(mongo.so扩展)</h2>
<h4 id="mongodbphp">原因一: mongodb配置的地址和php里使用的地址不一致</h4>
<ul>
<li>mongodb server配置为机器名而php里使用的链接地址是ip</li>
<li>mongodb server配置为ip而php里使用的链接地址是机器名</li>
</ul>
<p>扩展C相关代码</p>
<div class="language-c highlighter-rouge"><pre class="highlight"><code> <span class="c1">//connections.c&gt;mongo_discover_topology&gt;mongo_connection_ismaster
</span> <span class="k">if</span> <span class="p">(</span><span class="n">bson_find_field_as_string</span><span class="p">(</span><span class="n">ptr</span><span class="p">,</span> <span class="s">"me"</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">connected_name</span><span class="p">))</span> <span class="p">{</span>
<span class="n">we_think_we_are</span> <span class="o">=</span> <span class="n">mongo_server_hash_to_server</span><span class="p">(</span><span class="n">con</span><span class="o">-&gt;</span><span class="n">hash</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">strcmp</span><span class="p">(</span><span class="n">connected_name</span><span class="p">,</span> <span class="n">we_think_we_are</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
<span class="n">mongo_manager_log</span><span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="n">MLOG_CON</span><span class="p">,</span> <span class="n">MLOG_FINE</span><span class="p">,</span> <span class="s">"ismaster: the server name matches what we thought it'd be (%s)."</span><span class="p">,</span> <span class="n">we_think_we_are</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
<span class="n">mongo_manager_log</span><span class="p">(</span><span class="n">manager</span><span class="p">,</span> <span class="n">MLOG_CON</span><span class="p">,</span> <span class="n">MLOG_WARN</span><span class="p">,</span> <span class="s">"ismaster: the server name (%s) did not match with what we thought it'd be (%s)."</span><span class="p">,</span> <span class="n">connected_name</span><span class="p">,</span> <span class="n">we_think_we_are</span><span class="p">);</span>
<span class="cm">/* We reset the name as the server responded with a different name than
* what we thought it was */</span>
<span class="n">free</span><span class="p">(</span><span class="n">server</span><span class="o">-&gt;</span><span class="n">host</span><span class="p">);</span>
<span class="n">server</span><span class="o">-&gt;</span><span class="n">host</span> <span class="o">=</span> <span class="n">mcon_strndup</span><span class="p">(</span><span class="n">connected_name</span><span class="p">,</span> <span class="n">strchr</span><span class="p">(</span><span class="n">connected_name</span><span class="p">,</span> <span class="sc">':'</span><span class="p">)</span> <span class="o">-</span> <span class="n">connected_name</span><span class="p">);</span>
<span class="n">server</span><span class="o">-&gt;</span><span class="n">port</span> <span class="o">=</span> <span class="n">atoi</span><span class="p">(</span><span class="n">strchr</span><span class="p">(</span><span class="n">connected_name</span><span class="p">,</span> <span class="sc">':'</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">retval</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
<span class="p">}</span>
</code></pre>
</div>
<h4 id="section">原因二: 建立链接时发现缓存连接不可用</h4>
<div class="language-php highlighter-rouge"><pre class="highlight"><code>$mongo = new MongoClient("mongodb://127.0.0.1:27018",
array(
'replicaSet' =&gt; 'rs0',
'connect' =&gt; true,
'connectTimeoutMS' =&gt; 10000
)); \\这里会报No candidate servers found错误
</code></pre>
</div>
<h4 id="connectfalse-">原因三: 创建链接指定connect为false, 在查询或者修改删除时发现连接不可用</h4>
<div class="language-php highlighter-rouge"><pre class="highlight"><code>$mongo = new MongoClient("mongodb://127.0.0.1:27018",
array(
'replicaSet' =&gt; 'rs0',
'connect' =&gt; false,
'connectTimeoutMS' =&gt; 10000
));
$collection = $mongo-&gt;test-&gt;test;
$cusor = $collection-&gt;find()-&gt;limit(5);
foreach($cusor as $doc) { \\这里会报No candidate servers found错误
echo getmypid() .json_encode($doc) . "\n";
}
</code></pre>
</div>
<h4 id="section-1">问题出现场景</h4>
<ul>
<li>mongodb服务器挂掉</li>
<li>mongodb主挂掉,选举期间</li>
<li>mongodb服务器挂掉恢复正常,第一次访问由于缓存长连接失效导致</li>
</ul>
<p>第三种情况,如果PHP与mongodb采用的是长链接,没有主动close,那么可能会导致这个报错持续很长时间。因为每一个php-fpm进程链接之前故障服务器的缓存链接都不可用了,当第一次访问时就会发生失败,会把失效的链接释放,第二次访问会重新建立链接就OK了。</p>
<h2 id="section-2">问题解决</h2>
<p>mongo.so扩展经过测试,都会存在这个问题,有几种方式可以解决:</p>
<ul>
<li>php与mongodb之间建立链接,使用完成后主动调用close,即每次使用短链接。</li>
<li>如果建立链接时指定connect=true,建议增加重试机制,保证链接成功。
<div class="language-php highlighter-rouge"><pre class="highlight"><code>$retry = 2;
do {
try {
$mongo = new MongoClient("mongodb://127.0.0.1:27018",
array(
'replicaSet' =&gt; 'rs0',
'connect' =&gt; true,
'connectTimeoutMS' =&gt; 10000
));
break;
} catch(MongoException $e) {
if (0 == $retry--) {
//log
return;
}
}
} while($retry);
</code></pre>
</div>
</li>
<li>如果建立链接时指定connect=false,建议在读写mongodb时增加重试机制,参考如上代码。</li>
<li>如果您当前使用的PHP版本大于等于5.4,建议使用mongodb.so扩展,具体里面代码没有看过,但是经过实测发现该扩展已经包含了重试的机制在里面。</li>
</ul>
</description>
<pubDate>Sat, 12 May 2018 00:00:00 +0800</pubDate>
<link>http://khadgar.me/2018/05/12/PHP-mongo-extension-issue/</link>
<guid isPermaLink="true">http://khadgar.me/2018/05/12/PHP-mongo-extension-issue/</guid>
<category>mongo扩展</category>
</item>
<item>
<title>软件管理</title>
<description><h2 id="section">包管理工具</h2>
<p>软件开发过程中,会用到第三方库,但是这些第三方库或者框架往往又依赖其他第三方库或者框架,如果手工管理依赖关系会非常复杂,因为不仅要下载而且还要处理包之间的兼容关系,并且如果要进行更新版本那更是痛苦。<br />
其主要功能就是安装及安装依赖,更新,卸载等操作。</p>
<h4 id="section-1">主流包管理工具</h4>
<table>
<thead>
<tr>
<th style="text-align: left">语言</th>
<th style="text-align: left">包管理工具</th>
<th style="text-align: left">配置文件</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">Node.js</td>
<td style="text-align: left">NPM</td>
<td style="text-align: left">package.json</td>
</tr>
<tr>
<td style="text-align: left">前端JS</td>
<td style="text-align: left">Bower</td>
<td style="text-align: left">bower.json</td>
</tr>
<tr>
<td style="text-align: left">Java</td>
<td style="text-align: left">Maven</td>
<td style="text-align: left">pom.xml</td>
</tr>
<tr>
<td style="text-align: left">Python</td>
<td style="text-align: left">Pip</td>
<td style="text-align: left">pip.conf(ini)</td>
</tr>
<tr>
<td style="text-align: left">Ruby</td>
<td style="text-align: left">Gem</td>
<td style="text-align: left">.gemspec</td>
</tr>
<tr>
<td style="text-align: left">Php</td>
<td style="text-align: left">Composer</td>
<td style="text-align: left">composer.json</td>
</tr>
</tbody>
</table>
<h4 id="php">PHP包管理工具</h4>
<p>PHP包管理工具有PEAR,PECL,Composer。</p>
<ul>
<li>PEAR<br />
Php Extension Application Repository php 扩展和应用仓库,为 php 的工具类库。</li>
<li>PECL<br />
PHP Extension Community Library php 的 C 扩展仓库,即 php 的 so 格式的扩展</li>
<li>Composer<br />
PHP依赖管理工具
<h6 id="pear-vs-pecl">PEAR VS PECL</h6>
<p>PEAR是用PHP写的库,PECL是用C写的PHP扩展库。</p>
</li>
</ul>
<div class="highlighter-rouge"><pre class="highlight"><code>#这是一个安装 pear 的 php 发行包文件
wget http://pear.php.net/go-pear.phar
#执行安装pear和pecl
php go-pear.phar
#pear安装DB
pear install DB
#pecl安装Redis,生成redis.so,加入到php.ini即可
pecl install redis
</code></pre>
</div>
<h6 id="pear-vs-composer">PEAR VS Composer</h6>
<p>两者都可以用来管理PHP软件包,安装、更新以及卸载。
PEAR对于包的维护者来说,比较麻烦。所以很多代码已经过期了;此外相比Composer,PEAR的安装软件包比较少;使用Composer,可以基于每个项目或者全局安装软件包,而PEAR只能全局安装,如果需要不同版本的话可能造成冲突;Composer通过配置可以安装PEAR扩展包.</p>
<h2 id="composer">Composer</h2>
<h4 id="section-2">安装</h4>
<p>Composer要求PHP环境必须是5.3.2+才能运行。</p>
<div class="highlighter-rouge"><pre class="highlight"><code> curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer
</code></pre>
</div>
<h4 id="section-3">使用</h4>
<p>在项目目录下创建一个 composer.json 文件,指明依赖,比如,你的项目依赖 monolog:</p>
<div class="highlighter-rouge"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nt">"require"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nt">"monolog/monolog"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.2.*"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre>
</div>
<ul>
<li>安装<br />
composer install</li>
<li>自动加载<br />
Composer 提供了自动加载的特性,require ‘vendor/autoload.php’,需要在代码初始化时增加这行代码。</li>
</ul>
<p>延伸阅读 https://getcomposer.org/</p>
</description>
<pubDate>Mon, 06 Feb 2017 00:00:00 +0800</pubDate>
<link>http://khadgar.me/2017/02/06/Software-management-Software/</link>
<guid isPermaLink="true">http://khadgar.me/2017/02/06/Software-management-Software/</guid>
<category>软件</category>
<category>依赖管理</category>
<category>PHP</category>
</item>
<item>
<title>软件管理</title>
<description><h2 id="section">包安装</h2>
<h4 id="rpm--dpkg">RPM &amp; DPKG</h4>
<p>Linux系统安装软件的方式有几种,编译安装,rpm,dpkg等,其中主流的是rpm和dpkg。</p>
<table>
<thead>
<tr>
<th style="text-align: left">Distribution代表</th>
<th style="text-align: left">软件管理机制</th>
<th style="text-align: left">使用指令</th>
<th style="text-align: left">线上升级机制</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left">Red Hat/Fedora</td>
<td style="text-align: left">RPM</td>
<td style="text-align: left">rpm, rpmbuild</td>
<td style="text-align: left">YUM (yum)</td>
</tr>
<tr>
<td style="text-align: left">Debian/Ubuntu</td>
<td style="text-align: left">DPKG</td>
<td style="text-align: left">dpkg</td>
<td style="text-align: left">APT (apt-get)</td>
</tr>
</tbody>
</table>
<h4 id="rpm--srpm">RPM &amp; SRPM</h4>
<p>RPM是直接编译好的软件格式,可以直接安装,但是要求安装环境和RPM编辑环境一致或者相当才可以安装。SRPM是带有源码的软件,可以通过修改配置,在安装环境下先编译成RPM文件,然后再进行安装可以解决这个问题。</p>
<h4 id="rpm">RPM命名介绍</h4>
<blockquote>
<p>xx.rpm &lt;==RPM的格式,已经变编译切打包完成的rpm软件; <br />
xx.src.rpm &lt;==SRPM的格式,包括源码,需要编译成RPM,才能安装。</p>
</blockquote>
<blockquote>
<p>test - 3.11 - 5 .el7.x86_64 .rpm<br />
软件名称 软件版本 发布次数 平台 文档后缀</p>
</blockquote>
<p>i386, i586, i686, noarch, x86_64表示平台,其中noarch表示不区分平台</p>
<h4 id="rpm-1">RPM安装路径</h4>
<p>|路径|说明|
|—-|—-|
|/etc|配置文件目录|
|/usr/bin|可执行文件|
|/usr/lib|可执行文件使用的动态链接库|
|/usr/share/doc|软件使用说明文档|
|/usr/share/man|man page文档|</p>
<h4 id="rpm-2">RPM命令</h4>
<div class="highlighter-rouge"><pre class="highlight"><code># 安装
rpm -ivh /mnt/xxx/test.rpm
# 网络安装
rpm -ivh http://web.com/mnt/xxx/test.rpm
# --prefix /usr/local 指安装到/usr/local而非正规目录
# 升级更新
rpm -Fvh /mnt/xxx/test.rpm
# 查询
rpm -qa | grep xx
# 查询配置文件路径
rpm -qc httpd
# 重建资料库
rpm --rebuilddb
</code></pre>
</div>
<h4 id="yum">YUM</h4>
<p>yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令。</p>
<h6 id="section-1">命令</h6>
<div class="highlighter-rouge"><pre class="highlight"><code># 安装 -y提示确定自动输入y
rpm install -y php70
# 查找软件
yum search raid
# 查看软件功能
yum info mdadm
# 列出所有软件
yum list
# 列出所有需要升级的软件
yum list updates
# 查询配置文件路径
rpm -qc httpd
# 重建资料库
rpm --rebuilddb
</code></pre>
</div>
<h6 id="section-2">配置</h6>
<div class="highlighter-rouge"><pre class="highlight"><code>[root@study ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&amp;arch=$basearch&amp;repo=os&amp;infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
</code></pre>
</div>
<ul>
<li>[base]:软件库的名字,中括号必须有,里面的名称随意取,但是不能重复。</li>
<li>name:名字而已。</li>
<li>mirrorlist=:列出软件库可以使用的镜像列表,如果设置yum会自动挑选镜像。</li>
<li>baseurl=:可以指定的固定软件库地址。</li>
<li>enable=1:1启用,0不启用</li>
<li>gpgcheck=1:指定是否需要查阅 RPM 档桉内的数位签名</li>
</ul>
<p>修改完配置需要执行yum clean all,使得配置修改生效~</p>
<h6 id="section-3">软件库</h6>
<ul>
<li>每个系统都会有官方和第三方提供的软件库,如CentOS库的链接
https://www.centos.org/docs/5/html/yum/sn-yum-maintenance.html
https://wiki.centos.org/AdditionalResources/Repositories</li>
<li>其中PHP常用的YUM Repository如下:<br />
webtatic https://webtatic.com/<br />
remi http://rpms.remirepo.net/<br />
基于稳定性考虑,建议官方列表里推荐的remi</li>
</ul>
<h2 id="section-4">编译安装</h2>
<p><code class="highlighter-rouge">./configure &amp;&amp; make &amp;&amp; make install</code></p>
<ul>
<li>configure 根据系统环境和选项配置,生成Makefile文件
<div class="highlighter-rouge"><pre class="highlight"><code>--srcdir=DIR
源代码文件所在目录,默认为configure脚本所在目录或其父目录。
--prefix=PREFIX
体系无关文件的顶级安装目录PREFIX ,默认值一般是 /usr/local 或 /usr/local/pkgName
--exec-prefix=EPREFIX
体系相关文件的顶级安装目录EPREFIX ,默认值一般是 PREFIX
--bindir=DIR
用户可执行文件的存放目录DIR ,默认值一般是 EPREFIX/bin
--sbindir=DIR
系统管理员可执行目录DIR ,默认值一般是 EPREFIX/sbin
--libexecdir=DIR
程序可执行目录DIR ,默认值一般是 EPREFIX/libexec
--datadir=DIR
通用数据文件的安装目录DIR ,默认值一般是 PREFIX/share
--sysconfdir=DIR
只读的单一机器数据目录DIR ,默认值一般是 PREFIX/etc
--sharedstatedir=DIR
可写的体系无关数据目录DIR ,默认值一般是 PREFIX/com
--localstatedir=DIR
可写的单一机器数据目录DIR ,默认值一般是 PREFIX/var
--libdir=DIR
库文件的安装目录DIR ,默认值一般是 EPREFIX/lib
--includedir=DIR
C头文件目录DIR ,默认值一般是 PREFIX/include
--oldincludedir=DIR
非gcc的C头文件目录DIR ,默认值一般是 /usr/include
--infodir=DIR
Info文档的安装目录DIR ,默认值一般是 PREFIX/info
--mandir=DIR
Man文档的安装目录DIR ,默认值一般是 PREFIX/man
</code></pre>
</div>
</li>
</ul>
<h2 id="refrence">Refrence</h2>
<ul>
<li>http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php</li>
</ul>
</description>
<pubDate>Fri, 20 Jan 2017 00:00:00 +0800</pubDate>
<link>http://khadgar.me/2017/01/20/Software-management-System/</link>
<guid isPermaLink="true">http://khadgar.me/2017/01/20/Software-management-System/</guid>
<category>系统管理</category>
<category>OPS</category>
</item>
</channel>
</rss>