Bash脚本安装PostgreSQL - 不工作

时间:2012-12-10 21:37:48

标签: linux bash postgresql shell debian

我有一个脚本,它在部署我的debian 6.0服务器时运行,它旨在从源代码构建postgreSQL,为它创建一个系统用户,创建一个数据库并开始运行。我是新手,但我做了很多功课,这就是我想出来的:

# Initial
    apt-get update
    apt-get -y install aptitude bzip2 libbz2-dev git-core bison flex
    aptitude -y install sudo python-all-dev python-setuptools libxml2-dev libgeoip-dev libxslt1-dev uuid-dev gcc automake autoconf libpcre3-dev libssl-dev unzip zip python-psycopg2 libpq-dev wget make libreadline-dev
    aptitude -y full-upgrade 


# POSTGRESQL
###############################

# Postgresql Download & Install
    wget http://ftp.postgresql.org/pub/source/v8.4.6/postgresql-8.4.6.tar.gz -P /tmp
    mkdir /tmp/postgresql
    tar xzf /tmp/postgresql-8.4.6.tar.gz -C "/tmp/postgresql"
    cd /tmp/postgresql/postgresql-8.4.6
    ./configure
    make
    make install

# Add User
    useradd postgres
    chown "postgres" /usr/local/pgsql
    mkdir /usr/local/pgsql/data
    chown postgres:postgres /usr/local/pgsql/data
    su - postgres
    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
    /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
    /usr/local/pgsql/bin/createdb test

由于这是在部署上运行,很难调试出错的地方,但我可以看到postgres的下载和安装似乎工作正常。但是,我所知道的是postgres没有在我的服务器上运行。我想知道我的代码的最后一部分是否有人可以看到我做错了什么可能导致这个?

1 个答案:

答案 0 :(得分:5)

脚本中明显错误的部分是它希望su - postgres后面的行作为postgres用户运行。这不会发生。

在批处理模式下,su - postgres启动并立即退出,因为没有命令进入它。然后,当用户启动脚本(可能是root)时,脚本的下一个命令就会执行,但它们会失败。

相反,你应该写这样的东西:

su - postgres <<-'EOF'
  /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
  /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
  /usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user

评论中的建议假设您已经通过包安装了postgresql,但这不是问题的上下文。当您使用./configure不带参数和make install从源安装时,它将永远不会在/usr/local/pgsql之外安装任何内容。在这种情况下,/etc下没有启动脚本是完全正常的。