Compare commits

..

10 Commits

Author SHA1 Message Date
William Hubbs
454e09d1d6 Update ChangeLog 2015-05-06 09:28:34 -05:00
Jakob Drexel
1969be04e5 librc: Fix crash if the service name is the same as the including runlevel
If a service has the same name as the runlevel it is in, openrc will
crash on changing to such runlevel. It goes in a recursive madness and
eventually gets a SEGV while in snprintf (don't know why).

This fixes two errors:
1. ls_dir stats files not with full path -> stat always returns != 0
2. ls_dir adds files to list if stat failed

This fixes #53.

X-Gentoo-Bug: 537304
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=537304
2015-05-06 09:18:09 -05:00
William Hubbs
ae60393561 Start work on 0.15.1 2015-05-06 09:16:11 -05:00
William Hubbs
60488069c0 update ChangeLog 2015-05-01 16:08:24 -05:00
William Hubbs
9225bfa691 Build: make snapshot remove .git directory from tarball 2015-05-01 10:14:31 -05:00
Mike Gilbert
7bd456ed7b Disable service scripts for systemd-nspawn
This adds the -systemd-nspawn keyword to service scripts which are not
intended to run in systemd-nspawn containers.

This fixes #52.

    X-Gentoo-Bug: 548058
    X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
2015-05-01 09:14:09 -05:00
William Hubbs
c709e6077c Add support for systemd-nspawn containers
This adds support for running OpenRC in a container created by
the systemd-nspawn utility.

This fixes #52.

X-Gentoo-Bug: 548058
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
2015-05-01 09:04:07 -05:00
William Hubbs
a27d577da8 Build: fix the dist target
The dist target now creates an archive based on the version setting.
This makes it possible to create an archive identical to the ones github
generates once the release is tagged.
2015-04-30 14:45:42 -05:00
William Hubbs
8b93492086 convert all references from runscript to openrc-run 2015-04-27 11:21:29 -05:00
William Hubbs
4b1b457cd1 Start work on 0.15 2015-04-26 10:30:49 -05:00
39 changed files with 172 additions and 65 deletions

View File

@@ -1,3 +1,96 @@
commit 1969be04e54ad162329001d4b09ebfcf162a6808
Author: Jakob Drexel <jake42@rommel.stw.uni-erlangen.de>
Commit: William Hubbs <w.d.hubbs@gmail.com>
librc: Fix crash if the service name is the same as the including runlevel
If a service has the same name as the runlevel it is in, openrc will
crash on changing to such runlevel. It goes in a recursive madness and
eventually gets a SEGV while in snprintf (don't know why).
This fixes two errors:
1. ls_dir stats files not with full path -> stat always returns != 0
2. ls_dir adds files to list if stat failed
This fixes #53.
X-Gentoo-Bug: 537304
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=537304
commit ae6039356177a9030adc93b025f487e7a4df05aa
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start work on 0.15.1
commit 60488069c08201cbfbc661a3e7bd1fafa31fceed
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update ChangeLog
commit 9225bfa6918cfd488c8f1055cf986b542f1f157e
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Build: make snapshot remove .git directory from tarball
commit 7bd456ed7bf35da2d7a53650baa33637e178064e
Author: Mike Gilbert <floppym@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Disable service scripts for systemd-nspawn
This adds the -systemd-nspawn keyword to service scripts which are not
intended to run in systemd-nspawn containers.
This fixes #52.
X-Gentoo-Bug: 548058
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
commit c709e6077c6eda3f4f7e7222298213413254ee0f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Add support for systemd-nspawn containers
This adds support for running OpenRC in a container created by
the systemd-nspawn utility.
This fixes #52.
X-Gentoo-Bug: 548058
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
commit a27d577da8cf4f1c7f9784a043ecf02d71a81ca6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Build: fix the dist target
The dist target now creates an archive based on the version setting.
This makes it possible to create an archive identical to the ones github
generates once the release is tagged.
commit 8b9349208696e5caed1a8b34f066cec4ee642194
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
convert all references from runscript to openrc-run
commit 4b1b457cd15cc1609c101b99a49a5e4c67b62567
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start work on 0.15
commit 1d6602bb8e7062323ead03eaa0c4ae307c517b9e
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Add ChangeLog
commit a6391f44ee6c68d674ae8425983467b971710d5d
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.14
VERSION= 0.15.1
PKG= ${NAME}-${VERSION}

View File

@@ -2,14 +2,15 @@
# LINUX SPECIFIC OPTIONS
# This is the subsystem type. Valid options on Linux:
# "" - nothing special
# "lxc" - Linux Containers
# "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "uml" - Usermode Linux
# "vserver" - Linux vserver
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# "" - nothing special
# "lxc" - Linux Containers
# "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "uml" - Usermode Linux
# "vserver" - Linux vserver
# "systemd-nspawn" - Container created by the systemd-nspawn utility
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is

View File

@@ -8,7 +8,7 @@ depend()
{
after procfs
use modules devfs
keyword -openvz -prefix -vserver -lxc
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -8,7 +8,7 @@ depend()
{
need localmount termencoding
after hotplug bootmisc
keyword -openvz -prefix -uml -vserver -xenu -lxc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}
start()

View File

@@ -8,7 +8,7 @@ depend()
{
provide dev-mount
before dev
keyword -prefix -vserver -lxc
keyword -prefix -systemd-nspawn -vserver -lxc
}
mount_dev()

View File

@@ -7,7 +7,7 @@ description="Set the dmesg level for a cleaner boot"
depend()
{
before dev modules
keyword -lxc -prefix -vserver
keyword -lxc -prefix -systemd-nspawn -vserver
}
start()

View File

@@ -9,7 +9,7 @@ _IFS="
depend()
{
use dev clock modules
keyword -jail -openvz -prefix -timeout -vserver -lxc -uml
keyword -jail -openvz -prefix -systemd-nspawn -timeout -vserver -lxc -uml
}
_abort() {

View File

@@ -5,7 +5,7 @@
description="Sets the hostname of the machine."
depend() {
keyword -prefix -lxc
keyword -prefix -systemd-nspawn -lxc
}
start()

View File

@@ -28,7 +28,7 @@ depend()
else
before *
fi
keyword -openvz -prefix -uml -vserver -xenu -lxc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}
setupopts()

View File

@@ -8,7 +8,7 @@ depend()
{
need localmount termencoding
after bootmisc
keyword -openvz -prefix -uml -vserver -xenu -lxc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}
start()

View File

@@ -9,7 +9,7 @@ depend()
need fsck
use lvm modules mtab
after lvm modules
keyword -jail -prefix -vserver -lxc
keyword -jail -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -6,7 +6,7 @@ description="Configures the loopback interface."
depend()
{
keyword -jail -prefix -vserver
keyword -jail -prefix -systemd-nspawn -vserver
}
start()

View File

@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
depend()
{
use isapnp
keyword -openvz -prefix -vserver -lxc
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot."
depend()
{
need killprocs savecache
keyword -openvz -prefix -vserver -lxc
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -7,7 +7,7 @@ description="Update /etc/mtab to match what the kernel knows about"
depend()
{
need root
keyword -prefix
keyword -prefix -systemd-nspawn
}
start()

View File

@@ -9,7 +9,7 @@ depend()
config /etc/fstab
use afc-client amd nfsclient autofs openvpn
use dns
keyword -jail -prefix -vserver -lxc
keyword -jail -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
need localmount
keyword -openvz -prefix -vserver -lxc
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}
_setleds()

View File

@@ -8,7 +8,7 @@ depend()
{
use modules devfs
need localmount
keyword -openvz -prefix -vserver -lxc
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
depend()
{
need fsck
keyword -jail -openvz -prefix -vserver -lxc
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -5,7 +5,7 @@
depend()
{
before localmount
keyword -jail -openvz -prefix -vserver -lxc
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -5,7 +5,7 @@
depend()
{
need localmount
keyword -jail -openvz -prefix -vserver -lxc
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
}
start()

View File

@@ -8,7 +8,7 @@ depend()
{
before *
provide clock
keyword -openvz -prefix -uml -vserver -xenu -lxc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}
# swclock is an OpenRC built in

View File

@@ -1,4 +1,4 @@
#!@PREFIX@/sbin/runscript
#!@PREFIX@/sbin/openrc-run
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
#FIXME: Modify for GNU/Hurd

View File

@@ -5,7 +5,7 @@
depend()
{
before bootmisc logger
keyword -prefix -vserver
keyword -prefix -systemd-nspawn -vserver
}
start()

View File

@@ -8,7 +8,7 @@ sysfs_opts=nodev,noexec,nosuid
depend()
{
keyword -lxc -prefix -vserver
keyword -lxc -prefix -systemd-nspawn -vserver
}
mount_sys()

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
keyword -lxc -openvz -prefix -uml -vserver -xenu
keyword -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
use root
after bootmisc
}

View File

@@ -8,7 +8,7 @@ description="Initializes the random number generator."
depend()
{
need localmount
keyword -jail -lxc -openvz -prefix
keyword -jail -lxc -openvz -prefix -systemd-nspawn
}
save_seed()

View File

@@ -2,7 +2,7 @@
# Copyright (c) 2008 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
GITREF?= HEAD
GITREF?= ${VERSION}
DISTPREFIX?= ${NAME}-${VERSION}
DISTFILE?= ${DISTPREFIX}.tar.bz2
@@ -34,7 +34,7 @@ snapshot:
mkdir /tmp/${SNAPDIR}
cp -RPp * /tmp/${SNAPDIR}
(cd /tmp/${SNAPDIR}; make clean)
find /tmp/${SNAPDIR} -name .svn -exec rm -rf -- {} \; 2>/dev/null || true
rm -rf /tmp/${SNAPDIR}/.git 2>/dev/null || true
tar -cvjpf ${SNAPFILE} -C /tmp ${SNAPDIR}
rm -rf /tmp/${SNAPDIR}
ls -l ${SNAPFILE}

2
sh/.gitignore vendored
View File

@@ -1,7 +1,7 @@
functions.sh
gendepends.sh
rc-functions.sh
runscript.sh
openrc-run.sh
cgroup-release-agent.sh
init.sh
init-early.sh

View File

@@ -1,8 +1,8 @@
DIR= ${LIBEXECDIR}/sh
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
rc-functions.sh.in runscript.sh.in tmpfiles.sh.in ${SRCS-${OS}}
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
INC= rc-mount.sh functions.sh rc-functions.sh
BIN= gendepends.sh init.sh runscript.sh tmpfiles.sh ${BIN-${OS}}
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
INSTALLAFTER= _installafter

View File

@@ -1,5 +1,5 @@
#!@SHELL@
# Shell wrapper for runscript
# Shell wrapper for openrc-run
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
@@ -34,7 +34,10 @@ sourcex()
sourcex "@LIBEXECDIR@/sh/functions.sh"
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
[ "$RC_SYS" != "PREFIX" ] && sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh"
case $RC_SYS in
PREFIX|SYSTEMD-NSPAWN) ;;
*) sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh";;
esac
# Support LiveCD foo
if sourcex -e "/sbin/livecd-functions.sh"; then

View File

@@ -85,7 +85,7 @@ get_bootparam()
return 1
}
# Called from runscript.sh or gendepends.sh
# Called from openrc-run.sh or gendepends.sh
_depend() {
depend
local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=

View File

@@ -99,7 +99,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
pid_t p;
char buffer[PATH_MAX];
struct stat sb;
pid_t runscript_pid = 0;
pid_t openrc_pid = 0;
char *pp;
RC_PIDLIST *pids = NULL;
RC_PID *pi;
@@ -108,7 +108,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
return NULL;
/*
We never match RC_RUNSCRIPT_PID if present so we avoid the below
We never match RC_OPENRC_PID if present so we avoid the below
scenario
/etc/init.d/ntpd stop does
@@ -118,9 +118,9 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
nasty
*/
if ((pp = getenv("RC_RUNSCRIPT_PID"))) {
if (sscanf(pp, "%d", &runscript_pid) != 1)
runscript_pid = 0;
if ((pp = getenv("RC_OPENRC_PID"))) {
if (sscanf(pp, "%d", &openrc_pid) != 1)
openrc_pid = 0;
}
/*
@@ -146,7 +146,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
while ((entry = readdir(procdir)) != NULL) {
if (sscanf(entry->d_name, "%d", &p) != 1)
continue;
if (runscript_pid != 0 && runscript_pid == p)
if (openrc_pid != 0 && openrc_pid == p)
continue;
if (pid != 0 && pid != p)
continue;

View File

@@ -101,7 +101,9 @@ ls_dir(const char *dir, int options)
continue;
}
if (options & LS_DIR) {
if (stat(d->d_name, &buf) == 0 &&
snprintf(file, sizeof(file), "%s/%s",
dir, d->d_name);
if (stat(file, &buf) != 0 ||
!S_ISDIR(buf.st_mode))
continue;
}
@@ -294,6 +296,8 @@ rc_sys_v1(void)
return RC_SYS_OPENVZ; /* old test */
else if (file_regex("/proc/1/environ", "container=lxc"))
return RC_SYS_LXC;
else if (file_regex("/proc/1/environ", "container=systemd-nspawn"))
return RC_SYS_SYSTEMD_NSPAWN;
#endif
return NULL;

View File

@@ -332,6 +332,7 @@ bool rc_service_daemons_crashed(const char *);
#define RC_SYS_OPENVZ "OPENVZ"
#define RC_SYS_LXC "LXC"
#define RC_SYS_PREFIX "PREFIX"
#define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN"
#define RC_SYS_UML "UML"
#define RC_SYS_VSERVER "VSERVER"
#define RC_SYS_XEN0 "XEN0"

View File

@@ -1,8 +1,8 @@
PROG= openrc
SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
SRCS= checkpath.c fstabinfo.c mountinfo.c openrc-run.c \
rc-applets.c rc-depend.c rc-logger.c \
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
runscript.c rc.c swclock.c
rc.c start-stop-daemon.c swclock.c
ifeq (${MKSELINUX},yes)
SRCS+= rc-selinux.c

View File

@@ -1,5 +1,5 @@
/*
* runscript.c
* openrc-run.c
* Handle launching of init scripts.
*/
@@ -370,18 +370,18 @@ svc_exec(const char *arg1, const char *arg2)
dup2(slave_tty, STDERR_FILENO);
}
if (exists(RC_SVCDIR "/runscript.sh")) {
execl(RC_SVCDIR "/runscript.sh",
RC_SVCDIR "/runscript.sh",
if (exists(RC_SVCDIR "/openrc-run.sh")) {
execl(RC_SVCDIR "/openrc-run.sh",
RC_SVCDIR "/openrc-run.sh",
service, arg1, arg2, (char *) NULL);
eerror("%s: exec `" RC_SVCDIR "/runscript.sh': %s",
eerror("%s: exec `" RC_SVCDIR "/openrc-run.sh': %s",
service, strerror(errno));
_exit(EXIT_FAILURE);
} else {
execl(RC_LIBEXECDIR "/sh/runscript.sh",
RC_LIBEXECDIR "/sh/runscript.sh",
execl(RC_LIBEXECDIR "/sh/openrc-run.sh",
RC_LIBEXECDIR "/sh/openrc-run.sh",
service, arg1, arg2, (char *) NULL);
eerror("%s: exec `" RC_LIBEXECDIR "/sh/runscript.sh': %s",
eerror("%s: exec `" RC_LIBEXECDIR "/sh/openrc-run.sh': %s",
service, strerror(errno));
_exit(EXIT_FAILURE);
}
@@ -1162,6 +1162,11 @@ openrc_run(int argc, char **argv)
subshells the init script may create so that our mark_service_*
functions can always instruct us of this change */
snprintf(pidstr, sizeof(pidstr), "%d", (int) getpid());
setenv("RC_OPENRC_PID", pidstr, 1);
/*
* RC_RUNSCRIPT_PID is deprecated, but we will keep it for a while
* for safety.
*/
setenv("RC_RUNSCRIPT_PID", pidstr, 1);
/* eprefix is kinda klunky, but it works for our purposes */

View File

@@ -329,7 +329,7 @@ do_mark_service(int argc, char **argv)
bool ok = false;
char *svcname = getenv("RC_SVCNAME");
char *service = NULL;
char *runscript_pid;
char *openrc_pid;
/* char *mtime; */
pid_t pid;
RC_SERVICE bit;
@@ -350,7 +350,7 @@ do_mark_service(int argc, char **argv)
eerrorx("%s: unknown applet", applet);
/* If we're marking ourselves then we need to inform our parent
runscript process so they do not mark us based on our exit code */
openrc-run process so they do not mark us based on our exit code */
/*
* FIXME: svcname and service are almost always equal except called from a
* shell with just argv[1] - So that doesn't seem to do what Roy initially
@@ -359,8 +359,8 @@ do_mark_service(int argc, char **argv)
* openrc@gentoo.org).
*/
if (ok && svcname && strcmp(svcname, service) == 0) {
runscript_pid = getenv("RC_RUNSCRIPT_PID");
if (runscript_pid && sscanf(runscript_pid, "%d", &pid) == 1)
openrc_pid = getenv("RC_OPENRC_PID");
if (openrc_pid && sscanf(openrc_pid, "%d", &pid) == 1)
if (kill(pid, SIGHUP) != 0)
eerror("%s: failed to signal parent %d: %s",
applet, pid, strerror(errno));
@@ -369,10 +369,10 @@ do_mark_service(int argc, char **argv)
in control as well */
/*
l = strlen(RC_SVCDIR "/exclusive") + strlen(svcname) +
strlen(runscript_pid) + 4;
strlen(openrc_pid) + 4;
mtime = xmalloc(l);
snprintf(mtime, l, RC_SVCDIR "/exclusive/%s.%s",
svcname, runscript_pid);
svcname, openrc_pid);
if (exists(mtime) && unlink(mtime) != 0)
eerror("%s: unlink: %s", applet, strerror(errno));
free(mtime);