三蔵開発メモ

iOS、Androidアプリ開発、WEB開発、AWS等の話題を共有していきます。

kvmでvmをコピーする方法と、ネットワーク周りの設定

vmのコピー

ホスト機で以下コマンドを実行

virt-clone --original [ベースのvmの名前] --name [新しいvmの名前] --file /var/lib/libvirt/images/[新しいvmの名前].img

MACアドレス確認

ホスト機で以下のコマンドを実行し、新しいMACアドレスを控える

sudo virsh domiflist [新しいvmの名前]
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet1      bridge     br0        virtio      zz:zz:zz:zz:zz:zz

MACアドレスを書き換え

ゲスト機でネットワーク情報を書き換える

vi /etc/sysconfig/network-scripts/ifcfg-eth0
----------
#マックアドレスを上記のものに書き換え
#uuidもuuidgenして出力されたものに書き換え
#ipアドレスも新しいものに書き換え
----------

さらに、こっちのファイルも書き換える

vi /etc/udev/rules.d/70-persistent-net.rules
--------------
# PCI device 0x8086:0x100e (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="xx:xx:xx:xx:xx:xx", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="zz:zz:zz:zz:zz:zz", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
--------------

上記のようになっていて、eth0の方は元のVMMACアドレスで、eth1の方は上記で確認したMACアドレスになっているはずなので、
eth0の方を削除して、eth1をeth0にする

reboot

再起動して完了
virtualboxの複製の場合でもMACアドレス書き換え以下の手順は共通。

Vagrant VirtualBox CentOSで共有フォルダをマウントしてくれないときに試した方法

VirtualBoxのアップデートなどをすると、
guest additionsが更新されたりして、うまく既存のVMのマウントがされなくなってしまうことがあったので、
試したことメモ。

その1、vagrant vbguestでguest additonsをアップデート

ホスト機のコマンドプロンプトで以下を試す

vagrant plugin install vagrant-vbguest
vagrant vbguest
vagrant reload

これで無事アップデートされればOK

その2、カーネルアップデート

その1だけだとうまくいかない場合は、 ゲストVMカーネルをアップデートするとうまくいく。
ゲスト機で以下のコマンドを試す。

sudo yum install kernel-devel gcc

コマンドプロンプトVM再起動

vagrant plugin install vagrant-vbguest
vagrant vbguest
vagrant reload

その3、guest additionsを入れなおす

その1でも、その2でもうまくいかなかったら、
CDからguest additionsを入れなおしたらうまくいった。

まず、VirtualBoxGUIで対象のVagrantVMを選択し、
設定→ストレージ→IDEコントローラーにCDを空で追加する(プラスボタンを押すと追加できる)

ゲスト機内で必要パッケージ追加
sudo yum install bzip2 kernel-devel
sudo yum install kernel kernel-tools
カーネルバージョン確認
sudo yum list installed | grep kernel

kernelとkernel-develのバージョンが一緒になっていればOK

guest additionsのCDをセットして起動

VirtualBoxGUIVMを起動し、右クリック→表示→ウィンドウが出る→ツールバーの「デバイス」を選択→Guest Additions CDイメージの挿入
ゲスト機にログインして以下のコマンド実行

sudo mkdir /media/cdrom
sudo mount /dev/cdrom /media/cdrom
cd /media/cdrom
sudo sh VBoxLinuxAdditions.run

無事インストールされるはずなので、
その後コマンドプロンプトvagrant reloadすれば完了。
マウントもされるはず。

まとめ

guest additonsはゲスト機とホスト機のバージョンが違うと、
vagrantは自動で最新に更新してくれるらしいが、
そこで既存Ver削除→新Verインストールと手順を踏んでいて、
既存削除後新Verをインストールするときにこけると、guest additionsが消えてしまうらしい。
(実際フォルダが空になってました)
その時は少し手間ですが入れなおすのがよさそうです。

AWSのEC2のt2.microでwordpressを動かすときにやっておいた方が良いapacheとmysqlの設定

t2.microなど低スペックのサーバーでwordpressを動かすと
mysqlが落ちたり、apacheがメモリを食い尽くしてしまうことがあったので、
やった設定をメモ。

apacheの設定

vi /etc/httpd/conf/httpd.conf
----------
#preforkの値を以下に変更
<IfModule prefork.c>
StartServers      10
MinSpareServers   10
MaxSpareServers   10
ServerLimit       10
MaxClients        10
MaxRequestsPerChild  50
</IfModule>
----------

mysqlの設定

vi /etc/my.conf
----------
#innodb_buffer_pool_sizeがmysql5.5だと128Mなので半分にする
[mysqld]
innodb_buffer_pool_size = 64M
----------
service mysql restart
mysql -u root -p
mysql>SHOW VARIABLES LIKE "innodb_%_size";
(バッファサイズ確認)

これでひとまず落ち着いているが、
もしかしたらもっとよいしきい値はあるかもしれません。

kvmでvmのホスト名、マシン名を変更する方法

kvmvmを動かしているときにvmの名前を変えるのに少し手間取ったのでメモ

 設定ファイルを変更

まずvmをvirsh stopコマンドで止める

uuidgen
(出力されたものをコピペしておく)
virsh edit vm名

このコマンドを実行すると、設定xmlが表示されるので 以下の項目三箇所を新しいvm名に書き換える
nameは新しいvm
uuidは新しいuuid(先ほどのuuidgenコマンドで発行したもの)
source fileは大体vm名.imgとかになってると思うので、
新しいvm名.imgに変更する。

<name></name>
<uuid></uuid>
<source file='/vmimgpath/vmname.img'/>

新しいvm名にimgも変更

cp /[vmのパス]/[今のvm名].img /[vmのパス]/[新しいvm名].img

リストに新しいvmが入っているか確認し、 入っていれば古いvm設定を削除。
イメージも削除。

virsh list --all
virsh define 古いvm

最後にvirsh startをしてvmを起動してあげれば完了

apache2.4でhttpsアクセスを行う設定まとめ

検索するとたくさん出てきますが、 自分用にまとめました。

必要なモジュールインストー

yum install mod_ssl -y
yum install openssl -y

vhostsに設定したい場合

vi /etc/httpd/conf.d/mydomain.test.conf
----------
#http用の設定

#中略

#以下をvhostsファイルに追加
<VirtualHost *:443>
  DocumentRoot /var/www/html/mydomain/
  ServerName mydomain.test
  ErrorLog logs/secure_error_log
  CustomLog logs/secure_access_log combined

  SSLEngine on
  SSLCertificateFile /etc/pki/tls/certs/ca.crt
  SSLCertificateKeyFile /etc/pki/tls/private/ca.key
  <Directory /var/www/html/mydomain>
      AllowOverride All
  </Directory>

</VirtualHost>
----------

この場合、証明書を発行している場合は、
SSLCertificateFile
SSLCertificateKeyFile
この二つはおいてある場所をちゃんと指定する。
デフォルトのダミーキーは、mod_sslをインストールすると自動で作られる、

/etc/httpd/conf.d/ssl.conf

のファイル内に書いてあるので、それを指定する。
ssl.confのvhost設定はコメントアウトしておく

デフォルトのまま設定する場合

vhostsとか使ってない場合は、
mod_sslを設定したときに作られた、ssl.confファイルを変更する

vi /etc/httpd/conf.d/ssl.conf
----------
#この個所を発行した証明書の場所に変更
SSLCertificateFile /etc/pki/tls/certs/ca.crt
SSLCertificateKeyFile /etc/pki/tls/private/ca.key

#以下の項目をhttpの通信でやっている用に変更
DocumentRoot 
ServerName 
ErrorLog 
CustomLog 
<Directory>
      
</Directory>
----------

ssl.confはvhosts用のvhostsファイルなので、vhostsの時と同じように書き換えればok

MongoDB Ver.2系のログローテート

MongoDBでのログローテートがいまいちうまくいかなかったのでメモ。 以下の設定では一応動いた。 公式のドキュメント通りに killall -SIGUSR1 mongod これを使うとクラッシュしてしまったので、対応。(3系なら killall -SIGUSR1 も動くのかも)

/var/log/mongo/mongod.log {
    weekly
    missingok
    rotate 4
    compress
    notifempty
    create
    postrotate
        /usr/bin/pkill -USR1 mongod
        rm /var/log/mongo/mongod.log.????-??-??T??-??-??
    endscript
}

SELinux有効時にapache管理下の場所でファイルをアップロードしたときにForbidden等になってアクセスできないときの対処法

SELinuxを有効にしているwebサーバーで、 新しいファイルをアップロードすると、アクセスができなくなってしまいはまったのでメモ。

まずどんなラベルがついているかチェック。

ls -Z
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache unconfined_u:object_r:admin_home_t:s0 new.html

この場合、index.htmlはアクセスできていたのだが、
新しくアップロードしたnew.htmlはアクセスができなかった。
同様のラベルをnew.htmlにもつけてあげることにより解決する。

sudo chcon system_u:object_r:httpd_sys_content_t:s0 new.html
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 index.html
-rwxrwxrwx. apache apache system_u:object_r:httpd_sys_content_t:s0 new.html

auditログでdeniedになっている個所をチェックするとはまりポイントがわかる

less /var/log/audit/audit.log | grep denied