View difference between Paste ID: AM9bj6gH and qynPpMhr
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2
mkdir $HOME/Developer
3-
export SOURCEDIR="/Users/joe/Developer"
3+
mkdir $HOME/Developer/com
4-
export INSTALLDIR="/osxzfs"
4+
mkdir $HOME/Developer/com/github
5
mkdir $HOME/Developer/com/github/zfs-osx/
6
mkdir $HOME/Developer/com/github/zfs-osx/upstream-0.6.1
7
set -e
8
export SOURCEDIR=$HOME"/Developer/com/github/zfs-osx/upstream-0.6.1"
9
export INSTALLDIR="/zfs-osx/upstream-0.6.1"
10
export SOURCEOWNER="$SUDO_USER"
11
12
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
13
    sudo "$0" "$@"
14
    exit
15
fi
16
17
OPTS=$(/usr/bin/ruby - "$@" <<'EndOfRuby'
18
require 'getoptlong'
19
require 'rdoc/usage'
20
21
sourceowner=ENV['SOURCEOWNER']
22
installdir=ENV['INSTALLDIR']
23
sourcedir=ENV['SOURCEDIR']
24
25
longopts = GetoptLong.new(
26
  [ '--load', '-l', GetoptLong::NO_ARGUMENT ],
27
  [ '--configure', '-c', GetoptLong::NO_ARGUMENT ],
28
  [ '--make', '-m', GetoptLong::NO_ARGUMENT ],
29
  [ '--load-kexts-only', '-k', GetoptLong::NO_ARGUMENT ],
30
  [ '--dry-run', '-n', GetoptLong::NO_ARGUMENT ],
31
  [ '--source-owner', '-o', GetoptLong::REQUIRED_ARGUMENT ],
32
  [ '--install-dir', '-i', GetoptLong::REQUIRED_ARGUMENT ],
33
  [ '--source-dir', '-s' ,  GetoptLong::REQUIRED_ARGUMENT ],
34
  [ '--help', '-h' , GetoptLong::NO_ARGUMENT ]
35
)
36
37
simpleopts={}
38
begin
39
longopts.each do |opt, arg|
40
  case opt
41
    when '--help'
42
      #RDoc::usage
43
      simpleopts[:h]=1
44
    when '--load'
45
      simpleopts[:l]=1
46
    when '--make-only'
47
      simpleopts[:m]=1
48
    when '--load-kexts-only'
49
      simpleopts[:k]=1
50
    when '--configure-only'
51
      simpleopts[:c]=1
52
    when '--dry-run'
53
      simpleopts[:n]=1
54
    when '--source-owner'
55
      sourceowner = arg
56
    when '--install-dir'
57
      installdir = arg
58
    when '--source-dir'
59
      sourcedir = arg
60
  end
61
end
62
rescue => err
63
    simpleopts[:e]=1
64
end
65
66
puts "-"+simpleopts.keys.to_s + " " + sourceowner + " " + installdir + " " + sourcedir
67
EndOfRuby
68
)
69
70
(echo set -- "$OPTS" ; cat <<'EndOfBash'
71
export SOURCEOWNER="$2"
72
export INSTALLDIR="$3"
73
export SOURCEDIR="$4"
74
75
SHOULD_LOAD="no"
76
SHOULD_CONFIGURE="yes"
77
SHOULD_MAKE="yes"
78
MUST_SKIP_CONFIGURE_AND_MAKE="no"
79
DRY_RUN="no"
80
ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="no"
81
BOTH_CONFIGURE_AND_MAKE_SPECIFIED="no"
82
DISPLAY_HELP="no"
83
RUBY_OPTION_PARSING_ERROR="no"
84
SHOULD_INSTALL="yes"
85
SHOULD_UNLOAD="no"
86
87
while getopts "hlcmkne" opt; do
88
  case $opt in
89
    h)
90
      #echo "-h was triggered!" >&2
91
      DISPLAY_HELP="yes"
92
      ;;
93
    l)
94
      #echo "-l was triggered!" >&2
95
      SHOULD_LOAD="yes"
96
      ;;
97
    c)
98
      #echo "-c was triggered!" >&2
99
         SHOULD_CONFIGURE="yes"
100
         SHOULD_MAKE="no"
101
         if [ $ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
102
            BOTH_CONFIGURE_AND_MAKE_SPECIFIED="yes"
103
         fi
104
         ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="yes"
105
      ;;
106
    k)
107
      #echo "-k was triggered!" >&2
108
      MUST_SKIP_CONFIGURE_AND_MAKE="yes"
109
      SHOULD_INSTALL="no"
110
      SHOULD_LOAD="yes"
111
      ;;
112
    m)
113
      #echo "-m was triggered!" >&2
114
         SHOULD_MAKE="yes"
115
         SHOULD_CONFIGURE="no"
116
         if [ $ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
117
            BOTH_CONFIGURE_AND_MAKE_SPECIFIED="yes"
118
         fi
119
         ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="yes"
120
      ;;
121
    n)
122
      #echo "-n was triggered!" >&2
123
      DRY_RUN="yes"
124
      ;;
125
    e)
126
      RUBY_OPTION_PARSING_ERROR="yes"
127
      ;;
128
    \?)
129
      echo "Invalid option: -$OPTARG" >&2
130
      ;;
131
  esac
132
done
133
134
if [ $BOTH_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
135
   SHOULD_MAKE="yes"
136
   SHOULD_CONFIGURE="yes"
137
fi
138
139
if [ $MUST_SKIP_CONFIGURE_AND_MAKE = "yes" ] ; then
140
   SHOULD_MAKE="no"
141
   SHOULD_CONFIGURE="no"
142
fi
143
144
export SPLDIR="$SOURCEDIR"/spl
145
export ZFSDIR="$SOURCEDIR"/zfs
146
export SK="$INSTALLDIR"/spl.kext
147
export ZK="$INSTALLDIR"/zfs.kext
148
149
printf "Configuration will be ...\n"
150
printf "run configure: %s\n" $SHOULD_CONFIGURE
151
printf "run make: %s\n" $SHOULD_MAKE
152
printf "load kexts: %s\n" $SHOULD_LOAD
153
printf "source dir: %s\n" $SOURCEDIR
154
printf "spl git dir: %s\n" $SPLDIR
155
printf "zfs git dir: %s\n" $ZFSDIR
156
printf "install dir: %s\n" $INSTALLDIR
157
printf "spl kext dir: %s\n" $SK
158
printf "zfs kext dir: %s\n" $ZK
159
printf "source owner: %s\n" "$SOURCEOWNER"
160
printf "install dir: %s\n" "$INSTALLDIR"
161
printf "source dir: %s\n" "$SOURCEDIR"
162
163
if [ $RUBY_OPTION_PARSING_ERROR = "yes" ] ; then
164
   printf "Error parsing your options. Perhaps try --help.\n"
165
   exit 1
166
fi
167
168
if [ $DISPLAY_HELP = "yes" ] ; then
169
   echo "Options:"
170
   echo "-l or --load"
171
   echo "-c or --configure"
172
   echo "-m or --make"
173
   echo "-n or --dry-run"
174
   echo "-o or --source-owner"
175
   echo "-i or --install-dir"
176
   echo "-s or --source-dir"
177
   echo "-h or --help"
178
   exit 2
179
fi
180
181
if [ "$DRY_RUN" = "yes" ] ; then
182
   echo "Dry run."  
183
   exit 3
184
fi
185
186
if [ "$SHOULD_LOAD" = "yes" ] ; then
187
   SHOULD_UNLOAD="yes"
188
fi
189
190
if [ "$SHOULD_UNLOAD" = "yes" ] ; then
191
if [ $(kextstat -b net.lundman.zfs | wc -l) -gt 1 ] ; then
192
   printf "\nUnloading spl.kext...\n"
193
   sudo kextunload -b net.lundman.zfs
194
fi
195
if [ $(kextstat -b net.lundman.spl | wc -l) -gt 1 ] ; then
196
   printf "\nUnloading zfs.kext...\n"
197
   sudo kextunload -b net.lundman.spl
198
fi
199
fi
200
201
if [ "$SHOULD_CONFIGURE" = "yes" -o "$SHOULD_MAKE" = "yes" ] ; then
202
if [ ! -d "$SOURCEDIR" ] ; then
203
  sudo mkdir "$SOURCEDIR"
204
  sudo chown "$SOURCEOWNER":staff "$SOURCEDIR"
205
fi
206
if [ ! -d "$SPLDIR" ] ; then
207
  sudo mkdir -p "$SPLDIR"
208
  cd "$SPLDIR"/..
209
  sudo rmdir "$SPLDIR"
210
  sudo git clone https://github.com/zfs-osx/spl
211
  cd spl
212
  sudo git checkout upstream-0.6.1
213
  cd ..
214
  sudo chown -R "$SOURCEOWNER":staff spl
215
else
216
  sudo chown -R "$SOURCEOWNER":staff "$SPLDIR"
217
  cd "$SPLDIR"
218
  sudo -u "$SOURCEOWNER" git pull
219
  sudo -u "$SOURCEOWNER" git checkout upstream-0.6.1
220
fi
221
if [ ! -d "$ZFSDIR" ] ; then
222
  sudo mkdir -p "$ZFSDIR"
223
  cd "$ZFSDIR"/..
224
  sudo rmdir "$ZFSDIR"
225
  sudo git clone https://github.com/zfs-osx/zfs
226
  cd zfs
227
  sudo git checkout upstream-0.6.1
228
  cd ..
229
  sudo chown -R "$SOURCEOWNER":staff zfs
230
else
231
  sudo chown -R "$SOURCEOWNER":staff "$ZFSDIR"
232
  cd "$ZFSDIR"
233
  sudo -u "$SOURCEOWNER" git pull
234
  sudo -u "$SOURCEOWNER" git checkout upstream-0.6.1
235
fi
236
fi
237
238
if [ $SHOULD_CONFIGURE = "yes" ] ; then
239
cd "$SPLDIR"
240
sudo -u "$SOURCEOWNER" /bin/bash "$SPLDIR"/autogen.sh
241
sudo -u "$SOURCEOWNER" /bin/bash "$SPLDIR"/configure CC=clang CXX=clang++
242
243
cd "$ZFSDIR"
244
sudo -u "$SOURCEOWNER" /bin/bash "$ZFSDIR"/autogen.sh
245
sudo -u "$SOURCEOWNER" /bin/bash "$ZFSDIR"/configure CC=clang CXX=clang++ --with-spl="$SPLDIR"
246
fi
247
248
if [ $SHOULD_MAKE = "yes" ] ; then
249
cd "$SPLDIR"
250
sudo -u "$SOURCEOWNER" /usr/bin/make
251
cd "$ZFSDIR"
252
sudo -u "$SOURCEOWNER" /usr/bin/make
253
fi
254
255
if [ $SHOULD_CONFIGURE = "no" ] ; then
256
   printf "\nDid not run configure.\n"
257
fi
258
259
if [ $SHOULD_MAKE = "no" ] ; then
260
   printf "\nDid not run make.\n"
261
fi
262
263
if [ ! -d "$SK" -o ! -d "$ZK" ] ; then
264
   SHOULD_INSTALL=yes
265
fi
266
267
if [ $SHOULD_INSTALL = "yes" ] ; then
268
   sudo rm -rf "$SK"
269
   sudo rm -rf "$ZL"
270
   sudo mkdir -p "$INSTALLDIR"
271
   sudo cp -r "$SPLDIR"/module/spl/spl.kext "$INSTALLDIR"
272
   sudo cp -r "$ZFSDIR"/module/zfs/zfs.kext "$INSTALLDIR"
273
   sudo chown -R root:wheel "$SK"
274
   sudo chown -R root:wheel "$ZK"
275
fi
276
277
if [ "$SHOULD_LOAD" = "yes" ] ; then
278
   printf "\nLoading spl.kext...\n"
279
   sudo kextload "$SK"
280
   printf "\nLoading zfs.kext...\n\n"
281
   sudo kextload -d "$SK" "$ZK" 
282
else
283
   printf "\nYou need to load the kexts manually or specify -l or --load\n\n"
284
fi
285
open /zfs-osx/upstream-0.6.1
286
EndOfBash
287
) | /bin/bash
288
289
exit 0