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-extracting
tar 파일을 추출하고 설정 스크립트를 실행합니다.
확인하고 싶을 수도 있습니다. 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
'Development Tip' 카테고리의 다른 글
JSX에서 어떻게 className을 string + {prop}로 설정합니까? (0) | 2020.11.26 |
---|---|
HTML 엔티티를 유니 코드로 또는 그 반대로 변환 (0) | 2020.11.26 |
NSURLConnection 시간 초과? (0) | 2020.11.26 |
GIT 복원 마지막 분리 HEAD (0) | 2020.11.25 |
ActionBar의 오버플로 메뉴에 아이콘을 표시하는 방법 (0) | 2020.11.25 |