2009-07-29 24 views
21

Tôi đang viết một tập lệnh bash đơn giản để cài đặt MySQL trên Ubuntu.Làm cách nào để chuyển mật khẩu từ tập lệnh bash sang aptitude để cài đặt mysql?

#!/bin/bash 
apt-get update 

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

Tuy nhiên, MySQL nhắc nhập mật khẩu và xác nhận. Làm cách nào để chuyển một mật khẩu gốc. Có một tiếng vang tôi có thể sử dụng?

Trả lời

2

nhìn vào sử dụng expect

Nó có thể được sử dụng để tự động hóa các phiên tương tác nhất, mặc dù tôi sẽ không sử dụng mật khẩu gốc

1

Mong đợi có lẽ là quá mức cần thiết. Nhìn vào một trong các diễn đàn quản trị Debian hoặc Ubuntu - những thứ như FAI và cộng sự đã sử dụng từ lâu để chèn sẵn các câu hỏi debconf. Bạn cũng có thể sử dụng nó ở đây.

Cuối cùng, bạn cũng có thể sử dụng apt-get hoặc các giao diện người dùng khác.

12

Cảm ơn bạn đã nhận được mẹo. Tôi không thể tìm thấy bất cứ điều gì bằng cách tìm kiếm diễn đàn quản trị Ubuntu vì vậy tôi đã đi với mong đợi. Như bạn có thể thấy bằng dấu thời gian của bài đăng này, tôi mất 3 giờ để làm cho nó hoạt động. Đây là đoạn mã, tôi hy vọng nó có thể giúp ai đó:

#!/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

Cách đơn giản nhất để làm điều này là sử dụng các biến môi trường DEBIAN_FRONTEND và -q năng khiếu và cờ -y:

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

Hoặc tổng quát hơn, giả sử mật khẩu sudo đã được phục vụ cho một số cách thức:

#!/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

Tôi đã thử phương pháp 'mong đợi', nhưng tiếp tục chạy vào vấn đề trích dẫn tinh tế S. Thủ thuật 'DEBIAN_FRONTEND = noninteractive' chính xác là những gì tôi đang tìm kiếm. Theo dõi nó bằng mật khẩu 'mysqladmin -u root YOUR_DB_PASSWORD' và bạn đang ở nhà trong nháy mắt. –

+0

+1 cho một cái gì đó thực sự hoạt động trên insatll sạch của ubuntu 12.04 – Automatico

7

Đây là trích đoạn từ tập lệnh thiết lập của tôi cho máy chủ mới. Bạn có thể sao chép từng từ ngoại trừ mật khẩu.

Bạn sẽ cần chạy ứng dụng này bằng sudo nếu bạn chưa root.

#!/bin/bash 
export DEBIAN_FRONTEND=noninteractive 
apt-get -q -y install mysql-server 
echo "Give mysql server time to start up before we try to set a password..." 
sleep 5 
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;" 
EOSQL 
echo "Done setting mysql password." 

Câu trả lời khác đã sử dụng -y làm cho apt-get luôn trả lời có cho câu hỏi. -q ẩn một số chỉ số tiến trình để bạn có thể gửi đầu ra tới nhật ký. Bạn cũng có thể sử dụng -qq, tự động cung cấp cho bạn một -y. Đây là trang dành cho apt-get.

<<EOSQL là cú pháp bed heredoc để dễ đọc.

tôi có phần heredoc của giải pháp này từ anh chàng này: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

Những điều cần nhớ với heredoc là khoảng trắng mà trước chuỗi đóng cửa phá vỡ nó. Vì vậy, không thụt lề dòng đó. Đây là một trang về cú pháp heredoc: http://tldp.org/LDP/abs/html/here-docs.html

+0

điều này cho 'ERROR 1698 (28000): Truy cập bị từ chối cho người dùng 'root' @ 'localhost'' – user1623521

+0

Có thể đã có mật khẩu gốc? Tập lệnh này không xác thực bằng mật khẩu vì mysql không có mật khẩu đã được đặt. Bạn có thể thêm dấu nhắc -p để nhắc hoặc -p $ PASS để cung cấp nó trên dòng lệnh. – Mnebuerquo

+0

Không có, tôi đã thử với một máy ảo sạch. Tôi đoán mysql không chấp nhận mật khẩu để trống. – user1623521

15

Điều này dễ hơn rất nhiều ..

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 

Nếu shell của bạn không hỗ trợ here-strings (zsh, ksh93 và bash hỗ trợ chúng), sử dụng:

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

Đây thực sự là cách được khuyến nghị để làm điều này. Mong đợi các kịch bản hoặc chờ đợi/ngủ chỉ là kludges mà sẽ phá vỡ trong những khoảnh khắc đáng tiếc nhất. –

+2

Tôi không thể tìm thấy tài liệu về những tên cần thiết để ghi đè lên. Nhưng tôi đã cài đặt gói tương tác một lần và sử dụng 'sudo debconf-show MyPkg' để liệt kê các biến đã được thiết lập. Nhìn vào danh sách đó, nó đã được khá rõ ràng những gì hai tên biến mật khẩu đã được cho gói của tôi. –

2

Kịch bản này đã thành công khi đưa ra như superuser:

#!/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 
Các vấn đề liên quan