hack my life: 2007年2月アーカイブ

2007年2月アーカイブ

Tracのサイトのヘッダーロゴを変えようと思ったんですが、何処で変えるのかにちょっと悩ました。
プロジェクトホーム/conf/trac.ini に [header_logo]って項目があって此処を変えればいんですが、問題は何処に画像ファイルを置けばいいか?って所です。

そこでデフォルトのヘッダーロゴが何処にあるかfindしてみたところ、
/usr/share/trac/htdocs下にありました。

・・・でもコレ、グローバル設定だよねぇ。
そこには入れたくないなぁ・・・と思っていたら、
プロジェクトホーム/htdocsというフォルダが有ることを発見。
此処に画像を置いてtrac.iniを編集

[header_logo]
alt =
height = -1
link = http://192.168.11.6/main/
src = common/trac_banner.png
width = -1

srcを変えれば良いわけですが・・・common?
そんあフォルダないぞ。Apacheのtrac.confでも定義してないし、trac.cgiで定義されているんだろうなぁ。

結局、マニュアル読んでいたら、

commonを指定すると、グローバルの/usr/share/trac/htdocsを見に行って、
プロジェクトホーム/htdocsを見に行くときは、site/画像ファイル名と書いてあげれば良いことを発見。

[header_logo]
alt =
height = -1
link = http://192.168.11.6/main/
src = site/hoge.png
width = -1

と書いておいた。なるほどぉ。
cssとかも同様に行けるのかな?

Tracをインストールしたものの、ロードマップが編集できなかったり、あれこれ制限があって、
なんでだろう?とか思ってたら、permissionの設定を忘れていたらしい。

結構こまかく設定できるようで、

リポジトリブラウザ

BROWSER_VIEW リポジトリブラウザ でディレクトリの一覧表示を行う
LOG_VIEW リポジトリブラウザ でファイルとディレクトリのリビジョンログを表示する
FILE_VIEW リポジトリブラウザ でファイルを表示する
CHANGESET_VIEW リポジトリへのチェックイン を表示する

チケットシステム

TICKET_VIEW 登録済みの チケット を表示し、 チケットクエリ を実行する
TICKET_CREATE 新規 チケット を登録する
TICKET_APPEND チケット にコメントや添付ファイルを追加する
TICKET_CHGPROP チケットの概要フィールドを除いた チケット 属性(優先度, 担当者, キーワードなど) を変更する
TICKET_MODIFY TICKET_APPEND と TICKET_CHGPROP の両方に加え、 チケット の解決を可能にする
TICKET_ADMIN 全ての TICKET_* 権限に加え、チケットへの添付ファイルの削除や
チケットの概要フィールドの変更を可能にする

ロードマップ

MILESTONE_VIEW マイルストーンを表示する
MILESTONE_CREATE 新しいマイルストーンを作成する
MILESTONE_MODIFY 既に存在するマイルストーンを編集する
MILESTONE_DELETE マイルストーンを削除する
MILESTONE_ADMIN 全ての MILESTONE_* 権限を持つ
ROADMAP_VIEW ロードマップ を表示する

レポート

REPORT_VIEW レポート を表示する
REPORT_SQL_VIEW レポート の SQL を表示する
REPORT_CREATE 新しい レポート を作成する
REPORT_MODIFY 既に存在する レポート を編集する
REPORT_DELETE レポート を削除する
REPORT_ADMIN 全ての REPORT_* 権限を持つ

Wiki システム

WIKI_VIEW 既に存在する Wiki ページを表示する
WIKI_CREATE 新しい Wiki ページを作成する
WIKI_MODIFY Wiki ページを編集する
WIKI_DELETE Wiki ページと添付ファイルを削除する
WIKI_ADMIN 全ての WIKI_* 権限に加え、読み込み専用 ページを管理する

その他

TIMELINE_VIEW タイムライン を表示する
SEARCH_VIEW 検索 の表示と実行
CONFIG_VIEW Trac について のページに追加して、現在のコンフィグやインストールされている
プラグインの表示を可能にする


なんてあります。

とりあえず全権限はTRAC_ADMINで付与できるようなので、

$ trac-admin /home/trac/project permission [ユーザー名] TRAC_ADMIN

とかしておいた。

Tracはスウェーデンにある EdgeWall Software が開発した プロジェクト管理ツールです。 Python で作成された Web アプリケーションであり、ソフトウェア開発のプロジェクト管理に特化しています。
最近ではOpenSourceプロジェクトをTracで管理する事が非常に多いです。
バグ情報や、変更依頼をチケットと呼ぶもので管理して、タスクやマイルストーンとして管理出来ます。
ちょっと使ってみただけですが、かなり良い感じです。また、SVNリポジトリのブラウザ機能まで付いています。

インストール

yumを使ってインストールします。
yumでインストールすると日本語化が一部されません。
Trac日本語化の準備で紹介している日本語版を最初から入れましょう。

$ yum -y install trac

Trac日本語化の準備

先に日本語化の準備をしておきます。
日本語化パッチはインタアクト株式会社さんから出ていますので、それを使わせて頂きました。


解凍したフォルダ内の、templatesと、wiki-defaultフォルダを/usr/share/trac/に移動するだけです。

最近のバージョンは日本語化パッチはなく、trac本体を含めているようです。
trac-0.10.3-ja-1というファイルをダウンロードして、付属のINSTALLに書いてある通り、インストールします。

$ python ./setup.py install

tracサイトの作成

$ mkdir /home/trac
$ trac-admin test initenv
 Project Name => [プロジェクト名]
 Path to repository => [ローカルリポジトリパス]

他にも聞かれますがデフォルトにしました。
DBはデフォルトでSQLiteを使うようですがPostgreを使う事もできるようです。今回はデフォルトにしてあります。

Apatchから使いたい場合はchown忘れずに。
seLinux使っているかたは、chconを。

$ chown -R apache:apache /home/trac
$ chcon -R system_u:object_r:httpd_sys_content_t /home/trac

tracdで動作確認。
$ tracd --port 8080 /home/trac/test

http://localhost:8080/にアクセスしてtracの画面が出れば成功です。
ここで、[パス] does not appear to be a Subversion repositoryとか怒られた方はSVNリポジトリの設定が間違っていると考えられます。リポジトリはローカルのパスを設定します。

"/home/trac/test/conf/trac.ini"が設定ファイルですので、ここを参考に設定を見直してください。他にも色々設定できるので、いじってみるとイイかも。

Apacheでtrac公開

mod_pythonが入ってい無ければインストール

$ yum -y install mod_python

/etc/httpd/conf.d/trac.confの編集

最終行に以下を追加

$ vim /etc/httpd/conf.d/trac.conf
ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/main">
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonOption TracEnv /home/trac/BizTrip
  PythonOption TracLocale "ja_JP.utf8"
  PythonOption TracUriRoot /main
</Location>
<Location "/main/login">
  AuthType Basic
  AuthName "Trac Autentication"
  AuthUserFile /home/trac/.htpasswd
  Require valid-user
</Location>
<Location "/main/svn_repos">
  DAV svn
  SVNPath "/home/svn/test"
  AuthType Basic
  AuthName "svn Autentication"
  AuthUserFile /home/svn/test/.htpasswd
  Require valid-user
</Location>

この例では/home/svnにリポジトリが有るものと想定しています。

Apacheを再起動

$ /sbin/servise httpd restart

Apache経由でアクセスしてみましょう。
上の設定ならhttp://localhost/mainですね。

Subversion(以下svn)はバージョン管理ツールです。
CVSとかVSSなどと同様、複数人で開発を行う際に、バージョン管理やロック、マージ、チェックアウト機能を持つ必須ツールです。
WebDAVを使って運用するのが定番なので、WebDAVの設定も同時に行います。

svn導入

初めはとりあえず targeted ポリシーでの SELinux の運用を考えます。
SELinuxといっても、selinux-policy-targeted-1.17.30-2.34 からは apache に関する制限もゆるくなったため、 標準の状態でもポリシーの変更なしに利用できるになっているようです。

まずは selinux-policy-targeted を最新の状態に更新します。

$ yum -y update selinux-policy-targeted

WebDAV/Subversion 関連のパッケージを一括インストール。

$ yum -y install mod_dav_svn

リポジトリ作成

次に管理DBを作成してゆきます。
Apachから見える用にしたい+tracを使いたいので、chownとSELinux用にchconを忘れずに行います。

$ svnadmin create --fs-type=fsfs /home/svnroot
$ htpasswd -cm /home/svnroot/.htpasswd test
パスワードの設定を求められる。
$ chown -R apache:apache /home/svnroot
$ chcon -R system_u:object_r:httpd_sys_content_t /home/svnroot

最後に、WebDAV の設定。設定ファイルは、/etc/httpd/conf.d/subversion.conf ですので、 コメントを消して設定を有効にします。

$ vim /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
#
# Example configuration to enable HTTP access for a Subversion
# repository, "/home/svnroot".  This repository must be readable
# and writable by the 'apache' user.
#
<Location /svn/repos>
   DAV svn
   SVNPath /home/svnroot
   # Limit write permission to list of valid users.
   <LimitExcept GET PROPFIND OPTIONS REPORT>
      # Require SSL connection for password protection.
      # SSLRequireSSL
      AuthType Basic
      AuthName "Authorization Realm"
      AuthUserFile /home/svnroot/.htpasswd
      Require valid-user
   </LimitExcept>
</Location>

これで一通りの設定は完了です。httpd を再起動しましょう。

$ service httpd restart

http://localhost/svn/repos/につないで、svnの画面が出れば成功です。

ふと昔のブックマークを見返していて思った事をが有ります。

はてなのid:naoyaさんの「僕やはてながPerlを選ぶ理由」というエントリ。

理由としてあげているのは此方。

僕の物作りの過程においては、コンパイラにやたらと怒られたり、変数の型を気にしたり、変数に入れるオブジェクトが何者だったりするかをいちいち意識しなければならない静的型付けの言語は性に合わなかったんですね。一方で簡単なことは簡単に、難しいことでもそれなりにできる Perl という言語は、僕のやり方に合っていたし、なんとなく"Hackしている"という気分にも浸ることができたんです。

最近Javaでコーディングする機会があって、僕もこの点を強く感じました。
ファイルの文字出力するのに何段階か経て出力ストリーム取得する手法や、明示的なキャストが必要だったりと何かと手間のかかる言語なのです。確かにセキュアでは有るかもしれません。理屈も納得は行きます。コンパイラは親切です。

でも、正直うっとうしいんですよね。
コンパイラは口うるさいし(僕はJavaのコンパイラを「コンパイラおばさん」とよんでいます。)
そもそもちょっとデバッグするのにいちいちコンパイルすのは非常に面倒です。

一度スクリプト言語を使うと、その軽快さと手軽さがやみつきになってしまうんですよね。
それが多少リスキーで有ろうとも、プログラムを壊しても、また直せば良いんですから。

もう一点共感する点がこちら。

僕がプログラミング言語を使わずに考え出したソフトウェアというのは、綺麗に設計されているようで、実際に作り出してみるとまったくその通りにいかない。あそこがおかしい、ここがおかしい。紙の上の設計に後戻りしては設計書の間違いを訂正するのです。

基本的にプログラムを書く際には、要件を纏めて、概要設計して、詳細設計に落として、プログラミング。
という流れがベストプラクティスと言われています。実際やると全然そんな事はなくて、SIベンダーに身を置いていると、やれ仕様違いだ、やれ仕様変更だなんて事が日常茶飯事です。

あげくの果てに、「設計で謳っている機能は技術的に不可能な事がわかりました・・」なんて事もありました。
一体なんの為の設計なのやら。
・・・だいたい、仕様変更ってなんだよ。だたの改良じゃないのか?って最近思うんです。

でも違うんですよね。
設計書ってそもそも、「良いプログラムを書く」為のベストプラクティスではないんですよ。

設計書は、


  • 顧客を納得させて仕様変更として納得させるため

  • 成果物として出す必要があるから

  • 最低限の品質を保証するため


という目的で有るんでしょう。

そして一番重要なのは、

  • 1からプログラムを書けない人でも戦力にできるように

って所ですかね。
そもそも設計する人間が普通にプログラムやらせてもらえないんですよね。
SI業界ではプログラマの地位はかなり低くて、言われたものを作るだけのコード書き(Coder)なんて怪しげな位置付けにされています。そもそもSEですって言っている人の70%位が其れこそほんと怪しいですけどね。

同じIT業界でも、色々なパラダイムがあって、パラダイムが違えば、そこには違ったルールがある。
少なくとも、SIとか、オープン系というパラダイムでは、優れたソフトウェアを作るより、顧客から文句のでないプログラムこそが最重要なんです。そりゃレベルも上がらないわな。

どちらかというと、政治的なやりとりに重きがおかれ、プロマネ > プロジェクトリーダー > SE > プログラマ > テスタというヒエラルキーはどうやってもひっくり返らないんでしょうね。

このパラダイムに居る限り・・・ですけどね。

まぁ、最近のSI系オープン系のパラダイムにはそれはそれで面白い潮流があるんですが、それはまた別のお話になるんで、そのうち。

自宅サーバーを公開してみました。
とはいってもグローバルIPは1アドレス年間1万以上するので、ちょっと敷居が高い。
そこでダイナミックDNSを遣って公開することにしました。


ダイナミックDNSとは

一般家庭でネットに接続している方はどこかのプロバイダと契約していると思うのですが、ネットにつないでいる以上、プロバイダからグローバルIPが割り当てられています。原理的には此のIPアドレスを打てば、グローバルIPがなくても、外から自宅のサーバーにつなぐ事が可能です。

問題は、時折此のIPアドレスが変わってしまう事です。
此のIPを固定に出来れば問題はないのですが、別の方法も有ります。ドメイン(hoge.example.comのような文字でIPを表す)をDNS(ドメインとIPアドレスを結びつけるサービス)に登録して、IPアドレスが変わる度に更新してあげれば良いわけです。
それがダイナミックDNSです。

無料でサービスを公開しているところもありますので、こちらのサイトを参考にしてみてください。


ダイナミックDNSに登録


今回はDynDNSというサイトを使うことにしました。

リンクをたどるとDynDNSのホームページが開くと思いますが、サイト右上のCreate Accountをクリックして、必要な項目を入力してアカウントを作成してください。といっても名前とメールアドレスとパスワードと希望するドメイン位なので、非常に簡単です。

Create Accountボタンを押したら、登録確認メールが来るまで待ちましょう。

登録確認メールが来たら、一番上のリンクをクリックしてアカウントをアクティブにします。
そのあと、トップページから先ほど登録したアカウントとパスワードでログインしてください。

ログインしたら左側のメニューにあるMyServiceをクリックして、Host Level Servicesの横にあるAdd Host Servicesをクリック。

追加画面でDynamicDNSを登録してドメインを作成してください。
以上でDDNSの設定は終わりです。自分が使っているグローバルIPは自動的に取得してくれます。


DiCEでDDNSの自動更新

DDNSは登録したものの、自宅サーバーのグローバルIPが変わった場合に通知するソフトが必要です。
DiCEや、ddclientが有名ですが、今回はDiCEをFedora Coreで使ってみます。

こちらから最新版をダウンロードしてLinux版をダウンロードします。適当なフォルダで解答してください。

DiCEを起動します。

# ./DiCE/diced

対話モードに入るのでコマンドを入力して行きます。
わからなくなったらとりあえず"?"を入力しましょう。

:?
*** 起動オプション ***

diced [-s|-d|-h|-e] [-b] [-l]

-s 起動と同時に開始します
-d 起動と同時にバックグラウンドで開始します
-h コマンドオプションを表示します
-b イベント実行時にビープ音を鳴らします
-l ログを作成します
-e 指定のイベントを実行して終了します


*** コマンド一覧 ***

exit DiCEを終了します
start DiCEを開始します
startd DiCEをバックグラウンドで開始します
setup DiCEの環境設定を行います
list 登録済のイベント一覧を表示します
add イベントを追加します
ed[it] <番号> イベントを編集します
del <番号> イベントを削除します
en[able] <番号> イベントを有効にします
dis[able] <番号> イベントを無効にします
ev[ent] <番号> イベントの情報を表示します
ex[ec] <番号> イベントを今すぐ実行します
logcr ログをクリアします

:add
新しくイベントを追加します

DynamicDNSサービス名を入力してください
"?"で対応しているサービスを一覧表示します
(P)戻る
対応しているサービスを表示してみる
>?
ZoneEdit unicc MyIP.US DtDNS
BIGLOBE dnip Now.nu StaticCling
theBBS ysdn Netservers dyns
Dynamx GetmyIP onamae.com IPDYN
yi my-domain MyDNS.JP JPN.ch
instat VALUEDOMAIN cheapnet Dyn.ee
DNS2Go dyndns @nifty SelfHOsT
ddns.ca ZENNO.COM p2p miniDNS
MyServer todd Earth ddo.jp
livedoor dhs ieServer dynDNS.it

=================================================
新しくイベントを追加します

DynamicDNSサービス名を入力してください
"?"で対応しているサービスを一覧表示します
(P)戻る
>dyndns
-------------------------------------------------
<< dyndns.org >>
URL: http://www.dyndns.org/
*** 情報 ***
dyndns.orgのオプションについて
「オフライン」オプションは、
dyndns.orgドナー登録者のみ利用できます。
=================================================
ドメイン名を入力してください
"?"でドメイン一覧を表示します
(P)戻る
ドメイン一覧を表示
>?
dyndns.org homeip.net ath.cx itacs.to
dnsalias.net dnsalias.org dyndns.info dyndns.tv
dyndns.ws homedns.org homeftp.net homeftp.org
homelinux.com homelinux.net homelinux.org homeunix.com
homeunix.net homeunix.org kicks-ass.net kicks-ass.org
serveftp.net serveftp.org
=================================================
ドメイン名を入力してください
"?"でドメイン一覧を表示します
(P)戻る
Dynamic Network Services(DynDNS.org)で設定したドメインを入力
>homelinux.com
=================================================
ホスト名を入力してください
(P)戻る
ホスト名を入力
>hoge
(このホスト名とドメイン名をくっつけたものがDNSです)
=================================================
ログインユーザ名を入力してください
(P)戻る
(DynDNSのログインするユーザ名を入力します)
>xxxxxxxxxx
=================================================
ログインパスワードを入力してください
(P)戻る
(DynDNSのログインパスワードを入力)
>xxxxxxxxxx
=================================================
登録するIPアドレスを入力してください
空白にすると現在のIPアドレスを自動検出します
(P)戻る
IPアドレスを自動検出させる為何も入力しない
>
=================================================
このイベントに題名を付けてください
(P)戻る
何でもかまいません。分かりやすいイベント名を入力します
>DynDNS_Update
=================================================
このイベントを実行するスケジュールを設定します
-------------------------------------------------
実行する頻度を指定してください (番号入力)
(0)1回のみ (1)1日1回 (2)1週間に1回 (3)1ヵ月に1回
(4)その他の周期 (5)IPアドレス変化時 (6)起動時
(P)戻る
> 5
-------------------------------------------------
IPアドレスがあまり変化しない環境の場合、更新せずに一定期間を過ぎると
アカウントを削除されてしまうことがあります
IPアドレスの変化が無い時に実行する間隔を指定してください
(0)7日毎 (1)14日毎 (2)21日毎 (3)28日毎
(4)35日毎 (5)56日毎 (6)84日毎
(P)戻る
> 0
=================================================
詳細オプションを設定します
-------------------------------------------------
[ ワイルドカード ]
(0)OFF (1)ON
番号>1
ワイルドカード(www)を有効にすることにより、「www.linux.homeip.net」になります
-------------------------------------------------
[ メールエクスチェンジャ ]
入力>
-------------------------------------------------
[ バックアップMX ]
(0)NO (1)YES
番号>0
-------------------------------------------------
[ オフライン ]
(0)NO (1)YES
(0)NOを選択
番号>0
-------------------------------------------------
[ システム ]
(0)dyndns (1)statdns (2)custom
番号>0
=================================================
このイベントを有効にしますか? (Y/N)
(イベントの有効/無効は"EN/DIS"コマンドで切替えられます)
有効にする
>y
=================================================
イベントを保存しますか? (Y/N)
保存する
>y
イベント"DynDNS_Update"を保存しました
=================================================
:

イベントリストを表示
:list
(No.) (イベント名) (スケジュール) (次回予定)
0 * DynDNS_Update IPアドレス変化時 (7日毎) 02/28 21:14
イベント詳細を表示
:ev 0
-------------------------------------------------
[イベント名 ] DynDNS_Update
[状態 ] 有効
[DNSサービス ] dyndns
[更新ホスト ] hoge.homelinux.com
[ユーザ名 ] xxxxxxxxxx
[IPアドレス ]
[スケジュール ] IPアドレス変化時 (7日毎)

[次回更新日時 ] 2005年2月21日、21:14:06
[最終実行日時 ] 1899年12月30日、0:00:00
[最終更新IPアドレス] *
[最終更新結果 ] コマンドが実行されました
(ID:000000)
-------------------------------------------------

:exit


さて、自動的にIP更新にしてもIPがとれない方もいるかもしれません。
私がそうでした。

そこで、設定をもう一つします。

# ./DiCE/diced
:setup
IPアドレスの検出方法を指定してください
(0)自動検出
(1)ローカルのネットワークアダプタから検出
(2)外部のスクリプトから検出
>2
------------------------------------------------
スクリプトのURLを入力してください
(www.ugtop.comの確認くんを使わせていただきます。)
>http://www.ugtop.com/spill.shtml
------------------------------------------------
プライベートIPアドレスも検出対象ですか?(Y/N)
>N
------------------------------------------------
IPアドレスの検出をテストしますか?(Y/N)
>Y
検出IPアドレスxx.xxx.xx.xxx
------------------------------------------------ 

デーモンの起動

デーモンの起動と自動起動を設定します。

# ./DiCE/diced -d
# vi /etc/rc.d/rc.local
最終行に以下を追加
[DiCEをおいたディレクトリ]/DiCE/diced -d -l

以上で終了です〜。
あとはモデムルーターにスタティックIPマスカレードをしていしてあげればOKです。
ルーターによって設定が違うので、詳しくはお使いのルーターのマニュアルを読んでください。

別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。第二段。

レシピはSSHの多段階接続です。
ちなみにsshdはOpenSSHです。

なんというか、networkの華がある機能ですねぇ。


が。。。。

ssh+proxycommandに大苦戦。

構成としては、


クライアント -----> 踏み台sshサーバ(a) -----> 目的のサーバ(b)

って事がやりたい訳です。
なんでこんな面倒な事するかというと、
直接目的のサーバへはセキュリティ上sshを許可したくない。
かといって、一端踏み台サーバにログインして、目的のサーバにsshすると、踏み台サーバに全ての公開鍵を持っていなくてはならないので、セキュリティ上問題があるから。

で対策として考えたのはssh -D かProxyCommandの2通り。

ssh -Dのダイナミックルーティングだと、踏み台サーバに鍵を持っていないといけないらしいので、却下。ProxyCommandで対応することにした。

やり方は結構単純で、
クライアントのlinux内に〜/.ssh/configというファイルを作っておいて、
こんな感じに記入。

Host hoge.example.com
  ProxyCommand ssh -l [踏み台サーバのユーザ] piyo.example.com nc %h %p

コレでhoge.example.comにsshすると、piyo.example.com へ ssh 接続して nc コマンドを起動します。
nc コマンドの引数には %h と %p を指定していますが,これは (b) を起動する際に,(a) を起動したときの接続先のホスト名とポート番号に置き換えられます。
この設定なら %h は hoge.example.com に,%p は 22 に置き換えられます。

問題はsshを全て公開鍵認証にしてあること、
踏み台サーバも公開鍵がないとアクセスできないので、
実際sshはこうやって打ちます。

# ssh -l [目的サーバのユーザ] hoge.example.com -i [公開鍵のパス]

この公開鍵は、踏み台サーバ+目的のサーバ双方で同一の鍵にして有ります。(別々に指定するやり方もあるかも・・・)

これから実験する予定な事

1 踏み台と目的サーバの公開鍵を分けられるか?
2 分けられない場合パスフレーズだけでも別にできるか?
3 クライアントがwinの場合はどうやる?

辺りです。1はよく解らないのですが、2はいけそうな気がします。
2段階目の接続のときにもパスフレーズ聞かれましたから。
windowsで同じことをやる方法はソフトゥエア依存なので、これから調べます。PuTTyにはそういう機能があるらしいけど。。。どうなだろ?

ちなみに調べていくうち知ったTips

  • sshコマンドで公開鍵を指定しない場合、〜/.ssh/identityというファイルを探しに行く。ファイルが見つかった場合、コレを公開鍵として使う。通常のパスワード認証のサーバにアクセスしても問題はない。(鍵のパスフレーズを無駄に入力させられるだけ)この方がオススメ。
  • 公開鍵のパーミッションは600にしておくべし。他のユーザが読めるようだとエラーになる。
  • sshでつながらない場合はssh hoge.example.com -vとやるとデバック出力が見れる。
  • ログが見たい場合は/var/log/secure。ただほとんど接続先のログに吐かれる(あたりまえか・・)

はぁ〜、しんどかった。 ヽ(´Д`;)ノアゥア...

別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。

レシピはOpenPNEへ携帯から日記投稿機能の設定です。

以前会社でSNSを構築した際に、
SNSにOpenPNE,メールサーバーにPostfix + Dovecot + Procmailで構築したんですが、携帯からの投稿機能を最後の最後に回していて、すっかりわすれていたんですね。

実際に投稿しようとしてエラーになって、初めて思い出したんです。迂闊。
「こんなのちょろいだろ〜」とか思っていたのですが・・・

       大 苦 戦 ヽ(´Д`;)ノアゥア...

誰かが二の鉄を踏まないようにアップします。

まず構成を書いておきましょうか

メールサーバはPostfixを使っていて、受信用にDovecot。メール振り分けにProcmailを使っています。

受信メールをユーザーのメールボックスへ送信設定

SNSを立てた時に、送信側は設定していたんですけど受信側が手付かずだったので、まずこのマシンのユーザーにメールが届くように設定しました。

早速此処からトラブルです。/etc/log/mail.logを見ると、

 
(expanded from ): can't create user output file. Command output: procmail: Renaming bogus mailbox
"/var/mail/snsadmin" info "/var/mail/BOGUS.snsadmin.Xj0y" procmail:
Couldn't create "/var/mail/snsadmin" procmail: Couldn't chdir to
"/home/snsadmin/Maildir" procmail: Couldn't create or rename temp file
"./tmp/1162346941.5352_0.sns.example.com"

なんて事をおっしゃる。
要するに書き込み権限が無いよって言われているんだが・・・
Procmailって何の権限で動いているんだ!?

rootではないな・・・と思い。手当たり次第Mailboxをpostfix : postdropに設定して回るもダメ・。
仕方ないので、秘奥義" chmod 777 *" を発動。・・・全然ダメ。

行き詰まったので、google先生に質問すると、procmailrcが怪しい。
メーリングリストとか漁っていたら、書くユーザーのホームディレクトリに.procmailrcを書くと各ユーザーごとに反映されるらしい。

というわけで、実際に

SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/procmail.log

というファイルをホームディレクトリに置いてみたら、あっさりOK。デーモンがユーザー単位でrc読んでいるって感覚がよくつかめてないけど、とりあえず解決。

各ユーザー宛のメールは、ユーザの権限で書き込みされるようだ。具体的に言えば、hogeユーザーのMaildirにはhoge:hoge権限でOK

OpenPNEの携帯投稿スクリプトに受け取ったメールを転送

次に実際に携帯メールでsnsに投稿してみると・・・
あて先が[b2-1f.....386397@sns.example.com]のように乱数がユーザー名になっている・・・

これは参った。しかも全員違うらしい。

メール投稿の仕組みはメールの内容を "/OpenPneルート/bin/mail.php"に渡してあげればよいのだが・・・

メールアドレスのユーザー名と、システムのユーザー名をマッピングしているのがエイリアス (/etc/aliases または /etc/postfix/aliases)なのだけど、まさか此処に全ユーザー入れて、システムに全ユーザー登録するのも現実的でないし、毎回ユーザー名変わったらそれだけでアウト。

なんとかユーザー名以外で取りたい。
始めは正規表現でいけないかと思ったのだけれど、上手く行かない。regexpテーブルって有るんだけどなぁ・・・(´・ω・`)ショボーン

今度はvirtualドメインを使ってみるコレはいけそう!
と思いきや今度はvirtualドメインだとコマンドが投げられない。
・・・(,,゚Д゚)† (この辺りで悶絶)

この後あれこれ試して、ようやく見つけた解決法が、

これ

/etc/postfix/main.cf
virtual_alias_maps = hash:/etc/postfix/virtual
alias_maps = hash:/etc/aliases

/etc/postfix/virtual
@sns.example.com sns_mailphp

/etc/aliases
sns_mailphp: "|/usr/bin/php /var/www/sns/bin/mail.php"


要するに何をしているかというと、
virtual_host_mapsで/etc/postfix/virtualを読み込んで、此処で@sns.example.comドメイン宛に飛んできたメールをsns_mailphpという架空のユーザーに割り当て。
そのあとaliasesをlookupして、sns_mailphpがマッピングしている"|/usr/bin/php /var/www/sns/bin/mail.php"コマンドを呼び出す・・と。
(補足:ちなみにsns_mailphpというユーザーをOSに作成する必要はない)

こうしてみると結構単純なんだけど、知らなかったからえらい時間食った。

・・・やれやれ。

最近SNSよりもBlogの方に思ったことを書くことが多くなってきました。
特別SNSがダメだと言っているわけではなくて、SNSはSNSなりの魅力があるのだけれど。

今年の初めに友人とSNSとBlogの違いについて話した事があります。
決定的に違うと感じるのは、SNSに日記を書いているときは、どうしても読む人の顔が浮かんでしまうのです。

SNS自体は学生時代のたまり場であったり、気の合う仲間同士の集まりであって、
それはそれで居心地が良かったりもするのですが、近い存在で有るからこそ、書けない事、書きづらいことができてしまう。

特定少数(あるいは多数)に向けてエントリをしている訳で、
思っていることをストレートに書くのはなかなか難しい。
コメントが付けづらいかな?と気を回してしまったりする。

一方Blogは誰が読むかはわからない。
不特定多数に向けて書いている訳で、それはほとんど読者を意識していないにかぎりなく近い。

読んでくれる人は今考えると頭に浮かぶのだけど、その人達を意識してかいているかというと全然そんな事にはならないんですね。SNSだと最新日記にエントリがあると、何となくクリックしてしまって、読んだのはよいけれど、コメントが書けない、でも足跡が残ってしまうから、コメントしておかないと。。などど変に気を遣ったりもする。
はっきりいってそんなコメント要らないんだけれど、どうしても考えてしまう。

Blogは意識的に見に来ない限りなかなか目を通さないだろうし、足跡なんてないから(やろうと思えば多少できますけど)読者が非常に見えづらい感じがしています。
意外と此処が私は好きで、勝手気ままに思ったことを書けている気がします。

勿論なんでも書けるか?というとそんな事はないのだけれど、此処は自分の世界であって、よほどの事がない限り、あれこれ言われる事がないんですよね。
アルファブロガーともなるとそうも言っていられないのでしょうけれど、そこにはまた別の世界があって、SNSとはやはり違うのだろうなぁ・・・と想像しています。

SNSは悪く言ってしまえば馴れ合いな所があるので、そこが逆にストレスになってしまうのでしょうか?
そこそこ親しい位の人達が、自分の世界に入り込んでくると言うのはそれはそれでなかなかしんどいことなんではないかな?とも思う訳です。

技術に対する知的欲求が戻ってきました。

一時的に、新しい技術知識を上手く収集することができなくなっていたんですが、
近頃、bookmarkのチェックとか、RSS読んだりとか出来るようになりました。

精神的にバランスを崩していたとか、気が乗らなかったわけではないんですが、
何となく新鮮みが無くて、なんというかイマイチ現実感を伴わなかったんです。

もう一つ最近になってわかった事があります。
元々自分は創成型の人間で守勢の人間ではなかったのでが、最近がむしゃらに進む事が常に正しいわけではないな、と思ってきたのです。

新しいことにすぐ飛びついたり、思ったら突っ走る傾向があったのですが、
最近になって、耐えることを覚えました。色々思うことはあるのだけれど、其れを一端自分の中にストックしておいて、その時出来ることを最大限にやっていれば良いのかな?と思えるようになってきた気がします。
いままで無かったカタチの余裕が生まれて来たのかもしれないです。

どちらがより正しいのか?というのではなく、進むべきときはすすんで、耐えるべきは耐える。
その辺りのバランスが大切なんだなぁ。。と思う訳です。

今は色々な事が新鮮に感じられています。
もう少ししたら、もう一歩踏み出してみてもいいのかもしれません。

ずっと考えていて、漸く最近決心したことを初めて人に告げました。

自分では前向きに考えていて、それほど深刻に考えていなかったのですが、それを人に伝えるときはこんなににも心が痛い物なのですね。

そういえば、こんな台詞を何かの本で読みました。
多分田中芳樹さんの創龍伝だったと思います。(続の台詞だと思います)

(自分の足を切り取れば)それは痛いでしょう。しかし、切り取られた足のほうからすればそんな物は感傷でしかないのですよ。

一字一句その通りではないと思いますがこんな内容だったと思います。

私が感じている痛みもまた感傷でしかないんでしょうね。
それでも、それなりに痛いです。

あと何回此の痛みを味わい、
あと何回此の痛みを味合わせることになるのでしょうか・・?

OpenSSH は、SSH プロトコルを使用するネットワーク接続ツールの フリーな 実装です。最近のLinuxディストリにはデフォルトで入っているものも多く、Fedoraにも標準で搭載されています。今回はそのまま使う事にします。

インストール

openssh-serverのインストール

# yum -y install openssh-server

openssh-clientsのインストール

# yum -y install openssh-clients

OpenSSHの設定

sshd_configの変更

# vi /etc/ssh/sshd_config

ルートログインの禁止
#PermitRootLogin yes
を変更
PermitRootLogin no

パスワード認証を禁止(鍵方式にするため)
#PasswordAuthentication yes
#PermitEmptyPasswords no
を変更
PasswordAuthentication no
PermitEmptyPasswords



SSH2鍵の作成


さて鍵の作成に移るわけですが、此処でちょっと注意点というか勘違いしやすい所を一つ。
一般的にSSHの鍵はクライアントで作成した公開鍵を、SSHサーバー側のauthorized_keysに登録するものです。
初め設定したときは、勘違いしていて、サーバーで生成した鍵をクライアントに持って行くものだと思っていました。其れも不可能ではないのですが、クライアントによっては繋がらない可能性が有ります。

Unix系OSでしたらopenssh-clientsを使って生成すればよいでしょうし、
Windows系なら,Puttyやpoderosaなどのsshクライアントで生成出来ます。

此処では、OpenSSHでの鍵生成方法を記載します。

鍵を作成するユーザーになる。


# su - hoge

rsa方式の鍵作成

# ssh-keygen -t rsa
デフォルトの出力先に出力するか確認。

何も入力しないでエンターOKです。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): エンター

鍵に設定するパスフレーズ入力を求められます。
Enter passphrase (empty for no passphrase): パスワード入力
Enter same passphrase again:パスワード再入力


ユーザーディレクトリの.sshディレクトリの下の、
id_rsaが秘密鍵、id_rsa.pubが公開鍵です。

この公開鍵をサーバーのログインユーザーに設定します。
リモートログインしたいユーザーでサーバーに入ってください。
公開鍵はUSBやFTPでサーバーにアップしましょう。
置き場はユーザールート/.ssh/です。

# cd 〜/.ssh

ユーザーディレクトリから公開鍵をauthorized_keysに変更します。


# cat id_rsa.pub >> authorized_keys

鍵が第三者から読める用だと警告メッセージがでますので、
鍵のパーミッション変更しておきます。

# chmod 600 .ssh/authorized_keys


使った公開鍵を削除


# rm -f .ssh/id_rsa.pub

sshdの再起動


# sudo /etc/rc.d/init.d/sshd restart


これでクライアントから公開鍵認証でssh接続できるはずです。
ここではCLIからの接続方法を書いておきます。

# ssh -l ログインユーザー名 -i 秘密鍵のパス 接続先サーバーIPアドレス

鍵の生成で聞かれたパスフレーズを聞かれますので入力すれば繋がります。

Fedora Core6をサーバーとして公開するための最低限のセキュリティメモ第2段。
念のためウィルス対策ソフトを入れます。
今回はClam AntiVirusというソフトを使います。

ウィルス対策ソフト Clam AntiVirusのインストール

本体のインストール

# yum -y install clamav

続いてウィルス定義ファイルアップデータのインストールをします。

# yum -y install clamav-update

設定ファイルを変更します。

# vim /etc/freshclam.conf

# Comment or remove the line below.
Example

Exampleをコメントアウト

# Comment or remove the line below.
#Example


定義ファイルの最新化

# freshclam

ウィルスチェックのテスト

# clamscan --log=/var/log/clamav.log --infected --remove --recirsive /home/root

----------- SCAN SUMMARY -----------
Known viruses: 87363
Engine version: 0.88.7
Scanned directories: 1
Scanned files: 5
Infected files: 0
Data scanned: 3.30 MB
Time: 2.009 sec (0 m 2 s)


Infected filesが0ならば、ウィルスは検出されなかった事を表しています。

起動用shellの作成と登録

起動用shellの作成してcloneに登録しておくと良いでしょう。

# vim /root/clamav.sh

 #!/bin/sh
echo "Job Name (clamav.sh)"
echo "  開始(`date +"%k時%M分%S秒"`)"

rm -f /var/log/clamav.log > /dev/null 2>&1
freshclam --quiet
clamscan --log=/var/log/clamav.log --infected --remove --recursive / > /dev/null 2>&1
grep FOUND /var/log/clamav.log
rm -f /var/log/clamav.log > /dev/null 2>&1

echo " 終了(`date +"%k時%M分%S秒"`)"


シェルをrootのみ実行可能にしてcloneに登録

# chmod 700 /root/clamav.sh

# crontab -e
00 01 * * * /root/clamav.sh | nkf -n


コレでウィルス対策を自動的に毎日深夜1時に行ってくれます。

去年、たまたま見つけたギタリストにJerryCという人がおります。
初めて見たときは其れは其れは衝撃的だったのですが、久しぶりに改めてみたんです。


曲を聴けばわかる方も多いことと思いますが、
パッヘルベルのカノンをRock(というよりメタル)にアレンジした曲です。

このビデオがYou tubeにあがって以来、
多くのギター小僧がインスパイアされてしまって、
いまやこれだけ多くの人がカヴァーしています。

ここにも一人インスパイアされた小僧がいるんです。

もう狂ったようにギター弾いています。
ほんの一時間ギターにふれていないだけで、欲求が溜まって仕方有りません。
ソファーで一休みするときもギターを持って休みます。

左手人差し指が痛いですが、どうでも良いんです。
ギターさえ弾ければいいんです。

ここ数日、ギターばかり弾いていて、他の事に手が着きません。
ダメです、完全にハートに火が付いてしまいました。
一体なんてことしてくれるんですか。

最近ご無沙汰だったCakeを食べてきました。

代官山のMAMA TARTEというお店。
以前から話には聞いていたのだけれど、なかなか行く機会がなかったのです。
たまたまお出かけする機会があったので、ここぞとばかりに行ってきました。

■Round 1 vs カボチャのタルト
初戦のあいてはMAMA TARTEのカボチャのタルト。
このお店の人気メニューだそうです。

お味の方は、甘さ控えめでカボチャ自体の甘みを生かしたタルト。
クリームも牛乳くさくなくて、たっぷり付けて食す。
うま〜

■Round 2 vs 季節の柑橘タルト

1戦目が結構重かったので、さわやかなタルトをチョイス。

酸味のきいたさわやかな柑橘系フルーツと、カスタードクリームが織りなすハーモニー。
これまた絶品。カボチャのタルトと打って変わってジューシーな食感。これまた美味。

■Round 3 and more vs キルフェボン

帰りがけに思わず買ってしまったキルフェボンのケーキ君達。

左から、特選イチゴのタルト(品名忘れました・・)、ペリカンマンゴーのタルト、ティラミスのタルト。
イチゴのタルトは特選素材とかでちょっとお高い。でもすっごく甘くておおぶりなイチゴがたっぷり♪
ペリカンマンゴーのタルトが一番美味しかった。ヤヴァイ!これ絶味!!
ティラミスは、普通にティラミスで、コメントに困った。美味しいのだけど、別にキルフェボンでなくとも・・・という感じでした。

ふ〜〜、ごちそう様でした。
食べ過ぎな感じですが、押さえられていた欲求を解放するときはそれはそれは激しい訳で・・・

次は自由が丘のパリ セヴェイユ辺りを狙っています。

そろそろ本格的にエディタをemacsにしようと思っています。

Linuxとかいじっていて、ちょっとしたconfファイルをいじるなら、
起動の早いvi系エディタが便利なのだけど、エディタだけでなく、ファイラ、メーラーとしてもemacsを使える用になると、遙かに便利。

とりあえず、思っているだけでは始まらないので、
強制的にメインエディタを変えてゆきます。

MacではCarbon Emacs
Windowsではxyzzy
Linuxでは勿論GNU Emacsをチョイス。

MacだけはCtrlキーの位置が微妙に使いづらいですけど。。。。

多少はキーシーケンス覚えているから、何とかやっていけるかな。

ただし、MacのプログラミングだけはもうちょっとTextMate使おうかな。
TextMateは移動系のキーシーケンスがちょっと弱いのと、日本語対応がされていないのがちょっと厳しい。

最近あれこれ考え過ぎて、オーバーヒート気味です。
一度に色々考えるからいくないですよね。

そんな時意識的にいつもとる手段が有ります。

即ち、
「迷ったときほどシンプルに考えろ。」
って事。

深く考えれば考えるほど、どんどん深みにはまってしまうのもの。

単純に一番初めに思ったことを一番大切にすればいい。
その一番大切な事を崩す事なく、ゆっくり考えればいい。

ほら答えはもう出ているじゃないか。

実は迷っているときって、ほとんど答えは出て居るんですよね。
だからこそ迷っているんだもの。

このなかなか見つからない捜し物は、案外単純な場所にあったりする。
ただ、心理的な死角にあって見えていないだけなんだ。

最近一緒に仕事している後輩(といっても入社2ヶ月しか違わない)と作業をしていて、思いっきり触発されてしまっています。

彼はshellが得意で、shellのプログラムを任せているんですが、当然自分でもちょこちょこshellを書いたりするんです。
ちょっとわからない事があったら、「こういう事ってできない?」って聞くと、「う〜〜ん、たぶんこうやってやれば出来ますよ」って。

凄い!
shell素晴らしい!
普通のプログラムと違って、ちょっとしたツール群を|(パイプ)でつないで、パズルを組み立てる用に書くんですね!?

その分アイデア勝負みたいな所があって、ややこしい処理をさせるのは向かないけど、ちょっとした 便利プログラムや運用ツールを作るにはこれほど便利なモノはありません。

最近、会社に建てたSNSのDBバックアップをそろそろ考えないといけないな〜
なんて考えていたんですが、人手を介して毎週○時に実行してね!なんて完全に運用に乗らないので、shellでゴリゴリ書いてしまおうと考えています。
MySQLのバックアップ自体はやり方調べたので、shellを作っていたら、2時間ぐらい消し飛んでしまいました。(前半はSSHの調査をしていたせいもあるけど)

折角今日は早く帰ってきたので、ギターでも・・・とか思ったのに。
まぁ、楽しいし、勉強になるから良いか。

思えば、久々に技術適刺激を会社の人から貰って、ちょっと嬉しい感じです。
全然得意分野が違うので、得るものが沢山あるというか・・・もうすぐ終わってしまうけど、また一緒に仕事したいなぁ。

怪物を狩るものは、その課程において自らが怪物にならぬように意識せねばならない。深淵を覗き込む時、深淵もまた此方を覗き込んでいるのだ。

たしかそう言ったのはニーチェだ。

今日ふとこの言葉を思い出して、いささか憮然とした気持ちになった。

いつもと同じ毎日を過ごしていて、それはそれで貴重な事かもしれないけれど、時折自分が何者であるのか思い出していないと、足下ががらがらと崩れてしまう気がする。
だから、常に足下に広がる世界を意識しているのだけれど、時折無性に解らなくなる。

そんな時、決まって思うのは、自分はこの世界の何処にも存在していないんじゃないか?って事。
それが怖いからこそ、自分らしさを確認して、自分の存在を認識して、妙に安心したりするんだけれど・・。

でも、

自分が自分であるアイデンティティみたいなモノがはっきりと認識出来ない時はどうすれば良いのでしょう?
なんてふと思った。

思わず買ってしまった。
真・三国無双のサントラ。

最近のゲームミュージックはロックな感じでカッコイイ。

音源は真・三国無双2、真・三国無双、三国無双の三作品を収録しています。

一番のお気に入りは、合肥新城魏軍のテーマ「THE MEN OF INTELLIGENCE」。
ロックで、ハイソな感じがとても良い。
赤壁魏軍テーマの「POWER & GLORY」も良い。タイトルがいいね。それっぽくて。

真・三國無双 究極音盤
『真・三國無双 究極音盤 』
コーエー
¥ 3,041 (税込)

自宅のPCにFedora Core6入れて、DDNSでそとから繋げるようにしようと考えています。

最近会社のサーバーをあれこれいじっていたので、大分設定は慣れたのでメモ代わりに書いていきます。

インストールが終わったら初期設定をしていきます。


.bash_profileの変更


デフォルトだと/usr/sbin/にpathが通っていないので、.bash_profileにパスを加えます

# vim 〜/.bash_profile

PATH=$PATH:$HOME/bin

最後にパスを追加


PATH=$PATH:$HOME/bin:/usr/sbin



sudoの登録


sudoの設定です。
初めの設定はrootでしていくのですが、後々はsudoを使ってrootにならずにroot権限でコマンドを実行するようにしてゆきます。
viなどのエディタで/etc/sudoersを編集も出来ますが、visudoという専用のコマンドがあって構文チェックもできるので、こちらを使います。

# visudo

root ALL=(ALL) ALL

下記一行を追加

hoge ALL=(ALL) ALL

これでhogeユーザーはコマンドの前にsudoを付ければ、rootと同じようにコマンドを実行できます。
またコマンド単位でパスワードなしでroot権限と同じように実行するにはこんな風に記述も出来ます。

hoge ALL = (root) NOPASSWD: /usr/bin/vim

sshで接続出来るユーザーの限定

sshはセキュアなプロトコルですが、ちゃんと設定しないと危険です。 sshでrootにアクセス出来ないようにするべきです。 sshdファイルを編集しておきましょう。

# vim /etc/pam.d/sshd

最終行に以下を追加

account required pam_access.so

次にaccess.confを編集します。

vim /etc/security/access.conf


最終行に以下を追加します。

-:ALL EXCEPT wheel:ALL

上記でwheelグループのユーザーのみsshでアクセス可能になります。
wheelの代わりにユーザー名単位でも設定できますが、一部のディストリビューションでは有効にならないようです。

ユーザーのセカンダリグループにwheelを追加するのですが、ついでにやっておくことが有ります。

rootになれるユーザー制限

どのユーザーでもrootに慣れるのは個人使用なら問題ないですが、 複数ユーザーで使う場合は明確にrootに慣れるユーザーを制限すべきです。

login.defsを編集することで変更できます。

# vim /etc/login.defs

以下を追加。

SU_WHEEL_ONRY yes

続いてpam.dのsuを変更

# vim /etc/pam.d/su

#auth required pam_wheel.so use_uid

コメントを外す

auth required pam_wheel.so use_uid

最後にユーザーのセカンダリグループにwheelを追加します。

# usermod -G wheel hoge

ここまでが基本設定です。
といってもまだまだ危ないので、 sshを公開鍵認証にしてから公開しましょう。

たまたまCD物色していたら見つけた一枚。

デビルメイクライのサントラ。
その名も、『デビル メイ クライ デンジャラス・ヒッツ』

以前探した時は限定版(?)しかなくて、断念したんですが、
デビルメイクライ5周年記念と言うことで、去年の9月にカプコン セルピュータレーベルから リリースされたようです。

やばい!!
カッコイイ♪

1〜3の戦闘シーンをメインに収録されています。
まえまえから、音楽カッコイイのになんでサントラかしないんだ!っていう鬱憤を晴らしてくれました。

小説系の読み物がつきてしまった&欲しい本があったので、久々に本屋へ。

なんだか色々買ってしまいました。 笑
計13000円也。

やっぱりO'Reilly買うと高くつくなぁ。

アドセンス

MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore MoMAstore
MoMAstore
MoMAstore
MoMAstore
MoMAstore