Development Tip

Linux 바이너리 설치 프로그램 (.bin, .sh)은 어떻게 작동합니까?

yourdevel 2020. 11. 26. 19:55
반응형

Linux 바이너리 설치 프로그램 (.bin, .sh)은 어떻게 작동합니까?


일부 소프트웨어 (예 : NetBeans IDE )는 Linux 설치 프로그램을 .sh 파일로 제공합니다. 전체 IDE를 '쉘 스크립트'로 정확히 '패키징'하는 방법이 궁금해서 편집기에서 파일을 열었습니다. 일반 텍스트 셸 스크립팅 코드와 임의의 횡설수설을 보았습니다. '이진'또는 일반 텍스트가 아닌 것으로 간주합니다.

나는 그들이 일반 셸 스크립트를 어떻게 혼합하고 아마도 바이너리가 될 '읽을 수없는'것이라고 부를지 궁금합니다.

이것에 대한 통찰력이 있습니까?


기본적으로 tar 아카이브와 같은 일종의 압축 아카이브 앞에 추가 된 쉘 스크립트입니다. 자신 ( Bourne 쉘 변수)에 대해 tail또는 sed명령을 사용하여 $0맨 앞에있는 쉘 스크립트를 제거하고 나머지는 아카이브 해제기에 전달합니다.

예를 들어 다음 스크립트를 다음과 같이 만듭니다 self-extracting.

#!/bin/sh -e
sed -e '1,/^exit$/d' "$0" | tar xzf - && ./project/Setup
exit

sed명령은 파일의 첫 번째 행에서 "exit"로 시작하는 첫 번째 행까지 모든 행을 삭제 한 다음 나머지 행을 통과시킵니다. "exit"줄 바로 다음에 시작하는 것이 tar 파일이면 tar명령이 압축을 풉니 다. 성공하면 ./project/Setup파일 (타르볼에서 추출한 것으로 추정)이 실행됩니다.

그때:

mkdir project
echo "#!/bin/sh" > project/Setup
echo "echo This is the setup script!" >> project/Setup
chmod +x project/Setup
tar czf - project >> self-extracting

이제 이전 project디렉토리를 제거 하면 실행할 수 있으며 self-extractingtar 파일을 추출하고 설정 스크립트를 실행합니다.


확인하고 싶을 수도 있습니다. makeself.sh

저자의 노트에서.

makeself.sh 는 디렉토리에서 자동 압축 해제 가능한 tar.gz 아카이브를 생성하는 작은 쉘 스크립트입니다. 결과 파일은 쉘 스크립트 (대부분 .run 접미사를 가짐)로 나타나며 그대로 실행할 수 있습니다. 그런 다음 아카이브는 임시 디렉토리에 압축을 풀고 임의의 명령 (예 : 설치 스크립트)이 실행됩니다.

Makeself 아카이브에는 무결성 자체 검증 (CRC 및 / 또는 MD5 체크섬)을위한 체크섬도 포함됩니다.

makeself.sh 스크립트 자체는 파일 디렉토리에서 아카이브를 만드는 데만 사용됩니다. 결과 아카이브는 실제로 압축 (gzip, bzip2 또는 압축 사용) TAR 아카이브이며 시작 부분에 작은 쉘 스크립트 스텁이 있습니다. 이 작은 스텁은 파일 추출, 포함 된 명령 실행 및 모든 작업이 끝나면 임시 파일 제거의 모든 단계를 수행합니다. 이러한 아카이브에 포함 된 소프트웨어를 설치하기 위해 사용자가해야 할 일은 아카이브를 "실행"하는 것입니다 [즉, 스크립트 실행].

이 스크립트의 코드를 가능한 한 이식 가능하게 유지하려고합니다. 즉, bash 특정 기능에 의존하지 않고 작동하는 UNIX 호환 시스템에 설치된 명령 만 호출합니다. 이 스크립트와이 스크립트가 생성하는 아카이브는 물론 압축 프로그램을 사용할 수있는 경우 호환되는 Bourne 쉘과 함께 모든 Unix 버전에서 실행되어야합니다.

마지막으로 makeself패키지 자체는 makeself.run.


셸 스크립트에 바이너리 페이로드 추가


GNU sharutils :

http://www.gnu.org/software/sharutils/

셸 아카이브를 생성하기위한 도구 세트이며 유용한 추가 기능 (예 : 페이로드가 전송 중에 손상되지 않도록하는 체크섬)을 제공합니다.

최종 제품을 쉘에서 해석 할 수 있어야하는 경우 악의적 인 수정으로부터 보호하는 것은 실제로 가능하지 않습니다. 생성 기술을 이해하는 사람은 누구나 체크섬을 수정할 수 있습니다.


다른 / 상업용 소프트웨어 설치 빌더 (InstallAnywhere와 같은)도 있으며 기본적으로 shar / makeself 버전이 있습니다.

Netbeans에는 자체 설치 프로그램 엔진이 있으며 일부는 NBI 네이티브 런처 구성 요소에서 압축을 풀고 실행하는 작업입니다. http://wiki.netbeans.org/NBINativeLaunchers

Linux / Unix / MacOS 용 셸 (스크립트) 아카이브와 Windows 용 기본 실행 파일을 만듭니다. 이 도구를 자신의 프로젝트에도 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/955460/how-do-linux-binary-installers-bin-sh-work

반응형