이곳이 이 질문을 하기에 가장 좋은 장소인지 잘 모르겠습니다. 더 좋은 장소가 있다면 올바른 방향을 알려주세요.
두 대의 컴퓨터가 있다고 가정해 보겠습니다. A는 개발 컴퓨터이고 B는 생산 컴퓨터입니다. A에는 소스 코드에서 소프트웨어를 구축하는 데 사용할 수 있는 컴파일러와 유사한 소프트웨어가 있지만 B에는 없습니다.
A에서는 일반적인 루틴에 따라 소스에서 소프트웨어를 쉽게 빌드할 수 있습니다.
./configure
make
그런 다음 를 실행하여 A에 빌드된 소프트웨어를 설치할 수 있습니다 sudo make install
. 하지만 제가 정말 하고 싶은 일은 B에 방금 구축한 소프트웨어를 설치하는 것입니다. 가장 좋은 접근 방식은 무엇입니까?
나는 다음 옵션을 고려했습니다.
- 패키지 관리자를 사용하여 B에 소프트웨어 설치: 패키지 관리자에서 사용할 수 있는 소프트웨어가 매우 오래되었기 때문에 이것은 나에게 옵션이 아닙니다.
- B에 컴파일러 및 기타 빌드 도구 설치: 다양한 제약으로 인해 프로덕션 시스템에 빌드 도구를 설치하고 싶지 않습니다.
- A에서 B로 바이너리 수동 복사: 이는 오류가 발생하기 쉬운 작업이므로 바이너리가 프로덕션 시스템에 일관된 방식으로 설치되었는지 확인하고 싶습니다.
- B 에만 설치하고
make
소스 디렉터리를 전송한 후sudo make install
B에서 실행: 이것은 지금까지 찾은 최고의 솔루션이지만 어떤 이유로(클럭 드리프트일 수도 있음)make
이미 있어야 할 소프트웨어를 다시 빌드하려고 시도합니다. 왜냐하면 실패하기 때문입니다. 빌드 도구가 B에 설치되지 않았습니다. 내 컴퓨터의 I/O 속도도 형편없기 때문에 원본 디렉터리를 전송하는 데 시간이 오래 걸립니다.
바이너리와 구성 파일을 설치하기 위해 전송 및 실행할 수 있는 빌드된 바이너리가 포함된 일종의 패키지를 만드는 방법이 있다면 좋을 것입니다. 그런 도구가 존재하나요?
답변1
지금까지 가지고 있는 것을 사용하여 Makefile이 GNU autotools를 사용하여 생성된 경우 다음을 설정합니다.대상 위치 또는 설치 경로그리고
./configure --prefix=/somewhere/else/than/the/usual/usr/local
그런 다음 실행
make && make install
마지막으로 접두사 폴더의 파일을 usr/
다른 컴퓨터의 폴더에 복사합니다. 이는 두 시스템이 동일한 아키텍처를 가지고 있다고 가정하고, 그렇지 않은 경우 해당 크로스 툴체인이 사용됩니다.
답변2
가장 깔끔한 방법은 운영 체제에서 사용하는 패키징 도구를 사용하여 애플리케이션용 패키지를 만든 다음 다른 프로그램처럼 설치하는 것입니다. 이를 수행하는 방법은 패키지 관리자 및 시스템에 따라 다르며 약간의 학습 곡선이 있습니다.
/opt/packagename
소스 패키지가 특정 하위 트리(예: 또는 )에 소프트웨어 설치를 지원하는 경우 /usr/local/packagename
수동 설치가 더 쉬울 수 있습니다. 한 시스템에서 컴파일하고 설치한 다음 하위 트리를 다른 시스템의 동일한 위치에 복사합니다. 이 디렉터리에는 모든 관련 파일만 포함되어야 합니다.
변경해야 하는 경우 /etc
해당 작업을 수동으로 수행해야 합니다. 또한 실제로 바이너리에 액세스하려면 해당 바이너리를 경로의 디렉터리에 심볼릭 링크하거나 bin
경로에 패키지 디렉터리를 추가해야 합니다. autoconf
/를 사용하는 대부분의 패키지는 매개변수를 스크립트 에 전달하여 설치 경로를 설정할 automake
수 있습니다 .--prefix
./configure
그럼에도 불구하고 컴파일된 애플리케이션에 필요한 라이브러리 등이 무엇인지 확인하고 두 시스템 모두에 호환 가능한 버전이 있는지 확인해야 합니다.