2015-12-19

VMware Player で CentOS7 をインストールするときに解像度を指定する方法

Install オプションに以下を追記する。1024x768の例。

linux resolution=1024x768

= はキーボードの「^~へ」が刻印されたキー。
x はアルファベットの小文字エックス

2015-12-17

.htaccess の RewriteRule で 正規表現パターンを 「 ^/ 」 から書くな

RewriteEngine On
RewriteRule ^/foo/bar\.html$ baz.html [L]

って感じで、正規表現パターンを「^/」から始めている記述がネットに散乱してるけど、
RewriteRule に渡ってくるパスが「/」から始まるのは、RewriteRule を httpd.conf
に書いたときだけ。

.htaccess に書いたときは、.htaccess が設置されているディレクトリからの相対パス。

よって、.htaccess で 「^/」って書くと、パターンにマッチしない。

2015-12-05

やっぱりおかしい

ほぼ愚痴。

「これ、反対の意味じゃね?」

っていう定義がしてあった。


define('DATA_REGIST', 0);
define('DATA_NOTREGIST', -1);

define('DATA_VISIBLE', 0);
define('DATA_UNVISIBLE', -1);


なんだろう、このもやもや感。


if 文で not の not を使う気か?という定義でした。


if ($hoge != DATA_NOTREGIST) { ... }

2015-11-15

php で include/require しているファイルの一覧を find と grep で作成する

include (require) で読み込んでいるファイルの一覧がほしかったので、find & grep で作ってみた。

例:common/html というディレクトリに共通ファイル(ヘッダやフッタ)がある場合
# cd /var/www/html
# find . -type f -name "*.php" | xargs grep -E "common/html"

2015-10-06

RewriteRule の サンプル

Apache HTTP Server Version 2.2 ドキュメント
mod_rewrite - RewriteRule ディレクティブ から引用

Inside per-server configuration (httpd.conf)
for request GET /somepath/pathinfo:
Given Rule                                      Resulting Substitution
----------------------------------------------  ----------------------------------
^/somepath(.*) otherpath$1                      invalid, not supported

^/somepath(.*) otherpath$1  [R]                 invalid, not supported

^/somepath(.*) otherpath$1  [P]                 invalid, not supported
----------------------------------------------  ----------------------------------
^/somepath(.*) /otherpath$1                     /otherpath/pathinfo

^/somepath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
                                                via external redirection

^/somepath(.*) /otherpath$1 [P]                 doesn't make sense, not supported
----------------------------------------------  ----------------------------------
^/somepath(.*) http://thishost/otherpath$1      /otherpath/pathinfo

^/somepath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
                                                via external redirection

^/somepath(.*) http://thishost/otherpath$1 [P]  doesn't make sense, not supported
----------------------------------------------  ----------------------------------
^/somepath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
                                                via external redirection

^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
                                                via external redirection
                                                (the [R] flag is redundant)

^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
                                                via internal proxy

Inside per-directory configuration for /somepath
(/physical/path/to/somepath/.htaccess, with RewriteBase /somepath)
for request GET /somepath/localpath/pathinfo:
Given Rule                                      Resulting Substitution
----------------------------------------------  ----------------------------------
^localpath(.*) otherpath$1                      /somepath/otherpath/pathinfo

^localpath(.*) otherpath$1  [R]                 http://thishost/somepath/otherpath/pathinfo
                                                via external redirection

^localpath(.*) otherpath$1  [P]                 doesn't make sense, not supported
----------------------------------------------  ----------------------------------
^localpath(.*) /otherpath$1                     /otherpath/pathinfo

^localpath(.*) /otherpath$1 [R]                 http://thishost/otherpath/pathinfo
                                                via external redirection

^localpath(.*) /otherpath$1 [P]                 doesn't make sense, not supported
----------------------------------------------  ----------------------------------
^localpath(.*) http://thishost/otherpath$1      /otherpath/pathinfo

^localpath(.*) http://thishost/otherpath$1 [R]  http://thishost/otherpath/pathinfo
                                                via external redirection

^localpath(.*) http://thishost/otherpath$1 [P]  doesn't make sense, not supported
----------------------------------------------  ----------------------------------
^localpath(.*) http://otherhost/otherpath$1     http://otherhost/otherpath/pathinfo
                                                via external redirection

^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
                                                via external redirection
                                                (the [R] flag is redundant)

^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
                                                via internal proxy

2015-09-05

[postfix] 特定のアドレスから送信されたメールのうち拒否られた送信先のログを抽出する

メール配信システムなんかを組んで、一括送信した後に、宛先不明などで拒否られたログを抽出する方法。



1.メールログから送信元で抜いて、そこからキューIDだけ取り出してファイルに保存する

# grep -E "from=" /var/log/maillog | grep -o -E "[0-9A-Z]{10}" > ~/hoge.txt



2.キューIDをファイルから読み込んで検索し、相手メールサーバの応答コードが5XXのログを抜く。

# grep -f ~/hoge.txt /var/log/maillog | grep "said: 5" > ~/hoge_5XX.log

2015-07-16

カレントディレクトリ以下のファイル、ディレクトリに対して移動・削除・chownする

■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てのオーナーとグループを変更する
chown -R hoge:hoge ./
※ ./* としたいところだが、* を付けると隠しファイルが変更対象にならない。


■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てを移動する
mv * .[^\.]* 移動先ディレクトリ


■カレントディレクトリ以下のファイル、サブディレクトリ、隠しファイル全てを削除する
rm -r * .[^\.]*
※ 確認メッセージが鬱陶しかったら、-rf とする。

ディレクトリ以下全てのファイルとディレクトリの権限を一覧で取得する

# ls -aRl / > /tmp/permission_list

または

# find -printf "%p\t%TY-%Tm-%Td %TH:%TM:%TS\t%u\t%g\t%#m\n" > /tmp/permission_list

2015-06-05

CentOS + Apache + PHP + PDO で SQL Server へ接続

前提:httpd、phpのインストールが終わっていること
# yum install httpd php

作業:
# yum install epel-release
# vi /etc/yum.repos.d/epel.repo
[epel]

enabled=0


# yum --enablerepo=epel install php-mssql
# vi /etc/freetds.conf

[MSSQLSVR2012]
        host = 1.2.3.4
        port = 1433
        tds version = 8.0
        charset = CP932
        client charset = UTF-8

# vi /etc/selinux/config

SELINUX=disabled


# restart

2015-03-14

Google アナリティクス の設置場所

この形式の設置場所は、</body> の直前

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-12345678-1");
pageTracker._trackPageview();
} catch(err) {}
</script>



この形式の設置場所は、</head> の直前

<script type="text/javascript">
 var _gaq = _gaq || [];
 _gaq.push(['_setAccount', 'UA-12345678-1']);
 _gaq.push(['_trackPageview']);

 (function() {
   var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
   ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
   var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
 })();
</script>



この形式の設置場所は、<body> の直後

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-12345678-1', 'auto');
  ga('send', 'pageview');
</script>

wgetでリンク切れをチェックする

wget --spider -o ~/wget.log -e robots=off  -r -p http://www.example.dom/

grep -B 2 '404' ~/wget.log > NotFound.log

cat NotFound.log

2015-02-25

pontaカード再発行

このサイトの趣旨とは違うが・・・



pontaカードって、裏にビニール(?)が貼ってあるだけで、
かつ、そのビニールにバーコードが印刷してあるから、
ビニールはがれてきたら、テープでとめないとどうしようもなくなる。


で、しばらくテープでとめて使ってたんだけど、
いい加減ボロボロになってきたので
再発行手続きをした。

カードの裏面にかいてある電話番号に電話して
音声ガイダンスに従って・・・

最後に新しい会員IDがガイダンスで流れるんだけど、
なんせ、車の中から携帯でかけたから
控えるものがない。

まぁいいかと電話を切った。

翌日、ローソンでタバコとコーヒーを買って(毎朝の日課)、
いつものようにpontaカードを提示したら

「ピー」

って。

ほぼ毎日行くローソンだから
店員さんと仲良し状態なので

店員:「?」
オレ:「あ、再発行手続き中」
店員:「使えないのかな・・・ちょっと待ってね」
と言って、裏に書いてある会員IDを手打ちし始めた。

「ピー」

店員:「やっぱり、使えないですね。」
オレ:「え?このカード、もう使えなくなるの?」
店員:「そうみたいですね。」
オレ:「うわ、ポイント入らないの?」

朝なのでこれ以上時間がなかったので車に。


で、運転しながら気が付いた。


新しい会員ID控えておけば、
会員ID手打ちでポイント入るっぽいって・・・


だから、会員ID控えなかったら、再発行後のカードが届く10日~2週間は、ポイント貯まらない。


再発行手続きの音声ガイダンスでは、そんな案内なかったし・・・


pontaって、運営くそだね。

2015-02-24

wget で負荷テスト

ab だと 同じファイルにしかアクセスできないので、wget 使って負荷テストしてみた。


BASIC認証ありのテストサイトに負荷テストしてみた例。
$ wget -o /var/tmp/wget.log -r -np --spider -t 1 -e robots=off --http-user=hogehoge --http-passwd=hogehoge http://www.example.dom/


ログを書き出す
-o /var/tmp/wget.log


サイト全体
-r


親階層は見ない
-np


ファイルの存在確認のみ(ダウンロードしない)
--spider


試行回数は1回だけ
-t 1


robots.txtを無視
-e robots=off


BASIC認証アカウント
--http-user=hogehoge
--http-passwd=hogehoge


テストサイトURL
http://www.example.dom/

2015-01-30

glibcを使っているプロセスを一覧にするコマンド

glibcを使っているプロセスを一覧にするコマンド

# lsof | grep libc | awk '{print $1}' | sort | uniq


sudoが必要な環境で実行するなら

# sudo lsof | grep libc | awk '{print $1}' | sort | uniq



引用元:
glibcで見つかった致命的な脆弱性「GHOST」は具体的になにが問題なのか

2015-01-10

PHP のメール送信フォームなどで iCloud 宛のメールが届かない場合

# vi /etc/php.ini
mail.add_x_header = off

これで届くようになる。

ただ、spamフィルタリングされているようで、他の原因で届かない(アカウントのメールボックスに配信される前にフィルタされ、引っかかると届けないようなので、迷惑メールフォルダにすら振り分けられない)こともあるので、その時は、これ以外の要因も探る。

X-Powered-By ヘッダを消す

httpd.conf で消す方法

# vi /etc/httpd/conf/httpd.conf

Header always unset X-Powered-By



php.ini で消す方法

# vi /etc/php.ini

expose_php = off



httpf.conf で消しておいた方が無難かと。

Apache LoadModule の確認

Apache 2.2 の場合は、

# apache2ctl -M

で確認できる。

apt-get で 保留パッケージをインストールする

久しぶりに Ubuntu を触った。

ここ何年も CentOS ばかり触ってたので、コマンド忘れてる。

$ sudo apt-get update
$ sudo apt-get upgrade

ってやって更新パッケージインストールしたら、インストールが保留されたパッケージがあった。

で、どうやってインストールするんだっけ?と小一時間。

$ sudo apt-get dist-upgrade

でインストールできた。

そのパッケージを更新すると、他のパッケージが削除される時に保留になるみたい。

-s 付けると、どのパッケージが削除されるか確認できる。

$ sudo apt-get -s dist-upgrade

2015-01-05

/var/tmp に吐いていたログが消えた

cronの実行結果を /var/tmp に吐いていた。

/var/tmp は「再起動しても削除されない」と何かで見た記憶があったので放置しておいた。

で、久しぶりにログを見てみようとしたら・・・

30日より前のログがない。

で、調べてみたら

ここ
http://qiita.com/kuni-nakaji/items/f29be14be578b5a19d4b

に詳しく書いてあった。

どうも、/etc/cron.daily で tmpwatch というやつが 30days より前のファイルを消しているらしい。

.htaccessで403を404で返す

久しぶりにリライトルールを書いたよ。 ドキュメントルートに.htaccessを置く場合の記述↓ # 403.html は実体がなくてよい。この設定をすることで、あっても使われなくなる。 ErrorDocument 403 /403.html # 独自の404ページをドキュメ...