Linux」カテゴリーアーカイブ

さくらインターネットもう駄目かも

さくらインターネットもう駄目かも

cpu-year

自宅サーバは、さくらのVPS 4GBで2年以上運用しているわけですが・・・・昨年11月くらいから徐々にstealが増え始めました。stealは、仮想マシンがホストOSに「CPUパワーくれよん」と言ったとき、ホスト「あげられないなー」と言われた割合みたいなもんですね。

cpu-month

それでも耐えてたんですが、さらにここ2週間くらいでiowaitも激増。このくらいになると端末叩いていてもディスクの遅さが体感できるようになり、SSDプランを借りていてもHDDとあんま変わらない感じで萎える。

まあ、同じホストにすごい面倒な客が引っ越してきちゃったかなー。

年間で払っているので簡単に退去できるわけではないんだけど、そろそろ代替プロバイダ探さないと駄目かもしれませんね。

さようなら、さくらインターネット・・・・君のことは5秒は忘れないよ。

 

いまさらSamba3で苦労している

いまさらSamba3で苦労している

ほんと「単一ドメインでディレクトリ/mnt/shareを誰でも共有できるようにする」目的だけ達成できればいいのに、すごーく苦労しているという話。SMB2を使って高速化したかっただけなんだけどねー

今更samba3もないものだけど余計に情報が錯綜して困ってる。

現状の設定ファイル

testparmを通したもの….

[global]
 server string = %h server
 map to guest = Bad User
 obey pam restrictions = Yes
 pam password change = Yes
 passwd program = /usr/bin/passwd %u
 passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
 unix password sync = Yes
 syslog = 0
 log level = 3
 log file = /var/log/samba/log.%m
 max log size = 100
 disable spoolss = Yes
 dns proxy = No
 panic action = /usr/share/samba/panic-action %d
 printing = bsd
 print command = lpr -r -P'%p' %s
 lpq command = lpq -P'%p'
 lprm command = lprm -P'%p' %j
 blocking locks = No
 oplocks = No
 wide links = Yes
[share]
 comment = Media Directories
 path = /mnt/share
 read only = No
 guest ok = Yes

設定ファイル解説

文字セットをWin/Linux/Macで「普通」に使えるようにする

display charset = UTF-8
 unix charset = UTF-8
 dos charset = CP932

security=shareを設定する愚策脱却

map to guest = Bad User
 (security = user)

SMB2を使って高速化

 max protocol = SMB2
 (security = user)

NetBIOS名の解決にDNSを使わない,タイムアウト抑止

dns proxy = No

アカウント管理を極力UNIX(PAM)に任せる

obey pam restrictions = Yes
 pam password change = Yes
 unix password sync = Yes

ログを最小にする

syslog = 0
 log file = /var/log/samba/log.%m
 max log size = 100

Sambaでプリンタ共有無効&ログ抑止

disable spoolss = Yes
 printing = bsd

複数Ver.Windows OSが共存している状態でファイルが壊れる問題の対処

blocking locks = No
 oplocks = No

Win含めたユーザにsymlinkを意識させず、かつ管理者はSambaの外で操作できる

unix extensions = No
 wide links = Yes

どうしてもMac OS Xからログインできない

ゲストでも登録ユーザでもダメで….多分上記の設定ファイルが間違っている
のだろうけど全くPAM <-> Sambaのアカウント管理が同期してくれないよのね。

/var/lib/samba/passdb.tdbがなぜか更新されない。smbpasswdも使えない。

腹が立ったので

# pdbedit -a -u papanda

として強制的にユーザ追加してguestログインは諦めた!敗北!

find,xargsコマンドの小ネタ

findコマンドの正規表現

仕事で。とある動画系商用システムで、定期的に動かしていたコンテンツを別サーバと同期するバッチが凍り付くようになったとヘルプ。バッチを覗いてみると…

find /var/cache -type f -name '*.jpg' -exec rm -f {} \;
find /var/cache -type f -name '*.JPG' -exec rm -f {} \;
find /var/cache -type f -name '*.png' -exec rm -f {} \;
find /var/cache -type f -name '*.PNG' -exec rm -f {} \;
find /var/cache -type f -name '*.bmp' -exec rm -f {} \;
(これが20行くらい続く)

ouch!

仮に/var/cacheに10万個ファイルがあれば、ディレクトリサーチは10万x20行。開発者に聞いたところ「拡張子を列挙しようと思ったが()が効かないのでそういうものだと諦めた」だそうで。

Linuxなどでよく使われているGNUfindコマンドの場合、regextypeで正規表現を切り替えることができる。大文字小文字を区別しない-iregexもある。以下のように書くだけでディレクトリサーチの回数は1/20になる。

find /var/cache -type f -regextype posix-exteneded -iregex
'.+\.(jpg|png|gif|bmp|mpg|mp4|3gpp|ts|mp4a|aac)$' ....

ファイル削除の高速化

さらにバッチが凍り付く原因を調べると、動画からサムネイルを生成する
プログラムが壊れたアップロードファイルを読み込んで暴走し、cacheディレクトリに800万個くらいのJPEGを生成したことがわかった。そりゃ凍り付くわな….

findのもうひとつの盲点は-execオプションの扱い。ちまたのLinux入門書を見ると半ば定型句のように-exec rm -f {} \;が書いてある(俺もな!)。
実はこの指定、1ファイルごとにrmコマンドをfork()してexec()するので
とても遅い。

本来、手動で複数ファイルを消すときも、

$ rm hoge.txt piyo.txt aho.jpg ...

というように複数ファイルを指定することが多いはず。これを模倣してくれるのがxargsコマンド。findから受け取ったファイルリストをコマンド引数ギリギリの長さまで羅列して、rmコマンドに渡してくれる。

20万個の空ファイルを生成してベンチマークしてみる。

$ time find cache -type f -exec rm -f {} \;
real 2m38.417s
user 0m1.356s
sys 0m35.328s

ファイル名に空白を含む場合を想定して、findには-print0オプションを、
xargsには-0オプションをつけることにしよう。

$ time find cache -type f -print0 | xargs -0 rm -f 
real 0m9.092s
user 0m0.276s
sys 0m2.812s

約18倍高速化

6時間かかる削除処理が20分で終わります…となると、実作業の効率はだいぶ異なってくる。顧客の心情も。

さて。これが最速か?実はわざわざxargsをパイプで結ばなくても、もともとfindコマンドには-deleteオプションがあり、一切外部コマンドを使わなくてもファイルを消すことだけはできる。ディレクトリサーチしているfindが直接unlink()システムコールを呼ぶから理論上は最速のはず….

$ time find cache -type f -delete
real 0m9.105s
user 0m0.144s
sys 0m2.692s

しかし(この環境では)あまり変わらなかったようだ。速度が全く同じであれば、rm -vfとして実際に消せたかログを残せるxargsコンビの方が多少有利か。

xargsコマンドの小技

ちなみに、xargsコマンドには-lオプションというのがあって何ファイルずつ引数に渡すかを指定できる。なお、-lのデフォルト行数は1なので以下の2行はほとんど等価である(等価に遅い)。

$ time find cache -type f -print0 | xargs -l -0 rm -f 
$ time find cache -type f -exec rm -f {} \;

xargsに-lオプションを付けたいとき、というのは擬似的には

$ mv hoge.txt /var/trash

のようなファイル削除以外のファイル操作コマンドの、第2引数にコピー先を与えたいときだろう。本当は以下のように書きたい用途において。

$ mv hoge.txt piyo.txt ... /var/trash

GNU fileutilsに属するコマンドはよく考えられており、cp,mv等には-tオプションが存在する。-tは宛先ディレクトリ指定。ゆえに以下の2行は等価である。

$ mv hoge.txt piyo.txt /var/trash
$ mv -t /var/trash hoge.txt piyo.txt

おっ、宛先ディレクトリが前出しできた。-t /var/trash以降にはコマンドライン引数限度めいっぱいまでファイル名が並べられるので、xargsとベストマッチする。

これまでの内容を組み合わせて、例えば特定のディレクトリの特定種のファイルのみを別ディレクトリに移動する、といった場面を考えたとき、以下のようなコマンドが最速となる、だろう。

$ find /var/cache -type f -regextype posix-exteneded ¥
-iregex '.+\.(jpg|png|gif|bmp|mpg|mp4|3gpp|ts|mp4a|aac)$' ¥
-print0 | xargs -0 mv -t /var/trash

ま、本当に緊急回避的に/var/cacheを掃除したいなら

$ mv cache cache_orig
$ mkdir -p cache

が最速である(^^; これがオチでいいのか….

自作基板の部品表を作ってみた

自作基板の部品表を作ってみた

今回は表面実装部品が多いので、秋月で都度買ってくるということもできなそうなので、ためしに部品表を作ってみました。部品はテープでくるので1個単位で買えないものも多いのでロット合計も出してみました。

bom1

最低金額3.5万円!

特に高いのがセンサー類。そして1個から買うのが難しいものが多いから、総額が高くなってしまうのです。600円のチップでも、10個が最小ロットなら6000円になってしまうから。センサー以外でも、小さいから良いと思っていたリアルタイムクロックのM41T62も533円とかなりお高い万円。ところが、ストロベリーリナックスでM41T62のブレイクアウトボードを買うと500円なのよね・・・あちらは基板に電池ホルダーまでついているというのに。量産効果なんだろうけど、少量生産が如何に割に合わないかを体感しています。

1枚当たり部品代をみても4300円は下回らない感じです。それでいてできることと言ったら、Raspberry Piを8V~30Vの間で安全に動かせて、リセットボタンとウォッチドックが追加されて、時計と加速度と気温大気圧計がついて、ファンコン用の12Vスイッチが1つ。これは需要ないですかね・・・商品企画失敗というやつ?

仕事なら、即座にやめるべき案件なんでしょうけど。趣味の場合、ボードを作るまでやり遂げることが重要なのか、改めて自問自答しています。

Raspberry Pi Zero

「金がない」という葛藤の中、さらに運の悪いことにRaspberry Pi Zeroという新製品が出てしまいました。一応GPIOピンに互換性はあるものの、フォームファクター的に従来のHAT基板の外形が合わなくなってしまったことも、悩みを深めた原因です。

sk_raspberry_01

個人がセンサー1チップ調達するのと同じ値段で、Linuxが動く完全な32bit ARM SBCが変えてしまう・・・・そう考えると益々個人が何をやるべきなのか問われそうです。

USBにHDMIまでついたマイコンボードが600円弱という社会的インパクトは大きいですね。消費電力にこだわる用途以外では、ほぼこのボードで賄えてしまうでしょうから、mbed含めたショボイマイコンボードはすべて吹き飛んでしまうかもしれません。

 

そりゃそうだよな雨続きだもんな

稼働から1週間くらい経ったところ、ベランダに出していたオフグリッドサーバが、無線LAN経由でSSHを受けつけなくなった。

ボックスを回収して、バッテリー電圧を測定したところ6.5Vしかなく死亡状態。12V12Ahのシールドバッテリーで200mA程度の負荷でも丸3日以上未充電は持たないか…72h × 0.2A = 14.4Ah だよね。

さらに悪いことに、手持ちのBAL電器の安充電器では、この死に体バッテリーは充電できず、仕方なく急ごしらえで12V出力のACアダプターに100Ω程度の抵抗を挟んで、即席トリクル充電器を作った…..電池は割と高い部品なので復活してくれれば….

raspi2の消費電力が少ないからと設計を手抜きしていたのだが、やはり電源管理サブシステムが必要ですな。超低消費電力マイコンでバッテリー電圧を監視し、リミット以下ではメイン系列の電源供給を切断し、電圧が復活したら再起動するような…

自律稼働型サーバの制作2

2015-06-25 13.51.14

系統電源から完全に切り離されたサーバを作ろうという計画、自律稼働型サーバの制作ですが、休日のたびにチマチマやっているのですがなかなか進みません。

2015-06-17 10.00.40

ヤフオクで買った太陽電池パネル(50W)は屋外に設置しました。ちょっと固定が甘いのですが….MPPTチャージャー製作にも興味はありましたが、パネルの動作確認もしなければならないので、安めのPWM型をチョイス。

ソーラーパネル設置場所は、マンションの東向きベランダ。100%太陽が当たる時間帯はわずかですので心配でした。

マイコン無しでカー用電圧測定可能USBチャージャーをつないで、2週間くらい観察していました。割と雨の日もあった6月初旬から現在まで、小容量のシールドバッテリーを満充電に保つには十分なキャパがあることがわかりました。それを見越して若干オーバースペックなパネルを買ったのが良かったようです。

暫定で、raspberry pi2をぶら下げたところ、意外にもサクッと起動して、無線LANもバッファローの安い奴なのですが、ベランダから室内も余裕で届き、呆気なく完全なノンワイヤーのホームサーバーがベランダに設置できてしまいました(^ω^)

センサー類とソフト何とかすれば、いわゆるIoT百葉箱 も簡単にできそうです。 

 

まだ電源でハマっている

wpid-wp-1430636543386.jpg

ただ3.3Vと5Vと12Vが欲しいだけなんだ!

マイコンロジックはLPC8XX含めて3.3Vで動く。USBなどは5Vで動く。外付け機器(HDD,SSD等)は12Vがないと動かない。今考えている完全独立型のサーバはこれら全ての電圧を生成しなければならない…ん??ATX電源を流用すれば
簡単じゃんか!と思って以下のような製品を買いました。

ACアダプターの代わりにヒューズをかましたシールバッテリーがつながるようにケーブルも自作しました。

しかし….手持ちのHDDを負荷にして試していたらやたらめったら不安定で
アワアワしていた。12V出力を測ると13.8Vもあった…15%増しはちょっと
キツかったようだ。

元々電気の知識がない上に、手間を省こうとして余計ドツボにハマっている。反省。

 

ボクのLPC810工作ノートを読んだ件

書評: ボクのLPC810工作ノート (鈴木哲哉)

単純に「すごい本」だなーと思いました。もしかしたらこの筆者さんの特性なのかもしれませんが、「LPC810で遊ぼう」といった浮ついた導入本では、実はない。じゃあ何について書いてある本かというと、私は「技術者としての心構え」なのではないかなーと。どんな開発環境であっても、どんなマイコンであっても、技術者としての妥当性、合理性、適材適所を見抜く力というものが常に試されているということを伝えようとする意思を感じます。

LPC810はARMアーキテクチャながら、正直EEPROMはないADCはないメモリ少ないという駄々っ子なわけですが(8bitのPICなどの方が素直に感じるくらい)、それに無理をさせない、810でやろうとすると大げさだな…という感触を持ったらそれ以上進んではいけないよ、ということを伝えるための本なんだと。

うまく書けないな。私もはるか昔に拙いLinux本を出した経験があるのですが、
例えばUNIX(Linux)の良さを伝えようとしたとき、コマンドやソースコードを単純にコピペ(最初はそれでもいいかもしれないが)だけでは味わえないことがあるわけです。cat, ls, df, grep, head, tail, sort…小さい、とても単機能のソフトを、パイプや中間ファイルで渡しながら自由にかつ最短に必要な解を得ることができる、ということを知っている/知らないでは、めちゃくちゃその後の勉強に差が出てしまうわけで。私が本を書いたときは、コマンドは完全に覚えなくても調べ方がわかればいいんだよ、前提として何を知っておけばよいか、というスタンスで書いていました。

は?! すみません脱線しました。が、この本はLPC810の専門書としては唯一無二のものだと思うんで、技術者はサーバサイドの技術者だろうが読んでみるといいかもです。
ボクのLPC810工作ノート

LPC812MAX

image

ど~もやりたいことがうまくできなくて、金ばかり使っている気がするぞ(`;ω;´)

気づいたらコリもせずにまたNXPセミコンのボードを買っていたという….LPC812MAX 。今度こそ完全にmbedは動く!…ハズ!