LinkStation (LS-QVL) が時々ハングるので,中身を調べてみた

proxy配下に置いたLinkStationが,週に1回くらいハングってくれるので,ちょっといじってみたよ.
結果はどうなることやら.

sshで入れるようにする

LinkStation に ssh で root ログインできるようにする - maruko2 Note.
を参照した.
一般ユーザでログインできるようにしようとしたら,色々と抑止策が施されていて,リブートするごとに設定が巻き戻ったり(正確にはsshd再起動で巻き戻る)するので,rootでパスワードログインすることで良いことにした.
気になる人は公開鍵認証にしてはどうか.試してないけど.
あと,コマンドライン履歴にパスワードが残る運用は私の中ではあり得ないので,ファイルに書き出したのをコマンド内で呼んでいる.
あと,gつけるのは怖いので,私はsedにgはあんまつけない.ちゃんと動きそうか,catとかで確認すること.

  1. パスワード設定
    $ IP="192.168.1.X"
    $ Admin_PW=$(cat admin_passwd)
    $ ROOT_PW=$(cat root_passwd)
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "(echo $ROOT_PW ; echo $ROOT_PW) | passwd"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "cat /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "sed -i 's/UsePAM yes/UsePAM no/' /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "sed -i 's/PermitRootLogin no/PermitRootLogin yes/' /etc/sshd_config"
    $ java -jar acp_commander.jar -t $IP -ip $IP -pw $Admin_PW -c "/etc/init.d/sshd.sh restart"
  2. ログイン
    $ ssh root@$IP

ログを探す1

どうも,/var/log/syslogがないなーと思ったら,/var/log/messagesに色々と書いてあった.
前回暴走直前の挙動を調べると,majishanzuかmDNSResponder辺りが怪しい.

  1. とりあえず,majishanzu を/etcで探しても見付からないので,頑張って探す.
    # which majishanzu
    /usr/local/sbin/majishanzu
    # grep majishanzu /usr/local/sbin/majishanzu
    /etc/melco/majishanzu
    majishanzu_state
    /var/lock/majishanzu_update
    /etc/melco/majishanzu/
    /tmp/majishanzu_dl
    %s/majishanzu_info
    /etc/melco/majishanzu/majishanzu_state
    majishanzu success
    majishanzu
    majishanzu start
    

    しかし,/etc/melco/majishanzu には情報はないのであった.

  2. 続いて,ログの直前にtwonkyのログが出ていたので,twonkyから呼び出されているのでは?と推測.
    検索したら出てきた.
    Linkstation Duo LS-WXL - how to access media server confguration page (port 9050)
    /usr/local/twonky-alt/ へ

    # cd /usr/local/twonky-alt/
    # grep majishanzu *
    twonky.sh:MS_DL_LOCK_FILE=/var/lock/majishanzu_update
    twonky.sh:MAJISHANZU_DIR=/etc/melco/majishanzu
    (略)
    

    grepをかけると,twonky.shで呼び出されているので,中を読む.
    /usr/local/sbin/majishanzu のある時,do_majishanzuが呼ばれているようなので,元ファイルをリネームして退避すれば,もう二度と呼ばれないはず.

    # mv /usr/local/sbin/majishanzu /usr/local/sbin/majishanzu.bak
  3. ちなみに,絶対どこかから呼び出されて動作しているはず,と思ってcrontab -lで出てくるスクリプトが置いてある/etc/cron/cron,d内をgrepしてみると,ms_checkversion.shの中にtwonky.shが書かれている.
    こいつは30分に1回呼ばれていた.

ログを探す2

mDNSResponderも止めておこうと調べてみると,bonjour関係のプロセスだった.
そういえばiTunesを使ってた時にwindowsでも見たことある.

面倒臭いので結論から言うと,こいつはcronではなく/etc/init.d/bonjour.shから呼ばれていて,/etc/melco/infoの中を見るとbonjour=onの設定が書かれており,bonjour.shの中でこいつがonなら…という行がstart()にあるので,/etc/melco/infoを書き換えてbonjour=offとしてみた.

chainer, cuDNN on ubuntu 14.04

cudaは,CUDA 7.5 Downloads | NVIDIA Developerあたりから落として入れる.
私はネットワークインストーラを選択して入れた.入れ方はダウンロードリンクのすぐ下に書かれた通りにやればOK.
なんか,nvidiaドライバもこれで入る.入ったかどうかは

$ lsmod | grep nv
nvidia_uvm             77824  0 
nvidia               8544256  1 nvidia_uvm
drm                   344064  5 i915,drm_kms_helper,nvidia

みたいな感じで入ってればいいんじゃないかしら.
記憶にないけど,なんかnouveauは入ってなかった.
私のマシンはオンボードのIntelグラフィックコントローラとGeForceの両方を搭載しているので,多分最初にubuntu入れる時,グラボを使わなかったんじゃなかろーかと.よく知らんけど.

cuDNNをNVIDIA cuDNN | NVIDIA Developerから落としてきて入れる.
登録は必須っぽいから,仕方なくやる.

cudnnのtar ballを解凍したら,cudaというディレクトリができるので,cudaのインストールパスにコピる.
多分,デフォなら /usr/local/cuda あたりにあるはず.

chainerを入れ直す.
chainerはキャッシュを使うとコンパイルし直してくれないっぽいので,キャッシュを無効化して入れる.

$ pip install chainer --user --no-cache-dir

ローカルに入れない場合は,userオプションを抜いてsu権限でやる.

うまくいけば,pythonから呼び出した時にエラーが出なくなる.

>>> from chainer import cuda
>>> cuda.zeros(1)
array([ 0.], dtype=float32)

ubuntu 14.04 の deja-dup で su 権限が必要なバックアップを samba 上に残す

gksudo を使う方法 → ホームディレクトリに smb: というディレクトリが掘られ,サーバ上にバックアップできない.
gksu を使う方法 → gksudo gksu deja-dup-preferences では上と同じ現象.gksu を素で使うなら,GUI でログインできるようにしても変わらんと思ったので,今回はそっちの方法.

手順

  1. rootにパスワードを設定する
    sudo passwd root
  2. lightdm にマニュアルログインを追加
    +greeter-show-manual-login=true
    

    して,lightdmを再起動

    $ sudo service lightdm restart
    

    ちなみに,SeatDefaults セクションに書けば良いので,こっちに書いても良い.
    何故か,user.confではダメだった.

    [SeatDefaults]
    greeter-show-manual-login=true
    
  3. 設定ウィンドウのバックアップを起動し,普通に設定.

dockerをproxy越しに起動する on debian jessie

Ubuntu 15.04 でかつProxy環境で、Dockerを使う場合の落とし穴 - Qiita
これだと思うんだけど,なんかリンク先の記事が404 Errorになってたので探した.

Controlling and configuring Docker using Systemd - Docker Documentation

ざっと言うと,upstartを前提にした古いubuntu向け情報がいっぱい出てくるけど,それではうまくいかないよ.だってsystemdだもん,
ということらしい

CUDA on Ubuntu

ただのメモなんで,読み解いて使ってね

nouveauと競合

  • Ubuntu desktopをnvidiaボード搭載マシンに入れると,標準でnouveauが入るが,CUDAを動作させられないので外さないといけない
  • Nouveauを入れたままNVIDIAプロプライエタリドライバを入れると,Xが起動しなくなった
  • Nouveauを消すとX関連が依存関係によりまとめて消えた
    • 二度手間になるので,minimumから入れた方が早いかも

プロプライエタリドライバ導入

  • http://www.nvidia.co.jp/Download/index.aspx?lang=ja
    $ sudo ./NVIDIA-Linux-x86_64-XXX.XX.run

    上のURLから,カードに合ったバージョンが入手できるはず
    この手順のあとに,lightdmなどX環境を入れる

CUDA導入

  • https://developer.nvidia.com/cuda-downloads
  • deb (local) でやってみる
    $ sudo dpkg –i cuda-repo-ubuntu1404-7-5-local_7.5-18_amd64.deb
    $ sudo apt-get install nvidia-prime nvidia-XXX.XX-updates-dev
    
  • 念のため,関連ドライバを改めて入れてみた
    $ sudo apt-get update
    $ sudo apt-get install --upgrade nvidia-settings
    $ sudo apt-get install cuda
    

Vimとシェルと私

vimまたはgvimからシェルを新しいタブで呼び出して編集とコンパイル/インタプリットをvim内で完結できたらいーなー,と思って調べたら,満足する解が見付からなかったという話.

前提:私の考え方は,この方とかなり近い→シェルを求めて三千里~悠久のvim編~ - Alone Like a Rhinoceros Horn
ただしvimもemacsも編集内容によって使い分けている.

ともかく私の我侭は

  • zshを実行したいよ
  • :shellでコマンドラインを残してvimに戻れないのは有り得ない
  • screenやtmuxみたくCtrlショートカットの1つを占有されると,何に割り当てても困ることが多い
    C-a→数字のインクリメントは結構よく使う
    C-t→texファイルの編集はemacs+evil+YaTeXなので,コンパイルができなくなる
    などなど…

結局辿りついたのが,このweblogにも,たまに書いているxmonadというタイル型ウィンドウマネージャを入れて右Altのみをmodキーにするというもの.
Vim/Emacsやshellは左手で操作し,それらの間の遷移は右Altで遷移する,と.
バッファ切り替えの次元が1次元増えるような操作感なので,慣れないと厳しいかも知れんけど.

で,現状の課題は,VimShell作者のShougoさんもPresentation file · Shougo/vimshell.vim Wiki · GitHubで書かれているけど,
zsh上で入力した文字列をバッファに取り込めないこと.
vimに持ってくるのに,タイル型WMを使ってるくせにマウスが必要なのがイマイチだ.
はっきしいって,ターミナル側でC-kしたものをOS(?)のクリップボードみたいなところに格納してくれれば,Kaoriya版もってくれば,"+pとかで貼り付けられるんだけどなー.

Gifアニメ→mp4

$ convert -limit memory 300MB -coalesce from.gif %04d.png
$ ffmpeg -r fps_of_gif -i %04d.png -r fps_of_mp4 to.mp4

拾ったgifアニメもこれでmp4に変換できるぜ

ログを日付別に行数カウントする

monthlyでlogrotateしているログが,ある月だけ突出してサイズが大きかったので,いつのログが問題なのかを見るためにちょっと書いたスクリプト.
ちょっと月を入力するところをサボった.
数字の0フィルは-wオプションらしい.

#!/bin/bash

for d in $(seq -w 1 31)
do
echo -n $d
echo -n ' '
echo `zcat $1 | grep $d/Nov/2015 | wc -l`
done