ライブラリが間違った場所にインストールされるmakefileの問題を解決しようとしています。メイクファイルは他の人が作成したものなので、修正するのは簡単ではありません。ライブラリをインストールした後に移動しようとしています。インストールには、BSD、Linux、およびSolarisへの権限、シンボリックリンクが含まれます。
prefix
of/usr/local
とlibdir
ofが与えられると、/usr/local/lib/64/
makefileはアーティファクトを絶対パスとして扱うのではなく、libdir
下に置きます。以下は継続的な複製の一部です。prefix
libdir
cp libcrypto.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libcrypto.pc
cp libssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/libssl.pc
cp openssl.pc /usr/local//usr/local/lib/64/pkgconfig
chmod 644 /usr/local//usr/local/lib/64/pkgconfig/openssl.pc
/usr/local//usr/local/*
アーティファクトツリー全体を手に入れて移動するのは比較的簡単だと思いましたが、/usr/local
思ったよりも難しかったです。
以下を含むディレクトリの移動に関するいくつかの提案を試しました。mvコマンドですべてのファイルとフォルダを移動する方法そしてLinuxでファイルとフォルダを再帰的に移動する。それぞれ、再配置/usr/local/lib/64/64/pkgconfig/openssl.pc
やシンボリックリンクが維持されないなどのマイナーな問題が発生しました。
Linuxを見てmv(1)
マニュアルページでは、ディレクトリ内の権限とシンボリックリンクが保存されるという保証があるかどうかはわかりません。フォシックスmv
このコマンドは権限について少し説明しますが、これはターゲットディレクトリに書き込むことに関連しています。
また、パスコンポーネントを削除しようとしましたが、${filename:$prefix}
シンボリックリンクに問題が発生しました。${filename:$prefix}
おそらくPosixではありませんが、Bashがあります。
私の質問は、これをBSD、Linux、OS X、およびSolarisに移植できるかどうかです。それでは、どうすればいいですか?
私が一緒に投げたコードは次のとおりです。しかし、間違っているようです。
# Fix OpenSSL's broken directory structure
path="$PREFIX/$LIBDIR"
while [ $(echo "$path" | cut -c1-3) != "lib" ]
do
echo "PATH: $path"
path=${path#*/}
done
echo "PATH: $path"
出力は次のとおりです。
PATH: /usr/local//usr/local/lib/64
PATH: usr/local//usr/local/lib/64
PATH: local//usr/local/lib/64
PATH: /usr/local/lib/64
PATH: usr/local/lib/64
PATH: local/lib/64
PATH: lib/64
以下は:
cd "$PREFIX/$PREFIX"
mv "$path" "$PREFIX"
rm -rf "$PREFIX/$PREFIX"
答え1
私の提案はそのままにして、/usr/local/lib/
そのディレクトリへのリンク内にリンクを作成することです/usr/local/lib/64/
。
たとえば、
$ tree usr/
usr/
└── local
├── lib
│ └── 64 -> ../usr/local/lib/64
└── usr
└── local
└── lib
└── 64
└── pkgconfig
これが私がする方法です:
$ cd /usr/local/lib/
$ ln -s ../usr/local/lib/64 64
これはツリーをある程度正規化することで機能します。
$ ls usr/local/lib/64/
pkgconfig