File: init

package info (click to toggle)
flashybrid 0.16
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 200 kB
  • ctags: 4
  • sloc: sh: 194; makefile: 42
file content (160 lines) | stat: -rwxr-xr-x 3,823 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/sh

# Set up/shutdown the flashybrid system, including the ramdisk and partial
# directory bind mounts. This needs to run at the part of system bootup that
# mounts all the disks. It should also run at shutdown right before
# filesystems are unmounted.

# Licensed under the terms of GPL v2
#  Diego Iastrubni <diego.iastrubni@xorcom.com> 2006
#  Joey Hess <joeyh@debian.org> 2002-2006


### BEGIN INIT INFO
# Provides:          flashybrid
# Required-Start:    $all
# Required-Stop:     $syslog
# Should-Start:      $local_fs
# Should-Stop:       $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: automates use of a flash disk as the root filesystem
# Description:       Flashybrid is a system to help in setting up and managing hybrid
#                    flash/disk/ram based Debian systems which can run most of the time
#                    using only a small flash disk for their root filesystem and do a useful,
#                    but limited task (such as being a router, or a PDA, or a rescue system
#                    on a USB keydrive). The flash can be as small as 32 mb, though 64 to 256
#                    mb is more comfortable.
### END INIT INFO

CONFDIR=/etc/flashybrid
if [ -e $CONFDIR/config ]; then
	. $CONFDIR/config
fi

ENABLED=no
if [ -e /etc/default/flashybrid ]; then
	. /etc/default/flashybrid
fi

if [ -z "$RAMMOUNT" ]; then
	exit 0
fi

is_mounted () {
	grep -q " $1 " /proc/mounts
}

case "$1" in
start)
	if [ "$ENABLED" != yes ]; then
		echo "Not setting up flashybrid system: disabled."
		exit
	fi
	
	if [ ! -d "$RAMMOUNT" ] ; then
		echo "Error, RAMMOUNT directory is not found ($RAMMOUNT)"
		exit 1
	fi
	
	if [ "$VERBOSE" != yes ]; then
		echo -n "Setting up flashybrid system..."
	fi
		
	EXTRA_PARAMS=""
	
	if [ "xx$FLASH_MAX" != "xx" ]; then
	    EXTRA_PARAMS=" -o size=$FLASH_MAX "
	fi
			
	# Set up ram disk to hold variable data.
	if ! is_mounted $RAMMOUNT; then
		mount tmpfs -t tmpfs $RAMMOUNT $EXTRA_PARAMS
	fi

	# Temporary directories on ram disk.
	cp $CONFDIR/ramtmp $RAMMOUNT/.fh-config-ramtmp
	for dir in $(grep -v '^#' $CONFDIR/ramtmp); do
		if [ -d $dir ]; then
        		mkdir -p -m 1777 $RAMMOUNT/$dir
			if is_mounted $dir; then
				umount $dir
			fi
			mount --bind $RAMMOUNT/$dir $dir
		fi
	done

	# when syncing we will use this configuration for restoring,
	# as the user may modify the configuration on the disk, and completely
	# mess up the system, eventually making his machine unusable
	cp $CONFDIR/ramstore $RAMMOUNT/.fh-config-ramstore
	
	# Copy data from flash to ram disk for these directories
	for dir in $(grep -v '^#' $CONFDIR/ramstore); do
		# Skip dirs that are not present.
		if [ -d $dir ]; then
			if [ "$VERBOSE" = yes ]; then
			    echo -n "Syncrhonizing RAM - $dir"
			fi
			
			ramdir=$RAMMOUNT$dir
			if is_mounted $dir; then
				umount $dir
			fi
			
			if is_mounted $ramdir.flash; then
				umount $ramdir.flash
			fi
			
			if [ ! -d $ramdir ]; then
				mkdir -p ${ramdir%/*} # dirname
			        cp -a $dir $ramdir
			fi			
			mkdir -p $ramdir.flash
			mount --bind $dir $ramdir.flash
			mount --bind $ramdir $dir

			if [ "$VERBOSE" = yes ]; then
				echo "."
			fi
		fi
	done

	if [ "$VERBOSE" != yes ]; then
		echo "done."
	fi
	mountro
	;;

stop)
	if [ "$ENABLED" != yes ]; then
		echo "Not shutting down flashybrid system: disabled."
		exit
	fi
	
	fh-sync
	mountrw
	;;

reload)
	echo "This target is available only for compatibility."
	echo "Gracefully exiting"
	;;

restart)
	echo "This target is available only for compatibility, and usually will fail to work"
	echo "If you really want to restart this service please try 'force-reload'."
	echo 
	echo "Gracefully exiting"
	;;

force-reload)
	$0 stop
	$0 start
	;;

*)
	echo "Usage: $0 {start|stop|restart|force-reload}"
	exit 1
;;
esac