「RaspberryPi」タグアーカイブ
Raspberry Pi のディスク使用量が 100%
Raspberry Pi のディスク使用量が、いつの間にか 100% になっていた。
原因はログ。
ずーと動かしっぱなしにしていたので、ログロテートの設定で大量のログが出来ていた。
慌ててログロテートの設定を変更して余分なログを消したら、使用量 30% まで減りました。
所詮は 8G のマイクロSD なので、1TBのハードディスクとは同列には扱えんわな。
その後の顛末。
後日、見てみたらまたまた 100% になっていた。
でも、ログを消しても 100% が変わらない。
調べてみると、プロセスがファイルを保持していると、ファイルを消しても領域が解放されない罠(T_T)。
リブートしたら 30% に戻った。
ラズパイに稼働率 スリーナイン(99.9%) とか全く求めていないので、夜間に reboot するクーロンを仕掛けておこうっと。
その後のその後の顛末。
mail のエラーログが大きかったので調べてみると sensible-mda が no such file or directory になっていた。
確かに /usr/sbin/sensible-mda がない。
[code lang=”bash”]
apt-get install sensible-mda
[/code]
を実行してインストールしたら、エラーはなくなった。
また、どうやら全体を再起動しなくても rsyslogd だけリブートすれば、ファイルは一時的に開放されるっぽいので crontab で深夜3時にしかける。
[code lang=”bash”]0 3 * * * /etc/init.d/rsyslog restart[/code]
それと root のメールが鬼の様に溜まっていたのでそれを消して、スクリプト実行時にメールが飛ばないように以下を追加
[code lang=”bash”]0 3 * * * /etc/init.d/rsyslog restart >/dev/null 2>&1[/code]
これでしばらく様子見。
その後の顛末
自動的に、カーネルの更新もするようにスクリプト組んでいたらいつの間やらまた100%に・・・
いろいろ調査した結果、/lib/modules の下に過去のバージョンのモジュール群が消えもせずに
残留していて、それが容量を食いつぶしていた。
最新バージョン以外のモジュールディレクトリを rm -Rf で全て消して
何とか 100% 状態からは脱しました。
Raspbian の cron の editor を変更
Raspbian で crontab -e を実行するとデフォルトのエディタでは nano が立ち上がる。
これを vi に変更するには
[code lang=”bash”]
pi@raspberrypi:~# sudo update-alternatives –config editor
alternative editor (/usr/bin/editor を提供) には 3 個の選択肢があります。
選択肢 パス 優先度 状態
————————————————————
* 0 /bin/nano 40 自動モード
1 /bin/ed -100 手動モード
2 /bin/nano 40 手動モード
3 /usr/bin/vim.tiny 10 手動モード
現在の選択 [*] を保持するには Enter、さもなければ選択肢の番号のキーを押してください: 3
update-alternatives: /usr/bin/editor (editor) を提供するために 手動モード で /usr/bin/vim.tiny を使います
[/code]
これで、エディタが vi になる。
mpd インターネットラジオ クライアント
簡単操作でインターネットラジオが聴きたい。
要件)
- Raspberry pi などの Linux マシンにMusic Player Daemon(以下 mpd)を入れるとインターネットラジオが聴けます。
- 音楽データがあればジュークボックスでも使えますが、インターネットラジオを聴くだけなら複雑な機能は必要ありません。
- mpd クライアントも多数でていますが、インストールも複雑で、どれも大げさなものばかり。
→ なのでインターネットラジオ操作に特化した簡単 mpd クライアントを作りました。
特徴
- インストール
1つファイル置くだけ。
リンク先の jsdo.it の HTML部分をコピーして、phpファイル(index.php など)で保存して、サーバのドキュメントルート(標準では /var/www)に置いてください。 - スマホやPCからブラウザ経由で操作
スマホやPCを使ってサーバにアクセスすると操作画面が表示されます。 - インターネットラジオ視聴に特化した簡単機能
基本機能だけを実装。
ジュークボックス機能はありません。
コード取得はこちらから
使い方
- セレクトボックスでラジオ局を選択 (mpc add url)
- 停止 (mpc stop)
- 再生 (mpc play)
- ボリュームダウン (mpc volume -2)
- ボリュームアップ (mpc volume +2)
- 情報更新 (mpc status)
- 情報表示オフ
詳細設定
- ラジオ局のプリセット
お好みのラジオステーションは、ソースファイル中の radiostation 配列に設定してください。
良いラジオ局があったら教えてください。 - ボリューム目盛
初期ではボリュームは0~100%の間で 2% 単位で上下します。この値を変更したい場合は、ソースファイル中の volscale の値を変更してください。
必須条件
- Webサーバ + php がサーバにインストールされている必要があります。必ずしも raspberry pi である必要はありません。
- mpd がインストールされている必要があります。
- MARQUEEタグ対応のブラウザでないと情報が上手く表示されない場合があります。
補足
- Raspberry piなら予算1万円以内で
Raspberry piを使えば予算1万円以内でインターネットラジオが作れます。 - Beaglebone black + DTS でも動作しました。Beaglebone black は音声出力がないので、別途 DTS が必要です。
- jQuery Mobile と Ajaxインターフェースは jQuery Mobile、コマンドは Ajax で発行しています。
Raspberry pi にVNCサーバを入れる。
VNCサーバをインストールして起動する。
[code lang=”bash”]
sudo apt-get install tightvncserver[/code]
[code lang=”bash”]tightvncserver[/code]
パスワードを聞かれるので入力する。
ブートスクリプトを作る。
sudo vi /etc/init.d/vncboot
[code lang=”bash”]
##
# BEGIN INIT INFO# Provides: vncboot
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start VNC Server at boot time# Description: Start VNC Server at boot time.### END INIT INFO
#! /bin/sh
# /etc/init.d/vncbootUSER=piHOME=/home/piexport USER HOME
case “$1” in
start)
echo “Starting VNC Server”
#Insert your favoured settings for a VNC session
su $USER -c ‘/usr/bin/vncserver :1 -geometry 1600×900 -depth 24’
;;
stop)
echo “Stopping VNC Server”
su $USER -c ‘/usr/bin/vncserver -kill :1’
;;
*)
echo “Usage: /etc/init.d/vncboot {start|stop}”
exit 1
;;
esac
exit 0
[/code]
実行権限を与える。
[code lang=”bash”]chmod 755 /etc/init.d/vncboot[/code]
自動起動登録。
[code lang=”bash”]update-rc.d vncboot defaults[/code]
Windows用VNCクライアント(RealVNC Viewer)をインストールする。
接続する際のVNCサーバ名は、IPアドレス::5901 と指定して接続すれば画面が表示される。
自動起動登録できない場合
1 2 3 |
root@raspberrypi:~# update-rc.d vncboot defaults update-rc.d: using dependency based boot sequencing insserv: warning: script 'vncboot' missing LSB tags and overrides |
というエラーが出る場合は、初期インストールされているwolfram(プログラミング系と数学系のソフトウェアのパッケージ)の影響なので、簡単な対処法はアンインストールしてしまう。
1 |
sudo apt-get remove wolfram-engine |
VNC接続でエラー
デスクトップ(LXDE)を起動した際に GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: Cannot determine user of subject というエラーメッセージが表示された場合、以下を修正して vncserver を再起動してから再接続する。
/etc/xdg/autostart/lxpolkit.desktop
1 2 3 |
NotShowIn=GNOME;KDE; ↓ NotShowIn=GNOME;KDE;LXDE |
Raspberry Pi を無線化
Wi-fi ドングルの WLI-UC-GNM を使った。
まずUSBポートに無線LANアダプタをさして、Raspbianを起動。sudo lsusb で見るとで正しく認識されている。
1 |
Bus 001 Device 004: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070] |
また、sudo ifconfig で見ると、Wi-fi は、wlan0 として認識されている。
SSID と PASSPHRASE(実際の環境に合わせて書き変えること) を以下の様に指定する。
sudo wpa_passphrase SSID PASSPHRASE >> /etc/wpa_supplicant/wpa_supplicant.conf
1 2 3 4 |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1network={ ssid="SSID" #psk=PASSPHRASE psk=英数字の羅列 } |
の様に出力されるので、以下の様に修正
1 2 3 4 5 6 7 8 9 |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1network={ proto=WPA key_mgmt=WPA-PSK pairwise=CCMP group=CCMP priority=2 ssid="SSID" psk=英数字の羅列 } |
起動時に無線LANに接続するよう設定。
sudo vi /etc/network/interfaces
1 2 3 4 5 6 7 8 9 10 11 12 |
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 #iface wlan0 inet manual #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp |
設定が完了したら再起動して、wlan0 から接続できればOK。
その後の顛末:
dhcp だと、リース時間が切れるとつながらなくなる罠。
- リース時間をめっちゃ長くする。
- 一定時間で再接続する。
- 固定IPアドレスに変更する。
などの対応が必要だね。
その後のその後の顛末:
- dhcpのリース時間を長くした。
- dhcpのリースをマックアドレスで固定した。
なのに切れる。
どうやらパワーマネジメントがオンになっていて、無線LANが切れると再接続しないらしい。
/etc/network/interfaces に
1 |
wireless-power off |
と書くと、パワーマネジメント機能がオフになるらしい。
設定して再起動したら、Power Management が off になったよ。
1 2 3 4 5 6 7 8 9 10 11 |
root@raspberrypi:/etc/apt# iwconfig wlan0 IEEE 802.11bgn ESSID:"xxxxxxxxxxx" Mode:Managed Frequency:2.462 GHz Access Point: xx:xx:xx:xx:xx:xx Bit Rate=65 Mb/s Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Encryption key:off Power Management:off Link Quality=61/70 Signal level=-49 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:92 Invalid misc:27 Missed beacon:0 lo no wireless extensions.eth0 no wireless extensions. |
それでも切れてしまったので、今度は無線LANを dhcp から固定アドレスに変更
sudo vi /etc/network/interfaces
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
auto lo iface lo inet loopback allow-hotplug eth0 iface eth0 inet dhcp auto wlan0allow-hotplug wlan0 #iface wlan0 inet manual #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface wlan0 inet dhcp iface eth0 inet static address 192.168.0.3 netmask 255.255.255.0 gateway 192.168.0.1 wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp |
sudo vi /etc/resolv.conf
1 |
nameserver 192.168.0.1 |
これでも、切れてしまった。
クライアントして入り切りするのなら良いけれど、サーバ用途で常時接続に無線LANを使うのは難しいってことかなあ。
解決しました。(力技だけど)いろいろ調べると無線が切断されると再接続されないのが問題らしい。なので、切れたら再接続するスクリプトを組んで cron に登録してみた。
/home/pi/wlan0restart.sh
1 2 3 4 5 6 7 |
#!/bin/sh res=`/sbin/ifconfig wlan0 | /bin/grep "inetアドレス:"` ←① echo "$res" if [ "$res" = "" ]; then sudo /etc/init.d/networking restart logger "networking restarted" fi |
※①は英語環境だと ”inet addr:” とかになるので適宜修正してね。
1 |
*/5 * * * * /home/pi/wlan0restart.sh |
その後、/var/log/messages を見てみると
1 2 3 4 5 |
May 14 07:05:03 raspberrypi kernel: [69916.507287] wlan0: associated May 14 07:05:04 raspberrypi kernel: [69916.647761] ieee80211 phy0: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 0 in queue 2 May 14 07:05:04 raspberrypi kernel: [69916.647860] ieee80211 phy0: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 0 in queue 2 May 14 07:05:04 raspberrypi kernel: [69916.647886] ieee80211 phy0: rt2800usb_entry_txstatus_timeout: Warning - TX status timeout for entry 0 in queue 2 May 14 07:05:04 raspberrypi logger: networking restarted |
と正しく再起動していた。
なるほど、原因はタイムアウトだったのね。それ程不安定な環境じゃないと思うんだけどなあ。
でも、これで固定IPからDHCPに戻してもなんとかなりそうだね。
Raspberry Pi の mpd クライアントを作ったった
Raspberry pi とか BeagleBone Black でmpd をインストールしてもコマンドラインからしか操作できない。mpdクライアントも多々出ているが、どれも大げさなものばかりだったのでシンプルな MPD クライアントを作ったった。
- mpd がインストールされていることが前提
- 簡単操作・シンプルインターフェース・単機能(選局、スタートストップ、ボリューム調整のみ)
- ラジオ局はソース内にプリセット(なんとかしたい)
- plsファイル解析機能付き
- 1ファイルで動作
- raspberry pi では動作確認しました。
今後
局とかは、SHOUTcast を解析したりして抜いてこれればいいね。 プリセット情報も、sqlite とかの DB で編集・管理できればいいね(fork者に期待)ソースを php ファイルとして保存すれば使えます。