2009年12月27日日曜日

Macのターミナル上でscreen

screen+zshな環境を作るためにurxvtをインストールしたりする人もいるようですが,
とりあえずはMac10.6付属のターミナルでscreenを動かしてみました.

以下の点が問題になったので,それの解決メモ.
・screenのタブ(?)とターミナルのタブが独立して動作しない
・ファンクションキーが効かない

2つ目の問題点は,自分がscreenのタブをファンクションキーで切り替える設定をしているのですが,
ファンクションキーがscreenに送られていないようで,タブが切り替わらなかったのです.

以下,解決法
1.ターミナルの環境設定を開く
2.設定 -> 起動 の「開くシェル」はデフォルトか,sh,bash,zshなどのシェルを指定する.screenは指定しない(1つ目の問題点)
3.設定 -> シェル の「コマンドを実行」に screen と書く(1つ目の問題)
4.設定 -> 詳細 の「ターミナルの宣言方法」に xterm を選ぶ(2つ目の問題)

これで,ターミナルの各タブで「開くシェル」で指定したシェルが走り,
そのシェルの上でscreenが走ります.
また,開くシェルのTERM環境変数にxtermが設定されることでファンクションキーが効くようになります.デフォルトのxterm-colorでは効かない様子.

2009年12月22日火曜日

NTEmacs23.1 + IME.patch をビルドする

いろんなところに同じような記事があるが、自分用覚え書き。

注意点はmake-3.80を使わなければならないところ。
Cygwinでは3.81しか準備されていないので、自分でmakeをインストールする必要がある。

1. 必要なパッケージの準備

以下のようなパッケージ群をsetup.exeを使ってインストールしておく
$ cygcheck -s | egrep '^(gcc|mingw|make)'
gcc 3.4.4-999
gcc-core 3.4.4-999
gcc-g++ 3.4.4-999
gcc-mingw 20040810-1
gcc-mingw-core 20050522-1
gcc-mingw-g++ 20050522-1
make 3.81-2
mingw-bzip2 1.0.5-3
mingw-libbz2-devel 1.0.5-3
mingw-libbz2_1 1.0.5-3
mingw-runtime 3.17-1
mingw-zlib 1.2.3-3
mingw-zlib-devel 1.2.3-3
mingw-zlib0 1.2.3-3

2. make-3.80のインストール

make-3.80を自前インストールする
$ mkdir ~/src
$ cd ~/src
$ wget ftp://ftp.gnu.org/gnu/make/make-3.80.tar.bz2
$ tar jxvf make-3.80.tar.bz2
$ cd make-3.80
$ ./configure --prefix=/usr --program-suffix=-3.80
$ make
$ make install
$ ls /usr/bin/make-3.80
/usr/bin/make-3.80

3. 画像サポートのための準備

まず、画像サポートを有効にするための準備。

GnuWin32から以下のようなDLLとヘッダーファイルを用意する。
以下のようなzipファイルをダウンロードして展開し、中から.dllや.hファイルだけを抜き出す。
\ls -Rgo
.:
合計 3528
drwx------+ 3 0 Nov 29 22:10 DLL
-rwx------+ 1 1793 Nov 29 22:06 get.sh
-rw-r--r-- 1 189242 May 15 2005 jpeg-6b-4-bin.zip
-rw-r--r-- 1 38186 May 15 2005 jpeg-6b-4-lib.zip
-rw-r--r-- 1 401037 Jun 5 05:53 libpng-1.2.37-bin.zip
-rw-r--r-- 1 134939 Jun 5 05:55 libpng-1.2.37-lib.zip
-rw-r--r-- 1 285963 Mar 2 2007 libungif-4.1.4-1-bin.zip
-rw-r--r-- 1 12272 Mar 2 2007 libungif-4.1.4-1-lib.zip
-rw-r--r-- 1 928480 Mar 2 2007 libungif-4.1.4-1-src.zip
-rw-r--r-- 1 687244 Mar 31 2006 tiff-3.8.2-1-bin.zip
-rw-r--r-- 1 38372 Mar 31 2006 tiff-3.8.2-1-lib.zip
-rw-r--r-- 1 35884 Feb 15 2005 xpm-3.5.1-1-bin.zip
-rw-r--r-- 1 42484 Feb 15 2005 xpm-3.5.1-1-lib.zip
-rw-r--r-- 1 622191 Feb 15 2005 xpm-3.5.1-1-src.zip
-rw-r--r-- 1 99777 Jul 26 2005 zlib-1.2.3-bin.zip
-rw-r--r-- 1 71569 Jul 26 2005 zlib-1.2.3-lib.zip

./DLL:
合計 1613
drwx------+ 2 0 Nov 29 22:09 X11
-rwx------+ 1 16189 Oct 25 2005 gif_lib.h
-rwx------+ 1 1800 May 15 2005 jconfig.h
-rwx------+ 1 14488 May 15 2005 jerror.h
-rwx------+ 1 14567 May 15 2005 jmorecfg.h
-rwx------+ 1 127488 May 15 2005 jpeg62.dll
-rwx------+ 1 46359 May 15 2005 jpeglib.h
-rwx------+ 1 260096 Jun 5 05:48 libpng12.dll
-rwx------+ 1 260096 Jun 5 05:48 libpng3.dll
-rwx------+ 1 376832 Mar 28 2006 libtiff3.dll
-rwx------+ 1 31232 Mar 2 2007 libungif4.dll
-rwx------+ 1 153839 Jun 5 05:40 png.h
-rwx------+ 1 45382 Jun 5 05:40 pngconf.h
-rwx------+ 1 33725 Dec 27 2005 tiff.h
-rwx------+ 1 2968 Mar 24 2006 tiffconf.h
-rwx------+ 1 23216 Mar 28 2006 tiffio.h
-rwx------+ 1 410 Mar 23 2006 tiffvers.h
-rwx------+ 1 52224 Feb 14 2005 xpm4.dll
-rwx------+ 1 9544 Jul 21 2005 zconf.h
-rwx------+ 1 66188 Jul 18 2005 zlib.h
-rwx------+ 1 75264 Jul 21 2005 zlib1.dll

./DLL/X11:
合計 16
-rwx------+ 1 16286 Jan 25 2004 xpm.h

4. NTEmacs-23.1のインストール

まずemacs-23.1のソースコードを公式ページからダウンロードします。
$ mkdir ~/usr
$ cd ~/usr
$ wget http://ftp.gnu.org/pub/gnu/emacs/emacs-23.1.tar.bz2

つぎに、TaijiからIMEパッチをダウンロードし展開、パッチを当て、コンパイルする。

$ wget
$ tar jxvf emacs-23.1.tar.bz2
$ cd emacs-23.1
$ patch -p1 < ../Emacs-23.1-IME.patch




Gygwinの/usr/bin/gccがシンボリックリンクなのでコマンドが見つからない問題を回避するため、
configure.batファイルでgccを参照しているところをgcc-3に書き換える。
以下のパッチを当ててもOK.(参考サイト
--- ../emacs-23.1.org/nt/configure.bat 2009-08-06 13:29:05.061912900 +0900
+++ nt/configure.bat 2009-08-06 13:30:23.116085200 +0900
@@ -141,7 +141,7 @@
goto again
rem ----------------------------------------------------------------------
:withgcc
-set COMPILER=gcc
+set COMPILER=gcc-3
shift
goto again
rem ----------------------------------------------------------------------
@@ -293,11 +293,11 @@
rem Auto-detect compiler if not specified, and validate GCC if chosen.
:checkcompiler
if (%COMPILER%)==(cl) goto compilercheckdone
-if (%COMPILER%)==(gcc) goto checkgcc
+if (%COMPILER%)==(gcc-3) goto checkgcc

echo Checking whether 'gcc' is available...
echo main(){} >junk.c
-gcc -c junk.c
+gcc-3 -c junk.c
if exist junk.o goto checkgcc

echo Checking whether 'cl' is available...
@@ -316,10 +316,10 @@
echo #include "cygwin/version.h" >junk.c
echo main(){} >>junk.c
echo gcc -c junk.c >>config.log
-gcc -c junk.c >>config.log 2>&1
+gcc-3 -c junk.c >>config.log 2>&1
if not exist junk.o goto chkapi
echo gcc -mno-cygwin -c junk.c >>config.log
-gcc -mno-cygwin -c junk.c >>config.log 2>&1
+gcc-3 -mno-cygwin -c junk.c >>config.log 2>&1
if exist junk.o set nocygwin=Y

:chkapi
@@ -348,10 +348,10 @@
set cf=%usercflags% -mno-cygwin
:chkapi2
echo on
-gcc %cf% -c junk.c
+gcc-3 %cf% -c junk.c
@echo off
@echo gcc %cf% -c junk.c >>config.log
-gcc %cf% -c junk.c >>config.log 2>&1
+gcc-3 %cf% -c junk.c >>config.log 2>&1
set cf=
if exist junk.o goto gccOk
echo The failed program was: >>config.log
@@ -367,14 +367,14 @@
goto end

:gccOk
-set COMPILER=gcc
+set COMPILER=gcc-3
echo Using 'gcc'
rm -f junk.c junk.o
Rem It is not clear what GCC version began supporting -mtune
Rem and pentium4 on x86, so check this explicitly.
echo main(){} >junk.c
echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
-gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
+gcc-3 -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
if not errorlevel 1 goto gccMtuneOk
echo The failed program was: >>config.log
type junk.c >>config.log
@@ -389,7 +389,7 @@
rem Check for DWARF-2 debug info support, else default to stabs
echo main(){} >junk.c
echo gcc -c -gdwarf-2 -g3 junk.c >>config.log
-gcc -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
+gcc-3 -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
if not errorlevel 1 goto gccdwarf
echo The failed program was: >>config.log
type junk.c >>config.log
@@ -588,7 +588,7 @@
rem ----------------------------------------------------------------------
:genmakefiles
echo Generating makefiles
-if %COMPILER% == gcc set MAKECMD=gmake
+if %COMPILER% == gcc-3 set MAKECMD=gmake
if %COMPILER% == cl set MAKECMD=nmake

rem Pass on chosen settings to makefiles.

上のパッチを当てる
$ patch -p1 < ../emacs-23.1-gcc3.patch




ビルド、インストールを行う。
cygwinのターミナルから
$ LANG=C ./configure.bat --enable-w32-ime --with-gcc --no-cygwin --no-debug --cflags -D_UNICODE --cflags -DRECONVERSION --cflags=-I/usr/local/include --cflags=-I~/src/dlls --prefix=c:/path/to/install
$ make bootstrap
$ make install
$ cp =/src/dlls/*.dll c:/path/to/install/bin

参考サイト
プログラム番長のヲボエガキ
u-ch

2009年12月15日火曜日

バッファの文字コードに従ってplatexに-kanjiオプションを渡す

ここで書かれていたコードが非常に便利だったので紹介です.

自分はWindows, Ubuntu, Solaris, Macな人間なので,.texファイルをマシン間でコピーした際に,platexが「文字コードが不明!」とかってエラーを吐きます.
platexに -kanji=eucjp のようにオプションを渡せばいいのですが,いちいち設定するのがめんどくさい.
Auctexを使ってるんだから,C-c C-cしただけでちゃんとコンパイルしてほしい.

そんなときに見つけたのが上記のコードです.
そのままだと,バッファの文字コード認識部分が正常に動かなかったのでちょっと修正してます.

(add-hook 'LaTeX-mode-hook
      '(lambda ()
         (let*
             ((kcode (symbol-name buffer-file-coding-system))
              (opt (cond
                    ((string-match "^utf-8" kcode) " -kanji=utf8")
                    ((string-match "^shift_jis" kcode) " -kanji=sjis")
                    ((string-match "shift-jis" kcode) " -kanji=sjis")
                    ((string-match "^euc-jp" kcode) " -kanji=euc")
                    ((string-match "^japanese-iso-8bit" kcode) " -kanji=euc")
                    ((string-match "^iso-2022-jp" kcode) " -kanji=jis")
                    (t ""))))
           (if (boundp 'japanese-TeX-command-list)
               (progn
                 (message "pLaTeX %s inserted" opt)
   (setcar (cdr (assoc "pLaTeX" japanese-TeX-command-list))
                         (concat "%(PDF)platex" opt " %`%S%(PDFout)%(mode)%' %t"))
                 (setcar (cdr (assoc "jBibTeX" japanese-TeX-command-list))
                         (concat "%(PDF)jbibtex" opt " %s"))
                 (message "pLaTeX UTF-8 flag enabled"))
             (message "pLaTeX UTF-8 flag disabled")))))

2009年12月13日日曜日

macでドットファイルを表示する

windowsでいう隠しファイルのこと。ファイルに隠し設定を施すのではなく、ドットから始まるファイル名にすれば勝手に隠しファイルになる。

で、Windowsなら「隠しファイルを表示する」オプションがあるけど、Macにはない。。。
調べたら以下の方法が見つかりました。

コンソールで以下のコマンドを入力
$ defaults write com.apple.finder AppleShowAllFiles TRUE
$ killall Finder
Finderが再起動されて、隠しファイルが表示される。

非表示に戻す場合は
$ defaults write com.apple.finder AppleShowAllFiles FALSE
$ killall Finder
とすればよい。

ほかにも、AutomasterとかTinkerTook(Mac版窓の手)を使う方法とかあるようです。

2009年12月7日月曜日

/dev/dsp1の再生

vlcで普通に/dev/dsp1を開こうとするとエラーになる。
とりあえずコンソールから開くには
$ vlc oss:///dev/dsp1
でできる。
これでvlcでラジオが聞けるぞ~

2009年12月2日水曜日

tscreen 0.9.4 on Cygwin

GNU Screenは古いの?
に書かれているように,screenの開発が滞っているため,カッとなってforkさせたtscreenというものがあるらしい.
とりあえず何も考えずにCygwinにインストールしてみるが,configureエラーとコンパイルエラーが発生するので,
screen-4.0.2へのCygwinパッチを参考にパッチを作成してみた.

参考ページ
cygwinのscreen

参考パッチ
Re: 1.5.17: problem building GNU screen
Re: screen

上のパッチはconfigureできないバグを,下のパッチはmakeできないバグを修正するモノらしい.

tscreen-0.9.4用に作ったパッチを置いておきます.
tscreen-0.9.4-cygwin.patch

使い方は以下の通り.
$ ls
tscreen-0.9.4.tgz tscreen-0.9.4-cygwin.patch
$ tar zxvf tscreen-0.9.4.tgz
$ cd tscreen-0.9.4
$ patch -p1 < ../tscreen-0.9.4-cygwin.patch
$ ./configure --enable-colors256
$ make
$ make install
$ tscreen


起動確認はできたが,詳細な動作確認はしていないので,正常に動くかどうかは不明...

2009年11月30日月曜日

linux + usb radio + peercast

がんばったのでメモ。
何をやりたいのかはコマンドから察してください。
Peercastの設定はすでに完了しているものとしています。

構成
・Ubuntu 9.04 からアップグレードした Ubuntu 9.10 (カーネル2.6.31)
・PeercastVP
・SUNTEC RDPC-101 (USB AM/FM tuner)
・SUNTEC RDPC-101 (USB AM/FM tuner) ドライバ カーネルパッチ for Linux (Driver Labo. 製)

1. RDPC-101をLinuxで使えるようにする

まず、以下のような手順でドライバを組み込みます。

コンパイル用のディレクトリを作成。
$ mkdir ~/module
$ cd ~/module

カーネルパッチから、radio-rdpc101.cの部分だけを抜き出し、radio-rdpc101.cとして保存する。
ただし、2.6.31系カーネル(新しめのカーネル)のときには
#include <linux/smp_lock.h>
を書き加える必要がある。

RDPC-101のカーネルモジュールを作成。カーネルまるまる再構築はめんどくさいのでモジュールだけ。
$ vi Makefile # 内容は「モジュールのみコンパイル」の記事を参照。
$ ls
Makefile radio-rdpc101.c radio-rdpc101.ko .........

モジュールの組み込み。
$ sudo /sbin/modprobe videodev #radio-rdpc101が依存しているので
$ sudo /sbin/insmod radio-rdpc101.ko

ここでRDPC-101をUSBポートに挿す。
先に変なところで挿しちゃってたら、違うドライバ(radio-si470x)が使われてしまいエラーになる。
そのときは
$ sudo /sbin/rmmod radio-si470x
として、モジュールを除去してから上の作業を行えばOK。

再生確認。
$ sudo /sbin/modprobe snd-pcm-oss   # alsaの疑似oss機能を追加(/dev/dsp*が作成される)
$ sudo /dev/dsp1 > /dev/dsp

ここで、スピーカーから音が聞こえればOK
うちのマシンでは音声が再生されない仕様(?)なので、サウンドレコーダーでラジオを録音したファイルを他PCに転送して再生を確認した。

2. ffmpeg + vlc media player でPeercastにストリーム配信


以下のコマンドでoggストリーミング。
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

[user],[passwd],[host],[port]は、Peercastへ配信するためのユーザー名、パスワード、Peercastが動いているホスト、ポートを指定する。

以上で、配信ができました。

文章量は少ないけど、いろんな試行錯誤で、再生できるまでに缶詰丸5日もかかった。。。


追記
# スピーカーで聞きながら配信
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#duplicate{dst=display,dst=transcode{acodec=vorb,ab=256,channels=2}:std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

#これだとうまくいかない
$ ffmpeg -f oss -ac2 -i /dev/dsp1 -ar 44100 -f wav - | cvlc -vvv - --sout '#transcode{acodec=vorb,ab=256,channels=2}:duplicate{dst=display,dst=std{access=shout,mux=ogg,dst=[user]:[passwd]@[host]:[port]/}} --sout-keep'

2009年11月29日日曜日

Linuxのカーネルモジュールだけコンパイル・インストール

以下の内容のMakefileを作成する
obj-m := hello.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

makeする
$ make

モジュールの組み込み・除去は次のようにする
$ su
$ /sbin/insmod hello.ko
$ /sbin/rmmod hello.ko

次のようなコマンドで確認
$ dmesg
$ /sbin/modprobe -l | grep hello

参考
Linux Kernel 2.6.x プログラミングガイド
Loadable Kernel Moduleの作り方
LS-GLのiptablesによるルーター化(insmodできないときの解決法)

Fedora11でカーネル再構築

カーネル再構築に必要なパッケージをインストール
$ su
$ yum install rpmdevtools yum-tuils
$ exit

パッケージ構築用のディレクトリ構造を作る
$ cd
$ rpmdev-setuptree

カーネルソースをダウンロードする。特定のバージョンがほしい場合はどっかから持ってくる。
$ yumdownloader --source kernel

カーネルソース再構築に必要なパッケージをインストール
$ su
$ yum-builddep kernel-.fc11.rpm
$ exit

カーネルソース展開と準備
$ rpm -Uhv kernel-.fc11.src.rpm
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=`uname -m` kernel.spec

カスタムカーネル作成準備
ここでパッチを当てる(※はずだが、コンパイル時にソースが再展開されるのでパッチは無効になる)
$ cd ~/rpmbuild/BUILD/kernel-/linux-
$ cp configs/kernel-.config .config
$ make oldconfig
$ make menuconfig
$ make xconfig
$ cd ~/rpmbuild/SPECS
$ vi kernel.spec

#% define buildid .local

%define buildid .test

コンパイル(時間かかる)
$ rpmbuild -bb --target=`uname -m` kernel.spec

インストール
$ cd ~/rpmbuild/RPMS/i686
$ su
$ rpm -ihv kernel-.test.fc11.i686.rpm

ちなみに、パッケージを削除するには
$ su
$ rpm -ehv kernel-.test.fc11.i686

参考文献

Fedora 10でカーネルを再構築するには

FC4 私的MEMO カーネル再構築とrpmの作成
RPM

フォロワー