next up previous contents
Next: KPlayer Tarball 實例 Up: *Tarball 套件發行 Previous: 套件發行   Contents

Tarballs 簡介

  • 何謂 Tarball 套件?
    1. Tarball:壓縮過的 TAR(tape archive)檔案。
    2. Linux 程式和原始碼通常是以一個 tarball 檔案的方式散佈。
    3. 程式 tarball 名稱通常有版本資訊,副檔名為 .tar.gz 或 .tgz。
  • Tarball 套件安裝的基本步驟
    1. 下載 Tarball;
    2. 將 Tarball 解打包壓縮會在目前目錄下產生套件目錄,目錄下通常會有:
      1. 原始程式碼檔案;
      2. 偵測程式檔案( 可能是 configure 或 config 等檔名 );
      3. 本套件的簡易說明與安裝說明( INSTALL 或 README )。
    3. 根據 INSTALL/README 的內容安裝好相依的套件;
    4. 以 configure 或 config 自動偵測作業環境,並建立 Makefile 檔案;
    5. 以指令 make 配合該目錄下的 Makefile,進行 make 動作;
    6. 以指令 make 並以 Makefile 中的 install 目標項目,安裝到正確的路徑。
  • 使用原始碼管理套件所需要的基礎套件
    1. gcc 或 cc 等 C 語言編譯器( compiler ):
    2. make 及 autoconfig 等套件。
      1. 不同的系統可能具有的基礎套件環境並不相同,必須偵測使用者的作業環境,以建立 makefile 檔案。
      2. 自行偵測程式必須藉由 autoconfig 相關的套件輔助。
    3. 需要 kernel 提供的 library 以及相關的 include 檔案:
  • Tarball 的安裝可跨平台
    1. 因為 C 語言的程式碼在各個平台上面是可以共通的;
    2. 需要的編譯器可能並不相同。例如 Linux 上編譯器用 gcc 而 Windows 上則用相關的 C 編譯器。
  • 多用途指令 tar
    1. tar 指令
      [root@linux ~]# tar [-cxtzjvfpPN] 檔案與目錄 ....
      選項:
      -c  :建立一個打包檔案(create);
      -x  :解開一個打包檔案; 
      -t  :查看 tarfile 內的檔案;(c/x/t 不可同時存在!)
      -z  :同時用 gzip 壓縮;
      -j  :同時用 bzip2 壓縮;
      -v  :壓縮的過程中顯示檔案;
      -f  :使用檔名,在 f 之後要立即接檔名!
      -p  :保留檔案的原來屬性(屬性不會依據使用者而變) 
      -P  :保留絕對路徑;
      -N  :比後面接的日期(yyyy/mm/dd)還要新的才會被打包; 
      --exclude FILE:排除 FILE 。
      
    2. 將檔案 txt 打包為 txt.tar
      [root@dywOffice tmp]# tar -cvf txt.tar txt
      
    3. 將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar
      [root@dywOffice tmp]# tar -cvf /tmp/etc.tar /etc %*<== 僅打包,不壓縮*)
      [root@dywOffice tmp]# tar -zcvf /tmp/etc.tar.gz /etc %*<== 打包後,以 gzip 壓縮*)
      [root@dywOffice tmp]# tar -jcvf /tmp/etc.tar.bz2 /etc %*<== 打包後,以 bzip2 壓縮*)
      
    4. 查閱 /tmp/etc.tar.gz 檔案內有那些檔案?
      [root@dywOffice tmp]# tar -ztvf /tmp/etc.tar.gz
      
    5. 將 /tmp/etc.tar.gz 檔案解壓縮
      [root@dywOffice tmp]# tar -zxvf /tmp/etc.tar.gz
      
    6. 只將 /tmp/etc.tar.gz 內的 etc/passwd 解開
      [root@dywOffice tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
      
    7. 將 /home/csie/testdir 內的所有檔案備份(打包壓縮),並保存其絕對路徑
      [root@dywOffice tmp]# tar -zcvPf testdir.tar.gz /home/csie/testdir
      
    8. 將 /etc/ 內的所有檔案備份,並保存其權限
      [root@dywOffice tmp]# tar -zcvpf /tmp/etc.tar.gz /etc
      
    9. 在 /home 當中,比 2007/11/30 新的檔案才備份
      [root@dywOffice tmp]# tar -N '2007/11/30' -zcvf home.tar.gz /home
      
    10. 備份 /home,但不要 /home/csie/tmp
      [root@dywOffice tmp]# tar -zcvf home.tar.gz /home  --exclude /home/csie/tmp
      

  • Tarballs 檔案處理步驟:
    1. 打包檔案
      $ tar -cvf myapp-1.0.tar main.c 2.c 3.c *.h myapp.1 Makefile5
      main.c
      2.c
      3.c
      a.h
      b.h
      c.h
      myapp.1
      Makefile5
      $
      
    2. 顯示 tar 檔案
      $ ls -l *.tar
      -rw-r--r--  1 neil   users  10240 2003-02-15 11:31 myapp-1.0.tar
      $
      
    3. 再利用 gzip 壓縮檔案,檔案大幅減小。
      $ gzip myapp-1.0.tar
      $ ls -l *.gz
      -rw-r--r--  1 neil   users  1668 2003-02-15 11:31 myapp-1.0.tar.gz
      $
      
    4. Windows 對於正確的副檔名非常在意,而 Linux/UNIX 則不同。若要在 windows 執行可更改附檔名:
      $ mv myapp-1.0.tar.gz myapp_v1.tgz
      $ mv myapp_v1.tgz myapp-1.0.tar.gz
      
    5. 取回檔案,要先解壓縮,隨後在解開 tar 檔案。
      $ gzip -d myapp-1.0.tar.gz
      $ tar -xvf myapp-1.0.tar
      main.c
      2.c
      3.c
      a.h
      b.h
      c.h
      myapp.1
      Makefile5
      $
      
  • GNU 版的 tar 可以更簡化,可以一個步驟產生壓縮檔。
    1. 打包並壓縮檔案
      $ tar -zcvf myapp_v1.tgz main.c 2.c 3.c *.h myapp.1 Makefile5
      main.c
      2.c
      3.c
      a.h
      b.h
      c.h
      myapp.1
      Makefile5
      $
      
    2. 也可以直接解壓縮:
      $ tar -zxvf myapp_v1.tgz
      main.c
      2.c
      3.c
      a.h
      b.h
      c.h
      myapp.1
      Makefile5
      $
      

  • 也可利用修改 makefile,增加一個新的目標項目 dist,建立 tarball 收集檔案。
    1. 修改 makefile。
      all: myapp
      # Which compiler
      CC = gcc
      # Where are include files kept
      INCLUDE = .
      # Options for development
      CFLAGS = -g -Wall -ansi
      # Options for release
      # CFLAGS = -O -Wall -ansi
      # Local Libraries
      MYLIB = mylib.a
      myapp: main.o $(MYLIB)
            $(CC) -o myapp main.o $(MYLIB)
      $(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
      main.o: main.c a.h
      2.o: 2.c a.h b.h
      3.o: 3.c b.h c.h
      clean:
            -rm main.o 2.o 3.o $(MYLIB)
      dist: myapp-1.0.tar.gz
      myapp-1.0.tar.gz: myapp myapp.1
          -rm -rf myapp-1.0
          mkdir myapp-1.0
          cp *.c *.h *.1 Makefile myapp-1.0
          tar -zcvf $@ myapp-1.0
      
    2. 執行以下命令,產生 tarball 檔案:
      $ make dist
      
    3. 查看 myapp-1.0.0.tar.gz。
      $ ls myapp-1.0.tar.gz
      myapp-1.0.tar.gz
      

  • 一般 tarball 軟體安裝之指令下達方式:
    $ tar -zxvf tarballfile.tar.gz
    $ ./configure
    $ make clean
    $ make
    $ make install
    

  • Tarball 套件安裝建議事項:
    1. Tarball 在 /usr/local/src 解壓縮;
    2. Linux distribution 釋出安裝的套件大多在 /usr ,而使用者自行安裝的套件則建議放置在 /usr/local;
    3. man 預設會去搜尋 /usr/local/man 裡的說明文件;
    4. 自行安裝套件在 /usr/local 較易管理,例如:解除安裝。
  • Linux distribution 預設安裝套件的路徑
    1. 以自由軟體多媒體播放軟體 kplayer 為例,安裝路徑如下:
      /usr/bin   %*<== 執行檔*)
      /usr/lib   %*<== 函式庫*)
      /usr/share/applnk/     %*<== 程式選單連結檔*)
      /usr/share/apps/       %*<== 程式內容*)
      /usr/share/doc/        %*<== 程式文件*)
      /usr/share/icons/      %*<== 程式圖標*)
      /usr/share/locale/     %*<== 程式支援之語系*)
      /usr/share/services/   %*<== 程式支援之服務*)
      
    2. /usr/local 預設目錄:
      /usr/local/bin
      /usr/local/lib
      /usr/local/share
      
    3. 將 kplayer 安裝在 /usr/local/kplayer 中,路徑為:
      /usr/local/kplayer/bin
      /usr/local/kplayer/lib
      /usr/local/kplayer/share/applnk
      /usr/local/kplayer/share/apps
      /usr/local/kplayer/share/doc
      /usr/local/kplayer/share/icons
      /usr/local/kplayer/share/locale
      /usr/local/kplayer/share/services
      
  • 套件移除:
    1. 單一套件的檔案都在同一個目錄之下,只要將該目錄移除即可視為該套件已經被移除。
    2. 實際安裝時得視該軟體的 Makefile 裡的 install 資訊才能知道安裝情況。
  • 套件相依性:
    1. 套件相依性:Linux 軟體套件,經常無法單獨安裝,往往需要其他相關套件存在,才能正常工作。
    2. 套件相依有順序:例如:kplayer 必須先安裝套件 mplayer,而 mplayer 必須先安裝套件 kdelibs-common。
    3. 依套件相依性,移除順序為 kdelibs-common, mplayer, kplayer。
    4. kplyaer 相依套件不只 kdelibs-common 與 mplayer 兩套件,須視實際安裝訊息而定。
練習題
  1. 何謂 Tarball 套件?
    Sol. 壓縮過的 TAR(tape archive)檔案。
  2. 程式 tarball 名稱通常有版本資訊,副檔名為何?
    Sol. .tar.gz 或 .tgz。
  3. Tarball 套件解壓縮後,通常會有那些檔案?
    Sol. 1.原始程式碼檔案;2.偵測程式檔案 configure 或 config;3.套件簡易說明 README 與(或)安裝說明 INSTALL。
  4. Tarball 套件解壓縮後,通常會有那個偵測程式偵測作業環境,建立 Makefile 檔案?
    Sol. configure 或 config。
  5. Tarball 套件解壓縮後,通常要先查閱那兩個檔案,以瞭解套件如何安裝?
    Sol. 套件簡易說明 README 與安裝說明 INSTALL。
  6. Linux 上編譯 C 語言的程式碼的主要工具為何?
    Sol. gcc
  7. Linux 上編譯 C++ 語言的程式碼的主要工具為何?
    Sol. g++
  8. Tarball 套件在 Linux 上安裝時,基本上需要那些基礎套件?
    Sol. tar, gcc, make 及 autoconfig 等套件。
  9. 程式 make 時,需要那個檔案提供,要產生之目標檔案及其法則?
    Sol. makefile 或 Makefile。
  10. 偵測使用者的作業環境,以建立 makefile 檔案之套件為何?
    Sol. autoconfig
  11. Tarball 套件可以在 Windows 上安裝嗎?
    Sol. 可以,使用 Windows 下相關的 C 編譯器。
  12. 如何以指令 tar 將檔案 txt 打包為 txt.tar?
    Sol. tar -cvf txt.tar txt
  13. 如何以指令 tar 將整個 /etc 目錄下的檔案全部打包成為 /tmp/etc.tar?
    Sol. tar -cvf /tmp/etc.tar /etc
  14. 如何以指令 tar 將整個 /etc 目錄下的檔案全部打包,且以 gzip 壓縮成為 /tmp/etc.tar.gz?
    Sol. tar -zcvf /tmp/etc.tar.gz /etc
  15. 如何以指令 tar 將整個 /home 目錄下的檔案全部打包,且以 gzip 壓縮成為 /tmp/home.tar.gz?
    Sol. tar -zcvf /tmp/home.tar.gz /home
  16. 如何以指令 tar 查閱 tar 打包壓縮檔 /tmp/etc.tar.gz 內有那些檔案?
    Sol. tar -ztvf /tmp/etc.tar.gz
  17. 如何以指令 tar 將 /etc/ 內的所有檔案備份為 /tmp/etc.tar.gz 下,並且保存其權限?
    Sol. tar -zcvpf /tmp/etc.tar.gz /etc
  18. 如何以指令 tar 將 /tmp/home.tar.gz 檔案解壓縮在根目錄 /?
    Sol. tar -zxvf /home/etc.tar.gz /
  19. 如何以指令 tar 將 /tmp/etc.tar.gz 檔案解壓縮在目前目錄?
    Sol. tar -zxvf /tmp/etc.tar.gz
  20. 如何以指令 tar 將備份 /home 成 myhome.tar.gz,但不要 /home/test?
    Sol. tar -exclude /home/test -zcvf myhome.tar.gz /home/*
  21. 如何以指令 tar 打包檔案 main.c 2.c 3.c *.h 成 myapp-1.0.tar?
    Sol. tar -cvf myapp-1.0.tar main.c 2.c 3.c *.h
  22. 如何將打包檔案 myapp-1.0.tar,再利用 gzip 壓縮檔案?
    Sol. gzip myapp-1.0.tar
  23. 打包檔案 myapp-1.0.tar,再利用 gzip 壓縮後之檔名為何?
    Sol. myapp-1.0.tar.gz
  24. 如何將打包且壓縮檔案 myapp-1.0.tar.gz,利用 gzip 解壓縮?
    Sol. gzip -d myapp-1.0.tar.gz
  25. 如何將打包檔案 myapp-1.0.tar,利用 tar 解打包?
    Sol. tar -xvf myapp-1.0.tar
  26. 如何以指令 tar 打包並壓縮檔案 main.c 2.c 3.c *.h 成 myapp-1.0.tar.gz?
    Sol. tar -zcvf myapp-1.0.tar main.c 2.c 3.c *.h
  27. 如何以指令 tar 將 myapp-1.0.tar.gz 打包壓縮?
    Sol. tar -zxvf myapp-1.0.tar.gz
  28. makefile 新增一個的目標項目 dist,建立 tarball,其中一行 dist: myapp-1.0.tar.gz 代表意義為何?
    Sol. 目標項目為 dist,其相依項目為 myapp-1.0.tar.gz
  29. makefile 新增一個的目標項目 dist,建立 tarball,其中一行 myapp-1.0.tar.gz: myapp myapp.1 代表意義為何?
    Sol. 目標項目為 myapp-1.0.tar.gz,其相依項目為 myapp 與 myapp.1
  30. makefile 新增一個的目標項目 dist,建立 tarball,其中一行 tar -zcvf $@ myapp-1.0 代表意義為何?
    Sol. 將 myapp-1.0 打包壓縮,檔名為目前之目標項目。
  31. 一般 tarball 軟體安裝時,請說明執行 ./configure 之目的為何?
    Sol. ./ 表示在目前目錄下執行 configure,自動偵測作業環境,並產生 makefile。
  32. 一般 tarball 軟體安裝時,請說明執行 make clean 之目的為何?
    Sol. 執行目標項目 clean,清除目標檔。
  33. 一般 tarball 軟體安裝時,請說明執行 make 之目的為何?
    Sol. 編譯程式,產生二進位之執行檔。
  34. 一般 tarball 軟體安裝時,請說明執行 make install 之目的為何?
    Sol. 執行目標項目 install,將編譯好之可執行檔及相關檔案,複製到指定的目錄。
  35. 一般 Linux distribution 釋出安裝的套件大多在那個目錄?
    Sol. /usr
  36. 一般 Linux 建議使用者自行安裝的套件放置在那個目錄?
    Sol. /usr/local
  37. Linux distribution 預設安裝套件的路徑 /usr/bin 放置什麼檔案?
    Sol. 執行檔
  38. Linux distribution 預設安裝套件的路徑 /usr/lib 放置什麼檔案?
    Sol. 函式庫
  39. Linux distribution 預設安裝套件的路徑 /usr/share/applnk 放置什麼檔案?
    Sol. 程式選單連結檔
  40. Linux distribution 預設安裝套件的路徑 /usr/share/apps/ 放置什麼檔案?
    Sol. 程式內容
  41. Linux distribution 預設安裝套件的路徑 /usr/share/doc/ 放置什麼檔案?
    Sol. 程式文件
  42. Linux distribution 預設安裝套件的路徑 /usr/share/icons/ 放置什麼檔案?
    Sol. 程式圖標
  43. Linux distribution 預設安裝套件的路徑 /usr/share/locale/ 放置什麼檔案?
    Sol. 程式支援之語系
  44. Linux distribution 預設安裝套件的路徑 /usr/share/services/ 放置什麼檔案?
    Sol. 程式支援之服務


next up previous contents
Next: KPlayer Tarball 實例 Up: *Tarball 套件發行 Previous: 套件發行   Contents
2017-06-14