水曜日, 9月 26, 2018

恐竜をNodeMCUで動かす。(DIYでSmart Home)
赤外線リモコンのRAWデータの送信

[概要]
赤外線リモコンで動く恐竜のおもちゃをArduinoから操作するプログラムを作成します。
赤外線リモコンのraw信号を送信するプログラムを作るのが目的です。


[詳細]
2年前に娘の誕生日に購入した「ディズニー アーロと少年 ダイノRCアーロ」が赤外線リモコンで動くものだったので、Arduinoで動かせるようにしてみました。

[プログラムの流れ]

  1. ヘッダファイルをインクルード
  2. 定数の定義、オブジェクトの作成
  3. 赤外線のコマンドデータの貼り付け
  4. コマンド操作関数の作成
  5. setup関数にて、シリアルの初期化と赤外線オブジェクトの開始
  6. loop関数にて、シリアル入力に応じた赤外線コマンドの切り替えと赤外線コマンドの送信(LEDの点滅)

[ソース]
解説(番号)は、下記の説明の番号と一致しています。

// 解説 1 #include <IRremoteESP8266.h> #include <IRsend.h> // 解説 2 #define BAUD_RATE 115200 // シリアル・ポートの転送レート #define IR_LED (D7) // 赤外線LEDを取り付けるピン IRsend irsend(IR_LED); // 赤外線を送信するためのオブジェクトの作成 // 解説 3 // 曲がるためのコマンド uint16_t turnData[65] = {628, 3036, 642, 2026, 628, 1008, 642, 2028, 626, 2076, 578, 1030, 630, 1020, 626, 2026, 626, 2026, 628, 3046, 626, 38228, 626, 3036, 614, 2058, 624, 1010, 642, 2028, 626, 2026, 626, 1026, 626, 1026, 626, 2026, 626, 2024, 628, 3048, 626, 38248, 628, 3036, 614, 2082, 600, 1010, 640, 2032, 624, 2030, 624, 1028, 624, 1026, 628, 2026, 626, 2024, 630, 3046, 626 }; // まっすぐ歩くためのコマンド uint16_t straghtData[65] = {626, 3038, 612, 2056, 626, 1010, 642, 2030, 624, 2026, 628, 2026, 628, 1026, 626, 2028, 672, 978, 628, 3046, 628, 38262, 624, 3036, 614, 2056, 628, 1008, 642, 2028, 628, 2028, 626, 2028, 624, 1026, 626, 2026, 676, 976, 628, 3048, 626, 38222, 628, 3036, 616, 2054, 628, 1012, 640, 2028, 626, 2026, 626, 2028, 626, 1026, 626, 2026, 676, 978, 626, 3048, 628 }; uint16_t *rawData; // 送信する信号をスイッチするためのポインタ // 解説4 // 送信する信号を決める uint16_t *command(char x) { uint16_t *data; switch (x) { case 's': data = straghtData; Serial.print("s data"); Serial.println(data[1]); break; case 'a': Serial.print("r data"); data = turnData; Serial.println(data[1]); break; case 'd': Serial.println("q data"); data = NULL; break; default: data = NULL; } return data; } // 解説5 // 起動時に初期設定を行います。 void setup() { Serial.begin(BAUD_RATE); // シリアル・ポートの通信速度の設定 irsend.begin(); // 赤外線送信のオブジェクトをスタート rawData = NULL; // コマンドのデータをNULLにセットし、赤外線LEDを点灯しないようにする。 } // 解説6 // メインループ void loop() { char x; if (Serial.available()) { x = Serial.read(); rawData = command(x); } if (rawData != NULL) { irsend.sendRaw(rawData, 65, 38); } delay(200); }

[ソース解説]

  1. 赤外線を送るために2つのヘッダファイル"IRremoteESP8266.h"と"IRsend.h"をインクルードします。
  2. プログラムに必要な定数の定義と赤外線コマンドをグローバル・オブジェクトの作成を行います。
    • BAUD_RATEにシリアルポートの通信速度115200 bpsを設定します。
    • 赤外線LEDを取り付けるピン(IR_LED)を"D7"とします。
    • IRsend irsend(IR_LED)で、赤外線を送信するためのオブジェクトの作成します。引数は赤外線LEDが接続されているピンを指定します。
  3. 赤外線コマンドになるRawデータを記述します。今回はまっすぐ進むと曲がるの2つのコマンドのみ。
    コマンドの配列は学習プログラムがシリアルに出力したデータをコピー&ペーストしてください。
    • turnData : 曲がるコマンドのデータ
    • straghtData : まっす進むコマンドのデータ
  4. 送信する赤外線信号を決めるローカル関数を作成します。
  5. 送信するコマンドを決めるための関数を作成します。
    [関数の概要]
    入力された文字に応じてたコマンドのデータが格納してある配列のポインタを返します。
    キーと動作の対応
    • a:曲がる。turnDataを指定する。
    • s:まっすぐ進む。straghtDataを指定する。
    • dとそれ以外:止まる。NULLを指定する。
  6. setup関数で起動時の初期設定をします。
    • シリアルポートの通信速度をBAUD_RATE(115200 bps)に設定します。
    • 赤外線送信を点滅できる状態にします。赤外線LEDを発光させるコマンドではありません。あくまで、点滅できるようにするだけです。
    • コマンドのデータをNULLにセットし、起動時に恐竜が動き出さないようにします。
  7. loop関数の説明。
    [関数の概要]
    PCのキー入力に応じたコマンドを赤外線LEDで光らせます。
    • Serial.available() : シリアルが利用可能な状態かどうかを確認します。
    • x = Serial.read() : シリアルからの入力を受け付けます。
    • rawData = command(x): 解説xのcommand関数を呼び出し、実行するコマンドを取得します。
    • irsend.sendRaw(rawData, 65, 38) : コマンドがNULL出ないときに、"rawData"に従ってLEDを点滅させます。関数の第二引数は配列の長さ。第三引数はメッセージを送信するときの周波数。
      キーが押されない間は同じコマンドが繰り返されます。リモコンのボタンが押され続けることを実現するため。
    • delay(200):200msの間休止します。この間隔が短すぎると部屋にある他の赤外線リモコンに干渉します。うちでは100msでテレビやエアコンのリモコンが効かなくなりました。逆に間隔が長いと恐竜の動きがスムーズになりません。

金曜日, 9月 14, 2018

DIYでSmart Home (プロローグ)

[概要]
これから自作スマートホームについてしたいなーと思っていることをゆ~る~く決意表明します。
[詳細]
最近、なんとな~く仕事でIoTぽいことに携わったり、スマートスピーカーのCMでみたりしているうちに何か作ってみたいな―と思い。趣味とお勉強を兼ねてスマートホームをDIYしてみることにしました。
  1. 家の中を見える化する。
    1. 温湿度の見える化(Visualization/Sensing)
    2. IT機器の状態の見える化
    3. 家電の状態の見える化
    4. 見守り
  2. Webから家電を操作する。(Actuation)
    1. 赤外線リモコンで操作
    2. WiFit対応家電の操作
  3. スマートスピーカーを自作する
    1. Amazon Voice Service対応
    2. Google Assistant対応
    3. AmazonとGoogleの共存
    4. スマートスピーカーから、家電を操作する。
  4. 自動化(Automation)
    1. 家電の自動制御

まずは「スマートスピーカーから家電を操作する。」がゴール。そのあとは動かせる機器を増やしていきたいな―

スマートホームを直接構成するものの話だけでなく、その準備やお勉強に使うものについても書いていきたいと思います。

随分と最新IT技術から疎くなっていると、ソフト屋さんなんで電子・電気はからっきし知らないたので、「そこからかよ!」突っ込まれる内容になりそうです。

のんびりと進めていきます。

火曜日, 5月 15, 2018

GLANTANK をDebian7 (Wheezy) から Debian9 (Stretch)にアップグレード

[概要]
GLANTANKのOSをDebian 7 (Wheezy)からDebian 9 (Stretch)にアップグレードします。
[詳細]
Wheezy のLTSが5月で終わるので、GLANTANK をStretchに上げることにしました。
使っている人は、ほとんどいないでしょうね。需要はないと思いますが、やってみたことを書いてみます。

結論から言うと/etc/apt/sources.listの書き換え2回で無事アップグレードできました。

Step 0 まずは、Wheezyの最新の状態にアップグレード
アップグレードする前に、現在のOSを最新状態にします。
apt-get update
apt-get dist-upgrade -y
# 私はこの後、ディスクイメージのバックアップを取りました。

Step 1 WheezyからDebian 8 (Jessie) へアップグレード
WheezyからStretchへ一足飛びにアップグレードするのは怖いので、まずはWheezyからJessieにアップグレード。

次に/etc/apt/sources.listの"wheezy"を"jessie"に書き換えます。
[リスト1] wheezyの時のsources.list
deb http://ftp.jp.debian.org/debian/ wheezy main
deb-src http://ftp.jp.debian.org/debian/ wheezy main

deb http://security.debian.org/ wheezy/updates main
deb-src http://security.debian.org/ wheezy/updates main

#deb http://ftp.riken.jp/Linux/debian/debian/ wheezy main
#deb-src http://ftp.riken.jp/Linux/debian/debian/ wheezy main

#deb http://security.debian.org/ wheezy/updates main
#deb-src http://security.debian.org/ wheezy/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ wheezy-updates main
deb-src http://ftp.jp.debian.org/debian/ wheezy-updates main
上から下に書き換え。
リスト2 jessieに変更したsources.list
deb http://ftp.jp.debian.org/debian/ jessie main
deb-src http://ftp.jp.debian.org/debian/ jessie main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

#deb http://ftp.riken.jp/Linux/debian/debian/ jessie main
#deb-src http://ftp.riken.jp/Linux/debian/debian/ jessie main

#deb http://security.debian.org/ jessie/updates main
#deb-src http://security.debian.org/ jessie/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ jessie-updates main
deb-src http://ftp.jp.debian.org/debian/ jessie-updates main

そして、Jessieにアップグレード
apt-get update
apt-get dist-upgrade -y
終わったらリブート。


Step 2 JessieからStretch へアップグレード
リスト2のsources.listの"jessie"を"stretch"に書き換えます。

リスト3 stretchに変更したsources.list

deb http://ftp.jp.debian.org/debian/ stretch main
deb-src http://ftp.jp.debian.org/debian/ stretch main

deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main

#deb http://ftp.riken.jp/Linux/debian/debian/ stretch main
#deb-src http://ftp.riken.jp/Linux/debian/debian/ stretch main

#deb http://security.debian.org/ stretch/updates main
#deb-src http://security.debian.org/ stretch/updates main

# squeeze-updates, previously known as 'volatile'
deb http://ftp.jp.debian.org/debian/ stretch-updates main
deb-src http://ftp.jp.debian.org/debian/ stretch-updates main


あとは繰り返し。
apt-get update

apt-get dist-upgrade -y

終わったらリブート。

確認
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.4 (stretch)
Release:        9.4
Codename:       stretch

無事、アップグレードができました。

金曜日, 5月 10, 2013

Buffalo AirStationのネットワークサービス

バッファローの無線LANルーター AirStationには、Wake On LAN (WOL)を使って、ネットワーク上のPCを起動する機能がありますが、マニュアルにはほとんど説明がありません。
私なりの理解で、AirStationの「ユーティリティー機能」を解説します。
ログインした直後のホームページに「ネットワークサービスの一覧」のボタンがあるので、これを押してリモートアクセス情報」のページに移動します。
「モートアクセス情報」のページには、LAN上にあるマシンの一覧が表示されます。
リストされているものは次の通り。
・第一カラム
 パソコン名(機器), MACアドレス
・第二カラム
 IPアドレス,
リモートデスクトップのマーク リモート・デスクトップ
・第三カラム
 ネットサービスのアイコン
WOLWOL CIFS Windowsファイル共有
FTP WWW

AirStationがサービスを判別する方法。
  • WOLWake On LAN
    同一LAN上IPを検索し、Arp テーブルからIPアドレスと
  • WWW WWWサービス
     次のポート番号でhttpがサービスされていること 80番, 8000番, 8080番
  • FTP ftpサービス
     ポート番号20番でftpがサービスされていること
  • CIFS パソコン名の解決、windowsファイル共有
    ポート番号137番でwindows名前解決サービスが動作していること。
  • リモート・デスクトップ リモート・デスクトップ
     ポート番号3389でrdpがサービスされていること
名前解決には、NetBIOSが使用されています。NetBIOSをサポートしていないパソコン(機器)は「名称不明」と記載されます。DNSでは解決してくれませんので、Linuxではssambaを入れることで登録できるようになります。まぁ、家庭用のなので仕方ないですね。
ネットサービスリストには、その機器WOLをサポートしていなくとも必ずWOLのボタンが付加されます。
ポート番号3896番を必ずスキャンしていますが、なんのサービスを探しているかは現在のところ不明。

水曜日, 5月 08, 2013

Debianのネットワークインストール環境の構築

[概要]
Debianのネットワークインストール・サーバの構築方法を説明します。
[詳細]
前回はUbuntuネットワークインストール・サーバの構築をしました。今回はDebianのネットワークインストール環境の構築について説明します。ネットワークインストールには、ネットワークブート・サーバが必要でです。ネットワークブート・サーバの構築方法はこちらを参照してください。
[ネットワークインストール・イメージのダウンロード]
ネットワークインストール・イメージをDebianのミラーサイトからダウンロードします。
ミラーリストから日本のサイトを選んでダウンロードしてください。

下記にダウンロード方法の例を示します。
安定版のダウンロード:
amd64版(x86_64版)
root@linux00:~# wget http://ftp.nl.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/netboot.tar.gz
i386版
root@linux00:~# wget http://ftp.nl.debian.org/debian/dists/stable/main/installer-i386/current/images/netboot/netboot.tar.gz
明示的に7.0 (wheezy)をダウンロード:
amd64版(x86_64版)
root@linux00:~# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/netboot.tar.gz
i386版
root@linux00:~# wget http://ftp.nl.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/netboot.tar.gz

[ネットワークインストール・イメージの展開]
注意:ここでの説明は複数のOSネットワークインストールがない環境であることが前提です。
ダウンロードしたネットワークインストール・イメージを、tftpのディレクトリに展開します。
root@linux00:~# tar xfz -C netboot.tar.gz -C /var/tftpboot/
"/var/tftpboot"はtftpのルートディレクトリです。環境に合わせて適宜変更してください。
以上でサーバー側の設定は終了です。
[クライアントのブートの順序の変更]
ネットワークブートするようにBISOの設定を変更します。
[インストールの実施]
クライアントの電源を入れます。PXEのプログラムが起動し、その後インストーラ起動すれば、正しく動作していますので、インストーラーの指示に従って、インストールを行ってください。


以上で、Debianのネットワークインストールの環境の構築方法についての説明は終了です。

火曜日, 5月 07, 2013

Ubuntuのネットワークインストール環境の構築

[概要]
Ubuntuのネットワークインストール・サーバの構築方法を説明します。
[詳細]
前回はネットワークブート・サーバの構築をしました。今回はUbuntuのネットワークインストール環境の構築について説明します。
Ubuntuのネットワークインストールには2種類あり、サーバ版に同梱されているネットワークインストール・イメージを使用する方法と、デスクトップ版のLive イメージを使用する方法があります。
まず、今回はネットワークインストール・イメージを使用した方法について説明ます。Liveイメージを使った方法については回を改めて説明します。
[ISOイメージのダウンロード]
必要なISOイメージをダウンロードします。ネットワークインストールのイメージは、12.10以降はserverのisoイメージ、12.04以前ではalternateのisoイメージに含まれます。念のために、ファイル名は次のように構成さています。"ubuntu-バージョン-用途-アーキテクチャ.iso"。例:"ubuntu-13.04-server-amd64.iso"
[ネットワークインストール・イメージのコピー]
ダウンロードしたisoイメージから、ネットワークインストール・イメージをtftpのディレクトリをコピーします。
注意:ここでの説明は複数のOSネットワークインストールがない環境であることが前提です。
root@linux00:~# mount -o loop,ro ubuntu-13.04-server-amd64.iso /mnt/loop
root@linux00:~# rsync -av /mnt/loop/install/netboot/ /var/tftpboot/
"ubuntu-13.04-server-amd64.iso"はisoイメージ、"/mnt/loop"はisoイメージのマウント・ポイント、"/var/tftpboot"はtftpのルートディレクトリですので、環境に合わせて適宜変更してください。
以上でサーバー側の設定は終了です。
[クライアントのブートの順序の変更]
ネットワークブートするようにBISOの設定を変更します。
[インストールの実施]
クライアントの電源を入れます。PXEのプログラムが起動し、その後インストーラ起動すれば、正しく動作していますので、インストーラーの指示に従って、インストールを行ってください。



以上で、Ubuntuのネットワークインストールの環境の構築方法についての説明は終了です。

水曜日, 5月 01, 2013

PXEネットワークブート・サーバの構築

[概要]
ネットワークブート・サーバの構築方法を説明します。
[詳細]
ネットワーク・インストールやサーバのメンテナンスを行う際に、ネットワーク上からOSのイメージを自動でダウン・ロードして、作業を行うと非常に便利です。これを可能にするのがネットワークブートです。ネットワークブートにはPreboot eXecution Environment(PXE)という方式が一般的によく使われています。
そこで、PEXのネットワークブート・サーバの構築をtftpサーバを利用した方法について4回に分けて説明します。
第1回目の今回はサーバ・ソフトのセットアップについて説明します。
[PXEブートの仕組み]
PXEを実装したNICがブロードキャストで、DHCPサーバへIPアドレスなどのネットワークの設定とともに、bootサーバのIPアドレスとNBP(NetworkBootProgram)のパスと要求します。
IntelのPXEのスペック資料によると、左の図のようにNBTのパスを教えるをbootサービスはDHCPサーバではなくbootサーバの役目です。しかし、一般的にlinuxで利用されているiscのDHCPサーバでは、右の図のようにこの役割も兼ねていますので、DHCPサーバとbootサーバを分けることが出来ます。



  1. [前提条件]
    DHCPサーバとNFSサーバを使用します。それぞれのインストール、初期セットアップが終わっていることを前提に話を進めます。
  2. [tftp, syslinuxパッケージのインストール]
    tftpサーバ, syslinux, xinetdをインストールします。(tftpサーバとxinetdは依存関係があるの指定しなくともインストールされます。)
    • Debian系(Ubuntuなど)の場合
      root@linux00:~# apt-get install tftpd syslinux xinetd
    • Red Hat系 (CentOS, Fedoraなど)の場合
      root@linux00:~# yum install tftpd-server syslinux xinetd
  3. [ブートファイルの準備]
    PXE bootに必要なファイルをtftpサーバの管理下のディレクトリに配置します。
    1. [ディレクトリの作成]
      デフォルトのディレクトリは"/tftproot"になりますが、今回は"/var/tftpboot"を作成し使用します。
      root@linux00:~# mkdir /vat/tftpboot
      設定ファイルを置くディレクトリを作成します。
      root@linux00:~# mkdir /vat/tftpboot/pxelinux.cfg/
    2. [NBPのコピー]
      "pxelinux.0"をtftpのディレクトにコピーします。
      root@linux00:~# cp /usr/lib/syslinux/pxelinux.0 /vat/tftpboot
  4. [xinetdの設定]
    "tftpdapt-get"をインストールすると、tftpの設定ファイルが"/etc/xinetd.d/tftp"に作成されます。これを環境に合わせてカスタマイズします。
    下記の斜体になっている部分を必要に応じて変更または追記します。
    root@linux00:~# vi /etc/xinetd.d/tftp
    service tftp{
    disable = no # noからyesに変更
    socket_type = dgram
    protocol = udp
    port = 69
    user = nobody
    group = nogroup
    wait = yes
    server = /usr/sbin/in.tftpd
    server_args = /var/tftpboot # tftpdのルートディレクトリを指定します。defaultでよければ/tftpboot
    only_from = 192.168.1.0/24 # アクセスを許可するマシン、ネットワークを指定します。
    }
    編集が完了したらxinetdを設定ファイルを再読み込みします。
    [Debian系, RHEL 6.x系 (initで管理されているシステム)]
    root@linux00:~# /etc/init.d/xinetd reload
    [Fedora16以降 (systemdで管理されているシステム)]
    root@linux00:~# systemctl reload xinetd.service
  5. [DHCPサーバの設定]
    PXEbootを有効にするためには"/etc/dhcpd/dhcpd.conf"に下の4行を追加します。
    allow booting;
    allow bootp;
    next-server 192.168.1.2; #tftpサーバのホスト名、もしくはIPアドレス
    filename "/var/tftpboot/pxelinux.0"; #NBPのファイル・パス
  6. [NFSサーバの設定]
    "/etc/exports"にNFSの共有設定を行います。下記の例では、"/var/www/images"を共有し、"192.168.1.0"のネットワークからのmountを許可しています。
    /var/www/images 192.168.1.0/24(ro,no_root_squash,subtree_check)
    NFSの共有設定を有効にします。
    root@linux00:~# exportfs -r
以上でネットワークブートの準備が整いました。この環境にOS個々のインストール・イメージを登録することで、ネットワークインストールが可能になります。 次にネットワークインストール・イメージの登録を行います。 ディストリビューション毎に下のリンクをたどってください。
[参考文献] Intel Corporation (1999), 'Preboot Execution Environment (PXE) Specification Version 2.1'

木曜日, 3月 07, 2013

Ubuntuでシリアルを有効にする

[概要]
Ubuntuでシリアルコンソールを利用可能にする方法を説明します。
[詳細]
対象となるUbuntuのバージョンは12.04とします。

  1. 起動ファイルの作成
    1. まず、Upstartの設定を行います。 下記の内容を "ttyS0.conf"へコピペしてください。
      foo@ubuntu01:~$ vi ttyS0.conf

      # ttyS0 - getty
      #
      # This service maintains a getty on ttyS0 from the point the system is
      # started until it is shut down again.

      start on stopped rc or RUNLEVEL=[2345]
      stop on runlevel [!2345]

      respawn
      exec /sbin/getty -L 115200 ttyS0 vt102

      作成した"ttyS0.conf"を"/etc/init/ttyS0.conf"へコピーします。
      foo@ubuntu01:~$ sudo cp ttyS0.conf /etc/init/ttyS0.conf
    2. サービスを起動ます。
      foo@ubuntu01:~$ sudo start ttyS0
      ttyS0 start/running, process 25444

      foo@ubuntu01:~$
    3. 接続を確認します。
      [kvm環境]
      virshを使用して確認します。
      foo@vmhost01:~/tech/ubuntu$ virsh
      virsh にようこそ、仮想化対話式ターミナルです。

      入力: 'help' コマンドのヘルプ
      'quit' 終了

      virsh # console ubuntu01
      ドメイン ubuntu01 に接続しました
      エスケープ文字は ^] です

      Ubuntu 12.10 ubuntu01 ttyS0

      ubuntu01 login: foo
      Password:
      Last login: Tue Feb 5 11:04:28 JST 2013 from 192.168.122.1 on pts/0
      Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)

      * Documentation: https://help.ubuntu.com/

      System information as of Tue Feb 5 11:11:51 JST 2013

      System load: 0.0 Processes: 79
      Usage of /: 20.0% of 7.12GB Users logged in: 1
      Memory usage: 38% IP address for eth0: 192.168.122.65
      Swap usage: 0%

      Graph this data and manage this system at https://landscape.canonical.com/

      foo@ubuntu01:~$
      virsh #
      コンソールから抜け出るときには、"Ctrl+]"を押します。接続時に表示される「エスケープ文字は ^] です」は、これを意味しています。

      [RS232C接続]
      これは、別途。それまでは、ネット上で接続方法を探してください。
  2. grub, bootパラメータの変更
    ubuntuでは起動パラメータは、"/boot/grub/grub.conf"を直接編集するのではなく"/etc/grub.d"の下にあるファイルを編集し、コマンドを用いて"/boot/grub.conf"を生成します。
    1. [00_headerの編集]
      赤字の部分を追加します。
      # along with GRUB. If not, see <http://www.gnu.org/licenses/>.

      GRUB_TERMINAL_INPUT="console serial"
      GRUB_TERMINAL_OUTPUT="console serial"
      GRUB_SERIAL_COMMAND="serial"


      transform="s,x,x,"

    2. [10_linuxの編集]
      赤字の部分を追加してください。
      # along with GRUB. If not, see <http://www.gnu.org/licenses/>.

      GRUB_CMDLINE_LINUX="console=ttyS0,115200n8"

      prefix="/usr"

      なお、今と同様にディスプレイにも表示した場合は、下記のように"console=tty0"を"ttyS0"と併記します。
      GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
    3. ["/boot/grub/grub.cfg"への反映]
      "grub-mkconfig"を使用して、"grub.cfg"を生成します。
      foo@ubuntu01:~$ sudo grub-mkconfig -o /boot/grub/grub.cfg

    4. 動作確認
      シリアル・コンソールに接続したまま、OSのリブートを行います。
      OSの選択画面が表示され、ブート状況がコンソールに表示されれば、設定は成功です。

[おまけ]
virt-managerでもシリアル・コンソールに接続できます。

以上でシリアルコンソールの設定方法の説明はおしまいです。

参考文献
"SerialConsoleHowto", help.ubuntu.com
https://help.ubuntu.com/community/SerialConsoleHowto

木曜日, 4月 26, 2012

KVMの管理 第10回(仮想ディスクの作成)

[概要]
仮想ディスクの作成方法について説明します。

[詳細]
ストレージ・プールの管理画面から、仮想ディスクを作成する方法について、説明を行います。
なお、仮想ディスクを作成可能なストレージ・プールのタイプは、ディレクトリー、NFS共有されたディレクトリー、Pre-Formatted Block Devicceです。これ以外のタイプでは仮想ディスクを作成することができません。それでは、作成手順について説明を始めます。

  1. ストレージ・プールの管理画面にある「新規ボリューム」を押し、作成画面を表示します。
  2. 必要項目を入力します。
    • 〔名前〕
      任意のファイル名を指定します。拡張子はimgで作成されます。
    • 〔フォーマット〕
      仮想ディスクのフォーマットを選択します。
      • "raw" : 仮想マシンに依存しない形式
      • "cow" : User Mode Linuxで使用されるフォーマット
      • "qcow2" : QEMUのイメージ・フォーマット
      • "qcow" : 旧バージョンのQEMUイメージ・フォーマット
      • "vmdk" : VMwareの仮想ディスクのディスフォーマット
      • "vpc" : Virtual PCのディスクフォーマット
    • 〔最大容量〕
      ファイルの(仮想OSから見えるサイズ)

    • 〔割り当て〕
      仮想ディスクの作成時に割り当てる容量を指定します。なお、qcow2以外のフォーマットでは対応していません。

  3. 「完了」を押すとストレージ・プールが作成されます。
  4. フォーマットを使い分けは、次のようにするよいでしょう。






    • 仮想ディスクの暗号化を行いたい。
    • ⇒ qemu2

    • ホストのストーレジを節約したい。
    • ⇒ qemu2

    • VMwareと共有したい。
    • ⇒ vmdk

    • Virtual PCと共有したい。
    • ⇒ vpc

    • それ以外。
    • ⇒ raw
    フォーマットについては、上手に使い分けてください。

以上で仮想ディスクの作成方法についての説明を終わります。

土曜日, 4月 21, 2012

KVMの管理 第9回(ストレージ・プールの管理)

[概要]
仮想ディスクの格納場所であるストレージ・プールの管理について説明します。

[詳細]
今回は、仮想ディスクの格納場所であるストレージ・プールの管理について説明します。
ストレージ・プールに使用できるストレージは次の種類があります。 「ディレクトリー」、「物理ディスク」、「Pre-Formatted Block Devicce」、「iSCIターゲット」、「LVMボリュームグループ」、「Multipath Devicec Enumerator」、「NFS共有されたディレクトリー」、「SCSI Host Adapter」。これらについての詳細は、ストレージ・プールの作成の項で説明します。

["ホスト詳細"ウィンドの起動]
仮想マシンマネージャーで、変更したいホストを選択します。
メニューから"編集" → "ホスト詳細"を選択する。もしくは、右クリックした後に"Details"を選択します。

[ストレージの表示]
"ホスト詳細"の画面で"ストレージ"のタブを選択して、ストレージの管理画面を表示します。既存のストレージ・プールを選択すると、そのプールの情報が表示されます。 virt-manager (実際はlibvrit)では、defaultというストレージ・プールがインストール時に作成されいてます。

[ストレージ・プールの起動・停止]
ストレージ・プールの起動、停止は、操作するストレージ・プールを選択した後、ウィンドの左下にあるそれぞれ左から2番目と3番目のボタンを押すと直ちに実行されます。

[ストレージ・プールの削除]
ストレージ・プール停止した後に、右端にある削除ボタンを押すと確認のダイアログがポップアップするので、それに答えると削除が実行されます。

[ストレージ・プールの作成]
まず、一番左のボタン("+")を押しウィザードが起動します。
ストレージ・プールの種類によって作成手順が異なります次の項からそれぞれ分けて説明します。

〔ディレクトリー〕
ホストにあるディレクトリーをストレージ・プールとして使用します。 なお、libvrtのインストール時に作成されるストレージ・プール"default"は、このタイプです。

  • ステップ 1/2
    • 名前 : 一意であるストレージ・プール名を指定します。
    • 種類 : 「dir:ファイルシステムディレクトリー」を選択します。
  • ステップ 2/2
    • ターゲットパス:ストレージ・プールとするホスト上のディレクトリを指定します。
    • 「完了」を押すとストレージ・プールが作成されます。
  • このストレージ・プールでは、virt-managerから仮想ディスクの作成・削除ができます。作成方法はこちら

〔物理ディスク〕 ホストに接続された物理ディスクをストレージ・プールとして使用します。

  • ステップ 1/2
    • 名前 : 一意であるストレージ・プール名を指定します。
    • 種類 : 「disk:物理ディスクデバイス」を選択します。
  • ステップ 2/2
    • ターゲットパス : "/dev/"を変更しないでください。
    • フォーマット : パーティション・テーブルのフォーマットを選択します。
    • ソースパス : ストレージ・プールとして使用するデバイスファイルを指定します。(/etc/sda, /etc/sdbなど)
    • プールを構築 : ストレージ・プールの作成と同時に、パーティションテーブルのフォーマットを行います。
    • 「完了」を押すとストレージ・プールが作成されます。
  • このストレージ・プールでは、virt-managerからパーティションを作成することができます。
  • ※注意

    • パーティション名は自動的に付加されます。つまり、任意の名前を与えても無視されます。
    • 拡張パーティションを作成することはできません。

〔Pre-Formatted Block Devicce〕 フォーマット済みのパーティションをストレージ・プールとして使用します。

  • ステップ 1/2
    • 名前 : 一意であるストレージ・プール名を指定します。
    • 種類 : 「fs:Pre-Formatted Block Devicce」を選択します。
  • ステップ 2/2
    • ターゲットパス : マウントポイントとなるディレクトリを指定します。
    • フォーマット : マウントするデバイスのフォーマットタイプを選択します。"auto"に設定すると自動判別します。
    • ソースパス : ストレージ・プールとして使用するデバイスファイルを指定します。(/etc/sda1, /etc/sdb2など)
    • 「完了」を押すとストレージ・プールが作成されます。
  • このストレージ・プールではvirt-managerから仮想ディスクの作成・削除ができます。作成方法はこちら

〔iSCSIターゲット〕 iSCSIで共有されているをストレージ・プールとして使用します。

  • ステップ 1/2
    • 名前:一意であるストレージ・プール名を指定します。
    • 種類:「iscsi:iSCSIターゲット」を選択します。
  • ステップ 2/2
    • ターゲットパス:ボリューム・グループのディレクトリを指定します。(/dev/Group01, /dev/VolGroup00など)
    • ホスト名 : 接続先のホストを指定します。ホスト名、IPアドレスのどちらでも構いません。
    • ソースパス : (foo.bar.com-disk01:tgtdなど)
    • IQN : ターゲットにIQNが設定されいる設定されている場合、IQNを指定します。
    • 「完了」を押すとストレージ・プールが作成されます。
  • ボリュームの作成・削除をすることはできません。

〔LVMボリュームグループ〕 LVMボリュームグループをストレージ・プールとして使用します。

  • ステップ 1/2
    • 名前:一意であるストレージ・プール名を指定します。
    • 種類:「logical:LVMボリュームグループ」を選択します。
  • ステップ 2/2
    • ターゲットパス:ボリューム・グループのディレクトリを指定します。(/dev/Group01, /dev/VolGroup00など)
    • ソースパス : ボリューム・グループを構成する物理デバイスを指定します。(/etc/sda1, /etc/sdbなど)
    • ※注意
      • 物理デバイスは1つしか指定できません。
      • 「プールを構築」をチェックしたときのみ有効になります。
    • プールを構築 : ストレージ・プールの作成と同時に、ボリューム・グループの作成を行います。
    • 「完了」を押すとストレージ・プールが作成されます。
  • このストレージ・プールでは、virt-managerからLVMボリュームを作成・削除することができます。
    これはlvmコマンドでボリュームを作成する場合と同じことです。

  • 「名前」と「最大容量」を入力して、「完了」を押すとボリュームが作成されます。

  • ※参考:当然ですがlvsコマンドでボリュームが作成されたとが確認できます。

〔Multipath Device Enumerator〕

  • ステップ 1/2
    • 名前:一意であるストレージ・プール名を指定します。
    • 種類:「mpath:Multipath Device Enumerator」を選択します。
  • ステップ 2/2
    • ターゲットパス:"/dev/mappar"で固定です。変更しないでください。
    • 「完了」を押すとストレージ・プールが作成されます。
  • ボリュームの作成・削除をすることはできません。

〔NFS共有されたディレクトリー〕

  • ステップ 1/2
    • 名前:一意であるストレージ・プール名を指定します。
    • 種類:「netfs:NFS共有されたディレクトリー」を選択します。
  • ステップ 2/2
    • ターゲットパス : マウントポイントとなるディレクトリを指定します。
    • フォーマット : ネットワーク・ファイルシステムのタイプを選択します。"auto"に設定すると自動判別します。
    • ホスト名 : 接続先のホストを指定します。ホスト名、IPアドレスのどちらでも構いません。
    • ソースパス : マウントするリモート先のディレクトリを指定します。(/var/exportsなど)
    • 「完了」を押すとストレージ・プールが作成されます。
  • このストレージ・プールではvirt-managerから仮想ディスクの作成・削除ができます。作成方法はこちら。
    なお、マウントポイントの下に存在するファイル、ディレクトリに対して、全てのユーザに読込権を与える必要があります。

〔SCSI Host Adapter〕 ホストに接続されているSCSIアダプタを、ストレージ・プールとして使用します。 接続されているボリュームとしてディスクがリストされます。

  • ステップ 1/2
    • 名前:一意であるストレージ・プール名を指定します。
    • 種類:「scsi:SCSI Host Adapter」を選択します。
  • ステップ 2/2
    • ターゲットパス:"/dev/disk/by-path"を変更しないでください。
    • ソースパス : 使用するSCSIアダプタをリストから選択します。
    • 「完了」を押すとストレージ・プールが作成されます。
  • ボリュームの作成・削除をすることはできません。

以上でストレージ・プールの管理についての説明を終わります。