編集どうやら、問題は、コマンド (以下) が の影響を受けないため、コマンドを下にリストしようとするのではなく
su - postgres -c "commands, commands, commands"
、
に渡す必要があったことです。/編集su
su
su
su
編集 2:さらに優れたソリューションについては、David Braun の回答を参照してください: https://stackoverflow.com/a/22947716/694469
su - postgres
Vagrant ブートストラップ シェル プロビジョニング スクリプトでユーザー ( ) を切り替えることはできませんか? (なぜだめですか?)
そんな脚本を書いています。そのスクリプトでは、次のことを行います。
echo '===== Creating PostgreSQL databases and users'
su - postgres
psql -c "
create user SomeUserName password '...';
alter user ...;
"
ここでは、 psql
user としてログインを試みる必要がありますpostgres
。ただし、これはsu - postgres
明らかに失敗し、シェルはユーザーrootとしてログインしようとします。(明らかに、rootは Vagrant ブートストラップ シェル スクリプトを実行するユーザーです。)
したがって、このエラーが表示され、psql コマンドは呼び出されません。
psql: FATAL: ロール "root" が存在しません
に置き換えsu - postgres
ても効果はありません(スクリプトはすでにrootsudo su - postgres
として実行されていると思います。)
id
の前後に (現在のユーザー ID を出力する)を追加し、呼び出された前後の両方su - postgres
をid
出力します。私が知る限り、無視されていますか?そして、後でルートユーザーに戻ろうとすると、ブートストラップスクリプトが完全に終了します:-(uid=0(root) gid=0(root) groups=0(root)
su
su - postgres
exit
でも。を実行した後、問題なく起動vagrant ssh
できるようになりました。ただし、プロビジョニング スクリプト内からではありません。sudo su - postgres
psql
(回避策は、(ユーザーをpostgresに切り替える代わりに)-h 127.0.0.1 --username postgres
いつ呼び出すかを指定することです。また、VM ローカル接続に対して PostgreSQL 信頼ベースの認証を有効にします。)psql