Sponsored Link
 戻る

410.RE[5]: パッチのあて方 その3

投稿者: ぴゅあ - 2003年12月09日 2時59分42秒

 長くなっちまったよ。。。。。。


 ・・・がそうなっていないという感じですよね。。。

 となるとman patchには前述のように書かれてはいますが
 RH9で使われている実際のpatchコマンドは
A.実は"-p"を指定しなかったときの例外の説明部分は実装されていない
B."./"で始まる場合は相対パスとすべきなのに絶対パスとして扱われてしまっている
 ("./src/filter.c"が"filter.c"とされてしまった)
 のどちらかかも知れないと言えるかもしれませんね(いちお思い浮かぶところでは)

 これを試してみるなら・・・
1.パッチファイル内の"./src/filter.c"とかを"/home/user/delegate8.8.2/src/filter.c"とする (全てのファイルに対して)
 (カレントディレクトリは何処にしても良い@4.ではない位置)
2."-p"または"-p0"を指定して実行してみる
3."-p"を全く指定しないで実行してみる
4."-p"を全く指定しないで実行してみるが"cd /home/user/delegate8.8.2/filters"を実行してから行う

 2は成功する筈です(既にやってあって過去ログにあるかも?メンドイから確認してないけど(照))
 3が成功するのは変です
 最初のファイルである"/home/user/delegate8.8.2/filters/cfi.c"は"cfi.c"として探す筈ですから
 3は失敗する筈です
 4は最初のファイルは成功して2番目のファイルで失敗する筈です
 "/home/user/delegate8.8.2/filters/cfi.c"は"cfi.c"とされる筈ですし
 その"cfi.c"があるディレクトリが"cd /home/user/delegate8.8.2/filters"によってカレントディレクトリにしてありますから
 2番目のはその上のディレクトリにあるsrcディレクトリ内にあるので見付けられずに失敗する筈ということです

 これにより"-p"を指定しなかった場合の例外条件以外について正しく動作したことが確認できます

 更に
 本当はこちらを先に試した方が楽かと思いますが(というよりこちらだけがやりたいかもだけど)
5.パッチファイル内の"./src/filter.c"とかは"./src/filter.c"のままとする(全てのファイルに対して)
6."-p"または"-p0"は既に成功すると結果が得られているとして
7."-p"を全く指定しないで実行してみるが"cd /home/user/delegate8.8.2"を実行してから行う

8.パッチファイル内の"./src/filter.c"とかは"src/filter.c"のままとする(全てのファイルに対して)
9.7と同様に"-p"を全く指定しないで実行してみるが"cd /home/user/delegate8.8.2"を実行してから行う

 man patchの通りだと7も9も成功する筈なのですが...
 7が失敗する場合は前述の例外部分のBであると考えられる
 9が失敗する場合は同様にAであると考えられる

 AとBを判別しようかと思っていたので(書いてる途中で無理かと思ったけど・・・できた)
 1〜4は不要だと後で思ったけどやるなら整理するための念のための実験として残しておきました
 いちおAとBを判別するだけなら5〜9だけやってみればいいでしょう

 そうそう
 一度実験してパッチが当った状態になった場合は元のファイルに戻しておかないとダメです
 パッチを当てて内容が変わってしまったファイルに更にパッチを当てることはできないというのは言うまでもなく解りますよね

 前に書いた"-C"オプションを指定してやるとパッチが成功するかチェックするだけで実際にパッチを当てることはしないのでいちいちオリジナルファイル に戻してやらなくても何度でも実験できるようになります

 実は"-C"オプションで"./src/filter.c"が実際に探そうとしたものとして 「"/home/user/delegate8.8.2/src/filter.c"である」とか表示されないかなぁ?と思っていたのですけど(だから最 初は付けてみれば?と書いておいたのでもある)コマンドとかを初めて使うときは必ず"-C"オプションのようなものを使ってまず実験するようにしているの で"-C"オプションを試したことがあるのは間違いないですがそのような表示が見られたかどうかはそこまで覚えてないので。。。

 まだ残ってるマシンは分解掃除しないとと思ったままでテストマシンとして(この前電源が焼けたままになってしまったマシンの変わりに(><))実験環境 を作るのは手間が掛かるのでこちらでも実験できればいいところですけどごめんなさいね。。。。

 こんなのでどうでしょうか
 この結果から何か判ってくるかも?
コメント>>

409.RE[5]: パッチのあて方 その2

投稿者: ぴゅあ - 2003年12月09日 2時53分43秒

(付記)
 一番最後の実験で「"./src/filter.c"と"src/filter.c"は同じこと」というのは解りましたよね?
 その証拠に#407の最後の2つはどちらも
(407)> patching file ./filters/cfi.c
 と 成功していることがどちらも出ているでしょう(あの「↑」は"./"の部分を指していますよね?)


★man patchから引用
-p[number], --strip[=number]
 パス名の除去カウント(strip count)を設定します。パッチ作成者と異な
 るディレクトリにファイルを置いている場合、パッチファイル中のパス名
 をどのように解釈するか、を指示します。除去カウントは、パス名の先頭
 から何個のスラッシュを除去するか、を指定するものです(その間にある
 ディレクトリ名も取り除かれます)。例えば、パッチファイル中のファイ
 ル名が
    /u/howard/src/blurfl/blurfl.c
 であった場合、-pあるいは-p0オプションを指定すると、パス名は全
 く修正されません。-p1を指定すると、最初のスラッシュがない
    u/howard/src/blurfl/blurfl.c
 となり、-p4を指定すると
    blurfl/blurfl.c
 、そして-pを全く指定しないと"blurfl.c"となります。ただし、その
 前のパス(u/howard/src/blurfl)が相対パスとして存在する場合は別で、
 その場合、パス名全体は無修正のままです。最後に、こうして得られた
 ファイルを、カレントディレクトリあるいは-dオプションで指定した
 ディレクトリ内で探します。


> 例えば、パッチファイル中のファイル名が
>  /u/howard/src/blurfl/blurfl.c
> であった場合、-pあるいは-p0オプションを指定すると、パス名は全く修正されません。

 これは"-p"(numberを省略すると"0"が指定されたものとして"-p0"と同じとして扱われる)或いは"-p0"を指定した場合
 /u/howard/src/blurfl/blurfl.c
 は
 /u/howard/src/blurfl/blurfl.c
 のままとなるということですね

 それはそれで問題なし
 今回使ったパッチファイルでは"./src/filter.c"となっているそのままということになりますね

> -p1を指定すると、最初のスラッシュがない
>  u/howard/src/blurfl/blurfl.c
> となり、-p4を指定すると
>  blurfl/blurfl.c

 "-p1"では
 /u/howard/src/blurfl/blurfl.c
 の最初(1個目)の"/"までが取り除かれるので
 u/howard/src/blurfl/blurfl.c
 とされる
 "-p4"では4個目までが取り除かれるので
 blurfl/blurfl.c
 とされる
 いちお同様に
 "-p2"の場合 howard/src/blurfl/blurfl.c
 "-p3"の場合 src/blurfl/blurfl.c
 "-p5"の場合 blurfl.c
 これもそのまま解りますよね

 今回の"./src/filter.c"は指定するなら"-p1","-p2"が指定できることになるので
 "-p1"の場合 src/filter.c
 "-p2"の場合 filter.c
 ということにもなります

> そして-pを全く指定しないと"blurfl.c"となります。

 さてここで問題になるのは"-p"を全く指定しないとき
 つまり
 /u/howard/src/blurfl/blurfl.c
 は
 blurfl.c
 とされるということです

 そうすると"./src/filter.c"は"filter.c"?ということにもなりそうですが・・・

 実は!

> ただし、その前のパス(u/howard/src/blurfl)が相対パスとして存在する場合は別で、
> その場合、パス名全体は無修正のままです。

 という例外の条件が含まれています

 つまり
 u/howard/src/blurfl/blurfl.c
 は
 u/howard/src/blurfl/blurfl.c
 のままであるということですが

 "./src/filter.c"の場合はどうなるのか
 これは先に書いたように"./"から始められているので「(カレントディレクトリからの)相対パス」です
 つまり「"-p"を全く指定しないとき」のその後ろに例外として書かれている「相対パスとして存在する場合」となります(そう読み取れます)
 従って./src/filter.c"のままである筈ということです

 つまり
 "/u/howard/src/blurfl/blurfl.c"の場合は"/"で始まっているので絶対パスである
 従って"-p"或いは"-p0"の場合と"-p"が指定されていない場合では
 "/u/howard/src/blurfl/blurfl.c"と"blurfl.c"のように変わってくるということですが
 "./src/filter.c"の場合は相対パスであるので
 "-p"或いは"-p0"の場合と"-p"が指定されていない場合のどちらであっても
 "./src/filter.c"である
 ということになります

 つまり今回のパッチファイルの場合では"-p"なし,"-p","-p0"全て同じになる筈ということです
コメント>>

408.RE[5]: パッチのあて方

投稿者: ぴゅあ - 2003年12月09日 1時46分00秒

 ぢゃあ man patchから引用してちゃんと書いてみてみます

 その前に。。。
> patching file ./src/filter.c
>        ↑
>   あれっ!!ここじゃないですか!?
> patching file src/filter.c
>         ↑
>         この違いじゃないでしょうか!?
 "./src/filter.c"(これは"/"で始まらないので相対パス)の"."は前に書いた通りカレントディレクトリを指すので
 カレントディレクトリが"/home/user/delegate8.8.2"となっている場合(pwdと打つとカレントディレクトリを確認できる @"print work directory"の略かな?)
> |--- ./filters/cfi.c Tue Dec 2 18:22:17 2003
 は
 "|--- /home/user/delegate8.8.2/filters/cfi.c Tue Dec 2 18:22:17 2003"
 と書いてあったと見なされます
 "-p1"を指定すると"./src/filter.c"は"/"1個目までが取り除かれて"src/filter.c"(これも"/"で始まらないの で相対パス)となりますが
 やはりカレントディレクトリが基準となるので
 "|--- /home/user/delegate8.8.2/filters/cfi.c Tue Dec 2 18:22:17 2003"
 と書いてあったと見なされます
 つまり最初の"./"はあってもなくても同じことになります

 ただし例えばlsとかのコマンドではまず環境変数PATHの中にあるかを探すので(デフォルトはカレントディレクトリは探すようになっていない)
 lsという(同じ)名前でカレントディレクトリに例えばシェルスクリプトファイルを作ったような場合には
 lsと打つとコマンドのlsが実行されますがカレントディレクトリにあるシェルスクリプトであるlsは実行されません
 カレントディレクトリにあるシェルスクリプトであるlsの方を実行したい場合には"./ls"と打つことになります
 それと環境変数PATH(実行できるプログラムがどのディレクトリにあるかを列挙してあるもの)にはデフォルトでカレントディレクトリが設定されていな いので
 例えばカレントディレクトリにシェルスクリプトabcというものを作ってそれを実行したい場合とかには常に頭に"./"を付けて"./abc"のように して実行するということにもなります

 "./"がカレントディレクトリを示すという点に付いては
・ls
・ls .
・ls ./
 を試してみれば同じ結果が得られるということで確認できるでしょう

 ここで一度締めとこお
コメント>>

407.RE[4]: パッチのあて方

投稿者: Pyzar - 2003年12月09日 0時33分05秒

>ぴゅあさん
レスありがとうございます。

> "patch -p0 < delegate8.8.2.diff"でできるということに付いては
> -p0"でできるからいいやでもいいと思う
> 自分なりのヘルプを書きたいならもっと調べてみるといいと思うけど

別にそんなつもりはないのですが…
やってみました…

[user@localhost user]$ cd delegate
[user@localhost delegate]$ tar xvjf delegate8.8.2.tar.bz2



[user@localhost delegate]$ ls
delegate8.8.2 delegate8.8.2.diff delegate8.8.2.tar.bz2
[user@localhost delegate]$ cd delegate8.8.2
[user@localhost delegate8.8.2]$ patch < ../delegate8.8.2.diff
can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -cr dist/delegate8.8.2/filters/cfi.c ./filters/cfi.c
|*** dist/delegate8.8.2/filters/cfi.c Sat Nov 29 16:59:41 2003
|--- ./filters/cfi.c Tue Dec 2 18:22:17 2003
--------------------------
File to patch:

となり…だめでした。


man patchからの引用ですが…

> /u/howard/src/blurfl/blurfl.c
>
> で あった場合、 -p あるいは -p0 オプションを指定すると、パス名は全
> く修正されません。 -p1 を指定すると、最初のスラッシュがない
>
> u/howard/src/blurfl/blurfl.c
>
> となり、 -p4 を指定すると
>
> blurfl/blurfl.c
>
>       、そして -p を全く指定しないと "blurfl.c" となります。ただし、その
> 前 のパス(u/howard/src/blurfl)が相対パスとして存在する場合は別で、
> その場合、パス名全体は無修正のままです。最後に、こうして得ら れ た
> ファ イ ルを、カレントディレクトリあるいは -d オプションで指定した
> ディレクトリ内で探します。

で、man patchを踏まえて…

[user@localhost delegate]$ ls
delegate8.8.2 delegate8.8.2.diff delegate8.8.2.tar.bz2
[user@localhost delegate]$ mv delegate8.8.2.diff delegate8.8.2/delegate8.8.2.diff
[user@localhost delegate]$ ls
delegate8.8.2 delegate8.8.2.tar.bz2
[user@localhost delegate]$ cd delegate8.8.2
[user@localhost delegate8.8.2]$ patch < delegate8.8.2.diff
can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -cr dist/delegate8.8.2/filters/cfi.c ./filters/cfi.c
|*** dist/delegate8.8.2/filters/cfi.c Sat Nov 29 16:59:41 2003
|--- ./filters/cfi.c Tue Dec 2 18:22:17 2003
--------------------------
File to patch:

[Ctrl]+[C]で停止

[user@localhost delegate8.8.2]$ patch -p < delegate8.8.2.diff
patch: option requires an argument -- p
patch: Try `patch --help' for more information.         # あれっ??
[user@localhost delegate8.8.2]$ patch -p0 < delegate8.8.2.diff
patching file ./filters/cfi.c
patching file ./src/cgi.c
patching file ./src/conf.c
patching file ./src/filter.c
       ↑
  あれっ!!ここじゃないですか!?

で…delegate8.8.2ディレクトリを削除…同じ状況に戻して…

[user@localhost delegate8.8.2]$ patch -p1 < delegate8.8.2.diff
patching file filters/cfi.c
patching file src/cgi.c
patching file src/conf.c
patching file src/filter.c
        ↑
        この違いじゃないでしょうか!?

カレントディレクトリを示す"./"を使用した時、"-p0"オプションを使わないと
カレントディレクトリとして扱わない…ということでしょうか
コメント>>

406.て

投稿者: ぴゅあ - 2003年12月08日 15時03分27秒

 朝起きてレスしとこおかなと思って以来・・・
 メルを2件程書いてたら3時かいっ!

 自分の思い込みが曲げらそうに思い込んだりして
 それを押し通そうと我を忘れて一方的に暴れまくる人も
 かなり増えてきているので・・・
 ホンのたった数行でも
 1時間とか非常に気を使って書かんと行かん時代になってしまって
 大変よね。。。
 無駄な時間ばっか費やしてるような気もするし(−−;
 それで暴れられなかった方が
 良かったと思ってしまっていいんだかどうだか(−−

 殆ど雲で埋まってるけど
 (この辺では6割くらいが雲でも日が照ってたら快晴らしいけど。。。?)
 ちと何処か(雲の上)に日がありそうに見えるうちに買い物行ってくるべきかな
 途中でまた降られそうな気もするけど。。。。。。。
コメント>>

405.RE[3]: パッチのあて方

投稿者: ぴゅあ - 2003年12月08日 14時53分07秒

 patchコマンド入ってるマシンがないので。。。。
 こうなるだろうというのだけ

$ ls
delegate8.8.2.tar.bz2 delegate8.8.2.diff
$ tar xvjf delegate8.8.2.tar.bz2 # delegate8.8.2というディレクトリができる
$ cd delegate8.8.2
$ patch < ../delegate8.8.2.diff

 でいいと思うけど

 "patch -p0 < delegate8.8.2.diff"でできるということに付いては
 "-p0"でできるからいいやでもいいと思う
 自分なりのヘルプを書きたいならもっと調べてみるといいと思うけど

 "-p0"を付けないとダメというのはなんでかな?と思うところだけど
 man patchに書かれていない部分もあったりするのかも?
 他の条件がありそうにも思えないけどあるのかな?
 "-d"オプションも使ってませんしね

 "-p0"を付けるかどうかは
 "--- ./filters/cfi.c Tue Dec 2 18:22:17 2003"の
 "./filters/cfi.c"の部分をどう見るかということの筈だと思うので
 ("/home/user/delegate/delegate8.8.2.diff"の部分をどう見るかということではないことは明白)
 "cd delegate8.8.2"でそこをカレントディレクトリとすればlsコマンドを打つと(例えば)filtesディレクトリがリストされている筈で
 "./filters/cfi.c"の先頭の"./"はカレントディレクトリを示すもの(カレントディレクトリからの相対パス("/"で始めていないか ら)でありカレントディレクトリの位置ということ)なので
 "delegate8.8.2.diff"の中身がそのままだったら"(なし)","-p0","-p1"共に同じことになる筈
 (前にも書いたように"-p1"では"./filters/cfi.c"が"filters/cfi.c"となるのでカレントディレクトリ内の filtersディレクトリ内のcfi.cファイルが対象となる)
 ので変?とも見える結果のようでもあるけど。。。。
 (前にNetBSDでやったことがあると書いたhttp://www.ayame.org(ネット上でより高速にデータ転送する試みというものだけど小 さな規模でも大きなビル内のネットワークとかでないと面白そうと興味を持っても普通には使い道なし/使えない)のものは"-p2"が指定されていたけど参 考になる記述は何処で見たのか・・・)

 なんでかな?
 "-p"オプションは付けといてよということなんかなぁ?
 Pyzarさんのレポート(手順)通りとするとそんな風でもあるけど
 まぁ取り敢えずは「"-p0"なりを付けるようにしておく」としたのでもいいと思うけど
 興味持ったならより追求してみてください
 manでは読み取れないこととか補足説明とかを見落としてるかもだけど
 検索してたりするとなんか見付かるかも?

> 398> ・・・
 そうでした
 そういう書き方を以前してましたね
 シッカリ忘れてた(照)
 プロンプトぢゃないよなぁと思いつつ・・・

> http://www.geocities.co.jp/SiliconValley-SantaClara/1792/guestbook1.html
> と返しちゃうので…
 前に「Referを削除してしまったのでいいのか?」というのがありましたよね
 レスしようと思ったまま他のことを書き過ぎて忘れてしまった気も(汗)

 まず「Referを削除してしまっていいのか」に付いてはそれはブラウザを使う人の自由
 削除したことによって好まない結果が得られたとしても文句を言わないとかの条件の元でですけどね
 初歩的なセキュリティ等の確保のためとかにReferを利用していることも多かったり、Referを簡易的な操作制御のための情報と使っていることも少 なくないのでアクセスできない・正しく表示されないということも多々あるでしょうけど
 質問の症状はその影響からくる一例と言えるでしょうね

 逆?の話としては
 本来ブラウザは適切なReferを提供すべきですけど
 ホントはリンクを辿ってきたのではないのに(リンクも張られていない)全く関係ない以前(たぶん直前に)見たサイトからリンクを辿って飛んできたように 見える場合も多々あるようです
 それがブラウザのバグによるものなのか(とにかく何かあると単純にバグだ!と騒ぎ立てたがる人も非常に多いですけど、これはあるならバグの種と言えるこ とでしょう)
 或いはその見たサイトの中でReferを埋め込むような細工をしているかも知れない・・・という可能性もないとは言えないと考えるのでブラウザの問題で あるとも言い切れませんけど

 ってのも多く目にしてきたものですね(実話としては殆ど挙がっていないと思うけど)

 兎も角はReferを削除したいということではなく正しく機能するようにしたいということだと思うので

1.Delegateの問題と考える前に何か関連する設定があるのか
 しかし"http://www.geocities.co.jp/SiliconValley- SantaClara/1792/guestbook1.html"からsubmitしているのだから当然referはそうなる筈ですよね
 ただDelegateを使わないあちしは全く問題がなさそうなのでDelegateが絡んでいる可能性はないとは言えないのかも?
 最近はたまにしか発生しないようなのであまり苦に感じることもありませんけど
 以前はブラウザのキャッシュ機能が邪魔をしてキャッシュ機能を切るようにしていたということもありました
 のでsquidを立ち上げりしたときもキャッシュ機能は使わなかったりしましたね
 それは別の問題と思いますけど

2.1以外でDelegateかも?と考えられるならDelegateに何か問題があるということもあるのでしょう

3.FORMを見てみましたけどactionてこんなに複雑?(いや長い?)と思うところがあります
 以前使っていた頃は(いやサポートが悪いので放ったままで触らないようにしているから・・・パスワードも忘れちったけど(照)ので今はどんなだろ?と確 認はしませんけど)
 レス機能もない簡単な投稿だけの機能のものでしたけど
 セキュリティ確保のためと称してこういう指定の仕方はしないというものでした
 それが間違っているから?ということも無きにしも非ず?という気もしています
 確かに訪問者全員に問題が出るというものでもなく何故か?というのは解り難かったりしたと記憶しています
 一度確認してみては?

> Refererの返し方が普通ノーマルだと…たとえばこのBBSだと
> http://www.geocities.co.jp/
> と返すと思うのですが
 は
 そうではなくて
> http://www.geocities.co.jp/SiliconValley-SantaClara/1792/guestbook1.html
 で合っています
 今見えているこのページで投稿ボタンを押したなら です
 問題が出るとするなら先のように
1.Delegateの動作が変
2.ブラウザの動作とかも絡むかも?
3.FORMのaction指定が合っているか
 辺りを見てみるといいかも知れませんね

 或いはReferのように思っているようで全然別のものかも知れません
 以前要らない情報を消すとかという話をしていたようにも思います
 Referに限らずそれら情報を要求するもの(サーバー)もあるので(クライアント側が消したいと思うのと同様にサーバー側では欲しいと思う)そのため にカキコできなくなっているとも十分に考えられます
 そういったことはブラウザ/掲示板に限らず適切に機能させるために要求されることは多々あります(提供できるようにしている)ので

 その辺も含めて確認してみては?


 さぶさぶねぇ
 今日も夕方のように暗いけど
 雨が降ったり霰が降ったり(豹ぢゃないって(謎爆))
 買い物行きたいけど行き辛いとこ。。。
 石油ファンヒーターも10度前後になると?あんま効かない感じね
 カーテンとか扇風機とか欲しいとこだけど・・・
 灯油運ぶのにパソ運搬用に使っているキャリー@980円だったかな?が
 見た目に珍しい!?ってのもありなのか
 灯油買いに行った(歩いて(><))GSで大好評だったのでした(笑)
コメント>>

404.RE2: パッチのあて方

投稿者: Pyzar - 2003年12月08日 0時40分38秒

>ぴゅあさん
レスありがとうございます。

> で うまくいったんかな?
うまくいきました。ありがとうございます。でも…
Refererの返し方が普通ノーマルだと…たとえばこのBBSだと
http://www.geocities.co.jp/
と返すと思うのですが
http://www.geocities.co.jp/SiliconValley-SantaClara/1792/guestbook1.html
と返しちゃうので…
この掲示板にカキコできません…
いちいちDelegateを切り替えないとだめみたいで…いまいち使い勝手が悪いです。

> > $ patch -p0 < delegate8.8.2.diff
>  以下と
> > 398>  can't find file to patch at input line 4
> 以下は別物??
> それともそういう風に現在出ている全メッセージなのかな?
> たぶん別物だと思うけど・・・(?)

別物です…このBBSの398に貼り付けたものなのですが…
この時に気づけばよかったかな…と

> patch < /home/user/delegate8.8.2.diff
これは何度も試したんですが、必ず聞いてくるんです…
File to patch:
って…

[user@localhost user]$ cd delegate
[user@localhost delegate]$ ls
delegate8.8.2.tar.bz2
[user@localhost delegate]$ tar xvjf delegate8.8.2.tar.bz2 # delegateを解凍



[user@localhost delegate]$ vi delegate8.8.2.diff        # パッチファイルの作成



[user@localhost delegate]$ ls
delegate8.8.2 delegate8.8.2.diff delegate8.8.2.tar.bz2
[user@localhost delegate]$ patch < /home/user/delegate/delegate8.8.2.diff # これがぴゅあさんの説明と同じやり方ですよね
can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|diff -cr dist/delegate8.8.2/filters/cfi.c ./filters/cfi.c
|*** dist/delegate8.8.2/filters/cfi.c Sat Nov 29 16:59:41 2003
|--- ./filters/cfi.c Tue Dec 2 18:22:17 2003
--------------------------
File to patch:

[Ctrl]+[C]で処理停止

[user@localhost delegate]$ patch < delegate8.8.2.diff # パスをつけないと…当然!!
can't find file to patch at input line 4
Perhaps ...
(略)
--------------------------
File to patch:

[Ctrl]+[C]で処理停止

[user@localhost delegate]$ mv delegate8.8.2.diff delegate8.8.2/delegate8.8.2.diff # パッチファイルを移動
[user@localhost delegate]$ cd delegate8.8.2 # パッチファイルを移動したディレクトリに移動
[user@localhost delegate8.8.2]$ patch < delegate8.8.2.diff # どうせだめと思いつつ…
can't find file to patch at input line 4
Perhaps ...
(略)
--------------------------
File to patch:

[Ctrl]+[C]で処理停止

[user@localhost delegate8.8.2]$ patch < /home/user/delegate/delegate8.8.2/delegate8.8.2.diff # パスを付けてみました…
can't find file to patch at input line 4
Perhaps ...
(略)
--------------------------
File to patch:

[Ctrl]+[C]で処理停止

[user@localhost delegate8.8.2]$ patch -p0 < delegate8.8.2.diff # 成功!! ぴゅあさんの解説通りです
patching file ./filters/cfi.c
patching file ./src/cgi.c
patching file ./src/conf.c
patching file ./src/filter.c

結局…「-p」オプションの意味はぴゅあさんに教えていただいたとおりで、わかったのですが

> patch < /home/user/delegate8.8.2.diff

これが出来ないので…苦しんでおります…
現状RedHat9.0…
rpmはすべてupdate済み
samba・cups・ntpdその他諸々すべて正常に動作していると思うのですが…
コメント>>

403.続き・・・

投稿者: ぴゅあ - 2003年12月07日 2時08分39秒

(溢れちまった。。。続けなくてもいいだろけど)

 UNIX/Linuxは非常に沢山のコマンドの集まりであったりする
 でも全て使う必要はない
 一生使わないで終わるコマンドも多数ある筈
 自分に使い易いコマンドがあったらそれを使えばいいし
 同じような機能でも人の好みによってどれかひとつを使えばいいような場合も良くある
 UNIX/Linuxのコマンドを覚える場合全てのコマンドがどういったものであるのかを知るのではなくて
1.まず使ったコマンドは詳しく調べてみる
2.使ったことのないコマンドは気が向いたらサラッと見てみる
3.使うこともないなと思ったらそのまま放っておいて(次にこんなコマンドがあった筈だから使えるかも?というときに思い出せる切欠になるだろう)
 これは使える!と思ったら(使ったら)詳しく調べてみる

 それで使ったコマンドだけマニュアルなりを作り進めていけば立派なマニュアルになるでしょうよ

 UNIX/Linuxの別の楽しみ方は
 コマンドの使い方のテクニック・・・というよりはトリックみたいな特殊な使い方を見つけ出すこと(発見(発明?)みたいなもの)
 既に歴史は長いから殆どが既に彼方此方で使われていたりするけど未だに生まれもする
 それができる自由度のあるOSでもあったりする
 それが「面白いと思い」「(Linuxを使うことに)楽しみを見つける」こと
 それがUNIX/Linuxにただ詳しいという人よりUNIX/Linuxを使う資格のある人とも言えるかも
 ある意味あちしの言うところのエリートエンジニアとかの教科書人間にはUNIX/Linuxを使う資格を得られる人はいないだろう
 いや いない
 このトリックとも言えるテクニックを見つける楽しみを得るためには教科書通りってのか教科書を読んで偉くなったと思うエリートに在りがちな(いや全て) 姿勢では絶対に得ることはできない
 「コンピュータに得意になるには遊ぶこと」
 それと同じようなことの言えるものよね
 (なんかご飯炊きつつ書こうと思ってたことは文章にできんかったけど・・・)

 楽しんでくだせぇ


 焼肉食べに連れて行かれたけど。。。。
 殆ど食べてないのでこれからご飯作るぢゃ
 明日は早朝から初の町内会みたいな掃除の日ぢゃ
 ・・・と普通にあるショッピングカートじゃあ使い難いから作ってくれ言われてるけど・・・(3日でとか言うちょるがっ(−−;)
 寝なきゃぢゃな
 おなかすいてるしまだだけど(汗)
コメント>>

402.RE: パッチのあて方

投稿者: ぴゅあ - 2003年12月07日 1時50分49秒

 さぶさぶ
 北海道でも雪がなくて大変らしいですけど
 ここでは毎週末には雪だとか言われてもいるけど全然その雰囲気なしです
 積もられたら身動き取れんくなるぞと脅されてるけど(−−;
 確かに自転車では?。。。
 しかし雨ばかりで身動き取りにくいのは同じようなもんだけど。。。

> # パッチファイルのファイル名・拡張子などは適当でもいいんじゃないかと
 ファイル名はなんでもいいです(後述:リダイレクト)

> $ patch -p0 < delegate8.8.2.diff
 以下と
> 398>  can't find file to patch at input line 4
 以下は別物??
 それともそういう風に現在出ている全メッセージなのかな?
 たぶん別物だと思うけど・・・(?)

> can't find file to patch
 「パッチを当てられるファイルが見付からん!」
 つまり
> --- ./filters/cfi.c Tue Dec 2 18:22:17 2003
 の行のファイル./filters/cfi.cが見付からんということね
> Perhaps you should have used the -p or --strip option?
 「-pオプションで対応できるかも知れんから-pオプションを確認してみたら?」
 というメッセージであったりもする(さっきman patchで確認したんだけど(照))

 で うまくいったんかな?
 いちお例を書いてみとこう
 注:実際にはやってなくて以前の記憶から書いてあるので正しくないかも

1.delegate8.8.2をダウンロード
2.パッチファイルを(メールにあるそのまま)/home/user/delegate8.8.2.diffとして作成
 (今回は違うと思うけど旧→新のバージョンが判っているときはxxxx_旧_新.diffとかいうファイル名だったりする@後で見たときの判り易さのた め)
3.ダウンロードしたdelegate8.8.2のソースコードファイルの書庫ファイルを/home/user/delegate8.8.2/ディレクト リ内に解凍
 (ここにfiltersディレクトリとかが見えるものと仮定する)
4.cd /home/user/delegate8.8.2
5.patch < /home/user/delegate8.8.2.diff

 ポイントはパッチを当てたいファイル群のあるディレクトリをカレントディレクトリとして他のディレクトリにあるdelegate8.8.2.diffを 読み込んでいる
 パッチを当てたいファイル群のあるディレクトリにパッチファイルdelegate8.8.2.diffを入れた場合はpatch < delegate8.8.2.diffでよい

★リダイレクト
 "patch < delegate8.8.2.diff"の"<"の記号はリダイレクトを示す
 これはMS-DOS時代にも同様の記号を使って使えた(WinでもDOSプロンプト(Win9x系)/コマンドプロンプト(WinNT系)を立ち上げて その中で使うことができる)
 リダイレクトの"<"の記号はファイルからの入力と考えればいい
 ">"を使うとファイルへの出力となったりする
 例えば
 echo hello > message.txt
 とかするとエディタでmessage.txtというファイルを新規で作って"hello"と打ち込んだテキストファイルを作ったのと同じことになる
 "echo hello"とすると画面に"hello"と表示される筈
 echoコマンドは画面(標準出力)に引数で渡された文字列を表示する
 リダイレクトの">"の記号は標準出力に出力する代わりにファイルmessage.txtに出力する(書き出す)/リダイレクトするので message.txtに"hello"という文字列を書き込んだことになる
※echoコマンドは例えばシェルスクリプトの中で処理の途中経過をログに残すためのログファイルへのメッセージ出力に使われたりもする

 リダイレクトの"<"の記号は標準入力(キーボード)からの入力の代わりにファイルから入力する(リダイレクトする)ための機能なので
 patch < delegate8.8.2.diff
 ファイルdelegate8.8.2.diffの中身をキーボードから打ち込む代わりにファイルからパッチデータをpatchコマンドに送り込む機能と なる
 ということ

 つまり「名前は何でもいいただのテキストファイル」から読み込んでいるだけのことなのでパッチファイルの名前はdelegate8.8.2.diffで なくてもなんでもいいということ
 ただこのパッチデータはdiffコマンドを使って作られている(筈)ので拡張子はdiffコマンドでデフォルトの.diffとしておくと判り易いだろう
 またファイル名部分のdelegate8.8.2の部分も直ぐに削除してしまうなら(拡張子の.diffも)何でもいいだろう
 しかし直ぐに削除するつもりでそのまま残したままだった・・・ということもよくあることなのでどんなファイルを作るときも意味のある(後で判る)ファイ ル名を付けるようにする癖を付けておくと後で要らなくなったファイルを整理しようと思ったときに随分楽な筈よ

 man patchのオプションの説明に入る前の一連の説明にざっと目を通しておくといいかも
 リダイレクトに関することは
# patchfile が指定されない場合やハイフンである場合、パッチは標準入力から
# 読み込まれます。
 という形でも説明されていたりする

★-p0の意味
 patchコマンドは
> *** dist/delegate*.*.*/filters/cfi.c Sat Nov 29 16:59:41 2003
 の行は無視して
> --- ./filters/cfi.c Tue Dec 2 18:22:17 2003
 の行でどのファイルにパッチを当てるか見ている筈(たぶん)
 -pオプションがどうなるかはman patchで直ぐに解るでしょう
 実はdelegate8.8.2.diffの場合では-pオプションは意味を持たない筈なので-p0は関係ない筈
 (最初man patchで再確認するまではdiffから作られるパッチファイルには複数の形式があった気はしてたからそれのためのオプションだったかな?と思ったんだ けど)

 ここでの例のために
> *** dist/delegate*.*.*/filters/cfi.c Sat Nov 29 16:59:41 2003
> --- /src/delegate*.*.*/filters/cfi.c Tue Dec 2 18:22:17 2003
 となっていたと仮定しておくと

 -p0の場合"/src/delegate*.*.*/filters/cfi.c"はそのまま "/src/delegate*.*.*/filters/cfi.c"として/src/delegate*.*.*/filters/ディレクトリにあ るcfi.cファイルにパッチが当てられることになる
 このcfi.cファイルが見つけられない(/src/delegate*.*.*/filters/ディレクトリ内にない)場合には
> 398>  can't find file to patch at input line 4
 以下のメッセージが出るでしょう(ほぼ間違いなくこれで正しい筈)

 -p1の場合は1個目の"/"を取り除くので"src/delegate*.*.*/filters/cfi.c"が書かれていたと見なして
 また"src/..."は相対パスなのでカレントディレクトリ内のsrcディレクトリ以下に対象のファイルがあるものとして処理しようとする

 -p2の場合は同様に2個の"/"を取り除くので"delegate*.*.*/filters/cfi.c"となる

 以下
 -p3なら"delegate*.*.*/filters/cfi.c"
 -p4なら"filters/cfi.c"
 -p5なら"cfi.c"
 といった具合

 ただし相対パスで書かれていた場合は(今回のは"./filters/cfi.c"なので("/"で始まっていない)相対パス)-pオプションを指定し ても意味を成さない(-pオプションは無視される)とman patchにあるので"-p0"は指定しても意味を持たないということ
 man patchの-pオプションの説明の最後の部分に次のように書かれていた
# ただし、その前のパス(u/howard/src/blurfl)が相対パスとして存在する場合は別で、
# その場合、パス名全体は無修正のままです。

 そして
# 最後に、こうして得られた
# ファイルを、カレントディレクトリあるいは-dオプションで指定した
# ディレクトリ内で探します。
 とある

 これは前述の
4.cd /home/user/delegate8.8.2
 をパッチファイルのあるディレクトリをカレントディレクトリとした・・・即ち
4.cd /home/user
 とした場合には
 patch -d /home/user/delegate8.8.2 < delegate8.8.2
 或いは
 patch -d delegate8.8.2 < delegate8.8.2
 (/home/userディレクトリの下のdegate8.8.2ディレクトリ内に対象となるソースコードファイル群が存在するので)
 とすればいいということ
 この辺は最初のうちは(ディレクトリの扱いに慣れるまでは)ややこしいかもしれないので最初に示した1〜5のステップを理解したので十分

 どうかな
 少しは解ったかなぁ?
コメント>>

401.パッチのあて方……とりあえず訂正

投稿者: Pyzar - 2003年12月06日 15時58分32秒

パッチのあて方間違えてました(:_;)

/home/user/delegate8.8.2/ディレクトリにパッチファイルを作成。
このパッチファイルの内容は変更しません!!

# パッチファイルのファイル名・拡張子などは適当でもいいんじゃないかと
# ふと今思ったのですが…これは後で…

とりあえず、今回はファイル名をdelegate8.8.2.diffとしました。
で、以下のとおり…でした。

$ patch -p0 < delegate8.8.2.diff
patching file ./filters/cfi.c
patching file ./src/cgi.c
patching file ./src/conf.c
patching file ./src/filter.c

398>  can't find file to patch at input line 4
398>  Perhaps you should have used the -p or --strip option?
398>  The text leading up to this was:
398>  --------------------------
398>  |diff -cr /home/usr/delegate*.*.*/filters/cfi.c ./filters/cfi.c
398>  |*** dist/delegate*.*.*/filters/cfi.c Sat Nov 29 16:59:41 2003
398>  |--- ./filters/cfi.c Tue Dec 2 18:22:17 2003
398>  --------------------------
398>  File to patch:

ここで…気づくべきでした…

# で、"-p0"の意味は?…それもこれからなのですが…

とりあえずってことで…m(_ _)m
コメント>>


 トップへ