디렉토리 구조 이동 및 심볼릭 링크 유지

디렉토리 구조 이동 및 심볼릭 링크 유지

라이브러리가 잘못된 위치에 설치되는 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및 심볼릭 링크가 유지되지 않는 등의 사소한 문제가 발생했습니다 .

리눅스를 봐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

관련 정보