ラベル VortexBox の投稿を表示しています。 すべての投稿を表示
ラベル VortexBox の投稿を表示しています。 すべての投稿を表示

2015/03/22

VortexBoxにNICを追加して固定アドレスを割り当てる

VortexBox 2.2にNICを追加し固定アドレスを割り当てた際のメモ。

以下のサイトを参考にしました。
4.2. Interface Configuration Files
◇ネットワークの詳細設定(CentOS6)◇初心者のためのLinuxサーバー構築講座(CentOS 自宅サーバー対応)☆お便利サーバー.com☆


今回追加されたNICはeth1になっています。


(1) MACアドレスを調べる
ifconfigコマンドで調べました。

# ifconfig

~省略~

eth1      Link encap:Ethernet  HWaddr MACアドレス

~省略~


(2) IPアドレスなどを設定する
/etc/sysconfig/network-scripts 以下に ifcfg-eth1を追加し下記の内容を記述しました。

DEVICE=eth1
HWADDR="MACアドレスを記述"
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=IPアドレスを記述
NETMASK=255.255.255.0
GATEWAY=ゲートウェイアドレスを記述
DNS1=DNSサーバアドレスを記述


再起動後に追加したNICに設定したアドレスが有効となりました。

2013/11/17

PlugPlayerからVortexBoxのDLNAサーバーが見つからない

ウチの環境だけかもしれませんが、VortexBoxのDLNAサーバがiOS用DMCのPlugPlayerから見りません。

そこで「デバイスを手動で追加」から下記のURLを追加したら見つかり、使えるようになりました。

http://VortexBoxのアドレス:8200/rootDesc.xml


VortexBoxのDLNAサーバはMiniDLNAというらしいのですが、そのデバイス情報が記述されているファイルを取得するためにどこにアクセスすれば良いのかなかなか分かりませんでした。

他のサーバではDeviceDescription.xmlとかdescription.xmlだったりするようです。多分。


ちなみにLogitech Media. Serverにプラグインで入っているUPnP/DLNA Media Interfaceの方は下記を追加すれば良いようです。

http://VortexBoxのアドレス:9000/plugins/UPnP/MediaServer.xml

2013/10/09

VortexBoxでMPDがビルドできない? その2

VortexBoxでMPDがビルドできない?」ではyumコマンドでインストールできなかったパッケージは無視していたのですが、今回はこれらをソースからインストールします。

VortexBoxインストール直後からMPD最適化パッチを当てるまでの手順」の「(3) MPDのビルドに必要なものをそろえる」の手順まで終えていることが前提です。

(1) MPDのインストールに必要なパッケージを取得
2013/10/9 の時点では幾つか取得できないパッケージがあるようです。

[vortexbox.localdomain ~]# sudo yum install autoconf automake alsa-lib-devel audiofile-devel avahi-glib-devel bzip2-devel faad2-devel ffmpeg-devel flac-devel fluidsynth-devel jack-audio-connection-kit-devel libao-devel curl-devel libcdio-devel libffado-devel libid3tag-devel libmad-devel libmms-devel libmodplug-devel musepack-tools-devel libmusicbrainz-devel libogg-devel libsamplerate-devel libsidplay-devel libshout-devel libvorbis-devel mikmod-devel mpg123-devel pulseaudio-lib-devel sqlite-devel systemd-units twolame-devel wavpack-devel wildmidi-devel zlib-devel zziplib-devel libsndfile-devel 

〜 省略 〜

パッケージ faad2-devel は利用できません。
パッケージ ffmpeg-devel は利用できません。
パッケージ libmad-devel は利用できません。
パッケージ libmms-devel は利用できません。
パッケージ musepack-tools-devel は利用できません。
パッケージ systemd-units-37-25.fc16.i686 はインストール済みか最新バージョンです
パッケージ twolame-devel は利用できません。

〜 省略 〜

完了しました!


(2) (1)で取得できなかったパッケージのソースファイルを入手する
LAMEも必要のようなので取得します。

[vortexbox.localdomain ~]# mkdir ~/src/
[vortexbox.localdomain ~]# cd ~/src
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/f/faad2/faad2_2.7.orig.tar.gz
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/libm/libmad/libmad_0.15.1b.orig.tar.gz
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/libm/libmms/libmms_0.6.2.orig.tar.gz
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/libm/libmpc/libmpc_0.1~r459.orig.tar.gz
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/t/twolame/twolame_0.3.13.orig.tar.gz
[vortexbox.localdomain src]# wget http://archive.ubuntu.com/ubuntu/pool/universe/l/lame/lame_3.99.5+repack1.orig.tar.gz
[vortexbox.localdomain src]# wget http://www.ffmpeg.org/releases/ffmpeg-1.2.4.tar.bz2


(3) faad2のインストール

[vortexbox.localdomain src]# tar xzvf faad2_2.7.orig.tar.gz 
[vortexbox.localdomain src]# cd faad2-2.7/
[vortexbox.localdomain faad2-2.7]# ./configure --prefix=/usr/local
[vortexbox.localdomain faad2-2.7]# make
[vortexbox.localdomain faad2-2.7]# sudo make install
[vortexbox.localdomain faad2-2.7]# sudo ldconfig
[vortexbox.localdomain faad2-2.7]# cd ..
[vortexbox.localdomain src]# 


(4) libmadのインストール
gcc-c++が必要なのでまず入手します。

[vortexbox.localdomain src]# sudo yum install gcc-c++

[vortexbox.localdomain src]# tar xzvf libmad_0.15.1b.orig.tar.gz 
[vortexbox.localdomain src]# cd libmad-0.15.1b/
[vortexbox.localdomain libmad-0.15.1b]# ./configure --prefix=/usr/local

このままmakeすると途中でエラーになってしまいました。
なので、Makefileを修正してmakeが通るようにします。
(こんなことしていいのか分かりませんが…)

CFLAGSで始まる行から--fforce-memを削除します。

[vortexbox.localdomain libmad-0.15.1b]# vi Makefile

CFLAGS = -Wall -march=i486 -g -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations gmove -fschedule-insns2 -fstrength-reduce

の行を下記のように-fforce-memを削除します。

CFLAGS = -Wall -march=i486 -g -O -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations gmove -fschedule-insns2 -fstrength-reduce

[vortexbox.localdomain libmad-0.15.1b]# sudo make install
[vortexbox.localdomain libmad-0.15.1b]# sudo ldconfig
[vortexbox.localdomain libmad-0.15.1b]# cd ..
[vortexbox.localdomain src]# 


(5) libmmsのインストール

[vortexbox.localdomain src]# tar xzvf libmms_0.6.2.orig.tar.gz 
[vortexbox.localdomain src]# cd libmms-0.6.2/
[vortexbox.localdomain libmms-0.6.2]# ./configure --prefix=/usr/local
[vortexbox.localdomain libmms-0.6.2]# make
[vortexbox.localdomain libmms-0.6.2]# sudo make install
[vortexbox.localdomain libmms-0.6.2]# sudo ldconfig
[vortexbox.localdomain libmms-0.6.2]# cd ..
[vortexbox.localdomain src]# 


(6) libmpcのインストール
musepackとはこれで良いのか疑問ですがとりあえずインストールします。

[vortexbox.localdomain src]# tar xzvf libmpc_0.1~r459.orig.tar.gz 
[vortexbox.localdomain src]# cd libmpcs-0.1/
[vortexbox.localdomain libmpcs-0.1]# ./configure --prefix=/usr/local
[vortexbox.localdomain libmpcs-0.1]# make
[vortexbox.localdomain libmpcs-0.1]# sudo make install
[vortexbox.localdomain libmpcs-0.1]# sudo ldconfig
[vortexbox.localdomain libmpcs-0.1]# cd ..
[vortexbox.localdomain src]# 


(7) twolameのインストール

[vortexbox.localdomain src]# tar xzvf twolame_0.3.13.orig.tar.gz 
[vortexbox.localdomain src]# cd twolame-0.3.13/
[vortexbox.localdomain twolame-0.3.13]# ./configure --prefix=/usr/local
[vortexbox.localdomain twolame-0.3.13]# make
[vortexbox.localdomain twolame-0.3.13]# sudo make install
[vortexbox.localdomain twolame-0.3.13]# sudo ldconfig
[vortexbox.localdomain twolame-0.3.13]# cd ..
[vortexbox.localdomain src]# 


(8) FFMPEGの入手とインストール
まずFFMPEGのビルドに必要なyasm-develをインストールします。

[vortexbox.localdomain src]# sudo yum install yasm-devel

FFMPEGのインストールをします。

[vortexbox.localdomain src]# tar xjvf ffmpeg-1.2.4.tar.bz2
[vortexbox.localdomain src]# cd ffmpeg-1.2.4/
[vortexbox.localdomain ffmpeg-1.2.4]# ./configure --enable-shared --prefix=/usr/local
[vortexbox.localdomain ffmpeg-1.2.4]# make
[vortexbox.localdomain ffmpeg-1.2.4]# sudo make install
[vortexbox.localdomain ffmpeg-1.2.4]# sudo ldconfig
[vortexbox.localdomain ffmpeg-1.2.4]# cd ..
[vortexbox.localdomain src]# 


(9) LAMEのインストール

[vortexbox.localdomain src]# tar xzvf lame_3.99.5+repack1.orig.tar.gz
[vortexbox.localdomain src]# cd lame-3.99.5+repack1/
[vortexbox.localdomain lame-3.99.5+repack1]# ./configure --prefix=/usr/local
[vortexbox.localdomain lame-3.99.5+repack1]# make
[vortexbox.localdomain lame-3.99.5+repack1]# sudo make install
[vortexbox.localdomain lame-3.99.5+repack1]# sudo ldconfig
[vortexbox.localdomain lame-3.99.5+repack1]# cd ..
[vortexbox.localdomain src]# 


(10) MPDのインストール
・MPDのソースと最適化パッチを取得する

[vortexbox.localdomain src]# mkdir mpd
[vortexbox.localdomain src]# cd mpd
[vortexbox.localdomain mpd]# wget http://www.musicpd.org/download/mpd/0.17/mpd-0.17.4.tar.xz
[vortexbox.localdomain mpd]# wget http://www.symphonic-net.com/kubotayo/cgi-bin/downlog.cgi?edata/mpd-0.17git-20120226rtopt.diff.gz

・MPDのソースを解凍しパッチを当てる

[vortexbox.localdomain mpd]# tar xJvf mpd-0.17.4.tar.xz
[vortexbox.localdomain mpd]# cd mpd-0.17.4/
[vortexbox.localdomain mpd-0.17.4]# zcat ../mpd-0.17git-20120226rtopt.diff.gz |patch -p1
patching file Makefile.am
Hunk #1 succeeded at 221 (offset 1 line).
Hunk #2 succeeded at 402 with fuzz 2 (offset 10 lines).
patching file configure.ac
Hunk #3 succeeded at 1584 (offset 8 lines).
patching file src/conf.c
Hunk #1 succeeded at 102 (offset -1 lines).
patching file src/conf.h
patching file src/decoder_thread.c
Hunk #2 succeeded at 464 (offset 4 lines).
patching file src/main.c
Hunk #2 succeeded at 314 (offset -3 lines).
Hunk #3 succeeded at 324 (offset -3 lines).
Hunk #4 succeeded at 381 (offset -3 lines).
Hunk #5 succeeded at 487 (offset -3 lines).
patching file src/output_internal.h
patching file src/output_thread.c
Hunk #1 succeeded at 32 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 584 (offset 5 lines).
patching file src/player_thread.c
Hunk #2 succeeded at 1087 (offset 27 lines).
patching file src/rt_opt.c
patching file src/rt_opt.h
patching file src/update.c
Hunk #1 succeeded at 33 (offset 2 lines).
Hunk #2 succeeded at 76 (offset 5 lines).

・MPDをビルドし、インストールする
./configure時にPKG_CONFIG_PATH=/usr/local/lib/pkgconfigを指定しないと途中でエラーになってしまいました。

[vortexbox.localdomain mpd-0.17.4]# ./autogen.sh
[vortexbox.localdomain mpd-0.17.4]# PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --enable-wildmidi --enable-fluidsynth --enable-mikmod --enable-bzip2 --enable-zzip --enable-iso9660 --enable-pipe-output --enable-lastfm --enable-rtopt --prefix=/usr/local

〜 省略 〜

########### MPD CONFIGURATION ############

Archive support:
        (+bzip2) (+ISO9660) (+ZIP) 
Autodiscovery support:
        (+Avahi) (-Bonjour) 
Client support:
        (+IPv6) (+TCP) (+UNIX Domain Sockets) 
File format support:
        (+AAC) (-C64 SID) (+FFMPEG) (+FLAC) (+FluidSynth) (-GME) (+libsndfile) 
        (+MikMod) (+MODPLUG) (+MAD) (+MPG123) (+MP4) (+Musepack) 
        (-OggTremor) (+OggVorbis) (+WAVE) (+WavPack) (+WildMidi) 
Other features:
        (+libsamplerate) (+inotify) (+SQLite) (+rtopt) 
Metadata support:
        (+ID3) 
Playback support:
        (+ALSA) (-FFADO) (+FIFO) (+File Recorder) (+HTTP Daemon) (+JACK) 
        (+libao) (-Media MVP) (+OSS) (-OpenAL) (-OS X) (+Pipeline) 
        (+PulseAudio) (-ROAR) (+SHOUTcast) (-Solaris) (-WinMM) 
Streaming encoder support:
        (+FLAC) (+LAME) (+Ogg Vorbis) (+TwoLAME) (+WAVE) 
Streaming support:
        (+CDIO_PARANOIA) (+CURL) (-Despotify) (+Last.FM) (-Soundcloud) 
        (+MMS) (-SOUP) 

##########################################

〜 省略 〜

[vortexbox.localdomain mpd-0.17.4]# make
[vortexbox.localdomain mpd-0.17.4]# sudo make install

ここでインストールしたmpdを起動しようとしたところFFMPEG関連のライブラリが見つからないとのエラーが出ました。

そこで、/etc/ld.so.confに/usr/local/lib の記述を追加します。

[vortexbox.localdomain mpd-0.17.4]# sudo vi /etc/ld.so.conf
/usr/lib/nvidia-graphics-304.51
include ld.so.conf.d/*.conf
/usr/local/lib

[vortexbox.localdomain mpd-0.17.4]# sudo ldconfig


後は「VortexBoxインストール直後からMPD最適化パッチを当てるまでの手順」の「(7) MPDの起動スクリプトを修正する」の手順から行えば終了です。

2013/09/16

VortexBoxでMPDがビルドできない?

以前書いた下記の記事へ頂いたコメントで気付いたのですが、2013/9/16の時点では記事の手順ではMPDのビルドに失敗するようです。
VortexBoxインストール直後からMPD最適化パッチを当てるまでの手順

先の記事では次のコマンドを実行することでMPDのビルドに必要なパッケージをインストールしていたのですが、どうやら現在はインストール出来無いようです。

[vortexbox.localdomain mpd]# sudo yum-builddep mpd

./autogen.shを実行する前に必要なパッケージを手動でインストールすれば良いのですが、全ては分かりませんでした。

確認は仮想PCのテスト環境でしか行なっていないため、実際の音出し等は出来ていません。

[vortexbox.localdomain ~]# sudo yum install autoconf automake alsa-lib-devel audiofile-devel avahi-glib-devel bzip2-devel faad2-devel ffmpeg-devel flac-devel fluidsynth-devel jack-audio-connection-kit-devel libao-devel curl-devel libcdio-devel libffado-devel libid3tag-devel libmad-devel libmms-devel libmodplug-devel musepack-tools-devel libmusicbrainz-devel libogg-devel libsamplerate-devel libsidplay-devel libshout-devel libvorbis-devel mikmod-devel mpg123-devel pulseaudio-lib-devel sqlite-devel systemd-units twolame-devel wavpack-devel wildmidi-devel zlib-devel zziplib-devel libsndfile-devel

(2013/09/18 追記)
インストールするパッケージを追加。
下記の./configureの結果も合わせて変更。

いくつか取得出来無いパッケージがあるようです。
(2013/09/18 追記終了)

上記のパッケージをインストール後、autogen.shとconfigureを実行したところ、次のような結果になりました。

[vortexbox.localdomain mpd-0.17.4]# ./autogen.sh

~省略~

[vortexbox.localdomain mpd-0.17.4]# ./configure --enable-wildmidi --enable-fluidsynth --enable-mikmod --enable-bzip2 --enable-zzip --enable-iso9660 --enable-pipe-output --enable-lastfm --enable-rtopt --prefix=/usr/local

~省略~

########### MPD CONFIGURATION ############

Archive support:
        (+bzip2) (+ISO9660) (+ZIP) 
Autodiscovery support:
        (+Avahi) (-Bonjour) 
Client support:
        (+IPv6) (+TCP) (+UNIX Domain Sockets) 
File format support:
        (-AAC) (-C64 SID) (-FFMPEG) (+FLAC) (+FluidSynth) (-GME) (+libsndfile) 
        (+MikMod) (-MODPLUG) (-MAD) (+MPG123) (-MP4) (-Musepack) 
        (-OggTremor) (+OggVorbis) (+WAVE) (+WavPack) (+WildMidi) 
Other features:
        (+libsamplerate) (+inotify) (+SQLite) (+rtopt) 
Metadata support:
        (+ID3) 
Playback support:
        (+ALSA) (-FFADO) (+FIFO) (+File Recorder) (+HTTP Daemon) (+JACK) 
        (+libao) (-Media MVP) (+OSS) (-OpenAL) (-OS X) (+Pipeline) 
        (+PulseAudio) (-ROAR) (+SHOUTcast) (-Solaris) (-WinMM) 
Streaming encoder support:
        (+FLAC) (-LAME) (+Ogg Vorbis) (-TwoLAME) (+WAVE) 
Streaming support:
        (+CDIO_PARANOIA) (+CURL) (-Despotify) (+Last.FM) (-Soundcloud) 
        (-MMS) (-SOUP) 

##########################################

~ 省略 ~


まだ必要なパッケージのインストールが不十分のようですが、今のところ分かっているのはここまでです。

この後、makeが通ることは確認しました。

2013/08/09

VortexBoxで外付けUSBディスクが自動でマウントされるようにする

めんどくさくて行っていなかった、外付けUSBディスクを自動でマウントされるようにした際のメモです。

以下ではroot権限が必要なところではsudoコマンドを使用しています。


・autofsをインストールする

# sudo yum install autofs

~ 省略 ~

Total download size: 463 k
Installed size: 3.2 M
Is this ok [y/N]: y

~ 省略 ~


・UUIDを調べる

autofsで自動マウントしたいディスクに設定されているUUIDを調べます。

autofsの設定では/dev/sdb1などを指定して自動でマウントするように出来るのですが、仮に他のUSBディスクと同時に利用しようとした際に本来自動でマウントしたいディスクではない方がマウントされてしまうことを防ぐため、UUIDを指定して自動マウントするようにします。

私の環境では、自動でマウントしたいUSBディスクはext4でフォーマットされています。

私の環境では自動でマウントしたいディスクは/dev/sdb1になっていますが、環境によっては違う可能性があります。

# sudo blkid /dev/sdb1
/dev/sdb1: UUID="afef3869-d755-404c-9f17-f5ecb24035a7" TYPE="ext4"


・/etc/auto.miscを編集する

以下の設定で、/misc/EXHDD2にアクセスすると自動でマウントされるようになります。

その他、デフォルトで有効になっている"cd"の設定を無効化しています。

VortexBoxの音楽CDなどを挿入するとリッピングが始まる機能に影響があると困るからですが、本当に影響があるか確認していません。

# sudo vi /etc/auto.misc

~ 省略 ~

#cd             -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom

~ 省略 ~

EXHDD2          -fstype=ext4            :UUID="afef3869-d755-404c-9f17-f5ecb24035a7"

(追記 2013/08/09 10:11)

上の設定は自動マウントするUSBディスクを決め打ちしていますが、以下のように記述するとファイルシステムを自動判定してくれるようです。

私の環境ではUSBディスクに繋いだ1台目のディスクのファイルシステムがext4のディスクとFAT32のディスクを自動判定してマウントしてくれました。

EXHDD2         -fstype=auto            :/dev/sdb1

(追記終了)


・autofsを再起動

# sudo systemctl restart autofs.service


・確認

私のVortexBoxは、/storage/movies等は/misc/EXHDD2/以下へのシンボリックリンクになっています。

# ls -l /storage
total 32
drwxrwxrwx 2 root root 16384 Apr 23 23:16 lost+found
lrwxrwxrwx 1 root root    18 Aug  9 07:59 movies -> /misc/EXHDD2/Movie
drwxr-xr-x 5 root root  4096 Aug  9 08:05 music
lrwxrwxrwx 1 root root    21 Aug  9 07:59 pictures -> /misc/EXHDD2/Pictures
drwxr-xr-x 2 root root  4096 Jul 13 10:23 Scripts
drwxr-xr-x 3 root root  4096 Apr 27 21:12 tmp
drwxr-xr-x 3 root root  4096 Jul 13 10:23 vortexbox

まずは/misc/EXHDD2がマウントされていないことを確認します。

# df
Filesystem                      1K-blocks     Used Available Use% Mounted on
devtmpfs                          1015040        0   1015040   0% /dev
tmpfs                             1022288        0   1022288   0% /dev/shm
tmpfs                             1022288      652   1021636   1% /run
/dev/mapper/VolGroup-lv_root     20027260 10932328   8070932  58% /
tmpfs                             1022288        0   1022288   0% /sys/fs/cgroup
tmpfs                             1022288        0   1022288   0% /media
/dev/sda2                          487652   106482    355570  24% /boot
/dev/mapper/VolGroup-lv_storage 219033444 86908252 120992264  42% /storage

/misc/EXHDD2/Movieへのシンボリックリンクになっている/storage/moviesにアクセスしてみます。

# ls /storage/movies

~ 省略 ~

/misc/EXHDD2がマウントされていることを確認します。

# df
Filesystem                      1K-blocks      Used Available Use% Mounted on
devtmpfs                          1015040         0   1015040   0% /dev
tmpfs                             1022288         0   1022288   0% /dev/shm
tmpfs                             1022288       652   1021636   1% /run
/dev/mapper/VolGroup-lv_root     20027260  10932304   8070956  58% /
tmpfs                             1022288         0   1022288   0% /sys/fs/cgroup
tmpfs                             1022288         0   1022288   0% /media
/dev/sda2                          487652    106482    355570  24% /boot
/dev/mapper/VolGroup-lv_storage 219033444  86972536 120927980  42% /storage
/dev/sdb1                       961302556 195702228 716762252  22% /misc/EXHDD2

2013/05/12

「Planet CCRMA at Home」のリアルタイムカーネル

先日、VortexBox 2.2のカーネルにCONFIG_PREEMPT_RTのパッチを当てて再構築しました。
VortexBoxのカーネル再構築

その他、VortexBoxのベースであるFedoraのオーディオ関連を強化する「Planet CCRMA at Home」というプロジェクトがあるらしく、そちらでもパッチ適用済みのカーネルを配布していました。

ただし私が確認したところ少し古いみたいです。

・VortexBoxのデフォルトカーネル(アップデート済み)
[vortexbox.localdomain ~]# uname -a
Linux vortexbox.localdomain 3.6.11-4.fc16.i686.PAE #1 SMP Tue Jan 8 21:18:14 UTC 2013 i686 i686 i386 GNU/Linux


・Planet CCRMA at Homeで配布しているリアルタイムカーネル
[vortexbox.localdomain ~]# uname -a
Linux vortexbox.localdomain 3.0.17-1.rt33.1.fc16.ccrma.i686.rt #1 SMP PREEMPT RT Sat Jan 21 11:15:48 PST 2012 i686 i686 i386 GNU/Linux



普段使用しているマシンで「Planet CCRMA at Home」のカーネルを試してみました。
BDP-105のUSBに接続してですが、音は特に問題なく出ました。
CD入れたらリッピングも始まりました。

少し試した限りでは大丈夫そうです。

リアルタイムカーネルインストール時にデフォルトカーネルを消さないように注意すれば元に戻すことも出来ますし、ちょっと試す分には良いかと思います。


以下試しにインストールした際の手順です。

最悪起動しなくなることも考えられるので自己責任でお願いします。


・「Planet CCRMA at Home」配布アプリをインストールできるようにする
[vortexbox.localdomain ~]# sudo yum localinstall http://ccrma.stanford.edu/planetccrma/mirror/fedora/linux/planetccrma/16/i386/planetccrma-repo-1.1-3.fc16.ccrma.noarch.rpm

〜 省略 〜

合計容量: 20 k
インストール済み容量: 20 k
これでいいですか? [y/N]y

〜 省略 〜

インストール:
planetccrma-repo.noarch 0:1.1-3.fc16.ccrma

完了しました!


・リアルタイムカーネルをインストール
[vortexbox.localdomain ~]# sudo yum install kernel-rt

〜 省略 〜

総ダウンロード容量: 23 M
インストール済み容量: 86 M
これでいいですか? [y/N]y

〜 省略 〜

インストール:
kernel-rt.i686 0:3.0.17-1.rt33.1.fc16.ccrma

完了しました!


・一応デフォルトカーネルが消えていないことを確認。
[vortexbox.localdomain ~]# yum list installed|grep kernel
kernel-PAE.i686 3.6.5-2.fc16 @anaconda-0/1
kernel-PAE.i686 3.6.11-4.fc16 @updates
kernel-headers.i686 3.6.11-4.fc16 @updates
kernel-rt.i686 3.0.17-1.rt33.1.fc16.ccrma @planetcore


・GRUBのエントリも消えていないことを確認
[vortexbox.localdomain ~]# sudo less /etc/grub2.cfg

・再起動
[vortexbox.localdomain ~]# sudo reboot

・GRUBの選択画面中の一番上がリアルタイムカーネル

2013/05/08

VortexBoxのカーネル再構築

VortexBox 2.2のカーネルにCONFIG_PREEMPT_RTのパッチを当てる等して、カーネルの性能アップを狙います。

カーネルの再構築はベースになっているFedoraの流儀に従いました。
Building a custom kernel


2013年5月8日の時点での方針は以下の通りです。
  1. Processor familyにIntel Atomを指定
  2. Preemption ModelにFully Preemptible Kernel (RT)を指定
  3. Kernel hackingの項目は可能な限り組み込まない

再構築後のカーネルが動かなくなる可能性は大いにあります。
私は今回、カーネルパニックで起動しないのを1回、起動してもディレクトリ構造を全く読み込めないのを1回作りました。

出来上がったカーネルでMPDを使用しての音楽再生の感想ですが…、曲によって差がありますが音が滑らかになったかなぁという気がします。

2.8MHzのDSDを176.4kHz/24bitのflacファイルに変換したものを再生した際に特に顕著に感じました。

他にはクリアになったのと音が広がるような印象を持った曲もありました。

つたない表現ですいません。


以下の作業は一般ユーザで行い、root権限が必要な場合はsudoコマンドを使用しております。


・デフォルト状態の確認
[vortexbox.localdomain ~]# uname -a
Linux vortexbox.localdomain 3.6.11-4.fc16.i686.PAE #1 SMP Tue Jan 8 21:18:14 UTC 2013 i686 i686 i386 GNU/Linux


・RPMパッケージの作成に必要なツールインストールする
[vortexbox.localdomain ~]# sudo yum install rpmdevtools yum-utils

〜 省略 〜

総ダウンロード容量: 225 k
インストール済み容量: 347 k
これでいいですか? [y/N]y

〜 省略 〜

完了しました!


・RPMのビルド環境を作る
[vortexbox.localdomain ~]# rpmdev-setuptree

・カーネルソースパッケージをダウンロード
[vortexbox.localdomain ~]# yumdownloader --source kernel

〜 省略 〜

kernel-3.6.11-4.fc16.src.rpm | 66 MB 00:29


・カーネルソースパッケージに必要なパッケージをインストールする
[vortexbox.localdomain ~]# sudo yum-builddep kernel-3.6.11-4.fc16.src.rpm

〜 省略 〜

総ダウンロード容量: 8.2 M
インストール済み容量: 15 M
これでいいですか? [y/N]y

〜 省略 〜

完了しました!


・カーネルソースパッケージを一般ユーザの~/rpmbuild/以下にインストールする
警告が出ますが無視して良いようです。
[vortexbox.localdomain ~]# rpm -Uvh kernel-3.6.11-4.fc16.src.rpm

〜 省略 〜

警告: ユーザー mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します


・カーネルソースツリーを準備する
[vortexbox.localdomain ~]# cd ~/rpmbuild/SPECS/
[vortexbox.localdomain SPECS]# rpmbuild -bp --target=$(uname -m) kernel.spec

〜 省略 〜

+ cd ..
+ exit 0


・環境変数を設定する
[vortexbox.localdomain SPECS]# export arch=i686
[vortexbox.localdomain SPECS]# export ver=3.6
[vortexbox.localdomain SPECS]# export subver=11-4
[vortexbox.localdomain SPECS]# export fedver=fc16


・CONFIG_PREEMPT_RT当てた後のconfigファイルを作成する環境を作る
[vortexbox.localdomain SPECS]# cp -r ~/rpmbuild/BUILD/kernel-$ver.$fedver ~/rpmbuild/BUILD/kernel-$ver.$fedver.orig
[vortexbox.localdomain SPECS]# cp -al ~/rpmbuild/BUILD/kernel-$ver.$fedver.orig ~/rpmbuild/BUILD/kernel-$ver.$fedver.new


・CONFIG_PREEMPT_RTを準備する
CONFIG_PREEMPT_RTからパッチを入手します。
新しいパッチがリリースされると古いものはフォルダから移動されるようなので、コマンド例のURLは無効になっている可能性があります。
CONFIG_PREEMPT_RTからカーネルバージョンに合った最新版を入手してください。
[vortexbox.localdomain SPECS]# cd ../SOURCES/
[vortexbox.localdomain SOURCES]# wget https://www.kernel.org/pub/linux/kernel/projects/rt/3.6/patch-3.6.11.2-rt34-rc1.patch.gz

〜 省略 〜

013-05-07 09:06:42 (248 KB/s) - `patch-3.6.11.2-rt34-rc1.patch.gz' へ保存完了 [167521/167521]

[vortexbox.localdomain SOURCES]# gzip -d patch-3.6.11.2-rt34-rc1.patch.gz


・config作成用のソースツリーにCONFIG_PREEMPT_RTを当てる
[vortexbox.localdomain SOURCES]# cd ../BUILD/kernel-3.6.fc16.new/linux-3.6.i686/
[vortexbox.localdomain linux-3.6.i686]# patch -p1 < ../../../SOURCES/patch-3.6.11.2-rt34-rc1.patch

〜 省略 〜

patching file net/packet/af_packet.c
patching file net/rds/ib_rdma.c
patching file scripts/mkcompile_h


・ベースとなるconfigファイルを準備する
[vortexbox.localdomain linux-3.6.i686]# cp configs/kernel-3.6.11-i686-PAE.config .config

・make menuconfigを実行するために必要なncurses-develをインストールする
[vortexbox.localdomain linux-3.6.i686]# sudo yum install ncurses-devel

〜 省略 〜

総ダウンロード容量: 700 k
インストール済み容量: 700 k
これでいいですか? [y/N]y


・make menuconfigを実行してカーネルに組み込む機能を選択する
[vortexbox.localdomain linux-3.6.i686]# make menuconfig
menuconfig トップ画面

Processor type and features
→ Processor family を Intel Atom に設定

Processor type and features
→ Preemption Model を Fully Preemptible Kernel (RT) に設定

Kernel hacking の項目を可能な限り外す

・configファイルの先頭に # i386 を記述
[vortexbox.localdomain linux-3.6.i686]# vi .config
[vortexbox.localdomain linux-3.6.i686]# head -n1 .config
# i386


・作成したconfigファイルをコピーする
[vortexbox.localdomain linux-3.6.i686]# cp .config ~/rpmbuild/SOURCES/config-`uname -m`-generic

・32-bit x86 カーネルの場合は下記もコピーする
コピーしないと後で行うrpmbuildの途中で止まってしまいます。
[vortexbox.localdomain linux-3.6.i686]# cp .config ~/rpmbuild/SOURCES/config-i686-PAE
[vortexbox.localdomain linux-3.6.i686]# cp .config ~/rpmbuild/SOURCES/config-x86-32-generic


・SPECファイルを修正する
左端の番号は行番号です。
状況により異なる番号になるかもしれません。
色を変えてある部分が修正した箇所です。
[vortexbox.localdomain linux-3.6.i686]# cd ~/rpmbuild/SPECS
[vortexbox.localdomain SPECS]# vi kernel.spec

〜 省略 〜

26 # % define buildid .local
27 %define buildid .hanagurort3

〜 省略 〜

739 #rhbz 890547
740 Patch21240: ACPI-do-not-use-Lid-and-Sleep-button-for-S5-wakeup.patch
741
742 Patch99999: patch-3.6.11.2-rt34-rc1.patch

〜 省略 〜

1395 #rhbz 890547
1396 ApplyPatch ACPI-do-not-use-Lid-and-Sleep-button-for-S5-wakeup.patch
1397
1398 ApplyPatch patch-3.6.11.2-rt34-rc1.patch

〜 省略 〜


・カーネルをビルドする
--without pae と --without debug を指定して私の環境には必要ないものはビルドしません。
全部ビルドしたら15時間くらいかかりました。
[vortexbox.localdomain SPECS]# rpmbuild -bb --without pae --without debug --target=`uname -m` kernel.spec

〜 省略 〜

書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-headers-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-debuginfo-common-i686-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-tools-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-tools-libs-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-tools-libs-devel-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-tools-debuginfo-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-devel-3.6.11-4.hanagurort3.fc16.i686.rpm
書き込み完了: /home/hanaguro/rpmbuild/RPMS/i686/kernel-debuginfo-3.6.11-4.hanagurort3.fc16.i686.rpm
実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.mUMZZ7
+ umask 022
+ cd /home/hanaguro/rpmbuild/BUILD
+ cd kernel-3.6.fc16
+ rm -rf /home/hanaguro/rpmbuild/BUILDROOT/kernel-3.6.11-4.hanagurort3.fc16.i386
+ exit 0


・カーネルをインストールします
とりあえずカーネルとモジュールだけインストールして、問題なく起動することを確認後にインストールします。

-Uや--upgradeオプションは使用してはいけないとドキュメントにあります。
おそらく正常に動いているカーネルが削除されてしまい、新しくインストールしたカーネルが動かなかった場合にどうしようもなくなる可能性があるからかと思います。
 [vortexbox.localdomain SPECS]# cd ../RPMS/i686/
[vortexbox.localdomain i686]# sudo rpm -ivh --force kernel-3.6.11-4.hanagurort3.fc16.i686.rpm
準備しています... ########################################### [100%]
1:kernel ########################################### [100%]


・GRUBの設定ファイルを修正してインストールしたカーネルの起動オプションにmaxcpus=1とlapicを追加します
[vortexbox.localdomain i686]# sudo vi/etc/grub2.cfg

〜 省略 〜

menuentry 'Fedora (3.6.11-4.hanagurort3.fc16.i686)' --class vortexbox --class gnu-linux --class gnu --class os {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set=root 764f5a38-5c5b-4330-b689-fa21c0cbb68c
echo 'Loading Fedora (3.6.11-4.hanagurort3.fc16.i686)'
linux /vmlinuz-3.6.11-4.hanagurort3.fc16.i686 root=/dev/mapper/VolGroup-lv_root ro rd.md=0 rd.dm=0 rd.lvm.lv=VolGroup/lv_swap KEYTABLE=jp106 quiet SYSFONT=latarcyrheb-sun16 rhgb rd.lvm.lv=VolGroup/lv_root rd.luks=0 LANG=en_US.UTF-8 maxcpus=1 lapic
echo 'Loading initial ramdisk ...'
initrd /initramfs-3.6.11-4.hanagurort3.fc16.i686.img
}

〜 省略 〜



ここで再起動したところ以下のようなエラーメッセージが出てモジュールを読み込むことが出来ませんでした。

modprobe: FATAL: Could not load
/lib/modules/3.6.11-4.hanagurort3.fc16.i686-rt34-rc1/modules.dep: No such file or directory


そこでシンボリックリンクを作成して誤魔化しました。
[vortexbox.localdomain ~]# cd /lib/modules
[vortexbox.localdomain modules]# sudo ln -s 3.6.11-4.hanagurort3.fc16.i686 3.6.11-4.hanagurort3.fc16.i686-rt34-rc1


新しくインストールしたカーネルで起動した際の情報です。
[vortexbox.localdomain ~]# uname -a
Linux vortexbox.localdomain 3.6.11-4.hanagurort3.fc16.i686-rt34-rc1 #1 SMP PREEMPT RT Wed May 8 03:45:02 JST 2013 i686 i686 i386 GNU/Linux


2013/05/05

VortexBoxのMPDを--enable-zzipオプション指定してビルド

VortexBoxインストール直後からMPD最適化パッチを当てるまでの手順では、--enable-zipオプション指定したけどそんなオプションはないと怒られていたので作り直しました。

それで困ったことになっていたわけではありません。

・MPDを動かしているサービスを停止
[vortexbox.localdomain mpd-0.17.4]# sudo systemctl stop vortexbox-player.service

・ソース解凍
[vortexbox.localdomain mpd]# tar xJvf mpd-0.17.4.tar.xz

〜 省略 〜

mpd-0.17.4/AUTHORS
mpd-0.17.4/NEWS


・パッチを当てる
[vortexbox.localdomain mpd-0.17.4]# zcat ../mpd-0.17git-20120226rtopt.diff | patch -p1
patching file Makefile.am
Hunk #1 succeeded at 221 (offset 1 line).
Hunk #2 succeeded at 402 with fuzz 2 (offset 10 lines).
patching file configure.ac
Hunk #3 succeeded at 1584 (offset 8 lines).
patching file src/conf.c
Hunk #1 succeeded at 102 (offset -1 lines).
patching file src/conf.h
patching file src/decoder_thread.c
Hunk #2 succeeded at 464 (offset 4 lines).
patching file src/main.c
Hunk #2 succeeded at 314 (offset -3 lines).
Hunk #3 succeeded at 324 (offset -3 lines).
Hunk #4 succeeded at 381 (offset -3 lines).
Hunk #5 succeeded at 487 (offset -3 lines).
patching file src/output_internal.h
patching file src/output_thread.c
Hunk #1 succeeded at 32 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 584 (offset 5 lines).
patching file src/player_thread.c
Hunk #2 succeeded at 1087 (offset 27 lines).
patching file src/rt_opt.c
patching file src/rt_opt.h
patching file src/update.c
Hunk #1 succeeded at 33 (offset 2 lines).
Hunk #2 succeeded at 76 (offset 5 lines).


・./autogen.shを実行
[vortexbox.localdomain mpd-0.17.4]# ./autogen.sh

〜 省略 〜

config.status: creating Makefile
config.status: creating doc/doxygen.conf
config.status: creating mpd.service
config.status: creating config.h
config.status: executing depfiles commands
MPD is ready for compilation, type "make" to begin.


・./configureを実行
[vortexbox.localdomain mpd-0.17.4]# ./configure --enable-wildmidi --enable-fluidsynth --enable-mikmod --enable-bzip2 --enable-zzip --enable-iso9660 --enable-pipe-output --enable-lastfm --enable-rtopt --prefix=/usr/local

〜 省略 〜

########### MPD CONFIGURATION ############

Archive support:
(+bzip2) (+ISO9660) (+ZIP)
Autodiscovery support:
(+Avahi) (-Bonjour)
Client support:
(+IPv6) (+TCP) (+UNIX Domain Sockets)
File format support:
(+AAC) (-C64 SID) (+FFMPEG) (+FLAC) (+FluidSynth) (-GME) (+libsndfile)
(+MikMod) (-MODPLUG) (+MAD) (+MPG123) (+MP4) (+Musepack)
(-OggTremor) (+OggVorbis) (+WAVE) (+WavPack) (+WildMidi)
Other features:
(+libsamplerate) (+inotify) (+SQLite) (+rtopt)
Metadata support:
(+ID3)
Playback support:
(+ALSA) (-FFADO) (+FIFO) (+File Recorder) (+HTTP Daemon) (+JACK)
(+libao) (-Media MVP) (+OSS) (-OpenAL) (-OS X) (+Pipeline)
(+PulseAudio) (-ROAR) (+SHOUTcast) (-Solaris) (-WinMM)
Streaming encoder support:
(+FLAC) (+LAME) (+Ogg Vorbis) (+TwoLAME) (+WAVE)
Streaming support:
(+CDIO_PARANOIA) (+CURL) (-Despotify) (+Last.FM) (-Soundcloud)
(+MMS) (-SOUP)

##########################################

〜 省略 〜

config.status: creating config.h
config.status: executing depfiles commands
MPD is ready for compilation, type "make" to begin.


・make実行
[vortexbox.localdomain mpd-0.17.4]# make

〜 省略 〜

vorbis -lm -logg libmixer_plugins.a -lpulse libutil.a -pthread -lgthread-2.0 -lrt -lglib-2.0 -lmp3lame -lm
make[1]: ディレクトリ `/home/hanaguro/src/mpd/mpd-0.17.4' から出ます


・インストール
[vortexbox.localdomain mpd-0.17.4]# sudo make install-strip

・MPDを動かしているサービスを開始
[vortexbox.localdomain mpd-0.17.4]# sudo systemctl start vortexbox-player.service

2013/04/30

VortexBoxインストール直後からMPD最適化パッチを当てるまでの手順

VortexBox 2.2にMPD最適化パッチを当てるまでの手順です。

VortexBoxのMPDに最適化パッチを当て、Voyage MPDの場合に必要な設定と同等の設定を既にしていてもmpdプロセスの優先度が変わらない場合の対策は、「(9) 再起動時にMPDの優先度が設定されるようにする」の内容だけ行えば良いみたいです。

VortexBoxのMPD(Music Player Daemon)に最適化パッチを当てる」で実行したコマンドの手順になります。

こちらこちらを参考にいたしました。
PCオーディオ実験室
みみず工房

「(9) 再起動時にMPDの優先度が設定されるようにする」についてはこちらを参考にしました。


以下の例では他のPCからVortexBoxマシンにSSHでログインしています。

ユーザ追加とsudoを使えるようにするまでの手順はこちら

bash-3.2$ ssh -l hanaguro VortexBoxのIP
hanaguro@VortexBoxのIPs password: 

Last login: Wed May  1 00:17:44 2013 from 作業PCのIP
[vortexbox.localdomain ~]# 


(1) VortexBoxをアップグレードする

[vortexbox.localdomain ~]# sudo yum upgrade

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for hanaguro:

〜 省略 〜

トランザクションの要約
==================================================================================================================
インストール   1 パッケージ (+2 依存するパッケージ)
更新          59 パッケージ

総ダウンロード容量: 81 M
これでいいですか? [y/N]y

〜 省略 〜

file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-i386 から鍵を取得中です。

〜 省略 〜

From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-i386
これでいいですか? [y/N]y

〜 省略 〜


完了しました!
[vortexbox.localdomain ~]#


再起動します。

[vortexbox.localdomain ~]# sudo reboot

〜 再起動 〜




SSHでVortexBoxにログインします。

bash-3.2$ ssh -l hanaguro VortexBoxのIP
hanaguro@VortexBoxのIP's password:

Last login: Tue Apr 30 15:31:10 2013 from 作業PCのIP



(2) VortexBoxにデフォルトでインストールされているのMPDのプロセスの状態を調べる

[vortexbox.localdomain ~]# ps -eLo pid,ppid,lwp,rtprio,priority,cmd|grep mpd
 1336     1  1336      -  20 /usr/bin/mpd /etc/vortexbox-player/mpd0.conf
 1336     1  1338      -  20 /usr/bin/mpd /etc/vortexbox-player/mpd0.conf
 1336     1  1339      -  20 /usr/bin/mpd /etc/vortexbox-player/mpd0.conf
 1336     1  1341      -  20 /usr/bin/mpd /etc/vortexbox-player/mpd0.conf
 1336     1  1342      -  20 /usr/bin/mpd /etc/vortexbox-player/mpd0.conf
 1369  1050  1369      -  20 grep --color=auto mpd


当然優先度はまだ設定されていません。


(3) MPDのビルドに必要なものをそろえる

作業ディレクトリを作成し移動する。

[vortexbox.localdomain ~]# mkdir -p src/mpd/
[vortexbox.localdomain ~]# cd src/mpd
 


yum-builddepコマンドを使用してMPDのビルドに必要な必要なパッケージのインストールを試みますが、VortexBoxインストールしてupgradeしただけの状態だと失敗します。

[vortexbox.localdomain mpd]# sudo yum-builddep mpd
No source RPM found for mpd-1.17.2-2.fc16.i686
No uninstalled build requires
[vortexbox.localdomain mpd]#


そこで、setup-mplayerを実行します。

[vortexbox.localdomain mpd]# sudo /usr/local/sbin/setup-mplayer
読み込んだプラグイン:langpacks, presto, refresh-packagekit

 〜 省略 〜

tar: これは tar アーカイブではないようです
tar: 前のエラーにより失敗ステータスで終了します
cp: `essential-20071007/*' を stat できません: そのようなファイルやディレクトリはありません
Done.
[vortexbox.localdomain mpd]#


最後エラーになっていますが、目的は果たせたので先に進みます。
また、setup-mplayerを実行することによりffmpegもインストールされます。

再度yum-builddepコマンドを使用してMPDのビルドに必要な必要なパッケージのインストールを試みます。

[vortexbox.localdomain mpd]# sudo yum-builddep mpd
読み込んだプラグイン:langpacks, presto, refresh-packagekit
Enabling atrpms-source repository

〜 省略 〜

インストール  33 パッケージ (+45 依存するパッケージ)

総ダウンロード容量: 157 M
インストール済み容量: 218 M
これでいいですか? [y/N]y

〜 省略 〜

完了しました!

[vortexbox.localdomain mpd]# 


今度は成功しました。

まだgcc、make、patchコマンドがインストールされていないのでインストールします。

[vortexbox.localdomain mpd]# sudo yum install make
[vortexbox.localdomain mpd]# sudo yum install gcc
[vortexbox.localdomain mpd]# sudo yum install patch




(2013/09/16 追記)
sudo yum-builddep mpd を実行しても必要なパッケージがインストールされなくなっているようです。

下記の./configure等でエラーになる場合、それらを手動でインストールすれば良いのですが、全ては分かりませんでした。
MPDがビルドできない?
(2013/09/16 追記終了)


(2013/10/09 追記)
MPDがビルドできない?」ではyumコマンドで取得できないパッケージを無視していましたが、それらをソースからインストールする手順を下記に記述しました。
MPDがビルドできない? その2 
(2013/10/09 追記終了)



(4) MPDのソースと最適化パッチを取得する

[vortexbox.localdomain mpd]# wget http://www.musicpd.org/download/mpd/0.17/mpd-0.17.4.tar.xz
[vortexbox.localdomain mpd]# wget http://www.symphonic-net.com/kubotayo/cgi-bin/downlog.cgi?edata/mpd-0.17git-20120226rtopt.diff.gz



(5) MPDのソースを解凍しパッチを当てる

[vortexbox.localdomain mpd]# tar xJvf mpd-0.17.4.tar.xz

〜 省略 〜

mpd-0.17.4/NEWS

[vortexbox.localdomain mpd]# cd mpd-0.17.4/

[vortexbox.localdomain mpd-0.17.4]# zcat ../mpd-0.17git-20120226rtopt.diff.gz |patch -p1
patching file Makefile.am
Hunk #1 succeeded at 221 (offset 1 line).
Hunk #2 succeeded at 402 with fuzz 2 (offset 10 lines).
patching file configure.ac
Hunk #3 succeeded at 1584 (offset 8 lines).
patching file src/conf.c
Hunk #1 succeeded at 102 (offset -1 lines).
patching file src/conf.h
patching file src/decoder_thread.c
Hunk #2 succeeded at 464 (offset 4 lines).
patching file src/main.c
Hunk #2 succeeded at 314 (offset -3 lines).
Hunk #3 succeeded at 324 (offset -3 lines).
Hunk #4 succeeded at 381 (offset -3 lines).
Hunk #5 succeeded at 487 (offset -3 lines).
patching file src/output_internal.h
patching file src/output_thread.c
Hunk #1 succeeded at 32 with fuzz 2 (offset 1 line).
Hunk #2 succeeded at 584 (offset 5 lines).
patching file src/player_thread.c
Hunk #2 succeeded at 1087 (offset 27 lines).
patching file src/rt_opt.c
patching file src/rt_opt.h
patching file src/update.c
Hunk #1 succeeded at 33 (offset 2 lines).
Hunk #2 succeeded at 76 (offset 5 lines).


リジェクトはされていないようです。


(6) MPDをビルドし、インストールする

なお、VortexBoxにインストールされているconfigure時のオプションはこちらの方法で調べてなるべくそれに合わせました。

--enable-rtop: は最適化パッチを使用するために必要なオプションのようです。

--prefix=/usr/local: を指定して/usr/local以下にインストールするように明示的に指示しました。

(2013年5月5日 追記)
問題があったわけではないのですが、 --enable-zzipオプションを指定して作り直しました。
VortexBoxのMPDを--enable-zzipオプション指定してビルド
(2013年5月5日 追記終了)

[vortexbox.localdomain mpd-0.17.4]# ./autogen.sh

〜 省略 〜

MPD is ready for compilation, type "make" to begin.

[vortexbox.localdomain mpd-0.17.4]# ./configure --enable-wildmidi --enable-fluidsynth --enable-mikmod --enable-bzip2 --enable-zip --enable-iso9660 --enable-pipe-output --enable-lastfm --enable-rtopt --prefix=/usr/local
configure: WARNING: unrecognized options: --enable-zip

〜 省略 〜

########### MPD CONFIGURATION ############

Archive support:
        (+bzip2) (+ISO9660) (-ZIP)
Autodiscovery support:
        (+Avahi) (-Bonjour)
Client support:
        (+IPv6) (+TCP) (+UNIX Domain Sockets)
File format support:
        (+AAC) (-C64 SID) (+FFMPEG) (+FLAC) (+FluidSynth) (-GME) (-libsndfile)
        (+MikMod) (-MODPLUG) (+MAD) (+MPG123) (+MP4) (+Musepack)
        (-OggTremor) (+OggVorbis) (+WAVE) (+WavPack) (+WildMidi)
Other features:
        (+libsamplerate) (+inotify) (+SQLite) (+rtopt)
Metadata support:
        (+ID3)
Playback support:
        (+ALSA) (-FFADO) (+FIFO) (+File Recorder) (+HTTP Daemon) (+JACK)
        (+libao) (-Media MVP) (+OSS) (-OpenAL) (-OS X) (+Pipeline)
        (+PulseAudio) (-ROAR) (+SHOUTcast) (-Solaris) (-WinMM)
Streaming encoder support:
        (+FLAC) (+LAME) (+Ogg Vorbis) (+TwoLAME) (+WAVE)
Streaming support:
        (+CDIO_PARANOIA) (+CURL) (-Despotify) (+Last.FM) (-Soundcloud)
        (+MMS) (-SOUP)

##########################################

〜 省略 〜

configure: WARNING: unrecognized options: --enable-zip
MPD is ready for compilation, type "make" to begin.
[vortexbox.localdomain mpd-0.17.4]# 


--enable-zipオプションは存在しないみたいですが、問題なさそうなので無視します。

[vortexbox.localdomain mpd-0.17.4]# make

〜 省略 〜

-lpulse libutil.a -pthread -lgthread-2.0 -lrt -lglib-2.0 -lmp3lame -lm

make[1]: ディレクトリ `/home/hanaguro/src/mpd/mpd-0.17.4' から出ます

[vortexbox.localdomain mpd-0.17.4]# sudo make install-strip

〜 省略 〜

/usr/bin/install -c -m 644 doc/mpd.conf.5 '/usr/local/share/man/man5'
make[2]: ディレクトリ `/home/hanaguro/src/mpd/mpd-0.17.4' から出ます
make[1]: ディレクトリ `/home/hanaguro/src/mpd/mpd-0.17.4' から出ます
[vortexbox.localdomain mpd-0.17.4]#



(7) MPDの起動スクリプトを修正する

MPDは/usr/local以下にインストールしたため、起動スクリプトを修正します。
色を変えているところが修正した箇所です。

[vortexbox.localdomain mpd-0.17.4]# sudo vi /etc/rc.d/init.d/vortexbox-player

〜 省略 〜

start() {

if [ ! "`pidof /usr/bin/vortexbox-player`" ]; then
         # restore sound card settings
          /sbin/alsactl restore
          /opt/vortexbox/unmute_all.sh

         for macaddr in $(cat /etc/vortexbox-player/mac_list.conf )
         do
                echo -n $"Starting mpd: "
#               /usr/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf
                /usr/local/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf

                echo

〜 省略 〜


[vortexbox.localdomain mpd-0.17.4]# sudo systemctl --system daemon-reload



(8) MPDの設定ファイルに優先度の設定を追加する

MPDの起動時に/etc/vortexbox-player/mpd0.confを読むようになっていますが、このファイルを直接修正して優先度の設定を追加しても、他のPCのブラウザからVortexBoxの設定画面にアクセスし、

「Configure VortexBox Player」(http:// VortexBoxのIP /vortexbox-player.php)

で設定を変更すると修正して追加した設定内容が消えてしまいます。

これを避けるために、

 /opt/vortexbox/mpd_config.php

に優先度の設定を記述します。
色が変わっている箇所が変更点です。

(2013年5月16日 追記)
 outputのproirityをFIFO:99からFIFO:98に変更
(2013年5月16日 追記終了)


[vortexbox.localdomain mpd-0.17.4]# sudo vi /opt/vortexbox/mpd_config.php

〜 省略 〜

        if (strtoupper($devarray['DEVICENAME']) != "DEFAULT") {
                $devicelist=(preg_split('/\s+/', $devarray['DEVICENAME']));
                $count=1;
                foreach ($devicelist as $v) {
                        $configcontent.='audio_output {'."\n";
                        $configcontent.='       type            "alsa"'."\n";
                        $configcontent.='       name            "'.$devarray['NAME']."-".$count.'"'."\n";
                        $configcontent.='       device          "'.trim($v).'"'."\n";
                        $configcontent.='       dsd_usb     "yes"'."\n";
                        $configcontent.='       priority    "FIFO:98"'."\n";
                        if ($devarray['softvol_ischecked'] == "softvol") { $configcontent.='    mixer_type      "software"'."\n";}
                        $configcontent.='}'."\n";
                        $count++;
                }      
        }      
       
        $configcontent.='realtime_option {'."\n";
        $configcontent.='    memlock        "yes"'."\n";
        $configcontent.='    stack_reserve    "1024"'."\n";
        $configcontent.='    heap_reserve    "0"'."\n";
        $configcontent.='    main_priority    "OTHER:0"'."\n";
        $configcontent.='    player_priority "FIFO:52"'."\n";
        $configcontent.='    decoder_priority "FIFO:48"'."\n";
        $configcontent.='    update_priority "OTHER:0"'."\n";
        $configcontent.='}'."\n";

       
        fwrite($mpdfile,$configcontent);
        fclose($mpdfile);

〜 省略 〜




ここで他のPCのブラウザからVortexBox設定画面の

「Configure VortexBox Player」(http:// VortexBoxのIP /vortexbox-player.php)

にアクセスして「Submit」ボタンを押します。

mpd_config.phpの修正に成功していれば/etc/vortexbox-player/mpd0.confは以下のようになるはずです。

[vortexbox.localdomain ~]# less /etc/vortexbox-player/mpd0.conf

〜 省略 〜

audio_output {
        type            "alsa"
        name            "Player1-1"
        device          "plughw:0,0"
        dsd_usb     "yes"
        priority    "FIFO:98"
}
realtime_option {
    memlock        "yes"
    stack_reserve    "1024"
    heap_reserve    "0"
    main_priority    "OTHER:0"
    player_priority "FIFO:52"
    decoder_priority "FIFO:48"
    update_priority "OTHER:0"
}

〜 省略 〜



もしここで再起動しても、mpdプロセスの優先度の設定は有効になりません。


(9) 再起動時にMPDの優先度が設定されるようにする

/etc/sysctl.confを修正し、kernel.sched_rt_runtime_us=-1を追加します。

[vortexbox.localdomain ~]# sudo cp -i /etc/sysctl.conf  /etc/sysctl.conf.orig
[vortexbox.localdomain ~]# sudo vi /etc/sysctl.conf
[vortexbox.localdomain ~]# tail -n1 /etc/sysctl.conf
kernel.sched_rt_runtime_us=-1
[vortexbox.localdomain ~]# 


再起動し、mpdプロセスの優先度が設定されていることを確認します 。

[vortexbox.localdomain ~]# sudo reboot

bash-3.2$ ssh -l hanaguro VortexBoxのIP
hanaguro@VortexBoxのIP's password:
Last login: Tue Apr 30 18:09:58 2013 from 作業PCのIP

[vortexbox.localdomain ~]# ps -eLo pid,ppid,lwp,rtprio,priority,cmd|grep mpd
  917     1   917      -  20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
  917     1   918      -  20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
  917     1   919     52 -53 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
  917     1   920     48 -49 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
  917     1   921     99 -100 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
 1049   987  1049      -  20 grep --color=auto mpd



(2013年5月16日 追記)

(10) MPD以外のプロセスの優先度を設定する

MPDを使用しての音楽再生時のプロセスの動きをtopコマンドで調べたり、また/proc/interruptsから割り込みの発生回数を調べた結果、私の環境では/etc/rc.d/rc.localに下記の内容を追加しました。
優先度の設定はその日の気分で色々いじってみたいと思います。

chrt -p -f 99 `pgrep irq/23-uhci_hcd`
chrt -p -f 99 `pgrep irq/23-ehci_hcd`
chrt -p -f 51 `pgrep mount.exfat`
chrt -p -f 51 `pgrep irq/16-uhci_hcd`
chrt -p -f 51 `pgrep irq/16-0000:01:`

[vortexbox.localdomain ~]# sudo vi /etc/rc.d/rc.local

〜 省略 〜

[vortexbox.localdomain ~]# tail -n5 /etc/rc.d/rc.local
chrt -p -f 99 `pgrep irq/23-uhci_hcd`
chrt -p -f 99 `pgrep irq/23-ehci_hcd`
chrt -p -f 51 `pgrep mount.exfat`
chrt -p -f 51 `pgrep irq/16-uhci_hcd`
chrt -p -f 51 `pgrep irq/16-0000:01:`


(2013年5月16日 追記終了)

VortexBoxにインストールされているMPDのconfigureオプションを調べる

VortexBoxにインストールされているMPD(Music Player Daemon)のソースパッケージを取得してspecファイルからコンパイルオプションを調べます


(1) MPDのソースパッケージ(SRPM)の取得を試みるがVortexBoxのインストール直後だとエラーになる

[vortexbox.localdomain mpd]# yumdownloader --source mpd
読み込んだプラグイン:langpacks, presto, refresh-packagekit

〜 省略 〜

No source RPM found for mpd-1.17.2-2.fc16.i686
Nothing to download

[vortexbox.localdomain mpd]#


(2) setup-mplayer コマンドを実行する

ffmpegコマンドがインストール出来ない問題の対策でsetup-mplayerを実行したのですが、MPDのソースパッケージを取得する場合にも必要のようです。

[vortexbox.localdomain mpd]# sudo /usr/local/sbin/setup-mplayer
読み込んだプラグイン:langpacks, presto, refresh-packagekit

 〜 省略 〜

tar: これは tar アーカイブではないようです
tar: 前のエラーにより失敗ステータスで終了します
cp: `essential-20071007/*' を stat できません: そのようなファイルやディレクトリはありません
Done.
[vortexbox.localdomain mpd]#


最後エラーになっていますが、目的は果たせたので先に進みます。


(3) MPDのソースパッケージを取得する

[vortexbox.localdomain mpd]# yumdownloader --source mpd
読み込んだプラグイン:langpacks, presto, refresh-packagekit

〜 省略 〜

mpd-0.17.2-25.src.rpm
[vortexbox.localdomain mpd]#

今度は成功しました。


(4)  取得したMPDのソースパッケージからspecファイルを取り出す

まず作業ディレクトリを作成し移動します。

[vortexbox.localdomain mpd]# mkdir srpm/ 
[vortexbox.localdomain mpd]# cd srpm/

ソースパッケージからファイルを取り出します。

[vortexbox.localdomain srpm]# rpm2cpio ../mpd-0.17.2-25.src.rpm |cpio -id


(5) specファイルを調べる

取り出したmpd.specファイル内でconfigureを実行している箇所を見つけます。

[vortexbox.localdomain srpm]# less mpd.spec

〜 省略 〜

%configure \
           --with-systemdsystemunitdir=%{_unitdir} \
           --enable-wildmidi \
           --enable-fluidsynth \
           --enable-mikmod \
           --enable-bzip2 \
           %{?with_pulse:--enable-pulse} \
           %{!?with_sqlite:--disable-sqlite} \
           --enable-zip \
           --enable-iso9660 \
           --enable-pipe-output \
           --enable-lastfm

〜 省略 〜

VortexBoxに新しいユーザを作成する

インストール完了後、次の画面が表示されていることが前提です。
以下の例ではIPアドレスは192.168.0.9になっています。

rootでログインします。


(1) 日本語キーボードに変更する

VortexBoxをインストールしたマシンを直接触って設定する場合、USキーボードになっていて使いづらいので日本語キーボードにします。

SSHでリモートログインする場合は不要です。

[vortexbox.localdomain ~]#  vi /etc/sysconfig/keyboard 
KEYTABLE="jp106" 
MODEL="jp106"
LAYOUT="jp"


再起動せずに日本語キーボードを有効にしようとしたら上手く行かなかったので、再起動しました。

[vortexbox.localdomain ~]# reboot

以下の例では
bash-3.2$ ssh -l root 192.168.0.9
で他のPCからVortexBoxマシンにリモートログインしています。

bash-3.2$ ssh -l root 192.168.0.9
root@192.168.0.9's password:
Last login: Wed May 1 00:17:44 2013 from 192.168.0.7 



(2) ユーザーを追加する
以下の例ではhanaguroユーザを追加しています。

[vortexbox.localdomain ~]# adduser hanaguro

パスワードを変更します。

[vortexbox.localdomain ~]# passwd hanaguro
ユーザー hanaguro のパスワードを変更。
新しいパスワード: 
passwd: 全ての認証トークンが正しく更新できました。



(3) sudoを使用できるようにする

hanaguroのユーザ情報を確認します。

[vortexbox.localdomain ~]# id hanaguro
uid=1000(hanaguro) gid=1000(hanaguro) groups=1000(hanaguro) 


wheelグループにhanaguroを追加します。

[vortexbox.localdomain ~]# usermod -a -G wheel hanaguro 

再度hanaguroのユーザ情報を確認します。

[vortexbox.localdomain ~]# id hanaguro
uid=1000(hanaguro) gid=1000(hanaguro) groups=1000(hanaguro),10(wheel)

2013/04/29

VortexBoxのMPD(Music Player Daemon)に最適化パッチを当てる

安かったので購入したのに全く使っていなかったノートPCにVortexBoxというLinuxディストリビューションをインストールしました。
VortexBox user forum - News:

インストールしたVortexBoxのバージョンは2.2です。

VortexBoxは音楽配信に特化したLinuxディストリビューションとのことですが、外部DACをUSBに接続してMPD(Music Player Daemon)を使って音楽を聴くことも出来ます。

ノートPCのパーティションを全部初期化してインストールした限りでは、VortexBoxのインストールはとても簡単でした。

VortexBoxで動いているMPDの最適化パッチをこちらこちらを参考に当てました。
とてもすばらしいパッチをありがとうございます。
PCオーディオ実験室
みみず工房

パッチを適用したMPDのバージョンは0.17.4です。

パッチを使用する上で悩んだのは以下の点でしょうか。
  1. /etc/mpd.confや/etc/vortexbox-player/mpd0.confに記述した設定が前者は無視され、後者はいつの間にか消えている
  2. mpdの優先度が設定されていない
  3. mount.exfat-fuseなどのプロセスにchrt コマンドで優先度を設定しようとするとOperation not permittedになる 

1は後回しにします。

  • 2と3について
2と3については関連しているようです。

システム起動時にmpdを起動するようにした場合、後から優先順位を設定しようと下記のコマンド

# sudo chrt -p -f 99 `pgrep mpd`

を実行すると "Operation not permitted"になってしまいました。

さんざん悩んだのですが、こちらにある方法で上手くいくみたいです。

私は/etc/sysctl.confに

kernel.sched_rt_runtime_us=-1

と記述し、

/etc/rc.d/rc.local



/usr/bin/chrt -p -f 49 `pgrep -f mount.exfat-fuse`
/usr/bin/chrt -p -f 49 `pgrep usb-storage`


を記述しました。

[vortexbox.localdomain ~]# tail -n1 /etc/sysctl.conf
kernel.sched_rt_runtime_us=-1
[vortexbox.localdomain ~]# tail -n2 /etc/rc.d/rc.local
/usr/bin/chrt -p -f 49 `pgrep -f mount.exfat-fuse`
/usr/bin/chrt -p -f 49 `pgrep usb-storage`


またmpdは

/usr/local

以下にインストールしたので、

/etc/rc.d/init.d/vortex-player

のmpdを起動している部分を修正しました。

[vortexbox.localdomain ~]# cat /etc/rc.d/init.d/vortexbox-player

~ 省略 ~

#               /usr/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf
                /usr/local/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf

~ 省略 ~


ここまでの設定と、下の方に記述した「1について」の設定を行った状態で再起動した直後のpsコマンドの結果です。
一応設定通りになっているかなと思っています。

[vortexbox.localdomain ~]# ps -eLo pid,ppid,lwp,rtprio,priority,cmd
 PID  PPID   LWP RTPRIO PRI CMD
    1     0     1      -  20 /sbin/init

 ~ 省略 ~

  235     2   235     49 -50 [usb-storage]

 ~ 省略 ~

  733     1   733     49 -50 /sbin/mount.exfat-fuse /dev/sdb1 /mnt/EXHDD2 -o rw,umask=000

 ~ 省略 ~

 1665     1  1665      -  20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
 1665     1  1666      -  20 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
 1665     1  1668     52 -53 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
 1665     1  1669     48 -49 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf
 1665     1  1673     99 -100 /usr/local/bin/mpd /etc/vortexbox-player/mpd0.conf

 ~ 省略 ~



  • 1について
1についてですが、mpdの起動などを行っているらしい

/etc/rc.d/init.d/vortexbox-player

では次のように記述されています。

/usr/bin/mpd /etc/vortexbox-player/mpd$COUNT.conf

ですので

/etc/mpd.conf

は存在していても使用していないようです。

また、VortexBoxの主要な設定は他のPCのWebブラウザから変更することが出来るのですが、「Configure VortexBox Player」のページから設定を変更すると

/etc/vortexbox-player/mpd0.conf

で行った設定はクリアされてしまいます。

ブラウザから設定変更した際に呼ばれているPHPスクリプトは

/opt/vortexbox/mpd_config.php

のようです。

私のmpd_config.phpは次のようにしています。
色を変えてある箇所が加えたところです。

私は音を出すのは外部DAC経由でしか行っていませんので、複数のサウンドデバイスから音を出すのであればもう少し考えて記述しなければいけないかもしれません。
(もっと言うと、適当にいじっただけです…)
    <?php
    // This program is free software; you can redistribute it and/or
    // modify it under the terms of the GNU General Public License
    // as published by the Free Software Foundation; either version 2
    // of the License, or (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details.
    //

    error_reporting(E_ERROR);

    $configfile = "/var/www/html/config/playergui.cfg";
    $configall = file_get_contents($configfile);
    $config = unserialize($configall);

    $vbplayer="";
    $vbplayerfile = fopen("/etc/vortexbox-player/mac_list.conf",'w');
    $x=0;
    foreach ($config as $devarray) {
      if (isset($devarray['NAME'])) {
        $mpdfile = fopen("/etc/vortexbox-player/mpd".$x.".conf",'w');

        $configcontent="# Created by Configure VortexBox Player on ".date('F j, Y, g:i a')."\n";
        $configcontent.="# If you edit this file it will be over written the next time you make\n";
        $configcontent.="# changes in the Configure VortexBox Player GUI.\n";
        $configcontent.="#"."\n";
        if ($x == 0) {
            $configcontent.='music_directory  "/storage/music/flac"'."\n";
            $configcontent.='playlist_directory  "/var/lib/mpd/playlists"'."\n";
            $configcontent.='db_file  "/var/lib/mpd/database"'."\n";
            $configcontent.='log_file  "/var/log/mpd.log"'."\n";
            $configcontent.='pid_file  "/var/lib/mpd/pid"'."\n";
            $configcontent.='state_file  "/var/lib/mpd/state"'."\n";
            $configcontent.='sticker_file  "/var/lib/mpd/sticker.sql"'."\n";
    }
    if (file_exists("/etc/vortexbox/mpd_auto_update.no")) {
            $configcontent.='auto_update "no"'."\n";
        } else {
            $configcontent.='auto_update "yes"'."\n";
        }
        $configcontent.='port  "'.(6600 + $x).'"'."\n";
        $configcontent.='zeroconf_enabled  "yes"'."\n";
        $configcontent.='zeroconf_name  "'.$devarray['NAME'].'"'."\n";
        $configcontent.="\n";
        if (strtoupper($devarray['DEVICENAME']) != "DEFAULT") {
            $devicelist=(preg_split('/\s+/', $devarray['DEVICENAME']));
            $count=1;
            foreach ($devicelist as $v) {
                $configcontent.='audio_output {'."\n";
                $configcontent.='    type        "alsa"'."\n";
                $configcontent.='    name        "'.$devarray['NAME']."-".$count.'"'."\n";
                $configcontent.='    device        "'.trim($v).'"'."\n";
                $configcontent.='    dsd_usb     "yes"'."\n";
                $configcontent.='    priority    "FIFO:99"'."\n";
                if ($devarray['softvol_ischecked'] == "softvol") { $configcontent.='    mixer_type    "software"'."\n";}
                $configcontent.='}'."\n";
                $count++;
            }
        }

        $configcontent.='realtime_option {'."\n";
        $configcontent.='    memlock        "yes"'."\n";
        $configcontent.='    stack_reserve    "1024"'."\n";
        $configcontent.='    heap_reserve    "0"'."\n";
        $configcontent.='    main_priority    "OTHER:0"'."\n";
        $configcontent.='    player_priority "FIFO:52"'."\n";
            $configcontent.='    decoder_priority "FIFO:48"'."\n";
            $configcontent.='    update_priority "OTHER:0"'."\n";
        $configcontent.='}'."\n";

        fwrite($mpdfile,$configcontent);
        fclose($mpdfile);
        $vbplayer.=$devarray['MAC']."\n";

        }
    $x++;
    }

    fwrite($vbplayerfile,$vbplayer);
    fclose($vbplayerfile);

    // restart vortexbox-player
    exec("/bin/systemctl restart vortexbox-player.service");

    ?>