You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
5.5 KiB
209 lines
5.5 KiB
#!/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
|