详解linux源码包安装过程
在梅河口等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都做网站 网站设计制作按需求定制网站,公司网站建设,企业网站建设,品牌网站建设,营销型网站建设,成都外贸网站制作,梅河口网站建设费用合理。
1. 解压缩包
可以通过下载或其他方式获得了一个软件包,通常它是一个压缩文件,大部分可能是存档的和压缩的,这些文件一般以 .tar .gz为扩展名。
首先拷贝它到一个目录,然后 untar 和 gunzip 解压它。 通常这个命令是
tar xzvf filename [filename 是软件文件名称]
解压后的文件一般会在当前目录下的创建子目录,并以这个包名来命名。 你也可以用用这个命令预先查看结果 tar tzvf filename,显示包里有那些解压文件。
源文件如果是新的 bzip2 (.bz2) 格式,可用
bzip2 -cd filename | tar xvf -,或更简单的 tar xyvf filename ,这很不错的tar命令被不断的完善。
说明:
A:有时候一些文件必须安装在用户的 home 目录下,或更多的是在一个固定的目录,比如 /, /usr/src, 或 /opt 。所以必须仔细阅读安装包的配置信息。当一个软件包里如果有config 和 Makefiles 文件则最好去编辑它,这里包括了安装指令和说明。提示:你改变 makefile 会导致不同的结果。大部分软件包允许用 make install 自动处理安置二进制文件在适当的系统位置。
B:你可能碰到过一些共享文件、shell 存档文件、尤其是 Internet 上的源码新闻组。它们保留的原因是具有人性化的可读性,并且允许新闻组缓冲并通过它们筛选和剔除出不合格的。它们可能用 unshar filename.shar 命令来解压。
C: 一些源码存档文件是用非标准的 DOS,Mac 或其他压缩的比如:
zip, arc, lha, arj, zoo, rar, and shk.
D: 有时候,你可能需要使用一个 patch 或显示改变了的 diff 文件来升级或修复存档的源码文件。这 doc 文件或者 README 文件将告诉你怎么去使用。一个很好的命令用标准语法来调用的命令是 patch patchfile.
2: 关于 rpm 安装包
一些 Linux 用户惧怕通过使用源码来手动安装软件包,不过现在有方便的 rpm 和 deb 或 新格式的 slp 包。例如:rpm 安装运行平稳又快,作为一个软件安装在某几个有名的操作系统。
作为方便的RPM包也存在很多不好的缺点,例如:
A: 要了解软件中更多更详细的内容你必须去在二进制中去了解,而不是rpm包。
B: 还有安装一个 rpm 包如果需要依赖关系那么安装就可能会导致失败。
C: 当 rpm 请求你系统中不同版本的库,那么安装将不能继续,除非你为错误的库位置创建连接符号到正确的位置。
说明:必须使用root 安装 rpm 和 deb 。因为它需要必须的写入权限。
最简单的,用命令 rpm -i packagename.rpm 和 dpkg --install packagename.deb 会自动解包和安装。
3:关于安装 Linux 包出现的一些问题及解决方案
假设 make 失败有个链接错误: -lX11: No such file or directory,正好在 xmkmf 之后已被调用,这可能意味着 Imake 不能被完全建立。检查第一部分 Makefile 文件的的行是这样:
· LIB= -L/usr/X11/lib
· INCLUDE= -I/usr/X11/include/X11
· LIBS= -lX11 -lc -lm
这个 -L 和 -I 开关告诉编译器和链接分别在哪里找到 library 和 include 文件。在这个例子里, X11 库应该在 /usr/X11/lib 目录,且 X11 包含文件应该在 /usr/X11/include/X11 目录里。假如对于你的机器上的这个错误,请处理修改 Makefile 并重新再 make。
没有声明涉及的数学库函数,像下列各项:
/tmp/cca011551.o(.text 0x11): undefined reference to `cos'
要修复它,需要明确链接到匹配的库,在 Makefile (看先前的例子) 里增加一个 -lm 到 LIB 或 LIBS 标记 。
用其他方法尝试
仍然失败 如果失败,参考下列脚本:
make -DUseInstalled -I/usr/X386/lib/X11/config
这个直接方式的类别相当于。
在少数例子里,用 root 运行 ldconfig 可能会解决:
# ldconfig 更新共享库链接符号。
一些 Makefiles 使用你系统里未被承认的库别名。一个例子,构建可能需要 libX11.so.6 ,但是在 /usr/X11R6/lib 不存在文件或链接。然而,在那里是 libX11.so.6.1。解决方法是用 root 运行ln -s /usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/lib/libX11.so.6 ,接着需要运行 ldconfig 。
有一些包需要你安装一个或更多库的升级版本。需要拷贝一个或更多的库到适当的目录里,删除旧的库,重新设置动态链接库。
4:一些其他的问题处理
安装一个shell 脚本如果出现:No such file or directory 的错误消息。这是可以检查文件权限确定文件事可执行的,并检查文件头确定是否 shell 或程序是脚本在指定的位置被调用。一个例子,这个脚本可能是这样开始的:
#!/usr/local/bin/EDEN
如EDEN的实际安装位置是在你的 /usr/bin 目录,用一个 /usr/local/bin 替代
这个脚本不能运行有两个方法来纠正!!
A: 文件头改成 #!/usr/bin/EDEN
B: 或增加一个链接符, ln -s /usr/bin/EDEN
5:一个典型的例子 Xloadimage
首先说明下面的例子来源于国外网站的一个技术实例,这里我做了翻译和整理。
这个例子展现一个简单的问题。xloadimage 程序对我的图形工具的调整设置是有用的附加。从源码目录拷贝文件,用 tar xzvf 解压文件,可是在运行 make 的时候出现令人讨厌的错误并停止了。
gcc -c -O -fstrength-reduce -finline-functions -fforce-mem
-fforce-addr -DSYSV -I/usr/X11R6/include
-DSYSPATHFILE=\"/usr/lib/X11/Xloadimage\" mcidas.c
In file included from /usr/include/stdlib.h:32,
from image.h:23,
from xloadimage.h:15,
from mcidas.c:7:
/usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:
conflicting types for `wchar_t'
/usr/X11R6/include/X11/Xlib.h:74: previous declaration of
`wchar_t'
make[1]: *** [mcidas.o] Error 1
make[1]: Leaving directory
`/home/thegrendel/tst/xloadimage.4.1'
make: *** [default] Error 2
这个错误消息包含了实质的线索:
查看 image.h 文件的 23 行:
#include stdlib.h
在源码的某处对于 xloadimage, wchar_t 已经在指定标准 include 文件重新定义。 告诉我们首先在 image.h 的 23 行尝试注释它,或许 stdlib.h include 是不存在的,毕竟不是所有都是必需的。
在这点,构建中的收益来源于所有任何一个致命错误。xloadimage 现在功能正常。
6: 安装 Linux 包的一些总结
坚持自己动手处理所有的安装出现的问题,不断总结努力学习,从错误里去仔细研究,努力动手排错,从每个不足甚至失败的地方得到扩充和提升,可以增强安装构建软件的技巧。
安装linux 下的starch源代码的步骤:
1、获取码源;2、查看INXTALL与README文件;3、创建Makelife;4、编译;5、安装。
源码:程序代码,人类可看懂的代码;编译程序:将程序代码编译成机器看懂的代码;二进制文件:经过编译程序变为二进制程序后,机器可执行的文件make和configure: make是一支程序,会自动寻找Makefile文件,Makefile文件中记录了源码如何编译安装的信息;源码包:源码包一般是压缩文件,解压后一般有源码文件、configure文件、INSTALL说明文件等。
1、安装编码源码的编译工具,一般是需要安装gcc
yum install gcc
2、把源码解压
tar zxvf uname.tar.gz
3、进入解压的目录执行
./configure
make
make install
完成编译安装
安装软件---这个操作在WINDOWS的世界里很简单,下载软件双击exe文件即可,还有自动运行方式的,复杂点的执行bat之类的可执行程序即可。但Linux不然,因Linux版本过多,导致软件的安装方法五花八门。本文只是将Linux的软件安装方式进行汇总和整理,没有过多的技术难度,仅供参考。
Linux下主要有两种方式,主要分在线安装和线下安装。(以下介绍的方式基本涵盖所有Linux系统的软件安装方式)
一、在线安装
1、软件管理中心安装。(ubuntu)1)更新源sudo apt-get update2)打开软件中心,搜索你要安装的软件,双击安装即可。例如安装apache,如下图
2、命令行安装方式
1)更新,命令:apt-get update
2)查找你要安装的软件,apt-cache search “软件名”
3)apt-get install 软件名
以上在线的两种方式都提到了apt-get 方式,那么它的工作原理简单说明一下,apt-get相关的有两个重要文件:1、是/etc/sources.list,2、是/var/lib/apt/lists/目录.
当我们执行apt-get update程序分析sources.list看这个文件里是否有对应的Packages/Sources/Release列表文件,如果有更新则下载之,存入/var/lib/apt/lists/目录(其实就是保持与当前系统版本软件源表最新);apt-get install 安装相应的包 ,下载并安装。
这种方式的好处在于:如果你想要加载的应用需要依赖另一个应用程序才能正常工作,apt-get会帮你找到并加载所需的程序库或应用代码,这种方式是比较常用的的。比如我们执行apt-get install mysql-server,可以看到相关的依赖包(如图)
二、线下安装
之所以叫线下的安装方式,也就是说你要把软件下载到本地去安装。一般我们下载的文件后缀名都是zip、tar.gz等压缩包,解压后会看到rpm、bin、deb、run之类扩展名文件。很多软件都会提供不同LINUX版本的安装格式,你可以根据自己的系统下载不同扩展名的软件。
1、rpm安装包:这时一款老牌的安装格式,是红帽创建的安装格式,现在已成为一种标准,常用在opensuse/turbo/redhat版本),安装方法rpm -ivh 软件名.rpm (如果只是安装一个i参数就够了,如果还要看安装进度和软件信息就加个vh)
2、deb安装包:DEB是Debian软件包格式的文件扩展名,常用在centos/ubuntu,在苹果系统里也常见此安装方式。安装方法:dpkg -i 软件名.deb
3、run安装包:以QT(一种编程工具)的安装文件为例,
1)授权: chmod x qt-unified-linux-x64-2.0.2-2-online.run
2)执行:./qt-unified-linux-x64-2.0.2-2-online.run即可安装。
4、bin安装包:bin包是一个自解压格式的安装包,要想执行它,需要先赋予它可执行的权限。
(以安装jdk为例)# chmod x jdk-6u21-linux-i586.bin# ./jdk-6u21-linux-i586.bin
5、编译后安装方式:
举例安装nagios插件(nagios是一种开源的监控软件,需要多种插件支持监控模块)
1)cd /tmp/nagios-plugins-* //先进入目录
2)./configure --with-nagios-user=nagios --with-nagios-group=nagios // 配置,即安装的用户安装的路径都可在此设置,这一步一般用来生成 Makefile,为下一步的编译做准备
3)make //编译过程如果 在 make 过程中出现 error ,你就要记下错误代码,缺少什么包就按照什么包。
4) make install //如果make无问题就可以直接安装了。
这种安装方法的好处是你可以自定义安装路径、安装账号等参数,常见开源平台下载的源码安装方式。
6、其它,还有一些软件解压后生成的文件夹内包含很多文件,一般文件夹内有install.sh、setup.py等安装文件方式,此种方式类似windows的exe安装方式,你需要先授权该文件的可执行权限,在执行安装。以上基本上囊括了所有的Linux环境下的软件安装方式,供各位参考。
起因:想查看链表list.h源码,但系统中没有找到
经过一番搜索,总结下安装步骤:
此时需要安装一个mock,并新建一个mockbuild用户
4、命令行执行
5、回到根目录下 /root/rpmbuild ,可以看到SPECS文件夹cd到这个文件夹
执行 rpmbuild -bp --target = $ (uname -m) kernel.spec
如果提示rpmbuild not find,需要先安装rpmbuild, yum install rpmbuild
6、运行后会出现错误,提示
执行
7、依赖包安装完成后,再次执行
至此,安装完成。