「 2012年04月 」一覧

HTTPからのIRC


IRCクライアントをインストールできない環境や、そもそもHTTP通信しかできない状況で、
IRCを使ってやりとりをしたいということがあります。そんなときに、http2irc的なものが欲しくなります。

以前、http2ircみたいなプログラムが手元にあったのですが、紛失してしまって誰か作っていないかなと思って調べてみるとありました。数は少なそうですが、ありました。

  • WebIRC
  • CGIIRC

今回、CGIIRCを試してみたので導入までの流れをメモとして残しておきます。

CGIIRCのセットアップ

本家、http://cgiirc.org/ からCGIをダウンロードしてきます。
そして、 httpとしてアクセスできる場所に配置します。
ここで配置した場所でCGIを許可する設定となるように httpd.conf を編集しておきます。

cgiirc-0.5.10.tar.gz を展開すると、cgiirc.config という設定ファイルがあります。
このファイルに設定を書き込んで、セットアップは完了します。非常に簡単です。

cgiirc.configの編集

下記の項目くらいを編集するくらいで十分でしょう。

  • default_server 接続する標準のサーバー
  • default_channel 接続する先のチャンネル名
  • image_path imageが配置されているパス。ブラウザーから見えるアドレスで記述すること.
  • irc charset = iso-2022-jp という行を追記する。日本語環境で使う際に必要です。
  • interface timestamp = 1 時刻の表示を有効にします。

GitLabを使う


前回までに構築したGitLabにクライアントからアクセスしてみます。
クライアント側は、次のソフトをインストールします。

  • tortoiseGit  1.7.7 (x64)
  • msysgit  (Git-1.7.10-preview20120409)

ちなみに Windows7 x64をクライアントOSとして使用しています。
tortoiseGitをインストールした後で、msysgitをインストールしました。

注意点として、sshクライアントをどうするかという点があります。
今回は TortoisePLink を使う方向で環境を用意してみます。
(msysgitに付属の方を使うと若干環境構築が楽になる…かも.問題が起こったらこちらの方に切り替えてみるといいかも)

基本デフォルトでインストールしていきました。

GitLabでユーザー作成

以前設置したGitLabに管理者としてログインし、普段使うユーザーを作成します。

青丸で囲んでいる部分を押して、ユーザー作成

ユーザーの各種情報を入力していきます。

ここでメールアドレスですが、メールアドレスとして正しい形式ものを要求するようです。
入力が終わったら、Saveボタンを押して終了です。

 

ユーザーが作成されるとこのような画面となります。ユーザーが作成されたら、管理者はログアウトしておき、トップ画面に戻しておきます。

ssh認証キーを作成する

GitLabへのアクセスではssh認証キーを要求するので、これを作成します。

スタートメニューから、”TortoiseGit”/”Puttygen” というプログラムを起動します。
起動させたら、 ウィンドウ中央にある、”Generate”のボタンを押して、ウィンドウ内の空白部分でマウスをぐりぐり動かしてキーを完成させます。

キーが完成したらとりあえずそのウィンドウはそのままにしておきます。またあとで操作します。

先ほど作成したユーザーで、GitLabにログインします。
そして、そのユーザーのプロファイルを開き、 ssh keyの登録画面を表示させておきます。

この画面で、Titleはわかりやすい名前を入力し、Keyの部分で先ほどのキーを生成したウィンドウで表示されているキーをコピー&ペーストします。この部分でペーストするのは、赤枠部分に書かれているテキスト全てです。貼り付けが終わったら、Saveボタンを押して、登録を完了させます。

続いて、キーの秘密鍵を保存します。オレンジ枠の部分の、”Save Private key”のボタンを押して、パスフレーズないよ警告を無視して、保存します。ここでは仮に、gitlab-accesskey として保存しました。これでこのウィンドウはもう閉じても大丈夫です。

GitLabにプロジェクトを作成

GitLabにプロジェクトを作成します。

Dashboardのメニュー画面に戻って(家のアイコンをクリック)、画面下部の方に表示されている、”New Project”をクリックします。

プロジェクトの名前を入力するとPath, Codeなどは自動的に入力されます。基本変更しなくてもよいはずなので、そのままにしておきます。Descriptionには適当にプロジェクトの説明等を入れておきます。入力したら Save を押しておきます。

プロジェクトを作成するとこんな画面が表示されます。


これらはコンソール版Gitを使っているときにはこの通り入力していけばよいのですが、今回はTortoiseGitを用いてと言うことなので眺めるだけにしておきます。

Subversionと違って、リポジトリもまずはユーザーが作ってそれをコミットという形になります。

Gitのリポジトリを作成

さて、Gitのリポジトリを用意します。適当なフォルダを開いて、そこで空のフォルダを用意します。
適当に、HelloGit とフォルダを用意してみました。そのフォルダを右クリックして、
“Git create repository here”を選択します。OKをおして続行するとGitリポジトリができあがります。
(その HelloGitフォルダの中を見てみると、.git フォルダができています。 )

このフォルダに Readme.txt を作成してみます。中身は適当に Hello, git とかしておきます。

ファイルを用意したら、まずGitの管理対象に加えるために、ファイルを選択して右クリック、

“TortoiseGit”/”Add” を選択して(ファイルにチェックを付けて)追加します。その後OKを押してウィンドウを閉じます。
続いて、 ファイルを追加したので “Commit”操作をしておきます。このCommitはまだローカルでの作業になります。同じように右クリックして、”Git Commit -> “master” を選択します。コメントを入力した後、OKを押します。

これでGitLabにこのリポジトリが準備できたのでGitLabのプロジェクトにコミット(Push)を行います。

HelloGitのフォルダを右クリックして、”TortoiseGit”/”Push” を実行します。
初回なので、GitLabへのアクセスの設定を行います。 開いたウィンドウで、”Manage”ボタンがあるので押すと、新しいウィンドウが開きます。ここで以下のように設定します。

  • Remoteには、origin
  • URLには、 git@192.168.142.133:hellogit.git
    (アドレスは、適時修正すること )
  • Putty Key: には、さっき保存した秘密鍵のファイルを設定

これを入力した後、Add New/Save ボタンを押して、OKバタンを押して設定を閉じます。

閉じた後、Push操作のウィンドウでは、”Remote”の部分に、”origin”が入力されていることと思います。この状態で、OKボタンを押すと、GitLabに対してリポジトリのコミットが行われたことになります。
(初回接続なので、Puttyの警告ウィンドウが出てくることと思います、この場合にはOKで実行を継続してください)

どうでしょうか、成功したでしょうか?

GitLabにログインして、今追加したリポジトリ情報を確認してみてください。
Filesを開いてみるとこんな感じになっています。

これでtortoiseGitを用いて、GitLabを使うということができました!
あとは自由に開発を行っていくことができるでしょう。

わかっている問題点

自分で試してみてわかっている不具合として以下のようなものがあります。

  • たまにFilesにアクセスできないコミットがある
  • 日本語はUTF-8エンコードされたものでないと、GitLabの表示上では化けてしまう。
  • ソースコード中のコメントで、Shift-JISのものがある場合、文字化けで表示されるか、そのソースコードファイル全体がGitLab上から表示できない

いろいろとここまでたどり着くまでに Git初心者だったので苦労しました。
でもせっかくなのでしばらくはGitでいろいろとやってみたいかなと思います。

次回は、Redmineとの共存でもやってみようかなと思います。
噂ではそのまま共存はできず、一手間が必要らしいと聞いています。


GitLabのインストール


前回の予告通りGitLabのインストール手順を説明します。

準備

CentOS 6(x64)を
Minimum Server構成でインストールしたものを使用します。

まずこの環境下で以下の設定を行っておきます。

  • 外Webを見れるように環境を設定(ifcfg-eth0の編集)
  • SELinuxの無効化(/etc/sysconfig/selinuxの編集)
  • ファイアウォールの無効化(iptables -Fでクリアして設定保存)

依存関係インストール

GitLabが依存するプログラム群を下記のコマンドでインストールします。

pygmentsのインストール

redisのインストール

サーバーをここで起動させておきます。

ユーザーの追加

ここでいろいろと聞かれるのですが、パスフレーズも含め空Enter連打で設定します。
特に、パスフレーズは設定してはいけません。

gitユーザーとしてログインを試みます。
新規ホストなので、接続に関して問われますが yes と入力します。
gitユーザーにはパスワードを設定していないため、ログインは完了しません。
Permission deniedとなっても以下の処理を続けます。
ちなみに、gitユーザーにパスワード等設定してあってログインできた場合でも特に問題はありません。

ログインしたユーザー(gitlabhqやgitユーザー)を一度抜けて、再びrootで作業します。

gitoliteのインストール

gitoliteはgitlabhqから使用され、gitリポジトリを管理します。

実行すると設定ファイルが開くので下記のように変更を行います。

設定ファイルのセーブして終了は、”:wq” をタイプしてenter
rootユーザーに戻って作業を続けます。

gitlabhq のインストール

Ruby 1.9.2と、passengerをインストールします。

この最後のほうに出てくる Apache2への設定行(LoadModuleの周辺)をメモしておきます。あとで、httpd.confを編集する際に必要となります。

起動していなければ、mysqlサーバーを起動させます。

この時点で後で必要になる管理者ユーザーの情報が出力されるのでメモしておきます。

ホスト名の部分(git_hostセクションの host部)にIPかドメイン名を記述します。

rootユーザーに戻ってApacheの作業を行います。

末尾に以下のように記述を追加します。

LoadModule行がたくさん並んでいるところで、先ほどメモしておいたpassenger関連の記述を追加します。

Apacheを起動します。

ブラウザで “http://(IPアドレス)/gitlabhq/” に アクセスしてみます。

右図のように画面が出てきたら成功しています。ここでのログインのアカウントは先ほど、rake db:seed_fu を実行したときのアカウント情報でログインすることができます。

ログインがうまくできると次に示すような画面が表示されます。

自分が最初よくわからなかったので、ちょっとだけ書き込みを入れてみました。

あまり目立たなさそうですが、管理者メニューのアイコンが出ています。ここから新規のユーザーを追加することができます。また単なる画像に見える右上の部分では、プロフィールの編集ができるようになっています。後日説明しますが、ユーザーがsshキーを登録する際にはここからたどることになります。

ここまででひとまずGitLabの設置は完了です。
次回には、tortoiseGitを使って、このGitLabにリポジトリの登録をゴールにして、環境設定を記事にしたいと思います。


GitLabを試してみた


GitHubクローンである、GitLabを導入して Git+GitHubの操作感を体験してみたいと思います。
詳しい導入方法は次回以降に書くとして、試してみたときの感想を先に書いておきます。

環境

  • CentOS 6(x64) (ただしVM上)
  • GitLab 2.3
  • クライアントは tortoiseGit + msysgit (1.7.10)

感想

GitLabへの登録がsshキーを要求する点でいろいろと大変でした。この部分がSVNと比較してわかりにくい気がする。最初の手順なので、通常運用が始まってしまえばそこまで問題にはならないのだろうけど。

GitHub, GitLabの問題なのだろうけど、ソースコードをWebから確認したい際に、Shift-JISで書かれたソースコードで、日本語コメントが文字化けしてしまう。UTF-8のソースコードであればこれは大丈夫。既存SJISソースでGitへの移行を検討するなど、UTF-8のソースコードが使えない場合はちょっとGitLab使う利点が減る気がする。

それでもGitリポジトリの管理を集約でき、Web上からユーザーの追加やキーの登録ができるという点は魅力。複数ユーザーがいるときには管理者はちょっと楽ができる。SVNのときには、最初のリポジトリはサーバーのコンソールで操作する必要があったし…。

Redmineのリポジトリブラウザのように、優先するエンコーディングを設定する機能がGitLabのプロジェクトごとに設定できるようにならないか、期待していきたいと思います。


タイマーカウンタ その3


あれからもうちょっと深追いしてみました。

昔ながらのTSCのタイプ

  • PentiumM(family[06H],models[09H, 0Dh])
  • Pentium4 Xeon(family[0FH], models[00H,01H, 02H])
  • Pentium(P6)

これらは、タイムスタンプカウンタ(TSC)は内部プロセッサクロックで増加する。
この内部プロセッサクロックとは、コアの現在のクロックで決定されるものである。
ただし、Intel SpeedStep Technologyがクロック可変をもたらすので、TSCのカウンティングに悪影響を及ぼすことになる。

・・・なるほど、そこで次のTSCが出てきたわけですね

Constant TSCのタイプ

  •  Pentium4 Xeon (family[0FH], models[03H以降]
  •  CoreSolo CoreDuo(family[06H],models[0EH]
  •  Xeon 5100, Core2Duo(family [06H], model [0FH])
  •  Core2, Xeon (family[06H], DisplayModel[17H])
  •  Atom (family[06H],DisplayModel[1CH])

タイムスタンプカウンタは一定の割合で増加する。この増分はコアクロックの最大値から設定されるものである。
この機能は、コアの周波数可変に対応するために導入された。

あくまで、コアの周波数可変に対応までが目的です。
プロセッサの電源管理に対して、まったく対処されていないので、さらに次のTSC特性が出てきたというわけです。

Invariant TSCのタイプ

これは現在の Intel Core i シリーズから 搭載されているようです。

CPUID.80000007H:EDX[8] によってプロセッサがサポートしているかを判定します。
Invariant-TSCは、CPUのどのステートによっても一定割合で増加するTSCである。
つまりディープスリープに陥っていてもカウンタが止まらない。
このInvariant TSCを備える場合には、HPETやACPI Timerの代わりとして高精度なタイマーとして使うことが可能となる。

AMD CPUの場合

上記のはすべてIntel CPUだったので、AMD CPUではどうなのかを調べてみました。

  • AMD K8 Coreまで(すなわちAthlon64, Athlon64X2シリーズ)
    TSCは各クロックで増加する。パワーマネジメントにより悪影響を及ぼされ、1秒あたりの増分が変わる。さらに、コアごとに TSCの同期は行われていない。
  • AMD Barcelona/Phenom(それと Athlon64X2 kumaコードネームのもの)
    Constant TSCを搭載している。

“AMD Athlon™ 64 X2 Dual Core Processor Driver”というものをインストールすれば、TSCの同期問題はひとまず対処される模様。
AMDのConstant TSCという部分においては、 AMD64 Architecture Programmer’s Manual を参照すると以下のように書いてあり、Intelの Invariant TSCに近いものになるのではないかと思う。

The TSC counts at a constant rate, but may be affected by power management events (such as frequency changes), depending on the processor implementation. If CPUID 8000_0007.edx[8] = 1, then the TSC rate is ensured to be invariant across all P-States, C-States, and stop-grant transitions (such as STPCLK Throttling); therefore, the TSC is suitable for use as a source of time. Consult the BIOS and Kernel Developer’s Guide applicable to your product for information concerning the effect of power management on the TSC.

上記の参考文献

  • “Intel 64 and IA-32 Architectures Software Developer’s Manual” (2012March版) の記載事項より
    17.12 TIME-STAMP COUNTER  節
  • http://en.wikipedia.org/wiki/Time_Stamp_Counter の部分
  • AMD64 Architecture Programmer’s Manual