2010-01-19 3 views
2

Мы разрабатываем приложение на python, и мы используем RPM для его установки. Но иногда во время установки может произойти ошибка, и я могу ее обнаружить. Вопрос в том, есть ли способ отменить установку, если что-то не так? Я попытался выполнить команду «rpm -e package_name», но это невозможно, потому что система не позволяет запускать два RPM параллельно, поэтому RPM ждет завершения моего кода, и мой код ждет, пока первый RPM не запустит его собственный "rpm -e"Как отменить установку rpm

Большое спасибо!

ответ

0

Не пытайтесь прекратить установку пакета об/мин. Либо не приступить к установке, либо уведомить пользователя об ошибке при попытке запустить программное обеспечение.

+0

Я не могу ничего сделать: Во-первых, я не знаю, нужно ли мне отменить установку до тех пор, пока что-то не произойдет, поэтому я не могу не начать установку (я понимаю, что вы говорите, чтобы проверить если что-то пойдет не так, прежде чем начать установку) Во-вторых, я не могу уведомить пользователя, потому что нет пользователя, я имею в виду, что все сделано по коду, поэтому мое приложение проверяет, есть ли предыдущая установка, если так обновляет его, и если не устанавливает его, и если есть проблема, отменяет установку/обновление – Esabe

+0

@Esabe: параметр RPM - test может, по крайней мере, сказать вам, если установка/обновление пакета RPM вызовет конфликты. Таким образом, вы * можете * использовать это для установки «сухой прогон» (и искать ошибки) перед попыткой «реальной» установки. – Peter

+0

@ Esabe: также, у вас * do * есть пользователь: администратор. Вы можете не запускаться после неудачного обновления, когда требуется ручное вмешательство, и предоставить достаточную информацию в syslog, чтобы администратор увидел, что происходит и что нужно сделать. – Stan

1

Предпочтительный подход состоит в том, чтобы разделить установку самого пакета и инициализацию данных/настроек пакета. Пусть RPM обрабатывает установку файлов пакетов. RPM сам будет обрабатывать конфликты файлов и подобные вещи. Просто укажите требования (требуется :) правильно.

Тогда вы можете потребовать первоначальную настройку администратора до того, как приложение будет использоваться. Это довольно распространенный подход с базами данных и аналогичными приложениями.

Однако из вашего комментария в другом ответе я угадываю, что ваше приложение делает одну уродливую вещь, и это: изменяет файлы, установленные RPM. Это неприемлемо. Вы всегда должны разделять:

  • код и общие данные (иконки и т.д.)
  • во время выполнения файлов (временные файлы, кэш, создаваемые пользователями данных)

кода и общие данные только для чтения для приложения. Его можно коснуться только установщиком (будь то rpm или другим менеджером пакетов). Файлы времени выполнения (обычно находящиеся в/var/lib или где-то в $ HOME) могут быть изменены по желанию, и приложение должно обрабатывать обновления между версиями, насколько это возможно, конечно. Пакеты должны быть спроектированы таким образом, чтобы:

  • оборотов ручки кодовая и совместно используемые данные установки/удаления
  • приложение обрабатывает во время выполнения файлов обновления и очистки

Другими словами: оборотов в минуту не должны касаться времени выполнения файлов и приложение не должно пытаться прикасаться к файлам, контролируемым rpm.

Например, базы данных требуют от администраторов удалять базы данных перед обновлением, а затем восстанавливать их после установки новой базы данных (новая база данных может иметь другой внутренний формат хранения данных). Это последний подход, когда автоматическое преобразование не может быть выполнено.

+0

. Как комментарий Эсабе по поводу ответа Игнасио подразумевает, что его/ее код модифицирует файлы, установленные RPM? Похоже, что его/ее код использует команды «высокого уровня» RPM для проверки наличия пакета и установки/обновления по мере необходимости. – Peter

+0

+1 для комментариев о Требуется. Но я считаю, что различие между файлами времени выполнения и файлами, контролируемыми RPM, не всегда может быть четким, так как приложение «состояние» может (к сожалению) иногда вмешиваться или взаимодействовать с процессом обновления. – Peter

+0

Действительно, состояние может быть не четким, но оно всегда сводится к следующему: приложение модифицирует файл? Тогда не упакуйте его, но пусть он сгенерирует файл/обновление предыдущего при первом использовании. Установка - это отдельный шаг. Что касается модификации, это было просто предположение, как я знаю, что некоторые непакеты обычно используют неправильное использование RPM. Возможно, я ошибаюсь и действительно перечитываю все, что кажется вероятным. Как правило, для @Esabe: посмотрите, как базы данных обрабатывают обновления в дистрибутивах Linux и изучают их. Вероятно, это относится к вашему прецеденту – Stan