旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【Linux】historyコマンドの保存数 表示件数を調整する

今日は簡単に。

最近vmdkファイルを頂いて復元して云々なんて 別の人が作ったイメージを復元して仮想環境を作ることがあったんですが まぁ指示通りにやってもエラーが出たりするわけですよ。

そこでたまに使うのがhistory機能

# history | grep hogehoge

なんてことしたり、今までのhistory確認してみたりしながら色々設定しなおしたり、 何したかを確認したりするんですが。

デフォルトで設定されているのは1000件までで、ちょうど忘れた頃にhistoryが消えるんですよ。

なので保存されている件数の上限をあげます。

.bashrcに以下を追加します。

HISTSIZE=10000

ついでに時間とかを出したい場合

HISTTIMEFORMAT='%Y/%m/%d %H:%M:%S '

この記述も追加してあげる。

追加したら反映させます。

# source .bashrc

これでhistoryで出てくる保存数が増えて日時が追加されます。

たまにあると便利なんですよねhistory

【Linux】VirtualBoxでLinuxのWindow表示を広げる

そんな設定することもないからいっか。。。

と思うものほど備忘録に書くものである。

VirtualBoxを使ったりしているとsshでローカルから接続するまであの小さな画面で対応しなければいけない。 とはいえifconfig -aなんてやったときethの情報が隠れて見えなくなってしまうことがある。

不便極まりないのでその辺の設定をする一瞬だけでも画面を大きく。

# vim /boot/grub/grub.conf

この設定ファイルにある16行目あたり

kernel /vmlinuz-2.6.32-358.18.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=VolGroup/lv_root LANG=ja_JP.UTF-8 rd_NO    _DM rhgb quiet vga=792

ここのquietの後にスペースを空けてvga=792を追記して保存して再起動

# reboot

これで大きめの画面で作業することができます。

sshで接続できるようになったらただでかい画面なだけでちょっと邪魔ですけどね。 vgaについては

http://en.wikipedia.org/wiki/VESA_BIOS_Extensions#Linux_video_mode_numbers

Linux video mode numbersあたりの表で指定の値にすれば大きさの変更ができます。

【Linux】rm -rf 通称バルスの恐怖からファイルを復元

よくあるやつです。 さすがにrm -rf / とかっていう世界が崩壊するような協力魔法を撃ってしまうとなんともなりませんが、ディレクトリとかファイルであれば"ある程度"復元が可能なようです。

とは言え、ドキドキですよね。

ということで、テスト用のファイルを作って実験してみます。

# touch /tmp/test.txt

touchで適当にファイルを作成して消します。

rm -rf /tmp/test.txt

さてWindowsとかMacとかであれば変なことしなければゴミ箱に入っているわけですが。 ゴミ箱ないんですよね。 ってことでこんなものをインストールします。 というかmakeもinstallもさくっとしちゃいましょう!

extundelete

その前にもしext2fsライブラリをインストールしていない場合は makeした時にエラーになる可能性があるので先にインストールしちゃいましょう。

# yum -y install e2fsprogs-devel

 

# cd /tmp/
# curl -L http://sourceforge.net/projects/extundelete/files/extundelete/0.2.4/extundelete-0.2.4.tar.bz2/download | tar xj
# cd extundelete-0.2.4/
# ./configure --prefix=/tmp && make && make install

さてこれでextundeleteが使えるようになったんだけど restoreにあたってすべてを指定すると今までのものを。。。となるので 消してしまったファイルの時間を指定し、それ以降のものを復元させる。 そのために、一度消した時間を取得する。

HISTTIMEFORMAT="%F %T " history

例えば自分の場合だと

  417  2014-12-01 07:48:39 cd /tmp/
  418  2014-12-01 07:48:39 ls
  419  2014-12-01 07:48:40 touch /tmp/test.txt
  419  2014-12-01 07:48:41 rm -rf /tmp/test.txt ←ここで消している

なので"2014-12-01 07:48:41"以降のデータ復元となる。 大体やっちまったってなった場合はすぐ調べて対応すると思うからhistoryが埋まるなんてことはすぐにはないと思う。 そう信じたい。

これを復元する。

# /tmp/bin/extundelete --restore-all --after $(date +%s -d '2014-12-01 07:48:41') /dev/root

そうすると

WARNING: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
The partition should be unmounted to undelete any files without further data loss.
If the partition is not currently mounted, this message indicates
it was improperly unmounted, and you should run fsck before continuing.
If you decide to continue, extundelete may overwrite some of the deleted
files and make recovering those files impossible. You should unmount the
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n)

となるので"y"を選択。

復元が開始され、コマンドを実行したディレクトリにRECOVERED_FILESというディレクトリができています。 このディレクトリの中にはfile.xxxxxxというものが入っています。 今回は削除してすぐの状態だったので、1つだけありました。 この中身が削除したファイルになります。 vim等で確認してみるといいかと。

基本はrm -rfとかする時は確認が必要ですね。 実は前に自前のMacBookAirで寝ぼけてrm -rf /とかやっちゃって動かなくなって再インストールしたことがあり その時、もうやるまいとrm.shみたいなものを作って、2度確認するまで消さないみたいなものをalias貼ったのが懐かしいです。

こういうツールは便利ですが、その手前で防げるような何かを考えるべきですね。

【Linux】APCを使ってPHPの高速化を図る

環境を構築している時にAPCってのがあった。 なんだろう・・・って思ってたんですが 昔よくAPCって聞いたなぁとでも、PHP5.5からは関係ないから気にしなくていいよみたいなことがあって 調べてなかったので。

APCっていうのはなんぞやっていうのがPHPのドキュメントにありました。

Alternative PHP Cache (APC) は、PHP の実行コードをキャッシュする仕組みで、 フリーかつオープンに使用できます。
PHP の中間コードのキャッシュ・最適化を行うための、 フリーでオープンかつ堅牢なフレームワークを提供するということを目標としています。

要は都度中間コードでコンパイルを行っているんだけど メモリにキャッシュとして保存して、高速化を図るよって話みたい。

ちなみにPHP5.5からはデフォルトでOPcacheっていうのがあるのでAPC使わなくても高速みたい。 だから使わなくなるって話だったのか。 OPcacheについてはまた機会があれば調べようかな。 まずはAPCインストールからだなぁと。

PHPのバージョンが5.4なので、APCについては3.1.10以降じゃないといけないみたい。 今回はbetaですが、最新版の3.1.13を探してきました。

# wget http://pecl.php.net/get/APC-3.1.13.tgz
# tar zxvf APC-3.1.13.tgz
# cd APC-3.1.13
# phpize
# ./configure --enable-apc --with-php-config=[php-configのPath]
# make
# make test
# make install

さらっとソースからのインサートに必要なコマンドを羅列しました。 ./configureで指定している--wuth-php-config=についてはphp-configのPathを入れてください。 わからない場合は

find / -name '*php-config*' -print

上記のコマンドを実行すればpathが出てくると思います。 自分の場合は/usr/bin/php-configがPathでした。

次にAPCを有効にするためにphp.iniの設定に追記します。

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

; add apc
extension=apc.so

どこに書いてもOKです。 とりあえず自分はModule Settingsの中に書きました。

設定が終わったらApacheを再起動します。

# service httpd restart

設定が反映されているか確認します。

php -m | grep apc
apc

apcと表示されれば設定が有効になっています。

出てこない場合は、間違ったphp.iniに設定を書いている可能性があります。

APCを使うと実行速度は早くなるけど、キャッシュする時間を長く取ると高速化はできても ソースコードを変更した時の反映に時間がかかります。 その場合APCキャッシュをクリアする必要があるみたいです。 この辺は実際使ってみてからかな。

【Linux】CentOS6.6にSubversion1.8をインストール

今のプロジェクトでの引き継ぎ時Subversionを使っているので とりあえずローカルの環境にSubversionを入れようと思ったのだが yumで入れようとlistを見てみると1.6しか入っていない。 どうせなら最新版を使いたいのでWANdiscoというところのやつを使ってインストールすることに。

調べたら簡単にインストールできたので

まずはファイルの作成

# vim /etc/yum.repos.d/wandisco.repo

作ったフィアルの中はこんな感じで

[wandisco]
name=WANDisco Repository - svn-1.8 centos6
baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-WANdisco

次にGPGキーの取り込み GPGキーとは暗号化ソフトで生成される公開鍵で、Linuxの場合,apt-getコマンドやyumコマンドを使ってインターネットから入手できるパッケージが正しい配布先のものかどうかのチェックなどに利用しているらしい。

# rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

そしてインストールの実行

# yum install -y --enablerepo=wandisco --disablerepo=base,updates subversion

インストール後、バージョンの確認

# svn --version

svn, version 1.8.10 (r1615264)
   compiled Aug  8 2014, 11:31:47 on x86_64-unknown-linux-gnu

Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

Subversionのためだけなので、普段は無効に。デフォルトだとCentOSのBaseやupdatesの方が優先されるので、対象外にする。

以下サイトを参考にさせていただきました。

http://wankomagic.hatenablog.com/entry/2013/07/10/001936

【Ruby】RVMでRubyのインストールとバージョン管理

最近CapistranoでデプロイをするためにRubyが必要になったので 必要に迫られてインストール

どうにも昔からRubyのインストールには依存やらなんやらでつまずくことが多かった。 PHPみたいな感じでRubyもパッケージ管理をするためにRVMを入れることに。

まずは必要パッケージをインストール

# sudo yum install -y git zlib-devel perl-ExtUtils-MakeMaker httpd httpd-devel openssl-devel libyaml-devel libxml2-devel libxslt-devel libffi-devel readline-devel pcre-devel iconv-devel sqlite-devel mysql mysql-server m
ysql-devel postgresql postgresql-server postgresql-devel curl-devel nkf

そしてインストール

# curl -sSL https://get.rvm.io | bash -s stable
Downloading https://github.com/wayneeseguin/rvm/archive/1.26.3.tar.gz
Downloading https://github.com/wayneeseguin/rvm/releases/download/1.26.3/1.26.3.tar.gz.asc
gpg: ディレクトリー「/root/.gnupg」ができました
gpg: 新しい構成ファイル「/root/.gnupg/gpg.conf」ができました
gpg: 警告: 「/root/.gnupg/gpg.conf」のオプションは起動している間、有効になりません
gpg: 鍵輪「/root/.gnupg/pubring.gpg」ができました
gpg: 2014年11月18日 10時09分57秒 JSTRSA鍵ID BF04FF17で施された署名
gpg: 署名を検査できません: No public key
Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found.
Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).

GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.26.3.tgz' - 'https://github.com/wayneeseguin/rvm/releases/download/1.26.3/1.26.3.tar.gz.asc'!
try downloading the signatures:

    sudo gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

or if it fails:

    command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -

the key can be compared with:

    https://rvm.io/mpapis.asc
    https://keybase.io/mpapis

なんか出てきた。

try downloading the signatures:

    sudo gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

or if it fails:

    command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -

ふむ、 とりあえず上記コマンドを試してみる

# sudo gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
gpg: 鍵輪「/root/.gnupg/secring.gpg」ができました
gpg: 鍵D39DC0E3をhkpからサーバーkeys.gnupg.netに要求
gpg: /root/.gnupg/trustdb.gpg: 信用データベースができました
gpg: 鍵D39DC0E3: 公開鍵“Michal Papis (RVM signing) ”を読み込みました
gpg:     処理数の合計: 1
gpg:           読込み: 1  (RSA: 1)

# command curl -sSL https://rvm.io/mpapis.asc | sudo gpg2 --import -
gpg: 鍵D39DC0E3:“Michal Papis (RVM signing) ”変更なし
gpg:     処理数の合計: 1
gpg:         変更なし: 1

変更なしって出てきた。

もう一度curlでコマンドを打つと

# curl -sSL https://get.rvm.io | bash -s stable
Downloading https://github.com/wayneeseguin/rvm/archive/1.26.3.tar.gz
Downloading https://github.com/wayneeseguin/rvm/releases/download/1.26.3/1.26.3.tar.gz.asc
gpg: 2014年11月18日 10時09分57秒 JSTRSA鍵ID BF04FF17で施された署名
gpg: “Michal Papis (RVM signing) ”からの正しい署名
gpg: 警告: この鍵は信用できる署名で証明されていません!
gpg:       この署名が所有者のものかどうかの検証手段がありません。
主鍵の指紋: 409B 6B17 96C2 7546 2A17  0311 3804 BB82 D39D C0E3
副鍵の指紋: 62C9 E5F4 DA30 0D94 AC36  166B E206 C29F BF04 FF17
GPG verified '/usr/local/rvm/archives/rvm-1.26.3.tgz'
Creating group 'rvm'

Installing RVM to /usr/local/rvm/
Installation of RVM in /usr/local/rvm/ is almost complete:

  * First you need to add all users that will be using rvm to 'rvm' group,
    and logout - login again, anyone using rvm will be operating with `umask u=rwx,g=rwx,o=rx`.

  * To start using RVM you need to run `source /etc/profile.d/rvm.sh`
    in all your open shell windows, in rare cases you need to reopen all shell windows.

# Administrator,
#
#   Thank you for using RVM!
#   We sincerely hope that RVM helps to make your life easier and more enjoyable!!!
#
# ~Wayne, Michal & team.

In case of problems: http://rvm.io/help and https://twitter.com/rvm_io

ってことでRVMが使えるようになったっぽい /etc/profile.d/以下にrvm.shが出来上がってるので、パスを通しておく

# source /etc/profile.d/rvm.sh

バージョンの確認

# rvm -v
rvm 1.26.3 (latest) by Wayne E. Seguin , Michal Papis  https://rvm.io/

どのバージョンのRubyが使えるのか確認

# rvm list known


# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p598]
[ruby-]2.1.4
[ruby-]2.1[.5]
[ruby-]2.1-head
ruby-head

# for forks use: rvm install ruby-head- --url https://github.com/github/ruby.git --branch 2.1

# JRuby
jruby-1.6.8
jruby[-1.7.16.1]
jruby-head

# Rubinius
rbx-1.3.3
rbx-2.0.0
rbx-2.1.1
rbx[-2.2.10]
rbx-head

# Opal
opal

# Minimalistic ruby implementation - ISO 30170:2012
mruby[-head]

# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]

# GoRuby
goruby

# Topaz
topaz

# MagLev
maglev[-head]
maglev-1.0.0

# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head

# IronRuby
ironruby[-1.1.3]
ironruby-head

とりあえず2.1.4あたりをインストールしてみる。

# rvm install ruby-2.1.4

インストールしたら選択する

rvm use ruby-2.1.4

バージョン確認

# ruby -v
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]

いやー楽になったもんだ。

【Linux】CentOS 6.6のMySQL5.1をyumで簡単に5.6にしてインストールする

CentOS 6.6 の環境を作ったものの MySQLインストールしようとしたらデフォルトが5.1だった。

今作りたい環境としてはMySQL5.6なんだよなぁ ソースからインストールってめんどいなー。 yumでさくっと入れたいなぁと思ったので手順をば。

まずは現状を確認

# rpm -qa | grep mysql
mysql-libs-5.1.73-3.el6_5.x86_64

おやなんかいる。 消します。SeeYou

yum remove mysql*

次にrpmを追加してインストール 一応色々確認したかったので-yオプションはつけていません。 お急ぎの方は-yオプションつけてあげてください。

# yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
# yum install mysql mysql-devel mysql-server mysql-utilities

本当にインストールされているのか確認

# rpm -qa | grep mysql
mysql-community-release-el6-5.noarch
mysql-community-common-5.6.21-2.el6.x86_64
mysql-community-client-5.6.21-2.el6.x86_64
mysql-connector-python-2.0.2-1.el6.noarch
mysql-community-server-5.6.21-2.el6.x86_64
mysql-community-libs-5.6.21-2.el6.x86_64
mysql-utilities-1.5.3-1.el6.noarch
mysql-community-devel-5.6.21-2.el6.x86_64


# mysql --version
mysql  Ver 14.14 Distrib 5.6.21, for Linux (x86_64) using  EditLine wrapper

これで簡単にyumでバージョンをあげることができました。