[轉貼]Samba 光碟櫃

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[轉貼]Samba 光碟櫃

文章moto » 週三 7月 07, 2004 4:34 pm

本文來自:http://os208.nchc.org.tw/~klhaung
代碼: 選擇全部
主旨: Samba 光碟櫃
日期: 2002/11/03
參考資料:
http://www.nber.org/amd.html
http://www.tldp.org/HOWTO/CDServer-HOWTO/introduction.html (CDServ-HOWTO)
內容:

1.已經有光碟, 想利用 Samba 將光碟的資料分享出來, 然而光碟有很多份, 但是 CDROM 只有一台,
  可利用 cdread 將光碟的資料完整的 dump 出來成為 raw image data (.raw)
   
  # readcd dev=<device_name> f=<FILENAME>.raw
  Example: cdread dev=0,0,0 f=31.raw
   
  由於 Samba 在讀資料的時後其實是用 UTF8 來解讀資料的, 也就是說, 在 mount 這個 raw image data 時
  要用 -o iocharset=utf8 這個參數
   
  # mount -t iso9660 -o ro,loop=/dev/loop0,iocharset=utf8 <FILENAME>.raw <DIRECTORY>
   
2.因為系統裝好後只有 0-7 八個 loop device, 若要新增多個 look device 則要下以下的指令
  # mknod -m 660 /dev/loop[n] b 7 [n]
  Example: mknod /dev/loop9 b 7 9

  然而,由於系統預設只有8個loop device,故新增之後也沒有用(因為八個quota用滿了:>),
  所以要在 lilo.conf 中加入一個選項 max_loop=N 讓 loop device 多於8個
  # vi /etc/lilo.conf
  ==========================================
  image=/vmlinuz
  label=Linux
  read-only
  append="hdd=ide-scsi max_loop=64"
                       ^^^^^^^^^^^最多64個loop device
  ==========================================
  # lilo -v -v -v
  # shutdown -r now
   
3.由於不會同時每個CD都會被使用, 所以最好是能夠在使用到該CD時才被 mount 起來,
  你可以使用需 kernel support 的 automount 的功能,
  或是使用在 user level 的 bsd automounter utilities, 這裡介紹的是後者
 
  # apt-get install am-utils
  =================================================
  安裝過程中會詢問你是否有其他的目錄要讓am-utils管,
  此時你可以寫上:
  /jukebox /etc/am-utils/amd.jukebox
  這個意思是: /jukebox 這個目錄也要被 am-utils 管,
              相關設定檔在 /etc/am-utils/amd.jukebox
  =================================================

  # vi /etc/am-utils/amd.jukebox
  =================================================
  /defaults       type:=program;fs:=${autodir}${path}
  *       mount:="/etc/am-utils/jukebox.sh jukebox.sh mount ${fs} ${key}";\
          unmount:="/etc/am-utils/jukebox.sh jukebox.sh umount ${fs} ${key}" 
  =================================================
  這個檔案的意思是:
  /defaults -> global 的設定, 此時設定成
               type:=program (當/jukebox有個目錄被選擇時, 要執行一個程式)
               fs:=${autodir}${path} (fs這個變數的值為${autodir}${path},
                                      ${path}則是要進入的絕對路徑名稱,
                                      ${autodir}在/etc/defaults/am-utils中有被定義)
  * 表示任何一個要點選進去的目錄名稱,
  mount:=...;unmount:=...則是在要掛上/卸載該目錄時, 要執行的程式碼
 
  詳細情形請參考 http://www.nber.org/amd.html 及 /usr/share/doc/am-utils 中的說明

  # vi /etc/am-utils/jukebox.sh
  ==================================================
  #!/bin/sh
  #echo " $1 $2 $3 ">> /tmp/jukebox.log

  t=$1     # mount or umount
  fs=$2    # mount destination
  key=$3   # keyword (that is, if a user would like to enter "XX" directory,
           # this word is "XX")

  rawcd_path="/share/.jukebox/"

  case $t in
    'mount')
        echo "mount ${rawcd_path}${key}.raw to $fs" > /tmp/jukebox.log
        mkdir -p ${fs} &> /tmp/jukebox.log
        mount -t iso9660 -o ro,iocharset=utf8,loop ${rawcd_path}${key}.raw ${fs} &> /tmp/jukebox.log
        ;;
    'umount')
        echo "umount ${rawcd_path}$key.raw to $fs" > /tmp/jukebox.log
        umount ${fs} &> /tmp/jukebox.log
        rmdir ${fs} &> /tmp/jukebox.log
        ;;
     *)
        ;;
  esac
  ================================================== 

4. 將光碟的內容直接呈現給使用者看, 也就是說, 使用者看到的是一個大CD而不是一個個小的CD,
   以下的 perl script 可以將你的個別 CD 的內容 ln 到某個目錄底下
   ===================================================
   #!/usr/bin/perl

   my($root) = $ARGV[0];
   DoDir($root);

   sub DoDir {
     my($dir) = shift;
     my($file);
     opendir(DIR, $dir) || die "Unable to open $dir :$!";
     my(@files) = grep {!/^\.\.?$/ } readdir(DIR);
     closedir(DIR);

     foreach (@files) {
       #print "$_\n";
       symlink("$dir//$_","$_");
     }
   }
   ===================================================
   
5. 檢討:
   其實要使用 kernel support 的 automount 來做才是,
   因為 bsd automount utilities 只能算是一個 mount 的前端程式,
   它的動作是: 當你要使用到該目錄時, 它會幫你下達 mount 的指令,
   Samba在browser目錄時(ls), 就會造成所有 CD 都會被 mount 起來,
   若此時你的 /dev/loopXX 不夠多的話, 有些 link 就會有錯誤
               
歡迎你來到MOTO學園一起討論Debian相關問題。
在post問題前可先別忘記了以下的步驟:
1:翻一下/usr/share/doc/中是否已經有解答了?
2:閱讀一下無痛起步是否已經提到了?
3:找一下google予以解答?
4:善用學園中的"搜尋"功能,往往答案就在裡面窩。
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客