CentOS7のパッケージをシェルスクリプトでインストール

あまり役に立つ人は少ないかも知れませんが、検証環境をいじっていると、ちょこちょこOSから再インストール(バージョンを変更したり、ディストリビューションを変更したり)することがあります。
ある程度までは同じ構成だったりすると、何とか簡単にしたいという欲求が湧いてきます。
仮想化すれば良いのですが、VAIO Type-Pなどの物理PCで確認しているので、仮想化という訳にもいかないです。

スクリプトを作っておけば同じ設定を構築できるなと・・・ということで何パターンか作ってみました。

シェルスクリプトとは?

シェルスクリプトは、シェル上で実行するコマンドをまとめたスクリプトファイルです。
シェルは、Linuxではターミナルや端末(WindowsのコマンドプロンプトやPowerShellも同じでしょうか?)などとOSの間に存在するインターフェースです。ターミナルで入力したコマンドをOSが判るように変換して伝える。逆にOSからの応答を変換してターミナルに伝える役割をしています。
ターミナルで入力、実行するコマンドをスクリプト(ファイル)にまとめておくことで、ファイルを実行することで、書かれているコマンドを順番に実行することができるものと考えれば良いかと思います。

シェルスクリプトを作る

簡単なシェルスクリプトとして、ファイルに実行するコマンドを直接記述します。
.shの形式(.shでなくてもかまいません)でファイルを開き、先頭行にshのモジュールの場所を指定します。
作成したファイルに実行権限を付与します。

# chmod 755 test.sh

シェルスクリプトの記述内容例

# vi test.sh

#!/usr/bin/sh
date
who

この2つのコマンドを記述しただけでもシェルスクリプトです。

実行結果

# ./test.sh

2017年  4月 28日 金曜日 13:06:09 JST
root     pts/0        2017-04-28 10:38 (xxxx xxxx.xxx.xxx.xxx)
test     pts/1        2017-04-28 12:01 (xxxx xxxx.xxx.xxx.xxx)

このように簡単な内容でもスクリプトと言えるので定型作業を羅列するだけでも効率化ができるかもしれません。

インストールスクリプト例

今回の記事の元となっているので、簡単なインストールスクリプト例を記載します。

スクリプトを実行する環境

7をminimalでインストールしています
インターネットにアクセスできるネットワークに接続しています

スクリプトによって実施される内容

  • yum updateを実行します。
  • 複数のリポジトリをダウンロード(インストール)します。
  • 複数のパッケージをインストールします。
    • wget
    • git
    • httpd
    • php
    • firefox
    • Xvfd
    • xwd
    • ImageMagick
  • proxy環境の場合は一部のproxy設定を実施します。
  • httpdの動作を確認します。

備考

この環境では、CentOS7をminimalでインストールしています。従ってX-Windowはインストールしていません。
Xvfdなどは、仮想ディスプレイのパッケージで、X-Windowが無い環境でも仮想的にブラウザを開くができます。

スクリプト例

これはサンプル用に作ったものです。そのままではコピペしても動かない場合があります。

#!/usr/bin/sh

echo "インストールスクリプトを開始します"
echo "このスクリプトのインストール対象はCentOS7です。"
echo ""

start_message(){
echo ""
echo "======================開始======================"
echo ""
}

end_message(){
echo ""
echo "======================完了======================"
echo ""
}

# proxy環境の確認と設定
echo "yumに対してのproxy設定"
start_message
proxy_check(){
echo "あなたの環境ではproxyを使用していますか? [Y/N]"
read proxy_check
case "$proxy_check" in
"y" | "Y" ) echo "Proxyを使用しています"
        proxy_set;;
"n" | "N" ) echo "Proxyを使用していません";;
* ) echo "YかNを入力してください"
        proxy_check;;
esac
}

proxy_set(){
echo "あなたの環境で使用するproxyサーバとポート番号を入力してください "
read proxy_set
echo "proxy設定は$proxy_setで正しいですか? [Y/N]"
read proxy_confirm
case "$proxy_confirm" in
"y" | "Y" ) sed -i -e "2i proxy=$proxy_set" /etc/yum.conf
            echo "/etc/yum.confにproxy=$proxy_setを追記しました。";;
* ) echo "正しい設定を入力し直してください"
        proxy_set;;
esac

sleep 2
start_message
cat /etc/yum.conf
end_message
}

end_message

proxy_check

# yum updateを実行
echo "yum updateを実行します"
echo ""

start_message
yum -f update
end_message

# wgetとgitのインストール(proxy環境の場合はgit用のproxy設定を追加)
echo "wgetとgitのインストールします"
start_message
yum install -y wget
yum install -y git
if [ "$proxy_check" = "y" -o "$proxy_check" = "Y" ]; then
git config --global http.proxy $proxy_set
git config --global http.proxy $proxy_set 
fi
end_message

# リポジトリを追加する
echo "リポジトリを追加します"
start_message
yum install -y epel-release
yum install -y centos-release-scl
yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

cd /etc/yum.repos.d/
if [ "$proxy_check" = "y" -o "$proxy_check" = "Y" ] ; then
wget -e HTTP_PROXY=$proxy_set  http://wing-repo.net/wing/7/EL7.wing.repo
else
wget http://wing-repo.net/wing/7/EL7.wing.repo
fi

end_message

# PHPとapacheのインストール
echo "PHPとApacheのインストールします"
echo ""
start_message
yum -y install httpd
yum -y install php
echo "PHPとApacheのバージョン確認"
echo ""
httpd -v
echo ""
php -v
echo ""
end_message

# この環境では、x-windowをインストールしていないために
# 仮想ディスプレイと関連するモジュールをインストール
echo "仮想ディスプレイとfirefoxと関連モジュールのインストールします"
echo ""
start_message
yum -y install xorg-x11-server-Xvfb firefox ImageMagick xwd
echo ""
end_message

# apacheの起動設定
echo "Apacheの起動設定をします"
start_message
systemctl enable httpd.service
systemctl start httpd.service
echo "Apacheを開始しました"
echo ""
systemctl status httpd.service
echo ""
end_message

# firewallの設定
echo "firewallの設定を変更します"
echo "ここではhttpとhttpsに許可を追加します"
echo ""
start_message
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
echo ""
echo "設定の確認"
echo ""
firewall-cmd --list-all

# Apacheの動作確認
echo "Apacheの動作を確認します"
echo ""
start_message
echo "仮想ディスプレイを起動します"
Xvfb :1 -screen 0 1024x768x24 &
export DISPLAY=:1
jobs
echo ""
echo "firefoxを起動します"
firefox &
jobs
echo ""
echo "Xvfdとfirefoxが起動していればOK"
echo ""
echo "firefoxの画面キャプチャを取得します"
xwd -root -out screen.xwd
convert screen.xwd /var/www/html/screen.jpg"
echo ""
echo "screen.jpgを確認してください。"

これだけでは、あまり役に立たないかと思いますが、可能性だけでも感じていただければ幸いです。

スポンサーリンク
spdsk-side




spdsk-side