Есть ли механизм для обновления/создания базы данных в пакете Ubuntu .deb?

Например, на платформе Android есть что-то вроде:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
    db.execSQL("DROP TABLE ....");
    db.execSQL("ATER TABLE ....");
    onCreate(db);
}

Что очень хорошо для обработки обновлений и т. д.

Существует ли аналогичная стратегия для пакетов .deb? Я знаю, что могу использовать debian/control, debian/preinst для получения текущей версии, debian/postinst для обновления базы данных, но это не такое изящное решение.


person johnildergleidisson    schedule 27.07.2012    source источник


Ответы (1)


Нет, нет. Однако это не должно быть намного менее чистым. Ваш postinst просто должен иметь что-то вроде

case "$1" in
    configure)
        oldver=$2
        if dpkg --compare-versions "$oldver" -lt 1.2.3; then
            sqlite3 mydb.db 'DROP TABLE W...'
            sqlite3 mydb.db 'ALTER TABLE X...'
        fi
        if dpkg --compare-versions "$oldver" -lt 1.3.4; then
            sqlite3 mydb.db 'DROP TABLE Y...'
            sqlite3 mydb.db 'ALTER TABLE Z...'
        fi
    ;;
...
esac
person the paul    schedule 27.07.2012
comment
И я бы предположил, что $oldver — это переменная среды, которую вы создаете, например, в preinst? - person johnildergleidisson; 30.07.2012
comment
Нет, $oldver предоставляется dpkg как $2. Назначается на третьей строке. При первой установке он будет пуст. - person the paul; 30.07.2012
comment
Я не заметил oldver=$2. Большое спасибо, вы прибили мой вопрос. Я думал, что почти все нужно делать вручную, например, получать текущую версию перед установкой (preinst), и так далее, и тому подобное. - person johnildergleidisson; 31.07.2012
comment
Извините, но мой собственный вопрос захвачен другим вопросом, но есть ли способ получить текущую версию аналогичным образом? И где я могу найти удобную для пользователя полную документацию, так как справочная страница очень подробная, и я не смог найти ссылку на параметры, которые вы опубликовали? - person johnildergleidisson; 31.07.2012
comment
Неа. Нет хорошего способа получить текущую версию из postinst configure прогона. Есть хакерские способы, которые обычно работают, но не используйте их. Ожидается, что ваш код уже знает, какая у него версия. Лучшее решение зависит от того, почему именно вы этого хотите - я бы рекомендовал начать новый вопрос и объяснить ситуацию. - person the paul; 31.07.2012
comment
Да, и что касается документации: я ссылаюсь на people.debian.org/~srivasta/MaintainerScripts .html и debian.org/doc/debian-policy /ch-maintainerscripts.html очень часто. - person the paul; 31.07.2012