summaryrefslogtreecommitdiff
blob: bda5a8e95f7b3d84ec213cb74b207e9148f92c9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-kernel/dracut/dracut-006-r1.ebuild,v 1.2 2010/08/25 17:46:08 ramereth Exp $

EAPI=2

inherit eutils mount-boot

DESCRIPTION="Generic initramfs generation tool"
HOMEPAGE="http://sourceforge.net/projects/dracut/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"

COMMON_IUSE="btrfs debug mdraid multipath selinux syslog uswsusp xen"
NETWORK_IUSE="iscsi nbd nfs"
DM_IUSE="crypt dmraid dmsquash-live lvm"
IUSE="${COMMON_IUSE} ${DM_IUSE} ${NETWORK_IUSE}"

# common networking deps
NETWORK_DEPS="net-misc/bridge-utils >=net-misc/dhcp-3.1.2_p1 sys-apps/iproute2"
DM_DEPS="|| ( sys-fs/device-mapper >=sys-fs/lvm2-2.02.33 )"

RDEPEND="
	>=app-shells/bash-4.0
	>=app-shells/dash-0.5.4.11
	>=sys-apps/module-init-tools-3.5
	>=sys-apps/sysvinit-2.87-r3
	>=sys-apps/util-linux-2.16
	>=sys-fs/udev-149
	btrfs? ( sys-fs/btrfs-progs )
	crypt? ( sys-fs/cryptsetup ${DM_DEPS} )
	debug? ( dev-util/strace )
	dmraid? ( sys-fs/dmraid sys-fs/multipath-tools ${DM_DEPS} )
	dmsquash-live? ( sys-apps/eject ${DM_DEPS} )
	iscsi? ( sys-block/open-iscsi[utils] ${NETWORK_DEPS} )
	lvm? ( >=sys-fs/lvm2-2.02.33 )
	mdraid? ( sys-fs/mdadm )
	multipath? ( sys-fs/multipath-tools )
	nbd? ( sys-block/nbd ${NETWORK_DEPS} )
	nfs? ( net-fs/nfs-utils net-nds/rpcbind ${NETWORK_DEPS} )
	selinux? ( sys-libs/libselinux sys-libs/libsepol )
	syslog? ( || ( app-admin/syslog-ng app-admin/rsyslog ) )
	uswsusp? ( sys-power/suspend )
	xen? ( app-emulation/xen )
	"
DEPEND="${RDEPEND}"

#
# Helper functions
#

# Returns true if any of specified modules is enabled by USE flag and false
# otherwise.
# $1 = list of modules (which have corresponding USE flags of the same name)
any_module() {
	local m modules=" $@ "

	for m in ${modules}; do
		! use $m && modules=${modules/ $m / }
	done

	shopt -s extglob
	modules=${modules%%+( )}
	shopt -u extglob

	[[ ${modules} ]]
}

# Removes module from modules.d.
# $1 = module name
# Module name can be specified without number prefix.
rm_module() {
	local m

	for m in $@; do
		if [[ $m =~ ^[0-9][0-9][^\ ]*$ ]]; then
			rm -rf "${modules_dir}"/$m
		else
			rm -rf "${modules_dir}"/[0-9][0-9]$m
		fi
	done
}

#
# ebuild functions
#

src_prepare() {
	epatch "${FILESDIR}/${P}-dhcp6.patch"
	epatch "${FILESDIR}/${P}-lc-all-c.patch"
	epatch "${FILESDIR}/${P}-dm-udev-rules.patch"
	epatch "${FILESDIR}/${P}-console_init-not-necessary.patch"
}

src_compile() {
	emake WITH_SWITCH_ROOT=0 prefix=/usr sysconfdir=/etc || die "emake failed"
}

src_install() {
	emake WITH_SWITCH_ROOT=0 \
		prefix=/usr sysconfdir=/etc \
		DESTDIR="${D}" install || die "emake install failed"

	dodir /boot/dracut /var/lib/dracut/overlay
	dodoc HACKING TODO AUTHORS NEWS README*

	#
	# Modules
	#
	local module
	modules_dir="${D}/usr/share/dracut/modules.d"

	echo "${PF}" > "${modules_dir}"/10rpmversion/dracut-version

	# Disable modules not enabled by USE flags
	for module in ${IUSE} ; do
		! use ${module} && rm_module ${module}
	done

	! any_module ${DM_IUSE} && rm_module 90dm
	! any_module ${NETWORK_IUSE} && rm_module 45ifcfg 40network

	# Disable S/390 modules which are not tested at all
	rm_module 95dasd 95dasd_mod 95zfcp 95znet

	# Disable modules which won't work for sure
	rm_module 01fips 10redhat-i18n 95fcoe
}

pkg_postinst() {
	elog 'To generate the initramfs:'
	elog ' # mount /boot (if necessary)'
	elog ' # dracut "" <kernel-version>'
	elog ''
	elog 'For command line documentation, see:'
	elog 'http://sourceforge.net/apps/trac/dracut/wiki/commandline'
	elog ''
	elog 'Simple example to select root and resume partition:'
	elog ' root=/dev/???? resume=/dev/????'
	elog ''
	elog 'Configuration is in /etc/dracut.conf.'
	elog 'The default config is very minimal and is highly recommended you'
	elog 'adjust based on your needs. To include only drivers for this system,'
	elog 'use the "-H" option.'

	echo
	ewarn 'dhcp-3 is known to not work with QEMU. You will need dhcp-4 or'
	ewarn 'later for it.'
}