Introduce LOCAL_PREFIX for a user maintained script location.
This commit is contained in:
		
							
								
								
									
										3
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								README
									
									
									
									
									
								
							| @@ -14,6 +14,7 @@ MKPAM=pam | ||||
| MKTERMCAP=ncurses | ||||
| MKTERMCAP=termcap | ||||
| PKG_PREFIX=/usr/pkg | ||||
| LOCAL_PREFIX=/usr/local | ||||
| PREFIX=/usr/local | ||||
|  | ||||
| We don't support building a static OpenRC with PAM. | ||||
| @@ -23,6 +24,8 @@ You can also brand OpenRC if you so wish like so | ||||
| BRANDING=\"Gentoo/$(uname -s)\" | ||||
|  | ||||
| PKG_PREFIX should be set to where packages install to by default. | ||||
| LOCAL_PREFIX should be set when to where user maintained packages are. | ||||
| Only set LOCAL_PREFIX if different from PKG_PREFIX. | ||||
| PREFIX should be set when OpenRC is not installed to /. | ||||
|  | ||||
| If any of the following files exist then we do not overwrite them | ||||
|   | ||||
| @@ -16,10 +16,10 @@ include ${MK}/os.mk | ||||
| # Tweak our shell scripts | ||||
| .SUFFIXES:	.sh.in .in | ||||
| .sh.in.sh: | ||||
| 	sed -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g' $< > $@ | ||||
| 	sed -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g' -e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g' $< > $@ | ||||
|  | ||||
| .in: | ||||
| 	sed -e 's:@PREFIX@:${PREFIX}:g' -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g' $< > $@ | ||||
| 	sed -e 's:@PREFIX@:${PREFIX}:g' -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g' -e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g' $< > $@ | ||||
|  | ||||
| all: ${OBJS} | ||||
|  | ||||
|   | ||||
| @@ -31,8 +31,21 @@ depend() { | ||||
| 	: | ||||
| } | ||||
|  | ||||
| for _dir in @PREFIX@/etc/init.d @PKG_PREFIX@/etc/init.d; do | ||||
| _done_dirs= | ||||
| for _dir in \ | ||||
| @PREFIX@/etc/init.d \ | ||||
| @PKG_PREFIX@/etc/init.d \ | ||||
| @LOCAL_PREFIX@/etc/init.d | ||||
| do | ||||
| 	[ -d "${_dir}" ] || continue | ||||
|  | ||||
| 	# Don't do the same dir twice | ||||
| 	for _d in ${_done_dirs}; do | ||||
| 		[ "${_d}" = "${_dir}" ] && continue 2 | ||||
| 	done | ||||
| 	unset _d | ||||
| 	_done_dirs="${_done_dirs} ${_dir}" | ||||
|  | ||||
| 	cd "${_dir}" | ||||
| 	for SVCNAME in *; do | ||||
| 		[ -x "${SVCNAME}" ] || continue | ||||
|   | ||||
| @@ -40,23 +40,25 @@ describe() | ||||
|  | ||||
| yesno ${RC_DEBUG} && set -x | ||||
|  | ||||
| _conf_d=${1%/*}/../conf.d | ||||
| # If we're net.eth0 or openvpn.work then load net or openvpn config | ||||
| _c=${SVCNAME%%.*} | ||||
| if [ -n "${_c}" -a "${_c}" != "${SVCNAME}" ]; then | ||||
| 	if [ -e "/etc/conf.d/${_c}.${RC_SOFTLEVEL}" ]; then | ||||
| 		. "/etc/conf.d/${_c}.${RC_SOFTLEVEL}" | ||||
| 	elif [ -e "/etc/conf.d/${_c}" ]; then | ||||
| 		. "/etc/conf.d/${_c}" | ||||
| 	if [ -e "${_conf_d}/${_c}.${RC_SOFTLEVEL}" ]; then | ||||
| 		. "${_conf_d}/${_c}.${RC_SOFTLEVEL}" | ||||
| 	elif [ -e "${_conf_d}/${_c}" ]; then | ||||
| 		. "${_conf_d}//${_c}" | ||||
| 	fi | ||||
| fi | ||||
| unset _c | ||||
|  | ||||
| # Overlay with our specific config | ||||
| if [ -e "/etc/conf.d/${SVCNAME}.${RC_SOFTLEVEL}" ]; then | ||||
| 	. "/etc/conf.d/${SVCNAME}.${RC_SOFTLEVEL}" | ||||
| elif [ -e "/etc/conf.d/${SVCNAME}" ]; then | ||||
| 	. "/etc/conf.d/${SVCNAME}" | ||||
| if [ -e "${_conf_d}/${SVCNAME}.${RC_SOFTLEVEL}" ]; then | ||||
| 	. "${_conf_d}/${SVCNAME}.${RC_SOFTLEVEL}" | ||||
| elif [ -e "${_conf_d}/${SVCNAME}" ]; then | ||||
| 	. "${_conf_d}/${SVCNAME}" | ||||
| fi | ||||
| unset _conf_d | ||||
|  | ||||
| # Load any system overrides | ||||
| [ -e @PREFIX@/etc/rc.conf ] && . @PREFIX@/etc/rc.conf | ||||
|   | ||||
| @@ -62,7 +62,14 @@ | ||||
|  * /usr/pkg. */ | ||||
| #ifdef PKG_PREFIX | ||||
| #  define RC_PKG_INITDIR        PKG_PREFIX "/etc/init.d" | ||||
| #  define RC_PKG_CONFDIR        PKG_PREFIX "/usr/local/etc/conf.d" | ||||
| #  define RC_PKG_CONFDIR        PKG_PREFIX "/etc/conf.d" | ||||
| #endif | ||||
|  | ||||
| /* LOCAL_PREFIX is for user written stuff, which the base OS and package | ||||
|  * manger don't touch. */ | ||||
| #ifdef LOCAL_PREFIX | ||||
| #  define RC_LOCAL_INITDIR      LOCAL_PREFIX "/etc/init.d" | ||||
| #  define RC_LOCAL_CONFDIR      LOCAL_PREFIX "/etc/conf.d" | ||||
| #endif | ||||
|  | ||||
| #define RC_KSOFTLEVEL           RC_SVCDIR "/ksoftlevel" | ||||
|   | ||||
| @@ -701,6 +701,12 @@ bool rc_deptree_update_needed (void) | ||||
| #endif | ||||
| #ifdef RC_PKG_CONFDIR | ||||
| 	    ! rc_newer_than (RC_DEPTREE, RC_PKG_CONFDIR) || | ||||
| #endif | ||||
| #ifdef RC_LOCAL_INITDIR | ||||
| 	    ! rc_newer_than (RC_DEPTREE, RC_LOCAL_INITDIR) || | ||||
| #endif | ||||
| #ifdef RC_LOCAL_CONFDIR | ||||
| 	    ! rc_newer_than (RC_DEPTREE, RC_LOCAL_CONFDIR) || | ||||
| #endif | ||||
| 	    ! rc_newer_than (RC_DEPTREE, "/etc/rc.conf")) | ||||
| 		return (true); | ||||
|   | ||||
| @@ -313,6 +313,7 @@ char *rc_service_resolve (const char *service) | ||||
| 	if (service[0] == '/') | ||||
| 		return (xstrdup (service)); | ||||
|  | ||||
| 	/* First check started services */ | ||||
| 	file = rc_strcatpaths (RC_SVCDIR, "started", service, (char *) NULL); | ||||
| 	if (lstat (file, &buf) || ! S_ISLNK (buf.st_mode)) { | ||||
| 		free (file); | ||||
| @@ -324,6 +325,14 @@ char *rc_service_resolve (const char *service) | ||||
| 	} | ||||
|  | ||||
| 	memset (buffer, 0, sizeof (buffer)); | ||||
|  | ||||
| 	/* Nope, so lets see if the user has written it */ | ||||
| #ifdef RC_LOCAL_INITDIR | ||||
| 	snprintf (buffer, sizeof (buffer), RC_LOCAL_INITDIR "/%s", service); | ||||
| 	if (stat (buffer, &buf) == 0) | ||||
| 		return (xstrdup (buffer)); | ||||
| #endif | ||||
|  | ||||
| 	if (file) { | ||||
| 		r = readlink (file, buffer, sizeof (buffer)); | ||||
| 		free (file); | ||||
| @@ -332,7 +341,7 @@ char *rc_service_resolve (const char *service) | ||||
| 	} | ||||
| 	snprintf (buffer, sizeof (buffer), RC_INITDIR "/%s", service); | ||||
|  | ||||
| 	/* So we don't exist in /etc/init.d - check /usr/local/etc/init.d */ | ||||
| 	/* So we don't exist in /etc/init.d - check RC_PKG_INITDIR */ | ||||
| #ifdef RC_PKG_INITDIR | ||||
| 	if (stat (buffer, &buf) != 0) { | ||||
| 		snprintf (buffer, sizeof (buffer), RC_PKG_INITDIR "/%s", service); | ||||
| @@ -787,19 +796,28 @@ char **rc_services_in_runlevel (const char *runlevel) | ||||
| 	char **list = NULL; | ||||
|  | ||||
| 	if (! runlevel) { | ||||
| #ifdef RC_PKG_INITDIR | ||||
| #if defined(RC_PKG_INITDIR) || defined(RC_LOCAL_INITDIR) | ||||
| 		int i; | ||||
| 		char **local = ls_dir (RC_PKG_INITDIR, LS_INITD); | ||||
| #endif | ||||
| #ifdef RC_PKG_INITDIR | ||||
| 		char **pkg = ls_dir (RC_PKG_INITDIR, LS_INITD); | ||||
| #endif | ||||
| #ifdef RC_LOCAL_INITDIR | ||||
| 		char **local = ls_dir (RC_LOCAL_INITDIR, LS_INITD); | ||||
| #endif | ||||
|  | ||||
| 		list = ls_dir (RC_INITDIR, LS_INITD); | ||||
|  | ||||
| #ifdef RC_PKG_INITDIR | ||||
| 		STRLIST_FOREACH (pkg, dir, i) | ||||
| 			rc_strlist_addsortu (&list, dir); | ||||
| 		rc_strlist_free (pkg); | ||||
| #endif | ||||
| #ifdef RC_LOCAL_DIR | ||||
| 		STRLIST_FOREACH (local, dir, i) | ||||
| 			rc_strlist_addsortu (&list, dir); | ||||
| 		rc_strlist_free (local); | ||||
| #endif | ||||
|  | ||||
| 		return (list); | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user