読者です 読者をやめる 読者になる 読者になる

Lambdaカクテル

ソフトウェア開発者です.玉石混淆です.

REGZA Z9000にMac Pro+CentOSの構成でSMBを接続・録画・再生を完遂するまで

※前置きが長いので注意

使用しているマシンが突如として不調に襲われ、それまで積み重ねてきた資産を一瞬にして失うことは意外とよくある話だ。
サーバ管理会社やデータセンターですらデータ喪失事故を起こし、狭い界隈を賑わせているのだから、何ら特殊な設備を持たない個人が構築したサーバがこうしたトラブルの犠牲になることは決して珍しい事ではない訳だ。そして遂にその順番が僕のサーバにも廻ってきた。

昨年半ば、秋が深まってきた頃の事である。何の前触れも無く実家のサーバとの通信が不通となった。SSHRSYNCVNC・ICMP・HTTP(S)は全て使用できなくなり、マシンに依存していた実家のTVの録画機能は停止した。下宿先に居るからマシンの様子は把握できない。メールで実家に確認をするが、マシンの電源は落ちてない。見る限り健全だ。IPアドレスの変動に伴うDNSの不整合を疑った僕は、DDNSテーブルが更新されるであろう午前零時を待ってから再び通信を試みるが、状況に変化は無かった。そもそもマシンそのものが正しく動作しているのであれば、TVは録画ができる筈なのだ。しかたがないので帰省を待ってマシンを確認する事にした。

マシンはカーネルパニックをどうやら起こしているようだった。ディスプレイを接続し、ログを取るべく再起動を試みるがLinuxカーネルが起動できない。Mac ProにおけるBIOSの役割を果たすEFIの段階からブートプロセスが遷移していない様子だ。これでは手が出せない。

数日の苦心の後、まずOSXのインストールディスクからシステムをブートし、付属する診断ツールやディスクユーティリティを利用してマシンの現状を把握することにした。

まず診断ツールでマシンのdiagnostics情報を取得する。しかしロジックボード、そしてグラフィックボード・メモリ・SATAボードに異常は検出されなかった。恐らくハードディスクに異常があるのだろうが、S.M.A.R.T.はいかなる異常も検知していない。疑問のままディスクユーティリティを起動する。ディスクの検証を実行した途端、エラーが報告された。全ディスクのMBRが破損していた。ディスクそのものに異常は無く、論理的な構造が破損していたために起動できない状態に陥っていたのだ。

ハードディスクの内容は無事かもしれなかったが、そのような技術と時間が無いのでデータの救出は諦めてOSを再インストールすることにした。HDDはLUKSで暗号化し、サーバ用途でCentOS 6.3をインストールし、無事に完了した。

ここから、smbをインストールし、REGZAから録画・視聴できるようにしなければならない。

これより先は参考として記述するので簡潔に記載する。

環境

  • OS CentOS 6.3 x64
  • マシン Mac Pro Early 2008 + 8GiB RAM。
  • Webmin, smb, nmb, winbindd, xfsprogsがインストールされている。

まずEthernetを有効化する。/etc/sysconfig/network-scripts/ifcfg-eth0をオープンし、以下の項目を編集する。

ONBOOT=yes
DNS1=192.168.24.1(ルータ)
IPADDR=192.168.24.6(固定アドレス)
NETMASK=255.255.255.0
GATEWAY=192.168.24.1(ルータ)

ホスト名を確定させる。/etc/hsotsをオープンし、最終行に以下を追加。

192.168.24.6(LANから見たIPアドレス) servername(ホスト名) servername.example.com(ドメイン付き)

ネットワーク機能を起動させる。

# service network start

起動時にネットワークが起動するようにする。

# chkconfig network on

次いで、ネットワークインターフェースを起動させる。

# ifup eth0

次にSELinuxを無効化する。

# getenforce(SELinuxの状態を取得)
Enforcing(SELinuxが有効になっている)

# setenforce 0(SELinuxを一時的に停止する)

# getenforce
Permissive

# emacs /etc/sysconfig/selinux(SELinux設定ファイルをオープン)
SELINUX=enforcing
この行を以下のように編集して保存する。
SELINUX=disabled

また、smbで利用するポート(137/udp, 138/udp, 139/tcp, 445/tcp)をファイアウォール(iptables)から解放する。

(省略)

sambaの"unix extensions"(UNIX拡張)を無効にする。/etc/samba/smb.confに以下の設定を追加する。

[global]
 unix extensions = No

REGZAユーザを追加した後、REGZAが利用するディレクトリを作成し、パーミッションを設定する。

# useradd regza

# mkdir /var/regza

# chown regza /var/regza

#chgrp users /var/regza

#chmod 777 /var/regza

/etc/samba/smb.confに以下を追加。

[global]
 dos charset = CP932
 unix charset = utf-8
 display charset = UTF-8
 guest account = regza 
 create mask = 0777
 map to guest = Bad User 
 null passwords = Yes
 wins support = true 
 unix extensions = No
 netbios name = CIRNO(ホスト名)
 server string = Samba Server 
 default = regza
 workgroup = WORKGROUP(ワークグループ名)
 directory mask = 0777
 auto services = regza
 security = user
 wide links = yes

[regza]
 comment = regza
 path = /var/regza
 valid users = regza
 admin users = regza
 read only = No
 force create mode = 0777
 force directory mode = 0777
 guest ok = Yes

最後に、/var/regzaにshareディレクトリを作成する。これが何を意味するか不明だが、とにかくこれをしないと認識されない。