Network File System (NFS) Server di Puppy Linux

NFS Server memungkinkan user di komputer client mengakses file yang ada di server seolah-olah file tersebut ada di lokal. Detail tentang NFS ini ada di wiki. Terdapat distributed filesystem lain yaitu Andrew distributed file system (AFS). Dengan OpenAFS ini, file di server bisa diakses dari komputer client Windows. Hmmmm, mungkin nanti mau eksplore filesystem ini untuk membuat semacam NAS (Network Attached Storage).

OK, sekarang balik lagi ke NFS. Kalau di distro lain seperti Redhat, SuSE atau debian mungkin menginstall NFS server relatif lebih mudah. Tinggal menggunakan package manager untuk menginstall dan kemudian menjalankan daemonnya dari /etc/init.d. Tidak demikian untuk Puppy Linux (saya sudah terbiasa menggunakan distro ini, sangat cepat, ringan dan stabil sehingga tidak mau pilih yang lain, hehehe). Untuk menjalankan NFS server, perlu menginstall nfs-utils dari tarballnya yang bisa didapat dari sourceforge.

Pendahuluan

Paket nfs-utils, terutama untuk server, berisi program dan daemon untuk mengaktifkan nfs server, yaitu:

  1. exportfs: untuk membuat list file system NFS yang akan dieksport agar bisa dimount oleh client
  2. nfsstat: untuk memperlihatkan statistik NFS
  3. rpc.lockd: untuk memulai NFS lock manager (NLM) di kernel. Di kernel terbaru, program ini terload secara otomatis saat startup
  4. rpc.mountd: menjalankan protocol mount NFS di server
  5. rpc.nfsd: menjalankan layanan NFS untuk user di server
  6. rpc.rquotad: mendapatkan informasi quota bagi seorang user di file system yang termount oleh komputer remote lewat NFS
  7. rpc.statd: digunakan oleh layanan NFS file locking (rpc.lockd) untuk menjalankan lock recovery saat server NFS crash atau reboot
  8. showmount: untuk memperlihatkan informasi di suatu NFS server

Dependensi

Run-time dependency:

  • Portmap, untuk memforward RPC requests ke RPC daemons seperti NFS atau NIS

Compile-time dependency:

  • Libevent dan Libnfsidmap (untuk mendukung NFSv4)
  • MIT Kerberos V5-1.6 atau Heimdal-0.7.2 atau libgssapi, dan librpcsecgss (untuk mendukung GSS/RPC Security)
  • tcp-wrappers

Konfigurasi Kernel

Untuk mengaktifkan NFS di server, cek di konfigurasi kernel apakah NFS support (client) dan NFS server support sudah terinstall dalam kernel(Y) atau module(M). Modul NFS client bisa digunakan untuk mengetes server.

   
   File systems:
     Network File Systems:
        NFS File System Support: M or Y
          Provide NFSv3 client support: Y
        NFS Server Support: M or Y
          Provide NFSv3 server support: Y         

Jika terinstall sebagai modul, akan terletak di /lib/modules/2.6/kernel/fs/nfsd/nfsd.ko

Instalasi

Berikut akan dijabarkan instalasi nfs-utils, sedangkan instalasi portmap dapat dilihat di dokumen install.portmap.
Langkah-langkahnya adalah:

  1. Download nfs-utils dari sourceforge
  2. Extract
  3. Configure dan compile :
      
       ./configure --prefix=/usr \
                --sysconfdir=/etc \
                --disable-nfsv4 \
                --disable-gss &&
       make
    

    Dikonfigurasi tanpa nfsv4 dan gss support

  4. Install
       make install
    

Program dan daemon akan terinstall di /usr/sbin, sedangkan konfigurasi diset ke direktori /etc.

Konfigurasi Server

Beberapa skrip di bawah ini, didapatkan dari blfs-bootscripts dengan beberapa perubahan yang perlu.

1. Persiapkan direktori yang akan dishare lewat NFS. Edit file /etc/exports

Note untuk puppyOS frugal:
Exportfs tidak dapat mengeksport file system dengan tipe rootfs (direktori root /), sehingga direktori dieksport harus diletakkan di luar root (‘/’), misalnya ke direktori /initrd/mnt/dev_save (yang di link ke /mnt/home) di puppy frugal, dimana .sfs ada di dalam partisi OS lain (misalnya /dev/sda7 dengan tipe reiserfs) yang termount ke /initrd/mnt/dev_save.
Contoh isi file /etc/exports adalah:

     /mnt/home/nfsroot *(rw,sync,no_subtree_check,no_root_squash,no_acl)

Refer ke dokumen NFS http://nfs.sourceforge.net/nfs-howto/ar01s03.html#config_server_setup

2. Buat bootscript agar NFS server bisa diload saat startup oleh /sbin/init,
Umumnya bootscript untuk start dan kill tersimpan di /etc/init.d/nfs-server

   
   cat > /etc/init.d/nfs-server << EOFALL
#!/bin/sh
# Start/stop nfsserver daemon
# 

. /etc/sysconfig/nfs-server

case "\$1" in
    start)
        echo "Loading kernel module"
        modprobe nfsd
        # Loading modul nfsd akan memanggil modul dependensinya, yaitu 
        # exportfs, lockd, dan sunrpc 

        echo "Running portmap..."
        [ -z "`pidof portmap`" ] && portmap

        echo "Starting NFS mountd..."
        /usr/sbin/rpc.mountd

        echo "Starting NFS nfsd..."
        /usr/sbin/rpc.nfsd -p \$PORT \$PROCESSES

        echo "Starting NFS statd..."
        /usr/sbin/rpc.statd

        if \[ "\$QUOTAS" = "yes" ]; then
            echo "Starting NFS rquotad..."
            /usr/sbin/rpc.rquotad
        fi

        # NFSD support only in 2.6 kernel
        /bin/uname -r | /bin/grep "2.6" 2>&1 > /dev/null
        if \[ \$? = 0 ]; then
            echo "Mounting nfsd virtual filesystem..."
            /bin/mount -t nfsd none /proc/fs/nfsd 2>&1 > /dev/null              
        fi  
        # Make ceratin that the list is refreshed on a restart.
        echo "Exporting NFS Filesystems..."
        /usr/sbin/exportfs -ra 2>&1 > /dev/null     
        ;;

    stop)
        echo "Stopping NFS statd..."
        kill -9 \`pidof rpc.statd\`

        echo "Stopping NFS nfsd..."
        # nfsd needs HUP....
        kill -HUP \`pidof nfsd\`

        echo "Stopping NFS mountd..."
        kill -9 \`pidof rpc.mountd\`

        if \[ "\$QUOTAS" = "yes" ]; then
            echo "Stopping NFS rquotad..."
            kill -9 \`pidof rpc.rquotad\`
        fi

        echo "Refreshing NFS Exported Filesystems..."
        /usr/sbin/exportfs -au 2>&1 > /dev/null
        
        # NFSD support only in 2.6 kernel
        /bin/uname -r | /bin/grep "2.6" 2>&1 > /dev/null
        if \[ \$? = 0 ]; then
            echo "Unmounting NFS Virtual Filesystem..."
            /bin/umount /proc/fs/nfsd 2>&1 > /dev/null              
        fi

        # Remove a pid file that isn't done automatically
        echo "Removing the rpc.statd pid file if it exists"
        if \[ -f /var/run/rpc.statd.pid ]; then
            rm -f /var/run/rpc.statd.pid
        fi
        
        echo "Killing portmap..."
        [ -z "`pidof portmap`" ] || kill -9 `pidof portmap`

        
        echo "Removing kernel module..."
        rmmod nfsd
        ;;

    reload)
        echo "Reloading NFS Server..."
        /usr/sbin/exportfs -ra
        ;;

    restart)
        \$0 stop
        sleep 1
        \$0 start
        ;;
    *)
        echo "Usage: \$0 {start|stop|reload|restart}"
        exit 1
        ;;
esac
EOFALL

    chmod +x /etc/init.d/nfs-server

3. Buat konfigurasi /etc/sysconfig/nfs-server

 cat > /etc/sysconfig/nfs-server <<  "EOF"
PORT="2049"
PROCESSES="8"
QUOTAS="no"
KILLDELAY="10"
EOF

Running

Untuk menjalankan NFS server, ketik “/etc/init.d/nfs-server start” di shell console, sedangkan untuk menghentikan service, ketik “/etc/init.d/nfs-server stop“.

Testing

Berikut pengujian untuk melihat apakah server telah berjalan dan siap.
1. Apakah server telah berjalan? Di server jalankan perintah berikut:

   root:/mnt/home/nfsroot> rpcinfo -p localhost
     program vers proto   port
      100000    2   tcp    111
      100000    2   udp    111
      100005    1   udp  32773
      100005    1   tcp  43469
      100005    2   udp  32773
      100005    2   tcp  43469
      100005    3   udp  32773
      100005    3   tcp  43469
      100021    1   udp  32774
      100021    3   udp  32774
      100021    4   udp  32774
      100003    2   udp   2049
      100003    3   udp   2049
      100024    1   udp  32775
      100024    1   tcp  39702   

Dengan ‘netstat -ap’, program yang mengeset port tersebut dapat dilihat.

   
   root:/mnt/home/nfsroot> netstat -ap
   Active Internet connections (servers and established)
   Proto Recv-Q Send-Q Local Address Foreign Address State   PID/Program name   
   tcp        0      0 *:36519       *:*             LISTEN  12452/rpc.statd     
   tcp        0      0 *:43469       *:*             LISTEN  9359/rpc.mountd     
   tcp        0      0 *:111         *:*             LISTEN  9357/portmap        
   tcp        0      0 *:39702       *:*             LISTEN  9372/rpc.statd      
   tcp        0      0 *:631         *:*             LISTEN  3329/cupsd          
   udp        0      0 *:2049        *:*                     -                   
   udp        0      0 *:644         *:*                     9372/rpc.statd      
   udp        0      0 *:32773       *:*                     9359/rpc.mountd     
   udp        0      0 *:32774       *:*                     -                   
   udp        0      0 *:32775       *:*                     9372/rpc.statd      
   udp        0      0 *:32776       *:*                     12452/rpc.statd     
   udp        0      0 *:111         *:*                     9357/portmap        
   udp        0      0 *:756         *:*                     12452/rpc.statd     
   udp        0      0 *:631         *:*                     3329/cupsd  

Setidaknya portmap, mountd dan nfsd telah berjalan

2. Test mount localhost:/mnt/home/nfsroot

Di server harus ada kernel modul nfs (client) yang akan diload oleh program mount (jika mendukung NFS)

   root:/mnt/home/nfsroot> mount localhost:/mnt/home/nfsroot/ /mnt/nfs/
   root:/mnt/home/nfsroot> mount
     rootfs on / type rootfs (rw)
     /dev/sda7 on /initrd/mnt/dev_save type reiserfs (rw,noatime)
     /dev/loop1 on /initrd/pup_rw type ext2 (rw,noatime)
     tmpfs on /initrd/mnt/tmpfs type tmpfs (rw)
     /dev/loop0 on /initrd/pup_ro2 type squashfs (ro,noatime)
     /dev/loop3 on /initrd/pup_ro3 type squashfs (ro,noatime)
     /dev/loop4 on /initrd/pup_ro4 type squashfs (ro,noatime)
     /dev/loop5 on /initrd/pup_ro5 type squashfs (ro,noatime)
     unionfs on / type unionfs (rw,dirs=/initrd/pup_rw=rw:/initrd/pup_ro2=ro:/initrd/pup_ro3=ro:/initrd/pup_ro4=ro:/initrd/pup_ro5=ro)
     tmpfs on /tmp type tmpfs (rw)
     none on /proc type proc (rw)
     shmfs on /dev/shm type tmpfs (rw)
     none on /dev/pts type devpts (rw)
     none on /sys type sysfs (rw)
     none on /proc/bus/usb type usbfs (rw)
     /dev/sda5 on /mnt/sda5 type reiserfs (rw)
     none on /proc/fs/nfsd type nfsd (rw)
     localhost:/mnt/home/nfsroot/ on /mnt/nfs type nfs (rw,vers=3,rsize=32768,wsize=32768,hard,proto=udp,timeo=7,retrans=3,sec=sys,addr=localhost)

Sekarang mount direktori /data di server dari komputer client, dengan perintah:

 
   mount server_ip:/data /mnt/data

Contoh penggunaan NFS server adalah untuk load root filesystem untuk embedded board dari server.

8 Komentar to “Network File System (NFS) Server di Puppy Linux”

  1. Thank you for your nfs-util guide. Where can i find libwrap source file, i am using puppy 4.10 and these libraries are missing. Again thank you.

  2. tcpwrapper has been included in nfs-utils-1.1.3 and above. You shouldn’t be worry about that.

  3. Install portmap di Puppy Linux 4.2 bagaimana caranya ya mas? Terima kasih. Ada package-nya gak (*.pup/*.pet)

  4. Portmap diinstall langsung dari sourcenya di http://neil.brown.name/portmap/portmap-6.0.tgz: ekstrak, kompile dan install ke /usr/bin

    Atau ambil portmap binary x86 langsung dari paket lain, misalnya .rpm atau .deb.

  5. Saya dapat ini di murga linux. Belum tak coba. Tolong dikomentari. Di lupu dah pake kernel 2.6.33. itu dah ada nfsd dan nfs kayak nya.

    As requested for the above
    these are howto’s I wrote for myself to remind me when doing a new install.
    this is for kernal 2.6.25.16. (puppy 4.2, 4.21 etc)
    obviously change things to suit

    First the server;

    # install
    NFS-modules-k2.6.25.16.pet

    # then the command (to register modules)
    depmod

    # extract to /
    nfs_common.tar.gz

    # make a file
    /etc/exports
    # containing – /root (what’s shared) 192.60.26.9(rw…) (client allowed share)
    /root 192.60.26.9(rw,no_root_squash,no_subtree_check,sync)

    # edit
    /etc/host.allow
    # adding (dont forget comma spaced and carriage return)
    ALL: 192.60.26.9 , 192.60.26.10

    # add these to /etc/rc.d/rc.local
    modprobe nfsd
    /etc/rc.d/rc.nfsd start

    # to check if nfs is running
    rpcinfo -p localhost

    And the client;

    # make a dir on client
    /mnt/dc_server

    # install
    NFS-modules-k2.6.25.16.pet

    # extract to /
    nfs_common.tar.gz

    # edit
    /etc/host.allow
    # adding (dont forget comma spaced and a carriage return)
    ALL: 192.60.26.9 , 192.60.26.10

    # add these to /etc/rc.d/rc.local
    modprobe nfs
    /etc/rc.d/rc.portmap start

    # to check if nfs is running
    rpcinfo -p localhost

    # script in (this allows time for ip address to come up before mounting)
    /root/startup/DCmount_nfs.sh
    ## poll interface eth0
    while [ -z “`ifconfig | grep ‘eth0’`” ]
    do
    sleep 3
    done

    mount-FULL -t nfs 192.60.26.10:/root /mnt/dc_server

    Finally;
    For later kernals (puppy 4.3, 4.31) just leave out the “NFS-modules-k2.6.25.16.pet” as the builds have the NFS modules enabled.

    Hope it all makes sense

    DC

  6. nfsd butuh modul kernel yang tentunya harus sesuai dengan versi kernel yang digunakan.
    Kebutuhan mas Hanif untuk menggunakan/mengakses/menyimpan file di network bisa dipenuhi dengan NFS ini.

  7. trimakasih lagi. Saya akan coba. Kalau berhasil akan saya laporkan.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: