Bash
使用來自 Vagrantfile 的期望腳本進行配置 - 執行期間不存在文件的問題
是否可以使用來自 Vagrantfile 的期望腳本進行配置?
看起來 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
安裝Oracle.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.
有問題的腳本是在 Windows 上生成的,這意味著它有 DOS 換行符。這導致腳本無法在 Unix VM 上執行。
虛擬機在 Windows 上執行這一事實不是問題。