Project

General

Profile

Download (7.45 KB) Statistics
| Branch: | Tag: | Revision:
1
#!/bin/sh
2
# Functions which perform the mounting / unmount for upgrades
3

    
4

    
5
mount_target_slice()
6
{
7
  MPART="${1}"
8

    
9
  # Import any zpools
10
  zpool import -a
11
  
12
  # Set a variable of files we want to make backups of before doing upgrade
13
  BKFILES="/etc/rc.conf /boot/loader.conf"
14

    
15
  if [ -e "/dev/${MPART}a.journal" ]
16
  then
17
    rc_halt "mount /dev/${MPART}.journal ${FSMNT}"
18
  elif [ -e "/dev/${MPART}a" ]
19
  then
20
    mount /dev/${MPART}a ${FSMNT}
21
    if [ "$?" != "0" ]
22
    then
23
      # Try ZFS on this slice
24
      mount -t zfs ${MPART}a ${FSMNT}
25
      if [ "${?}" != "0" ]
26
      then
27
        exit_err "Failed to mount ${MPART}"
28
      fi
29
    fi
30
  fi
31

    
32
  mount -t devfs devfs ${FSMNT}/dev
33
  chroot ${FSMNT} /sbin/mount -a >>${LOGOUT} 2>>${LOGOUT}
34
  chroot ${FSMNT} umount /proc >/dev/null 2>/dev/null 
35
  chroot ${FSMNT} umount /compat/linux/proc  >/dev/null 2>/dev/null
36

    
37
  # Save which partition was mounted, so we may unmount it later
38
  echo "umount -f /dev/${MPART}a" >>${TMPDIR}/.upgrade-unmount
39

    
40
  # Now before we start the upgrade, make sure we set our noschg flags
41
  echo_log "Cleaning up old filesystem... Please wait..."
42
  rc_halt "chflags -R noschg ${FSMNT}"
43

    
44
  # Make backup copies of some files
45
  for i in ${BKFILES}
46
  do
47
    cp ${FSMNT}${i} ${FSMNT}${i}.preUpgrade >/dev/null 2>/dev/null
48
  done
49

    
50
  # Remove some old dirs
51
  rm -rf ${FSMNT}/etc/rc.d >/dev/null 2>/dev/null
52

    
53
  # If we are doing PC-BSD install, lets cleanup old pkgs on disk
54
  if [ "$INSTALLTYPE" != "FreeBSD" ]
55
  then
56
    echo_log "Removing old packages, this may take a while... Please wait..."
57
    echo '#/bin/sh
58
for i in `pkg_info -E \*`
59
do
60
  echo "Uninstalling package: ${i}"
61
  pkg_delete -f ${i} >/dev/null 2>/dev/null
62
done
63
' >${FSMNT}/.cleanPkgs.sh
64
    chmod 755 ${FSMNT}/.cleanPkgs.sh
65
    chroot ${FSMNT} /.cleanPkgs.sh
66
    rm ${FSMNT}/.cleanPkgs.sh
67
    run_chroot_cmd "pkg_delete -f \*" >/dev/null 2>/dev/null
68
    run_chroot_cmd "rm -rf /usr/PCBSD" >/dev/null 2>/dev/null
69
    run_chroot_cmd "rm -rf /PCBSD" >/dev/null 2>/dev/null
70
    run_chroot_cmd "rm -rf /var/db/pkgs" >/dev/null 2>/dev/null
71
    run_chroot_cmd "rm -rf /usr/local32" >/dev/null 2>/dev/null
72
    run_chroot_cmd "rm -rf /usr/sbin" >/dev/null 2>/dev/null
73
    run_chroot_cmd "rm -rf /usr/lib" >/dev/null 2>/dev/null
74
    run_chroot_cmd "rm -rf /usr/bin" >/dev/null 2>/dev/null
75
    run_chroot_cmd "rm -rf /boot/kernel" >/dev/null 2>/dev/null
76
    run_chroot_cmd "rm -rf /sbin" >/dev/null 2>/dev/null
77
    run_chroot_cmd "rm -rf /bin" >/dev/null 2>/dev/null
78
    run_chroot_cmd "rm -rf /lib" >/dev/null 2>/dev/null
79
    run_chroot_cmd "rm -rf /libexec" >/dev/null 2>/dev/null
80
  fi
81

    
82
}
83

    
84
# Mount the target upgrade partitions
85
mount_upgrade()
86
{
87

    
88
  # Start with disk0
89
  disknum="0"
90

    
91
  # Make sure we remove the old upgrade-mount script
92
  rm -rf ${TMPDIR}/.upgrade-unmount >/dev/null 2>/dev/null
93

    
94
  # We are ready to start mounting, lets read the config and do it
95
  while read line
96
  do
97
     echo $line | grep "^disk${disknum}=" >/dev/null 2>/dev/null
98
     if [ "$?" = "0" ]
99
     then
100

    
101
       # Found a disk= entry, lets get the disk we are working on
102
       get_value_from_string "${line}"
103
       strip_white_space "$VAL"
104
       DISK="$VAL"
105
     
106
       # Before we go further, lets confirm this disk really exists
107
       if [ ! -e "/dev/${DISK}" ]
108
       then
109
         exit_err "ERROR: The disk ${DISK} does not exist!"
110
       fi
111
     fi
112

    
113
     echo $line | grep "^partition=" >/dev/null 2>/dev/null
114
     if [ "$?" = "0" ]
115
     then
116
       # Found a partition= entry, lets read / set it 
117
       get_value_from_string "${line}"
118
       strip_white_space "$VAL"
119
       PTYPE="$VAL"
120

    
121
       # We are using free space, figure out the slice number
122
       if [ "${PTYPE}" = "free" -o "${PTYPE}" = "all" ]
123
       then
124
           exit_err "ERROR: Invalid upgrade partition=${PTYPE}"
125
       fi
126
     fi
127

    
128
     echo $line | grep "^commitDiskPart" >/dev/null 2>/dev/null
129
     if [ "$?" = "0" ]
130
     then
131
       # Found our flag to commit this disk setup / lets do sanity check and do it
132
       if [ ! -z "${DISK}" -a ! -z "${PTYPE}" ]
133
       then
134
         case ${PTYPE} in
135
           s1|s2|s3|s4) tmpSLICE="${DISK}${PTYPE}a" ;;
136
                     *) exit_err "ERROR: Unknown PTYPE: $PTYPE" ;;
137
         esac
138

    
139
         if [ ! -e "/dev/${tmpSLICE}" ]
140
         then
141
           exit_err "ERROR: /dev/${tmpSLICE} does not exist! Mount failed!"
142
         fi
143

    
144
         # Start mounting this slice
145
         mount_target_slice "${DISK}${PTYPE}" 
146

    
147
         # Increment our disk counter to look for next disk and unset
148
         unset PTYPE DISK
149
         disknum="`expr $disknum + 1`"
150
       else
151
         exit_err "ERROR: commitDiskPart was called without procceding disk<num>= and partition= entries!!!" 
152
       fi
153
     fi
154

    
155
  done <${CFGF}
156

    
157
};
158

    
159
copy_skel_files_upgrade()
160
{
161

    
162
    # Now make sure we fix any user profile scripts, which cause problems from 7.x->8.x
163
    echo '#!/bin/sh
164

    
165
cd /home
166
for i in `ls`
167
do
168

    
169
  # Backup the old profile dirs
170
  if [ -d "${i}" ]
171
  then
172
    mv /home/${i}/.kde4 /home/${i}/.kde4.preUpgrade >/dev/null 2>/dev/null
173
    mv /home/${i}/.kde /home/${i}/.kde.preUpgrade >/dev/null 2>/dev/null
174
    mv /home/${i}/.fluxbox /home/${i}/.fluxbox.preUpgrade >/dev/null 2>/dev/null
175

    
176
    # Copy over the skel directories
177
    tar cv --exclude "./dot.*" -f - -C /usr/share/skel . 2>/dev/null | tar xvf - -C /home/${i} 2>/dev/null
178

    
179
    for j in `ls /usr/share/skel/dot*`
180
    do
181
      dname=`echo ${j} | sed s/dot//`
182
      cp /usr/share/skel/${j} /home/${i}/${dname}
183
    done
184

    
185
    chown -R ${i}:${i} /home/${i}
186
  fi
187

    
188
done
189
' >${FSMNT}/.fixUserProfile.sh  
190
    chmod 755 ${FSMNT}/.fixUserProfile.sh
191
    chroot ${FSMNT} /.fixUserProfile.sh >/dev/null 2>/dev/null
192
    rm ${FSMNT}/.fixUserProfile.sh
193

    
194

    
195

    
196
    # if the user wants to keep their original .kde4 profile
197
    ###########################################################################
198
    get_value_from_cfg "upgradeKeepDesktopProfile"
199
    if [ "$VAL" = "YES" -o "$VAL" = "yes" ] ; then
200
      echo '#!/bin/sh
201
      cd /home
202
for i in `ls`
203
do
204
  # Import the old config again
205
  if [ -d "${i}/.kde4.preUpgrade" ]
206
  then
207
    # Copy over the skel directories
208
    tar cv -f - -C /home/${i}/.kde4.preUpgrade . 2>/dev/null | tar xvf - -C /home/${i}/.kde4 2>/dev/null
209
    chown -R ${i}:${i} /home/${i}/.kde4
210
  fi
211
done
212
' >${FSMNT}/.fixUserProfile.sh
213
      chmod 755 ${FSMNT}/.fixUserProfile.sh
214
      chroot ${FSMNT} /.fixUserProfile.sh >/dev/null 2>/dev/null
215
      rm ${FSMNT}/.fixUserProfile.sh
216

    
217
    fi
218

    
219
};
220

    
221
# Function which merges some configuration files with the new defaults
222
merge_old_configs()
223
{
224

    
225
  # Merge the loader.conf with old
226
  cp ${FSMNT}/boot/loader.conf ${FSMNT}/boot/loader.conf.new
227
  merge_config "${FSMNT}/boot/loader.conf.preUpgrade" "${FSMNT}/boot/loader.conf.new" "${FSMNT}/boot/loader.conf"
228
  rm ${FSMNT}/boot/loader.conf.new
229

    
230
  # Merge the rc.conf with old
231
  cp ${FSMNT}/etc/rc.conf ${FSMNT}/etc/rc.conf.new
232
  merge_config "${FSMNT}/etc/rc.conf.preUpgrade" "${FSMNT}/etc/rc.conf.new" "${FSMNT}/etc/rc.conf"
233
  rm ${FSMNT}/etc/rc.conf.new
234

    
235
};
236

    
237
# Function which unmounts all the mounted file-systems
238
unmount_upgrade()
239
{
240

    
241
   # If on PC-BSD, make sure we copy any fixed skel files
242
   if [ "$INSTALLTYPE" != "FreeBSD" ] ; then
243
     copy_skel_files_upgrade
244
   fi
245

    
246
   cd /
247

    
248
   # Unmount FS
249
   chroot ${FSMNT} /sbin/umount -a >/dev/null 2>/dev/null
250
   umount ${FSMNT}/usr >/dev/null 2>/dev/null
251
   umount ${FSMNT}/var >/dev/null 2>/dev/null
252
   umount ${FSMNT}/dev >/dev/null 2>/dev/null
253
   umount ${FSMNT} >/dev/null 2>/dev/null
254

    
255
   # Run our saved unmount script for these file-systems
256
   rc_nohalt "sh ${TMPDIR}/.upgrade-unmount"
257
 
258
   umount ${CDMNT} 
259
};
(14-14/18)