/[gentoo-x86]/eclass/mount-boot.eclass
Gentoo

Contents of /eclass/mount-boot.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.18 - (hide annotations) (download)
Sun Jan 9 03:18:38 2011 UTC (3 years, 11 months ago) by vapier
Branch: MAIN
CVS Tags: HEAD
Changes since 1.17: +33 -3 lines
try to automatically remount/unmount /boot back to its pre-emerge state #348946 by Jaco Kroon

1 vapier 1.18 # Copyright 1999-2011 Gentoo Foundation
2 vapier 1.5 # Distributed under the terms of the GNU General Public License v2
3 vapier 1.18 # $Header: /var/cvsroot/gentoo-x86/eclass/mount-boot.eclass,v 1.17 2009/10/09 20:57:08 vapier Exp $
4 vapier 1.12 #
5     # This eclass is really only useful for bootloaders.
6 vapier 1.8 #
7     # If the live system has a separate /boot partition configured, then this
8     # function tries to ensure that it's mounted in rw mode, exiting with an
9     # error if it cant. It does nothing if /boot isn't a separate partition.
10 vapier 1.12 #
11     # MAINTAINER: base-system@gentoo.org
12 woodchip 1.1
13 vapier 1.18 EXPORT_FUNCTIONS pkg_preinst pkg_postinst pkg_prerm pkg_postrm
14 woodchip 1.1
15 vapier 1.13 mount-boot_mount_boot_partition() {
16     if [[ -n ${DONT_MOUNT_BOOT} ]] ; then
17     return
18     else
19 vapier 1.14 elog
20 vapier 1.17 elog "To avoid automounting and auto(un)installing with /boot,"
21 vapier 1.14 elog "just export the DONT_MOUNT_BOOT variable."
22     elog
23 vapier 1.13 fi
24    
25 woodchip 1.7 # note that /dev/BOOT is in the Gentoo default /etc/fstab file
26 vapier 1.13 local fstabstate=$(awk '!/^#|^[[:blank:]]+#|^\/dev\/BOOT/ {print $2}' /etc/fstab | egrep "^/boot$" )
27     local procstate=$(awk '$2 ~ /^\/boot$/ {print $2}' /proc/mounts)
28 vapier 1.16 local proc_ro=$(awk '{ print $2 " ," $4 "," }' /proc/mounts | sed -n '/\/boot .*,ro,/p')
29 woodchip 1.1
30     if [ -n "${fstabstate}" ] && [ -n "${procstate}" ]; then
31 woodchip 1.3 if [ -n "${proc_ro}" ]; then
32 woodchip 1.7 einfo
33     einfo "Your boot partition, detected as being mounted as /boot, is read-only."
34     einfo "Remounting it in read-write mode ..."
35     einfo
36 vapier 1.15 mount -o remount,rw /boot
37 woodchip 1.1 if [ "$?" -ne 0 ]; then
38 woodchip 1.7 eerror
39     eerror "Unable to remount in rw mode. Please do it manually!"
40     eerror
41     die "Can't remount in rw mode. Please do it manually!"
42 woodchip 1.1 fi
43 vapier 1.18 touch /boot/.e.remount
44 woodchip 1.1 else
45 woodchip 1.7 einfo
46 woodchip 1.1 einfo "Your boot partition was detected as being mounted as /boot."
47     einfo "Files will be installed there for ${PN} to function correctly."
48 woodchip 1.7 einfo
49 woodchip 1.1 fi
50     elif [ -n "${fstabstate}" ] && [ -z "${procstate}" ]; then
51 vapier 1.15 mount /boot -o rw
52 woodchip 1.1 if [ "$?" -eq 0 ]; then
53 woodchip 1.7 einfo
54 woodchip 1.3 einfo "Your boot partition was not mounted as /boot, but portage"
55     einfo "was able to mount it without additional intervention."
56 woodchip 1.1 einfo "Files will be installed there for ${PN} to function correctly."
57 woodchip 1.7 einfo
58 woodchip 1.1 else
59 woodchip 1.7 eerror
60     eerror "Cannot automatically mount your /boot partition."
61     eerror "Your boot partition has to be mounted rw before the installation"
62 woodchip 1.1 eerror "can continue. ${PN} needs to install important files there."
63 woodchip 1.7 eerror
64     die "Please mount your /boot partition manually!"
65 woodchip 1.1 fi
66 vapier 1.18 touch /boot/.e.mount
67 woodchip 1.1 else
68 woodchip 1.7 einfo
69 woodchip 1.1 einfo "Assuming you do not have a separate /boot partition."
70 woodchip 1.7 einfo
71 woodchip 1.1 fi
72     }
73    
74 vapier 1.13 mount-boot_pkg_preinst() {
75 woodchip 1.7 mount-boot_mount_boot_partition
76     }
77 vapier 1.17
78     mount-boot_pkg_prerm() {
79     touch "${ROOT}"/boot/.keep 2>/dev/null
80     mount-boot_mount_boot_partition
81     touch "${ROOT}"/boot/.keep 2>/dev/null
82     }
83 vapier 1.18
84     mount-boot_umount_boot_partition() {
85     if [[ -n ${DONT_MOUNT_BOOT} ]] ; then
86     return
87     fi
88    
89     if [ -e /boot/.e.remount ] ; then
90     einfo
91     einfo "Automatically remounting /boot as ro"
92     einfo
93     rm -f /boot/.e.remount
94     mount -o remount,ro /boot
95     elif [ -e /boot/.e.mount ] ; then
96     einfo
97     einfo "Automatically unmounting /boot"
98     einfo
99     rm -f /boot/.e.mount
100     umount /boot
101     fi
102     }
103    
104     mount-boot_pkg_postinst() {
105     mount-boot_umount_boot_partition
106     }
107    
108     mount-boot_pkg_postrm() {
109     mount-boot_umount_boot_partition
110     }

  ViewVC Help
Powered by ViewVC 1.1.20