読者です 読者をやめる 読者になる 読者になる

とっしぃのTech Memo

PHPとかサーバとか他色々言語のメモ的な。あとはたまにガジェットとか。

CentOS7系のコマンド

おはようございます。

最近はCentOSとCoreOSが混ざって大変なとっしぃです。

「DockerとCoreOSの決別」みたいなエントリが、
「DockerとCentOSの決別」に見えてもうわけわからんことになってました(´・ω・`)



まぁそれはおいといて、



ちょこちょこVagrantで適当なVM作って遊んで捨てるのが日課……ではないですが
そんなことしてまして、

そういえばCentOS7出てコマンドも色々変わって大変とか聞くけどまだ触ってないな−

と思い、Vagrantならちょこっと入れて遊べるのでやってみました。



まぁVagrantの使い方は色んなとこで詳しく載ってるので今回は割愛。

……どうでもいいですけど「かつあい」ってタイプしたはずが「かあつあい」になってて、
変換したら「加圧愛」。
加圧トレーニング中のはるな愛が浮かんでしまって今脳内が大変です。
……どうでもいいですけど。



んで、とりあえずターミナルで他のサーバの作業とこんがらがるのが怖いのでhostnameだけでも変えとくかーと思って

$ sudo vim /etc/sysconfig/network

って打ってみると、

# Created by anaconda

……ん?

NETWORKING=yes
HOSTNAME=localhost.localdomain

みたいな感じじゃないの?

ここからして違うのかーと、7系への道のりが長そうだなと思ってしまったわけです。


ちなみにhostnameの変更は

$ sudo vim /etc/hostname

で、中身は

localhost.localdomain

わかりやすい。



あと大きいのはserviceコマンドですよね。

serviceとchkconfigが一緒になって、systemctlに統合されたのはいいんですが、
まず「systemctl」が打ちにくいっていう(´・ω・`)

serviceは1単語だけどsystemとctlで2単語っぽいのがね。
あと英単語なら子音子音て続くのあんまないけど略語になると子音だらけで打ちづらい。


までも6系までは色んな設定ファイルの場所覚えて変更箇所覚えないといけなかったのが、
今度は基本的にコマンドでやるみたいな方針ぽいので、そこは--helpでどうにかなりそうなのがいいかな。



業務だとしばらくは6系だろうから頭の切り替えが辛いけどそこはしょうがないね……。



# 追記
こんなのあった。
iptabled > firewalldとかNICのUP/DOWNとかファイルシステムの変更とか色々あんのね。
もっと触ってこ(´・ω・`)


CentOS6とCentOS7の比較表 - Qiita

vimのtags設定(セミコロンの意味的な)

vimrcでtaglistの設定をごちゃごちゃといじくってる時に、下記サイト


Re: vimの勉強〜タグジャンプの勘どころ〜 - daffy log - 永遠に未完成

2009-07-22 - daffy log

を見つけて、

最後のセミコロン重要。

'tags'オプションに指定するセミコロンは便利なのに割と知られていないので紹介してみた。詳細は :help file-searching

って書いてあったので実際に調べてみた。

:help file-searching

をとりあえず叩いてみる。

1637 2) Upward search:
1638 Here you can give a directory and then search the directory tree upward for
1639 a file. You could give stop-directories to limit the upward search. The
1640 stop-directories are appended to the path (for the 'path' option) or to
1641 the filename (for the 'tags' option) with a ';'. If you want several
1642 stop-directories separate them with ';'. If you want no stop-directory
1643 ("search upward till the root directory) just use ';'.
1644 /usr/include/sys;/usr
1645 will search in:
1646 /usr/include/sys
1647 /usr/include
1648 /usr
1649
1650 If you use a relative path the upward search is started in Vim's current
1651 directory or in the directory of the current file (if the relative path
1652 starts with './' and 'd' is not included in 'cpoptions').
1653
1654 If Vim's current path is /u/user_x/work/release and you do
1655 :set path=include;/u/user_x
1656 and then search for a file with gf the file is searched in:
1657 /u/user_x/work/release/include
1658 /u/user_x/work/include
1659 /u/user_x/include

あ、ちなみにVimCentOSに7.4入れたやつです。
neocomplete使いたかったので(*´艸`*)


んで多分L1639の最後のThe辺りからがそれっぽいこと書いてそう。

まずはGoogle翻訳にぶち込んでみましょう。

';'ストップディレクトリはと( 'path'オプションのために)パスに、または( 'タグ'オプション用)のファイル名に付加されます。必要に応じていくつかのストップディレクトリがで区切り';'。

日本語でおk(´・ω・`)


拙い英語力(しかも読むのonly)で超意訳してみると、

「上方向に検索するならセミコロンで区切って、そのストップディレクトリ指定するといいよ。
ストップディレクトリ指定しない(Rootディレクトリまで遡る)ならセミコロンだけつけてね」

ということだろうか。


と思ってもうちょい検索したらこんなん出てきてしまった。

2) 上向き検索:
この方法ではディレクトリを指定すると、そのディレクトリから上に遡ってファイ
ルを探す。上向き探索の上限となるディレクトリが指定できる。それはパス (オプ
ション 'path') かファイル名 (オプション 'tags') の末尾に ';' で区切って指定
する。複数のディレクトリを指定したいときはそれらを ';' で区切る。上限ディレ
クトリを指定したくないときは (ルートディレクトリまで上向き検索したいとき)
';' だけを付ける。

Vim documentation: editing


めっちゃわかりやすい!!!


でもまぁさっきの超意訳とそんなに違うことは言ってない気がする。

よかったよかった。

VimのNeobundleで「neobundle#rc() is deprecated function.」

お久しぶりです。とっしぃです。

最近家庭の事情もありましてなかなか記事が書けてないです(´・ω・`)


でとりあえず軽いテーマが一つあったのでちょろっと更新。



普段使ってるエディタは基本的にVimなんですが、最近部署が変わったこともあって新しいMacBookProが支給されたのでそれにもVimの設定しとこうと思ったわけです。

そしたら

[neobundle] neobundle#rc() is deprecated function.
[neobundle] It will be removed in the next version.
[neobundle] Please use neobundle#begin()/neobundle#end() instead.

なんだこれ(´・ω・`)


上のメッセージをよく読んでみると、


neobundle#rcは次のバージョンでなくなるから、neobundle#begin()/neobundle#end() 使ってね


と。


調べてみるとまぁちょこちょこ出てきますね。

ここ(
neobundle#rc()がdeprecated functionになる場合 - Qiita
)を参考に

call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'
call neobundle#end()

これで出なくなりました。やったね!


他の参考:

Shougo/neobundle.vim · GitHub

VimでNeoBundleのアップデートに伴いプラグインのデフォルトブランチをmasterに変更 - rcmdnk’s blog

MySQLのクエリキャッシュ

ご無沙汰しております。とっしぃです。


私事になりますが5月末に結婚しました(๑╹ڡ╹๑)
式が終わって6月頭にちょっとした旅行、8月に引っ越しと、
未だかつてないバタバタ具合で行っておりました。


なのでこのブログ(ただのメモですけど)もだいぶ滞ってしまいました(´・ω・`)


色々と一段落はしたので、またちょこちょこと更新していこうと思います。


その一発目として、今までめんどくさそうと思ってあんまり手を出してこなかったMySQLのクエリキャッシュについてのメモでも。


クエリキャッシュで何ができるのか

MySQLのクエリキャッシュでは、発行されたSQLのうち、SELECTステートメントのテキストを結果と共に格納します。
全く同じクエリを受け取った際には、その格納されたクエリキャッシュの中から結果を返し、一からクエリの解析や実行を行いません。

参考:
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.12 MySQL クエリ キャッシュ

クエリキャッシュの設定

まずは現在クエリキャッシュが有効かどうかを調べます。

mysql> show variables like 'query_cache_%';

もしくは

# mysqladmin -uroot -p variables | grep query_cache

その結果のうち、
query_cache_size
を見て、値が 0 でなければ有効な状態です。

これが 0 だった場合にはこれを設定しなければなりません。

Linuxで一般的な設定ファイルの場所である

/etc/my.cnf

の [mysqld]セクションに、

query_cache_size=16M

と記述し、mysqlを再起動します。
値は環境によって変わりますが、後々稼働状況を見て変更していくのでもいいと思います。


query_cache_size以外にも、

query_cache_limit
query_cache_min_res_unit

と言った項目も設定できます。

query_cache_limitはキャッシュする結果のサイズ上限を、
query_cache_min_res_unitはキャッシュするデータのブロック単位サイズを表します。


参考:
[ThinkIT] 第6回:query_cache_sizeの違いによるパフォーマンス比較 (1/3)
MySQL :: MySQL 5.1 リファレンスマニュアル :: 4.12.3 クエリ キャッシュの設定

効果測定

mysql> show status like 'Qcache%';

もしくは

# mysqladmin -uroot -p extended-status | grep Qcache

などとして、現在のキャッシュ状態を確認します。

Qcache_free_blocks 1  空きブロック数
Qcache_free_memory 5489800  空きメモリサイズ(バイト)
Qcache_hits 1944  クエリヒット数
Qcache_inserts 649  キャッシュされたクエリ数
Qcache_lowmem_prunes 0  メモリが足りずにキャッシュから削除されたクエリ数
Qcache_not_cached 171  キャッシュされなかったクエリ数
Qcache_queries_in_cache 649  キャッシュされているクエリ数
Qcache_total_blocks 1353  キャッシュ内のブロック数

これのうち、
Qcache_free_memory
Qcache_lowmem_prunes

を見ることで、キャッシュを必要としているクエリとそのクエリに対するメモリサイズが分かります。
これにより、必要に応じてキャッシュサイズの増減を行います。


おわりに

今まではWebアプリのパフォーマンスといえば、まずはアプリケーションの作り、次にWebサーバ(Apache、Nginx)の設定辺りでなんとかなってきたんですが、
ここにきてやっぱりMySQLのチューニングって大切なんやな(´・ω・`)ということがよく分かりました。

この業界の第一線で戦う諸兄方にとっては今更かよと言った内容だと思いますが、そこにこうやって少しずつでも近づいていけるように
これからも貪欲に知識・経験を吸収していかないとなーと思った次第です。

SSL証明書の発行

お久しぶりです。とっしぃです。

長らく間が空いてしまいました。
まぁそれというのも来月辺り、ちょっと人生的な大きなイベントがあってその準備に奔走してるというのがあるんですがそれはまた別の話として。

今回もまた備忘録的なメモです。

たまーにサーバのSSL証明書発行するんですが、その度にコマンドとか忘れるのでとりあえずここに書いときます。

  • 鍵作成
openssl genrsa 2048 > server.key
openssl req -new -key server.key > server.csr
  • 証明書作成
openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
openssl req -text < server.csr
  • 証明書確認
openssl x509 -text < server.crt

※コマンドオプションの意味とかはまた追記するかも。



ちなみに略語は

CSR Certificate Signing Request(署名要求)
CRT Certificate
DER Distinguished Encoding Rules形式
PEM Privacy Enhanced Mail形式

ということだそうです。

phpenvのphp.ini

最近は暖かくなってきたなーと思った矢先、また寒くなってきてコートとマフラーがまだ手放せないですね。とっしぃです。


今やってる開発はphpenvでPHPのバージョン管理をやろうと思って、 phpenv + php-fpm + nginx って環境になってます。


phpenvは特にユーザ毎に管理する必要もないなーと思ったのでグローバルにインストールしてあります( > /usr/local/phpenv/~ )。


そこで色々php.iniとかいじってたんですが、読み込んでいるはずのphp.iniをいくら編集しても反映されてないぽい?わけです。

でもCLIの方で

php -i | grep php.ini

ってやって出てくるのは今いじってるphp.iniファイル。



それならと思ってWebサーバの方にphpinfo()書いたファイル置いて見てみると

Loaded Configuration File /usr/local/phpenv/versions/5.4.21/etc/php-fpm.conf

となっていてファッ(´・ω・`)!?



調べてみるとこんな記事を発見。

virtualbox(centos)でphp-buildでコンパイルしたphp-fpmをnginxで使う為の設定メモ(virturalhostの設定まで) - Qiita

そこでphp-fpmの設定ファイル郡/root/.phpenv/versions/5.4.11/etc/conf.d/にdate.iniというのを作って対応しました。

んならもうphp.iniを~/etc/conf.d/に突っ込んじゃったらどうなのよってことで突っ込んでみたところ無事に認識してくれました。


ちなみにphpinfo()だとこんな感じ。

Additional .ini files parsed /usr/local/phpenv/versions/5.4.21/etc/conf.d/php.ini, /usr/local/phpenv/versions/5.4.21/etc/conf.d/pyrus.ini, /usr/local/phpenv/versions/5.4.21/etc/conf.d/xdebug.ini

うーん、~/etc/php.iniだと認識しなくて~/etc/conf.d/*.iniだと認識してくれるってのはなんかどっかにそこら辺の設定がありそうだけど・・・。


しっくりはこないけどまた今度時間のある時にでも調べてみますかね・・・。

cakephpのバリデーションでvsprintfのエラー

ご無沙汰しております。とっしぃです。

ここんところ仕事がヘビーローテーション()すぎてそろそろ殺意の波動に目覚めそうです。



仕事は絶賛cakephp中なんですが、モデルのバリデーションを書いていて一瞬ハマったのでメモしときます。



新しくモデル書いて、ひと通りバリデーションのルールとかメッセージとか書き終わったあと、
さて動かしてみるかーと見てみたら

Warning (2): vsprintf() [function.vsprintf]: Too few arguments [CORE/Cake/basics.php, line 619]

ん?

どっかに%sとか書いたっけな?


と思ってみてみるも、そんな記憶もなければ記述もないわけで。



そこでふと文字コードを確認したら

:set fenc
fileencoding=iso-2022-jp


フ○ック(´・ω・`)




このク○野郎(´・ω・`)と思いつつ、


:set fenc=utf-8

で物の見事に解消。



とそんなオチでしたとさ。




ほんともうまじバベルの塔壊した神は絶許ですよ絶許。