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