Virtual Machine基本設定

#Virtual Machine基本設定


---
==Dockerコンテナの場合は、第6.5章のみ実行すること。==
---

##1.CentOS6.6(Final)のインストール
###1.1 Minimal Instration Discを使う。
/Users/soushi/OneDrive/ISO/CentOS-6.6-x86_64-
minimal.iso

##2.ネットワーク周辺設定
###2.0 VMWareの設定画面で、ネットワークをShare with my Macにする。

####2.0.1 VMWare->Preferences


<img width="221" alt="Virtual Machine Basis fig1.png" src="https://qiita-image-store.s3.amazonaws.com/0/9023/4a95f323-a9e3-e66d-ba1b-3275848a7046.png">

####2.0.2 Share with my Macを選択

<img width="572" alt="Virtual Machine Basis fig3.png" src="https://qiita-image-store.s3.amazonaws.com/0/9023/b7c95f52-2dc9-764c-9749-723885a42ff6.png">

###2.1 各VMのネットワーク設定画面で、ネットワークをShare with my Macにする。
####2.1.1 

###2.1 Network Managerをオフにする。
※エラーが出るはず。この場合、追加の設定は不要。

~~~sh
chkconfig --list NetworkManager
#> error reading information on service NetworkManager: No such file or directory
~~~

設定が必要な場合、下記コマンドを実行

~~~sh
service NetworkManager stop
chkconfig NetworkManager off
service network restart
cat /etc/sysconfig/network-scripts/ifcfg-eth0 | sed -i 's/NM_CONTROLLED=no/NM_CONTROLLED=yes/g'
~~~

###2.2 IPアドレス/ホスト名/ドメイン名の設定
/etc/sysconfig/network-scripts/ifcfg-eth0を編集する。

~~~
DEVICE=eth0
ONBOOT=yes
HWADDR=VMのネットワーク設定->Advanced option
~~~

~~~sh
IPADDR=131.113.102.219
NETMASK=255.255.255.128
GATEWAY=131.113.102.129
NAMESERVER=131.113.102.130
BROADCASTADDR=131.113.102.255
HOSTNAME=g2vm1
DOMAINNAME=yamanaka.ics.keio.ac.jp

sed -i -e '/BOOTPROTO=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "BOOTPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/BOOTPROTO=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "BOOTPROTO=static" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/IPADDR=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "IPADDR=$IPADDR" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/NETMASK=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "NETMASK=$NETMASK" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/GATEWAY=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "GATEWAY=$GATEWAY" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/BROADCAST=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "BROADCAST=$BROADCASTADDR" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/IPV6INIT=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "IPV6INIT=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0;
sed -i -e '/PEERDNS=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "PEERDNS=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0;

sed -i -e '/DOMAIN=.*/d' /etc/sysconfig/network-scripts/ifcfg-eth0;
echo "DOMAIN=$DOMAINNAME" >> /etc/sysconfig/network-scripts/ifcfg-eth0;

sed -i -e '/domain.*/d' /etc/resolv.conf;
sed -i -e '/search.*/d' /etc/resolv.conf;
echo "search $DOMAINNAME" >> /etc/resolv.conf;

sed -i -e '/nameserver.*/d' /etc/resolv.conf;
echo "nameserver $NAMESERVER" >> /etc/resolv.conf;

sed -i -e '/NETWORKING=.*/d' /etc/sysconfig/network;
echo "NETWORKING=yes" >> /etc/sysconfig/network;
sed -i -e '/HOSTNAME=.*/d' /etc/sysconfig/network;
echo "HOSTNAME=$HOSTNAME.$DOMAINNAME" >> /etc/sysconfig/network;

sed -i -e '/127\.0\.0\.1.*/d' /etc/hosts;
echo "127.0.0.1    $HOSTNAME.$DOMAINNAME $HOSTNAME localhost.localdomain localhost" >> /etc/hosts
sed -i -e '/\:\:1.*/d' /etc/hosts
echo "::1    $HOSTNAME.$DOMAINNAME $HOSTNAME localhost.localdomain localhost" >> /etc/hosts
reboot;
~~~

##3 設定値の確認
###3.1 ホスト名・ドメイン名を確認
※domainnameは(none)でOK。この設定値は[不要](http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32230&forum=10)となった。

~~~sh
hostname
#>vm1.soushi.jp
hostname -d
#>soushi.jp
ifconfig
~~~

##4 OpenSSHの導入
###4.1 yumのアップデート

~~~sh
yum update
yum check-update
yum -y install openssh-clients
~~~

###4.2 ユーザーsoushiを追加する
こちらの[マニュアルを参照](./Linuxのユーザー追加〜ssh公開鍵追加まで.md)



###4.2.2 鍵認証接続をテストします。
※ローカル端末で実行

~~~sh
ssh soushi@$server
exit
~~~


###4.4 SSHでのログインを鍵認証のみ許可する

#### SSH2による接続のみ許可
~~~sh
sudo sed -i -e 's/^Protocol/#Protocol/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#Protocol/a Protocol 2' /etc/ssh/sshd_config

#### RSA公開鍵による認証
sudo sed -i -e 's/^RSAAuthentication/#RSAAuthentication/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#RSAAuthentication/a RSAAuthentication yes' /etc/ssh/sshd_config

#### rhostsでの認証を禁止
sudo sed -i -e 's/^RhostsRSAAuthentication/#RhostsRSAAuthentication/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#RhostsRSAAuthentication/a RhostsRSAAuthentication no' /etc/ssh/sshd_config

#### パスワードでの認証を禁止（公開鍵による認証のみにする）
sudo sed -i -e 's/^PermitEmptyPasswords/#PermitEmptyPasswords/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#PermitEmptyPasswords/a PermitEmptyPasswords no' /etc/ssh/sshd_config
sudo sed -i -e 's/^PasswordAuthentication/#PasswordAuthentication/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#PasswordAuthentication/a PasswordAuthentication no' /etc/ssh/sshd_config

#### チャレンジ/レスポンス認証を無効化する
sudo sed -i -e 's/^ChallengeResponseAuthentication/#ChallengeResponseAuthentication/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#ChallengeResponseAuthentication/a ChallengeResponseAuthentication no' /etc/ssh/sshd_config

#### 設定を反映
sudo service sshd restart
~~~

#### (オプション)VMware ESXi上の仮想マシンの場合、下記を実行してMACアドレスの値を適切な値に書き換えること。
#####1 ローカルで実行します。

~~~sh
scp ~/OneDrive/Scripts/ConfigureMACaddressForVMsOnESXi.sh root@$IPADDR:~/vmwarenetrewrite
~~~

#####2 VMに接続します。
~~~sh
ssh -i ~/OneDrive/.ssh/id_rsa root@$IPADDR
~~~

#####3 設定を書き込みます。
==(次回の再起動時に適切なMACアドレスが設定されます。)==

~~~sh
chmod +x /root/vmwarenetrewrite
echo "/root/vmwarenetrewrite" >> /etc/rc.d/rc.local
~~~

#### (オプション)必要に応じて、rootでのログインを禁止します。
~~~sh
#### rootでの認証を禁止
sudo sed -i -e 's/^PermitRootLogin/#PermitRootLogin/g' /etc/ssh/sshd_config
sudo sed -i -e '/^#PermitRootLogin/a PermitRootLogin no' /etc/ssh/sshd_config
~~~

##5 実験用設定
###5.2 ipv6, iptables, SELINUXを無効にする。

~~~sh
sudo echo 'options ipv6 disable=1' > /etc/modprobe.d/disable-ipv6.conf
sudo service iptables stop
sudo chkconfig iptables off
sudo chkconfig ip6tables off
sudo sed -i -e 's/^SELINUX=/#SELINUX=/g' /etc/selinux/config;
sudo sed -i -e '/^#SELINUX/a SELINUX=disabled' /etc/selinux/config;
sudo setenforce 0
~~~

##6 開発環境の導入
==※rootユーザーで行う。==

###6.1 環境変数を設定
※/etc/profileに、LANGとLC_ALLの環境変数を書き込んでおく。

~~~sh
sudo sed -i "s/^\(LANG.*\)/#\1/g" /etc/sysconfig/i18n
sudo echo 'LANG=en_US.utf8' >> /etc/sysconfig/i18n
sudo echo 'LC_CTYPE=en_US.utf8' >> /etc/sysconfig/i18n
sudo echo 'LC_NUMERIC="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_TIME="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_COLLATE="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_MONETARY="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_MESSAGES="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_PAPER="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_NAME="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_ADDRESS="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_TELEPHONE="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_MEASUREMENT="en_US.utf8"' >> /etc/sysconfig/i18n
sudo echo 'LC_IDENTIFICATION="en_US.utf8"' >> /etc/sysconfig/i18n
~~~

###6.2 Cコンパイラおよびその他ツールを導入

- IPv6のSingle Request Reopenを有効にします。理由は[こちら](http://www.kunitake.org/chalow/2012-11-02-1.html)

- 最新バージョン以外のCentOSでは、下記を行うこと。

~~~sh
sudo sed -i -e "s|mirror\.centos\.org/centos/\$releasever|vault\.centos\.org/6.6|g" /etc/yum.repos.d/CentOS-Base.repo
sudo sed -i -e "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo
sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo
echo 'options single-request-reopen' >> /etc/resolv.conf
~~~

~~~sh
yum -y update
~~~

- カーネルのアップデートが含まれていた場合、一旦ここで再起動。

~~~sh
shutdown -r now
~~~

~~~sh
LANG=C yum -y groupinstall "Development tools"
yum -y install man man-pages man-pages-overrides man-pages-ja
yum -y check-update
yum -y install gcc*
yum -y install gcc gcc-c++
yum -y install which
yum -y install tcpdump
yum -y install uuid*
yum -y install e2fsprogs*
yum -y install libuuid*
yum -y install libtool*
yum -y install tree
yum -y install wget
yum -y install git
yum -y install unzip
yum -y install python
yum -y install perl
yum -y install tar
yum -y install ruby
yum -y install traceroute
yum -y install nmap
yum -y install man
yum -y install jq
yum -y install nc
yum -y install screen
yum -y install openssh
yum -y install openssh-server
yum -y install openssh-clients
yum -y install nethogs
yum -y install openssl-devel
yum -y install readline-devel zlib-devel
yum -y install libffi-devel
yum -y --enablerepo=epel,remi,rpmforge install libxml2 libxml2-devel
yum -y --enablerepo=epel,remi,rpmforge install libxslt libxslt-devel

mkdir /usr/local/download
cd /usr/local/download
wget http://launchpad.net/byobu/trunk/3.16/+download/byobu_3.16.orig.tar.gz
tar zxvf byobu_3.16.orig.tar.gz
cd byobu-3.16
./configure --prefix="/usr/local/byobu"
make
make install
echo 'export PATH=$PATH:/usr/local/byobu/bin' >> /etc/profile
export PATH=$PATH:/usr/local/byobu/bin
~~~

###6.3 ntpdを導入

~~~sh
yum -y install ntp
chkconfig ntpd on
echo "restrict 133.243.238.163 mask 255.255.255.255 nomodify notrap noquery" >> /etc/ntp.conf
echo "restrict 133.243.238.164 mask 255.255.255.255 nomodify notrap noquery" >> /etc/ntp.conf
echo "restrict 133.243.238.243 mask 255.255.255.255 nomodify notrap noquery" >> /etc/ntp.conf
echo "restrict 133.243.238.244 mask 255.255.255.255 nomodify notrap noquery" >> /etc/ntp.conf
echo "server ntp.nict.jp" >> /etc/ntp.conf
service ntpd restart
ntpq -p
echo "# 毎朝5時にソフトウェアクロックがハードウェアクロックに反映" >> /etc/crontab
echo "0 5 * * 0 root /sbin/hwclock -w > /dev/null 2>&1" >> /etc/crontab
~~~

###6.4 Fedora EPEL, remi, RPMForgeのリポジトリをyumに追加する。
####6.4.1 ダウンロード(CentOS6の場合)

~~~sh
mkdir /usr/local/download
cd /usr/local/download
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
~~~
####6.4.2 インストール

~~~sh
rpm -Uvh epel-release-6-8.noarch.rpm remi-release-6.rpm rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
~~~

####6.4.3 設定
リポジトリが追加できたら、それぞれのリポジトリをいったん無効化します。
具体的に言うと、設定ファイルのenabledという項目を0に変更し、yum実行時に明示的に指定されない限り、新たに追加したリポジトリが利用されないようにします。
ちなみに、remiはもともとenabled=0となっているので、Fedora EPELとRPMForgeのみviコマンドで編集します。
※意図せず、標準外のリポジトリ（今回追加したリポジトリ）が使われないための対策です。

#####6.4.3.1 /etc/yum.repos.d/epel.repoのenabledを0に変更。
~~~sh
sed -i -e 's/^enabled/#enabled=/g' /etc/yum.repos.d/epel.repo
sed -i -e '/^#enabled/a enabled=0' /etc/yum.repos.d/epel.repo
~~~

#####6.4.3.2 [rpmforge]のenabledを0に変更。
~~~sh
sed -i -e 's/^enabled/#enabled=/g' /etc/yum.repos.d/rpmforge.repo
sed -i -e '/^#enabled/a enabled=0' /etc/yum.repos.d/rpmforge.repo
~~~

#####6.4.4 リポジトリを使うとき

~~~sh
yum -y --enablerepo=remi,epel,rpmforge install <<パッケージ名>>
~~~

###6.5 tmuxをインストールします。

~~~sh
yum -y --enablerepo=rpmforge install tmux
~~~

###6.6 その他便利ツールをインストールします。

~~~sh
# pythonのパッケージ管理ソフトpip
yum -y --enablerepo="epel" install python-pip
# カラーリングが行えるcat、Pygments
sudo yes | pip install pygments
echo "alias ccat='pygmentize -g'" >> /etc/profile
~~~

###6.7 Ruby on Railsをインストールします。

- rbenvのインストール(システムワイドにインストールする必要があります)
- まず sudoers を設定します。
- デフォルトで PATH が参照しない場所にインストールしますので、sudo がそれを認識しないと困ります。.profile 等で操作ユーザの PATH を変更しても通常は sudo はそれを認識してくれませんので、操作ユーザの PATH を sudo が引き継げるように sudoers を設定します。

~~~sh
sudo visudo
~~~

~~~
# :/usr/local/rbenv/bin:/usr/local/rbenv/shimsの2つを追記する
Defaults secure_path=<現在secure_pathに設定されている値>:/usr/local/rbenv/bin:/usr/local/rbenv/shims
Defaults env_keep += "PATH RBENV_ROOT"
~~~

- /usr/local/rbenv に rbenv および rbenv のプラグインとして ruby-build をインストールします。
- 以後、バージョンアップする場合はそれぞれのディレクトリに移動して sudo git pull すれば簡単に最新版にできるようになります。

~~~sh
export RBENV_ROOT=/usr/local/rbenv
export PATH=${RBENV_ROOT}/bin:${PATH}
sudo git clone git://github.com/sstephenson/rbenv.git ${RBENV_ROOT}
sudo git clone git://github.com/sstephenson/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build
~~~

- 配置ができたら rbenv の初期設定(ディレクトリ作成等)を行います。rbenvのマニュアルだと .profile に記述することで自動化してますが、今回の環境では root 権限がないとエラーになりますので、予め手動で実行する必要があります。

~~~sh
sudo rbenv init -
~~~

- 最後に、rbenv を自分の環境から呼べるよう、.profile に設定を追加します。

~~~sh
su - vagrant
~~~

~~~sh
bash -c 'cat <<\__EOT__ >> ~/.bash_profile
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
__EOT__'
~~~

~~~sh
su -
~~~

~~~sh
bash -c 'cat <<\__EOT__ >> ~/.bash_profile
export RBENV_ROOT="/usr/local/rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"
__EOT__'
~~~

- 設定を追加したらシェルを再起動します。

~~~sh
exec ${SHELL} -l
sudo rbenv install -l
~~~

- Rubyの最新版(2.2.3)をインストール
- Ruby のバージョンをインストールする場合は、sudo を通して renv install を実行します。

~~~sh
sudo rbenv install 2.2.3
sudo rbenv versions
sudo rbenv global 2.2.3
sudo rbenv version
sudo rbenv rehash
~~~

- Railsのインストール

~~~
sudo gem install nokogiri -- --use-system-libraries
sudo gem update --system
sudo gem install --no-ri --no-rdoc rails
sudo gem install bundler
sudo gem install compass-rails
sudo rbenv rehash
sudo rails -v
~~~

- postgresqlのインストール
- [こちらで最新バージョンを確認](http://www.postgresql.org/download/linux/redhat/)後、PostgreSQL Yum Repositoryの項目を実行。
- ==RPMリポジトリをONにすること！==

~~~sh
su
~~~

~~~sh
yum -y remove postgresql*
yum -y install yum install postgresql-devel.x86_64 --enablerepo=rpmforge
yum -y install http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm --enablerepo=rpmforge
yum -y install postgresql94-server postgresql94-contrib --enablerepo=rpmforge
yum -y install nodejs npm --enablerepo=epel
service postgresql-9.4 initdb
chkconfig postgresql-9.4 on
~~~

~~~sh
su - vagrant
~~~

~~~sh
sudo gem install pg
~~~

- postgresqlを調整

~~~sh
sudo find / -name pg_hba.conf
sudo vi /var/lib/pgsql/9.4/data/pg_hba.conf
~~~

- 下記のように変更

~~~
# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# ↓ 下記の通り書き換える(trustは無条件,md5が推奨)
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             10.0.0.0/8              md5
host    all             all             172.16.0.0/12           md5
host    all             all             192.168.0.0/16          md5
~~~

~~~sh
sudo /etc/rc.d/init.d/postgresql-9.4 start
sudo -u postgres psql
~~~

- ここまででpostgresqlのセットアップは完了。Railsで使う場合は追加の設定が必要。続きは[RailsTechnics.md](./RailsTechnics.md)を参照

###6.7(オプション)VMware toolsをインストールする。
==VMware ESXi上にあるVMの場合、ESXiホストから電源オン/オフなどの操作を行えるようにするため==、VMware toolsをインストールする必要があります。

##6.5 第6章以降の全コード

[Virtual Machine Setup.md.sh](/Users/soushi/OneDrive/Scripts/Virtual Machine Setup.md.sh)に全てのコマンドを記載


##7 開発環境の構築完了
###Apache Stormを実行したい。
こちらの[マニュアルを参照](/Users/soushi/OneDrive/Manuals/Apache Storm.md)