Monthly Archives: 9月 2013

Linuxおすすめコマンドの話

お久しぶりです。
リプレーションのインフラ担当SE、utunです。

今回はLinux(基本CentOSベース)で、実際よく使うコマンドについて適当な感じに書いていきます。

まぁちょっとあれですわ。
ふと昔のことを思い出したって訳です。
そういえば最初のころ、何から覚えればいいのかわからなかったなぁ・・・。
ってね。
きっと皆最初はそんな感じじゃなかろうか!
ということで、突発的且つかなりざっくりだけど書いてみます!
いろんなとこで書かれてるから、需要があるのかは微妙だけども!

基本コマンド

まぁ、うちのページを見に来る人はこんなの必要ないと思うけど、一応だ!

cd
vi
view
echo
ls -la
cat
grep
chown
chmod

こんなもんだべな。
この辺は特に説明とか入れないぜ!

ファイル、もしくはファイル内の文字列を探す

まぁ、ファイル探索といったら
# updatedb
# locate <探したい文字列>
だよね。
そんなコマンドねぇよ!って言われたら、適当にyumすればいい。
# yum -y install mlocate

ちなみに、たくさん出すぎてめんどくさい時はgrepしてくれ!

んで、Webサーバとかでよくやるのが、

どのファイルで定義されてっか分からん変数の定義を探す

ってのなんだけど、locateだとこれが出来ない。
locate爆速なんで、基本ファイル探索はlocateなんだけどね。
若干遅いけど、これでやっちゃっておくれ!
# find <探索するディレクトリ指定> -type f -print | xargs grep <探索する文字列> /dev/null

まじ鼻血出るほど便利。

なんかサーバにアップしたら動かないんですけどー

サーバの設定おかしいんじゃないっすかー

とかふざけた事を言ってくる奴がいたら、
とりあえずこれで一発で見つけて、プログラムがわりぃんだよ!
ってそっと教えてあげましょう。

性能監視系

なんかよくわからんけど、サーバが重い。
そういうこと、あるよね。

皆よくわからず「top」とか使ってないかい?
まぁそれでもいいんだけど、topじゃ結局「重い」事しか分からない事が多いんだ。
そこで、
# sar -u 1 1
# sar -n DEV 1 1
# free
辺りを使ってみてくれ。
それぞれ、CPU使用率、ネットワーク使用料、メモリ使用量が出る。
全ての性能情報取りたい場合は
# sar -a 1 1
でおk。
まぁ、-aは情報多すぎてみる気にならんけども。
特に注目してほしいのは「sar -u」なんだけど、
これはCPU時間がどこに割かれているのかを詳細に見れるんだ。
つまり、DBが重い時とかは、大抵iowaitが高い!とかね。
ちょっと調べてみると面白いと思うんで、興味があればググってくれ!

sarなんてコマンド無いよって人はyumで入れてね!
# yum -y install sysstat

なんかサーバにアップしたら動かないんですけどー

サーバの設定おかしいんじゃないっすかー

とかふざけた事を言ってくる奴がいたら、
とりあえずこれで一発で見つけて、SQLがわりぃんだよ!
ってそっと教えてあげましょう。

プロセスとかネットワークとかのチェック

なんかよくわからんけど、httpアクセスできない。
そういうこと、あるよね。

そんな時、よくわからんけどとりあえず「httpd.conf」を見てないかい?
まぁ一人のアクセスで繋がらないならそれでいいけど、
負荷テストすると繋がらない、って場合。
とりあえずこれを見てくれ。
# ps aux
# netstat -oan
それぞれプロセス、ネットワークコネクションを表示するコマンドなんだ。
Linuxは大量のアクセスを捌けるけど、それも設定次第だし、
プログラムの問題で大量のコネクションが消費されている事がある。
それぞれサーバの設定である程度緩和できるんで、その辺も見てみるといいよ!
それでも異常に大量のプロセスとコネクションがはられることはあるけどね。

なんかサーバにアップしたら動かないんですけどー

サーバの設定おかしいんじゃないっすかー

とかふざけた事を言ってくる奴がいたら、
とりあえずこれで一発で見つけて、DBコントローラがわりぃんだよ!
ってそっと教えてあげましょう。

なんかどんどんニッチな方向へ進んでいる気がする。
まぁそれはそれでいいかな。
なんても思うんだけどね!

あ、そういえばSEC、宜しくお願いします!
宣伝もした所で、今回はこの辺で。

AndroidのAPKファイルをBasic認証掛けて公開する

こんちには、こんばんわ、こまんたれぶー。中川です。

IPアドレス的に不特定多数の人にAPKをテストプレイしてもらいたいときに、どこかの公開サーバ上にAPKをおいておいてテストプレイヤーにメールか何かでAPKのURLをおくってダウンロードしてもらう。っていうのはよくある話しだと思います。

で、そのときに「やっぱり誰でも彼でも節操無くアクセス可能」っていうのは怖いじゃないですか。そういう時はこれ。Basic認証ですよね?

そう。Basic認証。.htaccessとかで

<FilesMatch “^.*\.apk$”>
AuthUserFile authuserfile
AuthGroupFile /dev/null
AuthName “apk”
AuthType Basic
require valid-user
</FilesMatch>

こんなことしますよね?そして、http://example.com/chou_omoshiro.apkとかのURLを叩いてもらうわけです。これで認証ダイアログが出てきてDLが始まって万事OK!…とはならないんです。Androidの標準ブラウザからアクセスする場合。

ちょっと詳細はリンクはらせていただきます。

Androidでapkファイルのダウンロードに失敗する原因

ググってみると、どうやらWebブラウザとダウンローダが別プロセスだかになっていて、認証情報がブラウザからダウンローダへ渡されてないため、ダウンロードに失敗するとか。

長い前置きでしたが、結局どうしてみたか。色々考えて実験した末、PHPでCookieとRedirectを組み合わせて実現してみました。

PHPは2つです。

  • setcookie.php — Cookieの設定とRedirectを行うPHP
  • apkdown.php — CookieをチェックしてAPKをレスポンスするPHP

それぞれコードをさらしてみます。

setcookie.php

if(!isset($_SERVER['PHP_AUTH_USER'])) {
echo(‘do not set basic auth’);
}
else {
setcookie(‘name’, ‘value’, time() + 24 * 3600 * 7, ‘/’);
header(“Location: http://example.com/apkdown.php”);
exit;
}

setcookieの最後の’/'は無いとダメです。

apkdown.php

<?php
$cookie = $_COOKIE['name'];              // Cookie取得
$ret = $cookie===’value’ ? TRUE : FALSE;
if( $ret ) {
header(‘Content-Disposition: attachment; filename=”chou_iketeru.apk”‘);
header(‘Content-Type: application/vnd.android.package-archive’);
header(‘Content-Transfer-Encoding: binary’);
header(‘Content-Length: ‘.filesize(“chou_iketeru.apk”));
readfile(“chou_iketeru.apk”);
exit;
}
else {
echo “Cookie does not exists.\n”;
}

同じフォルダにchou_iketeru.apkがある想定です。

あと、.htaccessはこんなかんじ。

<FilesMatch “^.*\.apk$”>
deny from all
</FilesMatch>
<Files “apkdown.php”>
allow from all
</Files>
<Files “setcookie.php”>
AuthUserFile hogehoge
AuthGroupFile /dev/null
AuthName “apk”
AuthType Basic
require valid-user
</Files>

apkはアクセスできないように。apkdownはCookieによる認証任せで。setcookie.phpにBasic認証をかける。

 

Android端末あるあるですが。普通にAPKにBasic認証かけてもDLできるものは出来るみたいですね。とりあえずGalaxyNexusはできませんでした。

今回の仕組みはさっきつくったばかり(笑)なので、機種によっては動かないとかあるかもしれないですが、こういうやり方思いついたよ!ってことで公開してみます。

2台の外部VPS同士のSVN mantis連携のやり方

お久しぶりです。
リプレーションのインフラ担当SE、utunです。

今回は外部VPS2台を利用した、mantisサーバとSubversionサーバの連携方法について、適当な感じに書いていきます。

mantisとsvnの用意

まぁ特に語ることはありません。
色んな所で紹介されているので、適当にインストールして下さい!

mantisとsvnの連携

さて、本題になります。
やりたいことは、

SVNにコミットしたら、Mantisにメッセージが出るようにしたい

ってことですね。
これも実は色んな所で紹介されています。
紹介されてるんだけど・・・。

大抵同じサーバ上にある前提

なんですよねぇ・・・。

諸々の都合で、サーバが分かれてる事って結構あると思います。
更に、SVNサーバは複数あるけど、Mantisは一台でやりたいってこともあると思います。

そんな時に、結構ある以下のコマンドでは不都合なんです。
# svnlook info “$REPOS” -r “$REV” | /usr/bin/php /var/www/html/mantis/scripts/checkin.php
これをpost-commitに書けばおk!
って言われても、
Mantisサーバは別にあるんですけど・・・。
そんな経験、貴方にもありませんか?

しかし、要はMantisの中にある「checkin.php」に「svnlook info」の内容を渡せればいいんです。
なので、簡単に言うとこんな感じにすれば出来ちゃいますよ!
# svnlook info -r $REPOS $REV | ssh -i /path/to/priv.key svn@mantis.server “/usr/bin/php /var/www/html/mantis/scripts/checkin.php”

うん。
sshさんはほんとに便利な子や・・・。
でも、このコマンドでやる場合は、以下の注意点があるので、ちゃんとやってね!
1、svnユーザがpriv.keyで、パスフレーズなしでアクセスできるようにしておくこと。
2、svnユーザはパスフレーズ無しな上、鍵のパスがセキュリティ的にいまいちなとこに置かれるので、この処理以外には使えないように細工しておくこと。

そんな感じ。
今回は大した内容でもないので、さらっと終了しておきます!

蛇足

9/1に江の島付近に行きました。
しかし、あまりの渋滞で、「付近」で引き返してきました・・・。
よく考えたら夏休み最後の日だったのか・・・。