Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- mkdir $HOME/Developer
- mkdir $HOME/Developer/com
- mkdir $HOME/Developer/com/github
- mkdir $HOME/Developer/com/github/zfs-osx/
- mkdir $HOME/Developer/com/github/zfs-osx/upstream-0.6.1
- set -e
- export SOURCEDIR=$HOME"/Developer/com/github/zfs-osx/upstream-0.6.1"
- export INSTALLDIR="/zfs-osx/upstream-0.6.1"
- export SOURCEOWNER="$SUDO_USER"
- if [[ $(/usr/bin/id -u) -ne 0 ]]; then
- sudo "$0" "$@"
- exit
- fi
- OPTS=$(/usr/bin/ruby - "$@" <<'EndOfRuby'
- require 'getoptlong'
- require 'rdoc/usage'
- sourceowner=ENV['SOURCEOWNER']
- installdir=ENV['INSTALLDIR']
- sourcedir=ENV['SOURCEDIR']
- longopts = GetoptLong.new(
- [ '--load', '-l', GetoptLong::NO_ARGUMENT ],
- [ '--configure', '-c', GetoptLong::NO_ARGUMENT ],
- [ '--make', '-m', GetoptLong::NO_ARGUMENT ],
- [ '--load-kexts-only', '-k', GetoptLong::NO_ARGUMENT ],
- [ '--dry-run', '-n', GetoptLong::NO_ARGUMENT ],
- [ '--source-owner', '-o', GetoptLong::REQUIRED_ARGUMENT ],
- [ '--install-dir', '-i', GetoptLong::REQUIRED_ARGUMENT ],
- [ '--source-dir', '-s' , GetoptLong::REQUIRED_ARGUMENT ],
- [ '--help', '-h' , GetoptLong::NO_ARGUMENT ]
- )
- simpleopts={}
- begin
- longopts.each do |opt, arg|
- case opt
- when '--help'
- #RDoc::usage
- simpleopts[:h]=1
- when '--load'
- simpleopts[:l]=1
- when '--make-only'
- simpleopts[:m]=1
- when '--load-kexts-only'
- simpleopts[:k]=1
- when '--configure-only'
- simpleopts[:c]=1
- when '--dry-run'
- simpleopts[:n]=1
- when '--source-owner'
- sourceowner = arg
- when '--install-dir'
- installdir = arg
- when '--source-dir'
- sourcedir = arg
- end
- end
- rescue => err
- simpleopts[:e]=1
- end
- puts "-"+simpleopts.keys.to_s + " " + sourceowner + " " + installdir + " " + sourcedir
- EndOfRuby
- )
- (echo set -- "$OPTS" ; cat <<'EndOfBash'
- export SOURCEOWNER="$2"
- export INSTALLDIR="$3"
- export SOURCEDIR="$4"
- SHOULD_LOAD="no"
- SHOULD_CONFIGURE="yes"
- SHOULD_MAKE="yes"
- MUST_SKIP_CONFIGURE_AND_MAKE="no"
- DRY_RUN="no"
- ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="no"
- BOTH_CONFIGURE_AND_MAKE_SPECIFIED="no"
- DISPLAY_HELP="no"
- RUBY_OPTION_PARSING_ERROR="no"
- SHOULD_INSTALL="yes"
- SHOULD_UNLOAD="no"
- while getopts "hlcmkne" opt; do
- case $opt in
- h)
- #echo "-h was triggered!" >&2
- DISPLAY_HELP="yes"
- ;;
- l)
- #echo "-l was triggered!" >&2
- SHOULD_LOAD="yes"
- ;;
- c)
- #echo "-c was triggered!" >&2
- SHOULD_CONFIGURE="yes"
- SHOULD_MAKE="no"
- if [ $ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
- BOTH_CONFIGURE_AND_MAKE_SPECIFIED="yes"
- fi
- ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="yes"
- ;;
- k)
- #echo "-k was triggered!" >&2
- MUST_SKIP_CONFIGURE_AND_MAKE="yes"
- SHOULD_INSTALL="no"
- SHOULD_LOAD="yes"
- ;;
- m)
- #echo "-m was triggered!" >&2
- SHOULD_MAKE="yes"
- SHOULD_CONFIGURE="no"
- if [ $ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
- BOTH_CONFIGURE_AND_MAKE_SPECIFIED="yes"
- fi
- ONE_OF_CONFIGURE_AND_MAKE_SPECIFIED="yes"
- ;;
- n)
- #echo "-n was triggered!" >&2
- DRY_RUN="yes"
- ;;
- e)
- RUBY_OPTION_PARSING_ERROR="yes"
- ;;
- \?)
- echo "Invalid option: -$OPTARG" >&2
- ;;
- esac
- done
- if [ $BOTH_CONFIGURE_AND_MAKE_SPECIFIED = "yes" ] ; then
- SHOULD_MAKE="yes"
- SHOULD_CONFIGURE="yes"
- fi
- if [ $MUST_SKIP_CONFIGURE_AND_MAKE = "yes" ] ; then
- SHOULD_MAKE="no"
- SHOULD_CONFIGURE="no"
- fi
- export SPLDIR="$SOURCEDIR"/spl
- export ZFSDIR="$SOURCEDIR"/zfs
- export SK="$INSTALLDIR"/spl.kext
- export ZK="$INSTALLDIR"/zfs.kext
- printf "Configuration will be ...\n"
- printf "run configure: %s\n" $SHOULD_CONFIGURE
- printf "run make: %s\n" $SHOULD_MAKE
- printf "load kexts: %s\n" $SHOULD_LOAD
- printf "source dir: %s\n" $SOURCEDIR
- printf "spl git dir: %s\n" $SPLDIR
- printf "zfs git dir: %s\n" $ZFSDIR
- printf "install dir: %s\n" $INSTALLDIR
- printf "spl kext dir: %s\n" $SK
- printf "zfs kext dir: %s\n" $ZK
- printf "source owner: %s\n" "$SOURCEOWNER"
- printf "install dir: %s\n" "$INSTALLDIR"
- printf "source dir: %s\n" "$SOURCEDIR"
- if [ $RUBY_OPTION_PARSING_ERROR = "yes" ] ; then
- printf "Error parsing your options. Perhaps try --help.\n"
- exit 1
- fi
- if [ $DISPLAY_HELP = "yes" ] ; then
- echo "Options:"
- echo "-l or --load"
- echo "-c or --configure"
- echo "-m or --make"
- echo "-n or --dry-run"
- echo "-o or --source-owner"
- echo "-i or --install-dir"
- echo "-s or --source-dir"
- echo "-h or --help"
- exit 2
- fi
- if [ "$DRY_RUN" = "yes" ] ; then
- echo "Dry run."
- exit 3
- fi
- if [ "$SHOULD_LOAD" = "yes" ] ; then
- SHOULD_UNLOAD="yes"
- fi
- if [ "$SHOULD_UNLOAD" = "yes" ] ; then
- if [ $(kextstat -b net.lundman.zfs | wc -l) -gt 1 ] ; then
- printf "\nUnloading spl.kext...\n"
- sudo kextunload -b net.lundman.zfs
- fi
- if [ $(kextstat -b net.lundman.spl | wc -l) -gt 1 ] ; then
- printf "\nUnloading zfs.kext...\n"
- sudo kextunload -b net.lundman.spl
- fi
- fi
- if [ "$SHOULD_CONFIGURE" = "yes" -o "$SHOULD_MAKE" = "yes" ] ; then
- if [ ! -d "$SOURCEDIR" ] ; then
- sudo mkdir "$SOURCEDIR"
- sudo chown "$SOURCEOWNER":staff "$SOURCEDIR"
- fi
- if [ ! -d "$SPLDIR" ] ; then
- sudo mkdir -p "$SPLDIR"
- cd "$SPLDIR"/..
- sudo rmdir "$SPLDIR"
- sudo git clone https://github.com/zfs-osx/spl
- cd spl
- sudo git checkout upstream-0.6.1
- cd ..
- sudo chown -R "$SOURCEOWNER":staff spl
- else
- sudo chown -R "$SOURCEOWNER":staff "$SPLDIR"
- cd "$SPLDIR"
- sudo -u "$SOURCEOWNER" git pull
- sudo -u "$SOURCEOWNER" git checkout upstream-0.6.1
- fi
- if [ ! -d "$ZFSDIR" ] ; then
- sudo mkdir -p "$ZFSDIR"
- cd "$ZFSDIR"/..
- sudo rmdir "$ZFSDIR"
- sudo git clone https://github.com/zfs-osx/zfs
- cd zfs
- sudo git checkout upstream-0.6.1
- cd ..
- sudo chown -R "$SOURCEOWNER":staff zfs
- else
- sudo chown -R "$SOURCEOWNER":staff "$ZFSDIR"
- cd "$ZFSDIR"
- sudo -u "$SOURCEOWNER" git pull
- sudo -u "$SOURCEOWNER" git checkout upstream-0.6.1
- fi
- fi
- if [ $SHOULD_CONFIGURE = "yes" ] ; then
- cd "$SPLDIR"
- sudo -u "$SOURCEOWNER" /bin/bash "$SPLDIR"/autogen.sh
- sudo -u "$SOURCEOWNER" /bin/bash "$SPLDIR"/configure CC=clang CXX=clang++
- cd "$ZFSDIR"
- sudo -u "$SOURCEOWNER" /bin/bash "$ZFSDIR"/autogen.sh
- sudo -u "$SOURCEOWNER" /bin/bash "$ZFSDIR"/configure CC=clang CXX=clang++ --with-spl="$SPLDIR"
- fi
- if [ $SHOULD_MAKE = "yes" ] ; then
- cd "$SPLDIR"
- sudo -u "$SOURCEOWNER" /usr/bin/make
- cd "$ZFSDIR"
- sudo -u "$SOURCEOWNER" /usr/bin/make
- fi
- if [ $SHOULD_CONFIGURE = "no" ] ; then
- printf "\nDid not run configure.\n"
- fi
- if [ $SHOULD_MAKE = "no" ] ; then
- printf "\nDid not run make.\n"
- fi
- if [ ! -d "$SK" -o ! -d "$ZK" ] ; then
- SHOULD_INSTALL=yes
- fi
- if [ $SHOULD_INSTALL = "yes" ] ; then
- sudo rm -rf "$SK"
- sudo rm -rf "$ZL"
- sudo mkdir -p "$INSTALLDIR"
- sudo cp -r "$SPLDIR"/module/spl/spl.kext "$INSTALLDIR"
- sudo cp -r "$ZFSDIR"/module/zfs/zfs.kext "$INSTALLDIR"
- sudo chown -R root:wheel "$SK"
- sudo chown -R root:wheel "$ZK"
- fi
- if [ "$SHOULD_LOAD" = "yes" ] ; then
- printf "\nLoading spl.kext...\n"
- sudo kextload "$SK"
- printf "\nLoading zfs.kext...\n\n"
- sudo kextload -d "$SK" "$ZK"
- else
- printf "\nYou need to load the kexts manually or specify -l or --load\n\n"
- fi
- open /zfs-osx/upstream-0.6.1
- EndOfBash
- ) | /bin/bash
- exit 0
Add Comment
Please, Sign In to add comment