SQLファイルを実行するためのpostinstの設定

SQLファイルを実行するためのpostinstの設定

私が達成したいのは、Debianパッケージをインストールする前にpostinstファイルを実行することです。データベースとテーブルを作成するためにSQLのインポートを開始しようとしていますが、DEBIANフォルダのpreinstには次のものがあります。

#!/bin/bash

  DB_USER="#"
  DB_PASSWORD="#"
  DB_NAME="#"
  MAINDB="#"

  mysql -e "CREATE DATABASE ${MAINDB} /*\!40100 DEFAULT CHARACTER SET utf8 */;"
  mysql -h localhost -u $DB_USER -p$DB_PASSWORD $DB_NAME < sqlfile.sql

しかし、インポートするsqlfile.sqlが見つかりません。 sqlファイルをどこに入れたのかわからないので、このファイルをどこに入れるべきですか? ?それともこれを達成するより良い方法はありますか?

ご協力ありがとうございます

ベストアンサー1

ここにはいくつかの質問があります。

mysql ... < sqlfile.sql

絶対パスを使用する必要がありますsqlfile.sql。現在、これは相対パスです。作業ディレクトリはpostinstどこにありますか?私はそれが実行されると思います/が、私はそれに頼ったことはありません。

第二に、それはどこから来るのですsqlfile.sqlか? preinstパッケージを開梱する前に[1]番に電話してください。sqlfile.sqlパッケージに入っていると、ファイルシステムに解凍されていません。この場合、ロジックをpostinstpostinst

sqlfile.sql依存パッケージにある場合は、Pre-Depends:そのパッケージで使用する必要があります。これがsqlfile.sql呼び出される前にデプロイされたことを確認する唯一の方法ですpreinst(Pre-Depends:パッケージは「パッケージ解除」または「半構成」状態にのみ存在できます)。

sqlfile.sql一時ファイルの場合は、次の/usr/lib/mypkg/sqlfile.sql場所にインストールしてくださいpostinst

mysql ... < /usr/lib/mypkg/sqlfile.sql

最後に、インストールプロセス中に管理者スクリプトを複数回呼び出すことができます。これはあなたの問題ではありませんが、特定の呼び出し中に特定のコードのみをトリガーする方が良いでしょう。以下は、使用できるいくつかのテンプレートコードです。実行したいコードを適切なCaseステートメントに入れます。

#!/bin/sh
# preinst template
set -e

case "$1" in
    install|upgrade)
    ;;

    abort-upgrade)
    ;;

    *)
        echo "preinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac
#DEBHELPER#
exit 0
#!/bin/sh
# postinst
set -e

case "$1" in
    configure)
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac
#DEBHELPER#
exit 0

[1]https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#summary-of-ways-maintainer-scripts-are- 呼び出されました

おすすめ記事