$ net usershare add www /var/cache/munin/www guest_ok=y
2014年3月20日木曜日
【備忘録】net usershare add でのマウント方法
net usershare add の備忘録。
$ net usershare add www /var/cache/munin/www guest_ok=y
$ net usershare add www /var/cache/munin/www guest_ok=y
2014年1月11日土曜日
【備忘録】Ubuntu 13.10 の KVM 仮想環境上に PT3 と epgrec による録画環境の構築実験(パススルー非使用版)
以前の 【備忘録】Ubuntu 13.10 の KVM 仮想環境上に PT3 と epgrec による録画環境の構築実験(失敗) にて、 AMD-Vi パススルーで PT3 を動かす野望は潰えたのだが、諦めない、ネヴァーギヴアップ!
というわけで、別の方法を模索してみた。
基本戦略としては、epgrec をゲストで動作させ、ICカードリーダー、PT3 および recpt1 をホストで動作させる。
ゲストから、ssh 接続経由で、ホストの 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 Server 13.10 amd64
ICカードリーダー:PLEX PX-ICCR01
アースソフト PT3 Rev.A
システム用 HDD 28GB の領域に LVM 構成で自動パーティショニングを行った。
以下のインストールソフトウェアを選択
Basic Ubuntu server
OpenSSH server
Samba file server
Virtual Machine host
Ubuntu desktop
アップデート
sudo aptitude update
sudo aptitude full-upgrade
必要なパッケージをインストール
sudo aptitude install ssh mdadm git build-essential libtool automake paco
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 --display ld
sudo lvcreate --name=work --extents=100%FREE phenom-vg
パーティションの UUID を調べる
sudo blkid
/dev/mapper/phenom--vg-work: UUID="5ed97836-21ce-49b5-a92a-66b3ca75a12a" TYPE="ext4"
sudo vi /etc/fstab
末尾に追加
UUID=5ed97836-21ce-49b5-a92a-66b3ca75a12a /mnt/work ext4 rw 0 2
マウント先を作成
sudo mkdir /mnt/work
sudo chmod 777 /mnt/work
カードリーダーの動作チェック
pcsc_scan
cd pt3
make clean
make
sudo paco -lp pt3-driver "make install"
因みに、以下のようにパラメータを渡すとデバッグレベルを指定できる
sudo modprobe pt3_drv debug=7
渡すことの出来るパラメータなどは、ソースの README を確認するか、以下のように調べる。
modinfo pt3_drv
filename: /lib/modules/3.11.0-15-generic/kernel/drivers/video/pt3_drv.ko
license: GPL
description: PCI Earthsoft PT3 driver
author: anyone
srcversion: 0A1D05542951609033BEAFC
alias: pci:v00001172d00004C15sv*sd*bc*sc*i*
depends:
vermagic: 3.11.0-15-generic SMP mod_unload modversions
parm: debug:debug level (0-7) (int)
parm: lnb:LNB level (0:OFF 1:+11V 2:+15V) (int)
[ 2954.181817] pt3_drv: module verification failed: signature and/or required key missing - tainting kernel
[ 2954.186493] PT3: pt3_drv 0.0.1rev99 2013-08-05
[ 2954.186592] pt3_drv 0000:04:00.0: enabling device (0000 -> 0002)
[ 2954.186736] PT3: Bus Mastering Enabled.
[ 2955.392717] PT3: device[0]= (null)
[ 2955.394590] PT3: card_number=0 channel=0
[ 2955.396751] PT3: card_number=0 channel=1
[ 2955.398812] PT3: card_number=0 channel=2
[ 2955.400922] PT3: card_number=0 channel=3
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
unzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make clean
make
sudo paco -lp arib25 "make install"
cd stz_recpt1/recpt1
./autogen.sh
この環境では、以下のように、なぜか libarib25 を見つけられずにビルドが失敗する。
./configure --enable-b25
checking for create_arib_std_b25 in -larib25... no
configure: WARNING: libarib25 is not available.
LDFLAGS="-L/usr/local/lib" ./configure --enable-b25
make clean
make
sudo paco -lp recpt1 "make install"
sudo aptitude install kvm bridge-utils qemu-kvm-spice
qemu-kvm-spice と spice-client は、SPICE (VNCのようなもの)で接続ために必要。
guestfish と libguestfs-tools は、ゲストのストレージをあれこれ操作するために必要。
guestfish コマンドとか virt-rescue コマンドなどで、バックアップや、レスキューができる。
cat /etc/group | grep libvirtd
再起動する。
再起動をしないと、virt-manager 起動時に「libvirt に接続できませんでした」と怒られる。
確認
外部から接続するような場合には、上記で作成した仮想ブリッジの方が便利なようなので、virbr0 を無効化しておく。
定義の確認
virsh net-list
virsh net-dumpxml default
停止
virsh net-destroy default
自動起動を停止
virsh net-autostart default --disable
確認
virsh net-list --all
LVM に利用するストレージは、RAID10 構成とする。
(parted) mktable gpt
(parted) mkpart disk0 0% 100%
(parted) set 1 raid on
(parted) quit
mkpart で、開始を 1 にしているのは、
同じように全ドライブにパーティションを作成
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
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
3906765824 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[....................] resync = 0.1% (6511360/3906765824) finish=319.4min speed=203480K/sec
Physical volume "/dev/md0" successfully created
Volume 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)
容量は 3TB とする。
sudo lvcreate --name=record-video --size=3t vg0
sudo mkfs.ext4 /dev/vg0/record-video
ubuntu のインストールイメージファイルを /mnt/work にコピーしておく。
共有作成メモ:
net usershare add work /mnt/work "work" "Everyone:F" guest_ok=y
ホストで virt-manager をログインユーザー権限で起動。
virt-manager
ローカルインストールメディアからインストール。
OS の種類:Linux
バージョン:Ubuntu 13.10 (Saucy Salamander)
CPU:4
参照ボタン押下
「Storage Pools」から pool を選択
新規ボリュームボタンを押下
名前:record
最大容量:20480 MB
割り当て:20480 MB
完了ボタン押下
作成した record ボリュームを選択
ボリュームを選択ボタンを押下
種類:Spice
パスワード:任意のパスワード(未設定でも可)
キーマップ:ja
適用ボタン押下
チャンネルを add したいですか?に 「はい」ボタン押下
インストールの開始ボタンを押下
仮想マシンの情報を表示ボタンを押下
ハードウェアを追加ボタンを押下
Storage を選択
管理しているストレージか、他の既存のストレージを選択する
参照ボタンを押下
pool を選択
record-video (/dev/vg0/record-video) を選択
ボリュームを選択ボタンを押下
デバイスの種類:Virtio disk
キャッシュモデル:writethrough
ストレージ形式:raw
完了ボタン押下
ゲストを起動する
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 2
念のため、ゲストを再起動しておく
河豚は食いたし、命は惜しし。
接続先ホスト:192.168.1.104
接続先ユーザ:user1
秘密鍵:/var/www/.ssh/id_rsa
公開鍵:/var/www/.ssh/id_rsa.pub
sudo chmod 700 /var/www/.ssh
sudo chown www-data:www-data /var/www/.ssh
sudo touch /usr/local/bin/recpt1
sudo chmod 755 /usr/local/bin/recpt1
sudo vi /usr/local/bin/recpt1
sudo rm /tmp/test.ts
cd stz_epgdump
make clean
make
sudo paco -lp epgdump "make install"
以下の行を削除
www-data
sudo vi /etc/mysql/my.cnf
[client] および [mysqld] に以下の設定を追加する。
[client]
default-character-set = utf8
[mysqld]
character-set-server = utf8
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> grant all on epgrec.* to epgrec@localhost identified by 'パスワードをここに記述'; mysql> flush privileges;
sudo git clone http://github.com/stz2012/epgrec.git epgrec
/dev/vdb: UUID="9e7ef31a-a571-44be-94c8-fa8e5b124f2e" TYPE="ext4"
UUID=9e7ef31a-a571-44be-94c8-fa8e5b124f2e /var/www/epgrec/video ext4 defaults 0 2
sudo git checkout .
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
+++ config.php 2014-01-07 20:51:59.699557000 +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 vi /etc/php5/apache2/php.ini
以下の行をコメントアウト
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"
次の画面での設定
変更した箇所だけ列挙する。
MySQL接続ユーザー名:epgrec
MySQL接続パスワード:データベース作成時に設定したパスワード
使用データベース名:epgrec
インストールURL:http://サーバー名/epgrec
サムネールの使用:使用する
ffmpegのパス:/usr/bin/avconv
設定を保存するボタンを押下
次の画面の設定は、好みに応じて適宜行うこと。
さらに進めて、EPG の初回受信を行う。
画面の説明で、cron の設定について書いてあるが、前述の設定で既に設定済みとなっている。
EPG 受信の手動実行方法
初回受信で失敗した場合、手動で実行してみる。
sudo -H -u www-data /var/www/epgrec/getepg.php
stz 版のソート順は、sid の昇順となっているようだ。
チャンネルテーブルにソート順カラムを追加
mysql -u epgrec -D epgrec -p
ALTER TABLE Recorder_channelTbl ADD sort INT(6) NOT NULL DEFAULT 500;
ソースにパッチ
sudo vi /var/www/epgrec/index.php
45 // チャンネルマップ
46 $tmprec = new DBRecord(CHANNEL_TBL);
-47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sid+0 ASC" );
+47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sort, sid+0" );
お好みのソート順を設定
TOKYO MX, tvk1, テレビ東京, テレ玉
UPDATE Recorder_channelTbl SET sort = 100 WHERE type = 'GR' AND channel IN ('16', '18', '23','32');
フジテレビ, TBS, テレビ朝日, 日テレ
UPDATE Recorder_channelTbl SET sort = 200 WHERE type = 'GR' AND channel IN ('21', '22', '24', '25');
放送大学
UPDATE Recorder_channelTbl SET sort = 1000 WHERE type = 'GR' AND channel = '28';
というわけで、別の方法を模索してみた。
基本戦略としては、epgrec をゲストで動作させ、ICカードリーダー、PT3 および recpt1 をホストで動作させる。
ゲストから、ssh 接続経由で、ホストの 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 Server 13.10 amd64
ICカードリーダー:PLEX PX-ICCR01
アースソフト PT3 Rev.A
ホストOSをインストール
Ubuntu のインストーラを起動システム用 HDD 28GB の領域に LVM 構成で自動パーティショニングを行った。
以下のインストールソフトウェアを選択
Basic Ubuntu server
OpenSSH server
Samba file server
Virtual Machine host
Ubuntu desktop
アップデート
sudo aptitude update
sudo aptitude full-upgrade
必要なパッケージをインストール
sudo aptitude install ssh mdadm git build-essential libtool automake paco
リンカが 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 --display ld
作業用のパーティション作成
システム用 HDD の残り VG 領域に、作業用パーティションを作成。sudo lvcreate --name=work --extents=100%FREE phenom-vg
sudo mkfs.ext4 /dev/phenom-vg/work
sudo lvs
sudo blkid
/dev/mapper/phenom--vg-work: UUID="5ed97836-21ce-49b5-a92a-66b3ca75a12a" TYPE="ext4"
末尾に追加
UUID=5ed97836-21ce-49b5-a92a-66b3ca75a12a /mnt/work ext4 rw 0 2
マウント先を作成
sudo mkdir /mnt/work
sudo chmod 777 /mnt/work
マウント
sudo mount /mnt/work
カードリーダーの設定
パッケージをインストール 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 -lp pt3-driver "make install"
ドライバを組み込む
sudo modprobe pt3_drv因みに、以下のようにパラメータを渡すとデバッグレベルを指定できる
sudo modprobe pt3_drv debug=7
渡すことの出来るパラメータなどは、ソースの README を確認するか、以下のように調べる。
modinfo pt3_drv
filename: /lib/modules/3.11.0-15-generic/kernel/drivers/video/pt3_drv.ko
license: GPL
description: PCI Earthsoft PT3 driver
author: anyone
srcversion: 0A1D05542951609033BEAFC
alias: pci:v00001172d00004C15sv*sd*bc*sc*i*
depends:
vermagic: 3.11.0-15-generic SMP mod_unload modversions
parm: debug:debug level (0-7) (int)
parm: lnb:LNB level (0:OFF 1:+11V 2:+15V) (int)
ドライバの動作確認
dmesg | grep -i pt3[ 2954.181817] pt3_drv: module verification failed: signature and/or required key missing - tainting kernel
[ 2954.186493] PT3: pt3_drv 0.0.1rev99 2013-08-05
[ 2954.186592] pt3_drv 0000:04:00.0: enabling device (0000 -> 0002)
[ 2954.186736] PT3: Bus Mastering Enabled.
[ 2955.392717] PT3: device[0]= (null)
[ 2955.394590] PT3: card_number=0 channel=0
[ 2955.396751] PT3: card_number=0 channel=1
[ 2955.398812] PT3: card_number=0 channel=2
[ 2955.400922] PT3: card_number=0 channel=3
デバイスファイルが存在することを確認
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.zipunzip c44e16dbb0e2.zip
cd pt1-c44e16dbb0e2/arib25
make clean
make
sudo paco -lp arib25 "make install"
recpt1 のインストール
git clone http://github.com/stz2012/recpt1.git stz_recpt1cd stz_recpt1/recpt1
./autogen.sh
この環境では、以下のように、なぜか libarib25 を見つけられずにビルドが失敗する。
./configure --enable-b25
checking for create_arib_std_b25 in -larib25... no
configure: WARNING: libarib25 is not available.
make
gcc -O2 -g -pthread -I../driver -Wall -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -c -o decoder.o decoder.c
In file included from decoder.c:4:0:
decoder.h:26:5: error: unknown type name ‘uint8_t’
make: *** [decoder.o] エラー 1
しょうがないので、応急手当。
vi Makefile.in
LDFLAGS =
↓
LDFLAGS = @LDFLAGS@
LDFLAGS="-L/usr/local/lib" ./configure --enable-b25
make clean
make
sudo paco -lp recpt1 "make install"
動作確認
recpt1 --b25 --strip 27 20 test.tsKVM 環境構築
必要なパッケージをインストール
以下のパッケージは、インストール時に選択したパッケージに含まれるもの。よって、インストール済みなはず。sudo aptitude install kvm bridge-utils qemu-kvm-spice
以下のパッケージは、新規にインストールする必要があるもの。
sudo aptitude install virt-manager qemu-system virt-viewer 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 service networking restartifconfig -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 を無効化しておく。
定義の確認
virsh net-list
virsh net-dumpxml default
停止
virsh net-destroy default
自動起動を停止
virsh net-autostart default --disable
確認
virsh net-list --all
ゲストOS 格納用ストレージプール作成
ストレージプールは、LVM 上に確保する。LVM に利用するストレージは、RAID10 構成とする。
パーティションを作成
sudo parted /dev/sdb(parted) mktable gpt
(parted) mkpart disk0 0% 100%
(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
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
3906765824 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[....................] resync = 0.1% (6511360/3906765824) finish=319.4min speed=203480K/sec
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)
録画ファイル保存用ストレージを作成
Logical Volume 作成
前述のストレージプール用に作成した Volume Group に作成する。容量は 3TB とする。
sudo lvcreate --name=record-video --size=3t vg0
sudo mkfs.ext4 /dev/vg0/record-video
ゲストOS インストール
前回、散々コンソールでインストールをしたので、今回は GUI で楽をすることにした。ubuntu のインストールイメージファイルを /mnt/work にコピーしておく。
共有作成メモ:
net usershare add work /mnt/work "work" "Everyone:F" guest_ok=y
net usershare list
net usershare delete work
ホストで virt-manager をログインユーザー権限で起動。
virt-manager
新しい仮想マシンを作成する。
ステップ1
名前:recordローカルインストールメディアからインストール。
ステップ2
ISO イメージに /mnt/work にコピーしたイメージファイルを指定。OS の種類:Linux
バージョン:Ubuntu 13.10 (Saucy Salamander)
ステップ3
メモリー:2048CPU:4
ステップ4
管理しているストレージか、他の既存のストレージを選択する参照ボタン押下
「Storage Pools」から pool を選択
新規ボリュームボタンを押下
名前:record
最大容量:20480 MB
割り当て:20480 MB
完了ボタン押下
作成した record ボリュームを選択
ボリュームを選択ボタンを押下
ステップ5
インストールの前に設定をカスタマイズするをチェックグラフィックを Spice に切り替え
ディスプレイ VNC を選択種類:Spice
パスワード:任意のパスワード(未設定でも可)
キーマップ:ja
適用ボタン押下
チャンネルを add したいですか?に 「はい」ボタン押下
インストールの開始ボタンを押下
日本語を選択
Ubuntu Serverをインストールを選択
選択された言語では完全ではありません。と言われるが、「はい」
あとは、日本か日本語を選択
ホスト名:record
ユーザ、パスワードは任意
ホームディレクトリを暗号化しますか?:いいえ
タイムゾーン Asia/Tokyo:はい
ガイド - ディスク全体を使い LVM をセットアップするを選択
自動的にアップデートしないを選択
インストールするソフトウェアは以下のものを選択
OpenSSH server
Samba file server
インストールが完了したら、ゲストを停止する。
録画ファイル保存用ストレージを追加
※仮想マシンの作成時にやろうとしたが、定義が重複してるだのヌカスノデ・・・仮想マシンの情報を表示ボタンを押下
ハードウェアを追加ボタンを押下
Storage を選択
管理しているストレージか、他の既存のストレージを選択する
参照ボタンを押下
pool を選択
record-video (/dev/vg0/record-video) を選択
ボリュームを選択ボタンを押下
デバイスの種類:Virtio disk
キャッシュモデル:writethrough
ストレージ形式:raw
完了ボタン押下
ゲストを起動する
ゲストに必要なパッケージをインストール
参考:ubuntu13.10+pt3+epgrecの環境構築システムを更新
sudo aptitude update
sudo aptitude full-upgrade
開発関連のパッケージをインストール
sudo aptitude install git automake build-essential libtool binutils-gold paco
リンカが gold になるように設定
sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.bfd 1sudo update-alternatives --install /usr/bin/ld ld /usr/bin/ld.gold 2
update-alternatives --display ld
epgrec 関連のパッケージをインストール
sudo aptitude install apache2 php5 mysql-server mysql-client php5-mysql libav-tools念のため、ゲストを再起動しておく
recpt1 に関する設定
今回のこの方法は、セキュリティ的にヨロシクナイ。河豚は食いたし、命は惜しし。
公開鍵認証の設定
www-data ユーザが、ssh 接続をする場合に、コマンド入力を発生させないよう、公開鍵認証方式でホストに接続できるようにする。接続先ホスト:192.168.1.104
接続先ユーザ:user1
秘密鍵:/var/www/.ssh/id_rsa
公開鍵:/var/www/.ssh/id_rsa.pub
鍵の格納先を作成
sudo mkdir /var/www/.sshsudo chmod 700 /var/www/.ssh
sudo chown www-data:www-data /var/www/.ssh
鍵を作成
sudo -H -u www-data /usr/bin/ssh-keygen -N "" -t rsa公開鍵をホスト側に設定
sudo -H -u www-data /usr/bin/ssh-copy-id user1@192.168.1.104接続確認
sudo -H -u www-data /usr/bin/ssh -oStrictHostKeyChecking=no user1@192.168.1.104 ls
recpt1 のラッパー作成
ホスト側の recpt1 を ssh 経由で呼び出すラッパーコマンドを作成する。sudo touch /usr/local/bin/recpt1
sudo chmod 755 /usr/local/bin/recpt1
sudo vi /usr/local/bin/recpt1
#!/bin/bash
SSH=/usr/bin/ssh
SSH_OPT=-oStrictHostKeyChecking=no
REMOTE_USER=user1
REMOTE_HOST=192.168.1.104
REMOTE_CMD=/usr/local/bin/recpt1
cmd_opt="$@"
if [ 3 -le $# ]; then
# 引数が 3 つ以上の場合
# 最後の引数を出力ファイルとして取得
outfile=${*:$#}
if [ - != ${outfile:0:1} ]; then
# 出力ファイルの先頭1文字が - でない場合
# 最後の引数以外を取り出し、出力ファイルにリダイレクト
cmd_opt="${@:1:$#-1} - > '$outfile'"
elif [ 2 -le ${#outfile} ]; then
echo 最後の引数は、出力ファイルを指定して下さい。 1>&2
exit 1
fi
fi
# コマンドを実行(:? は、値が設定されていない場合エラーとなる指定)
eval ${SSH:?} $SSH_OPT $REMOTE_USER${REMOTE_USER:+@}${REMOTE_HOST:?} ${REMOTE_CMD:?} $cmd_opt
動作確認
sudo -H -u www-data /usr/local/bin/recpt1 27 10 /tmp/test.ts
ls -la /tmp/test.ts
-rw-r--r-- 1 www-data www-data 21561344 1月 11 10:05 /tmp/test.ts
sudo rm /tmp/test.ts
epgdump のインストール
git clone http://github.com/stz2012/epgdump.git stz_epgdumpcd stz_epgdump
make clean
make
sudo paco -lp epgdump "make install"
epgrec のインストール
at コマンドを 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 -pmysql> 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> create database epgrec;mysql> grant all on epgrec.* to epgrec@localhost identified by 'パスワードをここに記述'; mysql> flush privileges;
epgrec をダウンロード
cd /var/wwwsudo git clone http://github.com/stz2012/epgrec.git epgrec
録画ファイル保存用ストレージのマウント設定
マウントディレクトリ内のファイルを削除
sudo rm /var/www/epgrec/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
マウント
sudo mount /var/www/epgrec/videovideo ディレクトリ内のファイルを元に戻す
cd /var/www/epgrecsudo git checkout .
epgrec の設定
cd /var/wwwsudo 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
+++ config.php 2014-01-07 20:51:59.699557000 +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 /var/www/epgrec/cron.d/getepg /etc/cron.d2箇所の php.ini を同様に編集
sudo vi /etc/php5/cli/php.inisudo vi /etc/php5/apache2/php.ini
以下の行をコメントアウト
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"
Apache のデフォルト文字コードを UTF-8 に設定
sudo vi /etc/apache2/conf-available/charset.conf
#AddDefaultCharset UTF-8
↓
AddDefaultCharset UTF-8
Apache を再起動
sudo service apache2 restartブラウザで接続
http://record/epgrec次の画面での設定
変更した箇所だけ列挙する。
MySQL接続ユーザー名:epgrec
MySQL接続パスワード:データベース作成時に設定したパスワード
使用データベース名:epgrec
インストールURL:http://サーバー名/epgrec
サムネールの使用:使用する
ffmpegのパス:/usr/bin/avconv
設定を保存するボタンを押下
次の画面の設定は、好みに応じて適宜行うこと。
さらに進めて、EPG の初回受信を行う。
画面の説明で、cron の設定について書いてあるが、前述の設定で既に設定済みとなっている。
EPG 受信の手動実行方法
初回受信で失敗した場合、手動で実行してみる。
sudo -H -u www-data /var/www/epgrec/getepg.php
これで、設定はすべて完了。
おまけ
番組表表示で、チャンネルの並び順が、お気に召さなかったので、ちょっとパッチをした。stz 版のソート順は、sid の昇順となっているようだ。
チャンネルテーブルにソート順カラムを追加
mysql -u epgrec -D epgrec -p
ALTER TABLE Recorder_channelTbl ADD sort INT(6) NOT NULL DEFAULT 500;
sudo vi /var/www/epgrec/index.php
45 // チャンネルマップ
46 $tmprec = new DBRecord(CHANNEL_TBL);
-47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sid+0 ASC" );
+47 $recarr = $tmprec->fetch_array( "type", $type, "id > 0 ORDER BY sort, sid+0" );
TOKYO MX, tvk1, テレビ東京, テレ玉
UPDATE Recorder_channelTbl SET sort = 100 WHERE type = 'GR' AND channel IN ('16', '18', '23','32');
フジテレビ, TBS, テレビ朝日, 日テレ
UPDATE Recorder_channelTbl SET sort = 200 WHERE type = 'GR' AND channel IN ('21', '22', '24', '25');
放送大学
UPDATE Recorder_channelTbl SET sort = 1000 WHERE type = 'GR' AND channel = '28';
2014年1月8日水曜日
【備忘録】Ubuntu 13.10 の KVM 仮想環境上に PT3 と epgrec による録画環境の構築実験(失敗)
【2014/01/08】現時点では、実験に失敗している。
PT3 ドライバか recpt1 が正常に動作していないようだ。
手順の問題なのか、仮想環境の問題なのか、今のところ調べ切れていない。
いつかまた、再実験のために、この記録を公開しておく。
我が屍を超えてゆけ!!!
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
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
2014年1月7日火曜日
【備忘録】 tmux の設定ファイル(オレオレ仕様)
.tmux.conf
#
# tmux 設定
#
# プレフィックス変更
#set-option -g prefix C-z
#bind-key C-z send-prefix
#unbind-key C-b
# バックスクロール行数
set-option -g history-limit 10000
# シェル指定
set-option -g default-shell /bin/bash
set-option -g default-command /bin/bash
# ペイン開始番号
set-option -g base-index 1
# -r の連続入力待機ミリ秒(Default 500)
set-option -g repeat-time 1000
# ターミナルを 256 色モードに変更
set-option -g default-terminal screen-256color
# コピーモードを vi モードに変更
setw -g mode-keys vi
# 文字コード
set-window-option -g utf8 on
set-window-option -g status-utf8 on
# PuTTY の場合は、以下は OFF がいいらしい
set-option -g mouse-utf8 off
# pre + r で設定ファイル再読み込み
bind r source-file ~/.tmux.conf \; display-message "Reloaded config !!"
# マウス操作設定
set-option -g mode-mouse off
set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
bind-key m \
set -g mode-mouse on \; \
set -g mouse-select-pane on \; \
set -g mouse-resize-pane on \; \
set -g mouse-select-window on \; \
display "Mouse: ON"
bind-key M \
set -g mode-mouse off \; \
set -g mouse-select-pane off \; \
set -g mouse-resize-pane off \; \
set -g mouse-select-window off \; \
display "Mouse: OFF"
#
# ステータスバー
#
# 更新間隔(default 15)
set-option -g status-interval 10
# 最大長(default:left 10, right 40)
set-option -g status-left-length 30
set-option -g status-right-length 60
# 表示と色
set -g status-right "[#h# ] %Y/%m/%d %H:%M"
set -g status-bg colour144
set -g status-fg black
set -g status-left-bg magenta
set -g status-left-fg black
set -g status-right-bg cyan
set -g status-right-fg black
#
# ペイン
#
# 区切り線のスタイル
set -g pane-active-border-bg green
set -g pane-active-border-fg red
set -g pane-border-bg colour7
set -g pane-border-fg black
setw -g window-status-current-fg blue
2013年10月30日水曜日
【備忘録】GPT(GUID Partition Table)で Ubuntu 12.04 64bit システムディスクをパーティショニングする。
完全なる備忘録。
GPT でのパーティショニングが、よくわからないので、適当にやってみた。
マザーボードは、GIGABYTE GA-990FXA-UD5 で、BIOSは AMI EFI である。
したがって、UEFI BIOS 向けのパーティショニングとなる。
GPT でのパーティショニングとは関係ないが、諸所の事情で、光学ドライブが付いていないマシンにインストールするために、USB メモリにインストーラーを入れた。
手順は、先人の知恵である「USBメモリを使ってUbuntuをインストール No.2」をありがたく参考に、http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/ から Universal USB Installer をダウンロードして利用した。ありがたや。
インストーラーを起動。
「Install Ubuntu」を選択
「日本語」を選択
「インストール中にアップデートをダウンロードする」および「サードパーティのソフトウェアをインストールする」にチェックを入れ、続ける(この2つは、入れても入れなくてもいいと思う)
「インストールの種類」の選択画面になったら、「それ以外」(説明は、”Ubuntu 向けに、自分でパーティションの作成やサイズ変更を行ったり、複数のパーティションを選択することもできます。”と書いてある)を選択して続ける
パーティション作成画面では、以下の手順でパーティション分けをする。
パーティションは、「EFI システムパーティション」、「ルートパーティション」および、「スワップパーティション」の3つが必須となる。
「/dev/sda」を選択
「新しいパーティションテーブル」ボタンを押下し、「続ける」ボタンを押下
「dev/sda」の「空き領域」を選択して、「追加」ボタンを押下
「新しいパーティションのサイズをメガバイト(1000000 バイト)単位で指定する」に 100(MB)と入力(35MB 以上必要らしい)
利用方法:ext4 ジャーナリングファイルシステム
マウントポイント:/
必要なパーティションの作成が完了したら、「ブートローダをインストールするデバイス」に「/dev/sda」を選択して、「インストール」ボタンを押下
ここでは、以下のようにパーティションを作った。 sda は、500GB のHDD。ちなみに、空き領域は、勝手にできるようだ。
デバイス タイプ マウントポイント フォーマット サイズ 使用済み
/dev/sda
空き領域 1MB
/dev/sda1 efi 98MB 不明
/dev/sda2 ext4 / する 10000MB 不明
/dev/sda3 ext4 /mnt/temp する 488006MB 不明
/dev/sda4 swap 1999MB 0MB
空き領域 1MB
あとは、最後までインストールして完了。
手動でパーティショニングする場合は、レガシー BIOS 向けなので、EFI BIOS 向けとパーティションの定義方法が異なるので注意。
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
yebisu.img vg0 -wi-a- 10.00g
Renamed "yebisu.img" to "yebisu.img.bak" in volume group "vg0"
Logical volume "yebisu.img" created
新規ボリュームをパーティション分け
ゲストボリュームににアクセスできるツールを起動(guestfish パッケージ)
> run
> list-filesystems
/dev/vda1: unknown
/dev/vda2: ext4
/dev/vda3: swap
> mount /dev/vda2 /
> tar-in bak.tar /
無事に起動した。
GPT でのパーティショニングが、よくわからないので、適当にやってみた。
インストーラーでパーティショニング
最初は、Ubuntu 12.04 Desktop 64bit インストーラー(ubuntu-12.04.3-desktop-amd64.iso)を使用したパーティショニングを行ってみた。マザーボードは、GIGABYTE GA-990FXA-UD5 で、BIOSは AMI EFI である。
したがって、UEFI BIOS 向けのパーティショニングとなる。
GPT でのパーティショニングとは関係ないが、諸所の事情で、光学ドライブが付いていないマシンにインストールするために、USB メモリにインストーラーを入れた。
手順は、先人の知恵である「USBメモリを使ってUbuntuをインストール No.2」をありがたく参考に、http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3/ から Universal USB Installer をダウンロードして利用した。ありがたや。
インストーラーを起動。
「Install Ubuntu」を選択
「日本語」を選択
「インストール中にアップデートをダウンロードする」および「サードパーティのソフトウェアをインストールする」にチェックを入れ、続ける(この2つは、入れても入れなくてもいいと思う)
「インストールの種類」の選択画面になったら、「それ以外」(説明は、”Ubuntu 向けに、自分でパーティションの作成やサイズ変更を行ったり、複数のパーティションを選択することもできます。”と書いてある)を選択して続ける
パーティション作成画面では、以下の手順でパーティション分けをする。
パーティションは、「EFI システムパーティション」、「ルートパーティション」および、「スワップパーティション」の3つが必須となる。
「/dev/sda」を選択
「新しいパーティションテーブル」ボタンを押下し、「続ける」ボタンを押下
「dev/sda」の「空き領域」を選択して、「追加」ボタンを押下
「新しいパーティションのサイズをメガバイト(1000000 バイト)単位で指定する」に 100(MB)と入力(35MB 以上必要らしい)
「新しいパーティションの場所」:先頭
「利用方法」:EFI システムパーティション
「OK」ボタンを押下
「利用方法」:EFI システムパーティション
「OK」ボタンを押下
同じ要領で、以下の必須パーティションも作成する。
ルートパーティションを作成
「新しいパーティションのサイズをメガバイト(1000000 バイト)単位で指定する」に 10000(MB)利用方法:ext4 ジャーナリングファイルシステム
マウントポイント:/
スワップパーティションを作成
利用方法:スワップ領域必要なパーティションの作成が完了したら、「ブートローダをインストールするデバイス」に「/dev/sda」を選択して、「インストール」ボタンを押下
ここでは、以下のようにパーティションを作った。 sda は、500GB のHDD。ちなみに、空き領域は、勝手にできるようだ。
デバイス タイプ マウントポイント フォーマット サイズ 使用済み
/dev/sda
空き領域 1MB
/dev/sda1 efi 98MB 不明
/dev/sda2 ext4 / する 10000MB 不明
/dev/sda3 ext4 /mnt/temp する 488006MB 不明
/dev/sda4 swap 1999MB 0MB
空き領域 1MB
あとは、最後までインストールして完了。
手動でパーティショニング
KVM 仮想環境上に MBR でインストールした Ubuntu 12.04 Alternate 64bit をそっくり移して、きちんと起動できるか確認した。手動でパーティショニングする場合は、レガシー BIOS 向けなので、EFI BIOS 向けとパーティションの定義方法が異なるので注意。
ゲストイメージのストレージプールは、LVM 上に作成してある。
$ sudo lvsLV VG Attr LSize Origin Snap% Move Log Copy% Convert
yebisu.img vg0 -wi-a- 10.00g
ロジカルボリュームをリネーム
$ sudo lvrename vg0 yebisu.img yebisu.img.bakRenamed "yebisu.img" to "yebisu.img.bak" in volume group "vg0"
新規ロジカルボリュームを作成
$ sudo lvcreate -L 10g -n yebisu.img vg0Logical volume "yebisu.img" created
ゲストボリュームに対するレスキューをするためのツールを起動(libguestfs-tools パッケージ)
$ sudo virt-rescue /dev/vg0/yebisu.img
新規ボリュームをパーティション分け
GPT の場合は、専用のパーティション(vda1)を作成して(本当に必要かどうか、いまいちわからない)、bios_grub フラグを立てる必要がある。
I have no name!@(none):/# parted /dev/vda
(parted) mktable gpt
(parted) mkpart non-fs 0cyl 2cyl
(parted) mkpart root 2cyl 8g
(parted) mkpart swap 8g -1
(parted) set 1 bios_grub on
(parted) print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
17.4kB 1049kB 1031kB Free Space
1 1049kB 16.8MB 15.7MB non-fs bios_grub
2 16.8MB 8000MB 7983MB ext4 root
3 8000MB 10.7GB 2737MB linux-swap(v1) swap
10.7GB 10.7GB 1032kB Free Space
(parted) quit
パーティションをフォーマット
I have no name!@(none):/# mkfs.ext4 /dev/vda2
I have no name!@(none):/# mkswap /dev/vda3
I have no name!@(none):/# exit
ゲストボリュームににアクセスできるツールを起動(guestfish パッケージ)
ゲストのファイルシステムに対して、色々できる。
レスキューツールと似ていて、こちらでもパティショニングできるが、いまいち使いづらい。専用コマンドのマニュアルと睨めっこすれば、パティショニングから、フォーマットまでできる。
$ sudo guestfish -a /dev/vg0/yebisu.img.bak
> run
> list-filesystems
/dev/vda1: ext4
/dev/vda2: unknown
/dev/vda5: swap
> mount /dev/vda1 /
コピー元ファイルを tar ファイルに出力
> tar-out / bak.tar
> quit
カレントディレクトリに、bak.tar ファイルができているはず。
コピー先に tar ファイルを展開
$ sudo guestfish -a /dev/vg0/yebisu.img>
>
/dev/vda1: unknown
/dev/vda2: ext4
/dev/vda3: swap
>
>
> quit
再びレスキューツールを起動
$ sudo virt-rescue /dev/vg0/yebisu.img
ゲストストレージに chroot
I have no name!@(none):/# mount /dev/vda2 /sysroot/
I have no name!@(none):/# mount -o bind /dev /sysroot/dev
I have no name!@(none):/# mount -o bind /proc /sysroot/proc
I have no name!@(none):/# mount -o bind /sys /sysroot/sys
I have no name!@(none):/# chroot /sysroot bash
UUID を調べる
root@(none):/# blkid /dev/vda2
/dev/vda2: UUID="8919796d-066a-4f12-adce-d2726c4c6ca1" TYPE="ext4"
root@(none):/# blkid /dev/vda3
/dev/vda3: UUID="1438a432-7db7-43af-a492-1c12f3677ed9" TYPE="swap"
上記で調べたルートおよびスワップドライブの UUID を書き換え
root@(none):/# vi /etc/fstab
上記で調べたスワップドライブの UUID を書き換え
root@(none):/# vi /etc/initramfs-tools/conf.d/resume
GRUB をインストール
root@(none):/# grub-install /dev/vda
Installation finished. No error reported.
GRUB 設定を更新
root@(none):/# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.5.0-42-generic
Found initrd image: /boot/initrd.img-3.5.0-42-generic
Found memtest86+ image: /boot/memtest86+.bin
[27740.000422] SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled
[27740.015882] JFS: nTxBlock = 3834, nTxLock = 30672
[27740.056074] NTFS driver 2.1.30 [Flags: R/O MODULE].
[27740.079828] QNX4 filesystem 0.2.3 registered.
[27740.167927] Btrfs loaded
done
initramfs を更新
root@(none):/# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.5.0-42-generic
終了
root@(none):/# exit
exit
I have no name!@(none):/# exit
exit
ゲストを起動
$ virsh start --console yebisu
ドメイン yebisu が起動されました
ドメイン yebisu に接続しました
エスケープ文字は ^] です
error: no video mode activated.
Ubuntu 12.04.3 LTS yebisu ttyS0
ログイン
yebisu login: user1
Password: ********
Last login: Tue Oct 29 14:35:36 JST 2013 on ttyS0
Welcome to Ubuntu 12.04.3 LTS (GNU/Linux 3.5.0-42-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed Oct 30 07:32:37 JST 2013
System load: 0.34 Processes: 131
Usage of /: 38.1% of 7.32GB Users logged in: 0
Memory usage: 6% IP address for eth0: 192.168.1.105
Swap usage: 0%
Graph this data and manage this system at https://landscape.canonical.com/
user1@yebisu:~$
無事に起動した。
めでたしめでたし。
2013年6月9日日曜日
unix4j の備忘録
前回は、awk4j を調査したが、awk だけでは、ちと寂しいので、他の Unix コマンドを Java で使う方法も調査してみた。
その便利なライブラリは、unix4j である。
Google Code のプロジェクトで、ライセンスは、New BSD License となっている。
まずは、手っ取り早く動作確認を行う方法から。
今回は、jrunscript.exe で動作確認をするので、JDK 1.6 以上が必要。
unix4j のページには、バイナリファイルが見当たらなかったので、Maven Central Repository から jar ファイルを拝借してくる。
"unix4j"で検索すれば バージョン 0.2 が 6種類ほど引っかかる。
その内、「unix4j-command」と「unix4j-base」の jar ファイル「unix4j-command-0.2.jar」と「unix4j-base-0.2.jar」をそれぞれダウンロードする。
コマンドプロンプトを開き、jar ファイルと同じディレクトリで以下のコマンドを実行する。
%JAVA_HOME%\bin ディレクトリにパスが通っている必要がある。
dir | jrunscript -cp unix4j-base-0.2.jar;unix4j-command-0.2.jar -e "org.unix4j.Unix4j.from(java.lang.System[\"in\"]).sed(\"s/unix4j/FOOO/g\").toStdOut()"
やっていることは、標準入力からディレクトリ一覧をパイプで入力し、sed で文字列を変換し、標準出力へ結果を吐き出している。
スクリプト部分は、ファイルから読み込むこともできるので、バッチファイル化しておけば、いい感じになる。コマンドラインだとダブルクォートのエスケープとか面倒だしね。
その他にも、grep、find、tail、sort や uniq など色々使えるので、結構便利そうだ。
もちろん、通常の Java クラスとしても実装できる。
さて、ここからはおまけ。
最新の unix4j を使いたい場合に、ソースからビルドする方法を書いておく。
以下のものが必要となる。
今回は、以下の環境で検証した。
はじめに、適当なディレクトリに unix4j の git リポジトリをクローン
git clone https://code.google.com/p/unix4j/
cd unix4j
mvn clean compile jar:jar
これで、jar ファイルが出来る。
ちなみに、pom.xml には、Java 1.6 用と 1.7 用のプロファイルが定義されていて、デフォルトは、1.6 になっているが、JDK 1.7 でコンパイルした場合は、1.7 用のプロファイルが有効になるようだ。
作成された以下の jar を使う。
unix4j\unix4j-core\unix4j-base\target\unix4j-base-0.3-SNAPSHOT.jar
unix4j\unix4j-core\unix4j-command\target\unix4j-command-0.3-SNAPSHOT.jar
いやはや、今更ながら jrunscript の存在を認識できた。結構奥深いようだ。
仕事柄、ツールを利用して作業を効率化したいときが結構あるのだが、sed とか awk とか使うには、インストールできないとかで、環境面のハードルが高い。
こういうものが、地味に助かることも多い。
その便利なライブラリは、unix4j である。
Google Code のプロジェクトで、ライセンスは、New BSD License となっている。
まずは、手っ取り早く動作確認を行う方法から。
今回は、jrunscript.exe で動作確認をするので、JDK 1.6 以上が必要。
unix4j のページには、バイナリファイルが見当たらなかったので、Maven Central Repository から jar ファイルを拝借してくる。
"unix4j"で検索すれば バージョン 0.2 が 6種類ほど引っかかる。
その内、「unix4j-command」と「unix4j-base」の jar ファイル「unix4j-command-0.2.jar」と「unix4j-base-0.2.jar」をそれぞれダウンロードする。
コマンドプロンプトを開き、jar ファイルと同じディレクトリで以下のコマンドを実行する。
%JAVA_HOME%\bin ディレクトリにパスが通っている必要がある。
dir | jrunscript -cp unix4j-base-0.2.jar;unix4j-command-0.2.jar -e "org.unix4j.Unix4j.from(java.lang.System[\"in\"]).sed(\"s/unix4j/FOOO/g\").toStdOut()"
やっていることは、標準入力からディレクトリ一覧をパイプで入力し、sed で文字列を変換し、標準出力へ結果を吐き出している。
スクリプト部分は、ファイルから読み込むこともできるので、バッチファイル化しておけば、いい感じになる。コマンドラインだとダブルクォートのエスケープとか面倒だしね。
その他にも、grep、find、tail、sort や uniq など色々使えるので、結構便利そうだ。
もちろん、通常の Java クラスとしても実装できる。
さて、ここからはおまけ。
最新の unix4j を使いたい場合に、ソースからビルドする方法を書いておく。
以下のものが必要となる。
- JDK 1.6 以上
- Apache Maven
- git
今回は、以下の環境で検証した。
- Windows 7 Professional SP1
- Apache Maven 3.0.5
- Java version: 1.7.0_06
- Git for Windows 1.8.3-preview20130601
はじめに、適当なディレクトリに unix4j の git リポジトリをクローン
git clone https://code.google.com/p/unix4j/
cd unix4j
mvn clean compile jar:jar
これで、jar ファイルが出来る。
ちなみに、pom.xml には、Java 1.6 用と 1.7 用のプロファイルが定義されていて、デフォルトは、1.6 になっているが、JDK 1.7 でコンパイルした場合は、1.7 用のプロファイルが有効になるようだ。
作成された以下の jar を使う。
unix4j\unix4j-core\unix4j-base\target\unix4j-base-0.3-SNAPSHOT.jar
unix4j\unix4j-core\unix4j-command\target\unix4j-command-0.3-SNAPSHOT.jar
いやはや、今更ながら jrunscript の存在を認識できた。結構奥深いようだ。
仕事柄、ツールを利用して作業を効率化したいときが結構あるのだが、sed とか awk とか使うには、インストールできないとかで、環境面のハードルが高い。
こういうものが、地味に助かることも多い。
2013年6月8日土曜日
awk4j の備忘録
awk4j の Web ページには、以下のような説明がある。
「awk4j は、 GNU AWK 互換の言語処理環境で、 AWKスクリプトを、中間言語としてのホスト言語 ( Java, JavaFX, JavaScript, BeanShell, Groovy, Python, Scala ) に変換するトランスレータ方式で動作します。」
仕事をしていると、awk を使いたくなる場合がある。
自宅なら、MinGW とか MSYS とか、Ubuntu マシンとかあるので、困ることは無いのだが、現場によっては、ソフトのインストール自体が難しいことがある。
そんなときに、awk4j が役に立ちそうなので、ちょっと調べてみた。
awk4j は、Java 1.6 から利用できる jrunscript コマンドを利用して実行する。
まず、awk4j のページから、awk4j-1.6.5-bin.zip をダウンロードし、適当な場所に解凍する。
最初は、実行方法を簡単に説明する。
解凍した以下のディレクトリを、コマンドプロンプトで開く
awk4j-bin\lib
以下のように実行すると、Hello World! と表示される。
AWK スクリプトを内部で Java 言語に変換しているので、CLASSPATH 環境変数の設定が必ず必要となる。
set CLASSPATH=awk4j.jar
%JAVA_HOME%\bin\jrunscript -cp awk4j.jar -l awk4j -e "BEGIN { print \"Hello World!\" }"
バッチ化する場合は、以下のようなコマンドを awk.bat として作成して、バッチと同じディレクトリに awk4j.jar ファイルを格納する。ちなみに、「%~dp0」は、バッチファイルのディレクトリを取得する記述。
@echo off
setlocal
set CLASSPATH=%~dp0awk4j.jar;%CLASSPATH%
%JAVA_HOME%\bin\jrunscript -cp %~dp0awk4j.jar -l awk4j %*
endlocal
同じように、JavaScript に変換して実行することもできる。
JavaScript の場合は、CLASSPATH 環境変数の設定は、いらないようだ。
ただし、Java と JavaScript では、実行時の挙動が異なるようだ!?
JavaScript での実行では、以下のコマンドは、同じ結果になるのだが、入力ファイルを指定しても、処理している様子がないし・・・例文で乗っている "1" とか "NF" のようなスクリプトも、JavaScript では、エラーになってしまうようだ。何か、指定方法などが間違っているのだろうか?
%JAVA_HOME%\bin\jrunscript.exe -cp awk4j.jar -l awk4j.JavaScript -e "BEGIN { print \"Hello World!\" }"
では、作成した awk.bat のコマンド例を示す。
ファイル指定で実行
awk -e "{ print $0 }" hoge.txt
パイプで実行。標準入力からデータを受け取る場合 /dev/stdin をファイル名に指定する。ここら辺の説明は、「言語仕様」リンク先でなされている。
type hoge.txt | awk -e "1" /dev/stdin
「awk4j は、 GNU AWK 互換の言語処理環境で、 AWKスクリプトを、中間言語としてのホスト言語 ( Java, JavaFX, JavaScript, BeanShell, Groovy, Python, Scala ) に変換するトランスレータ方式で動作します。」
仕事をしていると、awk を使いたくなる場合がある。
自宅なら、MinGW とか MSYS とか、Ubuntu マシンとかあるので、困ることは無いのだが、現場によっては、ソフトのインストール自体が難しいことがある。
そんなときに、awk4j が役に立ちそうなので、ちょっと調べてみた。
- Windows 上で動かすこととする。
- JDK 1.6 以上がインストールされていること。
awk4j は、Java 1.6 から利用できる jrunscript コマンドを利用して実行する。
まず、awk4j のページから、awk4j-1.6.5-bin.zip をダウンロードし、適当な場所に解凍する。
最初は、実行方法を簡単に説明する。
解凍した以下のディレクトリを、コマンドプロンプトで開く
awk4j-bin\lib
以下のように実行すると、Hello World! と表示される。
AWK スクリプトを内部で Java 言語に変換しているので、CLASSPATH 環境変数の設定が必ず必要となる。
set CLASSPATH=awk4j.jar
%JAVA_HOME%\bin\jrunscript -cp awk4j.jar -l awk4j -e "BEGIN { print \"Hello World!\" }"
バッチ化する場合は、以下のようなコマンドを awk.bat として作成して、バッチと同じディレクトリに awk4j.jar ファイルを格納する。ちなみに、「%~dp0」は、バッチファイルのディレクトリを取得する記述。
@echo off
setlocal
set CLASSPATH=%~dp0awk4j.jar;%CLASSPATH%
%JAVA_HOME%\bin\jrunscript -cp %~dp0awk4j.jar -l awk4j %*
endlocal
同じように、JavaScript に変換して実行することもできる。
JavaScript の場合は、CLASSPATH 環境変数の設定は、いらないようだ。
ただし、Java と JavaScript では、実行時の挙動が異なるようだ!?
JavaScript での実行では、以下のコマンドは、同じ結果になるのだが、入力ファイルを指定しても、処理している様子がないし・・・例文で乗っている "1" とか "NF" のようなスクリプトも、JavaScript では、エラーになってしまうようだ。何か、指定方法などが間違っているのだろうか?
%JAVA_HOME%\bin\jrunscript.exe -cp awk4j.jar -l awk4j.JavaScript -e "BEGIN { print \"Hello World!\" }"
では、作成した awk.bat のコマンド例を示す。
ファイル指定で実行
awk -e "{ print $0 }" hoge.txt
パイプで実行。標準入力からデータを受け取る場合 /dev/stdin をファイル名に指定する。ここら辺の説明は、「言語仕様」リンク先でなされている。
type hoge.txt | awk -e "1" /dev/stdin
登録:
投稿 (Atom)