Postgresql에서 데이터베이스 사용자와 비밀번호를 생성하고 일부 데이터베이스를 가져오는 자동화된 스크립트를 만들고 싶습니다. 아래 스크립트를 실행하면 어딘가에서 중지되고 로그아웃(CTRL+D 또는 종료 명령)하면 데이터베이스 가져오기를 시도하고 다음과 같이 말합니다.
psql: FATAL: role "username" does not exist
결국 /tmp로 이동하지 않습니다. 저는 Ubuntu 14.10을 사용하고 있으며 이것이 제 스크립트입니다.
#!/bin/bash -x
#################
# Database
#################
printf 'CREATE USER koko WITH NOCREATEDB NOCREATEROLE NOSUPERUSER ENCRYPTED PASSWORD 'kokopass';\nCREATE DATABASE kokodb WITH OWNER koko;' > cartaro.sql
su postgres
psql -f cartaro.sql
echo "Running postgis.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis.sql
echo "Running postgis_comments.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis_comments.sql
echo "Running spatial_ref_sys.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/spatial_ref_sys.sql
psql -d "kokodb" -c 'grant all on geometry_columns to "koko";'
psql -d "kokodb" -c 'grant all on spatial_ref_sys to "koko";'
echo "Finished Database section"
exit
답변1
문제는 종료 명령입니다. 스크립트 마지막 부분에 넣었습니다. 그것은 아주 잘 작동합니다. 이것은 내 스크립트입니다.
#!/bin/bash
#################
# Change this values
#################
psqluser="koko28" # Database username
psqlpass="pass123" # Database password
psqldb="kokodb28" # Database name
#################################################
# #
# PLEASE DO NOT CHANGE THE FOLLOWING CODES #
# #
#################################################
#################
# Dependicies
#################
sudo apt-get update
sudo apt-get update
sudo apt-get install unzip apache2 php5 php5-gd php5-curl php5-pgsql postgresql-9.4 postgis postgresql-9.4-postgis-2.1 postgresql-contrib-9.4 tomcat8 git g++ php5-dev libgdal1-dev drush -y
#################
# Database
#################
sudo printf "CREATE USER $psqluser WITH PASSWORD '$psqlpass';\nCREATE DATABASE $psqldb WITH OWNER $psqluser;" > cartaro.sql
sudo -u postgres psql -f cartaro.sql
echo "Running postgis.sql"
sudo -u postgres psql -d $psqldb -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis.sql
echo "Running postgis_comments.sql"
sudo -u postgres psql -d $psqldb -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis_comments.sql
echo "Running spatial_ref_sys.sql"
sudo -u postgres psql -d "$psqldb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/spatial_ref_sys.sql
sudo -u postgres psql -d "$psqldb" -c "grant all on geometry_columns to '$psqluser';"
sudo -u postgres psql -d "$psqldb" -c "grant all on spatial_ref_sys to '$psqluser';"
echo "Finished Database section"
#################
# Tomcat configuration
#################
cd /tmp
echo "Backing up tomcat web.xml origin file"
sudo mv /var/lib/tomcat8/conf/web.xml /var/lib/tomcat8/conf/web.bak
echo "Getting custom one"
wget http://qgis.fr/script/tomcat.xml
echo "Replacing"
sudo mv tomcat.xml /var/lib/tomcat8/conf/web.xml
echo "Tomcat configration finished"
#################
# Geoserver
#################
echo "Getting goserverip file"
wget http://qgis.fr/script/geoserver.zip
echo "Putting in the riht places"
sudo unzip -o geoserver.zip geoserver.war -d /var/lib/tomcat8/webapps/
echo "Backing up geoserver web.xml origin file"
sudo mv /var/lib/tomcat8/webapps/geoserver/WEB-INF/web.xml /var/lib/tomcat8/webapps/geoserver/WEB-INF/web.bak
echo "Getting custom one"
wget http://qgis.fr/script/geoserver.xml
echo "Replacing"
sudo mv geoserver.xml /var/lib/tomcat8/conf/web.xml
echo "Restart tomcat service to take effect the changes"
service tomcat8 restart
echo "Geoserver configration finished"
#################
# Gdal
#################
git clone https://github.com/geonef/php5-gdal.git && cd php5-gdal
phpize
./configure
make
sudo make install
printf '; configuration for GDAL module\n extension=gdal.so\n' > /etc/php5/mods-available/gdal.ini
php5enmod gdal
sudo service apache2 restart
#################
# Preparing Cartaro
#################
echo "Getting goserverip file"
wget http://qgis.fr/script/cartaro.zip
echo "Putting in the riht places"
sudo unzip -o cartaro.zip
sudo cp -r cartaro/* /var/www/html/
sudo cp /var/www/html/sites/default/default.settings.php /var/www/html/sites/default/settings.php
sudo mkdir /var/www/html/sites/default/files/
sudo chmod -R 777 /var/www/html/sites/default/*
sudo rm /var/www/html/index.html
#################
# Cartaro
#################
cd /var/www/html/
echo "Installing Cartaro"
sudo drush site-install cartaro --db-url="pgsql://$psqluser:$psqlpass@localhost/$psqldb" --site-name=Koko site --account-name=admin [email protected] --account-pass=geoserver --yes
#################
# Cleaning up
#################
echo "Cleaning"
sudo rm -r /tmp/cartaro* /tmp/geo*
echo "Cleaned"
echo "End of the script"
exit
답변2
제가 쓴 답글이 너무 길어서 댓글을 남길 수 없습니다.
디버깅 정보를 추가해도 스크립트가 수정되지는 않지만 스크립트의 어느 부분에 결함이 있는지 찾는 데 도움이 됩니다. 데이터베이스 부분에서는 각 SQL 스크립트 앞에 echo를 추가해야 합니다.
#################
# Database
#################
sudo su postgres
wget http://qgis.fr/script/cartaro.sql
psql -f cartaro.sql
echo "Running postgis.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis.sql
echo "Running postgis_comments.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/postgis_comments.sql
echo "Running spatial_ref_sys.sql"
psql -d "kokodb" -f /usr/share/postgresql/9.4/contrib/postgis-2.1/spatial_ref_sys.sql
psql -d "kokodb" -c 'grant all on geometry_columns to "koko";'
psql -d "kokodb" -c 'grant all on spatial_ref_sys to "koko";'
echo "Finished Database section"
exit
이렇게 해도 스크립트가 수정되지 않습니다. 그러나 어떤 SQL 스크립트가 정지되어 있는지 알 수 있습니다. 그런 다음 나 또는 다른 SE가 (다음에) SQL 스크립트를 디버그하고 (마지막으로) 설치를 복구하는 데 도움을 줄 수 있습니다. 스크립트가 모든 SQL 스크립트를 전달하면(출력으로 생성 Finished Database section
) 스크립트의 나머지 부분을 디버깅하려고 시도하지만 먼저 SQL 입력 파일을 살펴보겠습니다.