@dobassy 技ログ

自身が触れたITに関する曖昧な情報をわかりやすく表現したいと思っているブログ

PMSの検知が遅延するのでF/Wを疑った結果正解だったので対策した

PMS (PS3 Media Server) と PlayStation3 を利用したDLNA環境での動画再生がお気に入りの環境なのですが、PMSのサーバをUbuntuからCentOSに変えて以降、DLNAサーバを認識するのに時間がかかるようになってしまいました。

從來は即DLNAサーバを認識していたのですが、CentOSに変更後は体感で2分程度の無応答時間の後にDLNAサーバが現れる感じ。

しばらく放っておいたのですがストレスもたまってくるので、原因追求を行いました。結論としては、F/W(iptables)が悪さをしていた様子です。後述するF/W許可ルールを適用したらDLNAサーバ(PMS)検知のレスポンスが非常に良くなりました。

PMS: Playstation Media Server 利用ポートの一覧

以下、iptables のリストを記述します。

-A INPUT -s [YourNetwork] -p tcp --dport 5001 -j ACCEPT
-A INPUT -s [YourNetwork] -p udp --dport 5001 -j ACCEPT
-A OUTPUT -d [YourNetwork] -p tcp --sport 5001 -j ACCEPT
-A OUTPUT -d [YourNetwork] -p udp --sport 5001 -j ACCEPT
-A INPUT -s [YourNetwork] -d 239.255.255.250 -p udp --dport 1900 -j ACCEPT
-A OUTPUT -d [YourNetwork] -p udp --dport 50733 -j ACCEPT
  • [YourNetwork]部分は、DLNAクライアントとなるPS3本体またはPS3が所属するネットワークアドレスを記載します。
  • port 5001 部分は、PMS.confの「Server Port (port = xxxx)」に記述しているポート番号を記載します。何も指定ない場合はデフォルト5001になるようですが、念のためにあえて明記しています。
  • iptablesDROPログを見ているとPS3宛のUDP通信がいくつかのポートから発生していました。1個1個対応するのはイタチごっことなり面倒だったので、PS3UDP通信を全て許可しています。
  • 同じくDROPログを見ていたらマルチキャスト通信が発生していました。具体的にどのシーケンスでなのかは深堀りしていませんが、DLNAクライアントがサーバを見つける時にマルチキャスト(IGMP)を利用していることを知れてひとつ理解が深まりました。

iptablesDROPログ確認方法

CentOS 6.4標準環境をベースとした場合に以下の手順を踏めば取得可能になるかと思います。

ls -l /var/log/iptables

mkdir -p /var/log/iptables

ls -l /etc/rsyslog.d/
vi /etc/sysconfig/iptables

 # 前述したiptablesルールを適用

vi /etc/rsyslog.d/35-iptables.conf
:msg,contains,"DROP:" -/var/log/iptables/iptables.log

sudo service rsyslog restart

PRIMERGY(富士通)カスタムESXi5.1を5.5にバージョンアップする

 
blog.exlair.net

 

上記の前記事でも記したとおり、無償版ESXi(VMware)では下記の問題があるため、アップグレードの方法は限られるようです。

  • 無償版ライセンスではVMware Update Managerは使えない
  • 無償版ライセンスの場合アップグレード用のファイル「ESXi Offline Bundle」をダウンロード出来ない

しかし、PRIMERGY版オフラインバンドルの場合はTechnical Support pages from FujitsuサイトでOffline Bundleが入手できましたのでこれを利用します。

PRIMERGY版の Offline Bundle を適用するとどうなるのかについては、マニュアルにある以下記載の通りです。

5.1.2 オフラインバンドルの適用
オフラインバンドルとは、弊社のサーバ向けにパッチやドライバと CIM Provider をまとめたものです。 オフラインバンドルを適用することにより、最新のインストールイメージを用いてインストールした状態と同等の環境にできます。 オフラインバンドルの適用には Update Manager もしくは vSphere CLI を利用できます。

WEB経由でのアップグレード方法はこちらの記事も参考にしてください。
-> ESXi 5.1(無償版)を5.5にアップグレードする

Offline Bundleを利用したバージョンアップ作業の流れ

  1. オフラインバンドルファイル(カスタムイメージ)を入手
  2. ESXi ホストで実行しているすべての仮想マシンの電源を OFF にする
  3. ESXi ホストをメンテナンスモードにする
  4. オフラインバンドルを ESXi ホストに転送する
  5. オフラインバンドルを ESXi ホストにインストールする。方法は次の3種類

ここでは4.2及び6.3の方法で実施するケースを記載します。

いろいろ関連情報が多くて一瞬面倒に感じますが、要領をつかむとアップデート作業そのものは非常にシンプルです。むしろ Offline Bundle のダウンロード時間の方が長く待たされるくらいです。

Offline Bundle の入手

富士通版のImageファイル類はこちらのサポートページからダウンロードできます。

「Driver Quicksearch:」の検索フォームへ「image ESXi 5.5」と入力。

今回利用するバージョンは以下のとおり:

Description:
File: FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP
Version: 300.2.1331820
Date: 09.12.2013
Size: 333,99 MB
Language: Language: English / English
Manufacturer: Fujitsu

Offline Bundle を SCP で転送する

SSHでESXi(VMwareKernel)に接続できていることを前提として記載します。

# scp ./FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP root@esxihost:/vmfs/volumes/datastore0/images/
[注1] esxihost部分は接続先サーバのFQDN又はIPアドレス
[注2] /vmfs/volumes 配下のディスク構成及び保存場所は環境に応じて要変更

Offline Bundle を適用してアップグレードする

lsiproviderがインストールされているOK。大文字を含む LSIProvider が入っている場合は削除が必要になるとのこと。

~ # esxcli software vib list | grep lsi
lsiprovider    500.04.V0.34-0012    LSI    VMwareAccepted    2013-05-04  

この結果は問題無い場合。
そして Offline Bundle を指定してアップグレードします。

~ # esxcli software vib install -d FILE_PATH
// FILE_PATH = zipファイルのフルパス。SCP転送先のパスを記載(相対パスはNG)

コマンド実行後、応答が返ってくるまで2,3分程度の時間がかかりました。
!! このコマンド(software vib install)でも目的のバージョンアップは可能ですが非推奨ですので software profile update を利用しましょう。詳細は後述します

Installation Result
   Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
   Reboot Required: true
   VIBs Installed: (省略) 
   VIBs Removed: (省略)
   VIBs Skipped: 

正常に完了したらリブートします。

~ # esxcli system shutdown reboot -r "update to ESXi5.5"

ESXiアップグレード前のバージョン確認

~ # esxcli system version get
   Product: VMware ESXi
   Version: 5.1.0
   Build: Releasebuild-1065491
   Update: 1

~ # esxcli software profile get
Fujitsu-VMvisor-Installer-5.1.0.update01-1065491-v260-1
   Name: Fujitsu-VMvisor-Installer-5.1.0.update01-1065491-v260-1
   Vendor: Fujitsu
   Creation Time: 2013-05-04T00:21:45
   Modification Time: 2014-02-11T11:51:30
   Stateless Ready: False
   Description: 

      Fujistu customized ESXi5.1 Update 1 Image, based on VMware build
      1065491

ESXiアップデート後のバージョン確認

再起動するまでバージョン表示は変わりません。

~ # esxcli system version get
   Product: VMware ESXi
   Version: 5.5.0
   Build: Releasebuild-1331820
   Update: 0

~ # esxcli software profile get
(Updated) Fujitsu-VMvisor-Installer-5.1.0.update01-1065491-v260-1
   Name: (Updated) Fujitsu-VMvisor-Installer-5.1.0.update01-1065491-v260-1
   Vendor: yourHostName
   Creation Time: 2014-02-11T11:52:23
   Modification Time: 2014-02-11T11:54:15
   Stateless Ready: False
   Description: 

      2014-02-11T11:52:23.225778+00:00: The following VIBs are
      installed:

      ...(中略)...
      ----------
      Fujistu customized ESXi5.1 Update 1 Image, based on VMware build
      1065491

      (以下略)

バージョンが正常にあがっていることを確認したら、メンテナンスモードを解除します。

~ # esxcli system maintenanceMode get
Enabled
~ # esxcli system maintenanceMode set -e false
~ # esxcli system maintenanceMode get
Disabled

アップデート作業を追えて理解できた注意事項

vib install ではなく profile update を使うべき

アップデート関連コマンドとして esxcli software profile update があります。

VMware KB2020972(VMware Security Patching Guidelines for ESXi and ESX) にて、パッチのアップデートはプロファイルを指定する esxcli software profile update が推奨されています。

今回の作業手順で利用した esxcli software vib install はアップデートというよりもクリーンインストールに近い趣旨のコマンドです。これを実行すると自分で入れたドライバー等、Hypervisorインストール後に導入したものが消失してしまいます。

カスタムイメージを利用している場合は次のコマンドを利用しましょう。

esxcli software profile update -d <depot url or offline bundle zip file> -p <profile_name>

Offline Bundle を入手して配置するまでの手順は全く同じです。

Offline Bundle に含まれるプロファイル名を確認するコマンド

esxcli software profile update では -p オプションでプロファイル名を指定する必要がある為、Offline Bundle に含まれているプロファイルを確認します。

~ # esxcli software sources profile list -d /vmfs/volumes/datastore0/images/FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP

Name                                            Vendor   Acceptance Level
----------------------------------------------  -------  ----------------
Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2  Fujitsu  PartnerSupported

今回のケースでは1個しか含まれていません。

プロファイルを指定してアップデートする

確認結果を踏まえ、プロファイル名を指定してアップデートを実施します。

esxcli software profile update -d <depot url or offline bundle zip file> -p <profile_name>

example:

esxcli software profile update -d /vmfs/volumes/datastore0/images/FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP -p Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2

参考:ESXi 5.1 コマンドラインによるパッチ適用 | Japan Cloud Infrastructure Blog - VMware Blogs

この間違いに気付いたきっかけ

ESXiアップデート後のバージョン確認で記した結果を見て、次の点が気になりました。

  • (Updated) という記載は何なのか
  • そもそも未だ 5.1.0.update01 という記載が残っている
  • vendor 部分が何故か自身のホスト名になっている

これらの原因を明確にすべく調べた結果、利用コマンドの違いが分かりました。今どういう状況なのかというと、アップデート前の5.1版プロファイルをベースに5.5への差分修正が加わった(Updatedされた)独自プロファイルになった状態といえます。

このままでも ESXi 5.5 として動いています。

vib install してしまった後に修正できるのか

上記 "プロファイルを指定してアップデートする" で記載した方法で改めてコマンドを打ち込んでみましたが、以下の表示がされ何も修正されずに終了してしまいました。

Update Result
   Message: Host is not changed.
   Reboot Required: false
   VIBs Installed: 
   VIBs Removed: 
   VIBs Skipped: Emulex_bootbank ... (以下省略)

しかし、software profile にも install コマンドがありますので、結果以下のとおり実施することで上書きが可能でした。

~ # esxcli software profile install --ok-to-remove -d /vmfs/volumes/datastore0/images/FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP -p Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2
    Installation Result
       Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
       Reboot Required: true
       VIBs Installed: 
       VIBs Removed: VMware_bootban
          ..(以下略)..

--ok-to-remove オプションを設定しています。これが無いと Exception が発生し「いくつか消してもよいか?」という趣旨の警告が表示されます。

なお、–dry-run オプションで先に検証できますので本適用前の実施を推奨します。

結果、以下のとおり正常にアップデートできました。先ほどとは異なり、profileは最新が利用され、"(Updated)"の字も消えました。

~ # esxcli system version get
   Product: VMware ESXi
   Version: 5.5.0
   Build: Releasebuild-1331820
   Update: 0
~ # 
~ # esxcli software profile get
Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2
   Name: Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2
   Vendor: Fujitsu
   Creation Time: 2014-02-11T14:16:04
   Modification Time: 2014-02-11T14:16:04
   Stateless Ready: False
   Description: 

      Fujistu customized ESXi5.5 Image, based on VMware build 1331820

(参考) esxcli software vib xxx も2種類ある

~ # esxcli software vib --help
Usage: esxcli software vib {cmd} [cmd options]

Available Commands:
  install               Installs VIB packages from a URL or depot.
                        VIBs may be installed, upgraded, or downgraded.
                        WARNING: If your installation requires a reboot,
                                 you need to disable HA first.
  update                Update installed VIBs to newer VIB packages.
                        No new VIBs will be installed, only updates.
                        WARNING: If your installation requires a reboot,
                                 you need to disable HA first.

esxcli software vib update は古いパッチをスキップする

このような表示でSkipされます。

VIBs Installed: 
VIBs Removed: 
VIBs Skipped: VMware_bootbank_ata-pata-amd_0.3.10-3vmw.510.0.0.799733,・・・

esxcli software vib install は古いパッチでも強制的にアップデートする

以上の結果から、ただアップデートしたいだいたいのケースでは esxcli software vib update で満足できると思います。

参考:VMware ESXi5.1検証 第9回 ESXiへのパッチ適用について | g/re/p

(参考) ESXi 5.x のイメージ提供方法は2種類ある

以下の記載は 公式ブログ(VMware ESXi イメージ管理ベストプラクティス) からの引用です。

ESXiのイメージには、ISO、ZIPの2種類があり、以下のような特徴があります。

ISO

  • CDに焼くことによりBootableとなり、ESXiのインストールが可能
  • オフラインバンドルから作成することも可能

ZIP

  • オフラインバンドルの1つであり、ESXi独自のユニークなバイナリ提供方法
  • ESXiを起動・インストールするために必要な複数のVIBやイメージプロファイルなどで構成される
  • 様々なカスタマイズや、 ISOファイルへの書き出しが可能

ESXiのイメージ管理にはISOファイルではなく、ZIPファイル(オフラインバンドル)を利用します。

※ オフラインバンドルはESXiイメージ全体の提供だけではなく、デバイスドライバやエージェント類の提供方法としても利用されています。この場合は、単一のVIBかつイメージプロファイルを含まない形が主となっています。

オフラインバンドルは下記の通り構成されています。

  • VIB・・・VMware Infrastructure Bundle
    ESXiの構成上必要なパーツで、以下のような物があります

    • ESXiベースイメージ(ESXi Kernel)
    • デバイスドライバ
    • CIMプロバイダ
  • イメージプロファイル
    起動(インストール)に利用する複数のVIBを選択・定義した物

    • 上記VIBの内、ここで定義された物が起動(インストール)時に読み込まれる
    • インストーラー(ISOファイル)を書き出す事が可能
    • カスタマイズが可能

ESXiアップデート作業のまとめ

長くなりましたが結局必要なコマンドは以下の通りです。単純なことが分かります。

~ # esxcli system maintenanceMode set -e true

~ # scp ./FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP root@esxihost:/vmfs/volumes/datastore0/images/

~ # esxcli software sources profile list -d /vmfs/volumes/datastore0/images/FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP

~ # esxcli software profile update -d /vmfs/volumes/datastore0/images/FTS_FujitsuCustomOfflineBundleESXi55_30021331820_1101110.ZIP -p Fujitsu-VMvisor-Installer-5.5.0-1331820-v300-2

~ # esxcli system shutdown reboot -r "update to ESXi5.5"

参考リンク

ESXi 5.1(無償版)を5.5にバージョンアップする

無償版ESXi(VMware)では下記の問題があるため、アップグレードの方法は限られるようです。

  • 無償版ライセンスではVMware Update Managerは使えない
  • 無償版ライセンスの場合アップグレード用のファイル「ESXi Offline Bundle」をダウンロード出来ない

ではどのような手段があるのかというと、以下2つの方法です。

  1. VMware vSphere ESXi 5.5 Installerでアップグレードする 
  2. WEB経由でアップグレードを行う

今回は2番の方法で実行することにしました。以下手順を...
ところが、ひと通り調べたところで自分が利用しているESXiのイメージはFujitsuカスタマイズ(PRIMERGYサーバ用)であることに気付きました。ある程度まとめたところなのでこれはこのまま残しますが次のページに記録します。

 

blog.exlair.net

 

WEB経由アップグレードの方法

アップグレード作業の前後に実施すること

  1. 前提条件の確認
  2. ゲストOSの停止
  3. ESXiのメンテナンスモード化
  4. WEB経由でのESXiアップグレード作業(後述)
  5. ESXiのメンテナンスモード化を解除
  6. 各種ゲストOSの起動

前後の作業は当たり前というか、念のためですね。

アップデートを行うコマンドは複数あるので、各々の環境により実施方法が異なります。特に気をつけなければいけないケースとしては以下のケースが挙げられます。

  • ベンダ特有のカスタムイメージをインストールしている場合
  • 独自にVmwareのイメージをカスタマイズしてドライバーを追加している場合

そういう意味でも、今一度事前に利用環境を確認することをお薦めします。

[プロファイル確認コマンド]
~ # esxcli software profile get

ベンダ提供カスタムイメージを利用している場合の一事例としてこちらの記事も参考にして下さい。-> PRIMERGY(富士通)カスタムESXi5.1を5.5にアップグレードする

なお、冒頭に記した通り以下手順での作業は実施していませんので未確認の内容となります。(単純なので、おそらく問題ないと思いますが)

WEB経由でのESXiアップグレード作業の詳細

アップグレード対象のESXiにsshでログインします。sshが有効になっていない場合は、セキュリティプロファイルからsshサービスを起動させる必要があります。コンソール又は vSphere client いずれでも設定可能です。ここでは説明を割愛しますので未だの場合は「esxi 5.x ssh」等で方法を検索のうえ設定して下さい。

この手法ではhttp経由でファイルをダウンロードが必要になりますので、ESXiのファイアウォール設定で「httpClient」を有効(true)に変更します。

[確認のコマンド]
~ # esxcli network firewall ruleset list | grep httpClient
httpClient            false

[httpClient有効化のコマンド]
~ # esxcli network firewall ruleset set --ruleset-id=httpClient --enabled=true
(--ruleset-id は -r, --enabled は -e でも良い)

~ # esxcli network firewall ruleset list | grep httpClient
httpClient            true

「httpClient」を有効にしたら、以下のコマンドを実行しESXi 5.5へのアップグレードを行います。先ず利用可能なUpdate Profileの確認。

~ # esxcli software sources profile list -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml | grep ESXi-5.5 | sort

ESXi-5.5.0-1331820-no-tools       VMware, Inc.  PartnerSupported
ESXi-5.5.0-1331820-standard       VMware, Inc.  PartnerSupported
ESXi-5.5.0-20131201001s-no-tools  VMware, Inc.  PartnerSupported
ESXi-5.5.0-20131201001s-standard  VMware, Inc.  PartnerSupported
ESXi-5.5.0-20131204001-no-tools   VMware, Inc.  PartnerSupported
ESXi-5.5.0-20131204001-standard   VMware, Inc.  PartnerSupported

(2014.02.10現在)

その時の最新版を利用しましょう。
命名の雰囲気から20131204001が新しいように見えますが、リリースノート(更新日2013年10月14日)を見る限り1331820とあります。

no-tools と standard の違いですが、VMware Tools 有無が違いのようです。

esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p [ESXi-5.5.0-1331820-standard]
※ []の中に適用したいプロファイルの名前を書く

ネットワーク帯域により変動しますが、しばらく(数分〜十数分)待つとメッセージが大量に出力されます。その中に以下の記載があることを確認します。

Update Result
Message: The update completed successfully, but the system needs to be rebooted for the changes to be effective.
Reboot Required: true

最後に環境を戻します。

# httpClient無効化のコマンド
esxcli network firewall ruleset set --ruleset-id=httpClient --enabled=false

作業はこれだけで完了します。

ESXiのコマンドでメンテナンスモードにしたい場合

上記の内容も含め、以下のコマンドがあれば全ての作業をコマンドで完結できるはずです。

ESXiをメンテナンスモードにする

# esxcli system maintenanceMode get
Disabled
# esxcli system maintenanceMode set --enable=true
# esxcli system maintenanceMode get
Enabled

Reboot実行する

# reboot

ESXiのメンテナンスモードを終了

# esxcli system maintenanceMode se  t --enable=false
# esxcli system maintenanceMode get
false

MetadataDownloadError対応

 [MetadataDownloadError]
 Could not download from depot at https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml, skipping (('https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml', '', '[Errno 4] IOError: <urlopen error [Errno -3] Temporary failure in name resolution>'))
        url = https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml
 Please refer to the log file for more details.
  • 「DNSおよびルーティング」に記載されているDNSサーバは正しいか
  • 「DNSおよびルーティング」に記載されているDGWは正しいか

意外にもESXi本体はDGWの設定が不十分でも問題なく使えてしまうため、忘れがち。

Web Client を利用するには vCenter Server が必要

ESXi 5.5 からは從來の vSphere client ではなく Web Client が本格的に利用され始めています。仮想ディスクのバージョンを最新の10にすると vSphere client からは操作ができなく(Web Client からしか操作できなく)なりますので注意が必要です。また、各種新機能も同様 Web Client からしか利用できません。

しかし Web Client を利用するには vCenter server が必要になるため、無償ライセンスでできるのは從來の運用止まりとなります。

参考リンク

Zabbixを2.0から2.2へアップグレードしてLLDを利用する

Zabbix2.2.xではVMware監視機能が強化されました。いちいちゲストOSの監視設定を手作業で追加することなく自動で追加してくれる機能(LLD: Low Level Discovery)を利用したかったので、2.0.9からアップグレードすることにしました。

Zabbixを利用したのは2系からとなるので昔のことは知らないのですが、これまではメジャーバージョンアップ時のDBアップデートは手動だった様子。自動になって楽になったのでしょうが、それでもテンプレート機能は差分を修正する必要があったりとやや面倒です。

以下、アップグレード手順を記します。

アップグレード作業前の準備

稼働中Zabbixサービスを停止する

稼働中のサービスを停止する。

service zabbix-server stop
service zabbix-agent stop

Zabbixデータベースのバックアップ

mysqldump --opt --no-autocommit -uroot -p -B ZABBIX_DATABASE_NAME > ~/tmp/zabbix.dump

Zabbix定義ファイルのバックアップ

後ほどConfigの差分を比較するために必ずバックアップします。

cp -a /etc/zabbix ~/tmp/

レポジトリも変更されるので念のため。

cp /etc/yum.repos.d/zabbix.repo ~/tmp/

PHP各種ファイルは万一失ってもそこまでリスクは無いと思いますので、取得しなくても問題ないでしょう。

アップデート

zabbixをアップデートしますが、先に注意点。

  • PHPのバージョンが古い方は注意(5.3以上が要件なので新しくもないですが)
  • 事前に yum update をしておくこと
    • zabbixとして構成されるパッケージのうち、一部が2.0.10で、その他2.0.9が残っているような混在環境の場合はまずバージョンを揃える必要がある。
    • といいつつ先にレポジトリ登録をしてしまった場合、baseurlのバージョン部分を2.0に書き換えれば何とか先に進めます。

先ずZabbix2.2のレポジトリ登録

rpm -Uvh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm

標準はenabled=1(yum時にデフォルトで利用してしまう状態)になっているので好みに応じて無効化します。

sed -i -e "s/enabled=1/enabled=0/" /etc/yum.repos.d/zabbix.repo

差分(enabled=0にした後)。baseurlだけが変わっていることを確認します。

@@ -1,6 +1,6 @@
 [zabbix]
 name=Zabbix Official Repository - $basearch
-baseurl=http://repo.zabbix.com/zabbix/2.0/rhel/6/$basearch/
+baseurl=http://repo.zabbix.com/zabbix/2.2/rhel/6/$basearch/
 enabled=0
 gpgcheck=1
 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

いよいよアップデート

yum clean all

yum --enablerepo=zabbix update

結果は以下の通り。

Updated:
  zabbix.x86_64 0:2.2.1-1.el6
  zabbix-agent.x86_64 0:2.2.1-1.el6
  zabbix-get.x86_64 0:2.2.1-1.el6
  zabbix-server.x86_64 0:2.2.1-1.el6
  zabbix-server-mysql.x86_64 0:2.2.1-1.el6
  zabbix-web.noarch 0:2.2.1-1.el6
  zabbix-web-mysql.noarch 0:2.2.1-1.el6

Complete!

Config(zabix_server.conf)を修正する

追加・削除のあったオプションは以下の通り。いずれも不要であれば今までのコンフィグで動作します。目的に応じて追加してください。参考までに、新旧コンフィグのDiffを本文末尾に載せています。

  • Option: StartTimers
  • Option: StartVMwareCollectors
  • Option: ValueCacheSize
  • Option: AllorRoot (Default: 0)

VMware監視の為には VMwareCokkector が必須。

  • Option: VMwareFrequenct
  • Option: VMwareCacheSize

ローダブルモジュール。機能拡張ができるようだが直近は利用予定がないので触れない。

  • Option: LoadModulePath
  • Option: LoadModule

HouseKeepingはWEB-GUIからの設定に変わったためconfから削除してしまって良い。

  • Option: DisableHousekeeping

再起動とDBのアップグレード

service zabbix-server start

start zabbix-server によりDBがアップグレードされる。ログファイルに以下出力があることを確認する。

database upgrade fully completed

先にagentを起動しておかないと(1)が表示される。(2)は未確認。

(1)Zabbix agent item "system.users.num" on host "Zabbix server" failed: first network error, wait for 15 seconds
(2)item [xxx] became not supported: Not supported by Zabbix Agent

新Webインタフェースの設定

Webインタフェースが変更されているのでファイル群の修正が必要となりますが、Webフロントエンドのファイル(/usr/share/zabbix)に対してシンボリックリンクを張って入れば特に作業は必要ありません。

テンプレートの追加

Zabbix-serverのDBアップグレードはスキーマ変更しかされません。VMwareテンプレートをはじめとしていくつか追加があるため、その差分をインポートする必要があります。

本エントリでは、目的のVMwareテンプレートのみ追加します。

オフィシャルのテンプレートサイトから取得します

エラー発生

Template_Virt_VMware-2.2.0 をImportしようとしたところエラーが発生しました。

Error:
Cannot find value map "VMware status" used for item prototype "Status of "$2" cluster" of discovery rule "Discover VMware clusters" on "Template Virt VMware".

どうも2.0.xから2.2.1へアップグレードした時にレコードが不足しているようです。(公式Forumでそのようなやりとりを発見)

以下のレコードを追加すればよいとのこと。

mysql -u DB_USER_NAME -p
mysql> use ZABBIX_DATABASE_NAME;

INSERT INTO `valuemaps` (`valuemapid`,`name`) values ('13','VMware status');
INSERT INTO `valuemaps` (`valuemapid`,`name`) values ('12','VMware VirtualMachinePowerState');



INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('72','12','0','poweredOff');
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('73','12','1','poweredOn'); 
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('74','12','2','suspended');
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('75','13','0','gray');
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('76','13','1','green');
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('77','13','2','yellow');
INSERT INTO `mappings` (`mappingid`,`valuemapid`,`value`,`newvalue`) values ('78','13','3','red');

その後、以下の順番でテンプレートをインポートします。

  1. Template_Virt_VMware_Hypervisor-2.2.0
  2. Template_Virt_VMware_Guest-2.2.0
  3. Template_Virt_VMware-2.2.0

1と2の順番は逆でも問題ないかもしれませんが、Template_Virt_VMware は先に入れてしまうと以下のエラーが発生します。

Error:
Cannot find template "Template Virt VMware Hypervisor" for host prototype "{#HV.NAME}" of discovery rule "Discover VMware hypervisors" on "Template Virt VMware".

以上でアップデート作業は終了。

References

Links

zabbix_server.confの差分

--- zabbix_server.conf   2013-10-30 01:54:44.127844647 +0900
+++ zabbix_server.conf.rpmnew 2013-12-11 14:14:33.000000000 +0900
@@ -114,8 +114,6 @@
 # Default:
 # DBPassword=
 
-DBPassword=password
-
 ### Option: DBSocket
 #  Path to MySQL socket.
 #
@@ -193,6 +191,16 @@
 # Default:
 # StartHTTPPollers=1
 
+### Option: StartTimers
+#  Number of pre-forked instances of timers.
+#  Timers process time-based trigger functions and maintenance periods.
+#  Only the first timer process handles the maintenance periods.
+#
+# Mandatory: no
+# Range: 1-1000
+# Default:
+# StartTimers=1
+
 ### Option: JavaGateway
 #  IP address (or hostname) of Zabbix Java gateway.
 #  Only required if Java pollers are started.
@@ -217,6 +225,32 @@
 # Default:
 # StartJavaPollers=0
 
+### Option: StartVMwareCollectors
+#  Number of pre-forked vmware collector instances.
+#
+# Mandatory: no
+# Range: 0-250
+# Default:
+# StartVMwareCollectors=0
+
+### Option: VMwareFrequency
+#  How often Zabbix will connect to VMware service to obtain a new data.
+#
+# Mandatory: no
+# Range: 10-86400
+# Default:
+# VMwareFrequency=60
+
+### Option: VMwareCacheSize
+#  Size of VMware cache, in bytes.
+#  Shared memory size for storing VMware data.
+#  Only used if VMware collectors are started.
+#
+# Mandatory: no
+# Range: 256K-2G
+# Default:
+# VMwareCacheSize=8M
+
 ### Option: SNMPTrapperFile
 #  Temporary file used for passing data from SNMP trap daemon to the server.
 #  Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
@@ -267,14 +301,6 @@
 # Default:
 # MaxHousekeeperDelete=500
 
-### Option: DisableHousekeeping
-# If set to 1, disables housekeeping.
-#
-# Mandatory: no
-# Range: 0-1
-# Default:
-# DisableHousekeeping=0
-
 ### Option: SenderFrequency
 #  How often Zabbix will try to send unsent alerts (in seconds).
 #
@@ -335,6 +361,16 @@
 # Default:
 # HistoryTextCacheSize=16M
 
+### Option: ValueCacheSize
+#  Size of history value cache, in bytes.
+#  Shared memory size for caching item history data requests
+#  Setting to 0 disables value cache.
+#
+# Mandatory: no
+# Range: 0,128K-64G
+# Default:
+# ValueCacheSize=8M
+
 ### Option: NodeNoEvents
 #  If set to '1' local events won't be sent to master node.
 #  This won't impact ability of this node to propagate events from its child nodes.
@@ -431,7 +467,7 @@
 # Fping6Location=/usr/sbin/fping6
 
 ### Option: SSHKeyLocation
-# Location of public and private keys for SSH checks and actions
+#  Location of public and private keys for SSH checks and actions.
 #
 # Mandatory: no
 # Default:
@@ -454,17 +490,6 @@
 # Default:
 # TmpDir=/tmp
 
-### Option: Include
-# You may include individual files or all files in a directory in the configuration file.
-# Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
-#
-# Mandatory: no
-# Default:
-# Include=
-
-# Include=/usr/local/etc/zabbix_server.general.conf
-# Include=/usr/local/etc/zabbix_server.conf.d/
-
 ### Option: StartProxyPollers
 #  Number of pre-forked instances of pollers for passive proxies.
 #
@@ -490,3 +515,44 @@
 # Range: 1-3600
 # Default:
 # ProxyDataFrequency=1
+
+### Option: AllowRoot
+#  Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
+#  will try to switch to user 'zabbix' instead. Has no effect if started under a regular user.
+#  0 - do not allow
+#  1 - allow
+#
+# Mandatory: no
+# Default:
+# AllowRoot=0
+
+### Option: Include
+#  You may include individual files or all files in a directory in the configuration file.
+#  Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
+#
+# Mandatory: no
+# Default:
+# Include=
+
+# Include=/usr/local/etc/zabbix_server.general.conf
+# Include=/usr/local/etc/zabbix_server.conf.d/
+
+####### LOADABLE MODULES #######
+
+### Option: LoadModulePath
+#  Full path to location of server modules.
+#  Default depends on compilation options.
+#
+# Mandatory: no
+# Default:
+# LoadModulePath=${libdir}/modules
+
+### Option: LoadModule
+#  Module to load at server startup. Modules are used to extend functionality of the server.
+#  Format: LoadModule=<module.so>
+#  The modules must be located in directory specified by LoadModulePath.
+#  It is allowed to include multiple LoadModule parameters.
+#
+# Mandatory: no
+# Default:
+# LoadModule=

Sambaで共有したフォルダがSELinux環境でアクセス不可だった時の対処

ファイルサーバでSELinuxを有効化(enforcing)して付き合う

SELinuxは不正侵入の防止が目的ではなく、不正侵入後の被害拡大防止を目的が目的とされています。CentOSをインストールすると標準でSELinuxが有効になりますが、煩わしいという理由で即無効化(SELINUX=disabled)してしまう説明記事を多く見かけるのは何故でしょう。

確かに面倒なのですが、特別な事情もなくあえてセキュリティリスクを拡大させる必要もないわけです。そこで、極力SELinuxを有効化したまま向き合うようにしています。

他記事の受け売りですが、現在のSELinuxは標準設定でかなり最適化されているため、Webサーバ等の代表的な用途であればほぼ実害無く運用できるようです。実際、自宅サーバ用途(ファイル共有、Webサーバ、その他開発試験環境)においてドハマりしたのはSambaのファイルサーバくらいです。

ここではSambaで苦労した点を記録します。

SELinuxとは何か

個人的な理解では以下のとおり。
SELinuxはなかなか難しく理解しきれていないため、以降の記載は抽象的な表現も多くなりますがご了承を下さい。

SELinuxではプロセス、ポート番号、ファイルに対し、パーミッションやオーナとは別のタイプ属性(ラベルのようなもの)を付与し、属性同士のアクセス可否をホワイトリストで定義することで不必要なアクセスを拒否するもの。

そして、SELinuxと上手く付き合うためには以下を徹底することとしました。

標準で設定されているポリシを可能な限り踏襲する。

共有したホームディレクトへアクセスできない場合

ホームディレクトリのファイルは少々特殊なタイプ(user_home_t)が付与されます。これがついていると色々アクセス制限が厳しくなるので、なんでもかんでもホームディレクトリに格納するのは辞めた方が良いです。例えば、複数ユーザで共有するディレクトリやファイルはその典型。

当然、ホームディレクトリのポリシを細く設定すれば回避可能ですが、あえてイレギュラーなものを共存する必要はなく、ホーム以外へ追い出すだけでかなり楽になると感じます。従って、ここではシンプルに考えます。

とはいえ、ホームにアクセスしたいこともあるでしょう。ホームディレクトリのファイル群にSamba経由でアクセス拒否される場合は、おそらく以下の設定で解決します。

samba ホームディレクトリへのアクセス権限を確認

# getsebool samba_enable_home_dirs
samba_enable_home_dirs –> off 

これがOFFになっているとNG。

アクセスを許可する

# setsebool -P samba_enable_home_dirs 1 

先ほどと同様の以下コマンドを実行し、offだった部分がonになっていることを確認する。

# getsebool samba_enable_home_dirs
samba_enable_home_dirs –> on

複数ユーザで共有するファイル群を格納するディレクトリのポリシ設定

SELinuxポリシ管理ツールの導入

semanageというツールを使うと現在の設定値を確認や変更が簡単になりますが、CentOS 6.4をインストールした時にはsemanageが入っていませんでした(OSインストール時のパッケージ選択がシンプルすぎたか?)。

yum で以下パッケージをインストールすることで利用可能になります。

yum install policycoreutils-python

SambaとHTTPDで同一リソースを共有する場合のタイプ設定

public_content_rw_t タイプを付与することでSambaでの共有、及びHTTPサーバでのアクセスが両立できます。
※ このケースでは、/mnt/share というディレクトリを新規で作成して共有フォルダにする想定です。

sudo semanage fcontext -a -t public_content_rw_t '/mnt/share1(/.*)?'
sudo semanage fcontext -a -t public_content_rw_t '/mnt/share2(/.*)?'

# (-a は add, -t はタイプ,最後の引数は正規表現可能)

必要な数だけタイプの設定ポリシを追加し、それが反映されたかを以下コマンドで確認します。
(-l オプションでリスト表示が可能ですが膨大なため、必要部分を grep しているだけです)

sudo semanage fcontext -l | grep '/mnt'

内容が問題なければ、restorecon コマンドを実行しタイプの再付与を行います。

sudo restorecon -Rv /mnt

新規作成ファイルであれば上位ディレクトリを継承するので問題ありませんが、他のタイプが付与されたディレクトリからの移動を行った場合は古いタイプが残りますので、本コマンドでの再付与が必要になります。

(参考) 書き込みしたい場合の設定

setsebool -P allow_httpd_anon_write 1 # httpdで書き込みが必要な場合
setsebool -P allow_smbd_anon_write 1  # sambaで書き込みが必要な場合

OSX 10.9(Mavericks)のiTunesで歌詞を表示するビジュアライザ

iTunesで歌詞を表示したい!!と思った時に

iTunesで曲に歌詞を埋め込むことができますが、その歌詞をどのように表示するか?

  • 「自動でスクロールしてほしいなぁ」 とか
  • 「曲の進捗表示(タイムバー)を同じ画面に表示しておきたい 」 とか

これらを実現したい時は、ビジュアライザ機能を使うと便利です。

f:id:exlair:20131217231527p:plain
(↑このようになる)

なお、見出しは OSX としていますが本記事で紹介するプラグインそのものはWindowsにも対応していますので、同じ考え方で導入できると思われます。

プラグイン "Cover Version" のインストール方法

Cover VersionというiTunesプラグインを使います。非常にシンプルですが必要十分。インストール作業もとても簡単です。

システム要件として以下のように記載があります。

System Requirements:

“Cover Version” is built for Mac OS X 10.6 (Snow Leopard) and above. iTunes Version 10.4 (or greater) is required.

OS X 10.9 (Mavericks) 及び iTunes 11.1.3 で問題なく表示できました。手順は以下のとおり。

1. iTunesを終了する

これは念のため。

2. 「CoverVersion.bundle」をiTunesプラグインフォルダへ格納する

Cover Version をダウンロードして .dmgを展開すると「CoverVersion.bundle」ファイルが出てきます。これをiTunesプラグインのフォルダへコピーします。

f:id:exlair:20131217231536p:plain

プラグインフォルダはホームディレクトリ直下、"Library/iTunes/iTunes Plug-ins/" となります。これまでiTunesを何も弄らずに利用していた場合は何も入っていないはずです。

Finderで辿るのが面倒な場合はターミナルで以下のコマンドを入力しましょう。

open ~/Library/iTunes/iTunes\ Plug-ins/

4. iTunesを起動して設定する

iTunesメニュー「表示」>「ビジュアライザ」>「Cover Version」があることを確認し、選択します。ここで表示されていない場合は失敗しています。

f:id:exlair:20131217231542p:plain

選択した後は、「ビジュアライザを表示 ⌘T」を選択するか、ショートカットキー「Command+T」で画面を切り替えましょう。すると、曲に埋め込まれている歌詞が表示されます。

(注)本記事では歌詞の入力方法について説明していません。

LVMでパーティションサイズを調整(縮小・拡張)する

前回の続き。

blog.exlair.net

前の記事では、新規割り当てディスクを既存LVMに組み込む方法をまとめた。Step.2では、LVM管理下の各LVの容量を調整する。

現在の状態と目標

現在はStep.1の状態。Step.2のようにディスク容量の調整を行いたい。/home 領域が無駄に大きいので、ディスク拡張をきっかけに /mnt を大きくしたい。

f:id:exlair:20131208150134p:plain
図3 パーティションの縮小と拡張

(Step.2) LVM構築の大まかな流れ

  1. /homeの縮小
    • ファイルシステムのサイズ縮小
    • LVの縮小
  2. /mntの拡張
    • LVの拡張
    • ファイルシステムのサイズ拡張

縮小と拡張では順番が逆になることに注意する。

事前作業

/home を使いそうな作業スクリプト、デーモンを念のため止める。

(Step.2-1)/dev/vg_cent/lv_home (/home)を縮小

LVの縮小の場合は、まずファイルシステムのサイズを縮小した後にLVの容量を減らす。ここでは650GBにしているので、元々の1.2TBから -550GBしていることになる。

本当はもっと大きく、一気に減らしてしまいたいのだが、既に/homeには大量データが入っており、一気にデータ退避ができないので少しずつしか動かせない事情がある。問題なければ一気にサイズ縮小をした方が効率的である。

$ bash (個人的に利用しているzshでは/homeのスクリプトを動作させている為)

$ umount /home

$ fsck.ext4 -f /dev/vg_cent/lv_home

$ resize2fs /dev/vg_cent/lv_home 650G

$ lvreduce -L 650G /dev/vg_cent/lv_home

$ mount -t ext4 /dev/vg_cent/lv_home /home

(参考) 実行結果のコピー

$ bash                                                                                                                                                          bash-4.1$ ls -al /home/
drwxr-xr-x.  2 root root 4096  5月  5 18:03 2013 .
dr-xr-xr-x. 22 root root 4096 11月 25 00:36 2013 ..

bash-4.1$ sudo fsck.ext4 -f /dev/vg_cent/lv_home
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
(中略)

bash-4.1$ sudo resize2fs /dev/vg_cent/lv_home 650G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/vg_cent/lv_home to 170393600 (4k) blocks.
The filesystem on /dev/vg_cent/lv_home is now 170393600 blocks long.

bash-4.1$ sudo lvreduce -L 650G /dev/vg_cent/lv_home
xxx@cent Password: 
  WARNING: Reducing active logical volume to 650.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
  Reducing logical volume lv_home to 650.00 GiB
  Logical volume lv_home successfully resized

bash-4.1$ sudo mount -t ext4 /dev/vg_cent/lv_home /home

(Step.2-2) /dev/vg_cent/lv_mnt (/mnt) を拡大

LVの拡張の場合は、まずLVを拡張した後にファイルシステムのサイズの拡張を行う

  1. lvextend -l +100%FREE /dev/vg_cent/lv_mnt
  2. resize2fs /dev/vg_cent/lv_mnt

lvextendでは空き領域100%フルで拡張。 -L にするとサイズ指定も可能。空き容量をフル利用したいため、100%指定とした。

(参考) 実行結果のコピー

bash-4.1$ sudo lvextend -l +100%FREE /dev/vg_cent/lv_mnt
  Extending logical volume lv_mnt to 1.17 TiB
  Logical volume lv_mnt successfully resized

bash-4.1$ sudo resize2fs /dev/vg_cent/lv_mnt
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_cent/lv_mnt is mounted on /mnt; on-line resizing required
old desc_blocks = 38, new_desc_blocks = 75
Performing an on-line resize of /dev/vg_cent/lv_mnt to 313426944 (4k) blocks.
The filesystem on /dev/vg_cent/lv_mnt is now 313426944 blocks long.

結果確認

$ df -Th

$ fdisk -l

$ sudo pvdisplay
$ sudo lvdisplay

VMware (ESXi) で増量したディスクをLVMに組み込む方法

VMware(ESXi)上の仮想マシン CentOS 6.4 をファイルサーバとして利用しているが、標準のディスク割り当てでインストールをしたら /home 領域が過剰に大きくなってしまった。ここで再インストールをしておけば手間はかからなかったのだが、この状態でしばらく運用してしまったのでそれも面倒。

幸い標準でLVMが採用されているので、ディスクサイズを調整して /mnt 領域の容量を確保することにした。

現在の状態と目標

図1のようにCentOS領域は1.2TBである。同一HDD内に600GBの空き容量があったので、これをCentOSに割り当てることとした。今回はシンプロビジョニングを利用しているのでディスクサイズの拡張とするが、新規ディスクの割り当て(増設する)でもほぼ同じ手順と思われる。そしてLVMにて2つの領域を1つであるかのように利用する(図2)。

f:id:exlair:20131208150119p:plain
図1 現在の使用領域と新規割り当てサイズ

f:id:exlair:20131208150126p:plain
図2 LVMで複数領域を統合

f:id:exlair:20131208150134p:plain
図3 パーティションの縮小と拡張

(Step.1) LVM構築の大まかな流れ

  1. ディスクのパーティショニング(図1の状態)
  2. 物理ボリューム(PV)の作成
  3. ボリュームグループ(VG)の作成(図2の状態)
  4. 論理ボリューム(LV)の作成
  5. ファイルシステムの作成
  6. マウント

(Step.1-1) ディスクパーティショニング

vSphere client にて仮想マシンのディスクサイズを拡張。先ずは拡張ディスク分の新規パーティションを作成する。

ディスク拡張前後で fdisk -l を実行してサイズ変更されていることを確認すると良い。

sudo fdisk /dev/sda

p (テーブル表示で確認)

n (新規)

p (テーブル表示で確認)

領域番号 (1-4): 3 (既に1,2があるので3を作成)

p (テーブル表示で確認)

t (LVMに変更する為)

領域番号 (1-4): 3

L

16進数コード (L コマンドでコードリスト表示): 8e

p (テーブル表示で確認)

コマンド (m でヘルプ): w
領域テーブルは交換されました!

# リブートする必要がある
shutdown -r now

(Step.1-2 ~3) 物理ボリューム(PV)の作成, VGの作成

以上でパーティションが作成された。続いてそのパーティションを使ってLVMのディスクを拡張します。

pvcreate /dev/sda3
vgextend vg_cent /dev/sda3

※ ここで出てくる vg_cent とは、インストール時に設定された名前。仮想マシンのホスト名から自動的に設定されている様子(今回の仮想マシンホスト名は cent である為、vg_centとなる)

(参考)実行結果のコピー

$ sudo fdisk -l /dev/sda

(中略)

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *           1          64      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2              64      156651  1257778176   8e  Linux LVM
/dev/sda3          156651      248029   734001742+  8e  Linux LVM

$ sudo pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

$ sudo vgextend vg_cent /dev/sda3
  Volume group "vg_cent" successfully extended

$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               vg_cent
  PV Size               1.17 TiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              307074
  Free PE               0
  Allocated PE          307074
  (一部省略)

  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               vg_cent
  PV Size               700.00 GiB / not usable 2.58 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              179199
  Free PE               179199
  Allocated PE          0
  (一部省略)

(Step.1-4 ~5) 論理ボリューム(LV)の作成

/mnt用に新規 Logical Volume (lv_mnt) を作成する。ここでは割り当てたディスクサイズ600GBを指定している。その後、ファイルシステムを作成する。

lvcreate -L 600G -n lv_mnt vg_cent
 # (参考) `-l 100%FREE` この方法で100%使えるようだが上記の通りサイズ指定した

mkfs.ext4 /dev/vg_cent/lv_mnt

実行結果

$ sudo lvdisplay -C
  LV      VG      Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_home vg_cent -wi-ao---  1.12t                                             
  lv_root vg_cent -wi-ao--- 50.00g                                             
  lv_swap vg_cent -wi-ao---  3.88g

$ sudo lvcreate -L 600G -n lv_mnt vg_cent
  Logical volume "lv_mnt" created

$ sudo lvdisplay -C
  LV      VG      Attr      LSize   Pool Origin Data%  Move Log Cpy%Sync Convert
  lv_home vg_cent -wi-ao---   1.12t                                             
  lv_mnt  vg_cent -wi-a---- 600.00g                                             
  lv_root vg_cent -wi-ao---  50.00g                                             
  lv_swap vg_cent -wi-ao---   3.88g

(Step.1-6) マウントの設定

fatabに記載して仮想マシンを再起動する。

$ sudo vi /etc/fstab
+ /dev/mapper/vg_cent-lv_mnt    /mnt        ext4    defaults        1 3

reboot

Step.2 パーティションサイズの調整

記事が長くなったので別に記載 

blog.exlair.net

 

iPhone売却や他人へ譲る時は確実に実施したい初期化作業(調査結果のまとめ)

個人情報を削除せずに売却すると非常に面倒くさいかつ気分の悪いことになるので、ここは徹底して実施しておきたい。この手の情報はWebで簡単に入手できるが、確実に消したいのでいくつかのページを確認して情報を整理したいと思った。

結果として、本文末尾の参考情報にある通り対処すればよいことになるのだが、補足も兼ねて以下に整理する。

今回の対象端末

iPhone5(iOS7.x)を売却するための調査をした。iOS7ではiCloudからのデバイス情報削除も同時に実施してくれる(? *1)ので、ネットワークに接続した状態で実施したい。

*1) 正確iOS7未満のことを調べたわけではないのだが、公式に以下の記載があるのでiOS7では多少異なると見てよいと思われる。

iOS 7 搭載のデバイスで「iPhone を探す」がオンになっている場合は、Apple ID とパスワードの入力が必要になります。パスワードを入力するとデバイスが消去されると同時にアカウントから削除され、新しい持ち主がそのデバイスをアクティベートできるようになります。

余談になるが、iOS6.xの方が高価に買い取られているケースもあるため、せっかく売りに出すから最新化しておこうとは思わずに現在のバージョンを保持することが好ましいと思われる。iOSの最新化は非常に簡単だが、特定の旧バージョンに戻すことは通常操作では不可能である為だ。

バイス売却前提条件の確認

  1. 分割払いの場合、端末の支払いが完了しているか
  2. 端末にネットワーク制限がかかっていないか

データ消去

iPhoneはバックアップがとても楽なのでリセット作業も非常に単純。

  1. 個人情報の削除
  2. iCloudからデバイスが削除されていることの確認

※ 本記事は、iPhoneのバックアップ等の基本操作知識を有している方を対象とした内容です。バックアップ方法はApple公式サイトを見るなどして対応してください。

(1) 個人情報の削除

iOSバイスのデータを保護し、デバイスを出荷時の状態に戻すには、以下の手順を行います。

  1. バイスをバックアップする
  2. 情報を消去する
    • 「設定」>「一般」>「リセット」の順にタップし、「すべてのコンテンツと設定を消去」をタップ
    • これによってデバイスのデータが完全に消去され、iCloud、iMessage、FaceTime、Game Center、その他のサービスがオフになる
    • iOS 7 搭載のデバイスで「iPhone を探す」がオンになっている場合は、Apple ID とパスワードの入力が必要になる *2)。パスワードを入力するとデバイスが消去されると同時にアカウントから削除され、新しい持ち主がそのデバイスをアクティベートできるようになる。
    • パスワード入力後、ネットワーク越しにiCloudバイスを削除しに走るようだ。その根拠に、Wi-FiをOFFにした状態でリセットを実施したところ、Apple ID入力後にエラーが発生した *3)。

f:id:exlair:20131208004144p:plain f:id:exlair:20131208004150p:plain

*2) 左:リセット選択後にApple IDの入力を求められる
*3) 右:Apple IDの入力後、Wi-FiがOFFにの場合は削除に失敗する

重要:iCloud からサインアウトする前のデータ削除

iCloud アカウントにサインインしている状態で iCloud のデータ (連絡先、カレンダー、リマインダー、書類、フォトストリームなど) を 手動で削除 してしまうと、iCloud サーバやすべての iCloudバイスからもコンテンツが削除されてしまう。

(2) iCloudからデバイスが削除されていることを確認する

  1. https://icloud.com/find にサインインして「すべてのデバイス」を選択、一覧を表示する
  2. 今回削除したデバイス名のiPhoneが一覧から消えていることを確認する
    • 削除前後の比較をより確実にする為に、リセット前は一覧にあったことを確認しておくと尚良い

参考記事

  1. iPhone、iPad、iPod touch を売却または譲渡する前に
  2. iOS搭載機種 買取についての注意事項 | sofmap.com

attempt to present xxx on xxxw hile a presentation is in progress

画面A,Bからなるシンプルな画面遷移をStoryboardで作成。Warningが発生し、ググっても明確な答えが見つからずやきもきしていたが、結果的には操作ミスで呼び出し元ボタンに余計な設定がされていただけだった(Outlet Collections -> Sent Events)。削除して解決。

attempt to present xxx on xxxw hile a presentation is in progress

かなりハマったので一事例として記録。

WebViewでBASIC認証をする時に入力ダイアログを表示する

WebViewでふつーにBASIC認証をする方法

いわゆるダイアログを表示するUI)の情報を探すのに手間取ったのでメモ。

処理

大きな流れは以下2つ。 - getHttpAuthUsernamePassword でID/PWを取得 - なければダイアログを表示して保存する setHttpAuthUsernamePassword

handler.useHttpAuthUsernamePassword の意味だけど、次ページ以降で認証を継続するため。書いておかないとページ遷移のたびに認証ダイアログがでてしまう。

ハマった点

handlerは proceed() か cancel() のいずれかを使って認証リクエストを完了させないといけない。よくリファレンスを見たら書いてあったのだけど、最初 cancel() を使っていなくて1回しか認証ダイアログがでてこない状態になってしまった。

private class MyWebClient extends WebViewClient {
    @Override
    public void onReceivedHttpAuthRequest(WebView view,
            final HttpAuthHandler handler, final String host, final String realm) {

        String userName = null;
        String userPass = null;

        if (handler.useHttpAuthUsernamePassword() && view != null) {
            String[] haup = view.getHttpAuthUsernamePassword(host, realm);
            if (haup != null && haup.length == 2) {
                userName = haup[0];
                userPass = haup[1];
            }
        }

        if (userName != null && userPass != null) {
            handler.proceed(userName, userPass);
        } else {
            showHttpAuthDialog(handler, host, realm, null, null, null);

            // If you hope for the state that the username/password is input. 
            //showHttpAuth(handler, host, realm, null, "username", "password");
        }
    }
}


private void showHttpAuthDialog(final HttpAuthHandler handler,
        final String host, final String realm, final String title,
        final String name, final String password) {

    LayoutInflater factory = LayoutInflater.from(activity);
    final View textEntryView = factory.inflate(
            R.layout.basicauth_entry, null);

    // username/passwordを受け取った場合はダイアログに入力する処理とか

    mHttpAuthDialog = new AlertDialog.Builder(activity);
    mHttpAuthDialog.setTitle("Enter the password")
        .setView(textEntryView)
        .setCancelable(false);
    mHttpAuthDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            EditText etUserName = (EditText) textEntryView.findViewById(R.id.username_edit);
            String userName = etUserName.getText().toString();
            EditText etUserPass = (EditText) textEntryView.findViewById(R.id.password_edit);
            String userPass = etUserPass.getText().toString();

            webview.setHttpAuthUsernamePassword(host, realm, user, pass);

            handler.proceed(userName, userPass);
            mHttpAuthDialog = null;
        }
    });
    mHttpAuthDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            handler.cancel();
            mHttpAuthDialog = null;
        }
    });

    mHttpAuthDialog.create().show();
}

: Rawyuv input requires a resolution.

AVSファイルをx264エンコードしようとした時に出たエラー。

x264 [error]: Rawyuv input requires a resolution.

avsファイルの名前にスペースが入っていたのがマズかったもよう?
詰めたら問題なくエンコードできた。

TimeMachineのバックアップ先をファイルサーバ(Debian)に設定した&手順備忘録

OSXのバックアップ専用HDDを買ってきたんだけど、USB接続でTimeMachineを利用するのは少々煩わしいと思ったので、サーバに接続してワイヤレスLANで利用することにする。

画像が無いので見づらいです。

サーバ準備

環境は、Debian (etch) と samba 3.x
USB接続の外付HDDを繋ぎ、ext3でフォーマット&マウントする

	$ mkfs.ext3 /dev/sda1

OSを問わずSambaで接続ができて、かつ書き込み可能な場所であれば何でも構わないでしょう。NASでもたぶん同様。

設定準備

Macのターミナルで下記コマンドを実行。標準では非対応な外部ボリュームを指定することができるようになる。

	$ defaults write com.apple.systempreferences
	TMShowUnsupportedNetworkVolumes 1

iTimeMachineというアプリもありますが実行しているのは上記設定と同じことという認識。なので、あえて余計なアプリは使わないことにした。

以下、TimeMachine用のディスクイメージを作成してサーバへ設置する手順。

1.ディスクイメージ作成

1.1. [アプリケーション]-[ユーティリティ]-[ディスクユーティリティ]を起動。
(/Applications/Utilities/Disk Utility.app)

1.2. メニューの[ファイル]-[新規]-[空のディスクイメージ]を選択。以下のように指定。

項目 選択
名前 [Macintoshのホスト名]_[Macintoshの有線LANポート側MACアドレス]
*「macbookhost_001A2B3C4D5」という感じ
* 無線なら無線LANMACアドレスかと思ったけど違うらしい
保存先 ホームなど適当に ※後で移動するのでどこでもよい
ボリューム名 適当。「TimeMachine」とか
ボリュームサイズ 適当。 ※あとで拡張するので、とりあえず10Mとか
ボリュームフォーマット Mac OS 拡張(ジャーナリング
暗号化 なし
パーティーション ハードディスク
イメージフォーマット スパースバンドル・ディスクイメージ


1.3. 『作成』を押して、指定した場所に次のようなファイルが作成される。(もちろんホスト名やMACアドレスは指定したもの)

	macbookhost_001A2B3C4D5.sparsebundle

memo: ネットワーク経由でこの「スパースバンドル・ディスクイメージ」が作成できないため、ローカルで作成している。TimeMachineの設定が保存ボリューム指定だけで済まないのもこの理由みたい。

2.ディスクイメージ配置

作成したイメージをサーバに移動する。Finderからでも、 mv *.sparsebundle /Volumes/where でも、好きな方法で。必ず保存先ボリュームのルートディレクトリにファイルを配置する。

3.ディスクイメージ拡張

3.1. 先程作成したイメージはサイズが小さいため拡張する。
※拡張するなら最初から大きいサイズを作ればいいじゃないかと思うかもしれないが、OS全体をバックアップするならHDDの容量以上の大きさが必要と考えられるため、このようにする。一部だけのバックアップなら欲しい容量だけでいいと思う。

3.2. サーバに移動したイメージファイルをクリックしてマウントする。

3.3. 再び、ディスクユーティリティを起動し、左欄にマウントしたディスクが表示されているか確認する。
あればそれを選択し、ツールバーの[取り出す]でアンマウントする。

3.4. 続いて、[イメージサイズの変更]がクリックできるようになるのでクリックする。
「▼」をクリックして詳細設定。
・[パーティーションとイメージのサイズを変更]を選択
・割り当てたい容量を指定 ※画面下の単位をGBにするとやりやすい。150Gにしておいた。

4.パーティション拡張

ディスクイメージを拡張してもパーテョションのサイズは初回作成時の容量のままになっている。この作業が必要なことになかなか気づかず、かなりつまずいた。

4.1. 上記作業の後、そのボリュームをマウントすると「パーティション」タブっぽいのが表示されるのでそれを選択する。

4.2. そこにある「サイズ」を上限まで指定してあげればよい。(ちなみに、すぐ横にあるボックスを引き伸ばすしても指定できるし、こちらの方が最大まで使えそう。)

5.TimeMachine設定

sparsebundleを入れたドライブをファインダーで「取り出す」 (**これが重要!**)

5.1. 後はTimeMachineの設定(ボリュームの指定:作成したイメージではなく、イメージが置かれているドライブのルート)

5.2. 実行

その他

最初は無線LANで作業をしていたのだけど安定しなかったので有線で作業してました。どうせ大量のファイルをコピらないといけないのなら、最初は有線にしようということで。

上でも少し触れましたが、作成したsparsebundleのボリュームがマウントされている状態だとTimeMachiが自動でうまく処理を完結できないので、アンマウントされてる必要があることに注意。


参考. [TimeCapsuleじゃないNASを使って、TimeMachineを使ってみる:http://blog.openmedialabo.net/232]

autoindexのファイル一覧がISO-8859-1で化ける件

いつだったか、debian(etch) の apache2 を更新した時から autoindex のファイル一覧が 文字化けするようになってしまった。conf.d の charset にある AddDefaultCharset が UTF-8 になっているという情報はよく見かけるのだけど、元々 UTF-8 で運用していたうえに、どう変更しても autoindex の Content-Type は ISO-8859-1 になってしまう。

なかなか情報が見つからなかったのだけど、漸く見つけたのが次のページ。
http://d.hatena.ne.jp/woremacx/20080227/1204073532

対処方法は、confに以下を書くだけ。

IndexOptions Charset=UTF-8

余談だけど、debian 上では httpd.conf に書いておくと管理が楽になる気がした。ということで、conf.d の Include は無効にしておいた。(意味ないけど)

Mac で Windowsキーボードを快適に使う

外出先でもMacBookを閉じたまま(リッドクローズドモードで)使いたいのだけど、そこにはWindowsキーボードしかなくて非常に操作がしづらい(Ctrlの位置ずれが一番しんどい)。でも、家ではAppleのワイヤレスキーボード&マウスを利用しているので下手にキーマップを変更したくない。なのでWindowsキーボードを接続した時にだけうまく変更できる方法はないかなと調べていたら完璧なものを発見。

KeyRemap4MacBook - OS X用のソフトウェア

PCKeyboardHack はキーボードドライバーにパッチを当てることで、 CapsLock のリマップや Windows 用の日本語キーボードにある「無変換」「変換」「ひらがな」キーを Mac で使えるようにするソフトウェアです。

KeyRemap4MacBook というMac OS X 向けのキーボードリマッパーソフトの拡張みたい。KeyRemap4MacBook は有名でよく見かけますね。自分もspacesの切り替え用途で導入していました。

使い方はドキュメントにある通り

ひとつ気を付けたいのは、『Change Caps Lock』を有効にするだけでは「Deleteキー」が割り当てられてしまうので、「左Ctrl」を割り当てるために『keycode』を『59』に設定。また、『For japanese』の項目全てを有効にすると「無変換」「変換」「ひらがな」キーも有効になって違和感なく使えるようになります。
ついでに『Change Control_L』を有効にするとWindowsキーボードの Ctrl が Command として機能するので、個人的にはだいぶ使いやすくなりました。

今のところこれで文句無し・・・
と思ったけど、Windowsキーボード接続時のみというわけではなさそう。KeyRemap4MacBookの設定にあわせて切り替えできればベストなんだけど。