blob: 36ce441b39040fca8a2d49167247bcd5a14d6a23 (
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
|
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/baselayout/baselayout-2.0.0.ebuild,v 1.5 2008/05/10 10:03:38 vapier Exp $
inherit multilib
DESCRIPTION="Filesystem baselayout and init scripts"
HOMEPAGE="http://www.gentoo.org/"
SRC_URI="mirror://gentoo/${P}.tar.bz2
http://dev.gentoo.org/~vapier/dist/${P}.tar.bz2"
LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd ~x86 ~x86-fbsd"
IUSE="build"
PDEPEND="sys-apps/openrc"
pkg_preinst() {
# Bug #217848 - Since the remap_dns_vars() called by pkg_preinst() of
# the baselayout-1.x ebuild copies all the real configs from the user's
# /etc/conf.d into ${D}, it makes them all appear to be the default
# versions. In order to protect them from being unmerged after this
# upgrade, modify their timestamps.
touch "${ROOT}"/etc/conf.d/* 2>/dev/null
# We need to install directories and maybe some dev nodes when building
# stages, but they cannot be in CONTENTS.
# Also, we cannot reference $S as binpkg will break so we do this.
if use build ; then
local libdirs="$(get_all_libdirs)" dir=
# Create our multilib dirs - the Makefile has no knowledge of this
: ${libdirs:=lib} # it isn't that we don't trust multilib.eclass...
for dir in ${libdirs}; do
mkdir -p "${ROOT}${dir}"
touch "${ROOT}${dir}"/.keep
mkdir -p "${ROOT}usr/${dir}"
touch "${ROOT}usr/${dir}"/.keep
mkdir -p "${ROOT}usr/local/${dir}"
touch "${ROOT}usr/local/${dir}"/.keep
done
# Ugly compatibility with stupid ebuilds and old profiles symlinks
if [ "${SYMLINK_LIB}" = "yes" ] ; then
rm -r "${ROOT}"/{lib,usr/lib,usr/local/lib} 2>/dev/null
local lib=$(get_abi_LIBDIR ${DEFAULT_ABI})
ln -s "${lib}" "${ROOT}lib"
ln -s "${lib}" "${ROOT}usr/lib"
ln -s "${lib}" "${ROOT}usr/local/lib"
fi
emake -C "${D}/usr/share/${PN}" DESTDIR="${ROOT}" layout || die "failed to layout filesystem"
fi
rm -f "${D}"/usr/share/${PN}/Makefile
}
src_install() {
local libdir="lib"
[[ ${SYMLINK_LIB} == "yes" ]] && libdir=$(get_abi_LIBDIR "${DEFAULT_ABI}")
emake \
OS=$(use kernel_FreeBSD && echo BSD || echo Linux) \
LIB=${libdir} \
DESTDIR="${D}" \
install || die
dodoc ChangeLog
# need the makefile in pkg_preinst
insinto /usr/share/${PN}
doins Makefile || die
# Should this belong in another ebuild? Like say binutils?
# List all the multilib libdirs in /etc/env/04multilib (only if they're
# actually different from the normal
if has_multilib_profile || [ $(get_libdir) != "lib" -o -n "${CONF_MULTILIBDIR}" ]; then
local libdirs="$(get_all_libdirs)" libdirs_env= dir=
: ${libdirs:=lib} # it isn't that we don't trust multilib.eclass...
for dir in ${libdirs}; do
libdirs_env=${libdirs_env:+$libdirs_env:}/${dir}:/usr/${dir}:/usr/local/${dir}
done
# Special-case uglyness... For people updating from lib32 -> lib amd64
# profiles, keep lib32 in the search path while it's around
if has_multilib_profile && [ -d "${ROOT}"lib32 -o -d "${ROOT}"lib32 ] && ! hasq lib32 ${libdirs}; then
libdirs_env="${libdirs_env}:/lib32:/usr/lib32:/usr/local/lib32"
fi
echo "LDPATH=\"${libdirs_env}\"" > "${T}"/04multilib
doenvd "${T}"/04multilib
fi
# rc-scripts version for testing of features that *should* be present
echo "Gentoo Base System release ${PV}" > "${D}"/etc/gentoo-release
}
pkg_postinst() {
# We installed some files to /usr/share/baselayout instead of /etc to stop
# (1) overwriting the user's settings
# (2) screwing things up when attempting to merge files
# (3) accidentally packaging up personal files with quickpkg
# If they don't exist then we install them
for x in master.passwd passwd shadow group fstab ; do
[ -e "${ROOT}etc/${x}" ] && continue
[ -e "${ROOT}usr/share/baselayout/${x}" ] || continue
cp -p "${ROOT}usr/share/baselayout/${x}" "${ROOT}"etc
done
# This is also written in src_install (so it's in CONTENTS), but
# write it here so that the new version is immediately in the file
# (without waiting for the user to do etc-update)
rm -f "${ROOT}"/etc/._cfg????_gentoo-release
local release="${PV}"
[ "${PR}" != r0 ] && release="${release}-${PR}"
echo "Gentoo Base System release ${release}" > "${ROOT}"/etc/gentoo-release
# whine about users that lack passwords #193541
if [[ -e ${ROOT}/etc/shadow ]] ; then
local bad_users=$(sed -n '/^[^:]*::/s|^\([^:]*\)::.*|\1|p' "${ROOT}"/etc/shadow)
if [[ -n ${bad_users} ]] ; then
echo
ewarn "The following users lack passwords!"
ewarn ${bad_users}
fi
fi
# whine about users with invalid shells #215698
if [[ -e ${ROOT}/etc/passwd ]] ; then
local bad_shells=$(awk -F: 'system("test -e " $7) { print $1 " - " $7}' /etc/passwd | sort)
if [[ -n ${bad_shells} ]] ; then
echo
ewarn "The following users have non-existent shells!"
ewarn "${bad_shells}"
fi
fi
}
|