nDiki : patch

patch - パッチ

diff の結果をオリジナルのファイルに適用するプログラム。

2001年10月1日 (月)

13:40 w3m インライン画像 patch

遅ればせながら w3m インラインパッチを試してみる(今まで個人的に需要がなかったので)。 UTF-8 を w3m で読むためののマルチリンガル化ということでこの URL を教えてもらったのだけれども、なぜか画像 patch の方を先に。

Debian GNU/Linux Box に imlib-dev がまだ入ってなかったのでこれを apt-get してから

 tar zxvf w3m-0.2.1.tar.gz
 cd w3m-0.2.1
 patch -p1 < ../w3m-0.2.1-img-1.10.patch
 ./configure --prefix=/usr/local/w3m-0.2.1-img-1.10
 make install

おっ、絵が出た。

15:20 画像の位置を調整

なんか画像がズレているけどこんなものなのかなと思ったら、オプションセッティングパネルで文字幅、一行の高さを設定する必要があったのであった。 kterm でナガ10(naga10)を利用しているので文字幅5、高さ10にしたらバッチリ。スバラシイ。

[ 10月1日全て ]

2003年8月3日 (日)

[ Debian ] Gaim 0.66

yaz さんの gaim-0.66_jp2.patch.gz をあててビルドしてみた。 残念ながら起動するとすぐ落ちる。

[ 8月3日全て ]

2004年6月5日 (土)

Cache::Memcached 1.13 の Perl 5.005_03 対応

WiKicker で使用しているキャッシュシステム Memcached 用の Perl API Cache::Memcached が新しくなっていたので、入れ換え。

1月に入れた時と同様、Perl 5.005_03 ではそのまま動かないので一部を修正。 前回はCVSスナップショット(Memcached.pm revision 1.8)に対する修正だったので手元で修正しただけだったが、今回はパッチも作っておく。

修正点は

  • our を使わないようにする。
  • fields::new を代替コードに。
  • IO::Handl::blocking を代替コードに。
  • use bytes を使わないようにする。

といったところ(WiKicker で使っているところのみ修正)。

以前は Use of uninitialized value がかなり出ていたのだが、 Cache::Memcached のコード自体が綺麗になったのかこれらも出なくなっていい感じ。

パッチ作り

[ diff / patch ]

そういえばパッチなんて滅多に作らないな。Cache::Memcached のパッチを作った時の手順をメモしておく。 公開する場合のパッチの作り方はこんな感じでOK?

 --- 作成
 tar zxvf Cache-Memcached-1.13.tar.gz
 cp -a Cache-Memcached-1.13 Cache-Memcached-1.13.orig
 emacs Cache-Memcached-1.13/Memcached.pm
 diff -ur Cache-Memcached-1.13.orig Cache-Memcached-1.13 > Cache-Memcached-1.13-5.005_03-20040605.diff
 --- patch する時
 tar zxvf Cache-Memcached-1.13.tar.gz
 patch -p0 < /tmp/Cache-Memcached-1.13-5.005_03-20040605.diff
[ 6月5日全て ]

2004年7月31日 (土)

Cache::Memcached 1.14 の Perl 5.005_03 対応

1.14 が 7月27日にリリースされていたのでパッチ作成。 1.13 用のパッチがあたったのでそのままいけるかなと思ったが、テストしたところまたいくつかの非互換コードが増えていたのでそれらの修正を行う。

 tar zxvf Cache-Memcached-1.14.tar.gz
 cp -a Cache-Memcached-1.14 Cache-Memcached-1.14.orig
 patch -d Cache-Memcached-1.14 -p1 \
   < Cache-Memcached-1.13-5.005_03-20040605.diff
 find Cache-Memcached-1.14 -name '*.orig' -exec rm {} ';'
 emacs Cache-Memcached-1.14/Memcached.pm
 LC_ALL=C TZ=UTC0 diff -Naur \
   Cache-Memcached-1.14.orig Cache-Memcached-1.14 \
   > Cache-Memcached-1.14-5.005_03-20040731.diff

新規修正点は

  • Socket モジュールでのインポートで IPPROTO_TCP が追加になったところが実験環境でエラー。コードの中では利用していないので削除。
  • ChangeLog 中の下記のため @+ を使うようになったようだが、5.005_03 では定義されていないのでエラー(perl.*delta のどこにものっていないのでチェックに苦労。perlretut に言及があって Perl 5.6.0 から提供されるようになった事を確認)。Cache::Memcached 1.13 で行っている pos を使った処理に戻す。
 2004-07-19
         * don't use pos() because it doesn't seem to work in
           taint mode.  use $+[0] instead.  (Dave Evans <..@djce.org.uk>)

それからパッチの作り方を変更。patch の man の通り LC_ALL=C TZ=UTC0 にするのとオプションを -Naur を使うように。

また 1.14 から String::CRC32 が必要になった。

[ 7月31日全て ]

2005年2月17日 (木)

別の人の作業ファイルをCVSにマージ

都合によってCVS リポジトリにアクセスできないところにいるチームメンバから、変更した作業ファイルを送ってもらった。

さて。

どうするか。

変更元リビジョンがわかっているもの

ファイルに $Id$ などが含まれていてどのリビジョンに対して変更したのかが簡単にわかるものは diff をとって patch をあてるか。 自分の作業ディレクトリとは別にもう一つ作業ディレクトリをチェックアウトして、そこに変更されている作業ファイルを上書きコピー。

 cvs diff -r リビジョン -au ファイル名 | patch /path/to/my/working/dir/ファイル名

で自分の作業ファイルにマージ。

変更元リビジョンがわかっていないもの

とりあえず HEAD と diff してみて問題なさそうならそのままマージ。

やっぱりリビジョン番号を埋め込んでおいた方が便利やね。

[ 2月17日全て ]

2006年2月7日 (火)

Docutils 0.4 の日本語文字対応はまだまだ駄目

reStructuredText 形式の parse が失敗するようになったと思ったら、Docutils のパッケージが upstream の 0.4 に追従してバージョンが上がっていた。

Release Notes に

Added Japanese and Simplified Chinese language mappings, and support for double-width CJK-characters in tables and section titles.

とあって期待したのだが、試してみたところまだまだ駄目っぽい。

0.3.9 に戻して 以前入れた時と同様 patch をあて、元の環境に戻す。

今後に期待。

[ 2月7日全て ]

2007年12月23日 (日)

Debian Linux kernel 2.6.23 をビルドする。

ThinkPad X31 に入れている Debian GNU/Linux sidLinux kernel を随分アップデートしていなかった(2.6.17 を使用中)。 今日 aufs を入れついでに、一緒に最新(2.6.23)をビルドすることにした。 Debian kernel パッケージ構築は去年の8月以来。

今回は linux-patch-aufs を入れておいて、aufs 用のパッチを当てる。

 #apt-get build-dep linux-image-2.6.23-1-686
 #apt-get install linux-source-2.6.23 linux-patch-aufs
 #exit
 $mkdir -p /usr/local/src/linux
 $cd /usr/local/src/linux

 $tar jxvf /usr/src/linux-source-2.6.23.tar.bz2
 $cd linux-source-2.6.23
 $make menuconfig
 $make-kpkg clean

 $fakeroot make-kpkg --added-patches put_filp,lhash,splice,ksize,sysfs_get_dentry --revision=sebastian.1.0 kernel_image
 $cd ..
 $su
 #dpkg -i linux-image-2.6.23_sebastian.1.0_i386.deb

パッチが一部 2.6.22 用で 2.6.23 には当たらなかったが、よしとしておく。 ここで再起動。次に MADWIFIaufs をインストール。

 module-assistant prepare
 module-assistant auto-install madwifi
 module-assistant auto-install aufs

いつも入れている shfs も同様に入れようと思ったがこちらはコンパイルエラー。 頻繁に使うわけではないので、とりあえずほっておくことにする。

コンパイルが面倒なのでそろそろ Debian 公式のを使おうかと思ったが、試してみたところ

ということ NG。 やはり自前でビルドしなければならないことを再確認。

[ 12月23日全て ]

2012年2月23日 (木)

今日のさえずり: ガチャピンが人を食べるという話が通じなかったので

2012年02月22日

  • 09:06 今日からマスク
  • 09:36 フレッシュ! (有給休暇明け) @ 株式会社ミクシィ(mixi, Inc.)にタッチ! http://t.co/7sn66iYo
  • 09:44 有給休暇明けたらミーティング += 3 実行されてた。
  • 10:44 Git 上から Subversion 上にうまく差分をもっていけなくて patch った。
  • 13:08 ローソンの「大きないちごジャム&マーガリンサンド 110円」のコストパフォーマンスが高くて愛食。
  • 18:52 ガチャピンが人を食べるという話が通じなかったので、そろそろ社内 LT に行く。
  • 19:07 「フレッドが教えてくれた仕事でいちばん大切なこと」絶版だった……。
  • 19:23 Opera 宣教師キタ!
  • 20:06 @mushikabu さんも人を食べるんですか!
  • 20:11 SpinNet が「SNSレッスンパック」を本日より提供開始だと。7,560円(税込み)/1時間。
  • 20:16 部長推薦図書注文。
  • 22:16 @yuzuemon 社内イイネ! 1号です!
  • 22:29 退勤。包丁には注意するよ。
  • 22:44 いきなりマスク会社に忘れてきた。息止めて帰る。

2012年02月23日

  • 06:54 RT @yuzuemon: 貰った身としては、自分の活動が形として評価されると次への大きな活力となる。早速自分も始めよう nDiki: イケてることに敏感になる「リアル イイネ! カード」を自作した(非公式) http://t.co/PNUWsk0t via @Naney
  • 09:49 雨雨。 @ 株式会社ミクシィ(mixi, Inc.)にタッチ! http://t.co/63yPZZfb
  • 11:46 ちょい早弁。
  • 22:17 \Q退勤\E
  • 22:29 今日は mixi バースデーバースデーです。
  • 24:41 Evernote の共有ノートブックで暮らすのはやはりかなり不便だったので、もうすこし分けることにした。
[ 2月23日全て ]

2015年7月24日 (金)

Homebrew で IME インラインパッチを当てた Emacs 24.5.1 を入れる

OS XHomebrew でインストールした Emacs をしばらく使ってみて IME インラインパッチなるものがないと辛いということがよくわかりました。

今は Homebrew の emacs formula では IME インラインパッチが当たらなくなっているので自分で当ててインストールしなおしました。

パッチは @takaxp 氏の

を使いました。感謝。まずはパッチファイルを取得。

 $ mkdir ~/tmp
 $ cd ~/tmp
 $ git clone git@gist.github.com:1d91107b311b63b57529.git

次に emacs formula を書き換えます。

 $ brew update
 $ brew edit emacs

で起動したエディタで先頭の方に patch 処理と AutoconfAutomake への依存情報を追加します(/Users/naney は私の HOME ディレクトリ)。

 class Emacs < Formula
   desc "GNU Emacs text editor"
   homepage "https://www.gnu.org/software/emacs/"
   url "http://ftpmirror.gnu.org/emacs/emacs-24.5.tar.xz"
   mirror "https://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz"
   sha256 "dd47d71dd2a526cf6b47cb49af793ec2e26af69a0951cc40e43ae290eacfc34e"

   # ここから追加
   patch :p1 do
     url "file:///Users/naney/tmp/1d91107b311b63b57529/emacs-24.5-inline.patch"
   end

   depends_on "autoconf" => :build
   depends_on "automake" => :build
   # ここまで追加

   bottle do
   ...

保存したらあとは Emacs をアンインストールし、書き換えた fomula で再度 Emacs をインストール。

 $ brew uninstall emacs
 $ brew install --with-cocoa --with-gnutls --verbose emacs

やっほー。これで「Google 日本語入力で平仮名入力になっている時に C-x C-f と打ったらカレントバッファに変な文字が入力されてる!」なんていうのが無くなりました。快適です。

[ 7月24日全て ]

2021年1月5日 (火)

最近の Unisonビルドする

双方向ファイル同期化ツール Unison File Synchronizer、 Mac で使っているのが Unison 2.48.6 の GUI 版なのだけれど、古いせいか macOS Catalina だと「Install command-line tool」 が機能しない(/usr/bin にインストールしようとしているからかな)。

macOS 上で text UI 版がちょっと使いたい & GUI 版も新しいのにしたいなと思ってビルドとかした。

現在の Unison のバージョン

2021年01月05日時点での安定版は 2.51.3

Homebrew で入れる

 $ brew install unison

で text UI 版の「unison version 2.51.3 (ocaml 4.10.0)」が入る。GUI 版は入らない。

macOS Catalina 上でビルドする

Unison 最新版のバイナリ配布が見当たらないのでビルドしてみる。 Xcode が必要。

 $ xcode-select --install

で入る Command Line Tools だけだと text UI 版の Unison しかビルドできないので App Store から Xcode をインストールした。

OCaml は Homebrew ので済ます。

 $ brew install ocaml

今日時点で入るのは OCaml 4.10.0 だ。次に Unison 2.51.3 をビルドする。

 $ cd ~/tmp
 $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz
 $ tar zxvf v2.51.3.tar.gz
 $ cd unison-2.51.3
 $ make all

make だけだと text UI 版しかビルドされないので make all してみた。が残念 GUI 版はエラーで途中で止まった。今はうまくビルドできないのかもしれない。

諦めて make で text UI 版だけバイナリを得ることにした。 make 後

 $ ./src/unison -version

で実行できることを確認。 ./src/unison を適当なところにコピーしておく(これなら brew install unison で十分だった)。

FreeBSD 上でビルド

ローカルホストの Unison とリモートホストの Unison のバージョンが合っていないと同期できないのでリモートホスト側 (FreeBSD 9.1-RELEASE-p24) でも同じバージョンのものをビルドする。さくらのレンタルサーバ プレミアムで root 権限はないのでユーザー権限にて。

まずは OCaml。最近の OCaml は opam というのでインストールして使うのが流儀らしい。 opam をインストール。

 $ cd ~/tmp
 $ mkdir bin
 $ curl -OL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh
 $ BINDIR=$HOME/tmp/bin sh install.sh

リモートホストの環境に合ったプレビルドが無いとエラーが出て install.sh ではインストールできず。

OCaml の前に遡って opam のビルドをする。

 $ cd ~/tmp
 $ curl -OL https://github.com/ocaml/opam/archive/2.0.7.tar.gz
 $ tar zxvf 2.0.7
 $ cd opam-2.0.7
 $ gmake cold CONFIGURE_ARGS="--prefix ~/tmp/opam"
 $ gmake cold-install

ビルドできた。opam を初期化する。

 $ PATH=$HOME/tmp/opam/bin:$PATH
 $ opam init

gpatch が無いとエラーで止まった。 patch へのシンボリックリンクで gpatch を作ってイケるかなと思ったけど今度は別のエラーで止まる。うーん。 opam で OCaml をインストールするのは断念。

OCaml のドキュメントを読んだら今まで通り configure して make も普通にできるじゃない。

 $ curl -OL https://github.com/ocaml/ocaml/archive/4.10.0.tar.gz
 $ tar zxvf 4.10.0.tar.gz
 $ cd ocaml-4.10.0
 $ ./configure --prefix $HOME/tmp
 $ gmake
 $ gmake install

次に Unison 2.51.3 をビルドする。出来上がったバイナリは今使っている Unison 2.48.3 と併用できるように別のディレクトリへ。

 $ cd ~/tmp
 $ curl -OL https://github.com/bcpierce00/unison/archive/v2.51.3.tar.gz
 $ tar zxvf v2.51.3.tar.gz
 $ cd unison-2.51.3
 $ PATH=$PATH:$HOME/tmp/bin
 $ gmake
 $ ./unison -version
 $ mkdir -p $HOME/local/unison-2.51.3/bin
 $ cp -a src/unison $HOME/local/unison-2.51.3/bin

サイト

[ 1月5日全て ]

About

Naney Naneymx

Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。

※本サイトの内容は個人的見解であり所属組織とは関係ありません。

Process Time: 0.024585s / load averages: 0.43, 0.32, 0.27