1 #!/bin/bash 2 3 4 ############################################################## 5 # 6 # Copyright (c) International Business Machines Corp., 2003 7 # 8 # This program is free software; you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation; either version 2 of the License, or 11 # (at your option) any later version. 12 # 13 # This program is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 16 # the GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with this program; if not, write to the Free Software 20 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 # 22 # FILE : autofs4.sh 23 # USAGE : autofs4.sh <disk_partition> 24 # 25 # DESCRIPTION : A script that will test autofs on Linux system. 26 # REQUIREMENTS: 27 # 1) System with a floppy device with a floppy disk in it. 28 # 2) A spare (scratch) disk partition of 100MB or larger. 29 # 30 # HISTORY : 31 # 06/11/2003 Prakash Narayana (prakashn (at] us.ibm.com) 32 # 33 # CODE COVERAGE: 26.8% - fs/autofs4 (Total Coverage) 34 # 35 # 24.1% - fs/autofs4/expire.c 36 # 33.3% - fs/autofs4/init.c 37 # 24.0% - fs/autofs4/inode.c 38 # 29.9% - fs/autofs4/root.c 39 # 0.0% - fs/autofs4/symlink.c 40 # 29.1% - fs/autofs4/waitq.c 41 # 42 ############################################################## 43 44 45 ############################################################## 46 # 47 # Make sure that uid=root is running this script. 48 # Validate the command line argument as a block special device. 49 # Make sure that autofs package has been installed. 50 # Make sure that autofs module is built into the kernel or loaded. 51 # 52 ############################################################## 53 54 if [ $UID != 0 ] 55 then 56 echo "FAILED: Must have root access to execute this script" 57 exit 1 58 fi 59 60 if [ $# != 1 ] 61 then 62 echo "FAILED: Usage $0 <disk_partition>" 63 exit 1 64 else 65 disk_partition=$1 66 if [ ! -b $disk_partition ] 67 then 68 echo "FAILED: Usage $0 <block special disk_partition>" 69 exit 1 70 fi 71 mkfs -t ext2 $disk_partition >/dev/null 2>&1 72 fi 73 74 rpm -q -a | grep autofs >/dev/null 2>&1 75 if [ $? != 0 ] 76 then 77 echo "FAILED: autofs package is not installed" 78 exit 1 79 fi 80 81 grep autofs /proc/filesystems >/dev/null 2>&1 82 if [ $? != 0 ] 83 then 84 echo "FAILED: autofs module is not built into the kernel or loaded" 85 exit 1 86 fi 87 88 89 ############################################################## 90 # 91 # Pick the floppy device name from /etc/fstab 92 # Format (mkfs -t ext2) the floppy to ext2 file system 93 # Create the /etc/auto.master 94 # Create the /etc/auto.media 95 # Create /AUTOFS directory. 96 # 97 ############################################################## 98 99 floppy_dev=`grep floppy /etc/fstab | awk '{print $1}'` 100 101 if [ $floppy_dev != "" ] 102 then 103 /sbin/mkfs -t ext2 $floppy_dev >/dev/null 2>&1 104 if [ $? != 0 ] 105 then 106 echo "FAILED: mkfs -t ext2 $floppy_dev failed" 107 exit 1 108 fi 109 fi 110 111 if [ ! -d /AUTOFS ] 112 then 113 mkdir -m 755 /AUTOFS 114 fi 115 116 echo "/AUTOFS/MEDIA /etc/auto.media " > /etc/auto.master 117 echo "floppy -fstype=ext2 :$floppy_dev" > /etc/auto.media 118 119 120 ############################################################## 121 # 122 # Verify that "/etc/init.d/autofs start|restart|stop|status|reload" 123 # command works. 124 # 125 # If fails, cleanup and exit. 126 # 127 ############################################################## 128 129 /etc/init.d/autofs start >/dev/null 2>&1 130 if [ $? != 0 ] 131 then 132 rm -rf /etc/auto.master /etc/auto.media /AUTOFS 133 echo "FAILED: "/etc/init.d/autofs start"" 134 exit 1 135 fi 136 echo "Resuming test, please wait..." 137 sleep 15 138 139 /etc/init.d/autofs stop >/dev/null 2>&1 140 if [ $? != 0 ] 141 then 142 rm -rf /etc/auto.master /etc/auto.media /AUTOFS 143 echo "FAILED: "/etc/init.d/autofs stop"" 144 exit 1 145 else 146 /etc/init.d/autofs start >/dev/null 2>&1 147 fi 148 sleep 15 149 150 /etc/init.d/autofs restart >/dev/null 2>&1 151 if [ $? != 0 ] 152 then 153 /etc/init.d/autofs stop >/dev/null 2>&1 154 rm -rf /etc/auto.master /etc/auto.media /AUTOFS 155 echo "FAILED: "/etc/init.d/autofs restart"" 156 exit 1 157 fi 158 echo "Resuming test, please wait..." 159 sleep 15 160 161 /etc/init.d/autofs status >/dev/null 2>&1 162 if [ $? != 0 ] 163 then 164 /etc/init.d/autofs stop >/dev/null 2>&1 165 rm -rf /etc/auto.master /etc/auto.media /AUTOFS 166 echo "FAILED: "/etc/init.d/autofs status"" 167 exit 1 168 fi 169 170 /etc/init.d/autofs reload >/dev/null 2>&1 171 if [ $? != 0 ] 172 then 173 /etc/init.d/autofs stop >/dev/null 2>&1 174 rm -rf /etc/auto.master /etc/auto.media /AUTOFS 175 echo "FAILED: "/etc/init.d/autofs reload"" 176 exit 1 177 fi 178 179 180 ############################################################## 181 # 182 # Tryout some error code paths by: 183 # (1) Write into automount directory 184 # (2) Remove automount parent directory 185 # (3) Automount the floppy disk 186 # (4) Hit automounter timeout by sleep 60; then wakeup with error 187 # condition. 188 # 189 ############################################################## 190 191 mkdir /AUTOFS/MEDIA/mydir >/dev/null 2>&1 192 rm -rf /AUTOFS >/dev/null 2>&1 193 194 mkdir /AUTOFS/MEDIA/floppy/test 195 cp /etc/auto.master /etc/auto.media /AUTOFS/MEDIA/floppy/test 196 sync; sync 197 echo "Resuming test, please wait..." 198 sleep 60 199 mkdir /AUTOFS/MEDIA/mydir >/dev/null 2>&1 200 rm -rf /AUTOFS >/dev/null 2>&1 201 202 203 ############################################################## 204 # 205 # Add an entry to the /etc/auto.master and reload. 206 # 207 ############################################################## 208 209 echo "/AUTOFS/DISK /etc/auto.disk " >> /etc/auto.master 210 echo "disk -fstype=ext2 :$disk_partition " > /etc/auto.disk 211 /etc/init.d/autofs reload >/dev/null 2>&1 212 echo "Resuming test, please wait..." 213 sleep 30 214 215 mkdir /AUTOFS/DISK/disk/test 216 cp /etc/auto.master /etc/auto.media /AUTOFS/DISK/disk/test 217 sync; sync 218 echo "Resuming test, please wait..." 219 sleep 60 220 221 cd /AUTOFS/DISK/disk/test 222 umount /AUTOFS/DISK/disk/ >/dev/null 2>&1 223 if [ $? = 0 ] 224 then 225 /etc/init.d/autofs stop >/dev/null 2>&1 226 rm -rf /etc/auto.master /etc/auto.media /etc/auto.disk /AUTOFS 227 echo "FAILED: unmounted a busy file system!" 228 exit 1 229 fi 230 cd 231 232 umount /AUTOFS/DISK/disk/ >/dev/null 2>&1 233 if [ $? != 0 ] 234 then 235 /etc/init.d/autofs stop >/dev/null 2>&1 236 rm -rf /etc/auto.master /etc/auto.media /etc/auto.disk /AUTOFS 237 echo "FAILED: Could not unmount automounted file system" 238 exit 1 239 fi 240 241 # 242 # Mount the disk partition somewhere else and then reference automount 243 # point for disk partition. 244 # 245 mount -t ext2 $disk_partition /mnt/ 246 ls -l /AUTOFS/DISK/disk 247 umount /mnt 248 249 250 ####################################################### 251 # 252 # Just before exit, stop autofs and cleanup. 253 # 254 ####################################################### 255 256 /etc/init.d/autofs stop >/dev/null 2>&1 257 rm -rf /etc/auto.master /etc/auto.media /etc/auto.disk /AUTOFS 258 echo "PASSED: $0 passed!" 259 exit 0 260