Changeset 07e812b


Ignore:
Timestamp:
02/20/14 14:50:45 (10 months ago)
Author:
Ken Moore <ken@…>
Branches:
master, releng/10.0.1, releng/10.0.2, releng/10.0.3, releng/10.1
Children:
539bbff
Parents:
e543bca (diff), 44bdd65 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of github.com:pcbsd/pcbsd

Files:
1 added
11 edited

Legend:

Unmodified
Added
Removed
  • src-sh/lpreserver/backend/functions.sh

    r59f014c4 r44bdd65  
    608608 
    609609} 
     610 
     611## Function to remove the oldest life-preserver snapshot on the target 
     612## zpool, used by zfsmon.sh when the disk space gets low 
     613do_pool_cleanup() 
     614{ 
     615  # Is this zpool managed by life-preserver? 
     616  grep -q "${PROGDIR}/backend/runsnap.sh ${1} " /etc/crontab 
     617  if [ $? -ne 0 ] ; then return ; fi 
     618 
     619  # Before we start pruning, check if any replication is running 
     620  local pidFile="${DBDIR}/.reptask-`echo ${1} | sed 's|/|-|g'`" 
     621  if [ -e "${pidFile}" ] ; then 
     622     pgrep -F ${pidFile} >/dev/null 2>/dev/null 
     623     if [ $? -eq 0 ] ; then return; fi 
     624  fi 
     625 
     626  # Get the list of snapshots for this zpool 
     627  snapList=$(snaplist "${1}") 
     628 
     629  # Do any pruning 
     630  for snap in $snapList 
     631  do 
     632     # Only remove snapshots which are auto-created by life-preserver 
     633     cur="`echo $snap | cut -d '-' -f 1`" 
     634     if [ "$cur" != "auto" ] ; then continue; fi 
     635 
     636     echo_log "Pruning old snapshot: $snap" 
     637     rmZFSSnap "${1}" "$snap" 
     638     if [ $? -ne 0 ] ; then 
     639       haveMsg=1 
     640       echo_log "ERROR: (Low Disk Space) Failed pruning snapshot $snap on ${1}" 
     641       queue_msg "ERROR: (Low Disk Space) Failed pruning snapshot $snap on ${1} @ `date` \n\r`cat $CMDLOG`" 
     642     else 
     643       queue_msg "(Low Disk Space) Auto-pruned snapshot: $snap on ${1} @ `date`\n\r`cat $CMDLOG`" 
     644       haveMsg=1 
     645     fi 
     646 
     647     # We only prune a single snapshot at this time, so lets end 
     648     break 
     649  done 
     650 
     651  return 0 
     652} 
  • src-sh/lpreserver/backend/zfsmon.sh

    r4c15f05 r44bdd65  
    2727if [ -e "${DBDIR}/zpool-alert-du" ] ; then rm ${DBDIR}/zpool-alert-du ; fi 
    2828 
    29 zpool list  | grep -v "^NAME" > /tmp/.lPreserver-df.$$ 
    30 while read line 
     29# Do the disk-space check 
     30for zpool in `zpool list -H | awk '{print $1}'` 
    3131do 
    32    cap=`echo $line | awk '{print $5}' | cut -d '%' -f 1` 
    33    zpool=`echo $line | awk '{print $1}'` 
    34    if [ $(is_num "$cap") ] ; then 
    35       if [ $cap -gt $DUWARN ] ; then 
    36          queue_msg "Warning! ${zpool} is currently at ${cap}% capacity!"         
    37          echo "$cap" > $DBDIR/zpool-alert-du 
    38          haveMsg=1 
    39       fi 
    40    fi 
    41 done< /tmp/.lPreserver-df.$$ 
    42 rm /tmp/.lPreserver-df.$$ 
     32  poolCap="`zpool list -H -o capacity $zpool | cut -d '%' -f 1`" 
     33 
     34  if [ $poolCap -gt $DUWARN ] ; then 
     35     queue_msg "Warning! ${zpool} is currently at ${poolCap}% capacity!" 
     36     echo "$poolCap" > $DBDIR/zpool-alert-du 
     37     haveMsg=1 
     38  fi 
     39 
     40  # See if we can do any auto-cleanup of this pool 
     41  if [ $poolCap -gt 85 ] ; then do_pool_cleanup "$zpool"; fi 
     42 
     43done 
    4344 
    4445# Lets check free disk space on the pools 
  • src-sh/pc-updatemanager/Makefile

    rc60c604 rb95e8a8  
    3030install_scripts: first FORCE 
    3131        @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)$(PREFIX)/bin/ || $(MKDIR) $(INSTALL_ROOT)$(PREFIX)/bin/  
     32        @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ || $(MKDIR) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ 
    3233        -$(INSTALL_FILE) pc-updatemanager $(INSTALL_ROOT)$(PREFIX)/bin/ 
     34        -$(INSTALL_FILE) etcmerge $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ 
    3335 
    3436 
     
    4345 
    4446install_conf: first FORCE 
    45         @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ || $(MKDIR) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/  
     47        @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ || $(MKDIR) $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ 
    4648        -$(INSTALL_DIR) conf $(INSTALL_ROOT)$(PREFIX)/share/pcbsd/pc-updatemanager/ 
    4749 
  • src-sh/pc-updatemanager/pc-updatemanager

    rc088725 re07f550  
    6060IGNDIR="${DBDIR}/ignored" 
    6161 
     62ISOTMP="/usr/local/tmp/pcbsd-update.iso" 
    6263 
    6364###################################################################### 
    6465# Done with config values 
    6566###################################################################### 
     67 
     68# Files we always want to upgrade in /etc 
     69ETCCLOBBER="mail/sendmail.cf mail/freebsd.cf" 
    6670 
    6771show_usage() { 
     
    408412rollback_update() 
    409413{ 
    410   cp /tmp/pcbsd.conf.preUpdate.$$ /usr/local/etc/pkg/repos/pcbsd.conf 
    411414} 
    412415 
     
    439442  fi 
    440443 
     444  # Lets Mount the image image now 
     445  clear 
     446  MD=`mdconfig -a -t vnode -f ${ISOTMP}` ; export MD 
     447  if [ ! -d "/mnt/iso-update" ] ; then mkdir -p "/mnt/iso-update"; fi 
     448  mount -t cd9660 /dev/$MD /mnt/iso-update 
     449  if [ $? -ne 0 ] ; then 
     450     # This should never happen, but just in case the user removed the ISO 
     451     # file or something causes mdconfig / mount to fail, lets roll back 
     452     rm /var/.freebsd-update-finish 
     453     rm -rf /boot/kernel 
     454     mv /boot/kernel.preUpgrade /boot/kernel 
     455 
     456     echo "ERROR: Could not mount ${ISOTMP}... Did the file get removed?" 
     457     echo "The update will now be canceled. Please try again later." 
     458     echo "Press ENTER to continue" 
     459     read tmp 
     460     reboot 
     461     exit 1 
     462  fi 
     463 
    441464  # Remove all PBIs 
    442465  clear 
     
    449472    echo "Removing: ${pbi}" 
    450473    if [ "$user" != "root" ] ; then 
    451       su $user -c "pbi_icon del-desktop $pbi" 
    452       su $user -c "pbi_icon del-menu $pbi" 
    453       su $user -c "pbi_icon del-mime $pbi" 
    454       su $user -c "pbi_icon del-pathlnk $pbi" 
    455       su $user -c "pbi_delete $pbi" 
     474      su $user -c "pbi_icon del-desktop $pbi" >/dev/null 2>/dev/null 
     475      su $user -c "pbi_icon del-menu $pbi" >/dev/null 2>/dev/null 
     476      su $user -c "pbi_icon del-mime $pbi" >/dev/null 2>/dev/null 
     477      su $user -c "pbi_icon del-pathlnk $pbi" >/dev/null 2>/dev/null 
     478      su $user -c "pbi_delete $pbi" >/dev/null 2>/dev/null 
    456479      result=$? 
    457480    else 
    458       pbi_icon del-desktop $pbi 
    459       pbi_icon del-menu $pbi 
    460       pbi_icon del-mime $pbi 
    461       pbi_icon del-pathlnk $pbi 
     481      pbi_icon del-desktop $pbi >/dev/null 2>/dev/null 
     482      pbi_icon del-menu $pbi >/dev/null 2>/dev/null 
     483      pbi_icon del-mime $pbi >/dev/null 2>/dev/null 
     484      pbi_icon del-pathlnk $pbi >/dev/null 2>/dev/null 
    462485      pbi_delete $pbi >/dev/null 2>/dev/null 
    463486      result=$? 
     
    472495  # Start the package cleanup process 
    473496  clear 
    474   echo "Removing packages...This may take a while...\c" 
     497  echo "Removing packages...This may take a while..." 
    475498  pkg delete -afy 
    476499  if [ $? -ne 0 ] ; then 
     
    480503  echo "Done!" 
    481504 
    482   # Start the freebsd-update process 
     505 
     506  # Setup temp logfile 
     507  if [ -e "/root/.failed-freebsd" ] ; then rm /root/.failed-freebsd; fi 
    483508  clear 
    484   echo "Installing FreeBSD updates... Please wait..." 
    485   freebsd-update --non-interactive install | tee /root/.failed-freebsd 
    486   if [ $? -ne 0 ] ; then 
    487      echo "Warning: Failed running freebsd-update install!" 
    488      echo "Press ENTER to continue" 
     509 
     510  # We need to be sure and removal the immutable flags 
     511  echo "Preparing filesystem..." 
     512  chflags -R noschg / 
     513 
     514  distFiles="base doc games lib32" 
     515  for i in $distFiles 
     516  do 
     517    echo -e "Updating world: $i...\c" 
     518    tar -xvp -f /mnt/iso-update/dist/${i}.txz --exclude ./proc --exclude ./etc/ -C / >> /tmp/.extract.$$ 2>> /tmp/.extract.$$ 
     519    if [ $? -ne 0 ] ; then 
     520       FREEBSDSTATUS=1 
     521       echo -e "Warning!" 
     522       cat /tmp/.extract.$$ >> /root/.failed-freebsd 
     523       sleep 5 
     524    else 
     525       echo -e "Done" 
     526    fi 
     527  done 
     528  rm /tmp/.extract.$$ 
     529 
     530  # Now time to do all the etcmerge stuff 
     531  TMPETC="/root/etc-update" 
     532  if [ -d "$TMPETC" ] ; then rm -rf $TMPETC ; fi 
     533  mkdir -p $TMPETC 
     534 
     535  tar -xvp -f /mnt/iso-update/dist/base.txz -C ${TMPETC} ./etc >/dev/null 2>/dev/null 
     536  mv ${TMPETC}/etc ${TMPETC}/etc-new 
     537 
     538  # Can nuke these two, will be re-generated during etcmerge 
     539  rm ${TMPETC}/etc-new/spwd.db 
     540  rm ${TMPETC}/etc-new/pwd.db 
     541 
     542  echo "Merging /etc..." 
     543  /sbin/etcmerge -d ${TMPETC} init  >> /root/.failed-freebsd 2>> /root/.failed-freebsd 
     544  cd $TMPETC 
     545 
     546  # Lets copy the files we always want to clobber 
     547  for i in ${ETCCLOBBER} 
     548  do 
     549     # If this file existed on system, save copy of old version 
     550     if [ -e "/etc/$i" ] ; then 
     551        cp /etc/${i} etc-merged/${i}.preUpgrade 
     552     fi 
     553     # Overwrite the new version 
     554     if [ -e "etc-merged/${i}" ] ; then 
     555        cp etc-new/${i} etc-merged/${i} 
     556     fi 
     557  done 
     558 
     559  # Lets resolve the conflicts found, use the *new* strings by default 
     560  # Copy the old file to /etc/<file>.preUpgrade 
     561  for i in $(cat *.conflicts 2> /dev/null); do 
     562     if [ ! -e "etc-merged/${i}" ] ; then continue ; fi 
     563     if egrep -q '^(<<<<<<< |=======$|>>>>>>> )' etc-merged/$i; then 
     564        cp /etc/${i} etc-merged/${i}.preUpgrade 
     565 
     566        # Lets parse out the old, bring in new changes 
     567        rem=0 
     568        while read line 
     569        do 
     570          echo "$line" | egrep -q '^<<<<<<< ' 
     571          if [ $? -eq 0 ] ; then rem=1 ; continue ; fi 
     572 
     573          echo "$line" | egrep -q '^=======$' 
     574          if [ $? -eq 0 ] ; then rem=0 ; continue ; fi 
     575 
     576          echo "$line" | egrep -q '^>>>>>>> ' 
     577          if [ $? -eq 0 ] ; then rem=0 ; continue ; fi 
     578 
     579          if [ $rem -eq 0 ] ; then echo "$line" >> etc-merged/${i}.new ; fi 
     580        done < etc-merged/${i} 
     581 
     582        # Copy the fixed file 
     583        cp -p etc-merged/${i}.new etc-merged/${i} 
     584        rm etc-merged/${i}.new 
     585     fi 
     586  done 
     587 
     588  # Now install the merged /etc/ stuff 
     589  cd $TMPETC 
     590  /sbin/etcmerge -d ${TMPETC} install >> /root/.failed-freebsd 2>>/root/.failed-freebsd 
     591  if [ $? -ne 0 ] ; then 
    489592     FREEBSDSTATUS=1 
    490      read tmp 
    491   fi 
     593     echo "Warning: Failed etcmerge install..." 
     594     sleep 5 
     595  fi 
     596 
     597  # Save the etc-new directory as the old one now 
     598  rm -rf /var/db/etc 
     599  cp -r etc-new /var/db/etc 
     600 
     601  # Cleanup 
     602  rm -rf ${TMPETC} 
     603  rm /sbin/etcmerge 
     604 
    492605  clear 
    493606 
     
    515628     mkdir "/usr/local/etc/pkg/fingerprints/pcbsd/revoked" 
    516629  fi 
    517   cd / 
    518   tar xvpf /usr/local/tmp/pkg.txz /usr/local/sbin/pkg-static >/dev/null 2>/dev/null 
    519   /usr/local/sbin/pkg-static install -y ports-mgmt/pkg 
     630  cd /mnt/iso-update/dist/packages/All 
     631  pkgFile=`ls pkg-[1-9]*` 
     632  tar xvpf $pkgFile -C / /usr/local/sbin/pkg-static >/dev/null 2>/dev/null 
     633  /usr/local/sbin/pkg-static add -f $pkgFile 
    520634  if [ $? -ne 0 ] ; then 
    521635     echo "Warning: Failed to re-install PKGNG..." 
     
    524638  fi 
    525639 
    526   # Lets update the pkgng repo 
     640 
     641  # Lets create our fake pcbsd.conf file 
     642  echo "pcbsd: { 
     643  url: \"file:///mnt/iso-update/dist/packages\", 
     644  enabled: true 
     645}" >  /usr/local/etc/pkg/repos/pcbsd.conf 
     646 
     647  # Now update pkgng 
    527648  pkg-static update -f 
     649  if [ $? -ne 0 ] ; then 
     650     echo "Failed updating pkgng repo..." 
     651     sleep 5 
     652  fi 
    528653 
    529654  # Now lets begin re-installing packages 
     
    559684 
    560685  clear 
    561  
    562   clear 
    563686  echo "Re-Installing meta-packages" 
    564687  while read newmeta 
    565688  do 
    566     pc-metapkgmanager add $newmeta 
    567     if [ $? -ne 0 ] ; then 
    568        METASTATUS=1 
    569        echo "$newmeta" >> /root/.failed-meta 
    570        echo "Warning: Failed to re-install meta-package: $newmeta" 
    571        echo "Press ENTER to continue" 
    572        read tmp 
    573     fi 
     689    pkgDeps="`pc-metapkgmanager pkgdeps $newmeta`" 
     690    for i in $pkgDeps 
     691    do 
     692      pkg-static info -e ${i} 
     693      if [ $? -eq 0 ] ; then continue ; fi 
     694 
     695      pkg-static install -y ${i} 
     696      if [ $? -ne 0 ] ; then 
     697         METASTATUS=1 
     698         echo "$newmeta" >> /root/.failed-meta 
     699         echo "Warning: Failed to re-install meta-package: $newmeta (${i})" 
     700         echo "Press ENTER to continue" 
     701         read tmp 
     702      fi 
     703    done 
    574704  done < /root/pcbsd-meta-before-update 
    575705 
     
    590720    fi 
    591721  done < /root/pcbsd-userpkgs-before-update 
     722 
     723  cd / 
     724 
     725  # Now lets do the overlay extraction (This cleans up the fake pcbsd.conf) 
     726  pc-extractoverlay ports 
    592727 
    593728  # Now lets re-load any PBI files 
     
    617752       # Re-add menu / desktop stuff 
    618753       if [ "$user" != "root" ] ; then 
    619          su $user -c "pbi_icon add-pathlnk $shortpbi" 
    620          su $user -c "pbi_icon add-desktop $shortpbi" 
    621          su $user -c "pbi_icon add-menu $shortpbi" 
    622          su $user -c "pbi_icon add-mime $shortpbi" 
     754         su $user -c "pbi_icon add-pathlnk $shortpbi" >/dev/null 2>/dev/null 
     755         su $user -c "pbi_icon add-desktop $shortpbi" >/dev/null 2>/dev/null 
     756         su $user -c "pbi_icon add-menu $shortpbi" >/dev/null 2>/dev/null 
     757         su $user -c "pbi_icon add-mime $shortpbi" >/dev/null 2>/dev/null 
    623758       else 
    624          pbi_icon add-pathlnk $shortpbi 
    625          pbi_icon add-desktop $shortpbi 
    626          pbi_icon add-menu $shortpbi 
    627          pbi_icon add-mime $shortpbi 
     759         pbi_icon add-pathlnk $shortpbi >/dev/null 2>/dev/null 
     760         pbi_icon add-desktop $shortpbi >/dev/null 2>/dev/null 
     761         pbi_icon add-menu $shortpbi >/dev/null 2>/dev/null 
     762         pbi_icon add-mime $shortpbi >/dev/null 2>/dev/null 
    628763       fi 
    629764    fi 
     
    653788  fi 
    654789 
    655   echo "" >> /root/pcbsd-update-summary 
    656  
    657790  if [ $PKGSTATUS -eq 0 ] ; then 
    658     echo "PKG: All packages updated successfully!" >> /root/pcbsd-update-summary 
     791    echo "    PKG: All packages updated successfully!" >> /root/pcbsd-update-summary 
    659792  else 
    660     echo "PKG: The following packages failed to install:" >> /root/pcbsd-update-summary 
     793    echo "    PKG: The following packages failed to install:" >> /root/pcbsd-update-summary 
    661794    cat /root/.failed-pkgs >> /root/pcbsd-update-summary 
    662795  fi 
    663  
    664   echo "" >> /root/pcbsd-update-summary 
    665796 
    666797  if [ $USERPKGSTATUS -eq 0 ] ; then 
     
    671802  fi 
    672803 
    673   echo "" >> /root/pcbsd-update-summary 
    674  
    675804  if [ $METASTATUS -eq 0 ] ; then 
    676     echo "META: All meta-packages updated successfully!" >> /root/pcbsd-update-summary 
     805    echo "   META: All meta-packages updated successfully!" >> /root/pcbsd-update-summary 
    677806  else 
    678     echo "META: The following meta-packages failed to install:" >> /root/pcbsd-update-summary 
     807    echo "   META: The following meta-packages failed to install:" >> /root/pcbsd-update-summary 
    679808    cat /root/.failed-meta >> /root/pcbsd-update-summary 
    680809  fi 
    681810 
    682   echo "" >> /root/pcbsd-update-summary 
    683  
    684811  if [ $PBISTATUS -eq 0 ] ; then 
    685     echo "PBI: All PBIs updated successfully!" >> /root/pcbsd-update-summary 
     812    echo "    PBI: All PBIs updated successfully!" >> /root/pcbsd-update-summary 
    686813  else 
    687     echo "PBI: The following PBIs failed to install:" >> /root/pcbsd-update-summary 
     814    echo "    PBI: The following PBIs failed to install:" >> /root/pcbsd-update-summary 
    688815    cat /root/.failed-pbi >> /root/pcbsd-update-summary 
    689816  fi 
    690817 
    691   echo "" >> /root/pcbsd-update-summary 
    692  
    693818  if [ $GRUBSTATUS -eq 0 ] ; then 
    694     echo "GRUB: The GRUB boot-loader menus re-built successfully!" >> /root/pcbsd-update-summary 
     819    echo "   GRUB: The GRUB boot-loader menus re-built successfully!" >> /root/pcbsd-update-summary 
    695820  else 
    696     echo "GRUB: The GRUB boot-loader menus failed to rebuild:" >> /root/pcbsd-update-summary 
     821    echo "   GRUB: The GRUB boot-loader menus failed to rebuild:" >> /root/pcbsd-update-summary 
    697822    cat /root/.failed-grub >> /root/pcbsd-update-summary 
    698823  fi 
     
    718843  more /root/pcbsd-update-summary 
    719844 
     845  # Cleanup time 
     846  cd / 
     847  umount /mnt/iso-update 2>/dev/null 
     848  mdconfig -d -u $MD 2>/dev/null 
     849  rm ${ISOTMP} 2>/dev/null 
     850 
    720851  echo "Press ENTER to reboot" 
    721852  read tmp 
     
    742873  local rel=`echo $1 | sed 's|fbsd-||g'` 
    743874 
    744   # Save the repo file 
    745   cp /usr/local/etc/pkg/repos/pcbsd.conf /tmp/pcbsd.conf.preUpdate.$$ 
    746  
    747   # Set the new pcbsd.conf file to the new repo 
    748   local arch=`uname -m` 
    749   echo "pcbsd: { 
    750         url: "http://pkg.cdn.pcbsd.org/$rel/$arch", 
    751         signature_type: "fingerprints", 
    752         fingerprints: "/usr/local/etc/pkg/fingerprints/pcbsd", 
    753         enabled: true 
    754        }" > /usr/local/etc/pkg/repos/pcbsd.conf 
    755  
    756   # Lets backup old pkgng 
    757   oPkg=`pkg info pkg | head -n 1 | awk '{print $1}'` 
    758   pkg create -o /usr/local/tmp/ ${oPkg} 
    759   if [ -e "/usr/local/tmp/oldPkg.txz" ] ; then rm /usr/local/tmp/oldPkg.txz; fi 
    760   mv /usr/local/tmp/${oPkg}.txz /usr/local/tmp/oldPkg.txz 
    761  
    762   # Lets download the new pkgng for this release 
    763   if [ -e "/usr/local/tmp/pkg.txz" ] ; then rm /usr/local/tmp/pkg.txz; fi 
    764   get_file_from_mirrors "/packages/$rel/$arch/Latest/pkg.txz" "/usr/local/tmp/pkg.txz" "pkg" 
    765   if [ $? -ne 0 ] ; then 
    766      rollback_update 
    767      exit_err "Failed downloading pkgng update..." 
     875  # Do the disk-space check 
     876  rZpool="`mount | grep 'on / ' | awk '{print $1}' | cut -d '/' -f 1`" 
     877  poolFree="`zpool list -H -o free $rZpool`" 
     878 
     879  # is space in GB? 
     880  echo "$poolFree" | grep -q "G" 
     881  if [ $? -eq 0 ] ; then 
     882     poolFree="`echo $poolFree | sed 's|G||g'`" 
     883     if [ $poolFree -lt 10 ] ; then 
     884        exit_err "Need at least 20GB of free space to continue" 
     885     fi 
     886  fi 
     887 
     888  # Is space in MB? 
     889  echo "$poolFree" | grep -q "M" 
     890  if [ $? -eq 0 ] ; then 
     891     poolFree="`echo $poolFree | sed 's|M||g'`" 
     892     if [ $poolFree -lt 10000 ] ; then 
     893        exit_err "Need at least 20GB of free space to continue" 
     894     fi 
     895  fi 
     896 
     897  # Grab the ISO file from the mirrors 
     898  get_file_from_mirrors "/$rel/$ARCH/latest.iso" "$ISOTMP" "iso" 
     899  get_file_from_mirrors "/$rel/$ARCH/latest.iso.md5" "${ISOTMP}.md5" "iso" 
     900 
     901  # Verify the ISO file is good for an update 
     902  verify_iso_data 
     903 
     904  # Lets auto-create a new boot-environment before updating 
     905  if [ -z "$NOBEADM" ] ; then 
     906    beadm create ${SYSVER}-beforeUpdate 
     907    if [ $? -ne 0 ] ; then 
     908       echo "WARNING: Unable to create a new boot-enviroment!" 
     909       sleep 10 
     910    fi 
    768911  fi 
    769912 
     
    826969  rm ${mOriginFile} 
    827970 
    828   # Download update files from freebsd-update 
    829   freebsd-update --non-interactive -r "$rel" upgrade 
    830   if [ $? -ne 0 ] ; then 
     971  # Now install the updated kernel 
     972  if [ -d "/boot/kernel.preUpgrade" ] ; then 
     973     rm -rf /boot/kernel.preUpgrade 
     974  fi 
     975  mv /boot/kernel /boot/kernel.preUpgrade 
     976 
     977  echo "Updating kernel..." 
     978  tar xf /mnt/iso-update/dist/kernel.txz -C / 2>/dev/null >/dev/null 
     979  if [ $? -ne 0 ] ; then 
     980       rm -rf /boot/kernel 
     981       mv /boot/kernel.preUpgrade /boot/kernel 
     982       umount /mnt/iso-update 
     983       mdconfig -d -u $MD 
     984       rollback_update 
     985       exit_err "Kernel update failed! (Old kernel restored)" 
     986  fi 
     987 
     988  # Unmount / cleanup ISO 
     989  umount /mnt/iso-update 
     990  mdconfig -d -u $MD 
     991 
     992  # Touch our marker that we will need to reboot before doing other updates 
     993  touch /var/.freebsd-update-finish 
     994  touch /tmp/.fbsdup-reboot 
     995 
     996  echo "Major update staged!" 
     997  echo "Please reboot the system for the updater to continue." 
     998  exit 0 
     999} 
     1000 
     1001## Do a fetch of a pristine /etc directory for the three way etcmerge 
     1002fetch_clean_etc() 
     1003{ 
     1004  echo "Fetching pristine /etc for merging..." 
     1005  baseTmp="/usr/local/tmp/base.txz.$$" 
     1006  get_file_from_mirrors "/$SYSVER/$ARCH/dist/base.txz" "$baseTmp" "iso" 
     1007  if [ $? -ne 0 ] ; then return 1 ; fi 
     1008 
     1009  rm -rf "/var/db/etc/" 
     1010  echo "Extracting pristine /etc for merging..." 
     1011  tar xvpf ${baseTmp} -C /var/db ./etc >/dev/null 2>/dev/null 
     1012  local err=$? 
     1013  rm ${baseTmp} 
     1014  return $err 
     1015} 
     1016 
     1017## Verify that ISO is suitable for upgrading with 
     1018verify_iso_data() 
     1019{ 
     1020  if [ ! -e "${ISOTMP}" ] ; then 
    8311021     rollback_update 
    832      exit_err "Failed running \"freebsd-update -r $rel upgrade\"..." 
    833   fi 
    834  
    835   # Touch our marker that we will need to reboot before doing other updates 
    836   touch /tmp/.fbsdup-reboot 
    837  
    838   # Now install freebsd-update files 
    839   freebsd-update --non-interactive install 
    840   if [ $? -ne 0 ] ; then 
     1022     exit_err "ISO fails checksum..." 
     1023  fi 
     1024 
     1025  # Check that the MD5 matches 
     1026  echo "Checking ISO checksum..." 
     1027  if [ "`md5 -q $ISOTMP`" != "`cat ${ISOTMP}.md5`" ] ; then 
    8411028     rollback_update 
    842      exit_err "Failed running \"freebsd-update install\"..." 
    843   fi 
    844  
    845   # Remove backup repo file 
    846   rm /tmp/pcbsd.conf.preUpdate.$$ 
    847  
    848   echo "Major update finished!"  
    849   echo "Please reboot the system for changes to take effect."  
    850   exit 0 
     1029     exit_err "ISO fails checksum..." 
     1030  fi 
     1031 
     1032  # Now we need to "mount" the ISO, check its contents 
     1033  MD=`mdconfig -a -t vnode -f ${ISOTMP}` ; export MD 
     1034  if [ ! -d "/mnt/iso-update" ] ; then mkdir -p "/mnt/iso-update"; fi 
     1035  mount -t cd9660 /dev/$MD /mnt/iso-update 
     1036  if [ $? -ne 0 ] ; then 
     1037     mdconfig -d -u $MD 
     1038     rollback_update 
     1039     exit_err "ISO failed mount..." 
     1040  fi 
     1041 
     1042  # Now we are mounted, verify the dist files exist and can be read 
     1043  distFiles="base doc games kernel lib32" 
     1044  for i in $distFiles 
     1045  do 
     1046     if [ ! -e "/mnt/iso-update/dist/${i}.txz" ] ; then 
     1047       umount /mnt/iso-update 
     1048       mdconfig -d -u $MD 
     1049       rollback_update 
     1050       exit_err "ISO missing distfile: /dist/${i}.txz" 
     1051     fi 
     1052 
     1053     echo "Verifying distfile: ${i}.txz" 
     1054     tar tf "/mnt/iso-update/dist/${i}.txz" >/dev/null 2>/dev/null 
     1055     if [ $? -ne 0 ] ; then 
     1056       umount /mnt/iso-update 
     1057       mdconfig -d -u $MD 
     1058       rollback_update 
     1059       exit_err "ISO corrupt distfile: /dist/${i}.txz" 
     1060     fi 
     1061  done 
     1062 
     1063  # Lets fetch a pristine /etc for merging, don't trust an old one in /var/db 
     1064  fetch_clean_etc 
     1065  if [ $? -ne 0 ] ; then 
     1066     umount /mnt/iso-update 
     1067     mdconfig -d -u $MD 
     1068     rollback_update 
     1069     exit_err "Missing etcmerge directory: /var/db/etc" 
     1070  fi 
     1071 
     1072  # Make sure we have /sbin/etcmerge copied over 
     1073  cp ${PROGDIR}/etcmerge /sbin/etcmerge 
     1074  if [ $? -ne 0 ] ; then 
     1075       umount /mnt/iso-update 
     1076       mdconfig -d -u $MD 
     1077       rollback_update 
     1078       exit_err "Failed setting up etcmerge..." 
     1079  fi 
     1080  chmod 755 /sbin/etcmerge 
    8511081} 
    8521082 
     
    9491179} 
    9501180 
    951 # Check if we have an update folder for the version we are on 
    952 if [ ! -d "${AVAILDIR}/${SYSVER}" ] ; then mkdir -p ${AVAILDIR}/${SYSVER} ; fi 
    953  
    9541181if [ "`id -u`" = "0" ] ; then 
    9551182  # Make the installed directory for this version 
  • src-sh/port-files/pkg-plist

    r1aede14 rb95e8a8  
    534534share/pcbsd/pc-updatemanager/conf/sysupdate.conf 
    535535share/pcbsd/pc-updatemanager/conf/security.key 
     536share/pcbsd/pc-updatemanager/etcmerge 
    536537share/pcbsd/scripts/functions.sh 
    537538share/pcbsd/scripts/mkzfsdir.sh 
  • src-qt4/pc-softwaremanager/extras.h

    r0b12758 re543bca  
    3232#include <QDebug> 
    3333#include <QProcessEnvironment> 
     34#include <QProcess> 
     35#include <QCoreApplication> 
    3436 
    3537class Extras{ 
     
    149151 } 
    150152  
     153static QStringList getCmdOutput(QString cmd, QString dir = ""){ 
     154  QProcess *proc = new QProcess; 
     155  proc->setProcessChannelMode(QProcess::MergedChannels); 
     156  if( !dir.isEmpty() && QFile::exists(dir) ){ proc->setWorkingDirectory(dir); } 
     157  proc->start(cmd); 
     158  while(!proc->waitForFinished(300)){ 
     159    QCoreApplication::processEvents(); 
     160  } 
     161  QStringList out = QString(proc->readAllStandardOutput()).split("\n");  
     162  delete proc;   
     163  return out; 
     164} 
     165  
    151166}; 
    152167 
  • src-qt4/pc-softwaremanager/mainUI.cpp

    r2916111 re543bca  
    124124void MainUI::on_actionAppCafe_Settings_triggered(){ 
    125125  PBI->openConfigurationDialog(); 
     126} 
     127 
     128void MainUI::on_actionInstall_From_File_triggered(){ 
     129  QStringList files = QFileDialog::getOpenFileNames(this, tr("Install PBI"), QDir::homePath(), tr("PBI Application (*.pbi)") ); 
     130  if(files.isEmpty()){ return; } //cancelled 
     131  //Verify that they want to install these applications 
     132  QStringList names; 
     133  for(int i=0; i<files.length(); i++){ names << files[i].section("/",-1); } 
     134  names.sort(); 
     135  if( QMessageBox::Yes == QMessageBox::question(this, tr("Verify Installation"), tr("Are you ready to begin installing these PBI's?")+"\n"+tr("NOTE: You will need to manually add desktop/menu icons through the AppCafe afterwards.")+"\n\n"+names.join("\n"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) ){ 
     136    //This might take a while, so don't allow the user to run this action again until it is done (thread safe though) 
     137    ui->actionInstall_From_File->setEnabled(false); 
     138    PBI->installPBIFromFile(files); 
     139    ui->actionInstall_From_File->setEnabled(true); 
     140  } 
    126141} 
    127142 
     
    164179  connect(ui->tree_install_apps, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(slotCheckSelectedItems()) ); 
    165180  slotRefreshInstallTab(); 
     181  qDebug() << "Detailed shortcuts button not implemented yet"; 
     182  ui->tool_install_shortcuts->setEnabled(false); 
    166183} 
    167184 
  • src-qt4/pc-softwaremanager/mainUI.h

    r2916111 re543bca  
    5555  void on_actionQuit_triggered(); 
    5656  void on_actionAppCafe_Settings_triggered(); 
     57  void on_actionInstall_From_File_triggered(); 
    5758  //INSTALLED TAB 
    5859  void slotRefreshInstallTab(); 
  • src-qt4/pc-softwaremanager/mainUI.ui

    r2916111 re543bca  
    77    <x>0</x> 
    88    <y>0</y> 
    9     <width>475</width> 
    10     <height>623</height> 
     9    <width>473</width> 
     10    <height>520</height> 
    1111   </rect> 
    1212  </property> 
     
    4242        <string>Installed</string> 
    4343       </attribute> 
    44        <widget class="QStackedWidget" name="stackedWidget"> 
    45         <property name="geometry"> 
    46          <rect> 
    47           <x>6</x> 
    48           <y>6</y> 
    49           <width>451</width> 
    50           <height>535</height> 
    51          </rect> 
    52         </property> 
    53         <property name="styleSheet"> 
    54          <string notr="true"/> 
    55         </property> 
    56         <property name="currentIndex"> 
    57          <number>1</number> 
    58         </property> 
    59         <widget class="QWidget" name="page_install_list"> 
    60          <layout class="QVBoxLayout" name="verticalLayout_21"> 
    61           <item> 
    62            <layout class="QHBoxLayout" name="horizontalLayout"> 
     44       <layout class="QVBoxLayout" name="verticalLayout_2"> 
     45        <item> 
     46         <widget class="QStackedWidget" name="stackedWidget"> 
     47          <property name="styleSheet"> 
     48           <string notr="true"/> 
     49          </property> 
     50          <property name="currentIndex"> 
     51           <number>0</number> 
     52          </property> 
     53          <widget class="QWidget" name="page_install_list"> 
     54           <layout class="QVBoxLayout" name="verticalLayout_21"> 
    6355            <item> 
    64              <widget class="QToolButton" name="tool_install_toggleall"> 
    65               <property name="statusTip"> 
    66                <string>Check/Uncheck all applications</string> 
    67               </property> 
    68               <property name="text"> 
    69                <string>All</string> 
    70               </property> 
    71               <property name="icon"> 
    72                <iconset resource="SoftwareManager.qrc"> 
    73                 <normaloff>:/icons/dialog-ok.png</normaloff>:/icons/dialog-ok.png</iconset> 
    74               </property> 
    75               <property name="toolButtonStyle"> 
    76                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    77               </property> 
     56             <widget class="QFrame" name="frame_3"> 
     57              <property name="styleSheet"> 
     58               <string notr="true">QFrame{background-color: rgba(250,250,250,170);}</string> 
     59              </property> 
     60              <property name="frameShape"> 
     61               <enum>QFrame::StyledPanel</enum> 
     62              </property> 
     63              <property name="frameShadow"> 
     64               <enum>QFrame::Raised</enum> 
     65              </property> 
     66              <layout class="QHBoxLayout" name="horizontalLayout_13"> 
     67               <property name="margin"> 
     68                <number>2</number> 
     69               </property> 
     70               <item> 
     71                <spacer name="horizontalSpacer_2"> 
     72                 <property name="orientation"> 
     73                  <enum>Qt::Horizontal</enum> 
     74                 </property> 
     75                 <property name="sizeHint" stdset="0"> 
     76                  <size> 
     77                   <width>278</width> 
     78                   <height>20</height> 
     79                  </size> 
     80                 </property> 
     81                </spacer> 
     82               </item> 
     83               <item> 
     84                <widget class="QToolButton" name="tool_install_details"> 
     85                 <property name="text"> 
     86                  <string>Application Details</string> 
     87                 </property> 
     88                 <property name="icon"> 
     89                  <iconset resource="SoftwareManager.qrc"> 
     90                   <normaloff>:/icons/go-next.png</normaloff>:/icons/go-next.png</iconset> 
     91                 </property> 
     92                 <property name="toolButtonStyle"> 
     93                  <enum>Qt::ToolButtonTextBesideIcon</enum> 
     94                 </property> 
     95                </widget> 
     96               </item> 
     97              </layout> 
    7898             </widget> 
    7999            </item> 
    80100            <item> 
    81              <spacer name="horizontalSpacer"> 
    82               <property name="orientation"> 
    83                <enum>Qt::Horizontal</enum> 
    84               </property> 
    85               <property name="sizeHint" stdset="0"> 
     101             <widget class="QTreeWidget" name="tree_install_apps"> 
     102              <property name="iconSize"> 
    86103               <size> 
    87                 <width>40</width> 
    88                 <height>20</height> 
     104                <width>16</width> 
     105                <height>16</height> 
    89106               </size> 
    90107              </property> 
    91              </spacer> 
     108              <property name="indentation"> 
     109               <number>0</number> 
     110              </property> 
     111              <attribute name="headerCascadingSectionResizes"> 
     112               <bool>true</bool> 
     113              </attribute> 
     114              <attribute name="headerDefaultSectionSize"> 
     115               <number>120</number> 
     116              </attribute> 
     117              <column> 
     118               <property name="text"> 
     119                <string>Program Name</string> 
     120               </property> 
     121              </column> 
     122              <column> 
     123               <property name="text"> 
     124                <string>Version</string> 
     125               </property> 
     126              </column> 
     127              <column> 
     128               <property name="text"> 
     129                <string>Status</string> 
     130               </property> 
     131              </column> 
     132             </widget> 
    92133            </item> 
    93134            <item> 
    94              <widget class="QToolButton" name="tool_install_performaction"> 
    95               <property name="statusTip"> 
    96                <string>Perform actions on checked applications</string> 
    97               </property> 
    98               <property name="text"> 
    99                <string>Actions</string> 
    100               </property> 
    101               <property name="icon"> 
    102                <iconset resource="SoftwareManager.qrc"> 
    103                 <normaloff>:/icons/preferences-system.png</normaloff>:/icons/preferences-system.png</iconset> 
    104               </property> 
    105               <property name="toolButtonStyle"> 
    106                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    107               </property> 
    108               <property name="arrowType"> 
    109                <enum>Qt::NoArrow</enum> 
    110               </property> 
     135             <layout class="QHBoxLayout" name="horizontalLayout"> 
     136              <item> 
     137               <widget class="QToolButton" name="tool_install_toggleall"> 
     138                <property name="statusTip"> 
     139                 <string>Check/Uncheck all applications</string> 
     140                </property> 
     141                <property name="text"> 
     142                 <string>All</string> 
     143                </property> 
     144                <property name="icon"> 
     145                 <iconset resource="SoftwareManager.qrc"> 
     146                  <normaloff>:/icons/dialog-ok.png</normaloff>:/icons/dialog-ok.png</iconset> 
     147                </property> 
     148                <property name="toolButtonStyle"> 
     149                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
     150                </property> 
     151               </widget> 
     152              </item> 
     153              <item> 
     154               <spacer name="horizontalSpacer"> 
     155                <property name="orientation"> 
     156                 <enum>Qt::Horizontal</enum> 
     157                </property> 
     158                <property name="sizeHint" stdset="0"> 
     159                 <size> 
     160                  <width>40</width> 
     161                  <height>20</height> 
     162                 </size> 
     163                </property> 
     164               </spacer> 
     165              </item> 
     166              <item> 
     167               <widget class="QToolButton" name="tool_install_performaction"> 
     168                <property name="statusTip"> 
     169                 <string>Perform actions on checked applications</string> 
     170                </property> 
     171                <property name="text"> 
     172                 <string>Actions</string> 
     173                </property> 
     174                <property name="icon"> 
     175                 <iconset resource="SoftwareManager.qrc"> 
     176                  <normaloff>:/icons/preferences-system.png</normaloff>:/icons/preferences-system.png</iconset> 
     177                </property> 
     178                <property name="toolButtonStyle"> 
     179                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
     180                </property> 
     181                <property name="arrowType"> 
     182                 <enum>Qt::NoArrow</enum> 
     183                </property> 
     184               </widget> 
     185              </item> 
     186             </layout> 
     187            </item> 
     188           </layout> 
     189          </widget> 
     190          <widget class="QWidget" name="page_install_details"> 
     191           <layout class="QGridLayout" name="gridLayout_2"> 
     192            <item row="0" column="0"> 
     193             <widget class="QFrame" name="frame"> 
     194              <property name="styleSheet"> 
     195               <string notr="true">QFrame{background-color: rgba(250,250,250,170);}</string> 
     196              </property> 
     197              <property name="frameShape"> 
     198               <enum>QFrame::StyledPanel</enum> 
     199              </property> 
     200              <property name="frameShadow"> 
     201               <enum>QFrame::Raised</enum> 
     202              </property> 
     203              <layout class="QHBoxLayout" name="horizontalLayout_2"> 
     204               <property name="margin"> 
     205                <number>2</number> 
     206               </property> 
     207               <item> 
     208                <widget class="QToolButton" name="tool_install_back"> 
     209                 <property name="text"> 
     210                  <string>Back</string> 
     211                 </property> 
     212                 <property name="icon"> 
     213                  <iconset resource="SoftwareManager.qrc"> 
     214                   <normaloff>:/icons/go-previous.png</normaloff>:/icons/go-previous.png</iconset> 
     215                 </property> 
     216                 <property name="toolButtonStyle"> 
     217                  <enum>Qt::ToolButtonTextBesideIcon</enum> 
     218                 </property> 
     219                </widget> 
     220               </item> 
     221               <item> 
     222                <spacer name="horizontalSpacer_7"> 
     223                 <property name="orientation"> 
     224                  <enum>Qt::Horizontal</enum> 
     225                 </property> 
     226                 <property name="sizeHint" stdset="0"> 
     227                  <size> 
     228                   <width>0</width> 
     229                   <height>20</height> 
     230                  </size> 
     231                 </property> 
     232                </spacer> 
     233               </item> 
     234               <item> 
     235                <widget class="QToolButton" name="tool_install_remove"> 
     236                 <property name="toolTip"> 
     237                  <string>Remove the selected application</string> 
     238                 </property> 
     239                 <property name="statusTip"> 
     240                  <string>Remove the selected application</string> 
     241                 </property> 
     242                 <property name="text"> 
     243                  <string>Uninstall</string> 
     244                 </property> 
     245                 <property name="icon"> 
     246                  <iconset resource="SoftwareManager.qrc"> 
     247                   <normaloff>:/icons/remove.png</normaloff>:/icons/remove.png</iconset> 
     248                 </property> 
     249                 <property name="toolButtonStyle"> 
     250                  <enum>Qt::ToolButtonTextBesideIcon</enum> 
     251                 </property> 
     252                </widget> 
     253               </item> 
     254               <item> 
     255                <widget class="QToolButton" name="tool_install_gotobrowserpage"> 
     256                 <property name="text"> 
     257                  <string>Find</string> 
     258                 </property> 
     259                 <property name="icon"> 
     260                  <iconset resource="SoftwareManager.qrc"> 
     261                   <normaloff>:/icons/edit-find.png</normaloff>:/icons/edit-find.png</iconset> 
     262                 </property> 
     263                 <property name="toolButtonStyle"> 
     264                  <enum>Qt::ToolButtonTextBesideIcon</enum> 
     265                 </property> 
     266                </widget> 
     267               </item> 
     268              </layout> 
    111269             </widget> 
    112270            </item> 
    113            </layout> 
    114           </item> 
    115           <item> 
    116            <widget class="QTreeWidget" name="tree_install_apps"> 
    117             <property name="iconSize"> 
    118              <size> 
    119               <width>16</width> 
    120               <height>16</height> 
    121              </size> 
    122             </property> 
    123             <property name="indentation"> 
    124              <number>0</number> 
    125             </property> 
    126             <attribute name="headerCascadingSectionResizes"> 
    127              <bool>true</bool> 
    128             </attribute> 
    129             <attribute name="headerDefaultSectionSize"> 
    130              <number>120</number> 
    131             </attribute> 
    132             <column> 
    133              <property name="text"> 
    134               <string>Program Name</string> 
    135              </property> 
    136             </column> 
    137             <column> 
    138              <property name="text"> 
    139               <string>Version</string> 
    140              </property> 
    141             </column> 
    142             <column> 
    143              <property name="text"> 
    144               <string>Status</string> 
    145              </property> 
    146             </column> 
    147            </widget> 
    148           </item> 
    149           <item> 
    150            <layout class="QHBoxLayout" name="horizontalLayout_2"> 
    151             <item> 
    152              <widget class="QToolButton" name="tool_install_gotobrowserpage"> 
    153               <property name="text"> 
    154                <string>Find in Repository</string> 
    155               </property> 
    156               <property name="icon"> 
    157                <iconset resource="SoftwareManager.qrc"> 
    158                 <normaloff>:/icons/edit-find.png</normaloff>:/icons/edit-find.png</iconset> 
    159               </property> 
    160               <property name="toolButtonStyle"> 
    161                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    162               </property> 
     271            <item row="1" column="0"> 
     272             <layout class="QHBoxLayout" name="horizontalLayout_6"> 
     273              <item> 
     274               <widget class="QLabel" name="label_install_icon"> 
     275                <property name="sizePolicy"> 
     276                 <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 
     277                  <horstretch>0</horstretch> 
     278                  <verstretch>0</verstretch> 
     279                 </sizepolicy> 
     280                </property> 
     281                <property name="maximumSize"> 
     282                 <size> 
     283                  <width>64</width> 
     284                  <height>64</height> 
     285                 </size> 
     286                </property> 
     287                <property name="text"> 
     288                 <string/> 
     289                </property> 
     290                <property name="pixmap"> 
     291                 <pixmap resource="SoftwareManager.qrc">:/icons/appcafe.png</pixmap> 
     292                </property> 
     293                <property name="scaledContents"> 
     294                 <bool>false</bool> 
     295                </property> 
     296               </widget> 
     297              </item> 
     298              <item> 
     299               <layout class="QVBoxLayout" name="verticalLayout_3"> 
     300                <item> 
     301                 <widget class="QLabel" name="label_install_app"> 
     302                  <property name="sizePolicy"> 
     303                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
     304                    <horstretch>0</horstretch> 
     305                    <verstretch>0</verstretch> 
     306                   </sizepolicy> 
     307                  </property> 
     308                  <property name="font"> 
     309                   <font> 
     310                    <pointsize>12</pointsize> 
     311                    <weight>75</weight> 
     312                    <bold>true</bold> 
     313                    <underline>true</underline> 
     314                   </font> 
     315                  </property> 
     316                  <property name="text"> 
     317                   <string notr="true">Application</string> 
     318                  </property> 
     319                  <property name="alignment"> 
     320                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     321                  </property> 
     322                 </widget> 
     323                </item> 
     324                <item> 
     325                 <widget class="QLabel" name="label_install_author"> 
     326                  <property name="text"> 
     327                   <string notr="true">&lt;a href=&quot;http://www.pcbsd.org&quot;&gt;PC_BSD&lt;/a&gt;</string> 
     328                  </property> 
     329                  <property name="alignment"> 
     330                   <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     331                  </property> 
     332                  <property name="openExternalLinks"> 
     333                   <bool>true</bool> 
     334                  </property> 
     335                  <property name="textInteractionFlags"> 
     336                   <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> 
     337                  </property> 
     338                 </widget> 
     339                </item> 
     340               </layout> 
     341              </item> 
     342              <item> 
     343               <layout class="QVBoxLayout" name="verticalLayout_10"> 
     344                <item> 
     345                 <widget class="QToolButton" name="tool_install_startApp"> 
     346                  <property name="sizePolicy"> 
     347                   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 
     348                    <horstretch>0</horstretch> 
     349                    <verstretch>0</verstretch> 
     350                   </sizepolicy> 
     351                  </property> 
     352                  <property name="statusTip"> 
     353                   <string>Start the application</string> 
     354                  </property> 
     355                  <property name="layoutDirection"> 
     356                   <enum>Qt::LeftToRight</enum> 
     357                  </property> 
     358                  <property name="text"> 
     359                   <string>Start</string> 
     360                  </property> 
     361                  <property name="icon"> 
     362                   <iconset resource="SoftwareManager.qrc"> 
     363                    <normaloff>:/icons/application.png</normaloff>:/icons/application.png</iconset> 
     364                  </property> 
     365                  <property name="popupMode"> 
     366                   <enum>QToolButton::InstantPopup</enum> 
     367                  </property> 
     368                  <property name="toolButtonStyle"> 
     369                   <enum>Qt::ToolButtonTextBesideIcon</enum> 
     370                  </property> 
     371                 </widget> 
     372                </item> 
     373               </layout> 
     374              </item> 
     375             </layout> 
     376            </item> 
     377            <item row="2" column="0"> 
     378             <widget class="QFrame" name="frame_2"> 
     379              <property name="styleSheet"> 
     380               <string notr="true"/> 
     381              </property> 
     382              <property name="frameShape"> 
     383               <enum>QFrame::StyledPanel</enum> 
     384              </property> 
     385              <property name="frameShadow"> 
     386               <enum>QFrame::Raised</enum> 
     387              </property> 
     388              <layout class="QHBoxLayout" name="horizontalLayout_14"> 
     389               <property name="margin"> 
     390                <number>2</number> 
     391               </property> 
     392               <item> 
     393                <layout class="QFormLayout" name="formLayout_7"> 
     394                 <property name="fieldGrowthPolicy"> 
     395                  <enum>QFormLayout::ExpandingFieldsGrow</enum> 
     396                 </property> 
     397                 <item row="0" column="0"> 
     398                  <widget class="QLabel" name="label_3"> 
     399                   <property name="text"> 
     400                    <string>Created:</string> 
     401                   </property> 
     402                  </widget> 
     403                 </item> 
     404                 <item row="1" column="0"> 
     405                  <widget class="QLabel" name="label_5"> 
     406                   <property name="text"> 
     407                    <string>Architecture:</string> 
     408                   </property> 
     409                  </widget> 
     410                 </item> 
     411                 <item row="0" column="1"> 
     412                  <widget class="QLabel" name="label_install_date"> 
     413                   <property name="text"> 
     414                    <string notr="true">Build Date</string> 
     415                   </property> 
     416                  </widget> 
     417                 </item> 
     418                 <item row="1" column="1"> 
     419                  <widget class="QLabel" name="label_install_arch"> 
     420                   <property name="text"> 
     421                    <string notr="true">arch</string> 
     422                   </property> 
     423                  </widget> 
     424                 </item> 
     425                 <item row="2" column="0"> 
     426                  <widget class="QLabel" name="label"> 
     427                   <property name="text"> 
     428                    <string>Version:</string> 
     429                   </property> 
     430                  </widget> 
     431                 </item> 
     432                 <item row="2" column="1"> 
     433                  <widget class="QLabel" name="label_install_version"> 
     434                   <property name="text"> 
     435                    <string notr="true">x.xx.x</string> 
     436                   </property> 
     437                  </widget> 
     438                 </item> 
     439                </layout> 
     440               </item> 
     441               <item> 
     442                <layout class="QFormLayout" name="formLayout"> 
     443                 <property name="fieldGrowthPolicy"> 
     444                  <enum>QFormLayout::ExpandingFieldsGrow</enum> 
     445                 </property> 
     446                 <item row="0" column="0"> 
     447                  <widget class="QLabel" name="label_4"> 
     448                   <property name="text"> 
     449                    <string>License:</string> 
     450                   </property> 
     451                  </widget> 
     452                 </item> 
     453                 <item row="0" column="1"> 
     454                  <widget class="QLabel" name="label_install_license"> 
     455                   <property name="text"> 
     456                    <string notr="true">BSD</string> 
     457                   </property> 
     458                  </widget> 
     459                 </item> 
     460                 <item row="1" column="0"> 
     461                  <widget class="QLabel" name="label_2"> 
     462                   <property name="text"> 
     463                    <string>Shortcuts:</string> 
     464                   </property> 
     465                  </widget> 
     466                 </item> 
     467                 <item row="1" column="1"> 
     468                  <widget class="QLabel" name="label_install_shortcuts"> 
     469                   <property name="text"> 
     470                    <string notr="true">Desktop, Menu</string> 
     471                   </property> 
     472                  </widget> 
     473                 </item> 
     474                </layout> 
     475               </item> 
     476              </layout> 
    163477             </widget> 
    164478            </item> 
    165             <item> 
    166              <spacer name="horizontalSpacer_2"> 
    167               <property name="orientation"> 
    168                <enum>Qt::Horizontal</enum> 
    169               </property> 
    170               <property name="sizeHint" stdset="0"> 
    171                <size> 
    172                 <width>40</width> 
    173                 <height>20</height> 
    174                </size> 
    175               </property> 
    176              </spacer> 
    177             </item> 
    178             <item> 
    179              <widget class="QToolButton" name="tool_install_details"> 
    180               <property name="text"> 
    181                <string>Application Details</string> 
    182               </property> 
    183               <property name="icon"> 
    184                <iconset resource="SoftwareManager.qrc"> 
    185                 <normaloff>:/icons/go-next.png</normaloff>:/icons/go-next.png</iconset> 
    186               </property> 
    187               <property name="toolButtonStyle"> 
    188                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    189               </property> 
    190              </widget> 
    191             </item> 
    192            </layout> 
    193           </item> 
    194          </layout> 
    195         </widget> 
    196         <widget class="QWidget" name="page_install_details"> 
    197          <layout class="QVBoxLayout" name="verticalLayout_2"> 
    198           <item> 
    199            <widget class="QFrame" name="frame"> 
    200             <property name="styleSheet"> 
    201              <string notr="true">QFrame{background-color: rgba(250,250,250,170);}</string> 
    202             </property> 
    203             <property name="frameShape"> 
    204              <enum>QFrame::StyledPanel</enum> 
    205             </property> 
    206             <property name="frameShadow"> 
    207              <enum>QFrame::Raised</enum> 
    208             </property> 
    209             <layout class="QHBoxLayout" name="horizontalLayout_11"> 
    210              <property name="spacing"> 
    211               <number>2</number> 
    212              </property> 
    213              <property name="margin"> 
    214               <number>2</number> 
    215              </property> 
    216              <item> 
    217               <widget class="QToolButton" name="tool_install_back"> 
    218                <property name="text"> 
    219                 <string>Back</string> 
    220                </property> 
    221                <property name="icon"> 
    222                 <iconset resource="SoftwareManager.qrc"> 
    223                  <normaloff>:/icons/go-previous.png</normaloff>:/icons/go-previous.png</iconset> 
    224                </property> 
    225                <property name="toolButtonStyle"> 
    226                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
    227                </property> 
    228               </widget> 
    229              </item> 
    230              <item> 
    231               <spacer name="horizontalSpacer_7"> 
    232                <property name="orientation"> 
    233                 <enum>Qt::Horizontal</enum> 
    234                </property> 
    235                <property name="sizeHint" stdset="0"> 
    236                 <size> 
    237                  <width>0</width> 
    238                  <height>20</height> 
    239                 </size> 
    240                </property> 
    241               </spacer> 
    242              </item> 
    243              <item> 
    244               <widget class="QToolButton" name="tool_install_remove"> 
    245                <property name="toolTip"> 
    246                 <string>Remove the selected application</string> 
    247                </property> 
    248                <property name="statusTip"> 
    249                 <string>Remove the selected application</string> 
    250                </property> 
    251                <property name="text"> 
    252                 <string>Uninstall</string> 
    253                </property> 
    254                <property name="icon"> 
    255                 <iconset resource="SoftwareManager.qrc"> 
    256                  <normaloff>:/icons/remove.png</normaloff>:/icons/remove.png</iconset> 
    257                </property> 
    258                <property name="toolButtonStyle"> 
    259                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
    260                </property> 
    261               </widget> 
    262              </item> 
    263             </layout> 
    264            </widget> 
    265           </item> 
    266           <item> 
    267            <layout class="QHBoxLayout" name="horizontalLayout_6"> 
    268             <item> 
    269              <widget class="QLabel" name="label_install_icon"> 
     479            <item row="3" column="0"> 
     480             <widget class="QPlainTextEdit" name="text_install_description"> 
    270481              <property name="sizePolicy"> 
    271                <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> 
     482               <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
    272483                <horstretch>0</horstretch> 
    273484                <verstretch>0</verstretch> 
    274485               </sizepolicy> 
    275486              </property> 
    276               <property name="maximumSize"> 
    277                <size> 
    278                 <width>64</width> 
    279                 <height>64</height> 
    280                </size> 
    281               </property> 
    282               <property name="text"> 
    283                <string/> 
    284               </property> 
    285               <property name="pixmap"> 
    286                <pixmap resource="SoftwareManager.qrc">:/icons/appcafe.png</pixmap> 
    287               </property> 
    288               <property name="scaledContents"> 
    289                <bool>false</bool> 
     487              <property name="readOnly"> 
     488               <bool>true</bool> 
    290489              </property> 
    291490             </widget> 
    292491            </item> 
    293             <item> 
    294              <layout class="QVBoxLayout" name="verticalLayout_3"> 
     492            <item row="4" column="0"> 
     493             <layout class="QHBoxLayout" name="horizontalLayout_12"> 
     494              <property name="margin"> 
     495               <number>1</number> 
     496              </property> 
    295497              <item> 
    296                <widget class="QLabel" name="label_install_app"> 
    297                 <property name="font"> 
    298                  <font> 
    299                   <pointsize>12</pointsize> 
    300                   <weight>75</weight> 
    301                   <bold>true</bold> 
    302                   <underline>true</underline> 
    303                  </font> 
    304                 </property> 
     498               <widget class="QToolButton" name="tool_install_shortcuts"> 
    305499                <property name="text"> 
    306                  <string notr="true">Application</string> 
    307                 </property> 
    308                 <property name="alignment"> 
    309                  <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
     500                 <string>Shortcuts</string> 
     501                </property> 
     502                <property name="icon"> 
     503                 <iconset resource="SoftwareManager.qrc"> 
     504                  <normaloff>:/icons/config.png</normaloff>:/icons/config.png</iconset> 
     505                </property> 
     506                <property name="toolButtonStyle"> 
     507                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
    310508                </property> 
    311509               </widget> 
    312510              </item> 
    313511              <item> 
    314                <widget class="QLabel" name="label_install_author"> 
     512               <widget class="QToolButton" name="tool_install_maintainer"> 
    315513                <property name="text"> 
    316                  <string notr="true">&lt;a href=&quot;http://www.pcbsd.org&quot;&gt;PC_BSD&lt;/a&gt;</string> 
    317                 </property> 
    318                 <property name="alignment"> 
    319                  <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> 
    320                 </property> 
    321                 <property name="openExternalLinks"> 
    322                  <bool>true</bool> 
    323                 </property> 
    324                 <property name="textInteractionFlags"> 
    325                  <set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse</set> 
     514                 <string>Contact Maintainer</string> 
     515                </property> 
     516                <property name="icon"> 
     517                 <iconset resource="SoftwareManager.qrc"> 
     518                  <normaloff>:/icons/email.png</normaloff>:/icons/email.png</iconset> 
     519                </property> 
     520                <property name="popupMode"> 
     521                 <enum>QToolButton::InstantPopup</enum> 
     522                </property> 
     523                <property name="toolButtonStyle"> 
     524                 <enum>Qt::ToolButtonTextBesideIcon</enum> 
     525                </property> 
     526               </widget> 
     527              </item> 
     528              <item> 
     529               <spacer name="horizontalSpacer_9"> 
     530                <property name="orientation"> 
     531                 <enum>Qt::Horizontal</enum> 
     532                </property> 
     533                <property name="sizeHint" stdset="0"> 
     534                 <size> 
     535                  <width>40</width> 
     536                  <height>20</height> 
     537                 </size> 
     538                </property> 
     539               </spacer> 
     540              </item> 
     541              <item> 
     542               <widget class="QCheckBox" name="check_install_autoupdate"> 
     543                <property name="statusTip"> 
     544                 <string>Automatically update the selected application when an update is available</string> 
     545                </property> 
     546                <property name="text"> 
     547                 <string>Auto-Update</string> 
     548                </property> 
     549                <property name="icon"> 
     550                 <iconset resource="SoftwareManager.qrc"> 
     551                  <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    326552                </property> 
    327553               </widget> 
     
    329555             </layout> 
    330556            </item> 
    331            </layout> 
    332           </item> 
    333           <item> 
    334            <widget class="QFrame" name="frame_2"> 
    335             <property name="styleSheet"> 
    336              <string notr="true"/> 
    337             </property> 
    338             <property name="frameShape"> 
    339              <enum>QFrame::StyledPanel</enum> 
    340             </property> 
    341             <property name="frameShadow"> 
    342              <enum>QFrame::Raised</enum> 
    343             </property> 
    344             <layout class="QHBoxLayout" name="horizontalLayout_14"> 
    345              <property name="margin"> 
    346               <number>2</number> 
    347              </property> 
    348              <item> 
    349               <layout class="QFormLayout" name="formLayout_7"> 
    350                <property name="fieldGrowthPolicy"> 
    351                 <enum>QFormLayout::ExpandingFieldsGrow</enum> 
    352                </property> 
    353                <item row="0" column="0"> 
    354                 <widget class="QLabel" name="label_3"> 
    355                  <property name="text"> 
    356                   <string>Created:</string> 
    357                  </property> 
    358                 </widget> 
    359                </item> 
    360                <item row="1" column="0"> 
    361                 <widget class="QLabel" name="label_5"> 
    362                  <property name="text"> 
    363                   <string>Architecture:</string> 
    364                  </property> 
    365                 </widget> 
    366                </item> 
    367                <item row="0" column="1"> 
    368                 <widget class="QLabel" name="label_install_date"> 
    369                  <property name="text"> 
    370                   <string notr="true">Build Date</string> 
    371                  </property> 
    372                 </widget> 
    373                </item> 
    374                <item row="1" column="1"> 
    375                 <widget class="QLabel" name="label_install_arch"> 
    376                  <property name="text"> 
    377                   <string notr="true">arch</string> 
    378                  </property> 
    379                 </widget> 
    380                </item> 
    381                <item row="2" column="0"> 
    382                 <widget class="QLabel" name="label"> 
    383                  <property name="text"> 
    384                   <string>Version:</string> 
    385                  </property> 
    386                 </widget> 
    387                </item> 
    388                <item row="2" column="1"> 
    389                 <widget class="QLabel" name="label_install_version"> 
    390                  <property name="text"> 
    391                   <string notr="true">x.xx.x</string> 
    392                  </property> 
    393                 </widget> 
    394                </item> 
    395               </layout> 
    396              </item> 
    397              <item> 
    398               <layout class="QFormLayout" name="formLayout"> 
    399                <property name="fieldGrowthPolicy"> 
    400                 <enum>QFormLayout::ExpandingFieldsGrow</enum> 
    401                </property> 
    402                <item row="0" column="0"> 
    403                 <widget class="QLabel" name="label_4"> 
    404                  <property name="text"> 
    405                   <string>License:</string> 
    406                  </property> 
    407                 </widget> 
    408                </item> 
    409                <item row="0" column="1"> 
    410                 <widget class="QLabel" name="label_install_license"> 
    411                  <property name="text"> 
    412                   <string notr="true">BSD</string> 
    413                  </property> 
    414                 </widget> 
    415                </item> 
    416                <item row="1" column="0"> 
    417                 <widget class="QLabel" name="label_2"> 
    418                  <property name="text"> 
    419                   <string>Shortcuts:</string> 
    420                  </property> 
    421                 </widget> 
    422                </item> 
    423                <item row="1" column="1"> 
    424                 <widget class="QLabel" name="label_install_shortcuts"> 
    425                  <property name="text"> 
    426                   <string notr="true">Desktop, Menu</string> 
    427                  </property> 
    428                 </widget> 
    429                </item> 
    430               </layout> 
    431              </item> 
    432             </layout> 
    433            </widget> 
    434           </item> 
    435           <item> 
    436            <widget class="QPlainTextEdit" name="text_install_description"> 
    437             <property name="sizePolicy"> 
    438              <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
    439               <horstretch>0</horstretch> 
    440               <verstretch>0</verstretch> 
    441              </sizepolicy> 
    442             </property> 
    443             <property name="readOnly"> 
    444              <bool>true</bool> 
    445             </property> 
    446            </widget> 
    447           </item> 
    448           <item> 
    449            <layout class="QHBoxLayout" name="horizontalLayout_12"> 
    450             <property name="margin"> 
    451              <number>1</number> 
    452             </property> 
    453             <item> 
    454              <widget class="QToolButton" name="tool_install_startApp"> 
    455               <property name="statusTip"> 
    456                <string>Start the application</string> 
    457               </property> 
    458               <property name="text"> 
    459                <string>Start Application</string> 
    460               </property> 
    461               <property name="icon"> 
    462                <iconset resource="SoftwareManager.qrc"> 
    463                 <normaloff>:/icons/application.png</normaloff>:/icons/application.png</iconset> 
    464               </property> 
    465               <property name="popupMode"> 
    466                <enum>QToolButton::InstantPopup</enum> 
    467               </property> 
    468               <property name="toolButtonStyle"> 
    469                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    470               </property> 
    471              </widget> 
    472             </item> 
    473             <item> 
    474              <widget class="QToolButton" name="tool_install_maintainer"> 
    475               <property name="text"> 
    476                <string>Contact Maintainer</string> 
    477               </property> 
    478               <property name="icon"> 
    479                <iconset resource="SoftwareManager.qrc"> 
    480                 <normaloff>:/icons/email.png</normaloff>:/icons/email.png</iconset> 
    481               </property> 
    482               <property name="popupMode"> 
    483                <enum>QToolButton::InstantPopup</enum> 
    484               </property> 
    485               <property name="toolButtonStyle"> 
    486                <enum>Qt::ToolButtonTextBesideIcon</enum> 
    487               </property> 
    488              </widget> 
    489             </item> 
    490             <item> 
    491              <spacer name="horizontalSpacer_9"> 
     557            <item row="5" column="0"> 
     558             <spacer name="verticalSpacer"> 
    492559              <property name="orientation"> 
    493                <enum>Qt::Horizontal</enum> 
     560               <enum>Qt::Vertical</enum> 
    494561              </property> 
    495562              <property name="sizeHint" stdset="0"> 
    496563               <size> 
    497                 <width>40</width> 
    498                 <height>20</height> 
     564                <width>20</width> 
     565                <height>0</height> 
    499566               </size> 
    500567              </property> 
    501568             </spacer> 
    502569            </item> 
    503             <item> 
    504              <widget class="QCheckBox" name="check_install_autoupdate"> 
    505               <property name="statusTip"> 
    506                <string>Automatically update the selected application when an update is available</string> 
    507               </property> 
    508               <property name="text"> 
    509                <string>Auto-Update</string> 
    510               </property> 
    511               <property name="icon"> 
    512                <iconset resource="SoftwareManager.qrc"> 
    513                 <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    514               </property> 
     570            <item row="6" column="0"> 
     571             <widget class="QGroupBox" name="group_install_appStat"> 
     572              <property name="title"> 
     573               <string>Current Operations</string> 
     574              </property> 
     575              <property name="flat"> 
     576               <bool>true</bool> 
     577              </property> 
     578              <layout class="QVBoxLayout" name="verticalLayout_18"> 
     579               <item> 
     580                <layout class="QHBoxLayout" name="horizontalLayout_10"> 
     581                 <item> 
     582                  <widget class="QToolButton" name="tool_install_cancel"> 
     583                   <property name="sizePolicy"> 
     584                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> 
     585                     <horstretch>0</horstretch> 
     586                     <verstretch>0</verstretch> 
     587                    </sizepolicy> 
     588                   </property> 
     589                   <property name="toolTip"> 
     590                    <string>Cancel any actions for this application</string> 
     591                   </property> 
     592                   <property name="statusTip"> 
     593                    <string>Cancel any actions for this application</string> 
     594                   </property> 
     595                   <property name="text"> 
     596                    <string>Cancel Operations</string> 
     597                   </property> 
     598                   <property name="icon"> 
     599                    <iconset resource="SoftwareManager.qrc"> 
     600                     <normaloff>:/icons/dialog-cancel.png</normaloff>:/icons/dialog-cancel.png</iconset> 
     601                   </property> 
     602                   <property name="toolButtonStyle"> 
     603                    <enum>Qt::ToolButtonIconOnly</enum> 
     604                   </property> 
     605                  </widget> 
     606                 </item> 
     607                 <item> 
     608                  <widget class="QToolButton" name="tool_install_update"> 
     609                   <property name="toolTip"> 
     610                    <string>Update the application to the most recent version</string> 
     611                   </property> 
     612                   <property name="statusTip"> 
     613                    <string>Update the selected application</string> 
     614                   </property> 
     615                   <property name="text"> 
     616                    <string>Update</string> 
     617                   </property> 
     618                   <property name="icon"> 
     619                    <iconset resource="SoftwareManager.qrc"> 
     620                     <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
     621                   </property> 
     622                   <property name="toolButtonStyle"> 
     623                    <enum>Qt::ToolButtonIconOnly</enum> 
     624                   </property> 
     625                  </widget> 
     626                 </item> 
     627                 <item> 
     628                  <widget class="QLabel" name="label_install_status"> 
     629                   <property name="sizePolicy"> 
     630                    <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
     631                     <horstretch>0</horstretch> 
     632                     <verstretch>0</verstretch> 
     633                    </sizepolicy> 
     634                   </property> 
     635                   <property name="text"> 
     636                    <string notr="true">TextLabel</string> 
     637                   </property> 
     638                   <property name="wordWrap"> 
     639                    <bool>true</bool> 
     640                   </property> 
     641                  </widget> 
     642                 </item> 
     643                </layout> 
     644               </item> 
     645               <item> 
     646                <layout class="QHBoxLayout" name="horizontalLayout_9"> 
     647                 <item> 
     648                  <widget class="QProgressBar" name="progress_install_DL"> 
     649                   <property name="value"> 
     650                    <number>24</number> 
     651                   </property> 
     652                  </widget> 
     653                 </item> 
     654                 <item> 
     655                  <widget class="QLabel" name="label_install_DL"> 
     656                   <property name="minimumSize"> 
     657                    <size> 
     658                     <width>80</width> 
     659                     <height>0</height> 
     660                    </size> 
     661                   </property> 
     662                   <property name="text"> 
     663                    <string notr="true">label</string> 
     664                   </property> 
     665                   <property name="alignment"> 
     666                    <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
     667                   </property> 
     668                  </widget> 
     669                 </item> 
     670                </layout> 
     671               </item> 
     672              </layout> 
    515673             </widget> 
    516674            </item> 
    517675           </layout> 
    518           </item> 
    519           <item> 
    520            <spacer name="verticalSpacer"> 
    521             <property name="orientation"> 
    522              <enum>Qt::Vertical</enum> 
    523             </property> 
    524             <property name="sizeHint" stdset="0"> 
    525              <size> 
    526               <width>20</width> 
    527               <height>20</height> 
    528              </size> 
    529             </property> 
    530            </spacer> 
    531           </item> 
    532           <item> 
    533            <widget class="QGroupBox" name="group_install_appStat"> 
    534             <property name="title"> 
    535              <string>Current Operations</string> 
    536             </property> 
    537             <property name="flat"> 
    538              <bool>true</bool> 
    539             </property> 
    540             <layout class="QVBoxLayout" name="verticalLayout_18"> 
    541              <item> 
    542               <layout class="QHBoxLayout" name="horizontalLayout_10"> 
    543                <item> 
    544                 <widget class="QToolButton" name="tool_install_cancel"> 
    545                  <property name="sizePolicy"> 
    546                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> 
    547                    <horstretch>0</horstretch> 
    548                    <verstretch>0</verstretch> 
    549                   </sizepolicy> 
    550                  </property> 
    551                  <property name="toolTip"> 
    552                   <string>Cancel any actions for this application</string> 
    553                  </property> 
    554                  <property name="statusTip"> 
    555                   <string>Cancel any actions for this application</string> 
    556                  </property> 
    557                  <property name="text"> 
    558                   <string>Cancel Operations</string> 
    559                  </property> 
    560                  <property name="icon"> 
    561                   <iconset resource="SoftwareManager.qrc"> 
    562                    <normaloff>:/icons/dialog-cancel.png</normaloff>:/icons/dialog-cancel.png</iconset> 
    563                  </property> 
    564                  <property name="toolButtonStyle"> 
    565                   <enum>Qt::ToolButtonIconOnly</enum> 
    566                  </property> 
    567                 </widget> 
    568                </item> 
    569                <item> 
    570                 <widget class="QToolButton" name="tool_install_update"> 
    571                  <property name="toolTip"> 
    572                   <string>Update the application to the most recent version</string> 
    573                  </property> 
    574                  <property name="statusTip"> 
    575                   <string>Update the selected application</string> 
    576                  </property> 
    577                  <property name="text"> 
    578                   <string>Update</string> 
    579                  </property> 
    580                  <property name="icon"> 
    581                   <iconset resource="SoftwareManager.qrc"> 
    582                    <normaloff>:/icons/view-refresh.png</normaloff>:/icons/view-refresh.png</iconset> 
    583                  </property> 
    584                  <property name="toolButtonStyle"> 
    585                   <enum>Qt::ToolButtonIconOnly</enum> 
    586                  </property> 
    587                 </widget> 
    588                </item> 
    589                <item> 
    590                 <widget class="QLabel" name="label_install_status"> 
    591                  <property name="sizePolicy"> 
    592                   <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> 
    593                    <horstretch>0</horstretch> 
    594                    <verstretch>0</verstretch> 
    595                   </sizepolicy> 
    596                  </property> 
    597                  <property name="text"> 
    598                   <string notr="true">TextLabel</string> 
    599                  </property> 
    600                  <property name="wordWrap"> 
    601                   <bool>true</bool> 
    602                  </property> 
    603                 </widget> 
    604                </item> 
    605               </layout> 
    606              </item> 
    607              <item> 
    608               <layout class="QHBoxLayout" name="horizontalLayout_9"> 
    609                <item> 
    610                 <widget class="QProgressBar" name="progress_install_DL"> 
    611                  <property name="value"> 
    612                   <number>24</number> 
    613                  </property> 
    614                 </widget> 
    615                </item> 
    616                <item> 
    617                 <widget class="QLabel" name="label_install_DL"> 
    618                  <property name="minimumSize"> 
    619                   <size> 
    620                    <width>80</width> 
    621                    <height>0</height> 
    622                   </size> 
    623                  </property> 
    624                  <property name="text"> 
    625                   <string notr="true">label</string> 
    626                  </property> 
    627                  <property name="alignment"> 
    628                   <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> 
    629                  </property> 
    630                 </widget> 
    631                </item> 
    632               </layout> 
    633              </item> 
    634             </layout> 
    635            </widget> 
    636           </item> 
    637          </layout> 
    638         </widget> 
    639        </widget> 
     676          </widget> 
     677         </widget> 
     678        </item> 
     679       </layout> 
    640680      </widget> 
    641681      <widget class="QWidget" name="tab_browse"> 
     
    837877                    <x>0</x> 
    838878                    <y>0</y> 
    839                     <width>70</width> 
    840                     <height>16</height> 
     879                    <width>407</width> 
     880                    <height>61</height> 
    841881                   </rect> 
    842882                  </property> 
     
    888928                    <x>0</x> 
    889929                    <y>0</y> 
    890                     <width>49</width> 
    891                     <height>16</height> 
     930                    <width>401</width> 
     931                    <height>254</height> 
    892932                   </rect> 
    893933                  </property> 
     
    913953                 <x>0</x> 
    914954                 <y>0</y> 
    915                  <width>86</width> 
    916                  <height>16</height> 
     955                 <width>423</width> 
     956                 <height>381</height> 
    917957                </rect> 
    918958               </property> 
     
    12721312               <size> 
    12731313                <width>20</width> 
    1274                 <height>40</height> 
     1314                <height>0</height> 
    12751315               </size> 
    12761316              </property> 
     
    13131353                    <x>0</x> 
    13141354                    <y>0</y> 
    1315                     <width>413</width> 
     1355                    <width>411</width> 
    13161356                    <height>61</height> 
    13171357                   </rect> 
     
    13741414                    <x>0</x> 
    13751415                    <y>0</y> 
    1376                     <width>55</width> 
    1377                     <height>16</height> 
     1416                    <width>407</width> 
     1417                    <height>148</height> 
    13781418                   </rect> 
    13791419                  </property> 
     
    14121452                    <x>0</x> 
    14131453                    <y>0</y> 
    1414                     <width>55</width> 
    1415                     <height>16</height> 
     1454                    <width>407</width> 
     1455                    <height>148</height> 
    14161456                   </rect> 
    14171457                  </property> 
     
    14371477     <x>0</x> 
    14381478     <y>0</y> 
    1439      <width>475</width> 
     1479     <width>473</width> 
    14401480     <height>20</height> 
    14411481    </rect> 
     
    14451485     <string>File</string> 
    14461486    </property> 
     1487    <addaction name="actionInstall_From_File"/> 
     1488    <addaction name="separator"/> 
    14471489    <addaction name="actionImport_PBI_List"/> 
    14481490    <addaction name="actionExport_PBI_List"/> 
     
    15071549   </property> 
    15081550  </action> 
     1551  <action name="actionInstall_From_File"> 
     1552   <property name="icon"> 
     1553    <iconset resource="SoftwareManager.qrc"> 
     1554     <normaloff>:/icons/add.png</normaloff>:/icons/add.png</iconset> 
     1555   </property> 
     1556   <property name="text"> 
     1557    <string>Install PBI</string> 
     1558   </property> 
     1559  </action> 
    15091560 </widget> 
    15101561 <resources> 
    15111562  <include location="SoftwareManager.qrc"/> 
    1512   <include location="../../../../.designer/backup/SoftwareManager.qrc"/> 
    15131563 </resources> 
    15141564 <connections/> 
  • src-qt4/pc-softwaremanager/pbiBackend.cpp

    r2916111 re543bca  
    292292  //Now emit the signal that items have changed or been added 
    293293  emit LocalPBIChanges(); 
     294} 
     295 
     296void PBIBackend::installPBIFromFile(QStringList files){ 
     297  qDebug() << "Install PBI files requested for:" << files; 
     298  for(int i=0; i<files.length(); i++){ 
     299    if(!files[i].endsWith(".pbi")){ continue; } //invalid file 
     300    //Now load the info about this PBI 
     301    bool root = PBIFileNeedsRoot(files[i]); 
     302    //Now create the commands 
     303    QString cmd = addRootCMD("pc-pbigui "+files[i], root); 
     304    //Don't bother integrating it furthur, the pc-pbigui will handle it all better 
     305    //  and if it actually gets installed it will automatically get detected/added to the AppCafe list 
     306    PENDINGOTHER << "EXTERNAL:::"+cmd; 
     307  } 
     308  QTimer::singleShot(0,this,SLOT(checkProcesses()) ); 
    294309} 
    295310 
     
    861876 } 
    862877  
    863  QStringList PBIBackend::removePbiCMD(QString pbiID, QStringList list){ 
     878QStringList PBIBackend::removePbiCMD(QString pbiID, QStringList list){ 
    864879   //Used for removing any pending CMD's for a particular pbiID 
    865880   QStringList output; 
     
    868883   } 
    869884   return output; 
    870  } 
    871   
     885} 
     886 
     887bool PBIBackend::PBIFileNeedsRoot(QString filepath){ 
     888  //Used to grab information from a stand-along *.pbi file 
     889  bool root = false; 
     890  QStringList info = Extras::getCmdOutput("pbi_add -i "+filepath); 
     891  //Only check if it needs root 
     892  root = !info.filter("RootInstall:").join("").contains("NO"); 
     893  return root; 
     894} 
     895 
    872896void PBIBackend::queueInstall(QString appID, QString version){ 
    873897  //This function assumes that the new app/version combination is not already installed on the system 
     
    9951019     QString cmd = PENDINGOTHER[0].section(":::",1,50); 
    9961020     PENDINGOTHER.removeAt(0);     
    997      if( !cmd.isEmpty() && PBIHASH.contains(cOther) ){ 
     1021     if( !cmd.isEmpty() && (PBIHASH.contains(cOther) || cOther=="EXTERNAL") ){ 
    9981022       //Update the PBI status 
    999        PBIHASH[cOther].setStatus(InstalledPBI::WORKING); 
    1000        emit PBIStatusChange(cOther); 
     1023       if(cOther!="EXTERNAL"){ 
     1024         PBIHASH[cOther].setStatus(InstalledPBI::WORKING); 
     1025         emit PBIStatusChange(cOther); 
     1026       } 
    10011027       //Start the process 
    10021028       PMAN->startProcess(ProcessManager::OTHER,cmd); 
  • src-qt4/pc-softwaremanager/pbiBackend.h

    r7cc177e re543bca  
    5252        void removePBI(QStringList pbiID); //start the removal process 
    5353        void installApp(QStringList appID); //[install/upgrade/downgrade] application from the repo (as appropriate) 
     54        void installPBIFromFile(QStringList files); //[install/upgrade/downgrade] application from file 
    5455        void addDesktopIcons(QStringList pbiID, bool allusers); // add XDG desktop icons 
    5556        void addMenuIcons(QStringList pbiID, bool allusers); // add XDG menu icons 
     
    121122        QString generateInstallCMD(QString appID, QString pbiID); 
    122123        QStringList removePbiCMD(QString pbiID, QStringList list); 
     124        bool PBIFileNeedsRoot(QString filepath); 
    123125         
    124126        //Internal functions for queuing up actions 
Note: See TracChangeset for help on using the changeset viewer.