QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7367|回复: 19

一个不安装rpm包就可以提取rpm包里文件的方法。

[复制链接]
发表于 2002-10-30 09:26:15 | 显示全部楼层 |阅读模式
比如你要将test.rpm用test.rpm里的某个文件,但你又不想安装test.rpm,那你可以试试这个办法。
随便建一个目录
mkdir aaa
把test.rpm放入目录aaa里并进入aaa目录
cp path/to/test.rpm aaa/
cd aaa
用rpm2cpio将rpm文件转换成cpio文件
rpm2cpio test.rpm >test.cpio
用cpio解压cpio文件
cpio -i  --make-directories <test.cpio

(注意:用rpm2cpio和cpio命令时不要忘了输入那个">"和"<")
发表于 2002-10-30 13:50:29 | 显示全部楼层
有时我需要看rpm包里的执行脚本,能有办法提取出来吗?
回复

使用道具 举报

 楼主| 发表于 2002-10-30 14:00:50 | 显示全部楼层
执行脚本??.spec文件里的内容?
回复

使用道具 举报

发表于 2002-10-30 19:17:15 | 显示全部楼层
rpm包里可以加入脚本,simsun的rpm包就有自动在XF86config-4里自动加入字体路径的功能,这就是靠脚本来实现的,我想知道rpm包里的脚本(不是spec的)
回复

使用道具 举报

发表于 2002-10-30 19:27:38 | 显示全部楼层

简单地用 mc 就可以了!

rh 7.2 的 mc 不支持 打开 rpm 包 。

rh 7.3 和 8.0 、md 的自带的 mc 都可以的了!
回复

使用道具 举报

发表于 2002-10-30 19:29:39 | 显示全部楼层

不过要注意哟:

rpm 包要没有可执行属性,若有,去掉可执行属性就可以啦。
回复

使用道具 举报

发表于 2002-10-30 19:53:51 | 显示全部楼层
呵呵,gugong兄弟,高!
mc果然可以看脚本!
回复

使用道具 举报

 楼主| 发表于 2002-10-31 10:00:52 | 显示全部楼层
用mc我没看到脚本呀??其实rpm包安装时执行的脚本肯定是在.spec文件里做的。用vim打开rpm就能看到脚本。比如nautilus-2.0.6-6.i386.rpm,用vim打开它就能看到下面脚本。

/sbin/ldconfig
scrollkeeper-update

export GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source`
SCHEMAS="apps_nautilus_preferences.schemas"
for S in $SCHEMAS; do
  gconftool-2 --makefile-install-rule /etc/gconf/schemas/$S > /dev/null
done

/sbin/ldconfig
scrollkeeper-update

对了,用mc怎样看到脚本???
回复

使用道具 举报

发表于 2002-10-31 11:16:53 | 显示全部楼层

用 mc 打开后。

在这个目录 /INFO/SCRIPTS 下。
回复

使用道具 举报

 楼主| 发表于 2002-10-31 12:01:37 | 显示全部楼层

Re: 用 mc 打开后。

[quote:6a28ba3774="gugong"]在这个目录 /INFO/SCRIPTS 下。[/quote]
原来是这里呀,我看里面的文件大小都是0,以为没有内容。呵呵,这mc不错。
回复

使用道具 举报

发表于 2002-10-31 13:19:26 | 显示全部楼层

rpm -qi mc

[root@gugonghcs root]# rpm -qi mc
Name        : mc                           Relocations: (not relocateable)
Version     : 4.5.55                            Vendor: Red Hat, Inc.
Release     : 5                             Build Date: 2002年04月13日 星期六 05时27分48秒
Install date: 2002年10月24日 星期四 09时34分24秒      Build Host: stripples.devel.redhat.com
Group       : 系统环境 / shells             Source RPM: mc-4.5.55-5.src.rpm
Size        : 3805405                          License: GPL
Signature   : DSA/SHA1, 2002年04月17日 星期三 12时41分16秒, Key ID 219180cddb42a60e
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
URL         : http://www.gnome.org/mc/
Summary     : 一个用户友好的文件管理器和视觉 shell。
Description :
Midnight Commander 是一个视觉化 shell,很像一个文件
管理器,但是具有更多功能。它是一个文本模式程序,
但是如果您在运行 GPM,它还包括鼠标支持。
Midnight Commander 的最佳功能是它的 FTP,查看 tar 和
zip 文件,以及到 RPM 中查看指定文件的能力。

不过 rh 8.0  的 mc 有一点问题。不可以 F3 查看 文件的中文内容。改回 rh 7.3 的 mc 就可以了。不过 rh 73 的 mc 的 /usr/share/locale/zh_CN.GB2312/LC_MESSAGES/mc.mo 稍稍有点问题,这个文件mc.mo 还是用 rh 8.0 的。
回复

使用道具 举报

发表于 2002-12-27 09:05:29 | 显示全部楼层
http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/binaries/RedHat-8.x/i386/

mc-4.6.0pre2-1.i386.rpm  支持滚轮鼠标了 !


About: GNU Midnight Commander is a text-mode full-screen file manager. It uses a two panel interface and a subshell for command execution. It includes an internal editor with syntax highlighting and an internal viewer with support for binary files. Also included is Virtual Filesystem (VFS), that allows files on remote systems (e.g. FTP servers) and files inside archives to be manipulated like real files.

Changes: This version features FHS compliance, support for glib 2.0, support for mouse wheel, more useful keyboard shortcuts, safer extfs scripts, and lots of bugfixes.
回复

使用道具 举报

发表于 2002-12-27 19:38:48 | 显示全部楼层
Gentoo 里有一个不错的 rpm2targz 的 shell 脚本,我自己用着感觉不错,大家也试一试吧

把代码粘贴到一个文本编辑器里,然后保存为 /usr/bin/rpm2targz 并且 chmod +x rpm2targz,以后要转换哪个 rpm,用 rpm2targz name.rpm,然后便会在当前目录里生成一个 name.tar.gz。
[code:1]#!/bin/sh
# Copyright 1997, 1998 Patrick Volkerding, Moorhead, Minnesota USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#

if [ "$TMPDIR" = "" ]; then
  TMPDIR=/tmp
fi
if [ "$1" = "" ]; then
  echo "$0:  Converts RPM format to standard GNU tar + GNU zip format."
  echo "            (view converted packages with \"less\", install and remove"
  echo "            with \"installpkg\", \"removepkg\", \"pkgtool\", or manually"
  echo "            with \"tar\")"
  echo
  echo "Usage:      $0 <file.rpm>"
  if [ "`basename $0`" = "rpm2tgz" ]; then
    echo "            (Outputs \"file.tgz\")"
  else
    echo "            (Outputs \"file.tar.gz\")"
  fi
  exit 1;
fi
for i in $* ; do
  if [ ! "$1" = "$*" ]; then
    echo "Processing file: $i"
  fi
  rm -rf $TMPDIR/rpm2targz$$ # clear the way, just in case of mischief
  mkdir $TMPDIR/rpm2targz$$
  ofn=`basename $i .rpm`.cpio
  dd ibs=`rpmoffset < $i` skip=1 if=$i 2> /dev/null | gzip -dc > $TMPDIR/rpm2targz$$/$ofn
  ( cd $TMPDIR/rpm2targz$$
    cpio --extract --preserve-modification-time --make-directories < $ofn 1> /dev/null 2> /dev/null
    rm -f $ofn
    find . -type d -perm 700 -exec chmod 755 {} \;
    tar cf - . ) > `basename $i .rpm`.tar
    gzip -9 `basename $i .rpm`.tar
    if [ "`basename $0`" = "rpm2tgz" ]; then
      mv `basename $i .rpm`.tar.gz `basename $i .rpm`.tgz
    fi
  ( cd $TMPDIR ; rm -rf rpm2targz$$ )
done[/code:1]
回复

使用道具 举报

发表于 2003-1-1 22:42:04 | 显示全部楼层

Re: 一个不安装rpm包就可以提取rpm包里文件的方法。

[quote:c704dc1208="mozilla"]比如你要将test.rpm用test.rpm里的某个文件,但你又不想安装test.rpm,那你可以试试这个办法。
随便建一个目录
mkdir aaa
把test.rpm放入目录aaa里并进入aaa目录
cp path/to/test.rpm aaa/
cd aaa
用rpm2cpio将rpm文件转换成cpio文件
rpm2cpio test.rpm >test.cpio
用cpio解压cpio文件
cpio -i  --make-directories <test.cpio

(注意:用rpm2cpio和cpio命令时不要忘了输入那个">"和"<")[/quote]

其实一步可以实现:[code:1]rpm2cpio rpmfile.rpm | cpio -div[/code:1]
回复

使用道具 举报

发表于 2003-1-9 22:26:43 | 显示全部楼层
建意:
      大家去看看如何做rpm包的文章吧,那样就知道rpm包说白了,就是
对源码包安装过程的自动化!(当然不止是这样,好东西多着呢)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-2 06:28 , Processed in 0.040021 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表