Предпочтительный подход состоит в том, чтобы разделить установку самого пакета и инициализацию данных/настроек пакета. Пусть RPM обрабатывает установку файлов пакетов. RPM сам будет обрабатывать конфликты файлов и подобные вещи. Просто укажите требования (требуется :) правильно.
Тогда вы можете потребовать первоначальную настройку администратора до того, как приложение будет использоваться. Это довольно распространенный подход с базами данных и аналогичными приложениями.
Однако из вашего комментария в другом ответе я угадываю, что ваше приложение делает одну уродливую вещь, и это: изменяет файлы, установленные RPM. Это неприемлемо. Вы всегда должны разделять:
- код и общие данные (иконки и т.д.)
- во время выполнения файлов (временные файлы, кэш, создаваемые пользователями данных)
кода и общие данные только для чтения для приложения. Его можно коснуться только установщиком (будь то rpm или другим менеджером пакетов). Файлы времени выполнения (обычно находящиеся в/var/lib или где-то в $ HOME) могут быть изменены по желанию, и приложение должно обрабатывать обновления между версиями, насколько это возможно, конечно. Пакеты должны быть спроектированы таким образом, чтобы:
- оборотов ручки кодовая и совместно используемые данные установки/удаления
- приложение обрабатывает во время выполнения файлов обновления и очистки
Другими словами: оборотов в минуту не должны касаться времени выполнения файлов и приложение не должно пытаться прикасаться к файлам, контролируемым rpm.
Например, базы данных требуют от администраторов удалять базы данных перед обновлением, а затем восстанавливать их после установки новой базы данных (новая база данных может иметь другой внутренний формат хранения данных). Это последний подход, когда автоматическое преобразование не может быть выполнено.
Я не могу ничего сделать: Во-первых, я не знаю, нужно ли мне отменить установку до тех пор, пока что-то не произойдет, поэтому я не могу не начать установку (я понимаю, что вы говорите, чтобы проверить если что-то пойдет не так, прежде чем начать установку) Во-вторых, я не могу уведомить пользователя, потому что нет пользователя, я имею в виду, что все сделано по коду, поэтому мое приложение проверяет, есть ли предыдущая установка, если так обновляет его, и если не устанавливает его, и если есть проблема, отменяет установку/обновление – Esabe
@Esabe: параметр RPM - test может, по крайней мере, сказать вам, если установка/обновление пакета RPM вызовет конфликты. Таким образом, вы * можете * использовать это для установки «сухой прогон» (и искать ошибки) перед попыткой «реальной» установки. – Peter
@ Esabe: также, у вас * do * есть пользователь: администратор. Вы можете не запускаться после неудачного обновления, когда требуется ручное вмешательство, и предоставить достаточную информацию в syslog, чтобы администратор увидел, что происходит и что нужно сделать. – Stan