0520rpmtarball.htm

来自「鸟哥LINUX 学习课本」· HTM 代码 · 共 956 行 · 第 1/5 页

HTM
956
字号
<br>但是如果你每个套件都选择在这个预设的路径下安装的话,那么所有的套件的档案都将放置在这四个目录当中,因此,如果你都安装在这个目录下的话,那么未来在想要升级或移除的时候,就会比较难以追查档案的来源啰?而如果您在安装的时候选择的是单独的目录,例如/usr/local/apache 的话,那么您的档案目录就会变成:<br> <ul><font color="#000066" face="SimSun">/usr/local/apache/etc</font><br><font color="#000066" face="SimSun">/usr/local/apache/bin</font><br><font color="#000066" face="SimSun">/usr/local/apache/lib</font><br><font color="#000066" face="SimSun">/usr/local/apache/man</font></ul> <br>呵呵呵呵!自己的档案都在同一个目录之下,那么要移除就简单的多了!只要将该目录移除即可视为该套件已经被移除啰?当然啰,实际安装的时候还是得视该软件的Makefile 里头的 install 信息才能知道到底他的安装情况为何的?<br> <br>移除的方法是这样,那么升级呢?唉?升级有的时候也是很困扰啦!怎么说呢?我们还是以apache 来说明好了,如果您安装的时候是使用 PHP + Apache + MySQL的方式来安装的,那么每个套件在安装的时候『都有一定的顺序与程序!』因为他们三者之间具有相关性,所以安装时必需要三者同时考虑到他们的函式库与相关的编译参数。那么如果今天我只要升级PHP 呢?有的时候因为只有涉及动态函式库的升级,那么我只要升级 PHP 即可!其它的部分或许影响不大。但是如果今天PHP 需要重新编译的模块比较多,那么可能会连带的,连 Apache 这个程序也需要重新编译过才行?阿!真是有点给他头痛的?没办法啦!使用tarball 确实有他的优点啦,但是在这方面,确实也有他一定的伤脑筋程度? @_@</ul><hr width="100%"><a name="rpmortarball"></a><font size="+1" color="#000099">要选择RPM 还是 Tarball?</font><blockquote><b><font color="#000066">优先选择 RPM:</font></b><br>这一直是个有趣的问题:『<b>如果我要升级的话,或者是全新安装一个新的套件,那么该选择RPM 还是 Tarball 来安装呢?</b>』!基本上,如果有 RPM 可以提供给您的 distribution来安装,并且没有严重的相依属性的问题时,呵呵!选择 RPM 来安装会是一个比较好的解决方案,Why ?这是由于刚刚上面就提到的 <a href="#RPMandSRPM">RPM 的好处</a> 啦!可以具有<b><font color="#000099">档案与数据均有纪录的优点,</font></b>这就是上面提到的<b><font color="#3333ff">/var/lib/rpm</font></b>这个目录里面的数据库,个记录可以让你在管理上更为便利,包括上面提到的 RPM的升级、安装、验证与移除等等。尤其是在查询上面!可以让你在管理你的系统上面更为便利。但是RPM 也不是没有缺点的,包括最为大家所抱怨连连的『<font color="#000099">属性相依</font>』的问题,每一个不同版本之间,就必须要以不同的RPM 档案来安装!此外,如果要升级『<font color="#000099">某一个套件</font>』而已时,通常还需要连带其它的套件也必须要一起升级才行,否则会有问题!此外,当一个套件经过了『<b>大幅度的修改</b>』之后,通常旧的RPM 与新的 RPM 之间已经几乎无法『<b>完全兼容</b>』时,呵呵!那么升级或者是移除的手续可是会累坏人的!例如最近朋友们常常问到的Apache 1.3.xx 与 2.0.xx 的版本升级问题!由于架构上面差异性太大,加上版本属性相依问题很难得到一个完满的解决方案,这个时候RPM 就不那么合适了。(<i>除非您要一个一个的将 Apache 移除,连同其相依的套件,然后再将Apache 一个一个的安装,包括新套件的相依套件! ^_^ .....我是不会这么做的啦</i>!)</blockquote><blockquote><b><font color="#000066">简易方法:</font></b><br>所以这个时候 Tarball 的方式就特别适合您的安装了!这是因为 Tarball 可以自行设定编译时的参数,此外,也可以自行设定『<b>安装路径</b>』,相当的适合于想要安装『<b>多个不同版本的同一个套件</b>』的情况!这是怎么说呢?!由于RPM 必须要配合系统里面其它的相依属性的套件,所以基本上,他的安装路径(就是每个档案的放置路径)理论上是放死的,就是不能随意的改变他的安装路径,因此,当有两个不同版本的相同套件想要测试的时候,大概一定就得将原先的版本移除之后,才能安装使用先的版本啰!(<i>此外,由于相依的套件几乎都已经包含在tarball 当中了,所以安装上面其实并不难啦</i>!)</blockquote><blockquote>然而 tarball 可不是这样的!你可以自行编译并且安装在不同的路径,只要在启动的时候启动适当的版本,那么不同版本的套件可以同时的存在于一个系统当中,而且可以透过选择启动的档案来启动不同的版本。当然啰!你也可以让tarball 的安装与 RPM 的安装同时存在于一个系统当中,但是需要特别留意的是,你在启动该套件的时候,千万记得你的启动路径!免得启动到了错误的版本了!呵呵!(这也是一个系统存在不同多个版本的套件容易发生的错误!希望大家都能够了解这个问题呢!)</blockquote><blockquote>所以说,为了避免这种路径上的错误困扰,基本上,我们都希望 Tarball的安装路径可以设定在 Linux 原本就规划要给大家安装的路径『<b><font color="#3333ff">/usr/local </font></b>』这个路径下!这样可以省去相当多寻找档案的时间!而且在管理上面也会比较容易!呵呵!</blockquote><blockquote>不过, Tarball 最麻烦的地方有几点:<ul><li><b><font color="#000099">反安装:</font></b></li><br>Tarball 最麻烦的地方就在于他的『<font color="#3333ff">解安装</font>』了!相当的讨厌!如果是简单的直接将所有的套件安装在一个目录下的话,例如/usr/local/mrtg 时,那么解安装还算简单,就是将该路径杀掉就 OK 啦!但是如果是类似sendmail 这一种呢?他的路径都是已经放置死的(需要在 /etc/sendmail.cf、/etc/mail底下)那么追踪反安装的路径就很烦人;</ul><ul><li><b><font color="#000099">在线查询:</font></b></li><br>如果您的安装路径是在 /usr/local 底下的话,那么执行档会被放置到 /usr/local/bin,或者是 /usr/local/sbin 底下,参数档会放在 /usr/local/etc 底下,在线查询档案会放在/usr/local/man 底下,所以在设定上面还有查询上面还算简单(路径设定一下即可!),不过,如果你是将套件安装在单独的路径下呢?例如/usr/local/mrtg 底下,那么执行档变成了 /usr/local/mrtg/bin 底下,最麻烦的地方就是man page (在线查询)放置的地点会变成在 /usr/local/mrtg/man 底下了!糟糕!那么预设的man page 路径就找不到该说明文件啰!<b><font color="#3333ff">这个时候就必须要手动的将该路径加入/etc/man.conf 这个档案中</font></b>!而且执行文件放置的路径也没有指定,可以经由(1)Link 的方式或者 (2)设定 PATH 环境变量的方式将该路径加进去啦!确实是比较麻烦的啦!</ul>所以说,RPM 与 Tarball 各有其优缺点,不过,如果有 RPM 的话,那么优先权还是在于RPM 安装上面,毕竟管理上比较便利,但是如果套件的架构差异性太大,或者是无法解决相依属性的问题,那么与其花大把的时间与精力在解决属性相依的问题上,还不如直接以tarball 来安装,轻松又惬意!</blockquote><hr width="100%"><a name="libarary"></a><font color="#000099"><font size="+1">函式库资料:</font>ldconfig, ldd,</font><ul>什么是函式库呢?由于我们使用的 Linux 是一个相当不算小的操作系统,里头的数据可是相当多的,然而有些执行程序所使用的系统资源都是相同的,例如登入的时候不论ftp, ssh, telnet 都需要使用到 pam 模块,那么是不是所有的执行程序都需要将pam 的数据写入程序当中呢?当然不需要了!因为系统本身就已经有 pam 了呀!那么如何使用这些系统提供的信息呢?呵呵!这个时候动态的函式库就不可或缺了!同时,需要特别留意的是,有相当多的函式库都是『根据kernel 的版本来设定的』,所以不同版本的 kernel 最好不要随意的互相更换呦!容易造成很多执行程序无法使用其函式库,而挂点的情况发生的!底下我们来谈一谈怎么获得函式库的资料!</ul><blockquote><ul><hr width="100%"><li><a name="ldconfig"></a><b><font color="#000099" face="SimSun">ldconfig</font></b></li><br> <table bgcolor="#000000" border="1" cols="1" width="700"><tbody><tr><td><font size="-1" color="#ffffff" face="SimSun">[root @test/root]# ldconfig [-f conf] [-C cache] [-p]</font><br><font size="-1" color="#ffff00" face="SimSun">参数说明:</font><br><font size="-1" color="#ffff00" face="SimSun">-f conf :使用conf 作为 libarary 函式库的取得,而不以 /etc/ld.so.conf 为默认值</font><br><font size="-1" color="#ffff00" face="SimSun">-C cache:使用cache 作为快取暂存的函式库资料,而不以 /etc/ld.so.cache 为默认值</font><br><font size="-1" color="#ffff00" face="SimSun">-p   :列出目前有的所有函式库资料内容(在/etc/ld.so.cache 内的资料!)</font><br><font size="-1" color="#ffff00" face="SimSun">范例:</font><br><font size="-1" color="#ffffff" face="SimSun">[root @test/root]# ldconfig -p</font><br><font size="-1" color="#ffffff" face="SimSun">333 libs foundin cache `/etc/ld.so.cache'</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libz.so.1 (libc6) =&gt; /usr/lib/libz.so.1</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libz.so (libc6) =&gt; /usr/lib/libz.so</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libxsltbreakpoint.so.1 (libc6) =&gt; /usr/lib/libxsltbreakpoint.so.1</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libxslt.so.1 (libc6) =&gt; /usr/lib/libxslt.so.1</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libxrx.so.6 (libc6) =&gt; /usr/X11R6/lib/libxrx.so.6</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libxrx.so (libc6) =&gt; /usr/X11R6/lib/libxrx.so</font><br><font size="-1" color="#ffffff" face="SimSun">........</font><br><font size="-1" color="#ffffff" face="SimSun">[root @test/root]# more /etc/ld.so.conf</font><br><font size="-1" color="#ffffff" face="SimSun">/usr/kerberos/lib</font><br><font size="-1" color="#ffffff" face="SimSun">/usr/X11R6/lib</font><br><font size="-1" face="SimSun"><font color="#ffffff">[root @test/root]# ldconfig&#160; </font><font color="#ffff00">&lt;==以 /etc/ld.so.conf的内容进行函式库的重建( /etc/ld.so.cache )</font></font></td></tr></tbody></table><font color="#ff0000">说明:</font><br>系统预设的函式库都是由 ldconfig 设定后写入 /etc/ld.so.cache 当中!然后供系统来读取使用!那么您如何知道目前的函式库有多少呢?呵呵!使用ldconfig 就可以知道啦!以 ldconfig -p 可以列出 /etc/ld.so.cache 的内容呢!那么/etc/ld.so.conf 又是什么呢?!很简单,那就是『<font color="#000099">目前你的系统中主要的函式库放置的目录</font>』,以上式为例,则主要的XFree86 函式库放置在 /usr/X11R6/lib 当中,另外还有常用的 kerberos 的函式库也摆在其中!如果您的其它函式库需要写入系统中,让系统可以很快的找到该函式库而予以取用的话,那么将你所安装的套件(通常是<a href="#tarball_packager">tarball</a>的套件)所产生的 lib 目录,给他写到 /etc/ld.so.conf 这个档案中,然后再以ldconfig 重新建立 /etc/ld.so.cache 即可!</ul></blockquote><blockquote><ul><hr width="100%"><li><a name="ldd"></a><b><font color="#000099" face="SimSun">ldd</font></b></li><br> <table bgcolor="#000000" border="1" cols="1" width="600"><tbody><tr><td><font size="-1" color="#ffffff" face="SimSun">[root @test/root]# ldd [-vdr] [filename]</font><br><font size="-1" color="#ffff00" face="SimSun">参数说明:</font><br><font size="-1" color="#ffff00" face="SimSun">-v :列出所有内容信息;</font><br><font size="-1" color="#ffff00" face="SimSun">-d :重新将数据有遗失的link 点秀出来!</font><br><font size="-1" color="#ffff00" face="SimSun">-r :将 ELF有关的错误内容秀出来!</font><br><font size="-1" color="#ffff00" face="SimSun">范例:</font><br><font size="-1" color="#ffffff" face="SimSun">[root @test/root]# cd /lib</font><br><font size="-1" color="#ffffff" face="SimSun">[root @test/lib]# ldd libdb.so</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 =&gt; /lib/libc.so.6 (0x400ae000)</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x80000000)</font><br><font size="-1" color="#ffffff" face="SimSun">[root @test/lib]# ldd -v libdb.so</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 =&gt; /lib/libc.so.6 (0x400ae000)</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x80000000)</font><p><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;Version information:</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;./libdb.so:</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 (GLIBC_2.1.3) =&gt; /lib/libc.so.6</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 (GLIBC_2.1) =&gt; /lib/libc.so.6</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 (GLIBC_2.2) =&gt; /lib/libc.so.6</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;libc.so.6 (GLIBC_2.0) =&gt; /lib/libc.so.6</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;/lib/libc.so.6:</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ld-linux.so.2 (GLIBC_2.1.1) =&gt; /lib/ld-linux.so.2</font><br><font size="-1" color="#ffffff" face="SimSun">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;ld-linux.so.2 (GLIBC_2.2.3) =&gt; /lib/ld-linux.so.2</font><br><font size="-1" color="#

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?