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
|
};
|