プロビジョニングに Vagrantfile の expect スクリプトを使用することは可能ですか?
installOracle.exp スクリプト内のファイルが適切な時点で存在しないようです (エラー ログを参照)。
spawn "/var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh"
ファイルはそこにあります!:)
[vagrant@wemdbc01 ~]$ ls -la /var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh
-rwxrwxrwx. 1 vagrant vagrant 541 May 25 08:43 /var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh
私の Vagrantfile の関連部分:
[...]
db.vm.synced_folder ".", "/vagrant", disabled: true
db.vm.synced_folder "C:/Installers", "/var/wminst"
db.vm.provision :shell, :inline => "yum -y install expect"
db.vm.provision :shell, :inline => "expect /var/wminst/vm_provision/oracle_installer/installOracle.exp"
end
installOracle.exp:
#!/usr/bin/env expect
set timeout 20
spawn "/var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh"
expect "replace Disk1/upgrade/gen_inst.sql?" { send "N\r" }
expect "Specify the HTTP port that will be used for Oracle Application Express" { send "\r" }
expect "Specify a port that will be used for the database listener" { send "\r" }
expect "initial configuration:" { send "root\r" }
expect "Confirm the password:" { send "root\r" }
expect "Do you want Oracle Database 11g Express Edition to be started on boot" { send "y\r" }
expect eof
expect eof
expect "Installation completed successfully." { send "\r" }
expect eof
エラー:
==> wemdbc01: Running provisioner: shell...
wemdbc01: Running: inline script
==> wemdbc01: spawn /var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh
==> wemdbc01: couldn't execute "/var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh": no such file or directory
==> wemdbc01: while executing
==> wemdbc01: "spawn "/var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh""
==> wemdbc01: (file "/var/wminst/vm_provision/oracle_installer/installOracle.exp" line 5)
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
編集1: 変更:
#!/bin/bash
に
#!/usr/bin/env bash
現在のエラーログ:
==> wemdbc01: Running provisioner: shell...
wemdbc01: Running: inline script
==> wemdbc01: spawn /var/wminst/vm_provision/oracle_installer/installOracleDatabase.sh
: No such file or directory bash
==> wemdbc01: expect: spawn id exp5 not open
==> wemdbc01: while executing
==> wemdbc01: "expect "Specify the HTTP port that will be used for Oracle Application Express" { send "\r" }"
==> wemdbc01: (file "/var/wminst/vm_provision/oracle_installer/installOracle.exp" line 8)
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
答え1
問題のあるスクリプトは Windows 上で作成されたため、DOS 改行が含まれていました。そのため、スクリプトは Unix VM 上で実行できませんでした。
ただし、VM が Windows 上で実行されているという事実は問題ではありません。