本文以Red Hat 7.0为例,介绍Linux系统下开放源码文件的安装,升级,卸载等管理工作.开放源码文件的安装与升级可以通过以下两种方式来进行:
Tarball文件是一个软件包,扩展名为 *.tar.gz 或者 *.tar.bz2,将它解压缩之后,通常可以得到三种文件:
tarball文件的安装过程相对简单,主要由以下三步组成:
1. 下载与解压tarball文件
2. 构建,包括配置,编译,链接等.
3. 安装
./configure
make clean
make
make install
make uninstall
此方法的前提是你的源码文件依然存在,而且Makefile文件中存在uninstall命令.否则只能通过手动的方法删除.如果你是按照上述步骤进行程序安装的话,程序会被安装到系统的相应默认目录中,可以到相应的目录中删除相应的文件即可,缺点是可能造成删除不干净不彻底.可以通过以下方法重新安装一次,然后遍历to_remove,删除系统对应安装位置的文件即可.
./configure --prefix=/tmp/to_remove && make install
根据patch文件升级源码文件,必须要有补丁文件patch_file
patch -p num < patch_file
上述命令只会升级源码文件,并不会进行程序的安装,因此之后只要重新编译安装即可
在默认情况下,Linux系统安装的软件大多是在 /usr 中的,而用户安装的软件则建议放置在 /usr/local中,用户安装的源码文件建议放在 /usr/local/src 中.
系统软件的相关默认安装路径
/etc/ 配置文件
/usr/lib 函数库文件
/usr/bin 可执行文件
/usr/share/man 说明或者帮助文件
用户软件的相关默认安装路径
/usr/local/etc 配置文件
/usr/local/lib 函数库文件
/usr/local/bin 可执行文件
/usr/share/man 说明或者帮助文件
以上方法的缺点是安装软件的位置是分散的,造成软件的卸载比较难以定位文件源,所以可以选择指定目录安装软件,假设软件安装到/usr/local/test目录中:
/usr/local/test/etc
/usr/local/test/bin
/usr/local/test/lib
/usr/local/test/man
Tarball文件安装的优点: 跨平台可移植.缺点是卸载比较复杂.
distribution | 软件管理机制 | 使用命令 | 在线升级机制(命令) |
---|---|---|---|
RedHat/CentOS | RPM | rpm,rpmbuild | YUM (yum) |
Debian/Ubuntu | DPKG | dpkg | APT (apt-get) |
RPM(Red Hat Package Manager)是一种以数据库记录的方式将所需要的软件安装到Linux系统的一种包管理机制.每个rpm包文件(扩展名为 .rpm)都包含一些重要的信息,比方说软件依赖属性.在软件安装之前,rpm会先依照软件里的信息查询Linux主机的依赖属性是否满足,如果满足则安装,否则不安装.在软件安装之后,Linux主机会把该软件的信息记录在数据库中以备查询.
RPM包文件的主要内容是经过编译和打包的可执行文件,与此相反,SRPM(Source RPM)是指它的RPM文件里面包含源代码,即它所提供的软件是没有经过编译的源代码,其扩展名为 .src.rpm.虽然SRPM的内容是源代码,但是它仍然含有该软件所需要的依赖性软件说明以及所有RPM文件所提供的数据,同时,与RPM不同的是,它也提供了参数设置文件.
文件格式 | 扩展名 | 直接安装否 | 文件类型 | 可否修改参数并编译 |
---|---|---|---|---|
RPM | xxx.rpm | 可以 | 已编译的可执行文件 | 不可 |
SRPM | xxx.src.rpm | 不可 | 未编译的源代码 | 可以 |
我们知道rpm包管理机制的软件信息都记录在rpm数据库中,它的每一条记录都是软件的相应信息,rpm数据库位于以下目录
/var/lib/rpm
rpm包的文件名如下所示,它包含软件名称,版本号,发布次数,硬件平台和扩展名.srpm包的文件名的rpm类似,除了护展名.
rpm - 4.11.3 - 35 . el7.x86_64 .rpm
软件名称 软件的版本信息 发布的次数 适合的硬件平台 扩展名
rpm包的默认安装路径和tarball文件是相似的,由此可以看出: 不管采用什么方式,Linux的软件基本安装在相同的位置.
/usr/bin
/usr/lib
/usr/share/doc
/usr/share/man
rpm -ivh package-name 安装
rpm -evh package-name 卸载
rpm -Uvh package-name 升级
rpm -q package-name 查询
rpm -qa | grep package-name 查询
rpmbuild {-ba|-bb|-bp|-bc|-bi|-bl|-bs} [(1) rpmbuild-options ] SPECFILE…
rpmbuild {-ta|-tb|-tp|-tc|-ti|-tl|-ts} [(1) rpmbuild-options ] TARBALL…
rpmbuild {–rebuild|–recompile} SOURCEPKG…
参数 | 说明 |
---|---|
/usr/src/redhat/SPECS | 软件的设置文件,用于说明软件的编译打包安装等 |
/usr/src/redhat/SOURCES | 软件的源代码文件 |
/usr/src/redhat/BUILD | 编译过程的暂存文件的保存目录 |
/usr/src/redhat/RPMS | 保存rpm包的目录 |
/usr/src/redhat/SRPMS | 保存srpm包的目录 |
rpmbuild -ba *.spec -> 编译同时生成RPM和SRPM文件
rpmbuild -bb *.spec -> 仅编译成RPM文件
参数 | 说明 |
---|---|
Summary | 软件的主要说明 |
Name | 软件的名称 |
Version | 软件的版本号 |
Release | 软件的打包次数 |
License | 软件的授权模式 |
Group | 软件的开发团队 |
Url | 源代码的主要官方网站 |
Source | 软件的来源 |
Patch | 软件的补丁文件 |
BuildRoot | 编译过程存放中间文件临时目录 |
ExclusiveArch | 软件适合的硬件平台 |
Requires | 软件的依赖属性说明 |
Prereq | 软件的前驱程序 |
BuildRequires | 编译过程中所需要的软件 |
Packager | 软件的打包人员 |
Vender | 软件的开发商 |
%description | 软件的简要说明 |
%prep | 软件的尚未进行设置或者安装之前前置工作 |
%setup | 进行解压缩类的工作 |
%build | 软件的构建过程 |
%install | 软件的安装过程 |
%clean | 删除BuildRoot中的临时文件 |
%files | 需要安装的文件 |
%changelog | 更新记录 |
RHEL7 rpm pacakge guide
rpm打包软件1
rpm打包软件2
rpm打包软件3