Changeset 2033649


Ignore:
Timestamp:
11/20/13 10:58:52 (8 months ago)
Author:
Kris Moore <kris@…>
Branches:
master, releng/10.0, releng/10.0.1, releng/10.0.2
Children:
d5f3b1a
Parents:
82bbc1b6
Message:

Improve the text-installer, add the ability to set dataset options
via dialog menus

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src-sh/pc-installdialog/pc-installdialog.sh

    rc02fc90 r2033649  
    1919 
    2020# Ugly master list of settable ZFS properties 
    21 ZPROPS="aclinherit(discard|noallow|restricted|passthrough|passthrough-x),aclmode(discard|groupmask|passthrough|restricted),atime(on|off),canmount(on|off|noauto),checksum(on|off|fletcher2|fletcher4|sha256),compression(on|off|lzjb|gzip|zle|lz4),copies(1|2|3),dedup(on|off|verify|sha256),exec(on|off),primarycache(all|none|metadata),readonly=(on|off),secondarycache(all|none|metadata),setuid(on|off),sharenfs(on|off),logbias=latency|throughput),snapdir=(hidden|visible),sync=(standard|always|disabled),jailed=(off|on)" 
     21ZPROPS="aclinherit(discard|noallow|restricted|passthrough|passthrough-x),aclmode(discard|groupmask|passthrough|restricted),atime(on|off),canmount(on|off|noauto),checksum(on|off|fletcher2|fletcher4|sha256),compress(on|off|lzjb|gzip|zle|lz4),copies(1|2|3),dedup(on|off|verify|sha256),exec(on|off),primarycache(all|none|metadata),readonly(on|off),secondarycache(all|none|metadata),setuid(on|off),sharenfs(on|off),logbias(latency|throughput),snapdir(hidden|visible),sync(standard|always|disabled),jailed(off|on)" 
    2222 
    2323PCSYS="/usr/local/sbin/pc-sysinstall" 
     
    5757} 
    5858 
     59get_zfs_dset_opt() 
     60{ 
     61  local changeOpt="$1" 
     62  dOpts="" 
     63 
     64  # Build a list of dataset options to display 
     65  for z in `echo $ZPROPS | sed 's|,| |g'` 
     66  do 
     67    zOpt=`echo $z | cut -d '(' -f 1` 
     68    if [ "$zOpt" != "$changeOpt" ] ; then continue ; fi 
     69 
     70    zOps=`echo $z | cut -d '(' -f 2 | cut -d ')' -f 1` 
     71    for o in `echo $zOps | sed 's,|, ,g'` 
     72    do 
     73       d="$o"  
     74       desc="($o)" 
     75       dOpts="$dOpts $d \"$desc\"" 
     76    done 
     77    break 
     78  done 
     79 
     80  # Ask what to do on this dataset 
     81  get_dlg_ans "--menu \"Set option for $changeOpt on $2\" 22 50 15 unset 'Unset this option' cancel 'Cancel' ${dOpts}" 
     82  if [ -z "$ANS" ] ; then 
     83     exit_err "Invalid option selected!" 
     84  fi 
     85 
     86  if [ "$ANS" = "unset" ] ; then ANS="" ; fi 
     87  if [ "$ANS" = "cancel" ] ; then ANS="CANCELED" ; fi 
     88  VAL=$ANS ; export VAL 
     89} 
     90 
    5991edit_dataset() 
    6092{ 
    61     # Ask what to do on this dataset 
    62     get_dlg_ans "--menu \"What to do on this dataset?\" 22 50 15 edit 'Set ZFS options' delete 'Remove the dataset' cancel 'Cancel'" 
    63     if [ -z "$ANS" ] ; then 
    64        exit_err "Invalid dataset selected!" 
    65     fi 
    66     case $ANS in 
    67       cancel) return ;; 
    68         edit) get_dlg_ans "--inputbox 'Enter ZFS option flags, using a | seperator.' 8 40" 
    69               NEWLAYOUT="" 
    70               for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
    71               do 
    72                  d=`echo $z | cut -d '(' -f 1` 
    73                  if [ "$d" = "$1" ] ; then  
    74                    opt="" 
    75                    if [ -n "$ANS" ] ; then opt="($ANS)"; fi 
    76                    if [ -z "$NEWLAYOUT" ] ; then 
    77                      NEWLAYOUT="${d}${opt}" 
    78                    else 
    79                      NEWLAYOUT="$NEWLAYOUT,${d}${opt}" 
    80                    fi 
     93 
     94  dOpts="" 
     95 
     96  # Pull a list of dataset options from the users layout 
     97  for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
     98  do 
     99     d=`echo $z | cut -d '(' -f 1` 
     100     if [ "$d" != "$1" ] ; then continue ; fi 
     101     curOpts="`echo $z | cut -d '(' -f 2 | cut -d ')' -f 1`" 
     102  done 
     103 
     104  # Build a list of dataset options to display 
     105  for z in `echo $ZPROPS | sed 's|,| |g'` 
     106  do 
     107    d=`echo $z | cut -d '(' -f 1` 
     108    desc="(unset)" 
     109    for o in `echo $curOpts | sed 's,|, ,g'` 
     110    do 
     111       _opt="`echo $o | cut -d '=' -f 1`" 
     112       if [ "$_opt" != "$d" ] ; then continue ; fi 
     113       desc="(`echo $o | cut -d '=' -f 2`)" 
     114    done 
     115    dOpts="$dOpts $d \"$desc\"" 
     116  done 
     117 
     118  # Ask what to do on this dataset 
     119  get_dlg_ans "--menu \"Editing dataset: ${1}\" 22 50 15 delete 'Remove the dataset' cancel 'Cancel' ${dOpts}" 
     120  if [ -z "$ANS" ] ; then 
     121     exit_err "Invalid dataset selected!" 
     122  fi 
     123  case $ANS in 
     124    cancel) return ;; 
     125    delete) NEWLAYOUT="" 
     126            for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
     127            do 
     128              d=`echo $z | cut -d '(' -f 1`   
     129              if [ "$d" = "$1" ] ; then continue ; fi 
     130              if [ -z "$NEWLAYOUT" ] ; then 
     131                NEWLAYOUT="${z}" 
     132              else 
     133                NEWLAYOUT="$NEWLAYOUT,${z}" 
     134              fi 
     135            done 
     136            ZFSLAYOUT="$NEWLAYOUT" 
     137            ;; 
     138         *) cOpt=$ANS  
     139            get_zfs_dset_opt "$cOpt" "$1" 
     140            newOpt="$VAL" 
     141            if [ "$newOpt" = "CANCELED" ] ; then return ; fi 
     142 
     143            NEWLAYOUT="" 
     144            for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
     145            do 
     146               d=`echo $z | cut -d '(' -f 1` 
     147               if [ "$d" != "$1" ] ; then  
     148                 if [ -z "$NEWLAYOUT" ] ; then 
     149                   NEWLAYOUT="${z}" 
    81150                 else 
    82                    if [ -z "$NEWLAYOUT" ] ; then 
    83                      NEWLAYOUT="${z}" 
    84                    else 
    85                      NEWLAYOUT="$NEWLAYOUT,${z}" 
    86                    fi 
    87                  fi 
    88               done 
    89               ZFSLAYOUT="$NEWLAYOUT" 
    90               ;; 
    91       delete) NEWLAYOUT="" 
    92               for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
    93               do 
    94                  d=`echo $z | cut -d '(' -f 1`   
    95                  if [ "$d" = "$1" ] ; then continue ; fi 
    96                  if [ -z "$NEWLAYOUT" ] ; then 
    97                    NEWLAYOUT="${z}" 
    98                  else 
    99                    NEWLAYOUT="$NEWLAYOUT,${z}" 
     151                   NEWLAYOUT="$NEWLAYOUT,${z}" 
    100152                 fi 
    101               done 
    102               ZFSLAYOUT="$NEWLAYOUT" 
    103              ;; 
    104     esac 
     153                 continue 
     154               fi 
     155                 
     156               # Add this option to our optList 
     157               NEWOPTLIST="" 
     158               optList="`echo $z | cut -d '(' -f 2 | cut -d ')' -f 1`" 
     159               if [ "$optList" = "$z" ] ; then optList="" ; fi 
     160               addedOpt=0 
     161               for o in `echo $optList | sed 's,|, ,g'` 
     162               do 
     163                  _opt="`echo $o | cut -d '=' -f 1`" 
     164                  if [ "$_opt" != "$cOpt" ] ; then 
     165                     if [ -z "$NEWOPTLIST" ] ; then 
     166                        NEWOPTLIST="${o}" 
     167                     else 
     168                        NEWOPTLIST="$NEWOPTLIST|${o}" 
     169                     fi 
     170                     continue 
     171                  fi 
     172                  addedOpt=1 
     173                  # If the user unset this opt, lets skip adding it 
     174                  if [ -z "$newOpt" ] ; then continue ; fi 
     175                  if [ -z "$NEWOPTLIST" ] ; then 
     176                     NEWOPTLIST="${cOpt}=${newOpt}" 
     177                  else 
     178                     NEWOPTLIST="$NEWOPTLIST|${cOpt}=${newOpt}" 
     179                  fi 
     180               done 
     181 
     182               # If we need to add the opt fresh 
     183               if [ $addedOpt -eq 0 ] ; then 
     184                  if [ -z "$NEWOPTLIST" ] ; then 
     185                     NEWOPTLIST="${cOpt}=${newOpt}" 
     186                  else 
     187                     NEWOPTLIST="$NEWOPTLIST|${cOpt}=${newOpt}" 
     188                  fi 
     189               fi 
     190 
     191               opt="" 
     192               if [ -n "$NEWOPTLIST" ] ; then opt="($NEWOPTLIST)"; fi 
     193               if [ -z "$NEWLAYOUT" ] ; then 
     194                  NEWLAYOUT="${d}${opt}" 
     195               else 
     196                  NEWLAYOUT="$NEWLAYOUT,${d}${opt}" 
     197               fi 
     198            done 
     199            ZFSLAYOUT="$NEWLAYOUT" 
     200            ;; 
     201  esac 
    105202} 
    106203 
Note: See TracChangeset for help on using the changeset viewer.