Linux中openssl/opensslv.h找不到问题的解决方法
<p><span><strong>前言</strong></span></p>
<p>
众所周知scrapy是Python中鼎鼎大名的爬虫框架,在安装scrapy过程中碰到了openssl某个文件找不到的问题,并进行了分析,记录之。</p>
<p>
<span><strong>一、 scrapy以及安装过程</strong></span></p>
<p>
Scrapy是python中鼎鼎大名的爬虫框架,笔者在Centos 7系统之上进行安装,发现了如下问题:</p>
<p>
<code> >> pip install scrapy</code></p>
<p>
由于安装过程中的过程信息比较多,这里只列出了其中的关键片段信息:</p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_783176">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
<div class="line number22 index21 alt1">
22</div>
<div class="line number23 index22 alt2">
23</div>
<div class="line number24 index23 alt1">
24</div>
<div class="line number25 index24 alt2">
25</div>
<div class="line number26 index25 alt1">
26</div>
<div class="line number27 index26 alt2">
27</div>
<div class="line number28 index27 alt1">
28</div>
<div class="line number29 index28 alt2">
29</div>
<div class="line number30 index29 alt1">
30</div>
<div class="line number31 index30 alt2">
31</div>
<div class="line number32 index31 alt1">
32</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">running egg_info </code>
</div>
<div class="line number2 index1 alt1">
<code class="bash spaces"> </code><code class="bash plain">writing requirements to src</code><code class="bash plain">/cryptography</code><code class="bash plain">.egg-info</code><code class="bash plain">/requires</code><code class="bash plain">.txt </code>
</div>
<div class="line number3 index2 alt2">
<code class="bash spaces"> </code><code class="bash plain">writing src</code><code class="bash plain">/cryptography</code><code class="bash plain">.egg-info</code><code class="bash plain">/PKG-INFO</code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code><code class="bash plain">writing </code><code class="bash functions">top</code><code class="bash plain">-level names to src</code><code class="bash plain">/cryptography</code><code class="bash plain">.egg-info</code><code class="bash plain">/top_level</code><code class="bash plain">.txt </code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">writing dependency_links to src</code><code class="bash plain">/cryptography</code><code class="bash plain">.egg-info</code><code class="bash plain">/dependency_links</code><code class="bash plain">.txt </code>
</div>
<div class="line number6 index5 alt1">
<code class="bash spaces"> </code><code class="bash plain">writing entry points to src</code><code class="bash plain">/cryptography</code><code class="bash plain">.egg-info</code><code class="bash plain">/entry_points</code><code class="bash plain">.txt </code>
</div>
<div class="line number7 index6 alt2">
<code class="bash spaces"> </code><code class="bash plain">reading manifest </code><code class="bash functions">file</code> <code class="bash string">'src/cryptography.egg-info/SOURCES.txt'</code>
</div>
<div class="line number8 index7 alt1">
<code class="bash spaces"> </code><code class="bash plain">reading manifest template </code><code class="bash string">'MANIFEST.in'</code>
</div>
<div class="line number9 index8 alt2">
<code class="bash spaces"> </code><code class="bash plain">no previously-included directories found matching </code><code class="bash string">'docs/_build'</code>
</div>
<div class="line number10 index9 alt1">
<code class="bash spaces"> </code><code class="bash plain">warning: no previously-included files matching </code><code class="bash string">'*'</code> <code class="bash plain">found under directory </code><code class="bash string">'vectors'</code>
</div>
<div class="line number11 index10 alt2">
<code class="bash spaces"> </code><code class="bash plain">writing manifest </code><code class="bash functions">file</code> <code class="bash string">'src/cryptography.egg-info/SOURCES.txt'</code>
</div>
<div class="line number12 index11 alt1">
<code class="bash spaces"> </code><code class="bash plain">running build_ext </code>
</div>
<div class="line number13 index12 alt2">
<code class="bash spaces"> </code><code class="bash plain">generating cffi module </code><code class="bash string">'build/temp.linux-x86_64-2.7/_padding.c'</code>
</div>
<div class="line number14 index13 alt1">
<code class="bash spaces"> </code><code class="bash plain">creating build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7 </code>
</div>
<div class="line number15 index14 alt2">
<code class="bash spaces"> </code><code class="bash plain">generating cffi module </code><code class="bash string">'build/temp.linux-x86_64-2.7/_constant_time.c'</code>
</div>
<div class="line number16 index15 alt1">
<code class="bash spaces"> </code><code class="bash plain">generating cffi module </code><code class="bash string">'build/temp.linux-x86_64-2.7/_openssl.c'</code>
</div>
<div class="line number17 index16 alt2">
<code class="bash spaces"> </code><code class="bash plain">building </code><code class="bash string">'_openssl'</code> <code class="bash plain">extension </code>
</div>
<div class="line number18 index17 alt1">
<code class="bash spaces"> </code><code class="bash plain">creating build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/build</code>
</div>
<div class="line number19 index18 alt2">
<code class="bash spaces"> </code><code class="bash plain">creating build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/build/temp</code><code class="bash plain">.linux-x86_64-2.7 </code>
</div>
<div class="line number20 index19 alt1">
<code class="bash spaces"> </code><code class="bash plain">gcc -pthread -fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I</code><code class="bash plain">/usr/include/python2</code><code class="bash plain">.7 -c build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/_openssl</code><code class="bash plain">.c -o build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/build/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/_openssl</code><code class="bash plain">.o </code>
</div>
<div class="line number21 index20 alt2">
<code class="bash spaces"> </code><code class="bash plain">build</code><code class="bash plain">/temp</code><code class="bash plain">.linux-x86_64-2.7</code><code class="bash plain">/_openssl</code><code class="bash plain">.c:434:30: fatal error: openssl</code><code class="bash plain">/opensslv</code><code class="bash plain">.h: No such </code><code class="bash functions">file</code> <code class="bash plain">or directory </code>
</div>
<div class="line number22 index21 alt1">
<code class="bash spaces"> </code><code class="bash comments">#include <openssl/opensslv.h> </code>
</div>
<div class="line number23 index22 alt2">
<code class="bash spaces"> </code><code class="bash plain">^ </code>
</div>
<div class="line number24 index23 alt1">
<code class="bash spaces"> </code><code class="bash plain">compilation terminated. </code>
</div>
<div class="line number25 index24 alt2">
<code class="bash spaces"> </code><code class="bash plain">error: </code><code class="bash functions">command</code> <code class="bash string">'gcc'</code> <code class="bash plain">failed with </code><code class="bash functions">exit</code> <code class="bash plain">status 1 </code>
</div>
<div class="line number26 index25 alt1">
<code class="bash spaces"> </code>
</div>
<div class="line number27 index26 alt2">
<code class="bash spaces"> </code><code class="bash plain">---------------------------------------- </code>
</div>
<div class="line number28 index27 alt1">
<code class="bash plain">Command </code><code class="bash string">"/usr/bin/python2 -u -c "</code><code class="bash functions">import</code> <code class="bash plain">setuptools, tokenize;__file__=</code><code class="bash string">'/tmp/pip-build-hRMlG0/cryptography/setup.py'</code><code class="bash plain">;f=getattr(tokenize, </code><code class="bash string">'open'</code><code class="bash plain">, </code><code class="bash functions">open</code><code class="bash plain">)(__file__);code=f.</code><code class="bash functions">read</code><code class="bash plain">().replace(</code><code class="bash string">'\r\n'</code><code class="bash plain">, </code><code class="bash string">'\n'</code><code class="bash plain">);f.close();</code><code class="bash functions">exec</code><code class="bash plain">(compile(code, __file__, </code><code class="bash string">'exec'</code><code class="bash plain">))</code><code class="bash string">" install --record /tmp/pip-ReCoWo-record/install-record.txt --single-version-externally-managed --compile"</code> <code class="bash plain">failed with error code 1 </code><code class="bash keyword">in</code> <code class="bash plain">/tmp/pip-build-hRMlG0/cryptography/</code>
</div>
<div class="line number29 index28 alt2">
<code class="bash plain"></code><code class="bash comments"># yum install openssl build/temp.linux-x86_64-2.7/_openssl.c:434:30: fatal error: openssl/opensslv.h: No such file or directory </code>
</div>
<div class="line number30 index29 alt1">
<code class="bash plain">^C </code>
</div>
<div class="line number31 index30 alt2">
<code class="bash spaces"> </code>
</div>
<div class="line number32 index31 alt1">
<code class="bash plain">Exiting on user cancel.</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
由于确实openssl.c文件而安装失败了,貌似没有找到对应的文件</p>
<p>
<span><strong>二、问题分析</strong></span></p>
<p>
首先怀疑openssl没有安装,故先进行openssl的检查:</p>
<p>
<code>>> yum info openssl</code></p>
<div class="jb51code">
<div>
<div class="syntaxhighlighterbash" id="highlighter_275855">
<div class="toolbar">
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
<div class="line number1 index0 alt2">
1</div>
<div class="line number2 index1 alt1">
2</div>
<div class="line number3 index2 alt2">
3</div>
<div class="line number4 index3 alt1">
4</div>
<div class="line number5 index4 alt2">
5</div>
<div class="line number6 index5 alt1">
6</div>
<div class="line number7 index6 alt2">
7</div>
<div class="line number8 index7 alt1">
8</div>
<div class="line number9 index8 alt2">
9</div>
<div class="line number10 index9 alt1">
10</div>
<div class="line number11 index10 alt2">
11</div>
<div class="line number12 index11 alt1">
12</div>
<div class="line number13 index12 alt2">
13</div>
<div class="line number14 index13 alt1">
14</div>
<div class="line number15 index14 alt2">
15</div>
<div class="line number16 index15 alt1">
16</div>
<div class="line number17 index16 alt2">
17</div>
<div class="line number18 index17 alt1">
18</div>
<div class="line number19 index18 alt2">
19</div>
<div class="line number20 index19 alt1">
20</div>
<div class="line number21 index20 alt2">
21</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2">
<code class="bash plain">Loaded plugins: fastestmirror </code>
</div>
<div class="line number2 index1 alt1">
<code class="bash plain">Loading mirror speeds from cached hostfile </code>
</div>
<div class="line number3 index2 alt2">
<code class="bash spaces"> </code><code class="bash plain">* base: mirrors.aliyun.com </code>
</div>
<div class="line number4 index3 alt1">
<code class="bash spaces"> </code><code class="bash plain">* epel: mirrors.aliyun.com </code>
</div>
<div class="line number5 index4 alt2">
<code class="bash spaces"> </code><code class="bash plain">* extras: mirrors.aliyun.com </code>
</div>
<div class="line number6 index5 alt1">
<code class="bash spaces"> </code><code class="bash plain">* updates: mirrors.aliyun.com </code>
</div>
<div class="line number7 index6 alt2">
<code class="bash plain">Installed Packages </code>
</div>
<div class="line number8 index7 alt1">
<code class="bash plain">Name : openssl </code>
</div>
<div class="line number9 index8 alt2">
<code class="bash plain">Arch : x86_64 </code>
</div>
<div class="line number10 index9 alt1">
<code class="bash plain">Epoch : 1 </code>
</div>
<div class="line number11 index10 alt2">
<code class="bash plain">Version : 1.0.1e </code>
</div>
<div class="line number12 index11 alt1">
<code class="bash plain">Release : 60.el7_3.1 </code>
</div>
<div class="line number13 index12 alt2">
<code class="bash plain">Size : 1.5 M </code>
</div>
<div class="line number14 index13 alt1">
<code class="bash plain">Repo : installed </code>
</div>
<div class="line number15 index14 alt2">
<code class="bash plain">Summary : Utilities from the general purpose cryptography library with TLS implementation </code>
</div>
<div class="line number16 index15 alt1">
<code class="bash plain">URL : http:</code><code class="bash plain">//www</code><code class="bash plain">.openssl.org/ </code>
</div>
<div class="line number17 index16 alt2">
<code class="bash plain">License : OpenSSL </code>
</div>
<div class="line number18 index17 alt1">
<code class="bash plain">Description : The OpenSSL toolkit provides support </code><code class="bash keyword">for</code> <code class="bash plain">secure communications between </code>
</div>
<div class="line number19 index18 alt2">
<code class="bash spaces"> </code><code class="bash plain">: machines. OpenSSL includes a certificate management tool and shared </code>
</div>
<div class="line number20 index19 alt1">
<code class="bash spaces"> </code><code class="bash plain">: libraries </code><code class="bash functions">which</code> <code class="bash plain">provide various cryptographic algorithms and </code>
</div>
<div class="line number21 index20 alt2">
<code class="bash spaces"> </code><code class="bash plain">: protocols.</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div class="codetool" id="codetool">
<div class="code_n">
<textarea></textarea>
</div>
</div>
</div>
<p>
基于其中的信息可以得知,openssl是一家安装过了,怎么还是会缺少openssl.c的文件呢?</p>
<p>
经过一番思考,豁然发现一个基本规则, openssl已经安装二进制的可执行程序,而这里的安装scrapy则需要的是openssl的源文件程序,比如openssl.h。故这里需要补充安装的是openssh.h的开发版,其中包含相关的安装源代码文件。</p>
<p>
<span><strong>三、问题的解决</strong></span></p>
<p>
在确认了问题之后,接下来就是安装openssl-devel的安装包了:</p>
<p>
<code>>> yum install openssl-devel</code></p>
<p>
在安装完成之后,重新安装scrapy,就可以顺利安装成功了</p>
<p>
<span><strong>总结</strong></span></p>
<p>
推而广之,在Linux系统中都存在类似的问题,在安装特定安装包的过程中,其依赖某些第三方开发包,会曝出某些文件找不到的错误,一般情况下是需要安装依赖包的开发版本的。 这个规则应该是通用的。</p>
<p>
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
原文链接:http://blog.csdn.net/blueheart20/article/details/65653670</p>
頁:
[1]