Sep 08, 2015

Volumio 1.55 をいじってみる

ちょっとこれは問題あるかもということに気付いたので、エントリの最後に追記した。

備忘録として。

sshでログインした時に表示されるアスキーアート(?)は編集できる。
/etc/motd を書き換えればいい。
うちでは3つのvolumioが動いていてsshでログインするので区別がつくほうがいい。

コマンドプロンプトにはデフォルトで「volumio」が表示されている。
これはウェブブラウザからのアクセス画面:systemで設定できるplayer nameがそのまま表示されているんだけど、これはネットワーク上のホスト名と同一なので、実はASCII文字のaからzまでと0から9の数字とハイフンしか使えないらしい。アンダーバーとか使った日にはsshでログインすると(none)と表示される。

これをsshからログインして変更してみる。
VolumioのベースはRaspbianで、RaspbianのベースはDebianだから、Debianでどうやるんだろうってとこで調べたら、/etc/hostnameの変更と、/etc/hostsの変更というのが引っかかってくる。
Vine Linuxとはやり方が違う。

sudo vi /etc/hostname

volumioとだけ書いてあるので書き換える。rootじゃ出来なくてsudoじゃないといけない。

sudo vi /etc/hosts

127.0.0.1       localhost
127.0.1.1       volumio

これもvolumioとあるのを変更。リブートで反映される。
と思ったら、反映されるのはsshでログインした場合のみで、ウェブブラウザからアクセスしたときのplayer nameは変わっていない。他で記憶されてるらしい。
ウェブブラウザからのアクセスは普段使わないのでよしとする。

さて、次。
sshでログインして、pstree -acp とコマンドを打つと以下のような表示が出る。

root@volumio:~# pstree -acp
init,1  
  ├─avahi-daemon,1912
  │   └─avahi-daemon,1913
  ├─dbus-daemon,1878 --system
  ├─login,2358 -f    tty1
  │   └─bash,2359
  ├─monit,2301 -c /etc/monit/monitrc
  ├─mpd,1972 /etc/mpd.conf
  │   ├─{mpd},1973
  │   ├─{mpd},1974
  │   ├─{mpd},1975
  │   └─{mpd},1976
  ├─nginx,2322
  │   └─nginx,2323
  ├─nmbd,2091 -D
  ├─php5-fpm,2036      
  │   ├─php5-fpm,2037                                     
  │   ├─php5-fpm,2038                                     
  │   ├─php5-fpm,2039                                     
  │   ├─php5-fpm,2040                                     
  │   └─php5-fpm,2041                                          
  ├─player_wdog.sh,2328 /var/www/command/player_wdog.sh startup
  │   └─sleep,2661 10
  ├─player_wrk.php,2365 /var/www/command/player_wrk.php
  ├─rpc.idmapd,1572
  ├─rpc.statd,1560
  ├─rpcbind,1529 -w
  ├─smbd,2159 -D
  │   └─smbd,2170 -D
  ├─sshd,2223
  │   └─sshd,2636 
  │       └─bash,2641
  │           └─pstree,2662 -acp
  ├─udevd,158 --daemon
  │   ├─udevd,272 --daemon
  │   └─udevd,282 --daemon
  └─winbindd,2271
      └─winbindd,2292

とりあえず、いらないっぽいプロセスをkillしてみようということで、avahi-daemon、winbindd、smbd、nmbd、player_wdog.sh、player_wrk.php、nginx、php5-fpm、monit、udevd、と止めてみているが、音はちゃんと出ているようだ。
以下のような感じにシェイプアップされる。

root@volumio:~# pstree -asp
init,1  
  ├─dbus-daemon,1880 --system
  ├─login,2361 -f    tty1
  │   └─bash,2362
  ├─mpd,1975 /etc/mpd.conf
  │   ├─{mpd},1976
  │   ├─{mpd},1977
  │   ├─{mpd},1978
  │   └─{mpd},1979
  ├─rpc.idmapd,1575
  ├─rpc.statd,1563
  ├─rpcbind,1532 -w
  └─sshd,2224
      └─sshd,2487 
          └─bash,2489
              └─pstree,2513 -asp

音が良くなったかというと、はっきりしない。
大して比較してないからはっきりしなくて当たり前なんだけど。しかし、なんか良くなってるという感じはする。音の鮮度が上がっているような。デジタルで音が良くなるっていうのは大抵そんな感じだ。

いちいちこれをコマンド打ってやるのも一興なんだけど、この際なのでlinuxの起動過程をいじって設定してみることにした。
/etc/inittabによると、/etc/rc2.dと/etc/rcS.dを起動時に読んでるらしい。

root@volumio:~# ls /etc/rc2.d | less

total 12
drwxr-xr-x   2 root root 4096 Jul 16 07:00 .
drwxr-xr-x 100 root root 4096 Jul 16 06:58 ..
lrwxrwxrwx   1 root root   18 Jul 25  2013 K02plymouth -> ../init.d/plymouth
lrwxrwxrwx   1 root root   17 Jul 25  2013 K05rsyslog -> ../init.d/rsyslog
-rw-r--r--   1 root root  677 Jul 15  2013 README
lrwxrwxrwx   1 root root   18 May 17  2013 S01bootlogs -> ../init.d/bootlogs
lrwxrwxrwx   1 root root   14 May 17  2013 S01motd -> ../init.d/motd
lrwxrwxrwx   1 root root   15 Oct 28  2014 S01samba -> ../init.d/samba
lrwxrwxrwx   1 root root   22 Apr  9  2014 S01transientlog -> ../init.d/transientlog
lrwxrwxrwx   1 root root   17 May 17  2013 S13rpcbind -> ../init.d/rpcbind
lrwxrwxrwx   1 root root   20 May 17  2013 S14nfs-common -> ../init.d/nfs-common
lrwxrwxrwx   1 root root   13 May 18  2013 S16atd -> ../init.d/atd
lrwxrwxrwx   1 root root   14 May 18  2013 S16dbus -> ../init.d/dbus
lrwxrwxrwx   1 root root   18 Jul 30  2013 S16dropbear -> ../init.d/dropbear
lrwxrwxrwx   1 root root   15 May 18  2013 S16exim4 -> ../init.d/exim4
lrwxrwxrwx   1 root root   14 Oct 28  2014 S16nmbd -> ../init.d/nmbd
lrwxrwxrwx   1 root root   13 May 18  2013 S16ntp -> ../init.d/ntp
lrwxrwxrwx   1 root root   18 May 17  2013 S16php5-fpm -> ../init.d/php5-fpm
lrwxrwxrwx   1 root root   21 Oct 28  2014 S16samba-ad-dc -> ../init.d/samba-ad-dc
lrwxrwxrwx   1 root root   13 May 18  2013 S16ssh -> ../init.d/ssh
lrwxrwxrwx   1 root root   14 May 17  2013 S16sudo -> ../init.d/sudo
lrwxrwxrwx   1 root root   22 May 17  2013 S16triggerhappy -> ../init.d/triggerhappy
lrwxrwxrwx   1 root root   17 Oct 28  2014 S16winbind -> ../init.d/winbind
lrwxrwxrwx   1 root root   22 May 18  2013 S17avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx   1 root root   14 May 18  2013 S17cron -> ../init.d/cron
lrwxrwxrwx   1 root root   15 Oct  9  2014 S17rsync -> ../init.d/rsync
lrwxrwxrwx   1 root root   14 Oct 28  2014 S17smbd -> ../init.d/smbd
lrwxrwxrwx   1 root root   14 May 18  2013 S17wicd -> ../init.d/wicd
lrwxrwxrwx   1 root root   13 Oct  9  2014 S18mpd -> ../init.d/mpd
lrwxrwxrwx   1 root root   15 Oct 28  2014 S19monit -> ../init.d/monit
lrwxrwxrwx   1 root root   16 Oct 28  2014 S19myruns -> ../init.d/myruns
lrwxrwxrwx   1 root root   18 Oct 28  2014 S19rc.local -> ../init.d/rc.local
lrwxrwxrwx   1 root root   19 Oct 28  2014 S19rmnologin -> ../init.d/rmnologin
(END)

root@volumio:~# ls -al /etc/rcS.d | less

total 12
drwxr-xr-x   2 root root 4096 Jul 16 07:00 .
drwxr-xr-x 100 root root 4096 Jul 16 06:58 ..
lrwxrwxrwx   1 root root   22 May 18  2013 K81plymouth-log -> ../init.d/plymouth-log
lrwxrwxrwx   1 root root   20 May 18  2013 K81x11-common -> ../init.d/x11-common
-rw-r--r--   1 root root  447 Oct 16  2012 README
lrwxrwxrwx   1 root root   22 May 17  2013 S01fake-hwclock -> ../init.d/fake-hwclock
lrwxrwxrwx   1 root root   21 May 17  2013 S01hostname.sh -> ../init.d/hostname.sh
lrwxrwxrwx   1 root root   24 May 17  2013 S01mountkernfs.sh -> ../init.d/mountkernfs.sh
lrwxrwxrwx   1 root root   14 May 17  2013 S02udev -> ../init.d/udev
lrwxrwxrwx   1 root root   24 May 17  2013 S03keyboard-setup -> ../init.d/keyboard-setup
lrwxrwxrwx   1 root root   26 May 17  2013 S04mountdevsubfs.sh -> ../init.d/mountdevsubfs.sh
lrwxrwxrwx   1 root root   20 May 17  2013 S05hwclock.sh -> ../init.d/hwclock.sh
lrwxrwxrwx   1 root root   22 May 17  2013 S06checkroot.sh -> ../init.d/checkroot.sh
lrwxrwxrwx   1 root root   32 May 17  2013 S07checkroot-bootclean.sh -> ../init.d/checkroot-bootclean.sh
lrwxrwxrwx   1 root root   14 May 17  2013 S07kmod -> ../init.d/kmod
lrwxrwxrwx   1 root root   17 May 17  2013 S07mtab.sh -> ../init.d/mtab.sh
lrwxrwxrwx   1 root root   20 May 17  2013 S08checkfs.sh -> ../init.d/checkfs.sh
lrwxrwxrwx   1 root root   21 May 17  2013 S09mountall.sh -> ../init.d/mountall.sh
lrwxrwxrwx   1 root root   31 May 17  2013 S10mountall-bootclean.sh -> ../init.d/mountall-bootclean.sh
lrwxrwxrwx   1 root root   16 May 17  2013 S11procps -> ../init.d/procps
lrwxrwxrwx   1 root root   19 May 17  2013 S11udev-mtab -> ../init.d/udev-mtab
lrwxrwxrwx   1 root root   17 May 17  2013 S11urandom -> ../init.d/urandom
lrwxrwxrwx   1 root root   20 May 17  2013 S12networking -> ../init.d/networking
lrwxrwxrwx   1 root root   17 May 17  2013 S13rpcbind -> ../init.d/rpcbind
lrwxrwxrwx   1 root root   20 May 17  2013 S14nfs-common -> ../init.d/nfs-common
lrwxrwxrwx   1 root root   21 May 17  2013 S15mountnfs.sh -> ../init.d/mountnfs.sh
lrwxrwxrwx   1 root root   31 May 17  2013 S16mountnfs-bootclean.sh -> ../init.d/mountnfs-bootclean.sh
lrwxrwxrwx   1 root root   13 May 17  2013 S17kbd -> ../init.d/kbd
lrwxrwxrwx   1 root root   23 May 17  2013 S18console-setup -> ../init.d/console-setup
lrwxrwxrwx   1 root root   20 May 18  2013 S19alsa-utils -> ../init.d/alsa-utils
lrwxrwxrwx   1 root root   21 May 17  2013 S19bootmisc.sh -> ../init.d/bootmisc.sh
(END)

とりあえず、デフォルトの起動過程が終了したあとに要らないプロセスを止める方向でやってみる。
最初から起動させない手もあるが、それでvolumioに不具合があっても困ると思って。

rcS.dの中で止めれそうなのはS02udevだけっぽい。
udevにシンボリックリンクを張りリネームする。
[root@localhost rcS.d]# ln -s ../init.d/udev K82udev

これでK82udevがudevdを止めてくれるはずと考えたが上手くいかない。これだとudevdは止まらないようだ。
rc2.dのS17avahi-daemonでも試したが、同じ。
止めたいものは最初から止めておくしかないっぽい。しかしudevは/devを管理するデーモンなので、起動後にNASをマウントする都合上、問題がありそうな気がする。、、もう、止めなくてもいいか、、。

rc2.dのほうは最初から止めてもいいのがあるかもしれない。
S17avahi-daemonをBS17avahi-daemonにリネームする。どんなファイル名でもいい。要するにSを死活化できれば、initから読み込まれないはずだ。
再起動してpstree -aspを打ってみたらavahi-daemonは起動していない。成功だ。しかし、、、以前には見られなかったプロセスが増えている、、。atd、cron、ntpd、thd、これじゃ何をやってるのか分からない。いろんなプロセスが連携しているので、何かを動かさなかったら停止しないままだったり代わりに動くものが出てくるのかもしれない。

どうもinitの挙動をどうこうするよりも、特定のプロセスをkillするスクリプトを起動後に動かすようにしたほうが良さそうな。
でも書き方がわからないんだけど、、。

いろいろ調べて、以下のコマンドでプロセス名からプロセスIDを引用してkillできると言う事が分かった。

pgrep "プロセス名" | xargs kill

ということなら、以下のようなシェルスクリプトを実行するようにしておけば一括で不要なプロセスを終了できる。
/usr/local/binに、例えばkills.shというファイルを作る。

vi /usr/local/bin/kills.sh

#!/bin/sh

pgrep "player_wrk.php" | xargs kill
pgrep "player_wdog.sh" | xargs kill
pgrep "nginx" | xargs kill

pgrep "monit" | xargs kill

pgrep "winbindd" | xargs kill
pgrep "smbd" | xargs kill
pgrep "nmbd" | xargs kill

pgrep "php5-fpm" | xargs kill

pgrep "avahi-daemon" | xargs kill
pgrep "udevd" | xargs kill

こんな感じで。
sh /usr/local/bin/kills.sh
このコマンドで複数のプロセスをkillできる。
IDが大きいものから小さいものへの順番で止めている。順番に注意しないとkillしたはずのプロセスが復活することがあるようだ。

さて、このコマンドを/etc/rc.localに記入する。 rc.localの記載はもともとはこんな感じ。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/var/www/command/player_wdog.sh startup & > /dev/null 2>&1

exit 0

多分、exit 0の前の行に、sh /usr/local/bin/kills.sh、と書き込んでおけば何とかなるんじゃないだろうか。
と思ったら、たしかに何とかなるんだけど、余計なプロセスが残存する。
多分、スクリプトの実行が早すぎるのだろう、ということで以下のような記載に変更。

/var/www/command/player_wdog.sh startup & > /dev/null 2>&1
sleep 30;sh /usr/local/bin/kills.sh
exit 0

起動行程が全て終わった30秒後にスクリプトが実行されるという塩梅。
これで、きれいに要らないプロセスを終了できるようになった。秒数が少ないと上手くいかないようだ。

気付いたことで追記。
うちではウェブブラウザからvolumioの操作をしない前提で、mpd設定ファイルのportを6600以外に変えているので、起動の時点でupmpdcliが動かない、ということに今更気付いた。
portの設定変更なしに6600のままだったら、当然upmpdcliが動くのだけど、上記のスクリプトを使うとそれがkillされずに取り残されて、たぶん暴走するんじゃないかな、、、
#!/bin/shの下に、

pgrep "upmpdcli" | xargs kill
という1行を足せばその問題は回避されると思うのだけど。
もしもまるごとコピペして何かトラブったような人がおられたら、今更追記でごめんなさい。

Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.