add a mount-efi.eclass based on the mount-boot.eclass

git-svn-id: https://svn.disconnected-by-peer.at/svn/linamh/trunk/linamh@2729 6952d904-891a-0410-993b-d76249ca496b
This commit is contained in:
geos_one 2010-11-12 18:49:50 +00:00
parent 2d4ab531f1
commit 39905a5dd8
1 changed files with 80 additions and 0 deletions

80
eclass/mount-efi.eclass Normal file
View File

@ -0,0 +1,80 @@
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/mount-efi.eclass,v 1.17 2009/10/09 20:57:08 vapier Exp $
#
# This eclass is really only useful for efi bootloaders.
#
# If the live system has a separate /efi partition configured, then this
# function tries to ensure that it's mounted in rw mode, exiting with an
# error if it cant. It does nothing if /efi isn't a separate partition.
#
# MAINTAINER: base-system@gentoo.org
EXPORT_FUNCTIONS pkg_preinst pkg_prerm
mount-efi_mount_efi_partition() {
if [[ -n ${DONT_MOUNT_EFI} ]] ; then
return
else
elog
elog "To avoid automounting and auto(un)installing with /efi,"
elog "just export the DONT_MOUNT_EFI variable."
elog
fi
# note that /dev/EFI is in the Gentoo default /etc/fstab file
local fstabstate=$(awk '!/^#|^[[:blank:]]+#|^\/dev\/EFI/ {print $2}' /etc/fstab | egrep "^/efi$" )
local procstate=$(awk '$2 ~ /^\/efi$/ {print $2}' /proc/mounts)
local proc_ro=$(awk '{ print $2 " ," $4 "," }' /proc/mounts | sed -n '/\/efi .*,ro,/p')
if [ -n "${fstabstate}" ] && [ -n "${procstate}" ]; then
if [ -n "${proc_ro}" ]; then
einfo
einfo "Your efi partition, detected as being mounted as /efi, is read-only."
einfo "Remounting it in read-write mode ..."
einfo
mount -o remount,rw /efi
if [ "$?" -ne 0 ]; then
eerror
eerror "Unable to remount in rw mode. Please do it manually!"
eerror
die "Can't remount in rw mode. Please do it manually!"
fi
else
einfo
einfo "Your efi partition was detected as being mounted as /efi."
einfo "Files will be installed there for ${PN} to function correctly."
einfo
fi
elif [ -n "${fstabstate}" ] && [ -z "${procstate}" ]; then
mount /efi -o rw
if [ "$?" -eq 0 ]; then
einfo
einfo "Your efi partition was not mounted as /efi, but portage"
einfo "was able to mount it without additional intervention."
einfo "Files will be installed there for ${PN} to function correctly."
einfo
else
eerror
eerror "Cannot automatically mount your /efi partition."
eerror "Your efi partition has to be mounted rw before the installation"
eerror "can continue. ${PN} needs to install important files there."
eerror
die "Please mount your /efi partition manually!"
fi
else
einfo
einfo "Assuming you do not have a separate /efi partition."
einfo
fi
}
mount-efi_pkg_preinst() {
mount-efi_mount_efi_partition
}
mount-efi_pkg_prerm() {
touch "${ROOT}"/efi/.keep 2>/dev/null
mount-efi_mount_efi_partition
touch "${ROOT}"/efi/.keep 2>/dev/null
}