สคริปต์ติดตั้ง MySQL บน Ubuntu


23

ฉันต้องเขียนสคริปต์ที่จะสร้างเซิร์ฟเวอร์ของฉันจากการติดตั้งเซิร์ฟเวอร์ Ubuntu ใหม่ สิ่งต่าง ๆ เช่น Apache และ PHP นั้นจำเป็นต้องติดตั้ง MySQL ปัญหาเดียวที่นี่คือเมื่อฉันติดตั้ง MySQL ด้วย apt-get ณ จุดหนึ่งการติดตั้งจะเปิดกล่องโต้ตอบที่ให้ฉันพิมพ์รหัสผ่านรูทของฉัน คือต้องมีปฏิสัมพันธ์กับมนุษย์

ฉันจะข้ามหน้าจอนี้ระหว่างการติดตั้งและหลีกเลี่ยงการโต้ตอบกับมนุษย์ในขณะที่ยังใช้ apt-get เพื่อติดตั้ง MySQL ได้อย่างไร


คำตอบ:


31

คุณต้องคาดเดาฐานข้อมูล debconf debconf จะต้องติดตั้งก่อนที่คุณจะลอง

รุ่นของ mysql และ Ubuntu สามารถเปลี่ยนบรรทัดได้:

echo mysql-server mysql-server/root_password select PASSWORD | debconf-set-selections
echo mysql-server mysql-server/root_password_again select PASSWORD | debconf-set-selections

ตัวอย่างเช่นคุณต้องการสิ่งนี้แทน:

echo mysql-server-5.0 mysql-server/root_password password PASSWORD | debconf-set-selections
echo mysql-server-5.0 mysql-server/root_password_again password PASSWORD | debconf-set-selections

ใช่มันใช้งานได้ แต่หลังจากติดตั้งแล้วฉันไม่สามารถลงชื่อเข้าใช้ mysql ได้ (root ของ mysql -u จะแสดงการอนุญาตที่ถูกปฏิเสธ)
Samnang

3
วิธีการเกี่ยวกับmysql -u root -p
PhilT

ต้องตั้งค่าสถานะ 'มองเห็น' ดังแสดงด้านล่างเพื่อปิดใช้งานการแสดงพรอมต์รหัสผ่านหรือคุณจะได้รับพร้อมท์ให้ใส่รหัสผ่านอีกครั้ง
Jamieson Becker

5

ในขณะที่ไฟและระบบที่คล้ายกันมีประโยชน์ในสภาพแวดล้อมขององค์กร (และเขาควรรู้เกี่ยวกับพวกเขา) แต่น่าเสียดายที่ไม่ใช่ยาครอบจักรวาล

ตัวอย่างเช่นถ้าเขาทำงานกับเครื่องระยะไกลอาจโฮสต์เซิร์ฟเวอร์ให้เช่าเซิร์ฟเวอร์ colocated โดยไม่มีเครือข่ายที่เชื่อถือได้หรือเฉพาะหรือสภาพแวดล้อมคลาวด์เช่น EC2 netboot PXE จะไม่ทำงานที่นั่น Puppet และ Chef ดูเหมือนจะเป็นเครื่องมืออเนกประสงค์ที่สามารถช่วยเขาได้อย่างไรก็ตาม

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage

Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
   ....
   ....
EOF

คุณสามารถรับค่าที่ถูกต้องจากฐานข้อมูล debconf บนระบบที่ตั้งค่าไว้แล้ว เทคนิคนี้ช่วยให้คุณสามารถเก็บทุกอย่างไว้ในเชลล์สคริปต์เดียว ตัวอย่างเช่นจาก /var/cache/debconf/passwords.dat (โปรดทราบความสามารถในการทำงานกับทั้ง 5.0 บน Debian และ 5.1 และ Ubuntu รายการพิเศษไม่เจ็บอะไร):

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get -qq -y install mysql-server
Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

EOF

วิธีอื่นอาจจะง่ายกว่า: (รวบรวมคำตอบจาก debconf-get-selections หรือ debconf-show จากแพ็คเกจ debconf-utils):

echo "Installing MySQL 5.0.."
sudo apt-get install -qqy debconf-utils
cat << EOF | debconf-set-selections
mysql-server-5.0 mysql-server/root_password password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password_again password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password seen true
mysql-server-5.0 mysql-server/root_password_again seen true
EOF
/usr/bin/apt-get -y install mysql-server-5.0 mysql-server

หลังจากที่คุณเรียกใช้ debconf-set-selections ให้ตรวจสอบคำตอบของคุณ: cat /var/cache/debconf/passwords.dat

และในขณะที่ทำการทดสอบให้แน่ใจว่าได้ลบและกำจัดฐานข้อมูลทั้งหมด (โดยเฉพาะฐานข้อมูล mysql ซึ่งเป็นที่จัดเก็บไว้) และแก้ไข DB config ของคุณในกรณีที่เกิดความเสียหาย:

apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl 

เคล็ดลับเล็ก ๆ น้อย ๆ นี้: 1) คุณต้องมีการตั้งค่าสถานะที่เห็นและรหัสผ่าน _again 2) คุณต้องไม่ใส่เครื่องหมายคำพูดล้อมรอบรหัสผ่าน มันจะเข้าสู่การสืบค้น MySQL ที่ไม่มีคำตอบดังนั้นคุณต้องพูดด้วยตัวคุณเองถ้าจำเป็น นั่นก็หมายความว่าไม่มีช่องว่าง (ฉันคิดว่า) 3) หากคุณมีปัญหาให้ทำสิ่งที่ต้องทำด้วยมือแล้วเรียกใช้ MySQL ติดตั้งโดยตรงด้วยตัวคุณเอง (ในเทอร์มินัลปกติ / tty) และดูว่า debconf บอกอะไรคุณ มันจะบอกคุณคำเตือนและข้อผิดพลาดที่นั่น


3

หากคุณมีเซิร์ฟเวอร์หลายตัวที่คุณต้องสร้างใหม่ฉันขอแนะนำให้คุณดูบางอย่างเช่นPuppetแทนที่จะเขียนเชลล์สคริปต์ Puppet มีภาษาที่สื่อความหมายดังนั้นคุณจึงกำหนดวิธีที่คุณต้องการให้ระบบค้นหาไม่ใช่วิธีไปถึงที่นั่น ชนิดของแพคเกจมีตัวเลือกการตอบกลับที่ให้คุณกำหนดคำตอบ debconf ในคำตอบของ Steven


1

ฉันขอแนะนำให้คุณทำให้ขั้นตอนการจัดเตรียมเซิร์ฟเวอร์เป็นแบบอัตโนมัติได้หรือไม่

ทุกวันนี้FAIมีโปรไฟล์เพื่อติดตั้งระบบ Debian ที่สำคัญที่สุดรวมถึง Ubuntu จากเครือข่าย แน่นอนว่านี่เป็นเพียงส่วนขยายของคำตอบหุ่นกระบอกซึ่งเป็นส่วนขยายของคำตอบ debconf

การรวมกันของการจัดเตรียมจาก FAI จากนั้นปรับแต่งด้วย puppet ให้เป็นบทบาทเซิร์ฟเวอร์ (ที่ puppet จะใช้เครื่องมือที่เหมาะสมสำหรับระบบของคุณเช่น debconf สำหรับ Debian (-likes) ค่อนข้างอัตโนมัติ) ค่อนข้างได้รับความนิยมในปัจจุบันและไม่ควรเกินไป หาตัวอย่างที่ตรงกับสิ่งที่คุณต้องการทำอย่างใกล้ชิด

ข้อดีอีกอย่างที่สำคัญของการมีเซิร์ฟเวอร์ staging / การกำหนดค่าก็คือมันเป็นสถานที่ที่เหมาะสมในการควบคุมการกำหนดค่าเวอร์ชันของคุณเช่นgit (ซึ่งมีประโยชน์ในการตั้งชื่อสถานะพื้นที่เก็บข้อมูลโดย checksum เพื่อให้คุณปลอดภัยจากการทุจริต ตราบใดที่คุณจดบันทึกจำนวนเงินที่ถูกลง) สำหรับกระบวนการที่สะอาดและทำซ้ำได้อย่างแท้จริง


1

สิ่งนี้น่าจะเหมาะกับความคิดเห็นมากกว่า ฉันตั้งค่าสถานะเพื่อให้ผู้ดูแลให้ความสนใจและพวกเขาควรสามารถทำให้เป็นความคิดเห็นได้
Ben Pilbrow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.