Changeset da3ea2c


Ignore:
Timestamp:
11/25/13 08:29:30 (21 months ago)
Author:
Kris Moore <kris@…>
Branches:
9.2-release
Children:
35c58eb1
Parents:
021139d
Message:

Backport fixes to pc-installdialog for ZFS dataset options and such

File:
1 edited

Legend:

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

    ra6c8b4a rda3ea2c  
    1818ZFSLAYOUT="/,/root,/tmp(compress=lz4),/usr(canmount=off),/usr/home,/usr/jails,/usr/obj(compress=lz4),/usr/pbi,/usr/ports(compress=lz4),/usr/ports/distfiles(compress=off),/usr/src(compress=lz4),/var(canmount=off),/var/audit(compress=lz4),/var/log(compress=lz4),/var/tmp(compress=lz4)" 
    1919 
    20 # Location of pc-sysinstall 
     20# Ugly master list of settable ZFS properties 
     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)" 
     22 
    2123PCSYS="/usr/local/sbin/pc-sysinstall" 
    2224 
     
    5557} 
    5658 
     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 
    5791edit_dataset() 
    5892{ 
    59     # Ask what to do on this dataset 
    60     get_dlg_ans "--menu \"What to do on this dataset?\" 22 50 15 edit 'Set ZFS options' delete 'Remove the dataset' cancel 'Cancel'" 
    61     if [ -z "$ANS" ] ; then 
    62        exit_err "Invalid dataset selected!" 
    63     fi 
    64     case $ANS in 
    65       cancel) return ;; 
    66         edit) get_dlg_ans "--inputbox 'Enter ZFS option flags, using a | seperator.' 8 40" 
    67               NEWLAYOUT="" 
    68               for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
    69               do 
    70                  d=`echo $z | cut -d '(' -f 1` 
    71                  if [ "$d" = "$1" ] ; then  
    72                    opt="" 
    73                    if [ -n "$ANS" ] ; then opt="($ANS)"; fi 
    74                    if [ -z "$NEWLAYOUT" ] ; then 
    75                      NEWLAYOUT="${d}${opt}" 
    76                    else 
    77                      NEWLAYOUT="$NEWLAYOUT,${d}${opt}" 
    78                    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}" 
    79150                 else 
    80                    if [ -z "$NEWLAYOUT" ] ; then 
    81                      NEWLAYOUT="${z}" 
    82                    else 
    83                      NEWLAYOUT="$NEWLAYOUT,${z}" 
    84                    fi 
    85                  fi 
    86               done 
    87               ZFSLAYOUT="$NEWLAYOUT" 
    88               ;; 
    89       delete) NEWLAYOUT="" 
    90               for z in `echo $ZFSLAYOUT | sed 's|,| |g'` 
    91               do 
    92                  d=`echo $z | cut -d '(' -f 1`   
    93                  if [ "$d" = "$1" ] ; then continue ; fi 
    94                  if [ -z "$NEWLAYOUT" ] ; then 
    95                    NEWLAYOUT="${z}" 
    96                  else 
    97                    NEWLAYOUT="$NEWLAYOUT,${z}" 
     151                   NEWLAYOUT="$NEWLAYOUT,${z}" 
    98152                 fi 
    99               done 
    100               ZFSLAYOUT="$NEWLAYOUT" 
    101              ;; 
    102     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 
    103202} 
    104203 
     
    191290     d=`echo $i | cut -d ':' -f 1` 
    192291     desc=`echo $i | cut -d ':' -f 2` 
    193      dOpts="$dOpts $d \"$desc\" $fOpt"  
     292     size="`${PCSYS} disk-info $d | grep size | cut -d '=' -f 2`MB" 
     293     dOpts="$dOpts $d \"$desc ($size)\" $fOpt"  
    194294     if [ -z "$fOpt" ] ; then fOpt="off"; fi 
    195295  done < /tmp/.dList.$$ 
     
    504604} 
    505605 
    506 start_menu_loop() 
     606start_edit_menu_loop() 
    507607{ 
    508608 
    509609  while : 
    510610  do 
    511     dialog --title "PC-BSD Text Install" --menu "Please select from the following options:" 18 40 10 wizard "Run install wizard" disk "Change disk ($SYSDISK)" zfs "Change ZFS layout" network "Change networking" view "View install script" edit "Edit install script" install "Start the installation" quit "Quit install wizard" 2>/tmp/answer 
     611    dialog --title "PC-BSD Text Install - Edit Menu" --menu "Please select from the following options:" 18 40 10 disk "Change disk ($SYSDISK)" zfs "Change ZFS layout" network "Change networking" view "View install script" edit "Edit install script" back "Back to main menu" 2>/tmp/answer 
    512612    if [ $? -ne 0 ] ; then break ; fi 
    513613 
     
    515615 
    516616    case $ANS in 
    517      wizard) start_full_wizard 
    518              rtn 
    519              ;; 
    520617       disk) change_disk_selection 
    521618             rtn 
     
    531628             rtn 
    532629             ;; 
     630       back) break ;; 
     631          *) ;; 
     632    esac 
     633  done 
     634 
     635} 
     636 
     637start_menu_loop() 
     638{ 
     639 
     640  while : 
     641  do 
     642    dialog --title "PC-BSD Text Install" --menu "Please select from the following options:" 18 40 10 install "Start the installation" wizard "Re-run install wizard" edit "Edit install options" quit "Quit install wizard" 2>/tmp/answer 
     643    if [ $? -ne 0 ] ; then break ; fi 
     644 
     645    ANS="`cat /tmp/answer`" 
     646 
     647    case $ANS in 
     648     wizard) start_full_wizard 
     649             rtn 
     650             ;; 
     651       edit) start_edit_menu_loop 
     652             ;; 
    533653    install) echo "This will begin the installation, continue?" 
    534654             echo -e "(y/n)\c" 
Note: See TracChangeset for help on using the changeset viewer.