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