ディレクトリ構造の移動とシンボリックリンクの維持

ディレクトリ構造の移動とシンボリックリンクの維持

ライブラリが間違った場所にインストールされるmakefileの問題を解決しようとしています。メイクファイルは他の人が作成したものなので、修正するのは簡単ではありません。ライブラリをインストールした後に移動しようとしています。インストールには、BSD、Linux、およびSolarisへの権限、シンボリックリンクが含まれます。

prefixof/usr/locallibdirofが与えられると、/usr/local/lib/64/makefileはアーティファクトを絶対パスとして扱うのではなく、libdir下に置きます。以下は継続的な複製の一部です。prefixlibdir

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

おすすめ記事