Advertisement
Guest User

Untitled

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