SQL 파일을 실행하도록 postinst 설정

SQL 파일을 실행하도록 postinst 설정

내가 달성하려는 것은 데비안 패키지를 설치하기 전에 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

[1]https://www.debian.org/doc/debian-policy/ch-maintainerscripts.html#summary-of-ways-maintainer-scripts-are- 호출됨

관련 정보