vagrantで立てたvmにswapを設定する。

vagrantのゲストサーバ側で割り当てていた物理メモリを超えるような処理をしたときにvmが落ちてしまった。
ホスト側のログにはこんな感じで出ていた。

# less /var/log/messages

Sep 10 16:39:08 r210devel kernel: Out of memory: Kill process 19223 (VBoxHeadless) score 231 or sacrifice child
Sep 10 16:39:08 r210devel kernel: Killed process 19223, UID 502, (VBoxHeadless) total-vm:3144740kB, anon-rss:15636kB, file-rss:1765760kB
Sep 10 16:39:08 r210devel kernel: EMT-1: page allocation failure. order:0, mode:0x304d2
Sep 10 16:39:08 r210devel kernel: Pid: 19232, comm: EMT-1 Not tainted 2.6.32-431.3.1.el6.x86_64 #1
vagrant status

上記で確認するとステータスは「aborted」になってしまっていた。

物理メモリの上限をあげたりしたらいいのかもしれないけど、
swapがなさそうだったのでswapを追加してみる。

以下方法。

■現状を確認する

# swapon -s
Filename                                Type            Size    Used    Priority

■スワップ用ファイルの作成。今回は1024MBで作成。

# dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 13.2406 s, 81.1 MB/s

■スワップ領域として初期化する。

# mkswap /swapfile
mkswap: /swapfile: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=c46d6690-8fe3-4555-b9f3-50d690dee94c

■スワップ領域を有効にする。

# swapon /swapfile

■追加されたか確認する。

# swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            1048568 0       -1

■再起動したときにもswapが使えるようにfstabに登録しておく。

# sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

※そもそも物理メモリ量をゲストvmが超えた場合に落ちないようにしたいけどその方法はわかっていない・・・。
このページのような現象だけどもどうしたものか・・・。
Out of Memory: Killed process process…

メモリをそんなに使わないようにするのがいいんだろうな。。

■参考URL
Vagrant+VirtualBox+CentOS環境でMySQL5.6が起動しない場合の対処法

linux スワップ(swap)領域の作成

ルートファイルシステムで「EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group **: ** blocks in bitmap, ** in gd」ってエラー出た。

ルートファイルシステムで「EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group **: ** blocks in bitmap, ** in gd」ってエラー出た。

vagrantで作ったCentOS6.5の開発環境でサーバ内の
フォルダがいたるところでおかしくなる現象が発生した。

作成したツールが悪さしたのかとか思っていたけど、
どうもrootでしか触れない箇所も一部書き換えられている
ようだったので、そうじゃないと判断。

「dmesg」、「/var/log/message」をみたら以下のようなエラーを吐いていた。

Sep  8 08:30:35 vagrant-centos65 kernel: sda: sda1 sda2 sda3
Sep  8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: [sda] Attached SCSI disk
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts:
Sep  8 08:30:35 vagrant-centos65 kernel: Refined TSC clocksource calibration: 3096.416 MHz.
Sep  8 08:30:35 vagrant-centos65 kernel: Switching to clocksource tsc
Sep  8 08:30:35 vagrant-centos65 kernel: dracut: Mounted root filesystem /dev/sda1
Sep  8 08:30:35 vagrant-centos65 kernel: SELinux:  Disabled at runtime.
Sep  8 08:30:35 vagrant-centos65 kernel: type=1404 audit(1410132625.773:2): selinux=0 auid=4294967295 ses=4294967295
Sep  8 08:30:35 vagrant-centos65 kernel: dracut:
Sep  8 08:30:35 vagrant-centos65 kernel: dracut: Switching root
Sep  8 08:30:35 vagrant-centos65 kernel: udev: starting version 147
Sep  8 08:30:35 vagrant-centos65 kernel: vboxguest 0000:00:04.0: PCI INT A -> GSI 20 (level, low) -> IRQ 20
Sep  8 08:30:35 vagrant-centos65 kernel: input: Unspecified device as /devices/pci0000:00/0000:00:04.0/input/input5
Sep  8 08:30:35 vagrant-centos65 kernel: vboxguest: major 0, IRQ 20, I/O port d020, MMIO at 00000000f0000000 (size 0x400000)
Sep  8 08:30:35 vagrant-centos65 kernel: piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: Intel(R) PRO/1000 Network Driver - version 7.3.21-k8-NAPI
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: Copyright (c) 1999-2006 Intel Corporation.
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: (PCI:33MHz:32-bit) 08:00:27:a5:8f:41
Sep  8 08:30:35 vagrant-centos65 kernel: e1000 0000:00:08.0: eth1: Intel(R) PRO/1000 Network Connection
Sep  8 08:30:35 vagrant-centos65 kernel: sd 0:0:0:0: Attached scsi generic sg0 type 0
Sep  8 08:30:35 vagrant-centos65 kernel: parport_pc 00:04: reported by Plug and Play ACPI
Sep  8 08:30:35 vagrant-centos65 kernel: ppdev: user-space parallel port driver
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (sda1): warning: mounting fs with errors, running e2fsck is recommended
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd
Sep  8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): warning: maximal mount count reached, running e2fsck is recommended
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs (dm-0): mounted filesystem with ordered data mode. Opts:
Sep  8 08:30:35 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 20: 5 blocks in bitmap, 29 in gd
Sep  8 08:30:35 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.
Sep  8 08:30:35 vagrant-centos65 kernel: NET: Registered protocol family 10
Sep  8 08:30:35 vagrant-centos65 kernel: lo: Disabled Privacy Extensions
Sep  8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready
Sep  8 08:30:35 vagrant-centos65 kernel: e1000: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
Sep  8 08:30:35 vagrant-centos65 kernel: ADDRCONF(NETDEV_CHANGE): eth1: link becomes ready
Sep  8 08:30:35 vagrant-centos65 rpc.statd[955]: Version 1.2.3 starting
Sep  8 08:30:35 vagrant-centos65 sm-notify[956]: Version 1.2.3 starting
Sep  8 08:30:39 vagrant-centos65 smbd[1342]: [2014/09/08 08:30:39.851680,  0] printing/print_cups.c:151(cups_connect)
Sep  8 08:30:39 vagrant-centos65 smbd[1342]:   Unable to connect to CUPS server localhost:631 - Connection refused
Sep  8 08:30:39 vagrant-centos65 smbd[1312]: [2014/09/08 08:30:39.852067,  0] printing/print_cups.c:528(cups_async_callback)
Sep  8 08:30:39 vagrant-centos65 smbd[1312]:   failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
Sep  8 09:37:44 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 16: 21091 blocks in bitmap, 21092 in gd
Sep  8 09:40:01 vagrant-centos65 logrotate: ALERT exited abnormally with [1]
Sep  8 09:43:50 vagrant-centos65 kernel: EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 7: 7013 blocks in bitmap, 6546 in gd
Sep  8 09:43:50 vagrant-centos65 kernel: JBD: Spotted dirty metadata buffer (dev = sda1, blocknr = 0). There's a risk of filesystem corruption in case of system crash.

ここに注目。

EXT4-fs error (device sda1): ext4_mb_generate_buddy: EXT4-fs: group 34: 9527 blocks in bitmap, 9528 in gd

どうもEXT4の「/dev/sda1」がおかしい模様。

前にvmがいきなり落ちたのが原因かも・・・。

ちなみに以下のような構成

# mount
/dev/sda1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/mapper/VgData01-LvData01 on /var/www/html type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/vagrant on /vagrant type vboxsf (uid=500,gid=500,rw)

 

# df -h
Filesystem                     Size  Used Avail Use% Mounted on
/dev/sda1                      7.3G  2.4G  4.6G  34% /
tmpfs                          939M     0  939M   0% /dev/shm
/dev/mapper/VgData01-LvData01   91G  729M   86G   1% /var/www/html
/vagrant                       863G  239G  625G  28% /vagrant

以下のページを参考に修復を開始。

vagrant up途中で止まったりvagrant sshがconnection closeでもあきらめちゃだめ、destroyしちゃだめ

システム起動時にUNEXPECTED INCONSISTENCYエラーが発生した場合は

Linuxで次回起動時にfsckを強制または抑止する方法について

/etc/fstab – ファイルシステム情報の設定

具体的には

ホスト機にディスプレイ、キーボード、マウスをつなぎ、
Vagrantfileファイル内の以下の箇所を変更。

# vb.gui = true
↓
vb.gui = true

 

$ vagrant up

ホスト機上でGUIで起動するので以下を実行。

# touch /forcefsck

一旦サーバを落とす。

# shutdown -h now

もう一回

$ vagrant up

すると途中でrootのパスワードを聞かれる。

Give root password for maintenance
(or type Control-D to continue):

ファイルシステム修復用のシェルが起動するので対象を確認する

# mount

今回は/dev/sda1なので以下のコマンドを実行

# fsck -t ext4 /dev/sda1

後はビビりながらEnterを押し続ける。

***** FILE SYSTEM WAS MODIFIED *****
***** REBOOT LINUX *****

↑上記のようなメッセージが出たら脱出

# exit

その後は普通に起動。

「/var/log/message」を確認してみる。

ちなみに今回の修復をするなかで、ルートファイルシステムでfsck場合は
シングルユーザモードで行うと書かれていたので、ゲストにSSHで
ログインしたまま

# /sbin/init 1

したら接続が切られて焦ったのでやらないほうがいい。。
この状態になったら

$ vagrant halt
$ vagrant up

で元に戻った。

あとホスト機でGUIモードで起動してrootログインしてから
シングルユーザモードになって

# fsck -t ext4 /dev/sda1

打っても稼動中って出て修復できなかった。
あー読み込み専用にしないといけなかったのかな。。

あと、
「/etc/fstab」を開きルートファイルシステムの6個目のフィールドを1に変更もやっておいたほうがよい。

historyコマンドに日付を表示させる

historyコマンドに日付を表示させるメモ

bash 3.0 以上で「HISTTIMEFORMAT」を設定します。

export HISTTIMEFORMAT='%F %T '

↑は一時的なものなので次回ログイン時に元に戻ります。
設定を永続的に行う場合は各ユーザの「.bashrc」に以下を追記します。

HISTTIMEFORMAT='%F %T '

すべてのユーザに対してまとめて設定したい場合は「/etc/profile」に追記します。

さくらインターネットでPHPファイルをhtml拡張子で動かす

さくらインターネットでPHPファイルをhtml拡張子で動かす

久々にはまったのでメモ。
↓こんなエラーやInternalが出て全然動かなかった・・・。

Not Found
The requested URL /php.cgi/index.html was not found on this server.

マルチドメイン運用の場合です。

↓ここ以下でhtmlの拡張子でphpを動かしたい。

/home/ユーザ名/www/secure/

■まずphp.cgiを設置する。
最初FTPでアップしたてりしたけどそれがいけないようだったのでsshでログインしてコピーした。
使うPHPのバージョンは諸事情により5.2・・・。

cp /usr/local/php/5.2/bin/php-cgi-mysql5.1 /home/ユーザ名/www/secure/php.cgi

権限も振っておく。

chmod 705 /home/ユーザ名/www/secure/php.cgi

■.htaccessを設置
実際にhtmlをphpとして動かすフォルダに以下の内容の「.htaccess」を設置。

DirectoryIndex index.html index.php
Action myphp-script /php.cgi
AddHandler myphp-script .php .html

これで動いた。

みんながSSHでコピーしろって書いてあるのにFTPでいけるだろとか
思ってたのがいけませんでした。。

■参考URL
さくらサーバでhtmlをphpとして扱う方法

さくらインターネットで拡張子がhtmlのファイルでPHPを実行する方法

さくらのインターネット(拡張子HTMLでPHPを実行する)

■さくらインターネットにCodeIgniterを設置する

ついでに、、さくらインターネットにCodeIgniterのプログラム置いたら「No input file specified」出た。

CodeIgniterでNo input file specifiedの対処法

上記をみて対応。。

vagrant upで新規のvmが作成されてしまった

vagrant upで新規のvmが作成されてしまった

「vagrant up」したときに今まで使っていたvmではなく新しくvmを作成してしまい、
それ以降は新しく作成したvmを利用してしまう状態になってしまった。

使った感じではさっき設定した内容が巻き戻ってるように感じられるけど、
新規でvmを作成してしまっている。
※VirtualBoxの管理画面で確認したほうがいい。。
この状態を修正するには以下のファイルを編集する

\.vagrant\machines\default\virtualbox\id

今回の現象が発生するとidファイルの内容が変わってしまっていて
新規で作成したvmを見るようになってしまっている。

その為以前のvmのidを調べる必要がある。

Windowsの場合はVirtualBoxのインストールディレクトリまで移動。
(標準ではc:\Program Files\Oracle\VirtualBox\)にVBoxManage.exeがあります。

そこで以下のコマンドを実行。

VBoxManage.exe list vms

すると仮想マシン名とその後ろにidが表示されるので
以前のvmのidをコピーし先ほどの

\.vagrant\machines\default\virtualbox\id

ファイルの中身を書き換えて保存。

その後

vagrant up

これで以前のvmが立ち上がる。

※新しく出来てしまったvmは削除しておいたほうがいいと思います。。
■参考サイト

vagrant upした時に別のvmを新規作成してしまう問題の対処

VBoxmanageコマンドの場所

Laravel4でTwigbridgeを使ってForm作成

2014/07/04 時点での話し。

Laravel4でTwigbridgeを使ってお問い合わせフォームを作成してみることに。

laravel4 フォーム構築1
laravel4 フォーム構築2

上記サイトを参考に、テンプレートエンジン部分をTwigで作成することに。

Twigを使うためにはTwigbridgeというものがあるらしいのでインストール。

$ php artisan --version
Laravel Framework version 4.2.6

4.2系だとtwigbridgeは0.6系を指定しないと駄目らしい。

rcrowe/TwigBridge

requireの指定は「0.6.x-dev」にする

require: "rcrowe/twigbridge": "0.6.*@dev"

最初0.5系いれてて沢山エラーが出て大変だった・・・。
一応twigbridgeが動くようになったのでフォーム構築再開。
しかし途中で問題が発生。フォームヘルパーがtwig内で動かない。

https://github.com/rcrowe/TwigBridge/issues/29

【Laravel】Laravel+twigのフォームヘルパーで苦労した話

↑の内容でなんとか動いた。

上記以外で、Mail::sendでTwigbridgeのテンプレート
が読み込まれなくてエラーがでた。

Unrecognized extension in file #113

TwigBridge not working for Mail #91

サービスプロバイダーの一番上に移動したらメールとんだ。

ちょっとTwigBridge慣れないな。。

psコマンドの表示結果

Linuxのpsコマンドの表示結果の内容を忘れるのでメモ。

よく使うのは

# ps auxf
a すべてのユーザープロセスを表示
u ユーザー名と開始時刻の情報を付加
x 制御端末のないプロセス情報も表示
f プロセスの親子関係をツリー状に表示

結果の見方

USER プロセスを所有するユーザー名
PID プロセス ID
%CPU プロセスの起動されてからの時間で CPU 使用時間を割ったものです。
%MEM 実メモリの使用量
VSZ 使用中の仮想メモリサイズ
RSS 使用中の実メモリサイズ
TTY プロセスの tty
STAT プロセスの状態コード。
START プロセス生成時刻
TIME プロセスが CPU を使用した累計の時間
COMMAND コマンド

STATの詳細

D 割り込み不可能な待ち状態。おもに短時間で復帰する場合の待ち状態。ディスクの入出力待ち。
R 実行可能な状態。CPUが空きさえすれば、いつでも実行可能な状態。
S 割り込み可能な待ち状態。おもに復帰時間が予測不能な長時間の待ち状態。スリープやユーザからの入力待ちなど。
T サスペンドシグナルを送られて実行中断になった状態。リジュームされるまでスケジューリングされない。
Z ゾンビ状態。子プロセスが exit して親プロセスにリープされるまでの状態。

STATの詳細:2文字目以降

+ 制御端末のフォアグラウンドプロセスグループに属している
> CPU のスケジュール優先度が上げられている
< メモリ要求に対するソフトリミットが指定されており、現在そのリミットを超えている。このようなプロセスは(必然的に)スワップされない
A ランダムなページスワップを要求した
E 終了しようとしている
L 実メモリ中にロックされたページを持っている
N スケジューリング優先度が下げられている
S FIFO ページスワップを要求した
s セッションリーダである
V vfork の間、一時中断されている
W スワップアウトされている
X トレースされているかデバッグされている

デバイスマネージャでいつの間にかネットワークアダプタが使えなくなってた件

デバイスマネージャでいつの間にかネットワークアダプタが使えなくなってた・・・。

Realtek PCIe GBE Family Controller

この現象2回目だ。

とりあえずDELLのサイトからドライバをダウンロードして
修復を選択したら直った。

Studio XPS 9100 ドライバダウンロード
Realtek RTL81XX PCI-E Network Connection, v.7011.01202010, A00

IE:テキスト入力エリアに入力した文字列がマウスで範囲選択できない場合がある

IEで文字列が選択できないときがあるという問い合わせがあったので調べてみた。

Internet Explorer においてテキスト入力エリアに入力した文字列がマウスで範囲選択できない場合があるようです。

現象

Internet Explorer 上のテキスト入力エリアに以下の構成の文字列を入力すると 2 文字目以降の文字列をマウスで範囲選択することができない場合があります。

構成: 「”半角文字(1 文字)” + “全角文字列”」

例: 「1ああああ」、「aAAAA」、「アああああ」

解決方法

文字列を選択する際に、マウスでの選択を逆側から行うか、もしくはキーボードにて Shift キー + 方向キーを使用することで、正常に選択を行うことができます。

解決してない気がするけど・・・。

元ソース

[IE] テキスト入力エリアの文字列がマウスで範囲選択できない