2012-04-14 8 views
1

NVIDIAのCUDA API用のインストーラは3つあります。最初はドライバであり、素晴らしいサイレントインストールフラグオプションが付属しています(ただし、rootで実行レベル3)。Bashスクリプトでユーザーコマンドの中にExpect Scriptをフォーマットする

第二の二次手動(簡潔にするため、その後のインストールの長い混乱を切り出し)以下アーカイブ 完全性を検証

[ルート]#個のSH cudatoolkit_4.1.28_linux_64_rhel5.x.runをインストール..示されていますすべての良い。 NVIDIAの圧縮解除 CUDA .............................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ............................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..........................................
インストールパスを入力してください(デフォルト/ usr/local/cuda、 '/ cuda'には が追加されます):
CUDAの以前のバージョンが/ usr/local/cuda/binに見つかりました
アンインストールしますか? (はい/いいえ/アボート):つまり、はい

、私は認識する必要があります。 は、「インストールパスを入力します」と出力「\ n」の

今トリッキーな部分は、アンインストールがないかもしれないです常にそこにいること。そうでない場合は、インストールが完了するまで待つ必要がありますが、「アンインストールしますか?完了するために「はい」を出力する必要があります。 3番目と最後のインストーラの出力は以下のようになり

....

[ルート]#shをgpucomputingsdk_4.1.28_linux.run
確認アーカイブ 整合性...すべて良いです。
NVIDIA GPUコンピューティングの解凍

SDK ......................................... .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ..................................

インストールパスを入力してください(デフォルト〜/ NVIDIA_GPU_Computing_SDK): /usr/local/CUDA_SDK

CUDAが/ usr/local/cudaにあります
これが正しい場合、以下のデフォルトを選択してください。それが正しくない場合
は、 はCUDAパス (デフォルトは/ usr/local/CUDA)をインストール入力しCUDA

への正しいパスを入力します。
これについては

それは一見ですので、何のアンインストールアクションはありません少しシンプル。

私はちょうど検出して出力「を/ usr/local/CUDA_SDKの\ n」「インストールパスを入力します」と、その後に検出する必要がある「\ n」は

私の考えを使用した、出力「CUDAは、インストールパス入力します」インストーラごとに1つのexpectスクリプトがありますが、ルートに切り替えるコマンドの二重引用符で囲まれているため、これでいくつかの問題があります。私が現在持っていることである:これは(パスワードが入力されると)適切にrootに切り替わり、正しくオプションを内蔵したドライバをインストール

#!/bin/bash 
CR="\"\n\"" 
YES="\"Yes\"" 
INSTALL_PATH_REQUEST="\"Enter install path\"" 
CUDA_PATH_REQUEST="\"Enter CUDA install path\"" 
UNINSTALL_REQUEST="\"Would you like to uninstall?\"" 
TOOLKIT=`ls -t cudatoolkit* | head -n 1` 
TOOLKIT_EXPECT="sh $TOOLKIT" 
SDK=`ls -t gpucomputingsdk* | head -n 1` 
SDK_INSTALL_PATH="\"/usr/local/CUDA_SDK\n\"" 
SDK_EXPECT="sh $SDK" 
/bin/su root -c "yum -q -y install expect expectk; 
/sbin/init 3; sh `ls -t NVIDIA*|head -n 1` -s --update -a -X; 
/usr/bin/expect <<EOF; 
spawn $TOOLKIT_EXPECT 
expect $INSTALL_PATH_REQUEST 
send $CR 
expect $UNINSTALL_REQUEST 
send $YES 
EOF 
/usr/bin/expect <<EOF; 
spawn $SDK_EXPECT 
expect $INSTALL_PATH_REQUEST 
send $SDK_INSTALL_PATH 
expect $CUDA_PATH_REQUEST 
send $CR 
EOF 
/sbin/init 5" 

。次に、2番目のインストールプロセスを開始し、最初の引数(改行)を入力するように見えますが、2番目のインストーラを途中で終了するようです(たとえば、「yes」オプションは表示されません)。

私はかなり近くにいるように感じます。うまくいけば、私が間違っているところに誰かを指摘して正しい構文を提案することができます。

NOTES: それは私が面倒を保存して、私は上のインストールてるマシンのいくつかは、(株CentOS 6を)期待していなかったので、私は、yumのinstallコマンドを追加....

+0

マルチポストしないでくださいhttp://superuser.com/q/412259/4714 –

答えて

3

ここではタイムアウトに問題があるかもしれません...インストーラがどれくらい時間がかかるかわかりません。

expect -timeout 100 $INSTALL_PATH_REQUEST 

をまた、あなたの$ YESからの変更:それはその時点で予想されるテキストが表示されていない場合
デフォルトでは、それはあなたがそのようにタイムアウト値を変更することができ、かかわらず進行し、タイムアウトは10秒です期待します

YES="\"Yes\"" 

へ:

YES="\"Yes\r\"" 

(\の代わりにN、あまりにも$ CRで\ rを使用するのが最適)生成されたプロセスが完了する前に、だから、期待スクリプトが終了しない

expect -timeout 320 "Install Complete." 

それはまた、例えば、インストールの最後にいくつかの安全のstring 'を期待することをお勧めします。

+0

ありがとう、これを試してみて、それがどうやって行ったのですか? –

+0

これを@glenn jackmanのソリューションと組み合わせて試してみましょう: http://superuser.com/questions/412259/expect-script-inside-bash-script-オプションの文 何が起こるのですか? "無効なコマンド名"/usr/bin/expect "実行中..." あなたが推測しているように、タイムアウトと ''\ r' 'が助けられましたが、私はまだ条件付き部分で苦労しています。グレンジャックマンの解決策の最初の(そして唯一の)EOFの後ろの閉じ括弧の後にもう1つのEOFが必要ですか? –

+0

WOOO!EOFをすべて魅力的に働かせました。スクリプトは完璧に動作します...意図しないCUDAインストールは完璧に動作しています:) Yay teamwork! ここにJackmanの投稿があります: http://superuser.com/questions/412259/expect-script-inside-bash-script-optional-statement –

関連する問題