gmt24's blog

Windows環境でLinuxカーネルソースをgitで入手

Cygwinにはgitが入っているのでKernel Hackers' guide to git - Kernel Newbies Japanを参考に実行してみました。

$ git-clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6
Initialized empty Git repository in /cygdrive/d/workspace/linux-2.6/.git/
remote: Counting objects: 807958, done.
remote: Compressing objects: 100% (136047/136047), done.
remote: Total 807958 (delta 672492), reused 806158 (delta 670865)ts
Receiving objects: 100% (807958/807958), 190.94 MiB | 438 KiB/s, done.
Resolving deltas: 100% (672492/672492), done.
Checking out files: 100% (24254/24254), done.

$

Git入門にはCygwinパッケージのgitだと途中でエラーになる、といいったこともあるようですが、、私の環境では問題ありませんでした。

あとEclipse Pluginとしてhttp://git.or.cz/gitwiki/EclipsePluginというのがあるようなのですが、パッケージングされていません。とりあえずことらもgitで入手だけ。

$ git-clone git://repo.or.cz/egit.git egit
Initialized empty Git repository in /cygdrive/d/workspace/egit/.git/
remote: Counting objects: 11910, done.
remote: Compressing objReceiving objects:   1% (120/11910), 20.00 KiB | 23 KiB/s
remote: Compressing objects:  eceiving objects3:   2% (239/11910), 60.00 KiB | 4
remote: Compressing objects:  5Receiving objects:   3% (358/11910), 140.00 KiB |
remote: Compressing objects:  Receiving objects:   4% (592/11910), 140.00 KiB |
remote: Compressing objeremote: cts: 100% (1881/1881), done.
remote: Total 11910 (delta 6454), reused 11910 (delta 6454)
Receiving objects: 100% (11910/11910), 2.57 MiB | 81 KiB/s, done.
Resolving deltas: 100% (6454/6454), done.
Checking out files: 100% (428/428), done.

$

ここからのビルド、インストール方法は下記のページに記載されています。
Chris Cruft » Blog Archive » Eclipse Git plugin installation

  1. EclipseにImport
    1. eclipseのFileメニューからImportを実行
    2. General > Existing Projects into Workspaceを選択し、Select root directoryに先ほどegitをcloneしたディレクトリを指定
    3. org.spearce.*のプロジェクトをすべて選択し、Finish
  2. ProjectメニューからBuild実行
  3. EclipseプラグインとしてExport
    1. Project ExplorerでFileメニューからExportを実行
    2. Plug-in Development > Deployable plug-ins and fragmentsを選択
    3. Avallable Plug-ins and Fragments:に表示される、5つのorg.spearce.*を選択
    4. DestinationタブのDirectory:にEclipseのインストールディレクトリを指定
    5. FinishでExport実行
  4. Eclipseリスタート

以上でEclipsePluginが利用可能になります。
なお、org.spearce.*のプロジェクトに対してTeam > Share Projectを実行するとRepositry typeとしてGitが選択できるようになってます。このときに"Search for existing Git repositories"を選択すると、clone時の情報からリポジトリを自動判別し、GitリポジトリとしてEclipse Pluginから操作できるようになります。

■2008-10-02追記
Eclipse 3.4ではこの手順で動いたのですが、3.3では動きませんでした Barf!

Eclipseのアップデートサイトを限定させる方法

Eclipseアップデート実行時のサイトを限定する方法。JAISTのサイトにアクセスすると高確率でエラーになってしまうので設定してみました。

下記のようなポリシー定義を用意する。ミラーサイトは近所を中心に選択。

<?xml version="1.0" encoding="UTF-8"?>
<update-policy>
  <url-map pattern="org.eclipse" url="ftp://ftp.u-aizu.ac.jp" />
  <url-map pattern="org.eclipse" url="http://mirrors.ibiblio.org" />
  <url-map pattern="*" url="" />
</update-policy>

Preferences->Install/UpdateのPolicy URLに上記ファイルのパスを指定する。
仮にC:\eclipse\update-policy.xmlとして配置した場合は
file:///C:/eclipse/update-policy.xml
のように書く。
とりあえず進行ダイアログ上はftp.u-aizu.ac.jpにアクセスしているようなのですが、ちゃんとうまく動いているのか自信がありません。しばらく様子見。

参考:
http://help.eclipse.org/help32/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/tasks-37.htm

■2008-08-31追記
設定の方法としてはあってると思うのですが、もっとミラーサイトを列挙しないと使用に耐えないと思います orz

Insufficient space to store ... in /usr/portage/distfiles

emerge時にファイルがダウンロードできなくなった。
ファイルシステムの空き領域を誤認しているのだろうか。

# emerge -v system

<<< Emerging (1 of 39) sys-apps/kbd-1.14.1-r1 to /
!!! Insufficient space to store kbd-1.14.1.tar.gz in /usr/portage/distfiles
!!! Couldn't download 'kbd-1.14.1.tar.gz'. Aborting.
 * Fetch failed for 'sys-apps/kbd-1.14.1-r1'

"Insufficient space to store"で検索しても"on a network share"という例は見つけれられるものの、こっちはローカルファイルシステムだし。

portage本体が悪いのか、pythonが悪いのか、とそれぞれアップグレードしてみるが効果なし。
必要なファイルをwgetでダウンロードしながらアップグレードしていくには数が多すぎて面倒だ。

結局、領域が空いてるのはわかっているので、チェック時のコードをちょっと変更して逃げてしまった。

# diff -u /usr/lib/portage/pym/portage.py.orig /usr/lib/portage/pym/portage.py
--- /usr/lib/portage/pym/portage.py.orig        2008-06-08 15:46:48.000000000 +0900
+++ /usr/lib/portage/pym/portage.py     2008-06-09 23:03:29.000000000 +0900
@@ -3456,7 +3456,7 @@
                                        and (mydigests[myfile]["size"] - mysize + vfs_stat.f_bsize) >= \
                                        (vfs_stat.f_bsize * vfs_stat.f_bavail):
                                        writemsg("!!! Insufficient space to store %s in %s\n" % (myfile, mysettings["DISTDIR"]), noiselevel=-1)
-                                       has_space = False
+                                       has_space = True

                        if distdir_writable and use_locks:
                                waiting_msg = None

SELinuxの無効化方法

SELinuxを無効化する方法。[selinux-users:02051]からの引用。

SELinux を disable にするには3つの方法があります。
1. /etc/selinux/config で SELINUX=disabled と記述する
2. カーネル起動オプションに selinux=0 と記述する
3. カーネルコンフィグで SELinux のチェックボックスを外す

しかし厳密には、(1)と(2)及び(3)には違いがあり、SELinux以外のセキュリティモジュールを利用するには (2) か (3) の方法を使う必要があります。

(2)と(3)の場合は、LSMへのモジュール登録関数である register_security() 関数をコールしません。したがって、誰もLSMを専有していないために、後でセキュリティモジュールを登録する事が可能です。

奥が深い。

それから、How to Disable SELinuxの情報によれば、

  • カーネル起動オプションにenforcing=0と記述する

という方法もあるようで、これはおそらくregister_security()関数がコールされる通常のブート後、setenforce 0をおこなうのと同じ状態かと。

MantisのDBをEUC-JPからUTF-8に変換

Mantisを0.18から1.1系列にアップグレードする際、文字コードをUTF-8に変更した。
しかし、mysqldumpした結果をlv -Iej -Ou8で変換したものをmysqlに投入すると、

Unknown command '\"'

となってしまう。
lvではなくiconvを使ってiconv -f EUC-JP-MS -t UTF-8したところ無事解決したようだ。

ところでmantis_bug_file_tableやmantis_project_file_tableはファイル名部分はEUC-JPからUTF-8に変換が必要なものの、ファイルの内容部分は変換してはいけないので一括iconvな方法は使えない。
こちらはDBのキャラクタセットをUTF-8で作成してあると、INSERT時にSET NAMES eucjpms;をやっておけば、MySQLがきれいに変換してくれるようだ。

$ echo "\
> CREATE DATABASE bugtracker \
> DEFAULT CHARACTER SET = utf8 \
> DEFAULT COLLATE = utf8_unicode_ci" \
> | mysql -u username -p
$ ( echo "SET NAMES eucjpms; \
> cat mantis_bug_file_table.sql ) \
> | mysql -u username -p bugtracker

mantis_bug_file_table.sqlがEUC-JPなMantisなDBからmysqldumpしたデータ。

Drupal 6.2にアップグレード

Drupal 6.2にアップグレードした。モジュールは6非対応も結構あったけど、なんとかなると思ったので。
ところがアップグレード自体はうまくいったものの、最近投稿したblogエントリーを匿名ユーザで参照できないことが発覚。
原因がよくわからず管理メニューをうろうろしていると、Administer » Content managementのPost settingsで"Rebuild permissions"という表示が。こちらをクリックしたところ、無事表示されるようになった。

ついでにDefault ThemeもBlue Barsに変更。

pidstatでプロセス毎のCPU使用率を測定

sysstatの最新版である8.0にはpidstatというプロセスの統計を取得するコマンドが含まれるようになった。
とりあえず./configure && makeして使ってみる。

user@debian:~/sysstat-8.0.4.1$ ./configure && make
user@debian:~/sysstat-8.0.4.1$ ./pidstat --help
Usage: ./pidstat [ options... ] [ <interval> [ <count> ] ]
Options are:
[ -C  ] [ -d ] [ -I ] [ -r ] [ -t ] [ -u ] [ -V ] [ -w ]
[ -p {  | SELF | ALL } ] [ -T { TASK | CHILD | ALL } ]

user@debian:~/sysstat-8.0.4.1$ ./pidstat -p 2240 5 10
Linux 2.6.18-6-686 (debian) 	2008年04月05日

02時34分55秒       PID   %user %system    %CPU   CPU  Command
02時35分00秒      2240    3.59    2.19    5.78     0  Xorg
02時35分05秒      2240    3.21    2.81    6.01     0  Xorg
02時35分10秒      2240    5.20    3.40    8.60     0  Xorg
02時35分15秒      2240    4.79    1.80    6.59     0  Xorg
02時35分20秒      2240    1.80    2.79    4.59     0  Xorg
02時35分25秒      2240    5.59    6.79   12.38     0  Xorg
02時35分30秒      2240   11.38    9.98   21.36     0  Xorg
02時35分35秒      2240   13.57   10.98   24.55     0  Xorg
02時35分40秒      2240    4.78    3.19    7.97     0  Xorg
02時35分45秒      2240    5.42    4.42    9.84     0  Xorg
Average:         2240    5.93    4.83   10.77     -  Xorg

このようにプロセス毎にCPU使用率を測定できる。
今までのsysstatでは全体のCPU使用率しか測定できなかったので、プロセス別はtopコマンドを眺めたりしていたが、これは便利。

標準的なLinuxディストリビューションではまだ使えないが、configure && makeしてpidstatだけを利用するのも手。

PPPアダプタのIPアドレスを調べてルーティング設定する

PPPアダプタに割り当てられたIPアドレスを調べてルーティング設定するためのスクリプト。

' ルーティングテーブル追加

Set WshShell = CreateObject("WScript.Shell")

Set NetworkAdapters = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
	("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE Description = 'WAN (PPP/SLIP) Interface'")

For Each Adapter In NetworkAdapters
	IPAddress = Adapter.IPAddress
	If IsArray(IPAddress) Then
		WshShell.Run "route add 10.0.10.0 mask 255.00.0.0 " & IPAddress(LBound(IPAddress)) & " metric 1", 0, Ture
		WshShell.Run "route add 172.16.10.0 mask 255.240.0.0 " & IPAddress(LBound(IPAddress)) & " metric 1", 0, Ture
		WshShell.Run "route add 192.168.0.0 mask 255.255.0.0 " & IPAddress(LBound(IPAddress)) & " metric 1", 0, Ture
	End If
Next

Red Hat EL4ではNTP用のiptables追加をしなくなったようだ

Red Hat EL3やCentOS 3ではntpを起動するとRH-Firewall-1-INPUTチェインにntpサーバの123/udpを許可するルールが勝手に追加されたものだが(/etc/init.d/ntpdでやってる)、EL4ではそのようなことがなくなったらしい。

SSL証明書期限をcertwatchでチェックする

Red Hat系Linuxにはmod_sslパッケージにcertwatchというユーティリティが含まれていて、SSL証明書の期限切れをメールで通知するようになっている。
こちらの通知を何日前からおこなうか(デフォルト30日)、またメール通知先をどこにするかは、/etc/sysconfig/httpdにCERTWATCH_OPTSを指定することで設定できる。

CERTWATCH_OPTS="-p 60 -a root@example.jp"

-pは期限、-aは通知先メールアドレスの指定で、メールアドレスを指定しないと標準出力に出力される(なのでデフォルトはrootユーザにcron結果として通知される)。

certwatchによるチェックを無効化したい場合は、

NOCERTWATCH=yes

とすればよい。