ラベル PC の投稿を表示しています。 すべての投稿を表示
ラベル PC の投稿を表示しています。 すべての投稿を表示

2014年2月8日土曜日

非AFTディスクからAFTディスクへのお引越し

ご無沙汰な投稿にはなりますが割と面倒だったのでメモ。

運用中のUbuntuマシンのHDDが逝きかけてたので新しいHDDにしました。
せっかくなので500GB→1TBにする予定でしたがショップで聞いたところ
AFTなるフォーマットのHDDになっているとか。
旧仕様の500GBは在庫にあるみたいですが、復旧ついでに容量を
増加させたかったのでAFTの1TBを購入しました。

まずAFTってなんじゃいって話ですね。
e-Words AFT【Advanced Format Technology】
パソコン初心者講座 AFT ハードディスクとアライメント調整

要するにセクタあたりの物理記録量が多くなった規格みたいですね。
おおざっぱすぎるかもしれませんが。

これのせいで乗せ替えを行う際にレスキューツールがのきなみ
使えない状況のようです。

今回の参考サイトは結構多いのでポイントだけ随時にして他は下に
まとめてリンクだけで。

ここから本題。



状況としては最初にapt-getしようとしたらやたらと進捗が
遅いことに気づいて、dmesgでログを参照したところ、
HDDのI/Oエラーが大量に出ていました。



[12192.071080] sd 5:0:0:0: [sdg] Unhandled sense code
[12192.071085] sd 5:0:0:0: [sdg]  Result: hostbyte=DID_ERROR driverbyte=DRIVER_SENSE
[12192.071091] sd 5:0:0:0: [sdg]  Sense Key : Hardware Error [current] 
[12192.071097] sd 5:0:0:0: [sdg]  Add. Sense: No additional sense information
[12192.071104] sd 5:0:0:0: [sdg] CDB: Read(10): 28 00 1d 15 f8 09 00 00 f0 00
[12192.071116] end_request: I/O error, dev sdg, sector 487979017


12192.071154] Buffer I/O error on device sdg2, logical block 243403142
[12192.071158] Buffer I/O error on device sdg2, logical block 243403143
[12192.071162] Buffer I/O error on device sdg2, logical block 243403144


ごった煮状態ですが別マシンでUSBにつなげたときのdmesgです。
最初はHDDを取り外し、別のPCでfsckして直ったかなーと思ったのですが、
再度発生してしまいました。

こらアカンと思って空いている別のHDDにバックアップをとって
落ち着いたところ、セクタ修復こそfsckで発生したものの全ファイルの
コピーは成功したのでおや?となりました。
そのあといろいろ調べたところどうもHDDのキャッシュが壊れてるっぽい
という結論になりました。
特徴としては読み出しはほぼ正常なのですが書き込みにやたら
時間がかかることです。

心当たりはまあ電源をバチっと切られたことがあるのですが・・・
それが契機のようですね。

今回はデータそのものへの復旧作業は簡単なケースになりました。

対象のUbuntuマシンは
  • ASUS EeeBox B202(Intel Atom 270N)
  • Ubuntu 12.04.4 LTS (precise)
移行用のベースマシンはDebian/GNU Linux(wheezy)上で行いました。

1.新HDDをフォーマットする


フォーマットツール的には何を使ってもいいのですが、
パーティションの開始セクタのオフセットを必ず8の倍数にすることです。
かつては63オフセットから第1パーティションを切っていましたが、
同じことをするとセクタまたがりの読み書きをすることになり、
パフォーマンス劣化を招くとのこと。

今回はGPartedを使ってパーティションを設定しました。

自分の場合はこんな感じに切っています。
  • /dev/sda1  ext2  (/boot用パーティション)
  • /dev/sda2  ext4 (/ 用パーティション)
  • /dev/sda3  swap  (スワップパーティション)
sda1とsda3には2GBずつ、sda2には残りを割り当てました。
sda1にはブートフラグとブートラベルを設定します。

開始オフセットを必ず確認します。
こうしてできたディスクの状態はこんな感じ。
fdisk -l ですがこの結果は最終的なものなので申し訳ないところ。

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
ヘッド 255, セクタ 63, シリンダ 121601, 合計 1953525168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O サイズ (最小 / 推奨): 4096 バイト / 4096 バイト
ディスク識別子:

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *        2048     4095999     2046976   83  Linux
/dev/sda2         4096000  1949427711   972665856   83  Linux
/dev/sda3      1949427712  1953523711     2048000   82  Linux スワップ / Solaris

物理セクタサイズが4096バイトになっているのがわかります。
I/Oサイズも4096になってるので高速になるのかしらん?

開始オフセットが8の倍数になってるのか?はbashの機能を
使ってもいいですし、インタプリタ系のシェルを使ってもいいと思います。
自分はpythonを使いましたが参考までにbashで計算すると

> echo $(( 2048 % 8 )) ;\
> echo $(( 4096000 % 8 )) ;\
> echo $(( 1949427712 % 8 ))
0
0
0

こんな感じになります。剰余でゼロになっていれば8の倍数です。

2.ディスクへの転送


ディスクへの転送は、今回は読み出しが生きているのでrsyncを使います。
通常はddrescueなどのレスキューツールで丸ごとコピーするのが
常道だと思われますが、非AFT/AFT間でのセクタをコピーするやり方では
物理セクタサイズの違いが障壁になります。
実際にやってみましたが、200GB程度の元ディスク使用量ですが、
ddrescueで新HDDに転送すると使用率が80%近くになりました。

元が512バイトのセクタサイズなので新HDDのセクタサイズに元のセクタを
適用するとおおよそ1/8程度になってしまい、無駄が生じるのだと思います。

ゆえに、もっと読み書きが困難なくらいに壊れた場合には、非AFT/AFTを
揃えた上でddrescueなどを使ったり、プロプライエタリのソフトウェアを
使うべきだと思います。
移行も考えている場合は壊れる前に行ったほうが無難です。


そんなわけで今回は普通にコピーです。
旧HDDがsdb、新HDDがsdcであるという前提とします。
(実際には新HDDがデスクトップ内蔵を使ってsdb、旧HDDがUSB変換アダプタ経由でsdgだったりしましたが)

(ディスクI/Oエラーでinodeとセクタの
アンマッチが発生しているので先にチェックディスク)

# fsck -y /dev/sdb1
 ・・・
# fsck -y /dev/sdb2
 ・・・
(新旧HDDのマウントポイントの作成とマウント)
# cd /
# mkdir boot_old boot_new root_old root_new
# mount /dev/sdb1 boot_old
# mount /dev/sdc1 boot_new
# mount /dev/sdb2 root_old
# mount /dev/sdc2 root_new

(rsyncでコピー 旧HDDのパスの最後に/を入れないと悲劇が起きる)

# rsync -av boot_old/ boot_new/
# rsync -av root_old/ root_new/
 ・・・
(アンマウントして後片付け)

# umount boot_old boot_new root_old root_new
# rmdir boot_old boot_new root_old root_new

(新HDDのチェック)

# fsck -y /dev/sdc1
# fsck -y /dev/sdc2

このあとHDDを換装します。
この段階でgrubとかの設定もできなくはないでしょうけど、ベース機が
いろいろと取り付けられているので今回は手順を分割して実行しました。
実際にうまくいくかは試行錯誤でしたし。

3.DVDブートしてブートローダー等の設定をする


EeeBox PCを使っているので、外付けDVDドライブを用意した上でUbuntuの
ライブDVDからライブ起動しました。
Ubuntu Japanese Team
今回はUbuntu 13.10を使いました。
え?12.04じゃないのかって?
バージョン違いでもうまくいくか試したかったんですよ^^

EeeBoxのHDDを新HDDにしたあと、 USBキーボードとDVDドライブを
取り付けてから電源を入れ、BIOSを起動します。
特に先にDVDドライブを取り付けてないとブートの優先順位表にも
でてこないので注意。

クイックブートをdisableに、boot device priorityを取り付けたDVDを
1stになるように設定します。

マウスも取り付けてSave&Exitします。


再起動後、しばらくライブ起動を待ちます。
自分の環境のせいか、スピンアップしてないとうまく起動しませんでした。



起動後、端末(Terminal)を起動します。(unity使いにくいんだよこの野郎)
なお好みによりますが、表示用・作業用・確認用として
3つ起動したほうがいいです。

この後設定ファイルを新HDD向けに書き換えるわけですが
重要なことはUUIDが変化していることです。
e-Words【Universally Unique IDentifier】
つまりHDD固有の番号が変化したわけで、これがブートやマウントに
影響するわけです。
ddrescueはUUIDごとコピーするので問題ないとのことですが、
今回は普通にフォーマットからのコピーなので齟齬が生じます。

書き換えが必要なのは
  • fstab
  • grub.cfg
  • initramfsのresumeファイル
です。(Ubuntu日本語フォーラム:超感謝!)

新HDDのUUIDの表示は、他にHDDを取り付けていないという前提なら
sda1、sda2、sda3だけ表示されるはずです。
(混乱のタネになるのでDVDブートさせた理由のひとつ)
以下のコマンドをどうぞ。

$ ls -l /dev/disk/by-uuid/
・・・ -> ../../sda2
・・・ -> ../../sda1
・・・ -> ../../sda3

などと表示されたはずです。
UUIDはユニークIDなのでここでは記載してません。あしからず。
なおblkidとか使っても表示できます。

以下作業内容、ファイルの編集は自分はviを使いましたが
geditなどでもいいと思います。
各ファイルに記述されているUUIDの項目を新HDDのUUIDに対応するように
書き換えます。
重要なのできちんと見比べて、元の記述は残すようにしたほうが
いいと思います。viではyypで一行コピーできるので便利です。
今回のファイルはすべて#でコメントアウトできます。


ルートパーティションとbootをマウントします。
$ sudo mount /dev/sda2 /mnt
$ sudo mount /dev/sda1 /mnt/boot

DVDブートしている現状と一致させるために
デバイスファイルを新HDDのdevに書き込む。
$ sudo mount --bind /dev/ /mnt/dev

fstabを編集する。
$ sudo vi /mnt/etc/fstab

grub.cfgを編集する、該当箇所は多い傾向
$ sudo vi /mnt/boot/grub/grub.cfg

resumeファイルを編集する。swapパーティションのUUIDを記述する。
$ sudo vi /mnt/etc/initramfs-tools/conf.d/resume

fstabなども参照するため、最後に行う。
自動で/bootを認識してもらうためchrootして実行する
$ sudo chroot /mnt
$ sudo grub-install --recheck --no-floppy --root-directory=/ /dev/sda
$ exit


作業完了後、一度シャットダウンしてDVDドライブを取り外して
再度起動します。

自分はこれで起動完了してお引越しできました。
デバイスファイルを一度書き換えてたためか少し起動に時間が
かかったみたいですが、正常運転しているみたいです。
(二回目以降は早くなった気がします)

念のためtouch /forcefsckして再起動し、dmesgの内容を確認して
おしまいです。


☆おまけ☆

[11690.011238] sd 6:0:0:0: [sdb] Asking for cache data failed
[11690.011248] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[11741.720851] sd 6:0:0:0: [sdb] Test WP failed, assume Write Enabled
[11741.722965] sd 6:0:0:0: [sdb] Asking for cache data failed
[11741.722975] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[11793.433011] sd 6:0:0:0: [sdb] Test WP failed, assume Write Enabled
[11793.435347] sd 6:0:0:0: [sdb] Asking for cache data failed
 ・・・
(Ask Ubuntuから転記してます)
Ask Ubuntu

dmesgが素晴らしくうざくなってる状況に気づいたのでモジュールを停止します。

(reaktekのモジュールがロードされているか確認)
$ dmesg | grep realtek
[    4.716068] usbcore: registered new interface driver ums-realtek
$ lsmod | grep realtek
ums_realtek            17920  0 
(モジュールをアンロードし、起動時に読み込まない設定にします)
$ sudo rmmod ums_realtek
$ echo "ums-realtek ss_en=0" |sudo tee -a /etc/modules

必要になった場合にはmodprobe ums_realtekすればいいでしょう。
dmesgがスッキリしました。


参考サイト

Ubuntu kledgeb
Lansenの現実逃避日記
Man Page of FSCK
・ITmedia エンタープライズ【1】【2】

Yahoo知恵袋-インストール済みUbuntu12.04のクローンHDDを作成する。
きょうはなに色?
maruko2 Note.
にわタコのblog


2012年10月3日水曜日

Wineを作る

といってもWineHQで作ってるWin32APIエミュレータですけどね。

 http://wiki.winehq.org/GitWine

ここを読めばすぐできます。

Debian/squeezeのwineは1.0.1なので1.5.10の今だと周回遅れもいいところですね。

 git clone git://source.winehq.org/git/wine.git ~/wine-git


として、いつものconfigure && makeで完成します。
オプションはこんな感じ


./configure --prefix=/usr/local/wine-git --with-x \
            CFLAGS=-msse4 CXXFLAGS=-msse4


ただし、dev環境によってモジュールの作成具合が変化するので
configureした後のメッセージをよく見て適宜追加インストールしましょう。

ちなみにprefixが少し違うのは/usr/localにwineのシンボリックリンクを貼って、
それを/usr/local/binとかに間接参照させているからです。
バージョンの切り替えに重宝するテクニックです。
気にしなーいって方は--prefix=/usr/localでいいと思います。

んで注意点。いつもOSS(v4)無いよ!って言われてるので今回oss4-base類を
いろいろ追加してやってみたら、音が鳴らなくなりました(汗

デバイスも消えてしまったのでどうやらPulseAudioで構築した場合は
OSSはインストールしないほうがよさそう。
自分はoss4-baseをremoveして再起動したら元に戻りました。

2012年5月11日金曜日

gccとmkvtoolnix

スーパー間が空いてしまいましたが書くネタを探しておりました。
Firefoxはもうhgを使って更新するだけなのでもういいかなと思って
公式バイナリを展開してお茶を濁しております。

さて本題の方は本来はmkvtoolnixの方だったりしますが、gcc4.5以降じゃないと
configureで弾かれるのでgccから入れる作業です。


●GCC4.7を入れてみる
基本的にはさかな前線さんの該当記事を参考にしております。ありがたやー

○GMP・MPFR・MPCのインストール
 順番はGMP→MPFR→MPCで、ライブラリ依存してるのでGMPからやりましょう
 インストール先はどこでもいいのですが、gccの処理系を独立させるために
 ホームディレクトリにselflocalを作ってインストールしています。

 ・GMP
    http://gmplib.org/
   
$ ./configure --prefix=${HOME}/selflocal
$ make && make install

・MPFR
   http://www.mpfr.org/

$ ./configure --prefix=${HOME}/selflocal --with-gmp=${HOME}/selflocal
$ make && make install


 ・MPC
http://www.multiprecision.org/

$ ./configure --prefix=${HOME}/selflocal \
 --with-gmp=${HOME}/selflocal --with-mpfr=${HOME}/selflocal
$ make && make install

○GCC4.7のインストール
 やることは変わりませんが、最適化のためにできたバイナリで再度ビルドするという
 ことを3回するようなので時間がかかります。
 そのせいかは分かりませんがライブラリパスが通ってないと
 途中でエラーになるようです。
 コマンドで環境変数を一時設定するのが面倒ならexportで通してください。
 ・GCC
 公式
 http://gcc.gnu.org/
 筑波大学WIDEプロジェクトダウンロードミラー
 http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/
  
$ ./configure --prefix=${HOME}/selflocal --program-suffix=-4.7 \
   --with-gmp=${HOME}/selflocal \
   --with-mpfr=${HOME}/selflocal \
   --with-mpc=${HOME}/selflocal
$
$ LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} make
$ make install

プログラムサフィックスを設定しているのは作成バイナリ名でバージョンを
区別可能にするためです。
とりあえずこれでコンパイラの準備はできました。

●boost1.49を入れてみる
最新のmkvtoolnixだとboostのバージョンが低くて怒られちゃうので
これも最新のライブラリにしてあげる必要があります。
ただ、これはconfigure&Makefileでなくbootstrap&bjamなので
勝手が違って少し戸惑うかもしれないです。
debianのライブラリ名はシングルスレッド、マルチスレッドで
分離させているようなので分けてビルドします。

$ ./bootstrap 
$ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} \
  ./bjam link=shared,static threading=multi \
  install --prefix=${HOME}/selflocal --buildid=mt
 
 $ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \ 
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} \ 
  ./bjam link=shared,static threading=single \
   install --prefix=${HOME}/selflocal

●mkvtoolnixのビルド
ここまでやってようやくmkvtoolnixのビルドの準備ができました。
tarボールでもhgでもいいのでソースを取得しましょう。
コンパイラはgcc-4.7を使いますのでパスの設定はしっかりとしましょう。
このバージョンではmakeの代わりにrubyベースのrakeが必要になります。
aptでインストールしておきましょう。
$  PATH=${HOME}selflocal/bin:${PATH} \
   LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
   LD_RUN_LIB=${HOME}/selflocal/lib:${LD_RUN_LIB} \
  ./configure --prefix=${HOME}/selflocal \
   --with-boost-libdir=${HOME}/selflocal/lib \
   CC=gcc-4.7 CPP=cpp-4.7 CXX=g++-4.7 CXXCPP=cpp-4.7 \
   CFLAGS="-I${HOME}/selflocal/include" \
   CXXFLAGS="-I${HOME}/selflocal/include" \
   CPPFLAGS="-I${HOME}/selflocal/include"
$
$ PATH=${HOME}/selflocal/bin:${PATH} \
  LD_LIBRARY_PATH=${HOME}/selflocal/lib:${LD_LIBRARY_PATH} \
  LD_RUN_PATH=${HOME}/selflocal/lib:${LD_RUN_PATH} rake
$ rake install

正直LD_RUN_PATHとかいらない気もしますが、念のため設定してます。
--with-boost-libdirをやらないと環境変数だけではうまくリンクできないようです。

これでインストール先のmmgやmkvmergeなどを実行すれば
mkvファイル操作を可能になります。
mmgのmkvmergeのパス指定以外はスタティックリンクビルドだけあって
ライブラリパス指定せずに実行できるのがスバラシイ!(笑


まあfoobar2000との相性はまだまだのようですが…
時々更新して見守ってみます。

2011年12月26日月曜日

firefox9.0.1とavidemux

なんかまどマギとかみんゴル5とかやっているうちに年の瀬でしたが、
firefox9がリリースされたついでに更新してみる。

firefox9のビルドは以前とやることは変化なかったです。
hg pullだけだとmergeするときにブランチ指定しろと怒られるので、
-Cオプションでリビジョン指定して反映します。

特に今使っているアドオンやプラグインに非互換のものはないようでした。


まどマギ借りてきてPSP用のH.264/AVCにAvidemuxで変換するとなぜか
音が遅れるんですよねー、Handbrakeで試したところ、こちらは
正常に変換できてる気がします。(ゲインの調整はできませんが…)

トラックの映像特典がインタレ入ってるのが原因かなーうーん。
DGIndexからのaviutlでもちゃんと変換できてるし…

Linuxでちゃんと使えるアプリないかなー?
acidripは音声トラックがPCMだとなぜか音入らないし(汗
Handbrake間に入れると余計な一時ファイル作ってからゲイン調整だから
他のが欲しいんですけどね。
wine+aviutlっていう手もありますが、それならわざわざDebianでやる意味もないし。
ぐぬぬ…

2011年11月18日金曜日

bind9をリビルド

今日うちのキャッシュサーバを更新してみたら
debianのセキュリティアップデートが来ていたので、
更新しました。ただし、debianのパッケージでは
filter-aaaaが無効(defaultだけど)になっているので、
再度有効化したうえで独自パッケージとしてインストールします。

debianのパッケージではconfigure/Makefileの代わりに
debian/rulesを記述してプリプロセス/ポストプロセスも含めた
統合管理できる形で配布しているようです。

今回のように使いたい機能があっても無効になっているなどの
場合は自分で再構築する必要があります。


パッケージ再構築の方法は検索でいくらでもでてきたので
今回のトラブルシュートの覚え書きを。
・必要な依存関係のパッケージ
# apt-get build-dep bind9

作業はapt-get sourceで取得した際に作成されるソースの
トップディレクトリで行う。

・debian/rulesの編集
debianってディレクトリがあるけど、パッケージを作る際に
行ったり来たりが面倒なのでcdせずに編集する。

少しスクロールするとconfigureのオプションがリストに
列挙してあるのでそこに--enable-filter-aaaaを追加する。

※今回のトラブルの大元
rulesファイルは基本的にはMakefileと同等の記述ルールに基づきます。
そのためアクションとして動かすコマンドの行頭にタブが無い場合
エラーになります。(スペースでもダメ)
今回dh_clean以降でエラーになったのはそのため。
missing separatorってなんだよってのはこの行頭タブがないことでした。
追記:
別マシンのi386で確かめたところ、こっちはちゃんとタブに
なってました。armelだけかも。

# dpkg-buildpackage -rfakeroot -uc -b
でパッケージのビルドが開始されます。
玄箱Proだとそれなりに時間がかかります。

作成されるパッケージはソースのトップディレクトリの
さらに上のディレクトリにできます。(apt-get sourceを実行したところ)
気をつけないとぐちゃぐちゃになるので注意。

2011年11月8日火曜日

おちゅ〜しゃをさしてみる

2chはROM専ですが、たまに眺めたりするので
普通のブラウザだと閲覧しにくいので導入してみました。

最初はDEにKDEを使っているのでkita/kita2を考えてましたが
どうも安定しないので日本語Ubuntuデスクトップにも入っている
おちゅ〜しゃをビルドして入れてみました。

どうも最後のコミットから1年以上経過していて、
tarボールのソースからだとコンパイルエラーが出て最後まで
進めませんでした。

とりあえずエラー内容から、
●型キャスト変換違反
●gtk2のAPI変更
が問題になっているみたいです。


・ソースの修正
エラーがでるソースファイルはいずれもC++ソースで、
Cスタイルの型キャストでコードされている部分です。
gcc4.3までは問題なかったようですが、4.4以降では
C++スタイルでの型キャストを使用しないとエラーになるようです。
debian/squeezeではgcc4.4.5)

該当部分のキャスト及び型修飾子などをいじったパッチを作りました。
こちらからどうぞ

・gtk2のAPI変更に対応
gtkwidgetの関数名が変更になったため、gtk-2.20以降を
使用している場合には関数呼び出しを変更するか、
後方互換性マクロを明示してコンパイルする必要があります。
これはconfigure時のコンパイルオプションの指定で対処できます。

/usr/include/gtk-2.0/gtk/gtkwidget.hにもありますが、
GTK_DISABLE_DEPRECATEDをdefineしていない
該当する旧名呼び出しを置換するマクロが記述されています。
よってコンパイル時にundefしてあげれば解決できます。


以上の点を踏まえてビルドします。

$ ./configure --with-x 
  CFLAGS="-UGTK_DISABLE_DEPRECATED"  \
  CXXFLAGS="-UGTK_DISABLE_DEPRECATED" \
  FFLAGS="-UGTK_DISABLE_DEPRECATED" 
  CPPFLAGS="-UGTK_DISABLE_DEPRECATED"

$ make && make install

最後に、/usr/local/libにライブラリパスを通して実行すれば完成です。


CVSを覗いてみたら、0.6のtarボールより少し修正が入っている模様。
使えるかは分からないし、メンテも当分入ってないみたいです。

2011年10月21日金曜日

avidemuxでAVC/H.264動画

最近PSP用のメモリースティックを16GBのものに
新調しましたが、それなりに容量が余っているので
適当な動画を入れて視聴しています。

720pに対応しているので、それなりの画質で
見ることができています。
普通はHandbrakeとか使うところですが、
音量を調整したいので、ゲインの調整ができる
Avidemuxを使っています。
あ、Linux版です。しかもなぜかqt4(w


Avidemuxには最初からPSPのカスタムスクリプト及び
x264の設定プロファイルが用意されています。
ただし、平均ビットレート1000kbpsだったり、
いじりたい項目が結構あったりします。
そのPSP用設定プロファイルを元にいろいろ調整をして、
ユーザープロファイルとして保存して作業しています。

なのですが。
Avidemuxのデフォルト設定がちょっと曲者で、
Minimum Quantizer(qmin)が0に設定されています。
正確には設定されていない="0"のようです。
x264的には問題ないのですが、後で保存した設定を
読み込む際に問題になります。

AvidemuxではMinimum Quantizerの最小値を『10』に
規定しているようです。
そのため、設定読み込みを行うときにqmin=0として
読み込もうとするとinvalid valueを返し、
設定を反映してくれないという困った仕様があります。

根本原因としてはdefaultのqmin=NULLのくせに、
GUI上では0として設定され、ご丁寧にもSaveAsしたときに
0を書き出すにもかかわらず最小値は10じゃないとダメ!
っていう変な矛盾があるためです。
debianだと2.5.4だからかなー?


ちょっと納得いきませんが解決方法は、
SaveAsするときにMinimum Quantizerを10にしてから
保存することです。
xmlの要素を消してもいいですが。


あ、Windows版はノーチェックです。
Win版はaviutl+拡張x264Exに、SoundEngine Freeの
音量調整で済ませているので。

:追記
一応Windows版のAvidemux(Stable)を触ってみましたが、
普通に変換できました。英語版UIですが。
Windows版ではユーザープロファイルの読み込み要素のバグは
なくなっているみたいですね。
やっぱりDebianだからセキュリティ以外の更新は
後回しになっているのかなあ。

2011年10月1日土曜日

firefox7.0を自前ビルドする

…あれ?もうfirefox7.0?
高速リリースサイクルとはいえ6週間早すぎ(笑

いちいちソースアーカイブをとってからビルドするのも
面倒な気がしてきたので、バージョン管理システムを
利用したやり方で今回はビルドしてみた。

6.0でも少し触れていたけども、mozillaのソースコード管理は
今はmercurialというソフトで行われており、cvsやgitと同じような
コマンドで操作できます。

コマンドラインで操作する場合は
 mercurial mercurial-common

GUIで操作したい場合は
 tortoisehg

をインストールします。

◯firefox(release)のソース取得

firefoxの開発ブランチは
Nightly→Aurora→Beta→Release
と4つに分かれており、安定版はReleaseとなります。

今回はこのReleaseを使ってビルドしていきます。

・開発クローンの取得
$ hg clone \
  http://hg.mozilla.org/releases/mozilla-release/ firefox-release


firefox-release以下にtarボールと同じようなソースが
コピーされます。

$ cd firefox-release 
$ hg tags

とするとタグとリビジョン番号の対応が確認できます。
もし特定のバージョンにロールバックしたい場合等はこれを
参照してリビジョン番号を指定して変更できます。

クローンの際や更新の場合には最新版を示すtipタグの
リビジョンで保存されます。


◯日本語パッケージの取得
日本語パッケージもhgで管理されてます。今回は公式の
l10n/releaseから取得したものを使いました。

$ hg clone \
 http://hg.mozilla.org/releases/l10n/mozilla-release/ja/ l10n/ja_JP

こちらもほぼ同様です。.mozconfigにランゲージパックのパスを
間違わずに設定して下さい。

◯ツールの追加

yasm-1.1.0以上なのは前回と同様で、
今回はtarボールではなくmercurialから直接DLしてきているので、
Makefileの作成のためにautoconf/automakeが必要になります。
デフォルトのautoconfではなく、autoconf2.13
明示的に必要なので注意して下さい。


あとは以前と同じようにビルド・アーカイブ化するだけです。
tagsとかをよく見てみると…
バージョン7.0.1 (笑)

というわけでhgで最新版を取得すると7.0.1になりました。
7.0.0にしたい場合はリビジョン指定して変更して下さい。

2011年7月22日金曜日

flacをなんとか2GB以上のファイルを吐き出すようにする

少し前にCDをひとまとめにする方法を書きましたが、
flacでなぜか2GBでとまってしまうという現象の原因がわかりました。

まあ原因そのものは割りとすぐにわかって、fseek/ftellのポインタサイズが
32ビットなのが原因です。約2GB分のオフセットしか表現できないことになります。

通常のオフセットの型は符号付整数longで、コンパイラ依存ですがgccでもVCでも
4byteになります。これを64ビット対応したfseeko64/ftello64にして、
引数のオフセット変数の宣言をlong long型にしてやれば解決なのですが・・・

本来-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64をgccに
渡してあげればいいようなのですが、どうも適用になっていないようです。

なのでconfigureに渡すパラメータとソースファイルの調整が必要になります。

以下、Xiph.orgのflac1.2.1のソースコードとMinGW64の環境で実験しております。

①off_t型の強制書き換え
sys/types.hを見てもらえばわかるように、オフセットのoff_tもしくは
_off_t型はlongで宣言されています。
これをプリプロセスの時点でoff64_tに上書きします。
いちいちソースファイルに#DEFINEを書く必要はありません。
CFLAGSなどにセットするだけで書き換えができます。
./configure --prefix=/usr/local --enable-sse \
--disable-shared --enable-static \
--disable-xmms-plugin -with-ogg=/usr/local \
CFLAGS="-D_off_t=_off64_t -Doff_t=off64_t -D_OFF_T_DEFINED -D_OFF_T_" \
CPPFLAGS="-D_off_t=_off64_t -Doff_t=off64_t -D_OFF_T_DEFINED -D_OFF_T_" \
CXXFLAGS="-D_off_t=_off64_t -Doff_t=off64_t -D_OFF_T_DEFINED -D_OFF_T_" \
FFLAGS="-D_off_t=_off64_t -Doff_t=off64_t -D_OFF_T_DEFINED -D_OFF_T_"

長いので自分はスクリプトにしてbashに渡しています。
ちなみに環境はWindows7HomePremium(x64)で、MinGWはx86_64の環境です。
MinGW32(pc-i686)だとtypes.hが微妙に違ったりするので、マクロの構成は
自前で確認してください。

やってることはoff_tの書き換えと、off_tの定義済みフラグを立てることです。

②fseek/ftellのマクロ修正
64ビット対応したfseeko64/ftello64に置き換えるようプリアンブルのマクロを
修正します。基本セットはfseeko/ftelloになっているので
環境に合わせて分岐させればいいです。
ちなみにVC++2010ではfseeki64/ftelli64というメソッドが用意されてます。

記述するとえらいことになるのでpatchを用意しました。
ファイルはこちら

それでもってmakeすると(ウチの環境では)64bitのflacの出来上がりです。
2GBの制限もきれいさっぱりなくなりました。
なぜかnasm通すとエラーになりますが(汗

あ、あと調査の中でわかったのは、fseekのオフセットはフロントエンドに
依存するっぽいです。元のソースのまんまでもライブラリを
直接叩くようなアプリならちゃんと2GB超えても作成できました。
ぶっちゃけWinampなんですが。

VisualC++2010でも無理やりビルドして動作するのを確認はしましたが・・・
いかんせん、疲れた。

2011年7月13日水曜日

Ubuntuマシン起動不能?

ウチにはx86省電力作業マシンとしてEeeBoxをUbuntu化したものを
稼動させているのですが、今日突然うんともすんとも言わなくなりました。
外部ログインすら受け付けなくなったので、ローカルで様子をみることに。

普段は電源とLANケーブル以外とっぱらってるので、
ディスプレイとキーボードを接続。いろいろ入力しても真っ暗。
フリーズしているっぽい。
しょうがないので電源を強制OFFして再起動したところ。。。

mount: mounting /dev/disk/by-uuid/なんたらかんたら on /root failed: Invalid argument
mount: mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys on /root/dev failed : No such file or directory
mount: mounting /proc on /root/dev failed : No such file or directory
Trarget file system doesn't have /sbin/init.
No init found. Try passing init= booting

と表示され、rootfsのプロンプトになってしまいました。
ブートレコードが壊れたのか、grubの問題なのか・・・
起動しないことにはなんとも言えないので、例によってGoogle先生に頼ることに。

とりあえずUbuntuの起動用CDとしてライブCDのイメージをDLしてCDRに焼く。
EeeBoxなので内蔵CDドライブはないので外付けドライブを接続。
まずはディスクチェック・・・問題なし。
bootargをUUIDからsda1に変えて起動させてみる。
・・・あ、真っ暗になってとまった。

しょうがないのでライブCDを立ち上げて起動。
ターミナルからディスクの状態を確認することに。
  1. UUIDの確認 bootargでのUUIDと実際の/dev/disk/by-uuidの対応がおかしくなってないか確認。
  2. マウントできるか確認、できるようならchrootしてディスク内のgrub-installerでMBRを再構成。
  3. e2fsckでパーティションのチェック。
んで、結局のところsda2がマウントできずにエラーで帰ってきたので、
dmesgで読んでみると、

sd 2:0:0:0: [sda] Add. Sense: Unrecovered read error - auto reallocate failed
sd 2:0:0:0: [sda] CDB: Read(10): ...............
end_request: I/O error, dev sda, sector なんたらかんたら
ata3: EH complete
JBD: Failed to read block at offset (忘れた)
JBD: recovery failed
EXT4-fs (sda2): error loading journal

…えー、どうもext4のジャーナルが壊れているのが原因のようで。
ちなみにsda1は/bootに割り当てているため、普通にマウントできました。
3のe2fsckでどうにもならなかったらすべてを消して再セットアップに(汗
さすがにユーザデータもろもろ設定なんかが入っているのでそれは勘弁願いたい。

sda2のチェックして、
どうも壊れたブロック?かジャーナルがあるけど上書きしていい?
と聞かれたのでドキドキしつつyes。
修復が完了し、あらためてマウント。
お、今度はできた。
あとは設定や過去のデータに影響がないか軽くチェックして再起動。

こんどは普通に起動できた!
ディスクチェックが走ったけど問題なくログイン画面に。

それにしてもまあヒヤヒヤさせるぜ(汗

おまけ
ubuntu.canonical.com/lucid/partnerが重過ぎてjava6の更新ができねえじゃねえかw

2011年7月10日日曜日

複数CDをまとめて1つのファイルにする

あ゛ーもう夏に入って日中は非常に暑くてたまらんですね。
先日物の整理をしていたら、某ドラマCDのシリーズが見つかって、
この際だからいつものMatroskaでまとめられないかなって思ったのが
今回の事の次第。

んでもって適当にEACとflacとmkvtoolnixでやってみようとしたら・・・
foobarで再生できなかったり、途中で音がなくなったりでなんじゃこりゃと
いろいろ調べて複数CDを1つにまとめる際には問題点が2つほどあることが
わかりました。
  • CUEシートの合成とトラック制限
EACでCUEシート+WAVでCDから取り込んだ後、各CDのWAVとトラック情報を
統合する必要があるのですが、CUEシート(CDDA)の規格上99トラックまでという
制限があります。また、CUEシートの結合は再生時間の計算なども必要で、
手動でやるには骨が折れます。
  • WAVE(RIFF)のサイズ制限
一般的なWAVファイルはリニアPCMの波形データにチャンク(ヘッダのようなもの)が
ついており、これにWAVEのサイズデータが記録されているのですが、これが
符号(無でしたorz)32ビットのため、約4GBまでしか取り扱えないという問題があります。


これらの問題を解決するために試行錯誤していたのですが、
結局いつもプレイヤーとして使っているfoobar2000と
検索で見つけたxrecodeIIを使うことにしました。
具体的な手順としては次のとおり
  1. EACでCUE+WAVでリッピング
  2. fb2kでWave64(RF64)にCDごとにCUE+WAV64に変換
  3. xrecodeIIでCUEシート結合・形式をRAWにする
  4. RAW→MP3/OGG/WAVPACKなどに変換(好みで)
  5. CUEシートを変換後の形式に整える
  6. mkvtoolnixでmkaコンテナに変換する
  7. fb2kで読み込ませ、CDタイトルなどを編集する
fb2kはWav64へのトランスコーディングとトラック情報の編集に、
xrecodeIIはCUEシートの結合とWAVの統合をさせています。

RF64(WAV64)は4GBを超えるWAV(PCM)を扱うために作られた規格のようです。
ただし、対応しているフロントエンドはあまり多くないようです。
後方互換性を持つため、RF64非対応のソフトは4GBまでの通常のwavとして
動作します。
RAWはリニアPCMのデータそのものです。ここから再生や変換を行うには
フロントエンドに本来WAVファイルのチャンクにある情報を与える必要があります。

なんでこんな回りくどい方法をしているのかというと、
fb2kは1ファイルにまとめる動作でなぜかCUEシートを出力しない
xrecodeIIはRF64は読めても書き出せない(設定項目が見つからない)
たいていのエンコーダがRF64チャンクを読めない
よってfb2kもxrecodeIIもエンコーダに渡すときはWAVで渡してしまう
という糞のような問題があるためです。
100トラック以上あるCUEシートの場合はMatroskaに変換すると
再生できるようになります。なんでんなもん出力するんだ



とりあえずRAW入力がありそうなエンコーダで試してみました、

・OGG Vorbis
rawファイルやリダイレクト、パイプによるPCM入力をサポートし、標準的な
WAVファイルの設定をデフォルト値で持ってくれるため、RAW→OGGの変換が
一番楽。

・LAME(MP3)
OGG同様、rawファイルをサポートし、標準的なデフォルト値を持つ。
ただし、なぜかフレームが一定値を超えると進捗率が100%になり、
勝手にエンコードを終わらせてしまうので、リダイレクトをしないと最後まで
エンコードしてくれない。なんでだ。

・FLAC
RAWファイル入力をサポートしているが、チャンクのパラメータを省略できない。
なぜか2GBで終わる。原因はまだ不明。どうも仕様くさい。

・TTA
RAWをサポートしてないのでダメ。

・WAVPACK
RAWファイルをサポートし、デフォルト値も持ってくれるのでロスレスでは使いやすい。
Matroskaコンテナにも入れられるのでロスレスで100トラック以上ひとまとめしたい場合におすすめ。

みたいな結果に。
不可逆でいいならOGGかMP3で。可逆は…バラでやってプレイリストにするのと
大差ないかも。やるならWAVPACKで。
不可逆はほかにも使えそうなコーデックがあるかも。

これで一応複数CDを1ファイルにするためのルーチンはできあがり。
試行錯誤が多くて疲れた・・・
あ、それと無圧縮ファイルを3種類使うので外付けHDDがあるといいですよ。
システムドライブでやっていて容量の警告がでてびびった。

2011年6月22日水曜日

いろいろと更新中・・・

相変わらずの気まぐれ更新です。
まあまったりいきましょう。

さて半月ほど前の出来事になりますがWorld IPv6 Dayがありましたね。
日本だと基本的にISPのホームユースではトンネル方式にアダプタを介して行う方式のようですが
特別何もせずに通常通りに接続する場合にはIPv4を使用することになります。
アダプタをつけない場合はTeredo+6to4リレーとかで接続することになりますが
家庭用レベルで現状IPv6は必要不可欠というわけでもないので導入はしません。

ただし、若干の例外があって、フレッツ閉域網でのサービスに
プライベートv6アドレスを使っているため、フレッツスクウェアNEXT・スクウェアv6の
ページはv6アドレスでしかアクセスできません。

まあ実害はあまりないのですが、LANでDNSを建ててドメインを構築・ついでに
DNSキャッシュもさせているので、World IPv6 Dayを機会に
ちょっと設定を見直してみました。


去年某カンファレンスでIPv6フォールバックの問題がありましたが、どうやら
AAAA-filterを各ISPのDNSに入れて対応しているようですね。
digでv6があまり見られなくなりました。

うちのDNSキャッシュサーバではv6は使わないようにしていたので使用するように
変更し、スクウェアNEXTが見られるはず・・・なのですが。

設定をいろいろいじっていたらつながったりつながらなかったり
おかしなことになってしまったw

最終的にゾーンテーブルの書式ミスと、v6クエリの投げ先が間違っていた模様。
うちのひかり電話対応ルータ(PR-S300SE)はDNSスレーブで、どうも
  • IPv4クエリはISPのDNSに送り
  • IPv6クエリはDHCPv6のオプションにあるDNSに送る
  • ルータをフォワーダに指定するときはルータのアドレスに投げる
  • ルータのリンクローカルアドレスではアクセス不可
のような動作をしているみたいです。
加えてDebianのbind9のsyslogを見ると、コネクションエラーがあると
問い合わせを中止してservfailを返す模様。(ナンテコッタイ

そのせいでルータのリンクローカルアドレスをファーストフォワーダにして
他のアドレスをセカンダリを指定していてもことごとくエラーでDNS引けないという
アホみたいな状況になってしまっていたようです。

結局ルータのv4アドレスに投げることで解決しましたが。

念のためv6フォールバック対策でAAAA-filterも仕込んでおきました。
ケースは少ないと思いますがAAAAレコードが返ってこないとも限らないので。
Debianのstableだと無効になってるので有効化してビルドしましたよ・・・

2011年3月29日火曜日

Firefox4.0の自前ビルド

本当に気まぐれ更新になっていますが、とりあえず新しいことをしたので。

先日リリースされたFirefox4.0をDebian/squeeze上で
最適化ビルドしてみました。

参考ページは以下
ちょっと内容が古いかもしれないですが、何とかいけました。

◯多分必要なもの
  • libnotify-dev
  • yasm
  • libasound2-dev
  • libidl-dev
  • libiw30  libiw-dev

これらはビルド中に足りなかったものを都度追加していったものです。

環境によってはさらに必要なものがあったり、ビルドオプションによっては
不要なものもあると思います。
参考ページに各プラットフォーム上での必要環境が書いてますので
参考にしてください。

◯ソースのダウンロード
参考ページのソースの入手から適当に拾ってください(w

◯l10n/ja_JPロケール用のファイル入手
無くてもいいような気がしますが、一応ja_JPのロケールファイルを
入手しておきます。

からbzip2なりCVSから入手するなり適当な方法でDLして、
展開後ディレクトリ名をl10n/ja_JPにしておきます。

2010年10月11日月曜日

久々に、再セットアップしたので

見ている人がいるかどうか不明なブログですが、
ようやっと生活や体調が安定してきたので更新してみました。

デスクトップPCの不調はどうやらリムーバブルHDDマウンタの
電源不足っぽくて不安定になっていたっぽいです。
今はSATAケーブルだけでなく、4ピン端子もつけられるマウンタに
切り替えたら安定して動くようになりました。
やっぱりオウルテックは安定するね(w

それはさておき、いろいろ試行錯誤の結果、Linuxを入れたHDDを
消してしまったので、改めて再インストールしました。

Ubuntuはまあ、10.04LTSだし、前みたいにNVIDIAドライバが
不安定になることもなかったので省略するとして、
Debian/Lennyがまた厄介なことになってました。

前はインストールCDのカーネルドライバにIDEが入っていなかったので
ムトゥ神のカスタムカーネルの入ったインストールCDを使いましたが、
最新のLennyインストールCDで試したところ、DVDドライブを認識したので、
これでいろいろ試すことに。

インストールそのものはまあ、ちゃんとできたのですが、
右下のポップアップに変なエラーが…
サウンドデバイスが認識されていない…だと…

デスクトップのオンボードチップはRealtekのALC889。
色々調べてLennyのカーネルソースのalsaのドキュメントを見てみる。
ねーよ。
どうやらLenny/stableのカーネルは2.6.26系で、こいつではサポート
していない模様。squeezeとかsidならできそうだが…

NVIDIAをnon-freeリポジトリからインストールしちゃったし、
モジュールの再生成が非常に面倒くさいことが分かったので、
結局またムトゥ神のお世話になることに。

ムトゥ神のCDでインストールされるカーネルは2.6.32なので、
当然リポジトリにあるNVIDIAドライバは使えない。
また、lenny用パッケージしか使えないので、カーネルソースは
何らかの方法で調達してくる必要がある。
さらにNVIDIAソースコードからモジュールを再ビルドする必要がある。

ただ、gitからオリジナルのソースコードを持ってきたり、
squeezeとかsidのパッケージを借りてくるのもバージョン混在で
管理があまりよろしくない気がしたので、ここはdebian-backportを
使ってみることにした。

deb http://ftp.jp.debian.org/debian-backports lenny-backports main contrib non-free

ここからカーネル及びカーネルヘッダ、カーネルソースを持ってきて、
NVIDIAドライバのソースも入れる。

問題は何のカーネルを入れ込むかなと。
選択としては単純に2.6.32を入れたり、bigmemにしたりとか。
せっかくPCに4GBメモリ積んでいるのでbigmemカーネルにすることにした。

あとはmodule-assistantを使ってビルドとインストールをするだけ。
backportのパッケージも混じっているけど、基本lennyで済むので
パッケージのバージョン違いでのコンフリクトはほとんど起こらない
…はず。

とりあえず今回はこんなところで。

2010年3月14日日曜日

復帰しました

あんまり見ている人がいるとは思えないけどとりあえず復帰報告。

実家のほうで不幸があったのと、例の新PCが不調だったため、
2ヶ月ほど更新をしていませんでした。

PCの方はリムーバブルマウンタの不調みたいで、ディスクアクセスエラーが
頻発してクラッシュ状態になっている模様でした。

DebianとUbuntuのHDDがそのせいで死にましたorz

ではでは。

2010年1月24日日曜日

あちゃ〜

また間を空けてしまいました。
新年早々風邪ひいてしまった後
なかなかやる気を出せなくて//

ネタはあったんだけどね。

とりあえず自分のDebianマシンのInput Methodを
SCIMからUIM-Anthyに切り替えました。

というのも、日本語入力の出だしが日本語入力ではなく
直接入力になってしまうタイムラグが生じることと、

ファイルサーバにSSHアクセスするときに日本語入力が
うまく入らない事象が発生したためです。

Gnome端末ならこれで日本語ファイル名をSSH経由で入力
出来るようになりました。
ただ、WindowsっぽくShift押すと全角直接入力になったり
ローマ字入力でもF10押すとアルファベット変換したりとかの
小技がリセットされてしまうのが悩みのタネ。
もちっと調べてみます。

残りのネタはWalkmanの動画変換ネタだけどもこいつは長いので
次回のネタに。主にH.264でとりあえずWindowsネタです。

ではでは。

2009年12月23日水曜日

年賀状ですね。

いやはや。
またあんまり更新してませんね。
あんまりLinuxの出番が最近ないのが原因でもあるのですが。

とりあえず時事ネタとして年賀状でも。

ところで思い返して見ると、年賀状って出してませんね。
実家とかのたまにくるものには来たら返す、っていうスタンス
だったので。
主に携帯メールですませたり、それもサボったりで
あんまりやってませんでした。
職場でもあんまり出し出されたりっていう雰囲気じゃなかったしね。
もっとももっとお偉いさん方は分かりませんが。

んで。東京に転勤したし、PCも新調したりしたので、
すこし気を入れてやってみようと
(出来ればLinuxで)年賀状にチャレンジしてみました。

普通ならglabelやOOoが候補なのですが、できるなら
専用ソフトでなるべくやってみようと、調べたら
ゆうびんHPでデザインツールを配布してるのですね。
日本郵便「はがきデザインキット」
http://yubin-nenga.jp/design_kit/index.html

AdobeAIRで作られているようで、AIRが動く環境なら
OSを問わない(と思われます)です

なので、AdobeAIRをまずインストールします。
Debian/Lenny(x86)ならインストールできるみたいです。

AdobeAIRInstaller.binをダウンロードするので
実行権を付与して実行。オプションはデフォで
はいはいやっていけばインストール出来ます。

んで、はがきデザインキットをダウンロードをクリックして
しばらく待てばインストールが始まります。
この時期は使っている人が多いためか、10分くらいかかります。

完了したら開いたりニックネーム登録したりすればOKなはず。
このあたりはゆうびんHPを参考に。

KDE使っているとKDEウォレットが開いたりするのですが、
とりあえずAnonymous許可すればいいかなと。
誤作動なのかよくわからん。

無事起動すると、
こんな感じで窓が開きます。
デスクトップにショートカットを登録していれば今後は
そこから起動できます。
KDEならユーティリティーグループにもありますし、
デフォ設定なら/optの中をたどればあります。

これで好きなテンプレやパーツを組み合わせて年賀状作成が
可能になりました。

ただ、自分の環境ではプリントサーバ環境なので
ちょっと印刷がうまくいかないことがあるので、データを保存して
同様の環境をWindowsでも構築して印刷しました。
USB直繋ぎならうまくいくと思います。

少し不満なのが、宛名部分が強制的に送り名を入れないといけないことと、
フォント設定などを宛名や送り名で分けられないことですか。
そのため、こちらは別のソフトで対応することにします。

2009年11月8日日曜日

CUPS共有プリンタ

あんまりネタが今はないけど、取り合えず
以前から調子の悪かったCUPS共有プリンタの設定でも。

玄箱PROをDebianサーバ化したものをファイルサーバやら
いろいろなサーバアプリケーションを入れて低消費電力サーバとして
活躍中なのですが、前に1.3系から1.4系にアップした際に、
LAN経由のプリントアウトがうまくいかなくなってました。
その時はいくら設定を見直してもうまくできなかったのですが、
CUPSのバグだろうと決めつけて(をい 放置してましたが、
最近やり直してみたら、共有設定を設定しなおしたらなぜか
うまくいくようになりました。

基本的には
  • LAN経由でプリントサーバにジョブを送って印刷
  • サーバはCUPS(玄箱:ARMアーキテクチャ)
  • プリントフィルタはクライアントで行う
を目的にします。
玄箱PROのARMプロセッサだとCANONがドライバをサポート
していないための措置です。







とりあえずUSBでつなぐCUPSサーバ設定はこんな感じで。
プリンタドライバをRAWにするのがミソ。
サーバはスプーリングとプリンタへの転送だけを行う。
cups.confあたりの設定は確かLinux-Windows共有の設定解説サイトを
参考にしたのを使ってたと思う。

クライアントがWindowsの場合はいくらでも解説サイトがあるので
省略。
以下は新デスクトップLinuxのCUPS設定をば。





ここでプリンタのURIを

URI: ipp://(CUPSサーバ):631/printers/Canon_MP600

としておく。「printers」が分からなくてちょっと四苦八苦してました。
いじっていると「送信先が見つかりませんでした」とか言われるけど、
一回テストプリントすると正常になります。

これでいちいちUSBをプリンタに繋ぎにいかなくてもLAN経由で印刷できます。
ただし、Windowsのクライアントだとドライバに制限があるらしく、
Nアップ印刷とかちょっと必要な機能類が使えなかったりします。

ただし、Linuxドライバだとなぜか使える不思議。
※追記
どうやらMP600付属CDのドライバは古いものらしく、CANONのダウンロードページの
最新ドライバに差し替えたらNアップ印刷などのUSB直結の機能がCUPS経由で
出来るようになってました。

閑話休題。
今日久々にプログラミングをしようと、東方蓄音機的なものを
Linuxでできないかなぁと画策してました。
Windowsと違ってサウンドデバイスへのアクセスがいまいちわからんのと
サウンドサーバが複数あるので絞ったり互換性を考えたりするのが
難しいというのが分かった(汗
SDLで実現できれば早いのだが。

2009年10月30日金曜日

久々にDebianでも。

久々にDebianをいじって見ました。
とりあえずファイルサーバのLinuxにアクセスするためのSSHの設定と
ノートPCのWindowsから、デスクトップLinuxにファイルアクセス
するためのSambaと
ついでにMP3のID3タグをWindowsのWinampと共有できるようにした。

SSHは

ssh-keygen -t rsa -b 2048

でRSA鍵のペアを作成。
できたpub鍵をファイルサーバへコピー。
一回アクセスすればおk。

Sambaはファイルサーバに既に設定してあるのを参考に。
プロパティは別にどこで設定しても構わないが、関連している所の
近くが混乱せずに済むかも。

#smb.confに対して
hosts allow = 192.168.○○ 127.

#文字コードをプリセットする
dos charset = cp932
unix charset = utf-8
display charset = utf-8

security = user //コメントアウトを外す
#rootではアクセスさせない
invalid users = root

#SambaとLinuxのユーザパスワードは独立させる
unix password sync = no
pam password change = no

#よくわからんがソケットバッファの確保とディレイなしの設定
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192

#ホームディレクトリパスを指定
path = /home/%S

#アップロードも出来るようにする
read only = no //コメントアウトを外す

#ファイルとディレクトリのマスク値をLinuxに合わせる
create mask = 0644
directory mask = 0755

で、最後にSambaとパスワード非同期にしたので、Samba用のパスワードを
設定する。

smbpasswd -a ユーザ名

これが一番引っかかったところだ。
すっかりパスワード設定しないと入れないのを失念していた。
これでファイルのやりとりが簡単になる。
わざわざFTPやSSHポートフォワードを設定する必要がない。

MP3は前のデスクトップLinuxでも苦労したところだ。
まあ前のはEUCとUTF-8とShift-Jisが混在した
カオスな状況になってたからだが。

この辺を参考にしてみた
 「MP3ファイルのID3タグの文字コードを変換するには」
Debianだと参考サイトと設定画面が異なり、WindowsのWinampと互換を
とりたいので、若干アレンジ。
まずEasyTAGをインストールして起動する。
ここで気をつけるの下の強制読み込みオプションで、
Shift_jisにしてあげることと、書き込みタグのバージョンを
ID3v2.3にすること。UTF-16固定になるが、Winampで問題なく読める。
ID3v1はよく分からないが、取り合えず入れないこととした。
あとは対象のMP3ファイルを読み込ませて、強制書き込みすればOK。

こんな感じ。
曲にツッコミを入れてはいけない(・∀・)
これで保存したMP3をいくつか再生してみました。

JuKだと

Noatunだと

こんな感じでちゃんと文字化けせずに日本語表示出来ました。
ただ、RythmBoxだと、文字化けになります。UTF-8を強制したところ、
日本語は表示されて英数がおかしいことに(´・ω・`) ショボーン

まあ、もともとiTunesとWinampその他で作成したMP3はどうも
文字コード互換がなくて苦労している方も多いみたいなので、
Appleのお世話にあまりなる気のない自分としてはこれで十分かも。
ちなみにiPodではなくWalkman使いだぜ。
ATRACは使ってないが。

今日は長文だったので、これくらいで。
次はニコ動貼付けに挑戦しようかな。

2009年10月18日日曜日

う~む

どうもデュアル構成にしたUbuntu(Debianも?)の調子が悪い。
Ubuntuの場合はグラフィック関連が、どうもNvidia提供のカーネルドライバの
影響なのか、表示がおかしい。
ログイン後、すぐにハングアップしてしまう。

Debianはそれほどでもないが、走査線になんか変な色のラインができてしまう。
昨日はだいじょぶだったんだけどね。
ニコ動で楽天戦も見てたし。

WindowsのHDD戻したけど、特に何も異常がない。
ディスプレイの電源OFF-ONしたからかね?

あとでもう一回試してみよう。