ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • self extracting archive
    2013. 7. 7. comments
    Self Extracting Archive

    일반적으로 linux에서 프로그램들은 각 배포판에 따라 rpm 또는 deb 과 같이 정해진 패키지 단위로 프로그램을 설치/삭제하지만, self extracting을 통해서 패키징 절차 없이 파일 하나로 프로그램이 설치가 되도록 할 수 있다. self extracting archive는 말 그대로 스스로 압축된 파일을 풀리게 만드는 것인데, 배포판 패키징 절차 없이 프로그램에 필요한 파일(binary 및 conf, ....)들을 하나의 script 파일 하나로 배포할 수 있는 장점이 있다. 관리를 고려할 때, 당연히 linux 배포판의 패키징 절차를 따라야 하겠지만 "스크립트만으로 이런 것도 가능하다"라는 입장에서 한번 살펴볼만 하다.



    process


    1. tar 명령을 통해 gzip 포맷으로 배포할 파일을 압축.(archive.tar.gz)


    2. 아래의 스크립트 내용으로 파일 생성.(self_extra.sh)

    #!/bin/bash ARCHIVE_LINE=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0` tail -n +$ARCHIVE_LINE $0 | tar xz exit 0 __ARCHIVE_FOLLOWS__


    3. cat 명령을 통해서 archive파일과 2번에 작성한 스크립트 내용 merge

    cat self_extra.sh archive.tar.gz > install_archive.sh


    4. 새로 생성된 install_archive.sh 파일에 실행권한을 부여.

    chmod 755 install_archive.sh



    절차를 보면 알겠지만, Self Extracting Archive는 쉘 스크립트에 Archive 파일 내용을 포함시키고 쉘 스크립트에서 Archive의 위치부터 출력되는 결과물을 tar 명령을 통해서 풀어주는 역할을 할 뿐이다.

    주의할 점으로 만들어진 self extracting archive 파일은 더 이상 text 파일로 취급되지 않기 때문에 파일 내용을 수정하게 되면(스크립트 내용일지라도) 동작하지 않는다.  필요하면 원본 쉡 스크립트에서 내용을 수정 하고, cat 명령을 통해서 다시 self extracting archive 파일을 만들어야 한다.



    advanced script file

    스크립트 파일 내용이 너무 simple해서 설치를 진행할 것인지 그리고 설치 전/후에 해야할 일을 정의할 수 있도록 스크립트를 개선하였다.


    #!/bin/bash
    
    function pre_install_script
    {
        echo pre_install_script
    }
    
    function after_install_script
    {
        echo after_install_script
    }
    
    
    PROGNAME=sample
    echo -n 'Do you want to continue with the installation of '$PROGNAME' [y,n] '
    read line
    
    if [ "$line" != "y" ]; then
        echo 'bye...'
        exit 0
    fi
    
    pre_install_script
    
    ARCHIVE_LINE=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' $0`
    tail -n +$ARCHIVE_LINE $0 | tar xz
    
    after_install_script
    exit 0
    
    __ARCHIVE_FOLLOWS__
    


    반응형

    댓글

Designed by Tistory.