私のものではない上流のソースコードからdebianパッケージを作成しようとしています。著者が提供するconfigure
スクリプトは、ソースディレクトリに多くのシンボリックリンクを作成します。それらは、src
subdirからinclude
subdirへのすべてのヘッダーへのシンボリックリンクです(そのため、makefileは開発パッケージをインストールする場合にinclude
ディレクトリを簡単にコピーできます)。 debhelper
スクリプトを使用してパッケージを作成しています。
debhelper
スクリプトを使用してパッケージを作成しています。問題は新しいdebianパッケージ形式(quilt 3.0 native
)を使用しているため、debuild
は最終のdiff
ファイルへのシンボリックリンクから成るソースディレクトリの変更を拒否します。次のようなエラーが表示されます。
dpkg-source: error: cannot represent change to foo.h:
dpkg-source: error: new version is symlink to /ba/foo/foo.h
dpkg-source: error: old version is nonexistent
私は良い解決策を知っています:ヘッダーをまったくシンボリックリンクしないようにconfigureスクリプトを変更します。 makefile
にターゲットを追加して、devel
パッケージをインストールする必要があります。 configureスクリプトには著作権の問題がありますが。上流のソースに触れることはできません。
ディレクトリ内のすべてのシンボリックリンクを、それらが指す実際のファイルで置き換えるbashスクリプトを探しています。たとえば、ディレクトリd
に3つのファイルa
とb
とc
があり、それらが../../foo/bar/x
、../../foo/bar/z
../../foo/bar/y
、最初の引数としてmagic.sh
を指定する目的のスクリプト(たとえば./d
)を実行し、
cp ../../foo/bar/x ./d/a
cp ../../foo/bar/y ./d/b
cp ../../foo/bar/z ./d/c
どのファイルが指すシンボリックリンクであるかを知る方法が見つかりません。
readlink
を使用します。
$ readlink /etc/alternatives/editor
/usr/bin/vim.basic
ディレクトリ内のシンボリックリンク上を歩くシェルスクリプトでラップします。
find
を使用してシンボリックリンクを検索できます。
$ find . -type l
より完全な例:
#!/bin/bash
find . -maxdepth 1 -type l | while read LINE; do
echo link: $LINE resolved: `readlink $LINE`
done
出力
link: ./.remmina resolved: sparkleshare-homedir/remmina
link: ./project resolved: Documents/2011-2 Project/
link: ./.ssh resolved: sparkleshare-homedir/ssh