Как прервать установку пакета rpm, если в specfile не выполняются некоторые условия?

Есть еще несколько вещей, которым не удовлетворяет тег Requires. Итак, я написал скрипт для проверки этих вещей, но где их разместить? И если не найдено, я хочу выйти из установки, предложив пользователю выполнить шаги, прежде чем пытаться снова установить этот rpm.

запись exit 1 в теге %install не позволяет собрать rpm с помощью rpmbuild. говорит %install has a bad exit code.

EDIT: позвольте привести пример. Сначала я хотел проверить, присутствует ли Oracle Java 6. Если нет, укажите путь к Java6. Если пользователь не может предоставить один... выйдите из RPM. Более высокий уровень Java не допускается, и установка не должна быть успешной без java. Невозможно поместить его в Requires для точки, если пользователь не хочет устанавливать пакет java rpm.

Надеюсь, я понял свою точку зрения.


person Basit Anwer    schedule 23.01.2013    source источник
comment
вам нужно дать гораздо больше деталей, чтобы кто-то ответил на этот вопрос.   -  person guido    schedule 23.01.2013
comment
ммм, что здесь неоднозначного, не могли бы вы прокомментировать, чтобы я мог редактировать   -  person Basit Anwer    schedule 23.01.2013
comment
условие, которое вы хотите проверить; некоторые могут выполняться в %pre и %post, большинство не могут и указывают, что проблема в другом месте   -  person guido    schedule 23.01.2013
comment
@Гидо Готово. Пожалуйста, обновите, если все еще неясно.   -  person Basit Anwer    schedule 23.01.2013


Ответы (1)


Вы можете использовать раздел %pre для такого рода задач.

Сценарий %pre выполняется непосредственно перед установкой пакета. Это редкий пакет, который требует каких-либо действий перед установкой; ни один из 350 пакетов, входящих в состав Red Hat Linux Linux 4.0, не использует его.

Некоторое руководство, чтобы вы начали; содержимое скрипта (не используется в разделе %pre) взято из jpackage-utils, там вы найдете несколько других хороших примеров скриптов:

  %pre
  # try to find jvm from java command

  # try javac first, or we might get the location of the jre instead - djw
  java=`which javac 2>/dev/null || :`

  # if we don't have the jdk, then maybe we have the jre - djw
  if [ -z "$java" ] ; then
    java=`which java 2>/dev/null || :`
  fi

  if [ -n "$java" ] ; then
    while [ -h "$java" ] ; do
      java=`readlink $java 2>/dev/null`
    done
    return
  fi

  echo "Can't find java virtual machine, aborting."
  exit 1
person guido    schedule 23.01.2013