grahamperrin

MacZFS prototype upstream 0.6.1, thanks folks

Jul 18th, 2013
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. mkdir $HOME/Developer
  3. mkdir $HOME/Developer/com
  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
Add Comment
Please, Sign In to add comment