Last modified: Jan 09 04:28 JST 2003
自作のプログラムとか - パッチ篇
他の方が作られたプログラム・ソフトウェアに対するパッチです。
ここにあるパッチはすべて非公式ですので、自己責任でご使用ください。
元となっている素晴らしいソフトウェアを開発・公開されている
開発者の皆様に感謝。
- WindowMaker 0.61.1 で 8方向移動 (Feb 20, 2000 / 493 bytes)
- WindowMaker
でキーボードを使ってアクティブウィンドウを移動するとき、
カーソルキーの他に
h、j、k、l
キーが使えますが、これに加えて
y、u、b、n
キーで斜め方向の移動もできるようにするパッチです
(そういうゲームに慣れた人用)。
また移動の決定もスペースキーでも出来るようになります。
- WindowMaker 0.62.1 では
patch コマンドがオフセットを報告しますが一応使えるようです。
- WindowMaker 0.63.1〜0.80.0 にはそのままでは当たりませんが
patch に
-l (--ignore-whitespace)
オプションをつけると一応使えるようです (なんていい加減な)。
- Linux modutils で gzip されたモジュールを自動展開する (Jan 15, 2002 / 5364 bytes)
- そのまんまです。
gzip -9r /lib/modules/x.y.z/kernel
とかやっておいても、
modprobe
が透過的に圧縮されたモジュールを展開して読み込むようにします
(もちろん insmod hoge.o.gz
もできます)。 … という機能自体は、実は modutils 2.3.12
から既に組み込まれている
(ただしコンパイルオプションになっていて、既定値ではコンパイルされません)
のですが、そっちは zlib を使って展開するようになっているのに対して
このパッチでは外部プログラム (gzip) を使っています。
ルートパーティションに libz.so.*
を置きたくない (*) という貧乏症(?) の人やシステムユーティリティにいろんなライブラリを組み込むのはどうも、という心配症の人向けです
;-)
- (*)
- ルートパーティションに
gzip を置くのは
FHS
でも要求されているので問題はないでしょう。たぶん。
- 使用上の注意
- コンパイルするには
Autoconf
が必要です。このパッチをあてたら、まず autoconf
を実行して
configure を再生成してください。
- パッチは modutils 2.4.12 用になっていますが、 (例によって)
2.4.15 でも patch
コマンドがオフセットを報告するものの一応使えるようです。
/lib/modules/x.y.z/kernel
の下のモジュールを圧縮したときは、
depmod -a を実行してください。
これを忘れるとモジュールの自動ロードができなくなります。
- pcmcia-cs
を使っている場合は
/lib/modules/x.y.z/pcmcia
にあるシンボリックリンクを張り直し、また
/etc/rc.d/init.d/pcmcia
などを修正する必要があるかも知れません。
- 圧縮ファイルの展開時には
/tmp (または環境変数
TMPDIR で指定されたディレクトリ)
に一時ファイルを作ります。ブート初期の
rc スクリプトなどで用いる場合は特に注意してください。
- Xvnc & Xsun 共存パッチ (Jun 03, 2002 / 1775 bytes)
- SunOS 5.x (Solaris 2.x, 7, 8, 9) で
VNC の X サーバ
(Xvnc) と標準の X サーバ (/usr/openwin/bin/Xsun)
を併用しようとすると、「Xsun がいったん立ち上がってしまうと
多くのユーザは Xvnc を起動できなくなる」(*) という現象が
起こります。このパッチは Xvnc の動作を Xsun の
動作に合わせることによってこの状況を回避します。
UNIX 版 VNC のソースパッケージに含まれている Xvnc の
ソースツリーにこのパッチを当ててコンパイルした後、
できた Xvnc を 所属グループ root で set-gid
にしてインストールしてください。
- (*) の原因は、 Xsun が GID (グループID) root に
set-gid されていて、 UNIX ソケットのディレクトリ
(/tmp/.X11-unix) を root のグループライタブルで
作成するため (たぶんセキュリティ上の理由でしょう) です。
Xvnc はこのような特権を持っていないので、
root グループに属しないユーザ (一般ユーザはたいていそうでしょう)
が Xvnc を起動しようとすると UNIX ソケットを作れないので
エラーになります。簡単に対処するなら、 Xvnc もそのまま
グループ root に set-gid してしまえばいいのですが、
少しでもセキュリティ上のリスクを減らすため
ソケットを作る/消す時以外は実 GID
で動かすようにするのがこのパッチです。
- パッチは VNC 3.3.3r2 に対するものですが、
TightVNC 1.2.3 でも使えます。
TightVNC 1.2.4 にもそのまま当たるようです。
- VNC に手を入れずに
UNIXソケットを使わないようにして解決する方法 もありますが、
ローカル接続が使えなくなるのでパフォーマンスが落ちる
気がします。
- 最後に、このパッチは X サーバのOS・デバイス非依存層 (dix) に
強引に OS 依存コードを突っ込んでいますが
あまりいじめないでください :-p
- GNU Emacs 21.2 の複数デプス対応パッチ (Aug 04, 2002 / 1679 bytes)
- Sun の FFB グラフィックアクセラレータ
(Ultra-2 の Creator など) では、デフォルトの
8ビットデプスと同時に24ビットデプスのプレーンが利用できます。
一方、 GNU Emacs
の X ウィンドウシステム対応コードには少し問題があって、
複数のデプスを持つデバイスでもデフォルトのデプスしか使えません
(デフォルト以外のデプスを指定すると起動時に Segmentation fault や
X のプロトコルエラーなどで落ちてしまいます)。
この問題を解決するためのパッチです。これで Emacs
を24ビットカラーモードで使うことができ、カラーフラッシュの起きない快適な
Emacs ライフを楽しめます。 :-)
- カラーモードを指定して Emacs を起動するには、
X のリソース (
~/.Xdefaults ファイルやコマンドラインの
--xrm オプションなど) で Emacs.VisualClass
(インスタンス名は emacs.visualClass) を
TrueColor-24 のような値
(<ビジュアルクラス名>-<デプス>)
に設定します。
binutils 編
GNU binutils
に対するパッチです。なぜかいろいろ変なことを思いつきます。
:-)
- GNU assember のソース行番号制御を修正する (Mar 24, 2001 / 442 bytes)
- GNU assembler (gas) では多くの C コンパイラと同じように
「# 123 "hoge.S"」のようなディレクティブによる
論理ソースファイル名・行番号の制御ができることになっていますが、
i386 など特定のコンフィギュレーションではこの機能が動作しません
(アセンブラのエラーなどが一時ファイルや標準入力について報告されてしまう)。
これを修正するパッチです。
Cプリプロセッサを併用してアセンブラでプログラムするときに便利です。
- gas のマニュアルでは、この機能自体は deprecated
とされています (私には便利なのですが…)。
- パッチは binutils 2.11.90.0.1 の gas に対するものですが、
変更点は2箇所 (3行追加するだけ) なので、他のバージョンにも
簡単に使えると思います (相変らずいい加減だ)。
- C のインラインアセンブラには効果はありません、念のため。
- binutils 2.12.1 省スペース化パッチ (Jun 09, 2002 / 13375 bytes)
- GNU Binutils の
ar と ranlib、
objcopy と strip
をそれぞれ一つの実行ファイルにまとめるパッチです。
これは現在の Binutils のリリースでは「封じ」られていますが、
もともと Binutils に含まれている機能です。
このパッチはそれを復活しているだけです。パッチを当てたら
./configure に --enable-single-binary
オプションをつけてコンパイルしてください。
数10KB (以上) のディスク容量が節約できます :-)
- 一つにまとめられた実行ファイルは、自身が呼び出された名前
(
argv0) に従って動作を変えるようになります。
したがって ar、ranlib、objcopy、
strip を別のファイル名にコピー・リネームしたりすると
正しく動作しないことがあります。
ちなみにこのようなプログラムの機能は
GNU Coding Standard
では推奨されていません。
- 上のパッチは Binutils 2.12.1 に対するもので、
configure スクリプトや Makefile.in
へのパッチが含まれます。これらが邪魔なとき
(他に変更を加えているとき、他のバージョンに当てるとき)
は Autoconf、Automake で生成されたファイルを含まないパッチ (Jun 09, 2002 / 2156 bytes)
をお試しください。ただし、このパッチを当ててコンパイルするときは
Automake 1.4-p5、 Autoconf 2.13 が必要です。
- Verilog HEX形式対応パッチ (Jun 18, 2002 / 10214 bytes)
- Cadence Design Systems
社の論理シミュレータ「Verilog-XL」の
$readmemh
システムタスクで読み込むことができる16進テキスト形式のファイルを
読み書きする機能を BFD ライブラリ (binutils
などで使われているバイナリファイルを読み書きするためのライブラリ)
に追加します。 BFD ターゲット名は vhex (= Verilog Hex)
なので、例えば
objcopy -O vhex file.bin file.hex
とすれば入力ファイル file.bin (実行可能ファイルなど) から
Verilog-XL で読める16進ファイル file.hex を生成できます。
なおこのターゲットでは1ワードは 8 ビットになります。
16/32/64ビットワード構成を使う機能、また逆に16進ファイルを読む機能の
ためのコードも一応入れていますが、あまり真面目にテストしていないので
特に注意してください。
雑多なパッチ
- GNU tar に librt を使わせないパッチ (Dec 30, 2002 / 1528 bytes)
- バージョン 1.13.12 以降の
GNU tar
では高精度の時間を得るために
clock_gettime
関数を使おうとします。この関数が libc に含まれていないシステム
(glibc ベースのシステムや Solaris など) では librt と
libposix4 を探して見つかればそれを用いるようですが、
たかだか転送レートの算出のためだけ (1.13.25 現在)
に余計な共有ライブラリに依存するのはあまり好ましくありません (と思う)。
そこでこれらの外部ライブラリを探さないようにするパッチです。
- パッチを当てたら autoconf を実行した後、
--without-librt をつけて
configure、コンパイルしてください。
clock_gettime が libc に含まれているシステム
(FreeBSD など) では効果がありません。