summaryrefslogtreecommitdiff
blob: 8d6056f4ffba490141722a9272de37661d53c699 (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
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit toolchain-funcs flag-o-matic

DESCRIPTION="A UNIX init scheme with service supervision"
HOMEPAGE="https://smarden.org/runit/"
PATCH_VER=20240905
SRC_URI="
	https://smarden.org/runit/${P}.tar.gz
	https://github.com/clan/runit/releases/download/${PV}-r5/${P}-patches-${PATCH_VER}.tar.xz
"
S=${WORKDIR}/admin/${P}/src

LICENSE="BSD"
SLOT="0"
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~m68k ~mips ppc ppc64 ~s390 sparc x86"
IUSE="static"

RDEPEND="sys-apps/openrc"

src_unpack() {
	unpack ${P}.tar.gz
	unpack ${P}-patches-${PATCH_VER}.tar.xz
}

src_prepare() {
	default

	cd "${S}"/.. || die
	eapply -p3 "${WORKDIR}"/patches
	cd "${S}" || die

	# We either build everything or nothing static
	sed -i -e 's:-static: :' Makefile || die

	# see https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726008
	[[ ${COMPILER} == "diet" ]] &&
		use ppc &&
		filter-flags "-mpowerpc-gpopt"
}

src_configure() {
	use static && append-ldflags -static

	echo "$(tc-getCC) ${CFLAGS}"  > conf-cc || die
	echo "$(tc-getCC) ${LDFLAGS}" > conf-ld || die
}

src_install() {
	into /
	dobin $(<../package/commands)
	dodir /sbin
	mv "${ED}"/bin/{runit-init,runit,utmpset} "${ED}"/sbin/ || die "dosbin"
	dosym ../etc/runit/2 /sbin/runsvdir-start

	DOCS=( ../package/{CHANGES,README,THANKS,TODO} )
	HTML_DOCS=( ../doc/*.html )
	einstalldocs
	doman ../man/*.[18]

	exeinto /etc/runit
	doexe "${FILESDIR}"/ctrlaltdel
	newexe "${FILESDIR}"/1-${PV} 1
	newexe "${FILESDIR}"/2-${PV} 2
	newexe "${FILESDIR}"/3-${PV} 3

	dodir /etc/sv
	for tty in tty1 tty2 tty3 tty4 tty5 tty6; do
		exeinto /etc/sv/getty-$tty/
		newexe "${FILESDIR}"/finish.getty finish
		newexe "${FILESDIR}"/run.getty-${PV} run
		for script in finish run; do
			sed -i -e "s:TTY:${tty}:g" "${ED}"/etc/sv/getty-$tty/$script
		done
	done

	# make sv command work
	newenvd - 20runit <<- EOF
		#/etc/env.d/20runit
		SVDIR="/etc/service/"
	EOF
}

default_config() {
	local sv="${EROOT}"/etc/sv
	local service="${EROOT}"/etc/service
	mkdir -p "${service}" || die
	for x in tty1 tty2 tty3 tty4 tty5 tty6; do
		ln -sf "${sv}"/getty-$x "${service}"/getty-$x || die
	done
	einfo "The links to services runit will supervise are installed"
	einfo "in $service."
	einfo "If you need multiple runlevels, please see the documentation"
	einfo "for how to set them up."
	einfo
}

migrate_from_211() {
	# Create /etc/service and /var/service if requested
	if [[ -e "${T}"/make_var_service ]]; then
		ln -sf "${EROOT}"/etc/runit/runsvdir/current "${EROOT}"/etc/service || die
		ln -sf "${EROOT}"/etc/runit/runsvdir/current "${EROOT}"/var/service || die
	fi
	if [[ -d "${T}"/runsvdir ]]; then
		cp -a "${T}"/runsvdir "${EROOT}"/etc/runit || die
	fi
	return 0
}

pkg_preinst() {
	if  has_version '<sys-process/runit-2.1.2'; then
		pre_212=yes
	fi
}

pkg_postinst() {
	if [[ -z ${REPLACING_VERSIONS} ]]; then
		default_config
	elif [[ -n ${pre_212} ]]; then
		migrate_from_211
	fi

	ewarn "To make sure sv works correctly in your currently open"
	ewarn "shells, please run the following command:"
	ewarn
	ewarn "source /etc/profile"
	ewarn

	if [[ -L "${EROOT}"/var/service ]]; then
		ewarn "Once this version of runit is active, please remove the"
		ewarn "compatibility symbolic link at ${EROOT}/var/service"
		ewarn "The correct path now is ${EROOT}/etc/service"
		ewarn
	fi

	if [[ -L "${EROOT}"/etc/runit/runsvdir/all ]]; then
		ewarn "${EROOT}/etc/runit/runsvdir/all has moved to"
		ewarn "${EROOT}/etc/sv."
		ewarn "Any symbolic links under ${EROOT}/etc/runit/runsvdir"
		ewarn "which point to services through ../all should be updated to"
		ewarn "point to them through ${EROOT}/etc/sv."
		ewarn "Once that is done, ${EROOT}/etc/runit/runsvdir/all should be"
		ewarn "removed."
		ewarn
	fi
}