Posted by & filed under 未分類.

技術ページへのリンク。当時解決したかった問題と併せて紹介。

vmware playerなどのvmdkからkvmのqcow2への変換 (Jan 25 2015)

タイトルの通り。仮想マシンをvmwareからkvmへ変換したいというニーズ。

$ qemu-img -f vmdk -O qcow2 myvm/myvm-s0*.vmdk myvm.qcow2

第7章 イメージ形式の変換 – OpenStack 仮想マシンイメージガイド  – カレント
vmware – How do I convert a multiple-part VMDK disk image to qcow2? – Ask Ubuntu
Streaming NBD server | Richard WM Jones

linuxに構築したタイムマシンを正しくネットワーク上に公開する手順 (Jan 25 2015)

タイムマシンボリュームをlinuxのファイルサーバ内に保存していて、そこからMacの復元をしようとしたらホストが見えず困った。
記載の手順でnetatalkとavahiの設定をすると復元コンソールから見えるようになる。
HowTo: Make Ubuntu A Perfect Mac File Server And Time Machine Volume ¦ kremalicious

Posted by & filed under chinachu, debian, RAID.

前回のエントリを読みながらチューニングを施した。全然違う部分で改善ができたのでそのレポート。例によってAS-ISです。

やってみて、chinachuサーバ+NASのPCが割とボトルネックになっていたということに驚いた。RAIDのチューニングはかなり重要という良い気付きになった。

rasPIのチューニング

ウチのrasPIはarch上にkodi(xbmc)を構築している。自分が導入した当時のバージョンではhavegedが動作していてメモリを10MB程度食っていた。乱数ソースに hwrng が使えるので haveged は停止できる。

RNGD_OPTS="-o /dev/random -r /dev/hwrng" # urandom から hwrng に変更

list: /etc/conf.d/rngd

参考: Raspberry Pi – ArchWiki section 11

/var/logをtmpfsにする。

# 
# /etc/fstab: static file system information
#
#
/dev/mmcblk0p1  /boot           vfat    defaults        0       0
tmpfs           /var/log        tmpfs   defaults        0       0
mynas.local:/   /mnt/nas        nfs     nfsvers=3,nolock,proto=udp,intr,noatime,async,noauto,x-systemd.automount   0       0

list: /etc/fstab

参考: Maximizing performance – ArchWiki section 5

RAID チューニング

先読みブロックをデカくする。再生開始直後の再生ストップがなくなった感がある。以下例の65536では 512バイトセクタの数なので32MBの先読みが実行される。

# blockdev --setra 65536 /dev/md0

shell command rc.localに書くのも良いかもしれない。

参考: blockdev(8) – Linux manual page

RAIDの書き込み時のパフォーマンスを改善するため、stripe_cache_sizeを大きくする。起動時に自動反映させる場合はrc.localに以下スニペットを貼る。今日だけ欲しいならスニペットを実行すればその直後から反映される。ウチのホストはメモリを4GB積んでいるので支障無かったが、メモリの搭載が小さいホストにおいては注意が必要。メモリ使用見込は 4(kernelページサイズ|KB) * (物理ディスク本数) * (stripe_cache_size|KB) の式で計算できる。

2番目の参考リンクではRAID再構築を行う場合のチューニング方法が紹介されている。speed_limit_min,maxの設定を広くしておくと(例えば500から1000000など)、m2tsを再生しながらでも効率よくリビルドができる。ウチの環境ではminを2000などにしていると転送が間に合わなかった。なおデフォルトではmaxが小さいためリビルドの転送速度がキャップされてしまう。必ずmaxの数値は上げておく。たまたま今日2TB*3のraidに1本追加(grow)したのでmdstatを監視していると、チューニングをしない場合にはリビルドの完了まで見込40時間程度だったが、15時間になった。queue_depthを1にするチューニングについては体感できる改善はなかった。故障からのリビルドにおいてはbitmapオプションも使うこと。

for a in /sys/block/md?; do
    echo 8192 > $a/md/stripe_cache_size
done

list: /etc/rc.local

# sysctl -w dev.raid.speed_limit_max=1000000
# sysctl -w dev.raid.speed_limit_min=500

shell command (もしくは /etc/sysctl.d/ に同様の設定を書く → sysctl -a | grep speed_limit > /etc/sysctl.d/99_myraid_tuning.conf)
参考: Linux RAID mdraid “stripe_cache_size” vs. transfer rate, 5 Tips To Speed Up Linux Software Raid Rebuilding And Re-syncing

Posted by & filed under 未分類.

m2tsを再生していると、特に再生し始めにハングアップすることが多く、ストレスが溜まる。

mp4では障害が出ないため、転送量が多いことによる過負荷からjournaldの過負荷warningがさらに負荷を増大させるという悪循環に陥っていると予想した。SDカードホンマに遅いね。アップデートもちょっと溜めたら1時間で終わらない。

とりあえず対策はまた後日実施するが、そういう観点で漁ったURLを記載する。

ログをramdiskに

ramdiskで揮発してしまうログを適当に同期する目的で使えそうなサービスAnything-sync-daemon

 

Posted by & filed under chinachu, tips, メモ.

某局で毎朝放送されているドラマ番組など、副音声が含まれる放送を安直にffmpegに掛けてmp4にしようとすると副音声と主音声が混った上にフレームと合わなくなってワヤ*になってしまう。
試行錯誤の結果、以下を付けると正しく主音声と副音声が分離されることがわかった。
忘備録として。

-acodec libfaac -filter_complex channelsplit -ar 48000 -ab 128k

参考1 ffmpegのドキュメント: https://trac.ffmpeg.org/wiki/AudioChannelManipulation#stereo2monostreams
参考2 音声多重放送(wikipedia): http://ja.wikipedia.org/wiki/音声多重放送
* “ワヤ”まったくダメになってしまう意

Posted by & filed under chinachu, Linux, ssh, tips.

前回からの続きである。
前回の構成では録画していない時間帯では5分でシャットダウンしてしまうため、crontabをコメントアウトしないと作業もできない状況になってしまっていた。そこで「使っていない検知」としてwhoコマンドを入れ、ログイン中は落ちない仕組みを作った。あと、電源入れてションベンして帰ってくると落ちてるという事故を繰り返したため、uptimeが15分を過ぎるまで落とさない仕組みを作った。

#!/bin/sh

C=`who -u | wc -l`

if [ "$C" != "0" ]; then
  exit 1
fi

exit 0

code: loginFree

#!/bin/sh

UTIME=`uptime -s`
BASE=`date -d"$UTIME" +%s`
EXP=`date -d-15min +%s`

[ "$BASE" -lt "$EXP" ]

exit $?

code: up15min

raspberry piからはnfsマウントをしてビデオを再生する構成にしているため、showmountコマンドでnfs利用の監視を試みたが切断しても接続の情報が残ってしまい確実ではなかった。
そこでraspberry piからシステム起動時にsshセッションを張り、利用を録画サーバに知らせる方法を考えた。

rpiのArch向けにsystemdのスクリプトを作った。以下はsshを非対話モードで動かす設定である。下記を作成し、systemctl enable naslogin と打つだけで起動時に勝手に動いてくれる。詳細はリファレンスを参照されたい。 hostkey.id_ecdsaなどは作成し、予め対話なしでログインできるようにしておくこと。

[Unit]
Description=Begin login beacon for nas
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/ssh -o BatchMode=yes -t -t -i /etc/hostkey.id_ecdsa chinachu@myhost.local ping -i 10 localhost > /dev/null
Restart=on-failure

[Install]
WantedBy=multi-user.target

code: /usr/lib/systemd/system/naslogin.service

*/5 * * * * /usr/local/bin/up15min && /usr/local/bin/chinachuFree && /usr/local/bin/loginFree && ~root/shutmail.sh && sleep 10 && /sbin/shutdown -h now

code: crontab -e

rpiをブチ切りした時は1時間程セッションが残ってしまうようだが、概ね良好である。

 

Posted by & filed under chinachu, Linux, python.

過去にChinachu向けのスクリプトを少し書いたが、この度ちょっと家を空けるため、それを見越して録画が動作していない場合に自動でシャットダウンする仕組みを作成した。導入方法などはまた今度。

過去のスクリプトに少し手を入れる格好。

#!/usr/bin/env python3

from urllib.request import urlopen
import json
import io
import time

class ChinachuStatus:
    def __init__(self, urlBase):
        self.urlBase = urlBase
    
    def getNextReserve(self):
        response = urlopen(self.urlBase + '/reserves.json')
        res = json.load(io.TextIOWrapper(response, response.getheader('content-type').split('charset=')[1]))
        
        now = time.time()
        for e in [ int(ent['start'] / 1000) for ent in res if ent['start'] / 1000 > now ]:
            return e
    
    def isChinachuBusy(self):
        response = urlopen(self.urlBase + '/recording.json')
        res = json.load(io.TextIOWrapper(response, response.getheader('content-type').split('charset=')[1]))
        if len(res) > 0:
            return True
        if self.getNextReserve() - 600 < time.time():
            return True
        return False

if __name__ == '__main__':
    url = 'http://watson.local:10772/api'
    print(ChinachuStatus(url).getNextReserve())
    print(ChinachuStatus(url).isChinachuBusy())

Code: ChinachuStatus.py

#!/usr/bin/env python3

from ChinachuStatus import ChinachuStatus

if __name__ == '__main__':
    url = 'http://localhost:10772/api'
    print(ChinachuStatus(url).getNextReserve() - 300)

Code: chinachuNext

#!/usr/bin/env python3

import sys
from ChinachuStatus import ChinachuStatus

if __name__ == '__main__':
    url = 'http://localhost:10772/api'
    res = ChinachuStatus(url).isChinachuBusy()
    if res:
        print("Chinachu is busy now.")
        sys.exit(1)
    print("Chinachu is free.")
    sys.exit(0)

Code: chinachuFree

*/5 * * * * /usr/local/bin/chinachuFree && /bin/date | /usr/bin/mail -s "chinachu is going to poweroff" haruo31 && /sbin/shutdown -h now

Code: ~# crontab -e

Posted by & filed under 未分類.

いやはやハマったのでメモ。
以下いくつかのURLで紹介されているdjango.cgiを使ったCGIによってdjangoを動
作させる方法だが、1.7以降ではtranslationが初期化できないなるエラーで動作
しないことがわかった。

http://rokujyouhitoma.hatenablog.com/entry/20100222/1266828762
http://ameblo.jp/dropshipping-dojyo/entry-11285616281.html

1.7のリリースノート
https://docs.djangoproject.com/en/dev/releases/1.7/#wsgi-scripts

リリースノートにあるとおり、
django.core.handlers.wsgi.WSGIHandler()
ではなく
django.core.wsgi.get_wsgi_application()
をつかうようにとのこと。

Posted by & filed under tips.

ググってもqiitaのクソ記事しか上がってこなかったのでメモ。

いまのフォントファミリは変更せず、サイズだけを調整したいという場合、即席の場合は C-x C– と C-x C-+ または C-x C-= で拡大、縮小ができる。

.emacsに書く場合は以下。 heightの後に続く数値を10単位で調整する。
(set-face-attribute ‘default nil :height 100)

参考 stackoverflow の記事

Posted by & filed under Linux, メモ.

テスト

org2blogを使って試しにエントリを書いてみた。

インストールしたモジュール

  1. package-install を利用し、以下モジュールをインストール。 org-mode
  2. el-get.el を利用し、以下モジュールをインストール。 org2blog
  3. https://github.com/punchagan/org2blog を参考に初期設定

Posted by & filed under Linux, tips.

Raspberry pi に Arch linuxを入れて家の録画サーバからビデオを視聴する環境を構築したので、メモ。
このドキュメントを見られた方へ、xbmcを主体で考えておられるならおそらくraspbmcをインストールするのが正しい運用だと思われる。Archにする強い動機がなければ選択しない方が良いだろう。

mpeg2デコーダライセンスを購入する

地デジ放送をデコードするにはraspberry piでは有償のライセンスが必要となる。
ソフトウェアデコーダでは視聴に耐えない。なお、ライセンスはmpeg2のハードウェアデコードにのみ要求されているので、h264に変換したものしか再生しないのであれば、必要ない。
その辺りはこちらの記事に詳しい。

http://www.raspberrypi.com/mpeg-2-license-key/

届いたキーは/boot/config.txtに書く。

xbmcのインストール

pacman -S xbmc
※ git最新版はビデオ再生中にハングするなど運用に適さないので避けること。

mplusフォントの導入

Archのxbmcのデフォルトテーマは日本語フォントをサポートしていない。
幸いスタイリッシュなフォントがフリーで入手できるので、それを利用する。
以下のURLからMPlusフォントのtarをダウンロードする。

http://mplus-fonts.sourceforge.jp/

一度xbmcを起動すると作成される .xbmc の addons 以下、もしくは /usr/share/xbmc/addons 以下のいずれかのskin.confluence(confluenceはテーマ名。違うテーマを利用している場合は名称がマッチするディレクトリを選択する)

録画ストレージとのリンク

xbmc内蔵機能でnfsを始めとする沢山のプロトコルが利用可能だが、ビデオ再生に関連する部分については敢えて切り離すこととした。録画サーバではnfsv4が動いていて、デフォルトではtcp接続になるためだ。

omxplayerで検証したところ、tcpでは処理コストが高く、オーバークロックしてもスループットが追い付かなかった。BSの録画に関しては3秒程でバッファが枯渇して再生がブツ切りされるという有様だった。

ブート時にはネットワークが起動しない為、遅延マウントとした。

chinachu.local:/var/videos /mnt/chinachu nfs vers=3,udp,nolock,noauto,x-systemd.automount

録画ストレージは遅延マウントにする録画ストレージとはnfsで接続する形にした。
avahiでホスト名参照させると、ブート直後には名前解決ができないため、遅延マウントにする。

nfsは敢えてv3, udp, nolockで構築する v4のtcpでは遅延しまくりで視聴に耐えなかった。(rbp向けのomxplayerで比較)

今日はここまで。