| コンピュータと共にある創造的日常 | ||||
|---|---|---|---|---|
| uneoyaji.exblog.jp | ||||
|
結構昔から画像ファイルのバッチ処理には netpbm を利用していたのだが、最近ようやく OS を Lion にアップした Mac で久々に netpbm を使おうとしたら、なんと PPC コードのため実行できませんときたもんだ。つまり、おそらく昔々使っていた PowerBook G4 にインストールしたバイナリを、そのまま引き継いで使っていたらしい。ご存知のとおり、Lion からは Rosetta のサポートがなくなり、PPC用のバイナリは実行できなくなってしまった。多分、他のライブラリにも同様の問題があると思い、このさい、画像処理まわりをバージョンアップすることにした。netpbm のバージョンは、安定版で 10.47.37。
netpbm で使われるライブラリは、libjpeg, libpng, libtiff, libz など。まずは、これらも最新版のソースをダウンロードして、./configure; make; sudo make install などなどと実行して、インストールは順調に終了。古いバージョンの一部が /opt/local/ 下にあったので、これらは uninstall した。新しいバージョンはすべて /usr/local/ 下に統一した。 それで、netpbm を ./configure; make すると、コンパイルエラー発生!いろいろ探ってみると libpng のバージョンが新しすぎたらしい。1.5 で変更になった部分が netpbm で使われていた。1.5 を uninstall し、気を取り直して 1.2 の最新版をインストールし直し、再度、netpbm の構築を試みると、今度は、バイナリの作成まで問題なく終了した。make install と打ってみると、パッケージを作成してから ./installnetpbm を実行せよとのメッセージ。make package; sudo installnetpbm で /usr/local/netpbm/{bin,lib,include,...} 下にインストール完了。 当方は unix を使い始めた時に sh じゃなくて csh を使ってしまってから、ログインシェルはずっと csh その後 tcsh を使っている。んで、$path に /usr/local/netpbm/bin を追加すべく、~/.cshrc を少々変更。準備OKのはず。ということでコマンドを実行してみると、まず、libnetpbm が見つからないというエラー。ライブラリへのパスが通っていない。ここはライブラリファイルの数も少ないので、/usr/local/lib 下に /usr/local/netpbm/lib/libnetpbmなんたらのシンボリックリンクを置くことで解決。いくつかのコマンドは順調に実行できる。しかし、オプションに色の名前を指定したところで、rgb.txt が見つからないというエラーが発生した。ライブラリ関数がデフォールトで /usr/share/netpbm を探すらしい。これもシンボリックリンクで解決した。 今回、必要になった処理は、SBArt4 のヘルプファイルに埋め込む画面サンプルの自動作成。コマンド+シフト+4、スペース、クリックで保存した画面の PNG ファイルを、周囲をトリミングして、サイズを 40% に縮小して JPEG ファイルに書き出すというもの。コマンドは以下のような感じ。 pngtopnm -mix -background=white $f | pnmcrop -white | pamscale 0.4 | \ pnmtojpeg -quality=90 > ../$l.lproj/help/$fn.jpg これまでは、いちいち、Phoshop で1つずつやっていたので、かなり簡単になりました。 # by une0exct | 2012-04-08 13:41
1つの URL を Linux 2台で負荷分散させて運用しているのだが、予算の都合により、これまで共有デスクはなく、それぞれ同じ内容をコピーしておったのですよ。
マシンがやや古くてディスク容量不足が目に見えてきたため、NAS を物色していたのだが、表立って UNIX 対応をうたっている製品は、法人向けのためか、結構、値が張る。パソコン用の I/Oデータとかバッファロのが安いのだが、どうも UNIX は想定外らしく、メーカが用意している情報だけでは、うまく運用できるのか不明。で、いろいろ情報をあさっていると、どうもバッファロの主要製品は OS が Linux らしい。しかも、ACPコマンドが使えるようになっていて、これで root 権限を奪取する抜け技がボランティアサイトで公開されていた。んで、やってみたわけです。 購入した製品は TeraStation TS-X8.0TL/R5。RAID 0,1,5,10 対応、2TBドライブ×4装備。 まず、本体の IP アドレス設定。設置説明書きは、DHCP を想定していて、固定 IPv4 の設定の方法が書いてない!本体には設定をいじるための操作パネルのようなものはなく、ネット HTTP 経由 WEB ベースで設定するようになっている。これじゃ設定できんではないかと思いきや、幸い、本体には2つの Ethernet ポートがあるので、2nd ポートをパソコンに直結すれば設定可能。 LAN ケーブルを接続して2分ほど待つと、プライベートアドレス 169.254.xx.xx が自動的にふられる。パソコンには製品付属の CD (DVDだったかも) を突っ込んで設定開始。 イーサポート1の固定アドレス設定、ユーザ登録、NFS の有効化、NFS クライアントのアドレス設定、NFS は user じゃなくて kernel モード、などなど。 これで、Linux から NFS マウントかけると、ちゃんとマウントできます。 しかし、Linux からマウントしたディレクトリィ内にサブディレクトリィを作ってみると、オーナ・グループが nobody になって、しかも chown が効かない。これは、Linux 側のユーザがなんでも同じ。ということは、NAS 側の exports オプションが all_squash になっていると。今回は home を NAS に引っ越そうという計画なのに、これでは使い物になりません。それで、NAS内部の設定を編集すべく、root 奪取を試みたわけです。 まず、パソコンに nas_central.org から acp_commander.jar をダウンロード。 旧製品だと % java -jar acp_commander.jar -t 169.254.xx.xx -ip 169.254.xx.xx -pw password -o で、telnetd が起動して、root パスワードがリセットされるはずなのだが、telnetd が動くが、パスワードリセットは利きません。(注:169.254.xx.xx は、NAS の IP アドレスです。) そこで、 % java -jar acp_commander.jar -t 169.254.xx.xx -ip 169.254.xx.xx -pw password -s ... /root>chmod 666 /etc/shadow >exit で、パスワードファイルを書き込み可能にしてから、telnet でユーザ名 admin にてログインして root パスワードを消去。今度は root でログインして、/etc/shadow のアクセス許可を 644 とかに戻し、ついでに新しい root パスワードを % passwd コマンドで設定。ついでに ssh で root ログインできるように、/etc/sshd_cong 内の PermitRootLogin を no から yes に変更。UsePAM yes をコメントアウト。セキュリティ上は、あまり良い方法ではないが。。 /etc/inittab を見ると、起動スクリプトは /etc/init.d/rcS となっているので、その中身をいろいろ見ていると、/etc/init.d/nfs.sh の中に nas_confggen -c nfs というコマンドがあり、これが /etc/exports を作るらしい。つまり /etc/exports を直接編集しても、再起動するともとに戻ってしまう。ということで、nfs.sh 内の nas_confggen -c nfs の直後に以下の2行を追加。 sed /all_squash/s//no_all_squash/ < /etc/exports > /etc/exports.new mv /etc/exports.new /etc/exports 再起動が面倒いので、上記2行を直接実行し、Linux 側の mount を解除してから、/etc/init.d/nfs.sh restart で、nfsd を再起動。Linux 側から再度 mount してみると、今度はちゃんと Linux 側のログインユーザのままアクセスできる。Linux 側で root ログインして、home 以下を NAS に % tar cf - . | (cd /mnt/nas; tar xf -) とかでコピー、、しようとしたが、root_squach を外してなかったので、できない。実は2人しかユーザがいないのをいいことに、NAS側に空のユーザディレクトリィを作っておいてから、Linux 側で各ユーザになって、tar でコピーした。 NAS側マウントポイントのディレクトリィ /mnt/array1/share のアクセス権がなんと777つまり誰でも書き込み可能になっているので、これは 755 に変更。あと、Windows は使わないので、samba を停止。NAS再起動時にも samba が立ち上がらないよう、smb.sh を細工。 いまのところ順調に稼働しています。ディスク容量が 80GB から 5.8TB に増えた。 # by une0exct | 2012-01-21 16:23
SBArt4 の自動進化機能で全自動的に作成した動画のダイジェスト版を全自動的に YouTube にアップする方法。
まず、QuickTime Player 7 (Pro) でダイジェスト版を自動生成。 これは、わりと簡単で、1つ新規の空のムービーを作っておいて、ダイジェストに入れるべき複数の動画について、それらの一部分ずつをコピペしてから、適当なファイルに保存してやる。スクリプトはこんな感じ。 tell application "QuickTime Player 7" activate set x to make new document repeat with m in 元の動画のパスのリスト open m tell document 1 select at 1200 to 4800 copy close end tell paste x end repeat save in 保存先のファイル end tell 7行目の数字はダイジェストに入れる部分の時間の指定です。単位は TimeScale。普通は 600 で一秒が多いかな?つまり、1200から4800ということは2秒目から8秒目までの6秒間をコピーしています。んで、次は自動投稿ですが、QuickTime Player の共有機能で一度YouTube にログインして、情報がキーチェーンに記録されていれば、ログインの部分は省略できます。ということで、以下のスクリプトはログイン省略版です。 tell application "QuickTime Player" activate open 投稿したい動画のパス end tell tell application "System Events" tell process "QuickTime Player" set win to window 1 click menu item "YouTube..." of menu "共有" of menu bar item "共有" of menu bar 1 delay 0.5 tell sheet 1 of win repeat while value of busy indicator 1 delay 1 end repeat end tell delay 1 tell sheet 1 of win keystroke tab set the clipboard to 動画につけるのコメントの文字列 delay 0.5 keystroke "v" using command down keystroke tab delay 0.5 set the clipboard to 動画のタグ keystroke "v" using command down delay 0.5 click button "次へ" end tell delay 2 tell sheet 1 of win to click button "共有" delay 20 tell group 1 of scroll area 1 of window "書き出しの進行状況" repeat while (count progress indicators) > 0 or (count busy indicators) > 0 delay 2 end repeat delay 2 end tell end tell end tell delay 2 tell application "QuickTime Player" to quit saving no delay の待ち時間は適当です。 # by une0exct | 2011-10-28 12:34
AppleScript の System Events を使うとほとんどなんでも自動化できてしまう。というか、そもそも GUI のせいでスクリプトから操作できないアプリが増えて困るという状態が常識化して年久しいわけです。Twitter のクライアントアプリとして MacOS および IOS でも動く Echofon を使ってるのだけど、これが Scripable でないんだ。こういうときの奥の手が System Evens。GUIのエレメントをクリックしたりキー入力したりという指示を AppleScript で書けるわけだから強力この上ない。
activate application "Echofon"これはちゃんと動く。 しかし、英文を入れようとして文章中にスペースをいれると、スペースのところで仮名漢字変換が動いてしまう。入力方法から「ことえり」を外せば、かな文字になることはないが、スペースは入力されないようである。いろいろ思案した挙げ句の解決策は、一旦、clipboard に文字列をコピーしておいてから、Echofon にペーストするというもの。こんなかんじ。 set the clipboard to "writing my blog, now!"自分のウェブページを更新したら自動的に呟くように、更新のスクリプトの最後に付け加えるのも悪くないよ。 # by une0exct | 2011-10-16 15:19
パソコンOS の進歩は時々ユーザを困らせる。典型は、古いハードウェアに載らなくなることであろう。んで、さっそく MacOS X 10.6 Snow Leopard が載せられなくはないが、どうしたものかと思案中だった初代Intel Mac mini に Linux を載せて、予備サーバにする計画を実行してみた。
研究室の WEB + DNS サーバとして Vine Linux を載せた HP の Xeon PC があるのだが、DNS の slave と WEB のバックアップとしてもう1台追加することにした。 それで、同じOSが良かろうということで、Vine Linux 32 bit 版を DVD に落とし、Mac mini にインストールしてみると。。。 DVD からのコピーが終わって、HDD からリブートの段階で困ったことが起きた。Mac は基本、DVD メディアの取り出しは、キーボードから行なうわけだが、これが効かない。しかも、リブートに掛かった直後にフリーズ! 効くのは本体のパワーボタンのみという恐ろしい状態に陥った! ガチョーーンン! 気をとりなおして、今度は Vector Linux Light で再挑戦。これは CD 1枚に入る軽いバージョン。コピーが終わってリブート。。。おっと、また取り出しができない。で、また CD からリブートしてしまうではないか! と、ふと思いついて、リブート掛かったら即 Option キーを押す技を試してみたところ、無事、ブートディスクの選択画面が出た。よしよし、ということで、HDD を選択して、あとはうまく行きました。しかし、なんで Vine はダメなのかね。 "Light" だけあってか、apache が入ってない。他にも tcsh と ntp が無かったので、これらもネットからソースをダウンロードしてインストール。named.conf やら httpd.conf やら crontab やら passwd やら。。。。いろいろ設定して、無事、完了。 これでOS パッチ当ててる間、サービスが停止してしまうということはなくなりました。本当は、Cloud サービスを使って、外部にもバックアップサーバがあると、停電やネットワーク障害にも頑健なシステムにできるんだけどね。 # by une0exct | 2011-06-09 12:47
| ||||