[devel] rpmpeek

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Сен 13 22:13:24 MSD 2005


Изобрел новую команду для работы со внутренностями rpm'а.
Она распаковывает rpm во временный каталог, затем переходит
в этот каталог и выполняет команду.  Многие операции с rpm'ами
у меня теперь заметно упрощаются.  Вот пример не очень эффективного
использования этой команды:

$ ./rpmpeek ~/RPM/RPMS/libnetpbm-10.20-alt1.i686.rpm find -type f -print0 |
	./rpmpeek ~/RPM/RPMS/libnetpbm-10.20-alt1.i686.rpm xargs -r0 file --
./usr/lib/libnetpbm.so.10.20:                   ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped
./usr/share/doc/netpbm-10.20/README:            ASCII English text
./usr/share/doc/netpbm-10.20/COPYRIGHT.PATENT:  ASCII English text
./usr/share/doc/netpbm-10.20/HISTORY:           ISO-8859 English text
./usr/share/doc/netpbm-10.20/copyright_summary: ASCII English text
./.fakedata:                                    ASCII text
$

Использование не очень эффективно, потому что rpm распаковывается
дважды -- один раз для выполнения find, другой раз для выполнения
xargs file.  Однако же понятие эффективности очень ситуативно.
----------- следующая часть -----------
#!/bin/sh -ef
export LC_ALL=C

while getopts h opt; do
	case "$opt" in
		h) pod2usage --exit=0 "$0"; exit 0 ;;
		*) pod2usage --exit=2 "$0"; exit 2 ;;
	esac
done
shift "$((OPTIND-1))"

if [ $# -lt 2 ]; then
	echo "${0##*/}: not enough arguments" >&2
	pod2usage --exit=2 "$0"; exit 2
fi

atexit()
{
	local rc=$?
	trap - EXIT
	chmod -Rf u+rwX "$tmpdir"
	rm -rf "$tmpdir"
	exit $rc
}
tmpdir="$(mktemp -d -t "${0##*/}.XXXXXXXX")"
trap atexit EXIT HUP INT QUIT PIPE TERM

rpm2cpio "$1" |(cd "$tmpdir"; fakeroot -s .fakedata -- \
	cpio -idmu --quiet --no-absolute-filenames) || exit 2
shift
cd "$tmpdir"
fakeroot -i .fakedata -- "$@" || exit 1

: <<'__EOF__'

=head1	NAME

rpmpeek - execute command within RPM contents

=head1	SYNOPSIS

B<rpmpeek> [B<-h>] I<command> [I<args>...]

=head1	AUTHOR

Written by Alexey Tourbin <at на altlinux.org>.

=head1	COPYING

Copyright (c) 2005 Alexey Tourbin, ALT Linux Team.

This is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.

=head1	SEE ALSO

rpm(8),
rpm2cpio(8),
fakeroot(1)

=cut

__EOF__
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20050913/315055ca/attachment-0001.bin>


Подробная информация о списке рассылки Devel