가짜 '루트'로 타르볼 만들기


5

Makefile에서 다음과 같은 작업을 수행하고 있습니다.

타르볼 :
        mkdir -p tmp / tarball / etc / service
        mkdir -p tmp / tarball / usr / local
        mkdir -p tmp / tarball / opt / myproject
        cd 센서 데이터; 하다
        cd 센서 터널링; device_name을 만드십시오
        cp -r 센서 서비스 tmp / tarball / etc / service
        # 다음과 같이 타르볼을 만드십시오 :
        # chroot tmp / tarball; tar -czvf myproject.tar.gz.

아이디어는 ./tmp/tarball디렉토리 로 이동 하여 시스템에서 압축을 풀 때 /etc/service, /usr/local및로 압축을 풀 때 tarball을 만들 수 있다는 것 /opt/myproject입니다.

고전적인 접근 방식은 사용하는 것처럼 보이지만으로 tar -czvf -C tmp/tarball .시작하는 타르 항목의 목록이 생성됩니다 ./.

Go 언어의 패키지에서 영감을 얻었으며 다음과 같이 설치해야 함을 나타냅니다.

tar -C /usr/local -xzf go1.0.3.linux-amd64.tar.gz

내 유스 케이스에 이상적인 것은 다음과 같습니다.

tar -C / -xzf myproject.tar.gx

어느 다시 원래의 파일을 추출 할 ~/some-working-directory/tmp/tarball/_____에 /_____그 내가 할 수 단순히 가짜 설치 구조를 의미한다.

물론 이것은 fpm배제하지 않은 것과 같은 것으로 더 잘 달성 될 수 있지만 무거운 솔루션에 관심이 없으며 Ruby에 의지하지 않고이 작업을 수행 할 수 있다고 가정했습니다.

나는 fakechroot유망한 것처럼 보이지만 놀랍게도 타르가 chroot에 존재하지 않으며 토끼 구멍을 따라 내려 가기 시작했을 때 나는 뭔가 잘못하고 있다고 가정하고 도움을 요청해야합니다.


1
sysadmin으로서, 시스템의 루트에 타르볼을 수동으로 압축 해제한다는 아이디어가 울었습니다. 원하는 것은 일반적으로 설치 스크립트에 의해 처리됩니다. 프로그램을 업그레이드 또는 제거 할 계획이거나 릴리스 할 계획이라면 a .deb및로 올바르게 패키징하십시오 .rpm. /opt내 시스템에 존재하지 않습니다! 타르볼은 소스 배포 또는 전체 응용 프로그램을 시스템의 어느 위치 에나 단일 폴더로 압축 해제하여 실행할 수있는 경우에 유용합니다.
— 다스 안드로이드

Darth Android는 인정했지만 고객에게 제공하기 위해 RaspberryPis를 프로비저닝하고 있으며 SD 카드에 이미지를 넣기 전에 전체 rootfs를 tarball (debootstrap 사용)로 이미 구축 했으므로이 솔루션은 그리 나쁘지 않습니다.
— Lee Hambley

그럴 수 있지! 임베디드 시스템이 게임을 바꾼다 :)
— Darth Android

1
디스크 이미지를 만들어 라즈베리에 저장하는 것을 고려 했습니까? tar보다 빠르다 (타르가 파티션 등을 좋아하지 않는 것을 집어들 것이다)
— skarface

답변:


3

GNU tar 매뉴얼에서 :

때 tar추출 아카이브에서 구성원을 보관, 그것은 멤버 이름에서 선행 슬래시 ( '/')을 제거합니다. 이로 인해 아카이브의 절대 멤버 이름이 상대 파일 이름으로 취급됩니다. 이를 통해 아카이브에 이름이 지정된 정확한 디렉토리에서 멤버를 추출하도록 제한하지 않고 원하는 위치에서 해당 멤버를 추출 할 수 있습니다. 예를 들어, 아카이브 멤버의 이름이` /etc/passwd'인 경우 tar는 이름이 실제로` etc/passwd'인 것처럼 추출합니다 .

따라서 내 tar 작성은 다음과 같습니다.

tar -czvf myproject.tar.gz -C tmp/tarball ./
./
./etc/
./etc/service/
./etc/service/sensorservices/
./usr/
./usr/local/
./opt/
./opt/myproject/

이것을 다음과 함께 설치 한 경우 :

sudo tar --directory / -xzf ./myproject.tar.gz
sudo tar -C / -xzf ./myproject.tar.gz

그런 다음 모든 것이 예상대로 작동합니다.


0

왜 그렇게 복잡합니까?

cd tmp/tarball; tar -czvf ../../myproject.tar.gz .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.