Вы не можете. Теория типа Идриса (например, Coq's и Agda's) не поддерживает общую экстенсивность. Учитывая две функции f
и g
, которые «действуют одинаково», вы никогда не сможете доказать Not (f = g)
, но вы сможете доказать f = g
, если f
и g
определены то же самое, с точностью до альфа и эта эквивалентности. К сожалению, ситуация только ухудшается, когда вы рассматриваете функции более высокого порядка; есть теорема о таких в стандартной библиотеке Coq, но я не могу найти или запомнить ее прямо сейчас.
Вам нужно будет найти файл, уникальный для этой установки, а затем добавить его в свой тег Requires
, например. /etc/redhat-release-aws
или что-то в этом роде. Если этот файл не существует, он не будет установлен, но что-то вроде yum
также не сможет вам помочь, он, например, не сказал бы: «Для этого RPM требуется AWS». Это просто скажет пользователю, что файл отсутствует.
Если это не определенный файл, вы могли бы написать сценарий и поместить его в раздел %pre
. Не имея AWS, я верю, что есть команда, которую вы можете запустить под названием is_aws
; вы можете заменить это чем-то вроде «grep -iq aws /etc/os-release
»; все, что вернет true / false.
if is_aws; then
true # do nothing
else
echo "This RPM requires AWS!" 1>&2
false
fi
Я на 90% уверен, что скрипт %pre
запущен в режиме «set -e
», где false
приведет к сбою установки. STDOUT
игнорируется в режиме без вербовки, поэтому вам нужно написать STDERR
.
RPM Red Hat не разрешает зависимости от свойств окружающей среды. Другие варианты RPM. Возможно, можно добиться чего-то подобного с плагином YUM.
В общем, такие зависимости не являются хорошей идеей, поскольку это предотвращает создание системных образов в промежуточных системах, которые не имеют точных свойств цели (например, промежуточная система может не быть системой AWS).