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.
		
		
		
		
		
			
		
			
				
					
					
						
							195 lines
						
					
					
						
							3.4 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							195 lines
						
					
					
						
							3.4 KiB
						
					
					
				
								#!/bin/sh
							 | 
						|
								
							 | 
						|
								. /etc/init.d/globals
							 | 
						|
								
							 | 
						|
								SRVFLAG=/var/etc/.srv
							 | 
						|
								
							 | 
						|
								MTAB=/etc/mtab
							 | 
						|
								FSTAB=/etc/fstab
							 | 
						|
								if [ -e /var/etc/fstab ]; then
							 | 
						|
									FSTAB=/var/etc/fstab
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								is_mount()
							 | 
						|
								{
							 | 
						|
									RET=1
							 | 
						|
									test -f $MTAB || return $RET
							 | 
						|
									while read _DEV _MTPT _FSTYPE _OPTS _REST
							 | 
						|
									do
							 | 
						|
										case "$_FSTYPE" in
							 | 
						|
											"tmpfs") continue ;;
							 | 
						|
										esac
							 | 
						|
										case "$1" in
							 | 
						|
											"$_DEV"|"$_MTPT") RET=0; break ;;
							 | 
						|
										esac
							 | 
						|
									done < $MTAB
							 | 
						|
									return $RET
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								mount_local()
							 | 
						|
								{
							 | 
						|
									SHOWINFO "mount all local stuff from $FSTAB"
							 | 
						|
									test -f $FSTAB || return
							 | 
						|
									while read DEV MTPT FSTYPE OPTS REST
							 | 
						|
									do
							 | 
						|
										case "$DEV" in
							 | 
						|
											""|\#*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
										case "$OPTS" in
							 | 
						|
											noauto|*,noauto|noauto,*|*,noauto,*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
										case "$FSTYPE" in
							 | 
						|
											swap)
							 | 
						|
												#SHOWINFO "enable all swaps from $FSTAB"
							 | 
						|
												#swapon -a
							 | 
						|
												SHOWINFO "ignoring all swaps from $FSTAB"
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
											nfs|cifs)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
											*)
							 | 
						|
												test -d $MTPT || mkdir -p $MTPT;
							 | 
						|
												SHOWINFO "trying to mount $DEV to $MTPT"
							 | 
						|
												if OUT=$(mount $MTPT 2>&1 >/dev/null)
							 | 
						|
												then
							 | 
						|
													RET=$?
							 | 
						|
													LOGINFO "mount: $MTPT - success ($RET)"
							 | 
						|
												else
							 | 
						|
													RET=$?
							 | 
						|
													LOGWARN "mount: $MTPT - failed ($RET)"
							 | 
						|
													echo "$OUT" | LOGWARN
							 | 
						|
												fi
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
									done < $FSTAB
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								mount_netfs()
							 | 
						|
								{
							 | 
						|
									SHOWINFO "mount all netfs stuff from $FSTAB"
							 | 
						|
									test -f $FSTAB || return
							 | 
						|
									rm -f $SRVFLAG
							 | 
						|
									while read DEV MTPT FSTYPE OPTS REST
							 | 
						|
									do
							 | 
						|
										case "$DEV" in
							 | 
						|
											""|\#*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
									        case "$OPTS" in
							 | 
						|
											noauto|*,noauto|noauto,*|*,noauto,*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
										case "$FSTYPE" in
							 | 
						|
											nfs|cifs)
							 | 
						|
												if ! is_mount $MTPT; then
							 | 
						|
													test -d $MTPT || mkdir -p $MTPT;
							 | 
						|
													SHOWINFO "trying to mount $DEV to $MTPT"
							 | 
						|
													(
							 | 
						|
													try=51
							 | 
						|
													while(true); do
							 | 
						|
														if OUT=$(mount $MTPT 2>&1 >/dev/null); then
							 | 
						|
															RET=$?
							 | 
						|
															LOGINFO "mount: $MTPT - success ($RET)"
							 | 
						|
															test -e $SRVFLAG || touch $SRVFLAG
							 | 
						|
															break
							 | 
						|
														else
							 | 
						|
															RET=$?
							 | 
						|
															LOGWARN "mount: $MTPT - failed ($RET)"
							 | 
						|
															echo "$OUT" | LOGWARN
							 | 
						|
															if [ ${try:1:1} -eq ${try:0:1} ]; then
							 | 
						|
																LOGWARN "mount: $MTPT - cancel!"
							 | 
						|
																break
							 | 
						|
															fi
							 | 
						|
															try=$((try+1))
							 | 
						|
															LOGWARN "mount: $MTPT - try ${try:1:1} in 30 seconds ..."
							 | 
						|
															sleep 30
							 | 
						|
														fi
							 | 
						|
													done
							 | 
						|
													) &
							 | 
						|
												else
							 | 
						|
													SHOWINFO "already mounted $MTPT"
							 | 
						|
													test -e $SRVFLAG || touch $SRVFLAG
							 | 
						|
												fi
							 | 
						|
											;;
							 | 
						|
											*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
									done < $FSTAB
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								umount_netfs()
							 | 
						|
								{
							 | 
						|
									SHOWINFO "unmount all netfs stuff from $MTAB"
							 | 
						|
									test -f $MTAB || return
							 | 
						|
									rm -f $SRVFLAG
							 | 
						|
									while read DEV MTPT FSTYPE OPTS REST
							 | 
						|
									do
							 | 
						|
										case "$OPTS" in
							 | 
						|
											noauto|*,noauto|noauto,*|*,noauto,*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
										case "$FSTYPE" in
							 | 
						|
											nfs|cifs)
							 | 
						|
												SHOWINFO "trying to unmount $DEV from $MTPT"
							 | 
						|
												(
							 | 
						|
												if OUT=$(umount -f $MTPT 2>&1 >/dev/null); then
							 | 
						|
													RET=$?
							 | 
						|
													LOGINFO "umount: $MTPT - success ($RET)"
							 | 
						|
												else
							 | 
						|
													RET=$?
							 | 
						|
													LOGWARN "umount: $MTPT - failed ($RET)"
							 | 
						|
													echo "$OUT" | LOGWARN
							 | 
						|
													test -e $SRVFLAG || touch $SRVFLAG
							 | 
						|
												fi
							 | 
						|
												) &
							 | 
						|
											;;
							 | 
						|
											*)
							 | 
						|
												continue
							 | 
						|
											;;
							 | 
						|
										esac
							 | 
						|
									done < $MTAB
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								if [ -e /tmp/.flash.start ]; then
							 | 
						|
									SHOWINFO "flash.start flag found"
							 | 
						|
									umount_netfs
							 | 
						|
									SHOWINFO "exiting"
							 | 
						|
									exit 0
							 | 
						|
								fi
							 | 
						|
								
							 | 
						|
								case "$1" in
							 | 
						|
									"start")
							 | 
						|
										mount_local
							 | 
						|
										mount_netfs
							 | 
						|
									;;
							 | 
						|
									"start_netfs")
							 | 
						|
										mount_netfs
							 | 
						|
									;;
							 | 
						|
									"stop_netfs")
							 | 
						|
										umount_netfs
							 | 
						|
									;;
							 | 
						|
									"stop")
							 | 
						|
										umount_netfs
							 | 
						|
								
							 | 
						|
										#SHOWINFO "unmount all sysfs, tmpfs, devpts and usbfs mounts"
							 | 
						|
										#umount -a -t sysfs, tmpfs, devpts, usbfs
							 | 
						|
								
							 | 
						|
										#SHOWINFO "disable all swaps"
							 | 
						|
										#swapoff -a
							 | 
						|
								
							 | 
						|
										#SHOWINFO "detach jffs2 filesystems"
							 | 
						|
										#umount -l -t jffs2
							 | 
						|
									;;
							 | 
						|
									*)
							 | 
						|
										echo "[$BASENAME] Usage: $0 {start|start_netfs|stop_netfs|stop}"
							 | 
						|
									;;
							 | 
						|
								esac
							 | 
						|
								
							 |