2009-07-29 37 views
21

私はUbuntuにMySQLをインストールするための簡単なbashスクリプトを書いています。bashスクリプトのパスワードをaptitudeに渡してmysqlをインストールするにはどうしたらいいですか?

#!/bin/bash 
apt-get update 

# Install MySQL5 
aptitude -y install mysql-server mysql-client libmysqlclient15-dev 

ただし、パスワードと確認メッセージが表示されます。ルートパスワードをどうやって渡すのですか?私が使用できるエコーはありますか?

答えて

2

ほとんどの対話型セッションを自動化するために使用することができますexpect

を使用してに見て、私はrootのパスワードを使用しないだろうが

1

期待おそらく過剰です。 DebianやUbuntuの管理フォーラムの1つを見てください.FAIらのようなものは、debconfの質問にあらかじめpreseedを使っています。あなたはここでもそれを使うことができるはずです。

最後に、おそらくapt-get自体や他のフロントエンドを使用することもできます。

12

ご期待いただきありがとうございます。私はUbuntuの管理フォーラムを検索して何も見つけられなかったので、私は期待通りに行った。この投稿のタイムスタンプでわかるように、動作させるには3時間かかりました。

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server 

または:これを行う最も簡単な方法は、DEBIAN_FRONTEND環境変数と適性-qおよび-yフラグを使用することです

#!/bin/bash 
apt-get update 
apt-get install expect 

VAR=$(expect -c ' 
spawn apt-get -y install mysql-server 
expect "New password for the MySQL \"root\" user:" 
send "PasswordHere\r" 
expect "Repeat password for the MySQL \"root\" user:" 
send "PasswordHere\r" 
expect eof 
') 

echo "$VAR" 

apt-get -y install mysql-client libmysqlclient15-dev 

#For some reason important to restart - otherwise possible errors 

/etc/init.d/mysql stop 
/etc/init.d/mysql start 
4

:ここにコードがある、私はそれが誰かを助けることを願ってより一般的に、sudoのパスワードと仮定すると、いくつかの-方法については、仕出し料理されています:

#!/bin/bash 
INSTALLER_LOG=/var/log/my-installer.log 

installnoninteractive(){ 
    sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG" 
} 

installnoninteractive mysql-server 
+1

私は 'expect'アプローチを試みましたが、微妙な引用問題に走り続けましたs。 'DEBIAN_FRONTEND = noninteractive'トリックは私が探していたものでした。 'mysqladmin -u root password YOUR_DB_PASSWORD'を実行すると、あなたはすぐに家にいます。 –

+0

ubuntu 12.04 – Automatico

7

これは、新しいサーバのための私のセットアップスクリプトからの抜粋です。あなたは、パスワードを除き単語を単語としてコピーできるはずです。

まだrootでない場合は、sudoを使ってこれを実行する必要があります。

その他の回答では-yが使用されているため、apt-getは常に質問に答えます。 -qはいくつかの進捗インジケータを隠すので、出力をログに送ることができます。また、-qqを使用すると、自動的に-yが得られます。これはapt-getのmanページにあります。

<<EOSQLは、読みやすくするためのbash heredoc構文です。

私はこの男から、このソリューションのヒアドキュメントの一部を得た:ヒアドキュメントで覚えておくべきhttp://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

事がクローズ文字列の前に空白がそれを壊すことです。その行をインデントしないでください。 heredocの構文に関するページです:http://tldp.org/LDP/abs/html/here-docs.html

+0

のクリーンなinsatllで実際に動作するもののためにこれは 'ERROR 1698(28000):ユーザ 'root' @ 'localhost''のアクセスが拒否されました – user1623521

+0

rootパスワードがすでに設定されているのでしょうか?このスクリプトは、mysqlにパスワードが設定されていないため、パスワードで認証されません。プロンプトに-pを追加するか、-p $ PASSを追加してコマンドラインに追加することができます。 – Mnebuerquo

+0

私はきれいなVMで試しました。私は、mysqlがパスワードを空白にすることはできないと思う。 – user1623521

15

これはずっと簡単です。

install mysql on ubuntu without password prompt

sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password' 
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password' 
sudo apt-get -y install mysql-server 

あなたのシェルは、here-strings(zshの、は、ksh93とbashがそれらをサポート)使用をサポートしていない場合:

echo ... | sudo debconf-set-selections 
+0

これは実際には推奨される方法ですこれをする。期待スクリプトや待っている/眠っているのは、最も不幸な瞬間に壊れるばかりのクルージングです。 –

+2

上書きする必要のある設定名のドキュメントが見つかりませんでした。しかし、私はパッケージを一度インタラクティブにインストールし、 'sudo debconf-show MyPkg'を使って、設定された変数をリストアップしました。そのリストを見ると、私のパッケージには2つのパスワード変数名が何であるかがはっきり分かりました。 –

2

スーパーユーザーとして起動すると、このスクリプトは成功しました:

#!/bin/bash 

export temp_mysql_password="**********" 
export DEBIAN_FRONTEND=noninteractive 

debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password" 
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password" 
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password" 
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password" 

apt-get update 
apt-get -y upgrade 
apt-get -y install mysql-server 
関連する問題