new brp method: verify_elf
This commit is contained in:
parent
64d81fa68f
commit
99ecba05df
@ -1,5 +1,5 @@
|
||||
ALT Linux RPM:
|
||||
особенности версии rpm-4.0.4-alt1
|
||||
особенности версии rpm-4.0.4-alt4
|
||||
|
||||
Dmitry V. Levin <ldv@altlinux.org>
|
||||
ALT Linux Team
|
||||
@ -226,6 +226,9 @@ BuildRoot.
|
||||
%_compress_method:
|
||||
метод, используемый при сжатии документации в секции %install;
|
||||
|
||||
%_verify_elf_method:
|
||||
метод, используемый при проверке ELF-файлов в секции %install;
|
||||
|
||||
%_strip_method:
|
||||
метод, используемый при обработке ELF-файлов в секции %install;
|
||||
|
||||
@ -243,6 +246,9 @@ BuildRoot.
|
||||
%set_strip_method:
|
||||
изменить значение макроса %_strip_method;
|
||||
|
||||
%set_verify_elf_method:
|
||||
изменить значение макроса %_verify_elf_method.
|
||||
|
||||
Вызов вспомогательных программ.
|
||||
|
||||
%find_lang:
|
||||
@ -464,6 +470,24 @@ BuildRoot.
|
||||
выравнивание ссылок, которые, возможно, требуют коррекции в связи с
|
||||
изменениями имен файлов в процессе их сжатия.
|
||||
|
||||
Автоматическая проверка ELF-файлов с поддержкой различных стратегий.
|
||||
|
||||
Иногда в результате сборки пакета получаются ELF-файлы, содержащие
|
||||
неверную и/или недопустимую информацию в некоторых секциях, таких как
|
||||
RPATH. Поэтому по окончании работы секции %install проверяются все
|
||||
собранные ELF-файлы. Выбор типов файлов определяется значением макроса
|
||||
%_verify_elf_method, которое есть набор из следующих возможных
|
||||
значений:
|
||||
* none, skip: поиска и проверки не производится;
|
||||
* relaxed: проверка только на наличие недопустимых елементов в
|
||||
RPATH;
|
||||
* normal: relaxed + проверка на наличие более чем одного элемента в
|
||||
RPATH;
|
||||
* strict: проверка на наличие непустого RPATH.
|
||||
|
||||
Значение по умолчанию для макроса %_verify_elf_method в данный момент
|
||||
равно normal.
|
||||
|
||||
Автоматическое удаление отладочной информации из ELF-файлов с поддержкой
|
||||
различных стратегий выбора файлов, подлежащих обработке.
|
||||
|
||||
@ -578,6 +602,3 @@ Bibliography
|
||||
формате PostScript по адресу
|
||||
http://www.rpm.org/maximum-rpm.ps.gz)
|
||||
_________________________________________________________________
|
||||
|
||||
|
||||
2002-09-01
|
||||
|
@ -600,6 +600,7 @@
|
||||
%{?_cleanup_method:export RPM_CLEANUP_METHOD=\"%_cleanup_method\"}\
|
||||
%{?_compress_method:export RPM_COMPRESS_METHOD=\"%_compress_method\"}\
|
||||
%{?_strip_method:export RPM_STRIP_METHOD=\"%_strip_method\"}\
|
||||
%{?_verify_elf_method:export RPM_VERIFY_ELF_METHOD=\"%_verify_elf_method\"}\
|
||||
%{?_findreq_method:export RPM_FINDREQ_METHOD=\"%_findreq_method\"}\
|
||||
%{?_findprov_method:export RPM_FINDPROV_METHOD=\"%_findprov_method\"}\
|
||||
%{?_findreq_default_method:export RPM_FINDREQ_DEFAULT_METHOD=\"%_findreq_default_method\"}\
|
||||
|
@ -355,12 +355,14 @@
|
||||
@alt@
|
||||
@alt@%_cleanup_method auto
|
||||
@alt@%_compress_method auto
|
||||
@alt@%_verify_elf_method normal
|
||||
@alt@%_strip_method %{?_enable_debug:none}%{!?_enable_debug:executable shared}
|
||||
@alt@%_findreq_default_method files lib pam perl shell
|
||||
@alt@%_findprov_default_method pam lib perl
|
||||
@alt@
|
||||
@alt@%set_compress_method() %global _compress_method %*
|
||||
@alt@%set_strip_method() %global _strip_method %*
|
||||
@alt@%set_verify_elf_method() %global _verify_elf_method %*
|
||||
@alt@
|
||||
@alt@%strip_executable RPM_STRIP_METHOD=executable @RPMCONFIGDIR@/brp-strip
|
||||
@alt@%strip_relocatable RPM_STRIP_METHOD=relocatable @RPMCONFIGDIR@/brp-strip
|
||||
|
@ -40,6 +40,9 @@ cd "$RPM_BUILD_ROOT"
|
||||
# Compress info and man pages.
|
||||
@RPMCONFIGDIR@/brp-compress
|
||||
|
||||
# Verify ELF objects.
|
||||
@RPMCONFIGDIR@/brp-verify_elf
|
||||
|
||||
# Strip ELF binaries.
|
||||
@RPMCONFIGDIR@/brp-strip
|
||||
|
||||
|
43
scripts/brp-verify_elf.in
Executable file
43
scripts/brp-verify_elf.in
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# brp-verify_elf - verify ELF objects.
|
||||
#
|
||||
# Copyright (C) 2002 Dmitry V. Levin <ldv@altlinux.org>
|
||||
#
|
||||
# This program 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.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
PROG="${0##*/}"
|
||||
|
||||
# If using normal root, avoid changing anything.
|
||||
if [ -z "$(echo "$RPM_BUILD_ROOT" |tr -d ' /.')" ]; then
|
||||
echo "$PROG: non-/ \$RPM_BUILD_ROOT expected" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$RPM_BUILD_ROOT"
|
||||
|
||||
RPM_VERIFY_ELF_METHOD="${RPM_VERIFY_ELF_METHOD## }"
|
||||
RPM_VERIFY_ELF_METHOD="${RPM_VERIFY_ELF_METHOD%% }"
|
||||
|
||||
echo "Verifying ELF objects in $RPM_BUILD_ROOT ($RPM_VERIFY_ELF_METHOD)"
|
||||
|
||||
case "$RPM_VERIFY_ELF_METHOD" in
|
||||
none|skip)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
find -type f -print0 |xargs -r0 @RPMCONFIGDIR@/verify-elf
|
68
scripts/verify-elf
Executable file
68
scripts/verify-elf
Executable file
@ -0,0 +1,68 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# verify-elf - verify ELF objects.
|
||||
#
|
||||
# Copyright (C) 2002 Dmitry V. Levin <ldv@altlinux.org>
|
||||
#
|
||||
# This program 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.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
PROG="${0##*/}"
|
||||
|
||||
rc=0
|
||||
for f in "$@"; do
|
||||
if [ ! -f "$f" ]; then
|
||||
echo "$PROG: $f: file unavailable" >&2
|
||||
rc=1
|
||||
continue
|
||||
fi
|
||||
|
||||
t="$(/usr/bin/file -b "$f")"
|
||||
|
||||
[ -z "${t//*ELF*}" ] || continue
|
||||
|
||||
info=$(objdump -p "$f") || continue
|
||||
rpath=`echo "$info" |awk '{if ($1=="RPATH") print $2}'`
|
||||
|
||||
if [ -n "$rpath" ]; then
|
||||
for p in $RPM_BUILD_ROOT $RPM_BUILD_DIR $RPM_SOURCE_DIR; do
|
||||
if echo "$rpath" |fgrep -qs "$p"; then
|
||||
echo "$f: RPATH contains \"$p\": $rpath" >&2
|
||||
rc=1
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
if [ "$RPM_VERIFY_ELF_METHOD" = relaxed ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if echo "$rpath" |fgrep -qs :; then
|
||||
echo "$f: RPATH contains \":\": $rpath" >&2
|
||||
rc=1
|
||||
continue
|
||||
fi
|
||||
if [ "$RPM_VERIFY_ELF_METHOD" = normal ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -n "$rpath" ]; then
|
||||
echo "$f: RPATH defined: $rpath" >&2
|
||||
rc=1
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
exit $rc
|
Loading…
Reference in New Issue
Block a user