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 |