blob: a7beec09b9b95154316e461ab983317114dd3426 (
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
|
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
# Dropped these because blank as of 3.02
#PLOCALES="de es fi fr hu id pl"
PLOCALES="de es fr pl"
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/sysvinit.asc
inherit toolchain-funcs flag-o-matic plocale verify-sig
DESCRIPTION="/sbin/init - parent of all processes"
HOMEPAGE="https://savannah.nongnu.org/projects/sysvinit"
# https://github.com/slicer69/sysvinit/issues/12
#SRC_URI="mirror://nongnu/${PN}/${P/_/-}.tar.xz"
#SRC_URI+=" verify-sig? ( mirror://nongnu/${PN}/${P/_/-}.tar.xz.sig )"
SRC_URI="https://github.com/slicer69/sysvinit/releases/download/${PV}/${P}.tar.xz"
SRC_URI+=" verify-sig? ( https://github.com/slicer69/sysvinit/releases/download/${PV}/${P}.tar.xz.sig )"
S="${WORKDIR}/${P/_*}"
LICENSE="GPL-2"
SLOT="0"
if [[ ${PV} != *beta* ]] ; then
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
fi
IUSE="selinux ibm nls static"
COMMON_DEPEND="
acct-group/root
selinux? (
>=sys-libs/libselinux-1.28
)
"
DEPEND="
${COMMON_DEPEND}
virtual/os-headers
"
# Old OpenRC blocker is for bug #587424
# Keep for longer than usual given it's cheap and avoid user inconvenience
RDEPEND="
${COMMON_DEPEND}
!<app-i18n/man-pages-l10n-4.18.1-r1
!<sys-apps/openrc-0.13
selinux? ( sec-policy/selinux-shutdown )
"
# po4a is for man page translations
BDEPEND="
nls? ( app-text/po4a )
verify-sig? ( >=sec-keys/openpgp-keys-sysvinit-20220413 )
"
PATCHES=(
# bug #158615
"${FILESDIR}/${PN}-3.08-shutdown-single.patch"
)
src_prepare() {
default
# We already enforce F_S=2 as a minimum in our toolchain, and
# allow 3. Also, SSP doesn't always make sense for some platforms
# e.g. HPPA. It's default-on in our toolchain where it works.
sed -i \
-e '/^CPPFLAGS =$/d' \
-e '/^override CFLAGS +=/s/ -fstack-protector-strong//' \
-e '/^override CFLAGS +=/s/ -D_FORTIFY_SOURCE=2//' \
src/Makefile || die
# last/lastb/mesg/mountpoint/sulogin/utmpdump/wall have moved to util-linux
sed -i -r \
-e '/^(USR)?S?BIN/s:\<(last|lastb|mesg|mountpoint|sulogin|utmpdump|wall)\>::g' \
-e '/^MAN[18]/s:\<(last|lastb|mesg|mountpoint|sulogin|utmpdump|wall)[.][18]\>::g' \
src/Makefile || die
# pidof has moved to >=procps-3.3.9
sed -i -r \
-e '/\/bin\/pidof/d' \
-e '/^MAN8/s:\<pidof.8\>::g' \
src/Makefile || die
# logsave is already in e2fsprogs
sed -i -r \
-e '/^(USR)?S?BIN/s:\<logsave\>::g' \
-e '/^MAN8/s:\<logsave.8\>::g' \
src/Makefile || die
# Munge inittab for specific architectures
cd "${WORKDIR}" || die
cp "${FILESDIR}"/inittab-2.98-r1 inittab || die "cp inittab"
local insert=()
use ppc && insert=( '#psc0:12345:respawn:/sbin/agetty 115200 ttyPSC0 linux' )
use arm && insert=( '#f0:12345:respawn:/sbin/agetty 9600 ttyFB0 vt100' )
use arm64 && insert=( 'f0:12345:respawn:/sbin/agetty 9600 ttyAMA0 vt100' )
use hppa && insert=( 'b0:12345:respawn:/sbin/agetty 9600 ttyB0 vt100' )
use s390 && insert=( 's0:12345:respawn:/sbin/agetty 38400 console dumb' )
if use ibm ; then
insert+=(
'#hvc0:2345:respawn:/sbin/agetty -L 9600 hvc0'
'#hvsi:2345:respawn:/sbin/agetty -L 19200 hvsi0'
)
fi
(use arm || use mips || use sparc) && sed -i '/ttyS0/s:#::' inittab
if use x86 || use amd64 ; then
sed -i \
-e '/ttyS[01]/s:9600:115200:' \
inittab
fi
if [[ ${#insert[@]} -gt 0 ]] ; then
printf '%s\n' '' '# Architecture specific features' "${insert[@]}" >> inittab
fi
delete_unused_locale() {
local locale=${1}
einfo "Deleting non-requested man page translations for locale=${locale}"
rm "${S}"/man/po/${locale}.po || die
sed -i -e "/^\[po4a_langs\]/ s:${locale}::" "${S}"/man/po/po4a.cfg || die
}
plocale_for_each_disabled_locale delete_unused_locale
}
src_compile() {
tc-export CC
append-lfs-flags
# bug #381311
export DISTRO=
export VERSION="${PV}"
use static && append-ldflags -static
emake -C src $(usex selinux 'WITH_SELINUX=yes' '')
if use nls && [[ -n "$(plocale_get_locales)" ]] ; then
cd man/po || die
po4a po4a.cfg || die
fi
}
src_install() {
emake -C src install ROOT="${ED}"
dodoc README doc/*
insinto /etc
doins "${WORKDIR}"/inittab
newinitd "${FILESDIR}"/bootlogd.initd bootlogd
newconfd "${FILESDIR}"/bootlogd.confd bootlogd
into /
dosbin "${FILESDIR}"/halt.sh
keepdir /etc/inittab.d
if use nls && [[ -n "$(plocale_get_locales)" ]] ; then
install_locale_man_pages() {
doman -i18n=${1} man/po/${1}/*
}
plocale_for_each_locale install_locale_man_pages
fi
# Dead symlink
find "${ED}" -xtype l -delete || die
find "${ED}" -type d -empty -delete || die
}
pkg_postinst() {
# Reload init to fix unmounting problems of / on next reboot.
# This is really needed, as without the new version of init cause init
# not to quit properly on reboot, and causes a fsck of / on next reboot.
if [[ -z ${EROOT} ]] ; then
if [[ -e /dev/initctl ]] && [[ ! -e /run/initctl ]] ; then
ln -s /dev/initctl /run/initctl \
|| ewarn "Failed to set /run/initctl symlink!"
fi
# Do not return an error if this fails
/sbin/telinit U &>/dev/null
fi
elog "The last/lastb/mesg/mountpoint/sulogin/utmpdump/wall tools have been moved to"
elog "sys-apps/util-linux. The pidof tool has been moved to sys-process/procps."
# Required for new bootlogd service
if [[ ! -e "${EROOT}/var/log/boot" ]] ; then
touch "${EROOT}/var/log/boot"
fi
local ver
for ver in ${REPLACING_VERSIONS}; do
ver_test ${ver} -ge 3.07-r2 && continue
ewarn "Previously, the 'halt' command caused the system to power off"
ewarn "even if option -p was not given. This long-standing bug has"
ewarn "been fixed, and the command now behaves as documented."
break
done
}
|