突然消失するかもしれないブログ

”とつきえブログ”

カテゴリーアーカイブ: kuro-box

玄箱ProでDebian squeeze/wheezyのアップデートする際の注意点

2011/03/11の震災で1台目の玄箱Proが故障してしまい、1年近く自宅にサーバーのない生活をしてきましたが、あまりに不便なため、2台目の玄箱Proを引っ張り出すことにしました。

2台目の玄箱ProにはDebian wheezyを自前でインストールしていたのですが、aptitude update; aptitude full-upgradeを実行して最新の状態にアップデートしたところ、悲しいことに正常に起動できなくなってしまいました。。

ブート時のエラーメッセージを見ると、udevが延々とエラーメッセージを吐いており、原因を調べてみたところ、Linuxカーネルが古く、カーネルのコンフィグが足らないせいのようです。

非公式のDebianインストーラを使用している限り、またこのような悲劇が起こるので、何か他の良い方法がないか探してみたところ、Debian本家が正式に玄箱Proに対応していることが判明しました。

玄箱ProでDebianをインストールする公式ガイドがあり、以下のサイトに従ってDebian公式インストーラでDebianをインストールすれば良いようです。

http://www.cyrius.com/debian/orion/buffalo/kuroboxpro/

非公式のDebianインストーラで玄箱ProにDebianをインストールしてしまうと、Debian本家のバージョンアップに追従するのが辛くて挫折しがちになりますが、Debian公式のインストーラでDebianをインストールすれば、安心して最新の状態にバージョンアップすることができるかもしれません。

ということで、近いうちに時間を見つけてセットアップしようと思います。(つづく)

 

BeagleBoard:(6)ベンチマークテスト、玄箱Proの3倍

以前、インターネット上に公開されているBeagleBoardのnbenchの結果から、以下のように予想していましたが、購入したBeagleBoard Rev C4でnbenchを実行してみたところ、予想を上回る結果となりました。 この投稿の続きを読む

Mac OS X Snow Leopardでafpdサーバに接続できない(解決編)

Mac OS X Snow Leopardでafpdサーバに接続できない(未解決編) « 突然消失するかもしれないブログ」で書きましたが、原因が明らかになり、解決しましたのでメモ。

(1)原因

原因は大きく2つあります。

原因1:

Debian Squeezeにおいて、2010年2月に入ってからのバージョンアップにより、netatalkのパッケージ、

ii  netatalk                          2.0.5-3                    AppleTalk user binaries

が依存するファイル群と整合がとれなくなり、暗号化パスワード認証(DHX2)でのPAM認証が正常に行えないため、ユーザ認証が失敗してしまいます。

Debian Squeezeのパッケージのバグのようです。

Bug#568601: netatalk: PAM DHX2: libgcrypt versions mismatch

原因2:

ユーザ認証に成功しても、CNIDデータベース(.AppleDB)のバージョンの不整合が発生しているため、Mac OS X Snow LeopardのFinderの接続が失敗してしまいます。

尚、CNIDが何かについては、HATさんのHPにある「CNIDの管理」が参考になります。

netatalk and samba

MacOSの為に作られたHFS+というファイルシステムでは、ファイルやフォルダにCNID (Catalog Node ID)と呼ばれる番号を付けて管理しています。これはAFPの場合も同様です。
netatalkでは、Berkeley DBを使って .AppleDB/というディレクトリでCNIDのデータベースを管理しています。 何らかの理由でこのディレクトリの中のファイルが壊れると、クライアントからうまく接続出来ないといったトラブルが発生します。

で、HFS+の拡張属性(EA:Extended Attribute)とアクセスコントロールリスト(Access Control List)に関する情報は以下が詳しいです。

Undocumented Mac OS X:第11回 HFS Plus独自の機能【後編】 (2/2) – ITmedia エンタープライズ

Tigerで追加されたのが、拡張属性(Extended Attribute)とアクセスコントロールリスト(Access Control List)だ。

簡単に説明すると、ファイル名やパーミッション、作成日時や更新日時、所有者とグループといった、あらかじめ決められた属性以外に、ファイルの内容により即した属性をユーザーやアプリケーションが自由に割り振れるようにするというのがEAである。また、これまでの所有者、グループ、それ以外に読み、書き、実行を割り振るという大雑把なパーミッションに対して、指定ユーザーやグループに対して個々にアクセス権を割り振るという、より詳細なアクセスコントロールを実現するのがACLだ。

(2)解決方法

(2-1)netatalkのパッケージをソースコードから再ビルドして再インストールする

以下の手順を参考に作業をしていきます。

APT HOWTO (Obsolete Documentation) – ソースパッケージでの作業

apt-get を使ってソースから deb パッケージを作成してインストールする – make world

1.  build-essential のインストール(初回のみ)
2. 依存関係の確認
3. 依存関係にあるパッケージの用意
4. インストールするパッケージのソースを取得する
5. ソースコードから生成された deb パッケージをインストールする

具体的な手順は以下の通りです。

## まず、インストール済みのnetatalkのパッケージをアンインストールします。purgeすると設定ファイルもすべて削除されるのでバックアップを忘れずに。
# apt-get purge netatalk

## 開発環境のインストール
# apt-get install build-essential

## 依存するパッケージをインストールする
# apt-get build-dep netatalk

## インストールするパッケージのソースを入手してビルドする。玄箱Proのセルフビルド環境だとビルドするのに結構時間がかかりますので、ビルドが終わるのを気長に待ちましょう。
# apt-get -b source netatalk

## 生成されたdebパッケージをインストールする
# dpkg -i netatalk_2.0.5-3_armel.deb

(2-2).AppleDBディレクトリ以下をすべて削除する。

afpdの公開フォルダとして指定しているディレクトリにある.AppleDBディレクトリ以下をすべて削除します。

自動で一気に削除したい場合は、以下を実行します。

尚、findのオプションの指定方法を間違えると、.AppleDB以外の重要なファイルまできれいさっぱり消えてしまうこともありますので、実行するときはしっかり確認してから、慎重に行ってください。(あくまで自己責任で)

# find “afpdの公開フォルダとして指定しているディレクトリ” –name “.AppleDB” –print –exec rm –rf {} \;

また、おまけですが、HATさんのnetatalk and sambaを参考にして、

/etc/netatalk/AppleVolumes.defaultに以下を追記します。

:DEFAULT: maccharset:MAC_JAPANESE volcharset:UTF8 options:usedots,upriv dperm:0700 fperm:0600 cnidscheme:dbd

これにより、「cnidscheme:dbdを指定するとnetatalkの信頼性(.AppleDBの信頼性)が高まります。」とのことです。

尚、「maccharset:MAC_JAPANESE」については、afpdにパッチがあたっていない場合は指定できないので、ディストリビューションの状況に応じて調整します。
(Debian SqueezeではOK、Ubuntu9.0.4ではNGでした。)

更に、/etc/default/netatalkの設定を以下のように変更します。

CNID_METAD_RUN=yes

というのは、HATさんのnetatalk and sambaにあるとおり、CNIDデータベース(.AppleDB)の管理をcnid_metadデーモンに一元的にまかせてしまうと、信頼性が上がるようです。(BerkeleyDBって複数のプロセスから同時アクセスがあった場合、きちんと排他制御していないのでしょうか?)

cnidscheme:dbd
かなり安定している。cnid_metadデーモンがデータベースを一括管理する。各afpdはcnid_metadと通信するだけ。

(3)まとめ

netatalkは、需要と供給の問題のせいか、sambaほど開発が活発ではないような印象を受けますし、Debianプロジェクトでもあまり重視されているとは思いがたいので、よほど特別な理由がないかぎり本番環境では、sambaを使った方が無難そうです。特に、Windows環境とMac OS X環境との相互運用を考えるとsambaが無難ですかね。

最近では、Finderからsambaも快適に使えるようになってきているので、古いMac製品を持っている方は別としても、netatalkを使用する強い理由も見あたらないような気がします。

それでも、腕に覚えがあって、労力を惜しまない方は、netatalkとsambaを併用するのも悪くはないかなと思います。

PS3購入に備える:家庭用NASキット

PS3購入に備えてNAS環境を見直してみました。

この投稿の続きを読む

玄箱Proセットアップその4:udevがアップデートできない

玄箱Proセットアップその3 « 突然消失するかもしれないブログ
玄箱PROをDebian squeezeにバージョンアップ « 突然消失するかもしれないブログ

の通り、玄箱ProをDebian Squeeze化しているのですが、apt-get update, apt-get upgradeしてみたところ、udevのパッケージがアップグレードできなくなりました

udev150から、実行中のLinuxカーネルで、CONFIG_SYSFS_DEPRECATEDがdisableの状態で実行されていないといけなくなったようです。

これまで玄箱ProのLinuxカーネルのアップデートは怖いので避けてきたのですが、いよいよ避けて通れない時がやってきたようです。

 

参考:
kernel をビルドする上で udev を使ってるときに気をつけるべきこと – kei10inの日記

 

# apt-get upgrade
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
以下のパッケージはアップグレードされます:
  udev
アップグレード: 1 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
416kB 中 0B のアーカイブを取得する必要があります。
この操作後に 4,096B のディスク容量が解放されます。
続行しますか [Y/n]? y
パッケージを事前設定しています …
(データベースを読み込んでいます … 現在 51095 個のファイルとディレクトリがインストールさ れています。)
udev 149-2 を (…/archives/udev_150-2_armel.deb で) 置換するための準備をしています …
Since release 150, udev requires that support for the CONFIG_SYSFS_DEPRECATED feature is disabled in the running kernel.

Please upgrade your kernel before or while upgrading udev.

AT YOUR OWN RISK, you can force the installation of this version of udev
WHICH DOES NOT WORK WITH YOUR RUNNING KERNEL AND WILL BREAK YOUR SYSTEM
AT THE NEXT REBOOT by creating the /etc/udev/kernel-upgrade file.
There is always a safer way to upgrade, do not try this unless you
understand what you are doing!

dpkg: /var/cache/apt/archives/udev_150-2_armel.deb の処理中にエラーが発生しました (–unpack):
サブプロセス 新 pre-installation スクリプト はエラー終了ステータス 1 を返しました
以下のパッケージの処理中にエラーが発生しました:
/var/cache/apt/archives/udev_150-2_armel.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

stoneをLinuxでコンパイルする

LinuxでTCP & UDPリピータが必要だったのでstone version 2.3e(stone-2.3e.tar.gz)をコンパイルしてインストールしようとしたら、以下のようなコンパイルエラーが出てしまいました。

http://www.gcd.org/sengoku/stone/Welcome.ja.html

$ make linux

stone.c:4509: error: dereferencing pointer to incomplete type
stone.c:4524: error: dereferencing pointer to incomplete type
stone.c:4536: error: dereferencing pointer to incomplete type
stone.c:4551: error: dereferencing pointer to incomplete type
stone.c:4557: error: dereferencing pointer to incomplete type

stone.cのソースコードを見ると、以下のような記述があり、原因を調べてみたところ、struct ucredの定義が解決出来ないのが原因です。

struct ucred *cred = NULL;

socklen_t optlen = sizeof(*cred);

解決方法としては、Makefileの以下の記述部分に、-D_GNU_SOURCEを追加することで正常にコンパイルできるようになりました。

linux:
        $(MAKE) FLAGS="-O -Wall -DCPP=’\"/usr/bin/cpp -traditional\"’ -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL
_DST=80 -DUSE_EPOLL –D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone

makeで指定するオプションには、linux以外にもlinux-sslなど他のオプションもありますので、必要に応じて上記の定義を追加すればOKです。

glibc 2.8以降では、_GNU_SOURCEを定義しないと、struct ucredが定義されないんですね。

Debian Squeezeで導入されているglibcは、2.9-25なので上記に該当しています。Ubuntu 9.0.4も上記に該当します。

Debian Squeezeの場合

ii  libc6                             2.9-25                     GNU C Library: Shared libraries

Ubuntu 9.0.4の場合

ii  libc6                                      2.9-4ubuntu6.1                            GNU C Library: Shared libr
aries

 

<参考>

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/unix.7.html

SCM_CREDENTIALS
    Unix 信任状を送受信する。これは認証に用いることができる。信任状は、 struct ucred の補助メッセージとして渡される。この構造体は <sys/socket.h> で以下のように定義されている。

    struct ucred {
        pid_t pid;    /* process ID of the sending process */
        uid_t uid;    /* user ID of the sending process */
        gid_t gid;    /* group ID of the sending process */
    };

    glibc 2.8 以降では、この構造体の定義を得るためには機能検査マクロ _GNU_SOURCE を定義しなければならない。

Debian SqueezeのSquidが何かおかしい?【解決編】

結局、kurobox proで、ソースコードからsquid2.7を手動でコンパイルしてインストールしてみたところ無事に解決しました。

x86環境だとわかりませんが、少なくともARM環境では3.x系は使用せず、2.x系を使用した方が良いようです。

また、squid2.x系は3.0系に比べると負荷がずっと少ないみたいなので、非力なkurobox proには2.x系がオススメです。

squidバージョン コンパイルオプション 結果

squid-3.0.STABLE19.tar.bz2

./configure \
–prefix=/usr/local/squid \
–with-large-files \
–enable-cache-digests \
–enable-underscores \
–enable-storeio=”ufs,aufs,diskd,null” \
–enable-removal-policies=”lru,heap” \
–enable-icap-client \
–enable-follow-x-forwarded-for \
–enable-delay-pools \
–enable-arp-acl \
–enable-snmp \
–with-default-user=proxy

×
※特定のURLにアクセスできず、squidがハングアップする。
squid-2.7.STABLE6.tar.bz2

上記と同じ

尚、Debia Squeezeのパッケージで指定されていた以下のコンパイルオプションはあえてつけていません。

–enable-auth=”basic,digest,ntlm,negotiate” \
–enable-basic-auth-helpers=”LDAP,MSNT,NCSA,PAM,SASL,SMB,YP,getpwnam,multi-domain-NTLM” \
–enable-ntlm-auth-helpers=”SMB” \
–enable-digest-auth-helpers=”ldap,password” \
–enable-external-acl-helpers=”ip_user,ldap_group,session,unix_group,wbinfo_group” \
–enable-negotiate-auth-helpers=”squid_kerb_auth” \
–enable-async-io=8 \
–with-filedescriptors=65536 \

Debian SqueezeのSquidが何かおかしい?【未解決編】

Debian Squeeze on kuro-box pro経由で、例えば、特定のURLにアクセスしようとするとアクセスできないだけでなくsquidの負荷がどんどん上がっていきフリーズ状態になります。一方、Ubuntu9.0.4のSquidでは全く問題なし。

例:http://dl.google.com/android/android-sdk-windows-1.5_r3.zip
(Android SDK)

Debian Squeeze on kuro-box pro

squid-langpack 3.HEAD.20090706-1 Localized error pages for Squid
squid3 3.0.STABLE18-1+b1 A full featured Web Proxy cache (HTTP proxy)
squid3-common 3.0.STABLE18-1 A full featured Web Proxy cache (HTTP proxy) – common files

Ubuntu-9.0.4

squid 2.7.STABLE3-4.1ubuntu1 Internet object cache (WWW proxy cache)
squid-common 2.7.STABLE3-4.1ubuntu1 Internet object cache (WWW proxy cache) – common files

 

先日大量に更新されたDebian Squeezeのsquid3のパッケージが原因だと考えられるためsquid3のパッケージを再ビルドしてみました。

apt-get –b source squid-langpack
apt-get –b source squid3

パッケージのビルドに必要なパッケージが入っていれば上記のコマンドでビルドできるわけですが、パッケージが足りないというエラーが出た場合は以下を実行。

# 基本開発環境のインストール
# apt-get install build-essential fakeroot devscripts

# squid3パッケージをビルドするのに必要なパッケージのインストール
# apt-get install libldap2-dev libpam0g-dev libdb-dev sharutils dpatch libsasl2-dev libcppunit-dev libkrb5-dev comerr-dev

kuro-box proのセルフ環境だとCPUがARM9で処理能力が貧弱なせいか、ビルドにすごく時間がかかります。

ビルドが終了したら、生成されたパッケージをインストールします。

# dpkg –i squid-langpack_3.HEAD.20090706-1_all.deb
# dpkg –i squid3-common_3.0.STABLE18-1_all.deb
# dpkg –i squid3_3.0.STABLE18-1_armel.deb

 

結果はというと、見事に玉砕。改善されませんでした。。。

こりゃ、パッケージに頼らず一からやるしかないかも。

LinuxからWindowsのホスト名を解決する方法

Debian、Ubuntu、共通の方法でLinuxからWindowsのホスト名を解決する方法です。

具体的には、/etc/nsswitch.confのhosts行に、”wins”という記述を追加する。

hosts:          files wins mdns4_minimal [NOTFOUND=return] dns mdns4

更に、winbindパッケージをインストールする必要があります。

これは恐らく、既存のリゾルバライブラリがwinsに対応していないので、winbindパッケージを追加するとwinsに対応になるのではないかと思われます。

# apt-get install winbind

winbind(WINSサーバ)を常時実行していなくてもWindowsの名前解決はできるので、不要なら止めておいても構いません。

逆に、WindowsからLinuxのホスト名を解決するには、Linuxにsambaをインストールするだけです。

この設定をしてからというもの、LinuxからWindowsのホスト名から動的にIPアドレスを解決できるようになったので非常に便利です。

参考:sambaでホスト名解決

Debian Squeeze、大幅アップデート!?

Debian Squeezeがここ二週間くらいの間に大幅なアップデートが行われたようです。

Squeezeは開発途上版ということもあり頻繁にアップデートされます。アップデート作業を怠ると追従するのが難しくなるのでこまめにアップデート作業しておくことを強くオススメします。

ということで、kuro-box proでの作業メモ。

<kuro-box proでの作業メモ:2009/09/10>

apt-get update;apt-get upgradeを実行してみたところ大量のアップデートが表示されます。

mysqlが5.0から5.1にバージョンアップされたらしく、5.0のままだとその他のパッケージの依存関係が解決できないようです。

mysqlは5.0から5.1に自動的にアップデートされないようなので、アップデート作業を行うには、手動でmysql5.1をインストールする必要があります。

# 注意:mysql-server-5.0が削除されてmysql-server-5.1が
# インストールされます。
# apt-get install mysql-server-5.1

# パッケージ管理システムのDBからmysql-server-5.0の痕跡を削除
# dpkg –purge mysql-server-5.0

 

また、debianのパッケージ管理システムもアップグレードされたようで、以下のwarningが表示されます。

dpkg: warning: obsolete option ‘–print-installation-architecture’, please use ‘–print-architecture’ instead.

 

apt-get upgradeで以下の7つのパッケージが保留されます。

debian-keyring
diff
libavcodec52
libavutil49
libcompress-zlib-perl
libio-compress-base-perl
libio-compress-zlib-perl

 

仕方がないので、おそるおそるdist-upgradeを実行。これで無事にアップデート作業終了。

# apt-get dist-upgrade

 

あとは、kuro-box proを再起動するだけです。

ちなみに、我が家の環境では、何事もなく無事に再起動できました。

%d人のブロガーが「いいね」をつけました。