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


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.