ラベル CentOS の投稿を表示しています。 すべての投稿を表示
ラベル CentOS の投稿を表示しています。 すべての投稿を表示

2014年3月7日金曜日

sftp接続できなくなった for Coda2

Vagrantで作業してたところ、Coda2というかsftp接続ができなくなった。
次のようなエラーメッセージが出ます。

Coda2のエラーメッセージ

サーバ “ホスト名” に接続できませんでした。
Unable to extract public key from private key file: Wrong passphrase or invalid/unrecognized private key file format

sftpコマンド試してみる

sshは接続できるので、sftpコマンドで接続したところ同様に接続できませんでした。
$ sftp 192.168.33.10
Received message too long 1433626990
Coda2のエラーメッセージと違いこちらはなんとなく原因がわかりました。 事前に設定していた.bashrcの内容をコメントアウトしたら無事接続できました。

rvmをコメントアウト

次の1行をコメントアウトしただけです。
rvm use 2.1.1
さすがにコメントアウトは不便なので、
sftp接続の時に処理されないように.bashrcを修正します。

.bashrcの修正

CentOSでsftp接続の場合は次の環境変数が設定されていたのでこれを使用して、.bashrcの先頭の方に次のように追記しました。
[ -z "$PS1" ] && return

ちなみに環境変数の差分取ってみたところ、
sftp接続限定の場合は、BASH_EXECUTION_STRING変数を利用してもよいかもしれません。
# CentOS6の場合
if [ "$BASH_EXECUTION_STRING" = "/usr/libexec/openssh/sftp-server" ]; then
 return
fi

# または正規表現でマッチさせる
if [[ "$BASH_EXECUTION_STRING" =~ sftp ]]; then
  return
fi

結論

対話的じゃないときは余計なことしないように、$PS1で条件分岐した方が無難ですね。
Debian Wheezyの/etc/bash.bashrc
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

CentOS
/etc/bashrc
# are we an interactive shell?
if [ "$PS1" ]; then

OSX
/etc/bashrc
# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

シェル環境を見直すよい機会となりました。

2014年1月23日木曜日

Vagrant環境でMySQL5.6が起動しない?

VagrantでCentOS6.5でMySQLインストールしても起動しない・・・、
MySQL5.6だから?とかmy.cnfの設定がダメ?とかいろいろ考えすぎましたが、
デフォルトでも起動しないためそんなことはないようです。
ログには Cannot allocate memory・・・・と、
空きメモリーあるんだけどなと思いつつもinnodb_buffer_pool_sizeを小さくしてもダメでした。
[Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

対策

メモリー(物理)を増やすほど富豪ではなかったのでswap領域を追加してみることにしました。

swap領域の確認

swapon -s
Filename    Type  Size Used Priority
確かにありません・・・。

スワップ領域作成

容量は環境に合わせて適宜変更してください。
sudo dd if=/dev/zero of=/swapfile bs=1024k count=512
sudo mkswap /swapfile
sudo swapon /swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

再起動しても反映されるように修正

sudo vi /etc/fstab
# 次の行を追記
/swapfile swap swap defaults 0 0 

OSのスワップの利用頻度を低くする

できるだけスワップしない用に設定する(0〜100) 100の方が多くスワップ領域を使用する
vi /etc/sysctl.conf
vm.swappiness=10
sysctl -p 

これで無事にMySQL5.6が起動したのでいろいろ検証できます。
ちなみにPHPでもワーニング出ていたのが解消しました。
 PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/gd.so' - libvpx.so.0: cannot map zero-fill pages: Cannot allocate memory in Unknown on line 0
ここにもさりげなくCannot allocate memoryが。
ワーニング?・・・レベルなのかな・・・

2012年5月14日月曜日

KVMで仮想環境構築 for Ubuntu Server 12.04

近頃ずいぶん便利になった仮想化技術ですが、クリーンインストール環境がたまにほしくなるので、
KVM + QEMUを利用してCentOS 6.2Ubuntu Server 12.04のインストールとゲスト環境の複製までやってみます。

ホスト環境はこれまでセットアップしてきたUbuntu Server 12.04を利用します。

ハードウェアの前提確認

まずKVMを導入するにはCPUが仮想化に対応しているかホスト環境で確認します。
IntelのCPUの場合は、次のようにvmxが含まれれば対応しています。

・Intel VTの場合
grep vmx /proc/cpuinfo

flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts tpr_shadow vnmi flexpriority
・AMD-Vの場合
grep svm /proc/cpuinfo

OSのダウンロード

インストールに使用するCentOS 6.2 と Ubuntu Server 12.04をダウンロードします。
cd /usr/local/src
curl -LO http://mirror.symnds.com/distributions/CentOS-vault/6.2/isos/x86_64/CentOS-6.2-x86_64-minimal.iso
curl -LO http://ftp.iij.ad.jp/pub/linux/ubuntu/releases/precise/ubuntu-12.04.3-server-amd64.iso

ネットワークの設定(ブリッジ接続)

・参考
https://help.ubuntu.com/12.04/serverguide/network-configuration.html#bridging
http://www.linux-kvm.org/page/Networking

・bridge-utilsのインストール
sudo apt-get install bridge-utils
・設定ファイルの修正
vi /etc/network/interfaces 次のように修正して保存する
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto br0
iface br0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_maxwait 0
bridge_fd 0
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 8.8.8.8
dns-search example.local

・ネットワークを再起動
sudo /etc/init.d/networking restart

・ネットワークの設定確認(br0の追加)
ifconfig -aの内容
br0       Link encap:Ethernet  HWaddr **:**:**:**:**:**  
    inet addr:192.168.1.100  Bcast:192.168.1.255  Mask:255.255.255.0
    以下省略

ネットワークの設定(iptables)

・/etc/sysctl.confの修正
vi /etc/sysctl.conf
次の内容を追記して保存する
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.ipv4.ip_forward = 1
・設定を読み込み
sysctl -p /etc/sysctl.conf

KVM + QEMU のインストール

sudo apt-get install qemu-kvm virt-manager virt-viewer

イメージファイル作成

適宜容量は変更してください。
qemu-img create -f qcow2 /var/lib/libvirt/images/centos6.img 160G
qemu-img create -f qcow2 /var/lib/libvirt/images/ubuntu1204.img 160G
参考
qcow2形式なので、作成されるイメージファイルが160GB使用するわけではありません。
以下の手順で最小構成インストール直後のファイルサイズは3.3GB(centos6)と2.6GB(ubuntu1204) でした。またvirt-cloneで作成したファイルはそれ以下のサイズとなりました。

ゲストOSのインストール

・CentOS 6.2
virt-install --connect qemu:///system \
 --name=centos6 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=virtio26 \
 --disk path=/var/lib/libvirt/images/centos6.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/CentOS-6.2-x86_64-minimal.iso \
 --network bridge=br0 \
 --graphics vnc,port=5900,password=foobar,listen=0.0.0.0,keymap=ja
・Ubuntu Server 12.04
virt-install --connect qemu:///system \
 --name=ubuntu1204 \
 --connect=qemu:///system \
 --ram=2048  \
 --vcpu=2 \
 --os-type=linux \
 --hvm \
 --os-variant=ubuntuprecise \
 --disk path=/var/lib/libvirt/images/ubuntu1204.img,size=160,format=qcow2 \
 --cdrom=/usr/local/src/ubuntu-12.04-server-amd64.iso \
 --network bridge=br0 \
 --graphics vnc,port=5901,password=foobar,listen=0.0.0.0,keymap=ja

VNC接続

・VNCで使用するポートを開ける
環境に合わせて適宜変更してください。
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5900:5901
・VNCクライアントで接続して各ゲストOSをインストールする
各OSのインストールは省略いたしますが、ホスト名、IPアドレス、VNCのポート番号などは
マスター作成用に普段使用しないものを割り当てた方がよいかと思います。
セットアップが完了した仮想環境は複製して使い回せるため1台のサーバに複数の環境を導入する場合や、
複数のサーバに展開する場合を考慮してあらかじめ設計するとよいでしょう。

インストール完了後に再起動していない模様

OSインストールが環境してvirshコマンドでゲスト環境を確認したところ
いずれも状態がシャットオフで起動していませんでした。
virsh list --all
Id Name                 State
----------------------------------
  - centos6              shut off
  - ubuntu1204           shut off
・virshコマンドでゲストOSを起動します
virsh start centos6
virsh start ubuntu1204
・確認
virsh list --all
 Id Name                 State
----------------------------------
  1 centos6              running
  2 ubuntu1204           running

virshでゲストOSの再起動やシャットダウンができない

ホスト環境からvirsh shutdownコマンドを実行してもゲスト環境(centos6)がシャットダウンせず実行中のままでした。
この問題は、acpidをインストールして解決します。
・ゲストOSにacpidをインストールする
・CentOS 6.2 の場合
sudo yum install acpid.x86_64
/etc/init.d/acpid start

・Ubuntu Server 12.04の場合(最小構成でもインストールされていたためこの手順は不要です)
sudo apt-get install acpid service acpid start
ホスト環境からシャットダウンするか確認してみます。
virsh shutdown centos6
virsh shutdown ubuntu1204
どちらもシャットダウンできました。
virsh list --all
 Id 名前               状態
----------------------------------
  - centos6              シャットオフ
  - ubuntu1204           シャットオフ
これでゲスト環境の準備は完了です。次にゲスト環境を複製を試してみます。

クローン作成

・複製前の準備
一通りセットアップが完了した状態で不要なログなどを削除してから
シャットダウンして配布用マスターとして利用します。

・virtc-cloneコマンドでゲスト環境のクローン作成
virt-clone --connect=qemu:///system \
  -o centos6 \
  -n centos6clone \
  -f /var/lib/libvirt/images/centos6clone.img
・定義ファイルを一部修正
virsh edit centos6clone なぜかディスクがraw形式になっていたのでrawをqcow2に修正しました。
<disk type='file' device='disk'>:
<driver name='qemu' type='qcow2'/>:

vncのポートが重複していると起動しないため、graphicsタグを削除するかポート番号を変更します。
<graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
<listen type='address' address='0.0.0.0'/>
</graphics>
<video>
<model type='cirrus' vram='9216' heads='1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>

virt-cloneがMACアドレス適当に割り当ててくれているのでこれをそのまま利用しますが、
CentOSではネットワーク設定に問題があり修正が入ったのでこのMACアドレスをメモしてください。
<interface type='bridge'>
<mac address='52:54:00:1f:b3:76'/>

・複製したゲストOSを起動する
virsh start centos6clone
・ホスト名を変更する(CentOS)
vi /etc/sysconfig/network
HOSTNAME=kvm2
・ホスト名を変更する(Ubuntu)
vi /etc/hostname
kvm3
・IPアドレスとMACアドレスの変更(CentOS)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
HWADDR=52:54:00:1f:b3:76
IPADDR=192.168.1.101
CentOSでは、virt-cloneで作成したイメージで起動すると、eth0がeth1に書き変わってしまいネットワークの起動に失敗しました。同じ現象と思われる記事 http://d.hatena.ne.jp/ngyuki/20110805/p1 もあるでの私だけではないようです。
dmesgには次のようなログが出力されます。
udev: renamed network interface eth0 to eth1
・eht0がリネームされた場合は次のファイルを削除する(CentOS)
sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
・IPアドレスとMACアドレスの変更(Ubuntu)
vi /etc/network/interfaces
iface eth0 inet static
        address 192.168.1.102
再起動してホスト名とIPアドレスが変更されていることを確認します。
reboot
以上でゲスト環境の複製ができました。

kvm環境すごく便利ですね。
OpenStackやEucalyptusとまではいかなくても、
小規模なプライベートクラウドなら自作できそうですね。