対話形式で設定していたことをコマンドで設定する

Ken published on
3 min, 516 words

Categories: Linux

サーバーを設定していると対話型になるところがあるけど、それを文章化するのも面倒だし、スクリーンショットを撮るのも面倒だし、何よりも自動化できないので、可能な限りコマンドだけで設定を完了しておきたい。

環境は Ubuntu 14.04
インストールするアプリの都合で今回はこのバージョンを使っている。

ホスト名

ホスト名の変更と hosts の書き換え。

export HOSTNAME=example.jp
hostname $HOSTNAME
sed -i "s/^\(127\.0\.0\.1.\+localhost\)/\1 $HOSTNAME/" /etc/hosts

エディタ

デフォルトエディタの設定を変更する。
エディタは nano よりも vim の方が好み。

sudo update-alternatives --set editor /usr/bin/vim.basic

対話形式でエディタを選択したい場合はこうする。

sudo update-alternatives --config editor

タイムゾーン

sudo sh -c 'echo "Asia/Tokyo" > /etc/timezone'
sudo dpkg-reconfigure -f noninteractive tzdata

対話形式でタイムゾーンを選択したい場合はこうする。

sudo dpkg-reconfigure tzdata

NTP

sudo cp /etc/ntp.conf /etc/ntp.conf.org
sudo sed -i "s/^\(server\) \(.*\)/\1 ntp.nict.jp/" /etc/ntp.conf

server 1.time.constant.com server 2.time.constant.com server 3.time.constant.com

上記が次のようになる。

server ntp.nict.jp server ntp.nict.jp server ntp.nict.jp

MySQL

export MYSQLPW=INPUT_PASSWORD
echo "mysql-server mysql-server/root_password password $MYSQLPW" | sudo debconf-set-selections
echo "mysql-server mysql-server/root_password_again password $MYSQLPW" | sudo debconf-set-selections
sudo apt-get -y install mysql-server

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.org
sudo sed -i "/\[mysqld\]/i default-character-set=utf8\n" /etc/mysql/my.cnf
sudo sed -i "/\[mysqldump\]/i character-set-server=utf8\n" /etc/mysql/my.cnf
sudo sed -i "/\[mysql\]/i default-character-set=utf8\n" /etc/mysql/my.cnf

debconf-set-selections を設定せずに mysql をインストールするとrootのパスワードを聞かれる。

Supervisor

Supervisor用の設定ファイルもコマンドで作成。
Supervisorにかぎらず、ファイルを作成する場合に使える。
sudoにコマンドを渡したいときは sudo -sh -c "command" とするとパイプなども期待通りに使える。

sudo sh -c "cat <<EOF > /etc/supervisor/conf.d/xvfb.conf
[program:xvfb]
priority=1
user=MYAPP
command=Xvfb :1 -screen 0 800x600x24
autostart=true
autorestart=true
directory=/opt/visionect
stdout_logfile=/var/log/xvfb-stdout.log
stderr_logfile=/var/log/xvfb-stderr.log
EOF"

sudo supervisorctl reread
sudo supervisorctl add xvfb
sudo supervisorctl status

Supervisor用の設定ファイルを作成したら、読み込ませることを忘れずに。