【悲報】3.0TBのHDDが逝く
久しぶりの更新ですが、特にネタは無く。いや、無くはないけどモチベーションがなかなか。
そういったわけでHDDが逝きました。暑さもあったけど、直前で変なことしちゃったからなぁ・・・。今回死んだのはバックアップ側なので問題無いですが。
問題だったのは某バックアップソフトを使ったからだけど、自分で作って運用したほうがいいかもしれない・・・。
【Raspberry Pi】apt-get updateで失敗する
何故かupdateに失敗する。
結論から言えばDNS解決ができていなかっただけなんですが。
$ sudo apt-get update
エラー http://mirrordirector.raspbian.org wheezy Release.gpg
'mirrordirector.raspbian.org' を解決できませんでした(略)
W: いくつかのインデックスファイルのダウンロードに失敗しました。これらは無視され るか、古いものが代わりに使われます。
で、resolv.confを見ると
$ view /etc/resolv.conf
nameserver 8.8.8.8
確かにOS設定時のDSNサーバを(面倒なので)8.8.8.8にしていた・・・
というわけで、上記設定をプロバイダ提供のDNS解決が変更し、リロード。
$ sudo vi /etc/resolv.conf
nameserver xxx.xxx.xxx.xxx
$ sudo /etc/init.d/networking reload
[....] Reloading network interfaces configuration...ifup: interface lo already configured
Waiting for br0 to get ready (MAXWAIT is 10 seconds).
done.
再度updateで無事実施可能。
$ sudo apt-get update
ヒット http://repository.wolfram.com stable Release.gpg(略)
【Raspberry Pi】外付けHDDの追加
ラズパイで外付けHDDを管理させます。
HDDは3.5インチの1.5TB(ST31500341AS)。玄人志向の外付けケースを使ってUSBケーブルで接続します。
1.外付けHDDのパーテーションの作成とフォーマット
余程のことがない限り、USBで接続すればラズパイで自動認識してくれます。
$ sudo fdisk -l
(略)
Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
パーテーション作成はコマンドでもできますが、今回はGUIでやります(特に意味はなし)。というわけで、GPartedをインストールします。インストールは事前に導入していたSynapticにて。
なお、今回はWindowsで接続しても大丈夫なようにNTFSで作ります。NTFSで作る場合は予めntfs-3gをインストールしないとダメです。
$ sudo apt-get install ntfs-3g
インストールが完了したら、
ラズパイのスタートメニュー?->「設定」->「GParted」を実行。
GPartedが起動したら、メニュー->「GParted()」->「デバイス(D)」->「/dev/sda1」を選択します。
/dev/sda1(外付けHDD)が見つかるため、パーテーションメニューからパーテーションを作ります。また、 フォーマット時はNTFSを選択します。ntfs-3gをインストールしていないと、NTFSを選択できないため、注意。
まぁ、GUIは直感的にわかると思うので、特に操作説明は書きません。
2.マウントの設定
マウントできるようにします。
$ sudo mkdir /mnt/hdd1
$ sudo mount /dev/sda1 /mnt/hdd1
しかし、これだと毎回マウントしないと行けないため、自動マウントをさせます。他の外付けHDDを接続することも想定し、UUID指定でマウントできるようにします。
UUIDは以下のコマンドで抽出。
$ sudo blkid /dev/sda1
/dev/sda1: UUID="XXXXXXXXXXXXX" TYPE="ntfs"
(追記)なお、以下のコマンドでも確認することが可能です。
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs XXXXXXXXXXXXX /mnt/hdd1
このUUIDを自動マウントセッティングします。一番最後の行に以下のように追加
$ sudo vi /etc/fstab
UUID="XXXXXXXXXXXXX" /mnt/hdd1 ntfs defaults 0 2
自動マウントされるかは再起動で確認しましょう。
→(追記)sudo mount -a を打つことで再起動せずに確認することも可能。
【2019/8/15追記】
上記の設定をした際、配下のグループやユーザを変えられない場合がある。その時には、fstabの設定を以下のように変更する。
※参考:【Linux】UbuntuでNTFS形式のファイルで所有者や権限が変更する方法 https://sekisuiseien.com/computer/11054/
$ sudo vi /etc/fstab
UUID="XXXXXXXXXXXXX" /mnt/hdd1 ntfs-3g defaults,permission 0 2
$ sudo mount -a
また、一括で グループ/ユーザを変える場合は以下の通り。
参考:ファイルやディレクトリのパーミッションを一括で置換したい https://qiita.com/takeshi81/items/48ea62eae2fc7f1cb2f0
$ sudo find /home/xxxx -type d -exec chmod 755 {} +
$ sudo find /home/xxxx -type f -exec chmod 644 {} +
【追記終わり】
3.HDD回転を自動で止める
参考サイト:
Raspberry PiでUSB外付けHDDの回転を自動で止める | Frog Code Works
sdparmをインストールします。
$ sudo apt-get install sdparm
動作確認は以下のコマンドで。
$ sudo sdparm --command=stop /dev/sda1
/dev/sda1: Initio ST31500341AS 3.01
動作用シェルスクリプトを作成(コピペ)。作成後に実行権限を付与。
$ sudo vi /usr/local/bin/usbhdd_spindown.sh
$ sudo chmod 755 /usr/local/bin/usbhdd_spindown.sh
起動時の シェル実行設定をします。
$ sudo vi /etc/rc.local
/usr/local/bin/usbhdd_spindown sda1 900 2>&1 | logger -t usbhdd_spindown &
【Raspberry Pi】リモートデスクトップ接続をxrdpで実現
WindowsPCからラズパイにアクセスさせるため、xrdpを導入します。
1.xrdpのインストール
以下のコマンドを実行。
$ sudo apt-get update
$ sudo apt-get install xrdp
2.日本語キーボードの入力対応
インストールさせたら日本語キーボード対応をさせるため、以下の対応を行う。
$ cd /etc/xrdp/
$ sudo wget http://w.vmeta.jp/temp/km-0411.ini
$ sudo ln -s km-0411.ini km-e0010411.ini
$ sudo ln -s km-0411.ini km-e0200411.ini
$ sudo ln -s km-0411.ini km-e0210411.ini
$ sudo service xrdp restart
3.iptablesの設定変更
ログイン用のポートと画面転送用のポートを開ける必要があります。
ログイン用ポートは/etc/xrdp/配下のxrdp.iniに記載されている。特に変更はしない。
画面転送用ポートはsesman.iniに記載されている。これも変更なしですが、UDPポートになるので注意。
$IPTABLES -A INPUT -p tcp -s $LOCALNET --dport 3389 -j ACCEPT
$IPTABLES -A OUTPUT -p tcp -d $LOCALNET --sport 3389 -j ACCEPT
$IPTABLES -A INPUT -p udp -s $LOCALNET --dport 3350 -j ACCEPT
$IPTABLES -A OUTPUT -p udp -d $LOCALNET --sport 3350 -j ACCEPT
$LOCALNETは変数ですが、自宅内で使用しているネットワークアドレス帯域を指定。
4.リモートデスクトップ接続からの接続
スタートメニュー等からリモートデスクトップ接続を実施します。
コンピュータのところにはアクセスするラズパイのIPアドレスかホスト名を。
ラズパイでxrdpが正常に動作していれば、以下の画面が出る。
この時点で、例えば「@」がキーボード通りに入力できない場合は、日本語キーボード対応がちゃんとできていないので注意。
usernameとpasswordはLinuxユーザのそれを使う。
ログインが正常であれば、以下のようにコネクションログが出力され、無事にラズパイのデスクトップ画面が出る。
【Windows】VirtualBoxのvdiのコピー
VirtualBoxで仮想HDDを作った際に、それをコピーして同一環境を別々に動かしたいときですが、普通のコピペでは、コピー先のファイルがVirtualBoxでは読み込めません。UUIDなるものがコピー元と同一になるので、それが原因のようです。
なので、以下のコマンドをコマンドプロンプトで実行します。
実行環境はwin8.1です。
今回はlinuxBeanをコピーします。
cd C:\Program Files\Oracle\VirtualBox
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi E:\linuxbean01.vdi E:\linuxbean02.vdi
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
これでEドライブ配下にlinuxbean02.vdiができているため、VirtualBoxで読み込めば完了。
【LIVA】【Ubuntu server14.04】Julius-plusで家電を操作
概要
すでに我が家で稼働済みですが、ちゃんとまとめていなかったため、書いておきます。
Juliusについてはこちら
赤外線モジュールについてはこちら
1.Julius-plusの導入
Julius-plusはrti7743さんがJuliusを元に認識向上を向上させたものです。
(詳しくはルールベースjuliusの誤認識対策にSVMを利用してみよう - お前の血は何色だ!! 4)
ありがたいことにソースを展開して頂いてます。
https://github.com/rti7743/rtilabs/tree/master/files/asobiba/juliustest/julius-4.2.1/julius-plus
上記リンク先から一つ上に移動すると、Julius-plusが入っているJulius-4.2.1のセットが置いてあり、ReadMeとしてインストール方法が記載されています。
$ sudo apt-get install flex
$ sudo apt-get install g++
$ sudo apt-get install 'libboost*-dev'
$ sudo apt-get install libboost-thread-dev
$ sudo apt-get install binutils-dev
$ sudo apt-get install libboost-system-dev
$ sudo apt-get install libasound2-dev
$ ./configure --with-mictype=alsa
$ make
$ cd julius-plus
$ make$ ./julius-plus
(略)
マイクで喋ってください。エンターキーを押すと、プログラムを終了します。
----コマンド----(略)
<<< please speak >>>
音声入力状態になります。
2.Julius-plusを自分の環境に合わせる
音声入力で家電を操るには、以前のエントリーでも書いたとおり赤外線学習リモコンを利用します。
そのため、Julius-plusのソースを弄ります。
といってもいじるソースファイルは3つだけです。
①JuliusPlus.cpp
JuliusPlusメソッドに、Julius-plus起動時のメニューが記載されています。ここの記載自体はユーザ入力補助の表示なので、実際いじらなくても問題なかったりしますが、一応やりましょう。
②testmic.jconf
このファイルはJulius-plus起動時のオプションが記載されています。
私の環境では「-nostrip」を設定しておくと都合がいいので、追記しておきます。
詳しくは→【LIVA】【Ubuntu server14.04】Juliusを使いたい(Juliusセッティング完了編)
③main.cpp
肝になるファイルです。すでにテンプレがあると思いますが、認識させたい文言とそれに対応する動作(処理)を記載します。
サンプルとして私の場合は以下のようになります。
julius.AddCommandRegexp("しょうめい(きどう|オン|つけて)",CallbackDataStruct([=](){
std::cout << "###RUN>照明をつけます" << std::endl;//irMagicianのコマンドを実行
system("sudo python ~/irmcli/irmcli.py -p -f ~/irmcli/right_light_on.json");
}));julius.AddCommandRegexp("しょうめい(ていし|オフ|けして)",CallbackDataStruct([=](){
std::cout << "###RUN>照明を消します" << std::endl;//irMagicianのコマンドを実行
system("sudo python ~/irmcli/irmcli.py -p -f ~/irmcli/right_light_off.json");
}));
これだけです。irMagicianのコマンド実行は
【LIVA】【Ubuntu server14.04】赤外線学習リモコンを使う - 技術メモ
にて記載していますが、これを音声入力時に自動実行させるだけです。
その後の処理で音声ファイルを再生し、「照明をつけます」といったものをゆっくりに喋らせると面白いかもしれませんね。
ソースの変更が終わったら、必ずmakeを再実行しましょう。
3.screenコマンドによる仮想画面で常時実行
Julius-plus起動中は他の操作ができません。本体のターミナルならまだしも、Teraterm等で遠隔ログインした場合はTeraterm終了と同時にセッションが切れてしまうため、実行させ続ける事ができません。
バックグラウンドでうまく動かせればよかったのですが、&による実行はうまく動かなかったため、screenで作成した仮想画面上で実行させます。
仮想画面上で動作させていれば、Teratermの接続を切っても裏で動かし続けることができます。
やり方は簡単。
$ screen
説明文が出てきますが、Enter。仮想画面ができます。
この状態でJulius-plusを起動します。起動方法は1の記載のとおりです。
起動が確認できたら仮想画面をデタッチします。
画面上で
[Ctrl+a]を入力後に[d]を入力
[detached from 4777.pts-3.サーバ名
これでJulius-plusを動かしたまま別の操作ができるようになります。
Julius-plusの画面をアタッチ(呼び出す)には
$ screen -ls
There are screens on:
4777.pts-3.サーバ名 (2014年12月06日 22時40分58秒) (Detached)
1 Sockets in /var/run/screen/S-ユーザ名.
$ screen -r 4777
とすればよいです。仮想画面を削除する場合は
[Ctrl+d]を入力
[screen is terminating]
と出て削除しつつ、元の画面に戻ります。