
私が達成したいのは、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
パッケージに入っていると、ファイルシステムに解凍されていません。この場合、ロジックをpostinst
。postinst
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