-->

網頁

2019/11/11

MySQL non-interactice installation

相信大家對這個畫面都不陌生:


除了 MySQL 5.7 的某幾個版本會自動產生 root 的 password 以外,大多都是在安裝時讓使用者自行輸入密碼。

但今天你不是手動安裝,而是寫 script 讓主機自行部屬,這下就麻煩了,因為你不可能每台主機都人工輸入密碼,另外像是 AWS 自動部屬的話,你大概連 console 都沒有。但若透過 debconf 是有機會做到完全自動安裝。



首先來安裝 debconf:
sudo apt-get install debconf

稍等為了讓大家看一下 deb 的 interactive mode 是怎麼撰寫的,在安裝 ar 套件:
sudo apt-get install binutils

今天要被我拿來操刀的是「mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb」。先用 ar 把 deb 檔解開,可以看到同下方的檔案:
$ ls
control.tar.xz  data.tar.xz  debian-binary

這邊要解壓縮「tar xvf control.tar.xz」,解開後會多出幾個檔案:
$ ls
conffiles  config  control  debian-binary  postinst  postrm  preinst  prerm  templates

這邊只專注於「config」檔,其他檔案先不管。開啟「config」檔以後,大概可以看到幾個關鍵字,像是:
  • db_input
  • db_get
  • db_fset
  • mysql-community-server/root-pass

這幾個關鍵字和整個 shell script 就是用來和使用者互動的指令,也就是最上面看到的那張圖。經由 db_set + variable-name 就可以暫存使用者輸入的資料,接下來就透過這幾個變數來動手腳。

先告知 debconf 不使用互動的方式來安裝 deb:
export DEBIAN_FRONTEND="noninteractive"

既然沒有和使用者互動,理當不會有 root 密碼,但可透過「debconf-set-selections」的方式來幫 package 設定:
debconf-set-selections <<< "mysql-community-server/root-pass password root"

之後安裝時就不會出現使用者輸入提示視窗了:
dpkg -i mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb
apt-get install -f  # 安裝需要的 dependedncy
apt --fix-broken -y install

沒有留言:

張貼留言

除非必要,請不要在回覆時留下您的敏感資訊 (電話、email、地址等)