絶対ファイルパス名を含むパッチを適用するには?

絶対ファイルパス名を含むパッチを適用するには?

生成されたこのパッチを適用したいが、patchコマンドを使用するにはファイルパス名を指定する必要があります。

administrator@server:~$ diff -Nau /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/www.NEW.conf > ~/php8.1-fpm-www.conf.patch
administrator@server:~$ sudo patch -p0 < ~/php8.1-fpm-www.conf.patch
Ignoring potentially dangerous file name /etc/php/8.1/fpm/pool.d/www.conf
Ignoring potentially dangerous file name /etc/php/8.1/fpm/pool.d/www.NEW.conf
cant find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|--- /etc/php/8.1/fpm/pool.d/www.conf   2022-09-15 13:30:49.000000000 +0200
|+++ /etc/php/8.1/fpm/pool.d/www.NEW.conf       2022-11-07 16:40:35.555078608 +0100
--------------------------
File to patch: ^C
administrator@server:~$

答え1

最初のコンポーネントを削除し/てルートから始める必要があります。

cd /
sudo patch -p1 < ~/php8.1-fpm-www.conf.patch

GNUは、patch現在のディレクトリ(または指定されたディレクトリ)から始まるツリーの外側のファイル名を持つパッチコンテンツを-d安全ではないと見なします(参照:CVE-2010-4651)。相対パスを使用する方が良いです。パッチを他のコンテキストで使用できるように、可能であればパスを最小化することをお勧めします。あなたの場合は、実際にディレクトリを完全にスキップします。

(
  cd /etc/php/8.1/fpm/pool.d &&
    diff -u www.conf www.NEW.conf
) > ~/php8.1-fpm-www.conf.patch

関連情報