PT3 ドライバか recpt1 が正常に動作していないようだ。
手順の問題なのか、仮想環境の問題なのか、今のところ調べ切れていない。
いつかまた、再実験のために、この記録を公開しておく。
我が屍を超えてゆけ!!!
環境
MB:GIGABYTE GA-990FXA-UD5(IOMMU 対応)CPU:AMD Phenom II X4 955 Black Edition
MEM:8G
HDD:Seagate 2TB X 1(システム用)、2TB X 4(KVM ストレージプール用)
OS:Ubuntu 13.10 Server amd64
ICカードリーダー:PLEX PX-ICCR01
アースソフト PT3 Rev.A
ホストOSをインストール
Ubuntu を通常通りインストールシステム用HDDに 20GB EXT4 のルートパーティションと、8GB の SWAP パーティションを作成。
sudo apt-get install aptitude
sudo aptitude update
sudo aptitude full-upgrade
必要なものをインストール
sudo aptitude install ssh lvm2 mdadm
作業用のパーティション作成
システム用 HDD の残り領域に、作業用パーティションを作成。
パーティションの UUID を調べる
blkid
/etc/fstab に追記
5番目の値は、dump 対象の設定。しないように 0 とする。
UUID=上記で調べたUUID /mnt/work ext4 rw 0 2
マウント先を作成
mkdir /mnt/work
バックアップとリストアの訓練
リカバリー用起動メディア には、Ubuntu インストールメディアを使用する。バックアップ
バックアップには、dump を使おうとしたが、インストーラで起動したときに、デフォルトで入っていないので断念。シングルモードで起動
再起動して、BIOS 画面から ubuntu が起動する前に Shift キーを押下する。
Grab メニューが表示されたら、通常起動する項目を選択して e キーを押下
先頭が linux ~ となっている行の末尾に single または、 1 を追記して Ctrl + X を押下し起動する。
cd /mnt/work
tar czvplf 20131025.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/sys /
tar の最後の引数で、/ のように絶対パス指定だが、アーカイブされたファイルの中身は、先頭の / が省かれて、相対パスになっている。
リストア
インストーラから起動。言語選択で「日本語」を選択。
メニューから「壊れたシステムを修復」を選択。
選択された言語でインストールを続けますか?はい
場所:日本
キーボードの設定:日本語
キーボードのレイアウト:日本語
ホスト名には、適宜名前を設定
時間の設定で「Asia/Tokyo」でいいか?と英語で聞かれるので、はい。
システムパーティションをフォーマットしたいので、ルートファイルシステムとして使うデバイスを聞かれたら、「ルートファイルシステムとして使用しない」を選択。
「インストーラ環境内でシェルを実行」を選択 「続ける」を選択。
parted や mkfs.ext4 で、システム用パーティションを作成し、フォーマット。
フォーマットすると UUID が変わるので注意。mkfs の -U オプションで、UUIDを指定することも可能。
mkfs.ext4 /dev/sda1
exit
「異なるルートファイルシステムを選択」を選択
「/dev/sda1」を選択
「インストーラ環境内でシェルを実行」を選択 「続ける」を選択
/dev/sda1 が /target にマウントされた状態でシェルが起動する。
バックアップから書き戻す
前述のバックアップファイル保存先をマウント
mount /dev/sda3 /mnt
cd /mnt
tar xzvpf 20131025.tar.gz -C /target
バックアップしていないディレクトリを作成
mkdir /target/proc /target/lost+found /target/media /target/mnt /target/sys
特に /mnt のサブディレクトリの作り忘れに注意。 起動時にマウントは失敗するが、スキップすれば起動できる。
exit でメニューに戻る。
「/dev/sda1 内でシェルを実行」を選択。
bash
blkid /dev/sda1
/etc/fstab の UUID を確認し、異なっていれば修正。
swap用パーティションUUID が変わった場合、以下のファイルを変更。
/etc/initramfs-tools/conf.d/resume
update-grub2
update-initramfs -u -k all
exit
exit
メニューに戻るので、リブートを選択。
これで、リストアが完了。
KVM 環境構築
ここからは、ssh 接続で作業を行った。必要なパッケージをインストール
sudo aptitude install kvm bridge-utils virt-manager qemu-system virt-viewer qemu-kvm-spice spice-client spice-client-gtk python-spice-client-gtk guestfish libguestfs-toolsqemu-kvm-spice と spice-client は、SPICE (VNCのようなもの)で接続ために必要。
guestfish と libguestfs-tools は、ゲストのストレージをあれこれ操作するために必要。
guestfish コマンドとか virt-rescue コマンドなどで、バックアップや、レスキューができる。
利用ユーザーの補助グループに libvirtd を追加
sudo usermod $(whoami) -a -G libvirtdcat /etc/group | grep libvirtd
再起動する。
再起動をしないと、virt-manager 起動時に「libvirt に接続できませんでした」と怒られる。
仮想ブリッジを定義
sudo vi /etc/network/interfaces# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #NetworkManager#auto eth0 #NetworkManager#iface eth0 inet dhcp # ここから追加 auto eth0 iface eth0 inet manual up /sbin/ifconfig eth0 promisc auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_maxwait 1
ネットワーク設定を有効化
sudo /etc/init.d/networking restart確認
ifconfig -a br0 Link encap:イーサネット ハードウェアアドレス 00:24:8c:52:c1:65 inetアドレス:192.168.1.102 ブロードキャスト:192.168.1.255 マスク:255.255.255.0 inet6アドレス: fe80::224:8cff:fe52:c165/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:58 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:89 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:5686 (5.6 KB) TXバイト:15970 (15.9 KB) eth0 Link encap:イーサネット ハードウェアアドレス 00:24:8c:52:c1:65 UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 メトリック:1 RXパケット:29029 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:8515 エラー:0 損失:0 オーバラン:0 キャリア:3 衝突(Collisions):0 TXキュー長:1000 RXバイト:22073164 (22.0 MB) TXバイト:762722 (762.7 KB) lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 inet6アドレス: ::1/128 範囲:ホスト UP LOOPBACK RUNNING MTU:16436 メトリック:1 RXパケット:190 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:190 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:22165 (22.1 KB) TXバイト:22165 (22.1 KB) virbr0 Link encap:イーサネット ハードウェアアドレス d2:c4:a1:7e:c2:82 inetアドレス:192.168.122.1 ブロードキャスト:192.168.122.255 マスク:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 メトリック:1 RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:0 (0.0 B) TXバイト:0 (0.0 B)
不要なネットワーク設定を無効化
virbr0 は、KVM をインストールすると自動的に作成される。外部から接続するような場合には、上記で作成した仮想ブリッジの方が便利なようなので、virbr0 を無効化しておく。
定義の確認
sudo virsh net-list
sudo virsh net-dumpxml default
停止
sudo virsh net-destroy default
自動起動を停止
sudo virsh net-autostart default --disable
確認
sudo virsh net-list --all
ゲストOS 格納用ストレージプール作成
ストレージプールは、LVM 上に確保する。LVM に利用するストレージは、RAID10 構成とする。
4台すべてのKVM ストレージプール用 HDD をパーティション分けする。
今回は、来るべき 2TB 超え HDD を利用することを想定して、MBR(Master Boot Record)ではなく、GPT(GUID Partition Table)で、パーティションを作成することにした。
したがって、fdisk や cfdisk などでは、GPT が扱えないので、parted というコマンドを使うことになる。
コマンドの詳細を調べておく。
・パーティションテーブル種別
sudo parted /dev/sdb help mktable
mklabel,mktable ラベルの種類 新しいラベル(パーティションテーブル)を作る
ラベルの種類は次のうちから選びます: aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop
gpt を設定すればよいようだ。
・パーティション作成
sudo parted /dev/sdb help mkpart
mkpart パーティションの種類 [ファイルシステムの種類] 開始 終了
パーティションを作る
パーティションの種類は次のうちのどれかとなります: プライマリ、論理、拡張
ファイルシステムの種類は次のうちから選びます: zfs, btrfs, ext4, ext3, ext2, fat32, fat16, hfsx, hfs+, hfs, jfs, swsusp,
linux-swap(v1), linux-swap(v0), ntfs, reiserfs, freebsd-ufs, hp-ufs, sun-ufs, xfs, apfs2, apfs1, asfs, amufs5,
amufs4, amufs3, amufs2, amufs1, amufs0, amufs, affs7, affs6, affs5, affs4, affs3, affs2, affs1, affs0,
linux-swap, linux-swap(new), linux-swap(old)
START と END は、ディスク上の位置を 4G や 10% などで表わします。負の値はディスクの終わりからの値になります。例えば、-1s は、最後のセクタを指します。
mkpart はパーティションだけ作り、新しいファイルシステムは作りません。ファイルシステムの種類を指定すると、正しいIDが設定されます。
GPT の場合、パーティションの種類に指定したものは、name になるようなので、分かりやすいものをつければよいらしい。 RAID の場合は、ファイルシステムの種類を指定しなくてもいいようだ。
・フラグ設定
sudo parted /dev/sdb help set
set NUMBER フラグ 状態
ファイルシステムのフラグと状態を設定する
NUMBER は Linux カーネルによってパーティション番号として使われます。MS-DOS ディスクラベルでは、基本パーティション番号は 1 から 4 までで、論理パーティションは 5 以降となります。 フラグは次のうちから選びます: boot, root, swap, hidden, raid, lvm, lba, hp-service, palo, prep, msftres, bios_grub, atvrecv, diag 状態は on か off のどちらか
RAID とか LVM は、フラグとして設定するようだ。
パーティションを作成
sudo parted /dev/sdb(parted) unit MB
(parted) mktable gpt
(parted) mkpart disk0 1 -1
(parted) set 1 raid on
(parted) quit
mkpart で、開始を 1 にしているのは、
同じように全ドライブにパーティションを作成
RAID10 作成
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]mdadm: /dev/sdb1 appears to contain an ext2fs file system
size=975872K mtime=Thu Oct 24 11:51:29 2013
mdadm: /dev/sdc1 appears to contain an ext2fs file system
size=975872K mtime=Thu Jan 1 09:00:00 1970
mdadm: /dev/sdd1 appears to contain an ext2fs file system
size=975872K mtime=Thu Jan 1 09:00:00 1970
mdadm: /dev/sde1 appears to contain an ext2fs file system
size=975872K mtime=Thu Jan 1 09:00:00 1970
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
RAID の状態を確認
cat /proc/mdstat
Physical Volume 作成
sudo pvcreate /dev/md0Physical volume "/dev/md0" successfully created
Volume Group 作成
sudo vgcreate vg0 /dev/md0Volume group "vg0" successfully created
Logical Volume は、KVM ゲスト作成時に自動的に作成されるので、ここでは作成しなくてよい。
KVM ゲスト用ストレージプール作成
virsh pool-define-as pool logical - - - vg0 /dev/vg0
プール pool が定義されました
virsh pool-autostart pool
プール pool が自動起動としてマークされました
virsh pool-start pool
プール pool が起動されました
virsh pool-list --all
名前 状態 自動起動
-----------------------------------------
pool 動作中 はい (yes)
ゲストOS インストール
ゲストOSのインストール方法は色々あるが、リモート接続で行うことにした。リモート接続でのインストールは、グラフィカルモードとテキストモードのいずれでも可能。
グラフィカルモードのインストールには、SPICE を利用する。
ゲスト名:「yebisu」
メモリ:「2048MB」
CPU:「4」
ディスク:「10GB」
インストーライメージファイル:「/mnt/work/ubuntu-13.10-server-amd64.iso」
「--os-variant」に指定する値は、Ubuntu のバージョンによっても変わるので注意。指定できる値は、「man virt-install」で該当項目を参照すること。
テキストモードでのインストール
SSH で接続し、テキストモードでインストールする。sudo virt-install --connect qemu:///system \
--name=yebisu \
--connect=qemu:///system \
--ram=2048 \
--vcpu=4 \
--os-type=linux \
--hvm \
--virt-type=kvm \
--os-variant=ubuntusaucy \
--disk pool=pool,bus=virtio,size=10,cache=writethrough \
--location=/mnt/work/ubuntu-13.10-server-amd64.iso \
--network bridge=br0 \
--graphics none,keymap=ja \
--extra-args='console=tty0 console=ttyS0,115200n8'
グラフィカルモードでのインストール
【注意】2014/1/6 時点の Ubuntu 13.10 では、以下のようなエラーが出て失敗する。因みに、Ubuntu 12.04 の時は、発生していなかった。
ERROR unsupported configuration: Auto allocation of spice TLS port requested but spice TLS is disabled in qemu.conf
どうやら、TLS ポート指定をしない場合でも、自動ポートモードで起動してしまうバグなのかも・・・
はじめに PuTTY でホストに繋げ、以下のコマンドを入力。
ちなみに、video オプションには、cirrus を指定する。インストール時に、qxl を指定すると、ゲストの画面が表示できなかった。インストール後に、qxl に切り替えることが可能。
sudo virt-install --connect qemu:///system \
--name=yebisu \
--connect=qemu:///system \
--ram=2048 \
--vcpu=4 \
--os-type=linux \
--hvm \
--virt-type=kvm \
--os-variant=ubuntusaucy \
--disk pool=pool,bus=virtio,size=10,cache=writethrough \
--location=/mnt/work/ubuntu-13.10-server-amd64.iso \
--network bridge=br0 \
--graphics spice,port=5930,listen=0.0.0.0,keymap=ja \
--channel spicevmc \
--video cirrus \
--noautoconsole
sh: 0: getcwd() failed: No such file or directory
インストールの開始中...
ファイル version.info を読出中... | 116 B 00:00 ...
ファイル linux を読出中... | 10 MB 00:00 ...
ファイル initrd.gz を読出中... | 37 MB 00:00 ...
割り当て中 'oracle.img' | 10 GB 00:00
sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory
ドメインを作成中... | 0 B 00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
すぐにコマンドが終了する。ただし、インストールは裏で続行されている。
次に、virt-viewer を起動して、「spice://ホストのIP:5930」に接続する。
接続先の IP はホストを指定することに注意。
あとは、通常のグラフィカルインストールと同じ。
インストール完了後、通常はリブートされるはずだが、なぜか停止してしまう。
ゲストを起動して、virt-viewer を再接続する。
sudo virsh list --all
sudo virsh start yebisu
インストール途中では、以下の選択をした。
パーティションは、LVM などを利用しない。
追加のインストール項目は以下のものを選択。
OpenSSH server
Samba file server
必要に応じて、シリアルコンソールを使用できるように設定
ゲストで以下を設定
$ sudo vi /etc/init/ttyS0.conf
# ttyS0 -getty
#
# This service maintains a getty on ttyS0 from the point the system is
# stared until it is shut down again.
start on stopped rc or RUNLEVEL=[2345]
stop on runlevel[!2345]
respawn
exec /sbin/getty -8 115200 ttyS0
保存する。
接続できるか確認しておく。
sudo start ttyS0
ttyS0 start/running, process 2175
サービスが起動したら、ホスト側から接続してみる。
virsh console yebisu
ドメイン test に接続しました
エスケープ文字は ^] です
Enter キーを押す。
IDとパスワードを入力し、ログインできることを確認したら。 Ctrl + ] を押して切断。
再びゲストで作業
以下のファイルを修正。
Grub メニューを表示するようにする。
sudo vi /etc/default/grub
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT=-1
ファイル変更後、Grub を更新
sudo update-grub
qxl プロトコルの有効化
SPICE の接続プロトコルを cirrus から qxl に変更する。ただし、BIOS、起動ログや Grub メニューなどが表示されなくなるので注意。
virt-manager で設定すれば、お手軽簡単だが、virsh で変更する方法も記載しておく。
virsh edit yebisu
video の記述を入れ替える。
<video> <model type='qxl' vram='65536' heads='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </video>ゲストのバックアップ
ゲストをシャットダウン
ゲスト上でシャットダウンするか、ホスト上で、virsh shutdown yebisu とする。
状態を確認
virsh list --all
Id 名前 状態
----------------------------------
- yebisu シャットオフ
まずは、LogicalVolume をコピーするだけの簡単バックアップ方法
sudo virsh vol-clone yebisu.img yebisu-org.img --pool pool
リストアの時は、lvrename と virsh vol-clone などで、書き戻す。
次に、ダウンタイムを最小にする方法
ゲストの論理ボリュームのスナップショットを作成
指定したサイズは、オリジナルや、スナップ LV の方に変更があった場合に、その差分を書き込む領域で、この領域を使い切ると、オリジナルおよびスナップショットに書き込み不能になる。
したがって、スナップショットを削除するまでに発生するであろう、差分量以上を確保する必要がある。
sudo lvcreate --snapshot --size 1g --name yebisu.img_snap /dev/vg0/yebisu.img
sudo lvscan
ACTIVE Original '/dev/vg0/yebisu.img' [10.00 GiB] inherit
ACTIVE Snapshot '/dev/vg0/yebisu.img_snap' [1.00 GiB] inherit
スナップショットを作成した後は、ゲストを起動できる。
ただし、スナップショットのサイズ以上の変更を行うと、書き込み不能となるので注意。
バックアップ完了後、速やかにスナップショットを削除する必要がある。
スナップショットからゲストのバックアップを取得
tar で取る方法
sudo guestfish --ro -a /dev/vg0/yebisu.img.snap -i tgz-out / yebisu.bak.tar.gz
dd で取る方法
sudo dd if=/dev/vg0/yebisu.img.snap | xz -z - > yebisu.bak.dd.xz
スナップショットを削除
sudo lvremove /dev/vg0/yebisu.img.snap
これで、バックアップ完了。
録画ファイル保存用ストレージをゲストに追加
Logical Volume 作成
前述のストレージプール用に作成した Volume Group に作成する。容量は 3TB とする。
sudo lvcreate --name record-video --size 3t vg0
sudo mkfs.ext4 /dev/vg0/record-video
ゲストに設定
ゲストを停止
virsh shutdown record
ディスクを追加
virsh attach-disk record /dev/vg0/record-video vdb --persistent --cache writethrough
マウントの設定は、epgrec の設定の時に行う。
その他の設定方法など
ゲストのストレージサイズを拡張
パーティションを確認
virt-list-partitions -lh /dev/vg0/yebisu.img
/dev/sda1 ext4 8.0G
/dev/sda2 unknown 1K
/dev/sda5 swap 2.0G
/dev/sda1 ext4 8.0G
/dev/sda2 unknown 1K
/dev/sda5 swap 2.0G
sudo lvrename vg0 yebisu.img yebisu.1.img
LogicalVolume を作成
sudo lvcreate --size 30g --name oracle.img vg0
sda1 を拡張して、新規領域にコピー
オプションに --dryrun をつけると、実際には処理せずに、お試し実行できる。その他にも、--resize で、拡張サイズを直接指定できる。
virt-resize /dev/vg0/oracle.1.img /dev/vg0/oracle.img --expand /dev/sda1
デバイスのパススルー設定
参照1:http://yukkuri-maeni.blogspot.jp/2011/07/amdkvm-pci-pt2.html参照2:http://d.hatena.ne.jp/m-bird/touch/20110722/1311366299
参照3:http://docs.fedoraproject.org/ja-JP/Fedora/13/html/Virtualization_Guide/chap-Virtualization-PCI_passthrough.html
参照4:https://access.redhat.com/site/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Virtualization_Host_Configuration_and_Guest_Installation_Guide/sect-Virtualization_Host_Configuration_and_Guest_Installation_Guide-SR_IOV-How_SR_IOV_Libvirt_Works.html
AMD-Vi の状態を確認
dmesg | grep AMD-Vi[ 1.037789] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[ 1.037790] AMD-Vi: Interrupt remapping enabled
[ 1.047710] AMD-Vi: Lazy IO/TLB flushing enabled
環境によって、設定方法にだいぶ違いがあるようだ。
PT3 デバイスを確認
lspci -nn04:00.0 Multimedia controller [0480]: Altera Corporation Device [1172:4c15] (rev 01)
lspci -tv
-[0000:00]-+-00.0 Advanced Micro Devices, Inc. [AMD/ATI] RD890 PCI to PCI bridge+-00.2 Advanced Micro Devices, Inc. [AMD/ATI] RD990 I/O Memory Man ・・・
・・・
+-0a.0-[03]----00.0 Marvell Technology Group Ltd. 88SE9172 SATA
+-0b.0-[04]----00.0 Altera Corporation Device 4c15
+-0c.0-[05]----00.0 Toshiba America Device 01ba
+-11.0 Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA
・・・
IC カードリーダーを確認
lsusbBus 005 Device 002: ID 058f:9540 Alcor Micro Corp.
ゲストにデバイスを追加
virt-manager で上記2つのデバイスを追加。「仮想マシンを開く」→「仮想マシンの情報を表示」→「ハードウェアを追加」ボタンを押下。
「PCI Host Device」からPT3デバイスを選択して完了。
同様に「USB Host Device」から IC カードリーダーを選択して完了。
ホストからの PT3 デバイスを開放
モジュールの確認
lsmod | grep stubpci_stub 12622 0
上記で何も表示されなかった場合
sudo modprobe pci_stub
PT3 デバイスの開放
pci_stub の仕組みを理解していないのでよくわからないが、このようにする。この作業は、ホストを再起動した場合に、毎回行う必要がある。
sudo bash -c "echo \"1172 4c15\" > /sys/bus/pci/drivers/pci-stub/new_id"
sudo bash -c "echo \"0000:00:0b.0\" > /sys/bus/pci/devices/0000:00:0b.0/driver/unbind"
色々なサイトで以下のコマンドも実行するような記述があるが、エラーになる。
指定の仕方が悪いのか・・・
いずれにしても、このコマンドを実行しなくても今のところ大丈夫のようだ。
sudo bash -c "echo \"0000:00:0b.0\" > /sys/bus/pci/drivers/pci-stub/bind"
bash: 0 行: echo: 書き込みエラー: そのようなデバイスはありません
デバイスの開放を行わないと、以下のようなエラーが発生する。
仮想マシンの開始中にエラーが発生しました: internal error: Invalid device 0000:04:00.0 driver file /sys/bus/pci/devices/0000:04:00.0/driver is not a symlink
Traceback (most recent call last):
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 96, in cb_wrapper
callback(asyncjob, *args, **kwargs)
File "/usr/share/virt-manager/virtManager/asyncjob.py", line 117, in tmpcb
callback(*args, **kwargs)
File "/usr/share/virt-manager/virtManager/domain.py", line 1162, in startup
self._backend.create()
File "/usr/lib/python2.7/dist-packages/libvirt.py", line 698, in create
if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: internal error: Invalid device 0000:04:00.0 driver file /sys/bus/pci/devices/0000:04:00.0/driver is not a symlink
ゲストの起動して、デバイスの確認
lspci00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
00:04.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 01)
00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device
00:06.0 Unclassified device [00ff]: Red Hat, Inc Virtio memory balloon
00:07.0 Communication controller: Red Hat, Inc Virtio console
00:08.0 Multimedia controller: Altera Corporation Device 4c15 (rev 01)
lsusb
Bus 001 Device 002: ID 058f:9540 Alcor Micro Corp.
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
ゲストに開発関連パッケージをインストール
sudo aptitude install unzip git subversion automake build-essential
sudo aptitude install omake autopoint libtool libboost-all-dev pkg-config
sudo aptitude install binutils-gold checkinstall yasm nasm paco ccache
リンカが gold になるように設定
もう少し言うと、通常のリンカと簡単に切り替え可能にし、gold の優先度を高く設定して、自動的に gold が有効になる、ということ。
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.bfd 1
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 2
update-alternatives --list ld
カードリーダーの設定
パッケージをインストール
sudo aptitude install pcscd libpcsclite-dev pcsc-tools
カードリーダーの動作チェック
pcsc_scan
PT3 ドライバのインストール
ドライバをビルド
git clone http://github.com/m-tsudo/pt3.gitcd pt3
make clean
make
sudo paco -au
sudo paco -lp pt3-driver "make install"
ゲストを再起動
sudo rebootドライバの動作確認
dmesg | grep pt3[ 3.636319] pt3_drv: module verification failed: signature and/or required key missing - tainting kernel
[ 3.636724] PT3: pt3_drv 0.0.1rev99 2013-08-05
デバイスファイルが存在することを確認
ls -la /dev/pt3*crw-rw-rw- 1 root video 250, 0 1月 6 23:39 /dev/pt3video0
crw-rw-rw- 1 root video 250, 1 1月 6 23:39 /dev/pt3video1
crw-rw-rw- 1 root video 250, 2 1月 6 23:39 /dev/pt3video2
crw-rw-rw- 1 root video 250, 3 1月 6 23:39 /dev/pt3video3
arib25 のインストール
wget http://hg.honeyplanet.jp/pt1/archive/c44e16dbb0e2.zip
unzip c44e16dbb0e2.zipcd pt1-c44e16dbb0e2/arib25
make clean
make
sudo paco -lp arib25 "make install"
make
sudo paco -lp arib25 "make install"
recpt1 のインストール
git clone http://github.com/stz2012/recpt1.git stz_recpt1cd stz_recpt1/recpt1
./autogen.sh
./configure --enable-b25
make clean
make
sudo paco -lp recpt1 "make install"
動作確認
epgdump のインストール
git clone http://github.com/stz2012/epgdump.git stz_epgdumpcd stz_epgdump
make clean
make
sudo paco -lp epgdump "make install"
epgrec のインストール
関連パッケージをインストール
sudo aptitude install apache2 php5 mysql-server mysql-client php5-mysql libav-toolsat コマンドを epgrec から利用できるように設定
sudo vi /etc/at.deny
以下の行を削除
www-data
MySQL の設定
文字コードを UTF-8 に設定。
以前アップデートした時に、文字化けして痛い目を見たので、設定しておくことにする。
sudo vi /etc/mysql/my.cnf
[client] および [mysqld] に以下の設定を追加する。[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
MySQL の再起動
sudo service mysql restart設定の確認
mysql -u root -p
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
データベースおよびユーザ作成
mysql -u root -pmysql> create database epgrec;
mysql> grant all on epgrec.* to epgrec@localhost identified by 'パスワードをここに記述';
mysql> flush privileges;
epgrec をダウンロード
cd /var/www
sudo git clone http://github.com/stz2012/epgrec.git epgrec
録画ファイル保存用ストレージのマウント設定
マウントディレクトリを設定
cd /var/www/epgrec
sudo rm video/*
UUID を調べる
sudo blkid/dev/vdb: UUID="9e7ef31a-a571-44be-94c8-fa8e5b124f2e" TYPE="ext4"
fstab に追加
sudo vi /etc/fstabUUID=9e7ef31a-a571-44be-94c8-fa8e5b124f2e /var/www/epgrec/video ext4 defaults 0 2
ゲストを再起動
マウントされたことを確認
video ディレクトリ内のファイルを元に戻す
cd /var/www/epgrecsudo git checkout .
epgrec の設定
cd /var/www
sudo chown -R www-data:www-data ./epgrec
cd epgrec
sudo cp do-record.sh.pt1 ./do-record.sh
sudo chown www-data:www-data do-record.sh
sudo chmod 755 do-record.sh
sudo chmod 777 cache settings templates_c thumbs video
sudo chmod 666 thumbs/index.html video/index.html
sudo cp config.php.sample config.php
sudo vi config.php
以下のように変更した。ただし、地域が変われば設定も変わる。
--- config.php.sample 2014-01-07 20:53:30.667557000 +0900
@@ -14,9 +14,10 @@
"GR24" => "24", // テレ朝
"GR23" => "23", // テレ東
// "GR20" => "20", // MX TV
-// "GR18" => "18", // テレ神
- "GR30" => "30", // 千葉
-// "GR32" => "32", // テレ玉
+ "GR20" => "16", // MX TV
+ "GR18" => "18", // テレ神
+// "GR30" => "30", // 千葉
+ "GR32" => "32", // テレ玉
"GR28" => "28", // 大学
);
定期的に番組表を取得するクーロンを設定
sudo cp cron.d/getepg /etc/cron.d
sudo vi /etc/php5/cli/php.ini
以下の行をコメントアウト
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,・・・・・
文字化けしている場合は、ブラウザの設定で、文字コードを UTF-8 に変更。
次の画面での設定
変更した箇所だけ列挙する。
MySQL接続ユーザー名:epgrec
MySQL接続パスワード:データベース作成時に設定したパスワード
使用データベース名:epgrec
インストールURL:http://サーバー名/epgrec
サムネールの使用:使用する
ffmpegのパス:/usr/bin/avconv
設定を保存するボタンを押下
次の画面の設定は、好みに応じて適宜行うこと。
さらに進めて、EPG の初回受信を行う。
画面の説明で、cron の設定について書いてあるが、前述の設定で既に設定済みとなっている。
ここで、問題発生。
どうやら、きちんと PT3 が動作していないようだ。
recpt1 で録画しても、サイズが 0 のファイルしかできない。
試しに、ホスト側で同様にやってみたら、通常のファイルができあがった。
とりあえず、ここで断念する。
無念・・・・
以下の行をコメントアウト
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,・・・・・
↓
;disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,・・・・・
以下の行をコメントインして値を設定
;date.timezone =
↓
date.timezone = "Asia/Tokyo"
ブラウザで接続
http://サーバー名/epgrec文字化けしている場合は、ブラウザの設定で、文字コードを UTF-8 に変更。
次の画面での設定
変更した箇所だけ列挙する。
MySQL接続ユーザー名:epgrec
MySQL接続パスワード:データベース作成時に設定したパスワード
使用データベース名:epgrec
インストールURL:http://サーバー名/epgrec
サムネールの使用:使用する
ffmpegのパス:/usr/bin/avconv
設定を保存するボタンを押下
次の画面の設定は、好みに応じて適宜行うこと。
さらに進めて、EPG の初回受信を行う。
画面の説明で、cron の設定について書いてあるが、前述の設定で既に設定済みとなっている。
ここで、問題発生。
どうやら、きちんと PT3 が動作していないようだ。
recpt1 で録画しても、サイズが 0 のファイルしかできない。
試しに、ホスト側で同様にやってみたら、通常のファイルができあがった。
とりあえず、ここで断念する。
無念・・・・