new brp method: verify_elf
This commit is contained in:
parent
64d81fa68f
commit
99ecba05df
@ -1,5 +1,5 @@
|
|||||||
ALT Linux RPM:
|
ALT Linux RPM:
|
||||||
особенности версии rpm-4.0.4-alt1
|
особенности версии rpm-4.0.4-alt4
|
||||||
|
|
||||||
Dmitry V. Levin <ldv@altlinux.org>
|
Dmitry V. Levin <ldv@altlinux.org>
|
||||||
ALT Linux Team
|
ALT Linux Team
|
||||||
@ -226,6 +226,9 @@ BuildRoot.
|
|||||||
%_compress_method:
|
%_compress_method:
|
||||||
метод, используемый при сжатии документации в секции %install;
|
метод, используемый при сжатии документации в секции %install;
|
||||||
|
|
||||||
|
%_verify_elf_method:
|
||||||
|
метод, используемый при проверке ELF-файлов в секции %install;
|
||||||
|
|
||||||
%_strip_method:
|
%_strip_method:
|
||||||
метод, используемый при обработке ELF-файлов в секции %install;
|
метод, используемый при обработке ELF-файлов в секции %install;
|
||||||
|
|
||||||
@ -243,6 +246,9 @@ BuildRoot.
|
|||||||
%set_strip_method:
|
%set_strip_method:
|
||||||
изменить значение макроса %_strip_method;
|
изменить значение макроса %_strip_method;
|
||||||
|
|
||||||
|
%set_verify_elf_method:
|
||||||
|
изменить значение макроса %_verify_elf_method.
|
||||||
|
|
||||||
Вызов вспомогательных программ.
|
Вызов вспомогательных программ.
|
||||||
|
|
||||||
%find_lang:
|
%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-файлов с поддержкой
|
Автоматическое удаление отладочной информации из ELF-файлов с поддержкой
|
||||||
различных стратегий выбора файлов, подлежащих обработке.
|
различных стратегий выбора файлов, подлежащих обработке.
|
||||||
|
|
||||||
@ -578,6 +602,3 @@ Bibliography
|
|||||||
формате PostScript по адресу
|
формате PostScript по адресу
|
||||||
http://www.rpm.org/maximum-rpm.ps.gz)
|
http://www.rpm.org/maximum-rpm.ps.gz)
|
||||||
_________________________________________________________________
|
_________________________________________________________________
|
||||||
|
|
||||||
|
|
||||||
2002-09-01
|
|
||||||
|
@ -600,6 +600,7 @@
|
|||||||
%{?_cleanup_method:export RPM_CLEANUP_METHOD=\"%_cleanup_method\"}\
|
%{?_cleanup_method:export RPM_CLEANUP_METHOD=\"%_cleanup_method\"}\
|
||||||
%{?_compress_method:export RPM_COMPRESS_METHOD=\"%_compress_method\"}\
|
%{?_compress_method:export RPM_COMPRESS_METHOD=\"%_compress_method\"}\
|
||||||
%{?_strip_method:export RPM_STRIP_METHOD=\"%_strip_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\"}\
|
%{?_findreq_method:export RPM_FINDREQ_METHOD=\"%_findreq_method\"}\
|
||||||
%{?_findprov_method:export RPM_FINDPROV_METHOD=\"%_findprov_method\"}\
|
%{?_findprov_method:export RPM_FINDPROV_METHOD=\"%_findprov_method\"}\
|
||||||
%{?_findreq_default_method:export RPM_FINDREQ_DEFAULT_METHOD=\"%_findreq_default_method\"}\
|
%{?_findreq_default_method:export RPM_FINDREQ_DEFAULT_METHOD=\"%_findreq_default_method\"}\
|
||||||
|
@ -355,12 +355,14 @@
|
|||||||
@alt@
|
@alt@
|
||||||
@alt@%_cleanup_method auto
|
@alt@%_cleanup_method auto
|
||||||
@alt@%_compress_method auto
|
@alt@%_compress_method auto
|
||||||
|
@alt@%_verify_elf_method normal
|
||||||
@alt@%_strip_method %{?_enable_debug:none}%{!?_enable_debug:executable shared}
|
@alt@%_strip_method %{?_enable_debug:none}%{!?_enable_debug:executable shared}
|
||||||
@alt@%_findreq_default_method files lib pam perl shell
|
@alt@%_findreq_default_method files lib pam perl shell
|
||||||
@alt@%_findprov_default_method pam lib perl
|
@alt@%_findprov_default_method pam lib perl
|
||||||
@alt@
|
@alt@
|
||||||
@alt@%set_compress_method() %global _compress_method %*
|
@alt@%set_compress_method() %global _compress_method %*
|
||||||
@alt@%set_strip_method() %global _strip_method %*
|
@alt@%set_strip_method() %global _strip_method %*
|
||||||
|
@alt@%set_verify_elf_method() %global _verify_elf_method %*
|
||||||
@alt@
|
@alt@
|
||||||
@alt@%strip_executable RPM_STRIP_METHOD=executable @RPMCONFIGDIR@/brp-strip
|
@alt@%strip_executable RPM_STRIP_METHOD=executable @RPMCONFIGDIR@/brp-strip
|
||||||
@alt@%strip_relocatable RPM_STRIP_METHOD=relocatable @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.
|
# Compress info and man pages.
|
||||||
@RPMCONFIGDIR@/brp-compress
|
@RPMCONFIGDIR@/brp-compress
|
||||||
|
|
||||||
|
# Verify ELF objects.
|
||||||
|
@RPMCONFIGDIR@/brp-verify_elf
|
||||||
|
|
||||||
# Strip ELF binaries.
|
# Strip ELF binaries.
|
||||||
@RPMCONFIGDIR@/brp-strip
|
@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