ssh2のキーが見たことないフォーマットだった時の対処の仕方

ある日、委託の方にサーバへのアクセス権を付与するためにSSHのキーをくださいと言ったら
以下のようなフォーマットで送られてきた。

SECSH形式?という解らない形式のものらしい。

と思ってよくよく調べたら

本来のSSHキーはこのような形式のようだ。

(本当か??)

今までOpenSSHに慣れすぎて来たという事なのかな。

というのは良いとして

これを普通のSSHのauthorized_keyに格納するには

としてやれば良い。

ローカルで環境ごとの仮想マシンを起動してるときにWARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!が出る場合の対処方法

というのは、SSHログインするときに
「SSH host key」というのを、確認してて
以前known_hostsに登録したものと違う場合に出すメッセージで
普段はほとんど出ないはずですが
仮想マシンで同じIPで別の仮想マシンを起動してたりすると
良く出ます。

たとえば、localhost:2200で仮想マシン1にSSHする時に

と聞かれて、yesとすることで

known_listsに仮想マシン1のHost Keyが登録されます。

この状態で
仮想マシン1を落として
仮想マシン2を再度localhost:2200で起動させた場合に

上記のワーニングが出ます。
これがめんどくさいので
localhostへのssh接続の場合は、このワーニングを出ないようにしたいと思います。

で、以下を追記

これでワーニングが出なくなります。

rubyのプロセスで、メモリ使用量が500Mを超えたらkillする

古いRailsとかで長生きなプロセスとかだと

メモリ使用量が多くなってくる。

あまりやりたくは無いけど、killする。

でも定期的に監視してkillしたい。

いなくなってもpassengerが起動するからkillだけで大丈夫かな。

じゃ、crontabにこれを書こう

awkで行数指定でファイルからあ行を抽出する

  • ファイルの1行目のデータを抽出する

  • ファイルの1行目~10行目のデータを抽出する

  • ファイルの1行目と5行目を抽出する

FreeNASのコンソールで、日本語のファイル名を表示出来るようにする

FreeNAS 8.3.1をインストールして、ある程度使い慣れてくると

コンソールに入ったりして作業するようになると思います。

ここで、Windows ファイル共有とかでファイルをおいてた場合、日本語ファイル名がコンソールに表示されないのです。
[shell][root@freenas] /mnt/data/hoge# ls -l
total 5
drwxr-xr-x 3 hoge hoge 3 Jul 24 18:59 ./
drwxr-xr-x 4 root wheel 4 Jul 24 18:44 ../
drwxrwxrwx 2 hoge hoge 2 Jul 24 18:59 ??????????????????/[/shell]
という表示になります。

これを解決するには・・・

今回はrootで入っているので

rootの.cshrcを編集します。

rootの設定ファイルは、read-only属性の領域にあるので、その領域をまずは書き込み可能に設定します。
[shell][root@freenas] /mnt/data/hoge# mount
/dev/ufs/FreeNASs1a on / (ufs, local, read-only)[/shell]
この「/」という所を書き込み可能に設定します。
[shell]mount -uw /[/shell]
そうすると
[shell][root@freenas] /mnt/data/hoge# mount
/dev/ufs/FreeNASs1a on / (ufs, local, soft-updates)[/shell]
このように変わります。

そしたら
[shell]cd ~
vi .cshrc[/shell]
とコマンドを叩き

ファイルの末尾に
[shell]setenv LC_CTYPE ja_JP.UTF-8
setenv LANG ja_JP.UTF-8[/shell]
を追加します。

最後に
[shell]mount -ur /[/shell]
とやってread-onlyに戻して完了です。

bashでfindの結果をつかって処理をする

具体的には、大量にできあがっているキャッシュファイルを、再作成したいような時、

一気に消すとキャッシュ作成コストが一気に発生するので、1ファイルずつ定期的に消したい。

しかも全ファイル自動的に。

ということで、実現するコマンド
[shell]find . -xtype f | while read x ; do rm -rf $x; sleep 0.3 ; done[/shell]
となる。findで取得した一覧を元に、whileでリストを回す感じです。

簡単でしたね。

/tmpに出来る変なファイルを定期的に消したい

/tmpにはウェブサービスを公開してたりすると、アップロードされたファイルの残骸とかが残ったりします。

これを定期的に消したい。
[shell]find /tmp -maxdepth 1 -name "*-0" -atime 2 -exec rm {} \;[/shell]
今回の対象ファイルの条件は、ナンタラ-0という感じに、末尾に-0が付くようです。

これを条件に削除するコマンドです。

-maxdepthというのは、/tmpの中の第一階層の物だけをターゲットにします、という意味

/tmp/nan-0 とかはヒットして、/tmp/a/nan-0はヒットしない。

-nameは、名前の条件を指定します。
*-0にヒットします。

-atime 2は、最終アクセスから2日経過してるファイルがヒット

-exec rm {} \; は、ヒットしたファイルに対して処理を実行すると言う意味で、この場合はrmなのでファイルを削除します。{}という所にヒットしたファイル名が入ります。コマンドの終わりを;で終わらせるのですが、コマンドライン上なのでエスケープしてます。また、;の前には空白が必ず必要です。

ImageMagickで、/tmpとかにmagick-ayu89r53とかいうサイズの大きいファイルが出来るのをなんとかしたい

ImageMagickを使って日々運用していると、時々ディスクフルアラートが出たりします。。

よく調べてみると、/tmpにmagick-ayu89r53とかよく分からないファイルが数十GB位のサイズになっていてびっくりします。。

別に定期的に出る訳では無く、たまに出たりするので、なんとも分からないのですが

ImageMagick本家のドキュメントを調べてみると

http://www.imagemagick.org/script/command-line-options.php
[text]-limit <em>type value</em>[/text]
というのが設定出来るようです。

このlimitの概要にはSet the pixel cache resource limit.となっていまして
具体的には
[text]<code>area</code>, <code>disk</code>, <code>file</code>, <code>map</code>, <code>memory</code>, <code>threads</code>, <code>time</code>[/text]
が指定出来るようです。

diskは、その名の通り、disk使用量。おそらく、この設定が/tmp/magick-ナンタラ

に影響しているのでは無いかと思ったりします。

これらの現在の設定値を確認出来るコマンドがあるので、叩いてみます。
[shell]identify -list resource[/shell]
このdiskの初期値が18.446744EBとか書いてあります。

EBって何ですか!?

と一瞬びっくりしますが、エクサバイトの事ですかね。

今の運用環境からするとほぼ無限なサイズがデフォルトに指定されています。

ここを変えるだけで、バカみたいにでかい/tmp/magick-ナンタラは出来なくなるかと思います。

まだ検証はしていません。

これから実験運用してみようかと思います。

ちなみに、このオプションの設定ですが

convertコマンドを叩く時はそのまま-limit disk 1GBと書けば良いです。

別アプリからライブラリを叩く場合は

ImageMagickの設定のディレクトリに入っているpolicy.xmlに、<policymap>があるので

このなかでname=”disk”のものを探して1GBに設定すれば良いはずです。

Ubuntuで、あるディレクトリ配下に作成されるファイルを定期的に削除する

定期的にファイルを削除したい場合、cronを使用する

例えば、/home/hoge/dataのlogディレクトリが作成されていたら削除するには

[shell]crontab -e[/shell]

で、cronの設定ファイルを開き

[shell]0 1 * * * cd /home/hoge/data; if test -e log; then rmdir -pr log; fi;[/shell]

と設定する

これで、一時間おきに/home/hoge/dataにあるlogディレクトリを削除してくれる

svnのリポジトリを全部gitに移行する

svnのリポジトリをgitで扱う方法として
svn gitというコマンドツールがある

今回はgitをリモートリポジトリにする方法は別途解説するとして

このコマンドを使用して、svnリポジトリをgitに移行してみます。

まずは、gitリポジトリをイニシャライズします。

イニシャライズ時に、リモートリポジトリにする前提で移行するので–bareオプションを付けます。
これは、my_prodディレクトリにソースを展開せずに管理情報だけを保持するリポジトリにするオプションです。
[shell]git init –bare my_prod[/shell]

svnへの参照情報をconfigファイルに設定します。

[shell]cd .git
vi config[/shell]
以下の内容を追記
[text][svn-remote "svn"]
url = http://localhost/svn/my_prod
fetch = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*[/text]

  • urlというのは、SVNリポジトリのベースになるURLですが、個々のリポジトリ名まで含んで問題ないみたい。
    このURIに/trunkとか/branchesとかをくっつけられる状態であればいいようです。
  • fetchというのは、マスターを指定する部分です。
    が、マルチマスター構成も可能で、ここは複数行書くことが出来ます。
    その際は、refs/heads/sub-musterとかをフェッチ先に指定する様にします。
  • branchesは、ブランチ配下を取り込むという指定です。
    ここの書き方としては「*」をかならず含まなければいけないようです。
    で、ブランチ名によるフィルタリングをして取り込みたいブランチだけを指定することも可能。
    branches/release_*:refs/head/branches/release_*
    という感じに。
  • tagsも同様です。

svnからリポジトリを取得

[shell]git svn fetch[/shell]
これで、http://localhost/svn/my_prodにあるtrunk、branches以下のすべて、tags以下のすべての情報がgitに取り込まれます。

このgitリポジトリをサーバとして公開すれば、svnからgitへの移行が完了となります。

gitoliteからcloneする

gitoliteからリポジトリをクローンするには

Linux系の場合
[shell]ssh-keygen -t rsa[/shell]
でキーを作成する

id_rsa.pubを適当な名前でコピーする
例)gendosu-ubuntu.pub

gitoliteのサーバにsftpなどで送り込んで

gitolite-admin/keydirに格納する

gitolite-adminリポジトリをコミットして、プッシュ

これで、gitoliteへ公開鍵を設定完了
[shell]ssh gitolite@サーバ名[/shell]
とやると、gitoliteがメッセージを返してくれるはず

この状態で
[shell]git clone gitolite@[サーバ名]:[リポジトリ名][/shell]
とすると、クローンが作成される

Windows系

環境変数にHOMEという項目を作成して

c:\users\[自分のアカウント名]

を登録する。
要は自分のホームを指定する。

gitを扱う手っ取り早い方法

githubのWindowsクライアントをとりあえずインストールする

ターミナルでgitコマンドが使えるようになるので、そこで
[shell]ssh-keygen -t rsa[/shell]
を実行

c:\users\[自分のアカウント名]\.sshに

id_rsa.pubが出来ていると思うので、適当な名前(クライアントマシン名etc)でコピーする
例)gendosu-win.pub

それをpscpやwinscpなどで、gitoliteのサーバに送り込む

gitolite-admin/keydirに格納する

gitolite-adminをコミット、プッシュする

win側で

c:\users\[自分のアカウント名]\.ssh\configファイルを作成し
以下を追加
[shell]host gitolite
    user gitolite
    hostname 192.168.1.10 #サーバのIPかホスト名
    port 22
    identityfile ~/.ssh/id_rsa[/shell]
コマンドプロンプトで
[shell]ssh gitolite[/shell]
とやると、gitoliteがメッセージを返してくれるはず

gitクローンは
[shell]git clone ssh://gitolite/[リポジトリ名][/shell]
とやる

Apache Solrをインストールしてみる

Apache Solrを入れてみます。

ちょっと前までは、Apache Solrで日本語を扱う時は

SenとかGosenとかの日本語形態素解析ライブラリを一緒に入れる必要がありました。

Apache Solr 3.6からは、Kuromojiという日本語形態素解析ライブラリがApache Solrに同梱されるようになりました。

これにより、日本語を扱う時、Apache Solrだけをインストールすれば良くなりました。

ということで、Apache Solrのインストールをしてみます。

まず、Apache Solrのサイトから3.6をダウンロードします。

ダウンロードした物を適当に展開します。
[shell]tar xvfz apache-solr-3.6.0-src.tgz[/shell]
続いて、schema.xmlを編集します。

今回はtext_jaいうフィールドを日本語解析にかけようと思うので
[xml]<fieldType name="text_ja" positionIncrementGap="100" autoGeneratePhraseQueries="false">
</fieldType>[/xml]
というfieldTypeタグを使います。

※Apache Solrのexampleに入っているschema.xmlでは、すでにtext_jaのフィールドタイプが宣言されています。

この中にを追加し、さらにその中に以下を定義します。
[xml]<tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>[/xml]
これだけで、基本中の基本は完成しました。

続いて、フィルタですが
[xml]<filter class="solr.JapaneseBaseFormFilterFactory"/>[/xml]
を追加。

これは、動詞などを基本形でインデックスに登録する事を指定します。

たとえば、「入れられる」は
JapaneseTokenizerFactoryで
=>入れ/られる
と変換されます。
これに対して、JapaneseBaseFormFilterFactoryでは
=>入れる/られる

という変換をしてくれます。
[xml]<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_ja.txt" enablePositionIncrements="true"/>[/xml]
は、「の・を・が」などの語句をフィルタリングします。
[xml]<filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="stoptags_ja.txt" enablePositionIncrements="true" />[/xml]
は、品詞などをフィルタリングします。
[xml]<filter class="solr.LowerCaseFilterFactory"/>[/xml]
ローマ字を小文字にします。
[xml]<filter class="solr.CJKWidthFilterFactory"/>[/xml]
全角のローマ字を半角、半角カナを全角にします。
[xml]<filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>[/xml]
片仮名の表記揺れを補正します。

コンピューター => コンピュータ
のような感じ。

これらのフィルタを全部入れたfieldTypeは以下のようになります。
[xml]<fieldType name="text" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="false">
<analyzer>
<tokenizer class="solr.JapaneseTokenizerFactory" mode="search"/>
<filter class="solr.JapaneseBaseFormFilterFactory"/>
<filter class="solr.JapanesePartOfSpeechStopFilterFactory" tags="stoptags_ja.txt" enablePositionIncrements="true" />
<filter class="solr.CJKWidthFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_ja.txt" enablePositionIncrements="true"/>
<filter class="solr.JapaneseKatakanaStemFilterFactory" minimumLength="4"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>[/xml]
となります。

早速、試してみます。

cd solr
java -jar start.jar

で起動します。

続いて、管理画面を表示

http://localhost:8983/solr/admin

analysisというリンクをクリック

Field Analysis

の中のFieldをtypeに設定して、テキストエリアにtext_jaを入力

Field value (Index)に適当な文章を入れてみます。

Index Analyzerという所に、解析結果が表示されるはずです。

先ほど設定したフィルタを順に適用していった結果が表示されています。

crontabのマクロ

今まで0 0 1 1 *とか必死に書いていたのですが、マクロがあるようです。

Entry Description Equivalent To
@yearly (or @annually) Run once a year 0 0 1 1 *
@monthly Run once a month 0 0 1 * *
@weekly Run once a week 0 0 * * 0
@daily (or @midnight) Run once a day 0 0 * * *
@hourly Run once an hour 0 * * * *
@reboot Run at startup

memcachedのコマンドラインでの操作

memcachedの中身を確認したい場合にコマンドラインで叩いて中身を参照するには

まず、memcachedにtelnetで接続する

[shell]telnet localhost 11211[/shell]

すると、

[text]Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.[/text]

とでて、接続が確立したします。

次に、memcachedに登録されているデータの一覧を取得…の前に

memcachedは、データをslabという領域に分けて保存しています。

なので、コマンド一発でキーバリューの一覧を取得することは出来ません。

なので、まずはこのslabの一覧を取得します。

[shell]$> stats items
STAT items:13:number 1
STAT items:13:age 23763
STAT items:13:evicted 0
STAT items:13:evicted_nonzero 0
STAT items:13:evicted_time 0
STAT items:13:outofmemory 0
STAT items:13:tailrepairs 0
STAT items:13:reclaimed 0
STAT items:14:number 2
STAT items:14:age 23742
STAT items:14:evicted 0
STAT items:14:evicted_nonzero 0
STAT items:14:evicted_time 0
STAT items:14:outofmemory 0
STAT items:14:tailrepairs 0
STAT items:14:reclaimed 0
END[/shell]

このitems:13:numberという行の13というのが、slab番号で、この番号を検索キーにして

memcachedに登録されているキーバリューを取得します。

なので、次にslabの13に登録されているキーの一覧を取得します。

[shell]$> stats cachedump 13 1000
ITEM key1 [1264 b; 1332315959 s]
ITEM key2 [1264 b; 1332315959 s]
END[/shell]

これで、やっとキーバリューのキーの一覧(slab13の中の)が取得できました。

続いて、key1に入ってるバリューを取得するには

[shell]$> get key1
value1
END[/shell]

とやります。

Linuxでファイルの日時を変更する

最終参照・更新日時を指定日時に変える

最終参照日時を現在の日時に変える

指定したファイルと同じ日時に変える

※after.txtの日時をbefore.txtの日時に変更する

 

公開鍵認証の設定

公開鍵認証の大まかな手順

○ログインする側

公開鍵の作成
[shell]ssh-keygen -t rsa[/shell]

~/.ssh/id_rsa.pub
というファイルができあがるので、このファイルをログインされる側のサーバに何らかの手段で転送する。

○ログインされる側

公開鍵の設置

authorized_keys」ファイルにログインする側で作成した公開鍵の中身を貼り付けます。