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行を足せばその問題は回避されると思うのだけど。
もしもまるごとコピペして何かトラブったような人がおられたら、今更追記でごめんなさい。
writeback message:
Caution!!!
Now, Anyone cannot post a comment.