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 |