#!/bin/bash ############################################################## # # Copyright (c) International Business Machines Corp., 2003 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See # the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # # FILE : exportfs.sh # USAGE : exportfs.sh -h <nfs_server> -d <nfs_server_disk_partition> # -t <server_fs_type> # # DESCRIPTION : A script that will test exportfs on Linux system. # REQUIREMENTS: # 1) NFS Server system with rsh enabled between client & server. # 2) 100MB Disk partition on NFS server. # # HISTORY : # 06/18/2003 Prakash Narayana (prakashn@us.ibm.com) # # CODE COVERAGE: 7.1% - fs/exportfs (Total Coverage) # 7.1% - fs/exportfs/expfs.c # ############################################################## NFS_SERVER="" REM_DISK_PART="" FS_TYPE="" MNT_POINT="/tmp/exportfs_$$" USAGE="$0 -h <nfs_server> -d <nfs_server_disk_partition> -t <server_fs_type>" ############################################################## # # Make sure that uid=root is running this script. # Validate the command line arguments. # Make sure that NFS Server is up with rsh is enabled. # Make sure that FS_TYPE package has been installed on NFS Server side. # Make sure that FS_TYPE module is built into the kernel or loaded # on NFS Server side. # ############################################################## if [ $UID != 0 ] then echo "FAILED: Must have root access to execute this script" exit 1 fi while getopts h:d:t: args do case $args in h) NFS_SERVER=$OPTARG ;; d) REM_DISK_PART=$OPTARG ;; t) FS_TYPE=$OPTARG ;; \?) echo $USAGE ; exit 1 ;; esac done if [ -z "$NFS_SERVER" ] then echo $USAGE echo "FAILED: NFS Server not specificed" exit 1 fi if [ -z "$REM_DISK_PART" ] then echo $USAGE echo "FAILED: NFS Server disk partition not specified" exit 1 fi if [ -z "$FS_TYPE" ] then echo $USAGE echo "FAILED: NFS Server file system type not specified" exit 1 fi # # How to check if it a valid block special device on NFS Server ??? # Add code here. ping -c 2 -w 15 $NFS_SERVER >/dev/null 2>&1 if [ $? != 0 ] then echo "FAILED: ping $NFS_SERVER failed" exit 1 fi rsh -n -l root $NFS_SERVER "ls -l /etc" >/dev/null 2>&1 if [ $? != 0 ] then echo "FAILED: rsh -n -l root $NFS_SERVER "ls -l /etc" failed" exit 1 fi rsh -n -l root $NFS_SERVER "rpm -q -a | grep $FS_TYPE" | grep $FS_TYPE >/dev/null 2>&1 if [ $? != 0 ] then rsh -n -l root $NFS_SERVER "grep $FS_TYPE /etc/filesystems" | grep $FS_TYPE >/dev/null 2>&1 if [ $? != 0 ] then rsh -n -l root $NFS_SERVER "grep $FS_TYPE /proc/filesystems" | grep $FS_TYPE >/dev/null 2>&1 if [ $? != 0 ] then echo "FAILED: $FS_TYPE package is not installed or loaded on $NFS_SERVER" exit 1 fi fi fi if [ "$FS_TYPE" = "reiserfs" ] then # rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE --format 3.6 -f $REM_DISK_PART >/dev/null 2>&1" rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE -f $REM_DISK_PART --format 3.6 >/dev/null 2>&1" echo "/sbin/mkfs -t $FS_TYPE --format 3.6 -f $REM_DISK_PART >/dev/null 2>&1" else # rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE $REM_DISK_PART >/dev/null 2>&1" QUIETFLAG= if [ "$FS_TYPE" = "jfs" ] then QUIETFLAG="-q" fi rsh -n -l root $NFS_SERVER "/sbin/mkfs -t $FS_TYPE $QUIETFLAG $REM_DISK_PART >/dev/null 2>&1" if [ $? != 0 ] then echo "FAILED: Could not /sbin/mkfs -t $FS_TYPE $REM_DISK_PART on $NFS_SERVER" exit 1 fi fi rsh -n -l root $NFS_SERVER "mkdir -p -m 777 $MNT_POINT" if [ $? != 0 ] then echo "FAILED: Could not mkdir -p -m 777 $MNT_POINT on $NFS_SERVER" exit 1 fi rsh -n -l root $NFS_SERVER "mount -t $FS_TYPE $REM_DISK_PART $MNT_POINT" if [ $? != 0 ] then echo "FAILED: Could not mount -t $FS_TYPE $REM_DISK_PART on $MNT_POINT" exit 1 fi rsh -n -l root $NFS_SERVER "chmod 777 $MNT_POINT" if [ $? != 0 ] then echo "FAILED: Could not chmod 777 $MNT_POINT on $NFS_SERVER" exit 1 fi rsh -n -l root $NFS_SERVER "/usr/sbin/exportfs -i -o no_root_squash,rw *:$MNT_POINT" if [ $? != 0 ] then rsh -n -l root $NFS_SERVER "umount $MNT_POINT" rsh -n -l root $NFS_SERVER "rm -rf $MNT_POINT" echo "FAILED: Could not export remote directory $MNT_POINT" exit 1 fi sleep 15 # Here is the code coverage for fs/exportfs # mkdir -p -m 777 $MNT_POINT mount -t nfs $NFS_SERVER:$MNT_POINT $MNT_POINT if [ $? != 0 ] then echo "FAILED: NFS mount failed" exit 1 fi mkdir -p -m 777 $MNT_POINT/test_dir echo "NFS mount of $FS_TYPE file system and I/O to NFS mount point generates the fs/exportfs code coverage" > $MNT_POINT/test_dir/exportfs_coverage ####################################################### # # Just before exit, perform NFS CLIENT & SERVER cleanup # ####################################################### umount $MNT_POINT rm -rf $MNT_POINT rsh -n -l root $NFS_SERVER "/usr/sbin/exportfs -u :$MNT_POINT" rsh -n -l root $NFS_SERVER "umount $MNT_POINT" rsh -n -l root $NFS_SERVER "rm -rf $MNT_POINT" echo "PASSED: $0 passed!" exit 0