标签 RPM 下的文章

前几天我尝试去创建一个仅包含我们经常在 CentOS 7 下使用的软件的本地仓库。当然,我们可以使用 curl 或者 wget 下载任何软件包,然而这些命令并不能下载要求的依赖软件包。你必须去花一些时间而且手动的去寻找和下载被安装的软件所依赖的软件包。然而,我们并不是必须这样。在这个简短的教程中,我将会带领你以两种方式下载软件包及其所有依赖包。我已经在 CentOS 7 下进行了测试,不过这些相同的步骤或许在其他基于 RPM 管理系统的发行版上也可以工作,例如 RHEL,Fedora 和 Scientific Linux。

方法 1 利用 “Downloadonly” 插件下载 RPM 软件包及其所有依赖包

我们可以通过 yum 命令的 “Downloadonly” 插件下载 RPM 软件包及其所有依赖包。

为了安装 Downloadonly 插件,以 root 身份运行以下命令。

yum install yum-plugin-downloadonly

现在,运行以下命令去下载一个 RPM 软件包。

yum install --downloadonly <package-name>

默认情况下,这个命令将会下载并把软件包保存到 /var/cache/yum/rhel-{arch}-channel/packageslocation 目录,不过,你也可以下载和保存软件包到任何位置,你可以通过 –downloaddir 选项来指定。

yum install --downloadonly --downloaddir=<directory> <package-name>

例子:

yum install --downloadonly --downloaddir=/root/mypackages/ httpd

终端输出:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * epel: epel.mirror.angkasa.id
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================
 Package Arch Version Repository Size
=======================================================================================================================================
Installing:
 httpd x86_64 2.4.6-40.el7.centos.4 updates 2.7 M
Installing for dependencies:
 apr x86_64 1.4.8-3.el7 base 103 k
 apr-util x86_64 1.5.2-6.el7 base 92 k
 httpd-tools x86_64 2.4.6-40.el7.centos.4 updates 83 k
 mailcap noarch 2.1.41-2.el7 base 31 k

Transaction Summary
=======================================================================================================================================
Install 1 Package (+4 Dependent packages)

Total download size: 3.0 M
Installed size: 10 M
Background downloading packages, then exiting:
(1/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:01 
(2/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01 
(3/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:01 
(4/5): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:01 
(5/5): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:09 
---------------------------------------------------------------------------------------------------------------------------------------
Total 331 kB/s | 3.0 MB 00:00:09 
exiting because "Download Only" specified

现在去你指定的目录位置下,你将会看到那里有下载好的软件包和依赖的软件。在我这种情况下,我已经把软件包下载到 /root/mypackages/ 目录下。

让我们来查看一下内容。

ls /root/mypackages/

样本输出:

apr-1.4.8-3.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
httpd-2.4.6-40.el7.centos.4.x86_64.rpm
httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm

正如你在上面输出所看到的, httpd软件包已经被依据所有依赖性下载完成了 。

请注意,这个插件适用于 yum install/yum update, 但是并不适用于 yum groupinstall。默认情况下,这个插件将会下载仓库中最新可用的软件包。然而你可以通过指定版本号来下载某个特定的软件版本。

例子:

yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7

此外,你也可以如下一次性下载多个包:

yum install --downloadonly --downloaddir=/root/mypackages/ httpd vsftpd

方法 2 使用 “Yumdownloader” 工具来下载 RPM 软件包及其所有依赖包

“Yumdownloader” 是一款简单,但是却十分有用的命令行工具,它可以一次性下载任何 RPM 软件包及其所有依赖包。

以 root 身份运行如下命令安装 “Yumdownloader” 工具。

yum install yum-utils

一旦安装完成,运行如下命令去下载一个软件包,例如 httpd。

yumdownloader httpd

为了根据所有依赖性下载软件包,我们使用 --resolve 参数:

yumdownloader --resolve httpd

默认情况下,Yumdownloader 将会下载软件包到当前工作目录下。

为了将软件下载到一个特定的目录下,我们使用 --destdir 参数:

yumdownloader --resolve --destdir=/root/mypackages/ httpd

或者,

yumdownloader --resolve --destdir /root/mypackages/ httpd

终端输出:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.excellmedia.net
 * epel: epel.mirror.angkasa.id
 * extras: centos.excellmedia.net
 * updates: centos.excellmedia.net
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-40.el7.centos.4 will be installed
--> Processing Dependency: httpd-tools = 2.4.6-40.el7.centos.4 for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libaprutil-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Processing Dependency: libapr-1.so.0()(64bit) for package: httpd-2.4.6-40.el7.centos.4.x86_64
--> Running transaction check
---> Package apr.x86_64 0:1.4.8-3.el7 will be installed
---> Package apr-util.x86_64 0:1.5.2-6.el7 will be installed
---> Package httpd-tools.x86_64 0:2.4.6-40.el7.centos.4 will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
(1/5): apr-util-1.5.2-6.el7.x86_64.rpm | 92 kB 00:00:01 
(2/5): mailcap-2.1.41-2.el7.noarch.rpm | 31 kB 00:00:02 
(3/5): apr-1.4.8-3.el7.x86_64.rpm | 103 kB 00:00:02 
(4/5): httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm | 83 kB 00:00:03 
(5/5): httpd-2.4.6-40.el7.centos.4.x86_64.rpm | 2.7 MB 00:00:19

让我们确认一下软件包是否被下载到我们指定的目录下。

ls /root/mypackages/

终端输出:

apr-1.4.8-3.el7.x86_64.rpm
apr-util-1.5.2-6.el7.x86_64.rpm
httpd-2.4.6-40.el7.centos.4.x86_64.rpm
httpd-tools-2.4.6-40.el7.centos.4.x86_64.rpm
mailcap-2.1.41-2.el7.noarch.rpm

不像 Downloadonly 插件,Yumdownload 可以下载一组相关的软件包。

yumdownloader "@Development Tools" --resolve --destdir /root/mypackages/

在我看来,我喜欢 Yumdownloader 更胜于 Yum 的 Downloadonly 插件。但是,两者都是十分简单易懂而且可以完成相同的工作。

这就是今天所有的内容,如果你觉得这份引导教程有用,清在你的社交媒体上面分享一下去让更多的人知道。

干杯!


via: https://www.ostechnix.com/download-rpm-package-dependencies-centos/

作者:SK 译者:LinuxBars 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包。

在 Linux 中,包管理器非常重要,知道如何使用多种包管理器可以让你像一个高手一样活得很舒适,从在仓库下载软件、安装软件,到更新软件、处理依赖和删除软件是非常重要的,这也是Linux 系统管理的一个重要部分。

最好的Linux包管理器

成为一个 Linux 高手的一个标志是了解主要的 Linux 发行版如何处理包,在这篇文章中,我们应该看一些你在 Linux 上能找到的最佳的包管理器,

在这里,我们的主要重点是关于一些最佳包管理器的相关信息,但不是如何使用它们,这些留给你亲自发现。但我会提供一些有意义的链接,使用指南或更多。

1. DPKG - Debian 包管理系统 Debian Package Management System

Dpkg 是 Debian Linux 家族的基础包管理系统,它用于安装、删除、存储和提供.deb包的信息。

这是一个低层面的工具,并且有多个前端工具可以帮助用户从远程的仓库获取包,或处理复杂的包关系的工具,包括如下:

APT ( 高级打包工具 Advanced Packaging Tool )

这个是一个 dpkg 包管理系统的前端工具,它是一个非常受欢迎的、自由而强大的,有用的命令行包管理器系统。

Debian 及其衍生版,例如 Ubuntu 和 Linux Mint 的用户应该非常熟悉这个包管理工具。

想要了解它是如何工作的,你可以去看看下面这些 HOW TO 指南:

Aptitude 包管理器

这个也是 Debian Linux 家族一个非常出名的命令行前端包管理工具,它工作方式类似 APT ,它们之间有很多可以比较的地方,不过,你应该两个都试试才知道哪个工作的更好。

它最初为 Debian 及其衍生版设计的,但是现在它的功能延伸到 RHEL 家族。你可以参考这个指南了解更多关于 APT 和 Aptitude。

Synaptic 包管理器

Synaptic是一个基于GTK+的APT的可视化包管理器,对于一些不想使用命令行的用户,它非常好用。

2. RPM - 红帽包管理器 Red Hat Package Manager

这个是红帽创建的 Linux 基本标准(LSB)打包格式和基础包管理系统。基于这个底层系统,有多个前端包管理工具可供你使用,但我们应该只看那些最好的,那就是:

YUM ( 黄狗更新器,修改版 Yellowdog Updater, Modified

这个是一个开源、流行的命令行包管理器,它是用户使用 RPM 的界面(之一)。你可以把它和 Debian Linux 系统中的 APT 进行对比,它和 APT 拥有相同的功能。你可以从这个 HOW TO 指南中的例子更加清晰的理解YUM:

DNF( 优美的 Yum Dandified Yum

这个也是一个用于基于 RPM 的发行版的包管理器,Fedora 18 引入了它,它是下一代 YUM。

如果你用 Fedora 22 及更新版本,你肯定知道它是默认的包管理器。这里有一些链接,将为你提供更多关于 DNF 的信息和如何使用它。

3. Pacman 包管理器 – Arch Linux

这个是一个流行的、强大而易用的包管理器,它用于 Arch Linux 和其他的一些小众发行版。它提供了一些其他包管理器提供的基本功能,包括安装、自动解决依赖关系、升级、卸载和降级软件。

但是最大的用处是,它为 Arch 用户创建了一个简单易用的包管理方式。你可以阅读 Pacman 概览,它会解释上面提到的一些功能。

4. Zypper 包管理器 – openSUSE

这个是一个使用 libzypp 库制作的用于 OpenSUSE 系统上的命令行包管理器,它的常用功能包括访问仓库、安装包、解决依赖问题和其他功能。

更重要的是,它也可以支持存储库扩展功能,如模式、补丁和产品。新的 OpenSUSE 用户可以参考下面的链接来掌控它。

5. Portage 包管理器 – Gentoo

这个是 Gentoo 的包管理器,当下不怎么流行的一个发行版,但是这并不阻止它成为 Linux 下最好的软件包管理器之一。

Portage 项目的主要目标是创建一个简单、无故障的包管理系统,包含向后兼容、自动化等功能。

如果希望理解的更清晰,可以看下: Portage 项目页

结束语

正如我在开始时提到的,这个指南的主要意图是给 Linux 用户提供一个最佳软件包管理器的列表,但知道如何使用它们可以通过其后提供的重要的链接,并实际去试试它们。

各个发行版的用户需要学习超出他们的发行版之外的一些东西,才能更好理解上述提到的这些不同的包管理器。


via: http://www.tecmint.com/linux-package-managers/

作者:Ravi Saive 译者:Bestony 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

Shilpa Nair 刚于2015年毕业。她之后去了一家位于 Noida,Delhi 的国家新闻电视台,应聘实习生的岗位。在她去年毕业季的时候,常逛 Tecmint 寻求作业上的帮助。从那时开始,她就常去 Tecmint。

Linux Interview Questions on RPM

有关 RPM 方面的 Linux 面试题

所有的问题和回答都是 Shilpa Nair 根据回忆重写的。

“大家好!我是来自 Delhi 的Shilpa Nair。我不久前才顺利毕业,正寻找一个实习的机会。在大学早期的时候,我就对 UNIX 十分喜爱,所以我也希望这个机会能适合我,满足我的兴趣。我被提问了很多问题,大部分都是关于 RedHat 包管理的基础问题。”

下面就是我被问到的问题,和对应的回答。我仅贴出了与 RedHat GNU/Linux 包管理相关的,也是主要被提问的。

1,Linux 里如何查找一个包安装与否?假设你需要确认 ‘nano’ 有没有安装,你怎么做?

回答:为了确认 nano 软件包有没有安装,我们可以使用 rpm 命令,配合 -q 和 -a 选项来查询所有已安装的包

# rpm -qa nano
或
# rpm -qa | grep -i nano

nano-2.3.1-10.el7.x86_64

同时包的名字必须是完整的,不完整的包名会返回到提示符,不打印任何东西,就是说这包(包名字不全)未安装。下面的例子会更好理解些:

我们通常使用 vim 替代 vi 命令。当时如果我们查找安装包 vi/vim 的时候,我们就会看到标准输出上没有任何结果。

# vi
# vim

尽管如此,我们仍然可以像上面一样运行 vi/vim 命令来清楚地知道包有没有安装。只是因为我们不知道它的完整包名才不能找到的。如果我们不确切知道完整的文件名,我们可以使用通配符:

# rpm -qa vim*

vim-minimal-7.4.160-1.el7.x86_64

通过这种方式,我们可以获得任何软件包的信息,安装与否。

2. 你如何使用 rpm 命令安装 XYZ 软件包?

回答:我们可以使用 rpm 命令安装任何的软件包(*.rpm),像下面这样,选项 -i(安装),-v(冗余或者显示额外的信息)和 -h(在安装过程中,打印#号显示进度)。

# rpm -ivh peazip-1.11-1.el6.rf.x86_64.rpm

Preparing...                          ################################# [100%]
Updating / installing...
   1:peazip-1.11-1.el6.rf             ################################# [100%]

如果要升级一个早期版本的包,应加上 -U 选项,选项 -v 和 -h 可以确保我们得到用 # 号表示的冗余输出,这增加了可读性。

3. 你已经安装了一个软件包(假设是 httpd),现在你想看看软件包创建并安装的所有文件和目录,你会怎么做?

回答:使用选项 -l(列出所有文件)和 -q(查询)列出 httpd 软件包安装的所有文件(Linux 哲学:所有的都是文件,包括目录)。

# rpm -ql httpd

/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
...

4. 假如你要移除一个软件包,叫 postfix。你会怎么做?

回答:首先我们需要知道什么包安装了 postfix。查找安装 postfix 的包名后,使用 -e(擦除/卸载软件包)和 -v(冗余输出)两个选项来实现。

# rpm -qa postfix*

postfix-2.10.1-6.el7.x86_64

然后移除 postfix,如下:

# rpm -ev postfix-2.10.1-6.el7.x86_64

Preparing packages...
postfix-2:3.0.1-2.fc22.x86_64

5. 获得一个已安装包的具体信息,如版本,发行号,安装日期,大小,总结和一个简短的描述。

回答:我们通过使用 rpm 的选项 -qi,后面接包名,可以获得关于一个已安装包的具体信息。

举个例子,为了获得 openssh 包的具体信息,我需要做的就是:

# rpm -qi openssh

[root@tecmint tecmint]# rpm -qi openssh
Name        : openssh
Version     : 6.8p1
Release     : 5.fc22
Architecture: x86_64
Install Date: Thursday 28 May 2015 12:34:50 PM IST
Group       : Applications/Internet
Size        : 1542057
License     : BSD
....

6. 假如你不确定一个指定包的配置文件在哪,比如 httpd。你如何找到所有 httpd 提供的配置文件列表和位置。

回答: 我们需要用选项 -c 接包名,这会列出所有配置文件的名字和他们的位置。

# rpm -qc httpd

/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf/httpd.conf
/etc/sysconfig/httpd

相似地,我们可以列出所有相关的文档文件,如下:

# rpm -qd httpd

/usr/share/doc/httpd/ABOUT_APACHE
/usr/share/doc/httpd/CHANGES
/usr/share/doc/httpd/LICENSE
...

我们也可以列出所有相关的证书文件,如下:

# rpm -qL openssh

/usr/share/licenses/openssh/LICENCE

忘了说明上面的选项 -d 和 -L 分别表示 “文档” 和 “证书”,抱歉。

7. 你找到了一个配置文件,位于‘/usr/share/alsa/cards/AACI.conf’,现在你不确定该文件属于哪个包。你如何查找出包的名字?

回答:当一个包被安装后,相关的信息就存储在了数据库里。所以使用选项 -qf(-f 查询包拥有的文件)很容易追踪谁提供了上述的包。

# rpm -qf /usr/share/alsa/cards/AACI.conf
alsa-lib-1.0.28-2.el7.x86_64

类似地,我们可以查找(谁提供的)关于任何子包,文档和证书文件的信息。

8. 你如何使用 rpm 查找最近安装的软件列表?

回答:如刚刚说的,每一样被安装的文件都记录在了数据库里。所以这并不难,通过查询 rpm 的数据库,找到最近安装软件的列表。

我们通过运行下面的命令,使用选项 -last(打印出最近安装的软件)达到目的。

# rpm -qa --last

上面的命令会打印出所有安装的软件,最近安装的软件在列表的顶部。

如果我们关心的是找出特定的包,我们可以使用 grep 命令从列表中匹配包(假设是 sqlite ),简单如下:

# rpm -qa --last | grep -i sqlite

sqlite-3.8.10.2-1.fc22.x86_64                 Thursday 18 June 2015 05:05:43 PM IST

我们也可以获得10个最近安装的软件列表,简单如下:

# rpm -qa --last | head

我们可以重定义一下,输出想要的结果,简单如下:

# rpm -qa --last | head -n 2

上面的命令中,-n 代表数目,后面接一个常数值。该命令是打印2个最近安装的软件的列表。

9. 安装一个包之前,你如果要检查其依赖。你会怎么做?

回答:检查一个 rpm 包(XYZ.rpm)的依赖,我们可以使用选项 -q(查询包),-p(指定包名)和 -R(查询/列出该包依赖的包,嗯,就是依赖)。

# rpm -qpR gedit-3.16.1-1.fc22.i686.rpm 

/bin/sh
/usr/bin/env
glib2(x86-32) >= 2.40.0
gsettings-desktop-schemas
gtk3(x86-32) >= 3.16
gtksourceview3(x86-32) >= 3.16
gvfs
libX11.so.6
...

10. rpm 是不是一个前端的包管理工具呢?

回答不是!rpm 是一个后端管理工具,适用于基于 Linux 发行版的 RPM (此处指 Redhat Package Management)。

YUM,全称 Yellowdog Updater Modified,是一个 RPM 的前端工具。YUM 命令自动完成所有工作,包括解决依赖和其他一切事务。

最近,DNF(YUM命令升级版)在Fedora 22发行版中取代了 YUM。尽管 YUM 仍然可以在 RHEL 和 CentOS 平台使用,我们也可以安装 dnf,与 YUM 命令共存使用。据说 DNF 较于 YUM 有很多提高。

知道更多总是好的,保持自我更新。现在我们移步到前端部分来谈谈。

11. 你如何列出一个系统上面所有可用的仓库列表。

回答:简单地使用下面的命令,我们就可以列出一个系统上所有可用的仓库列表。

# yum repolist
或
# dnf repolist

Last metadata expiration check performed 0:30:03 ago on Mon Jun 22 16:50:00 2015.
repo id       repo name                      status
*fedora       Fedora 22 - x86_64             44,762
ozonos        Repository for Ozon OS         61
*updates      Fedora 22 - x86_64 - Updates   

上面的命令仅会列出可用的仓库。如果你需要列出所有的仓库,不管可用与否,可以这样做。

# yum repolist all
或
# dnf repolist all

Last metadata expiration check performed 0:29:45 ago on Mon Jun 22 16:50:00 2015.
repo id           repo name                       status
*fedora           Fedora 22 - x86_64              enabled: 44,762
fedora-debuginfo  Fedora 22 - x86_64 - Debug      disabled
fedora-source     Fedora 22 - Source              disabled
ozonos            Repository for Ozon OS          enabled:     61
*updates          Fedora 22 - x86_64 - Updates    enabled:  5,018
updates-debuginfo Fedora 22 - x86_64 - Updates - Debug

12. 你如何列出一个系统上所有可用并且安装了的包?

回答:列出一个系统上所有可用的包,我们可以这样做:

# yum list available
或
# dnf list available

ast metadata expiration check performed 0:34:09 ago on Mon Jun 22 16:50:00 2015.
Available Packages
0ad.x86_64                 0.0.18-1.fc22                   fedora 
0ad-data.noarch            0.0.18-1.fc22                   fedora 
0install.x86_64            2.6.1-2.fc21                    fedora 
0xFFFF.x86_64              0.3.9-11.fc22                   fedora 
2048-cli.x86_64            0.9-4.git20141214.723738c.fc22  fedora 
2048-cli-nocurses.x86_64   0.9-4.git20141214.723738c.fc22  fedora 
....

而列出一个系统上所有已安装的包,我们可以这样做。

# yum list installed
或
# dnf list installed

Last metadata expiration check performed 0:34:30 ago on Mon Jun 22 16:50:00 2015.
Installed Packages
GeoIP.x86_64                    1.6.5-1.fc22       @System
GeoIP-GeoLite-data.noarch       2015.05-1.fc22     @System
NetworkManager.x86_64           1:1.0.2-1.fc22     @System
NetworkManager-libnm.x86_64     1:1.0.2-1.fc22     @System
aajohan-comfortaa-fonts.noarch  2.004-4.fc22       @System
....

而要同时满足两个要求的时候,我们可以这样做。

# yum list
或
# dnf list

Last metadata expiration check performed 0:32:56 ago on Mon Jun 22 16:50:00 2015.
Installed Packages
GeoIP.x86_64                    1.6.5-1.fc22       @System
GeoIP-GeoLite-data.noarch       2015.05-1.fc22     @System
NetworkManager.x86_64           1:1.0.2-1.fc22     @System
NetworkManager-libnm.x86_64     1:1.0.2-1.fc22     @System
aajohan-comfortaa-fonts.noarch  2.004-4.fc22       @System
acl.x86_64                      2.2.52-7.fc22      @System
....

13. 你会怎么在一个系统上面使用 YUM 或 DNF 分别安装和升级一个包与一组包?

回答:安装一个包(假设是 nano),我们可以这样做,

  # yum install nano

而安装一组包(假设是 Haskell),我们可以这样做,

  # yum groupinstall 'haskell'

升级一个包(还是 nano),我们可以这样做,

  # yum update nano

而为了升级一组包(还是 haskell),我们可以这样做,

# yum groupupdate 'haskell'

14. 你会如何同步一个系统上面的所有安装软件到稳定发行版?

回答:我们可以一个系统上(假设是 CentOS 或者 Fedora)的所有包到稳定发行版,如下,

 # yum distro-sync      [在 CentOS/ RHEL]
 或
 # dnf distro-sync      [在 Fedora 20之后版本]

似乎来面试之前你做了相当不多的功课,很好!在进一步交谈前,我还想问一两个问题。

15. 你对 YUM 本地仓库熟悉吗?你尝试过建立一个本地 YUM 仓库吗?让我们简单看看你会怎么建立一个本地 YUM 仓库。

回答:首先,感谢你的夸奖。回到问题,我必须承认我对本地 YUM 仓库十分熟悉,并且在我的本地主机上也部署过,作为测试用。

1、 为了建立本地 YUM 仓库,我们需要安装下面三个包:

# yum install deltarpm  python-deltarpm  createrepo

2、 新建一个目录(假设 /home/$USER/rpm),然后复制 RedHat/CentOS DVD 上的 RPM 包到这个文件夹下

# mkdir /home/$USER/rpm
# cp /path/to/rpm/on/DVD/*.rpm /home/$USER/rpm

3、 新建基本的库头文件如下。

# createrepo -v /home/$USER/rpm

4、 在路径 /etc/yum.repo.d 下创建一个 .repo 文件(如 abc.repo):

cd /etc/yum.repos.d && cat << EOF abc.repo
[local-installation]name=yum-local
baseurl=file:///home/$USER/rpm
enabled=1
gpgcheck=0
EOF

重要:用你的用户名替换掉 $USER。

以上就是创建一个本地 YUM 仓库所要做的全部工作。我们现在可以从这里安装软件了,相对快一些,安全一些,并且最重要的是不需要 Internet 连接。

好了!面试过程很愉快。我已经问完了。我会将你推荐给 HR。你是一个年轻且十分聪明的候选者,我们很愿意你加入进来。如果你有任何问题,你可以问我。

:谢谢,这确实是一次愉快的面试,我感到今天非常幸运,可以搞定这次面试...

显然,不会在这里结束。我问了很多问题,比如他们正在做的项目。我会担任什么角色,负责什么,,,balabalabala

小伙伴们,这之后的 3 天会经过 HR 轮,到时候所有问题到时候也会被写成文档。希望我当时表现不错。感谢你们所有的祝福。

谢谢伙伴们和 Tecmint,花时间来编辑我的面试经历。我相信 Tecmint 好伙伴们做了很大的努力,必要要赞一个。当我们与他人分享我们的经历的时候,其他人从我们这里知道了更多,而我们自己则发现了自己的不足。

这增加了我们的信心。如果你最近也有任何类似的面试经历,别自己蔵着。分享出来!让我们所有人都知道。你可以使用如下的表单来与我们分享你的经历。


via: http://www.tecmint.com/linux-rpm-package-management-interview-questions/

作者:Avishek Kumar 译者:wi-cuckoo 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

正如我确信,你们一定知道Linux下的多种软件安装方式:使用发行版所提供的包管理系统(aptitude,yum,或者zypper,还可以举很多例子),从源码编译(尽管现在很少用了,但在Linux发展早期却是唯一可用的方法),或者使用各自的低级工具dpkg用于.deb,以及rpm用于.rpm,预编译包,如此这般。

Convert RPM to DEB and DEB to RPM

使用Alien将RPM转换成DEB以及将DEB转换成RPM

在本文中,我们将为你介绍alien,一个用于在各种不同的Linux包格式相互转换的工具,其最常见的用法是将.rpm转换成.deb(或者反过来)。

如果你需要某个特定类型的包,而你只能找到其它格式的包的时候,该工具迟早能派得上用场——即使是其作者不再维护,并且在其网站声明:alien将可能永远维持在实验状态。

例如,有一次,我正查找一个用于喷墨打印机的.deb驱动,但是却没有找到——生产厂家只提供.rpm包,这时候alien拯救了我。我安装了alien,将包进行转换,不久之后我就可以使用我的打印机了,没有任何问题。

即便如此,我们也必须澄清一下,这个工具不应当用来转换重要的系统文件和库,因为它们在不同的发行版中有不同的配置。只有在前面说的那种情况下所建议的安装方法根本不适合时,alien才能作为最后手段使用。

最后一项要点是,我们必须注意,虽然我们在本文中使用CentOS和Debian,除了前两个发行版及其各自的家族体系外,据我们所知,alien可以工作在Slackware中,甚至Solaris中。

步骤1:安装Alien及其依赖包

要安装alien到CentOS/RHEL 7中,你需要启用EPEL和Nux Dextop(是的,是Dextop——不是Desktop)仓库,顺序如下:

# yum install epel-release

启用Nux Dextop仓库的包的当前最新版本是0.5(2015年8月10日发布),在安装之前你可以查看http://li.nux.ro/download/nux/dextop/el7/x86_64/上是否有更新的版本。

# rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
# rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm

然后再做,

# yum update && yum install alien

在Fedora中,你只需要运行上面的命令即可。

在Debian及其衍生版中,只需要:

# aptitude install alien

步骤2:将.deb转换成.rpm包

对于本次测试,我们选择了date工具,它提供了一系列日期和时间工具用于处理大量金融数据。我们将下载.deb包到我们的CentOS 7机器中,将它转换成.rpm并安装:

Check CentOS Version

检查CentOS版本

# cat /etc/centos-release
# wget http://ftp.us.debian.org/debian/pool/main/d/dateutils/dateutils_0.3.1-1.1_amd64.deb
# alien --to-rpm --scripts dateutils_0.3.1-1.1_amd64.deb

Convert .deb to .rpm package in Linux

在Linux中将.deb转换成.rpm

重要:(请注意alien是怎样来增加目标包的次版本号的。如果你想要无视该行为,请添加-keep-version标识)。

如果我们尝试马上安装该包,我们将碰到些许问题:

# rpm -Uvh dateutils-0.3.1-2.1.x86_64.rpm 

Install RPM Package

安装RPM包

要解决该问题,我们需要启用epel-testing仓库,然后安装rpmbuild工具来编辑该包的配置以重建包:

# yum --enablerepo=epel-testing install rpmrebuild

然后运行,

# rpmrebuild -pe dateutils-0.3.1-2.1.x86_64.rpm

它会打开你的默认文本编辑器。请转到%files章节并删除涉及到错误信息中提到的目录的行,然后保存文件并退出:

Convert .deb to Alien Version

转换.deb到Alien版

但你退出该文件后,将提示你继续去重构。如果你选择“Y”,该文件会重构到指定的目录(与当前工作目录不同):

# rpmrebuild –pe dateutils-0.3.1-2.1.x86_64.rpm

Build RPM Package

构建RPM包

现在你可以像以往一样继续来安装包并验证:

# rpm -Uvh /root/rpmbuild/RPMS/x86_64/dateutils-0.3.1-2.1.x86_64.rpm
# rpm -qa | grep dateutils

Install Build RPM Package

安装构建RPM包

最后,你可以列出date工具包含的各个工具,也可以查看各自的手册页:

# ls -l /usr/bin | grep dateutils

Verify Installed RPM Package

验证安装的RPM包

步骤3:将.rpm转换成.deb包

在本节中,我们将演示如何将.rpm转换成.deb。在一台32位的Debian Wheezy机器中,让我们从CentOS 6操作系统仓库中下载用于zsh shell的.rpm包。注意,该shell在Debian及其衍生版的默认安装中是不可用的。

# cat /etc/shells
# lsb_release -a | tail -n 4

Check Shell and Debian OS Version

检查Shell和Debian操作系统版本

# wget http://mirror.centos.org/centos/6/os/i386/Packages/zsh-4.3.11-4.el6.centos.i686.rpm
# alien --to-deb --scripts zsh-4.3.11-4.el6.centos.i686.rpm

你可以安全地无视关于签名丢失的信息:

Convert .rpm to .deb Package

将.rpm转换成.deb包

过了一会儿后,.deb包应该已经生成,并可以安装了:

# dpkg -i zsh_4.3.11-5_i386.deb

Install RPM Converted Deb Package

安装RPM转换来的Deb包

安装完后,你看看可以zsh是否添加到了合法shell列表中:

# cat /etc/shells

Confirm Installed Zsh Package

确认安装的Zsh包

小结

在本文中,我们已经解释了如何将.rpm转换成.deb及其反向转换,这可以作为这类程序不能从仓库中或者作为可分发源代码获得的最后安装手段。你一定想要将本文添加到书签中,因为我们都需要alien。

请自由分享你关于本文的想法,写到下面的表单中吧。


via: http://www.tecmint.com/convert-from-rpm-to-deb-and-deb-to-rpm-package-using-alien/

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我想从Red Hat 的标准仓库中下载一个RPM包,我能使用yum命令来下载一个RPM包但是不进行安装吗?

yum是基于Red Hat的系统(如CentOS、Fedora、RHEl)上的默认包管理器。使用yum,你可以安装或者更新一个RPM包,并且他会自动解决包依赖关系。但是如果你只想将一个RPM包下载到你的系统上该怎么办呢? 例如,你可能想要获取一些RPM包在以后使用,或者将他们安装在另外的机器上。

这里说明了如何从yum仓库上下载一个RPM包。

方法一:yum

yum命令本身就可以用来下载一个RPM包,标准的yum命令提供了--downloadonly(只下载)的选项来达到这个目的。

$ sudo yum install --downloadonly <package-name>

默认情况下,一个下载的RPM包会保存在下面的目录中:

/var/cache/yum/x86_64/[centos/fedora-version]/[repository]/packages

以上的[repository]表示下载包的来源仓库的名称(例如:base、fedora、updates)

如果你想要将一个包下载到一个指定的目录(如/tmp):

$ sudo yum install --downloadonly --downloaddir=/tmp <package-name>

注意,如果下载的包包含了任何没有满足的依赖关系,yum将会把所有的依赖关系包下载,但是都不会被安装。

另外一个重要的事情是,在CentOS/RHEL 6或更早期的版本中,你需要安装一个单独yum插件(名称为 yum-plugin-downloadonly)才能使用--downloadonly命令选项:

$ sudo yum install yum-plugin-downloadonly

如果没有该插件,你会在使用yum时得到以下错误:

Command line error: no such option: --downloadonly

方法二: Yumdownloader

另外一个下载RPM包的方法就是通过一个专门的包下载工具--yumdownloader。 这个工具是yum工具包(包含了用来进行yum包管理的帮助工具套件)的子集。

$ sudo yum install yum-utils

下载一个RPM包:

$ sudo yumdownloader <package-name>

下载的包会被保存在当前目录中。你需要使用root权限,因为yumdownloader会在下载过程中更新包索引文件。与yum命令不同的是,任何依赖包不会被下载。


via: http://ask.xmodulo.com/yum-download-rpm-package.html

译者:theo-l 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我想要从源码创建安装的软件包。有没有一种方式从源码来创建和安装软件包,而不是运行“make install”?这样的话,以后如果我想,我可以容易的卸载程序。

如果你已经从它的源码运行“make install”安装了linux程序。想完整移除它将变得真的很麻烦,除非程序的开发者在Makefile里提供了uninstall的目标设置。否则你必须在安装前后比较你系统里文件的完整列表,然后手工移除所有在安装过程中加入的文件。

这时候Checkinstall就可以派上使用。Checkinstall会跟踪install命令行所创建或修改的所有文件的路径(例如:“make install”、“make install\_modules”等)并建立一个标准的二进制包,让你能用你发行版的标准包管理系统安装或卸载它,(例如Red Hat的yum或者Debian的apt-get命令)。已知它在 Slackware、SuSe、Mandrake 和 Gentoo 上也工作很好,请参考其官方文档

在这篇文章中,我们只集中在红帽子和Debian为基础的发行版,并展示怎样从源码使用Checkinstall创建一个RPM和DEB软件包

在linux上安装Checkinstall

在Debian及其衍生发行版上安装Checkinstall:

# aptitude install checkinstall 

在红帽子的发行版上安装Checkinstall,你需要下载一个已经打包好的Checkinstall rpm包(例如:从 http://rpm.pbone.net找到),不过它已经从Repoforge库里删除了。这个包是针对Cent OS6的,不过也可在Cent OS7里工作。

# wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm
# yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm 

一旦checkinstall安装好,你就可以用下列格式创建一个特定的软件包

# checkinstall <install-command> 

如果没有参数,默认安装命令“make install”将被使用

用Checkinstall创建一个RPM或DEB包

在这个例子里,我们将创建一个htop包,这是一个linux交互式文本模式进程查看器(类似 top)。

首先,让我们从项目的官方网站下载源代码,作为一个好的习惯,我们存储源码包到/usr/local/src下,并解压它。

# cd /usr/local/src
# wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz
# tar xzf htop-1.0.3.tar.gz
# cd htop-1.0.3 

让我们看看htop的安装命令是什么,以便我们能用Checkinstall命令调用它,如下面所示,htop用“make install”命令安装。

# ./configure
# make install 

因此,要创建一个htop安装包,我们可以不带任何参数的调用checkinstall,这将使用“make install”命令创建一个包。在这个过程中, checkinstall命令会问你几个问题。

简而言之,如下命令会创建一个htop包:

# ./configure
# checkinstall 

“Should I create a default set of package docs?(我会创建一个默认设置的包文件?)”,回答“Y”:

你可以输入一个包的简短描述,然后按两次回车:

输入一个数字以修改下面的任何值或ENTER继续:

然后checkinstall将自动地创建一个.rpm或者.deb包,根据你的linux系统是什么:

在CentOS7:

在Debian 7:


via: http://ask.xmodulo.com/build-rpm-deb-package-source-checkinstall.html

译者:luoyutiantang 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出