Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F155020642
D18607.id52241.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D18607.id52241.diff
View Options
Index: sbin/bectl/bectl.8
===================================================================
--- sbin/bectl/bectl.8
+++ sbin/bectl/bectl.8
@@ -52,7 +52,6 @@
.Cm jail
.Brq Fl b | Fl U
.Oo Bro Fl o Ar key Ns = Ns Ar value | Fl u Ar key Brc Oc Ns ...
-.Brq Ar jailID | jailName
.Ar bootenv
.Op Ar utility Op Ar argument ...
.Nm
@@ -153,7 +152,6 @@
.Cm jail
.Brq Fl b | Fl U
.Oo Bro Fl o Ar key Ns = Ns Ar value | Fl u Ar key Brc Oc Ns ...
-.Brq Ar jailID | jailName
.Ao Ar bootenv Ac
.Op Ar utility Op Ar argument ...
.Xc
@@ -193,10 +191,7 @@
.Va host.hostname ,
and
.Va path
-may not actually be unset.
-Attempts to unset any of these will revert them to the default values specified
-below, if they have been overwritten by
-.Fl o .
+must be set, the default values are specified below.
.Pp
All
.Ar key Ns = Ns Ar value
@@ -207,7 +202,7 @@
.It Va allow.mount Ta Cm true
.It Va allow.mount.devfs Ta Cm true
.It Va enforce_statfs Ta Cm 1
-.It Va name Ta Va bootenv
+.It Va name Ta jail id
.It Va host.hostname Ta Va bootenv
.It Va path Ta Set to a path in /tmp generated by
.Xr libbe 3 .
Index: sbin/bectl/bectl_jail.c
===================================================================
--- sbin/bectl/bectl_jail.c
+++ sbin/bectl/bectl_jail.c
@@ -181,10 +181,10 @@
{
char *bootenv, *mountpoint;
int jid, opt, ret;
- bool default_hostname, default_name, interactive, unjail;
+ bool default_hostname, interactive, unjail;
pid_t pid;
- default_hostname = default_name = interactive = unjail = true;
+ default_hostname = interactive = unjail = true;
jpcnt = INIT_PARAMCOUNT;
jp = malloc(jpcnt * sizeof(*jp));
if (jp == NULL)
@@ -206,8 +206,6 @@
* optarg has been modified to null terminate
* at the assignment operator.
*/
- if (strcmp(optarg, "name") == 0)
- default_name = false;
if (strcmp(optarg, "host.hostname") == 0)
default_hostname = false;
}
@@ -217,8 +215,6 @@
break;
case 'u':
if ((ret = jailparam_delarg(optarg)) == 0) {
- if (strcmp(optarg, "name") == 0)
- default_name = true;
if (strcmp(optarg, "host.hostname") == 0)
default_hostname = true;
} else if (ret != ENOENT) {
@@ -259,8 +255,6 @@
return (1);
}
- if (default_name)
- jailparam_add("name", bootenv);
if (default_hostname)
jailparam_add("host.hostname", bootenv);
@@ -316,15 +310,23 @@
static int
bectl_search_jail_paths(const char *mnt)
{
- char jailpath[MAXPATHLEN];
int jid;
+ char lastjid[16];
+ char jailpath[MAXPATHLEN];
+
+ /* jail_getv expects name/value strings */
+ snprintf(lastjid, sizeof(lastjid), "%d", 0);
jid = 0;
- (void)mnt;
- while ((jid = jail_getv(0, "lastjid", &jid, "path", &jailpath,
+ while ((jid = jail_getv(0, "lastjid", lastjid, "path", &jailpath,
NULL)) != -1) {
+
+ /* the jail we've been looking for */
if (strcmp(jailpath, mnt) == 0)
return (jid);
+
+ /* update lastjid and keep on looking */
+ snprintf(lastjid, sizeof(lastjid), "%d", jid);
}
return (-1);
@@ -354,8 +356,11 @@
return (-1);
if (nvlist_lookup_nvlist(belist, ident, &props) == 0) {
- /* We'll attempt to resolve the jid by way of mountpoint */
- if (nvlist_lookup_string(props, "mountpoint", &mnt) == 0) {
+
+ /* path where a boot environment is mounted */
+ if (nvlist_lookup_string(props, "mounted", &mnt) == 0) {
+
+ /* looking for a jail that matches our bootenv path */
jid = bectl_search_jail_paths(mnt);
be_prop_list_free(belist);
return (jid);
Index: sbin/bectl/tests/bectl_test.sh
===================================================================
--- sbin/bectl/tests/bectl_test.sh
+++ sbin/bectl/tests/bectl_test.sh
@@ -254,6 +254,14 @@
atf_check cp /rescue/rescue ${root}/rescue/rescue
atf_check bectl -r ${zpool}/ROOT umount default
+ # Prepare a second boot environment
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT create -e default target
+
+ # When a jail name is not explicit, it should match the jail id.
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT jail -b -o jid=233637 default
+ atf_check -o inline:"233637\n" -s exit:0 -x "jls -j 233637 name"
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT unjail default
+
# Basic command-mode tests, with and without jail cleanup
atf_check -o inline:"rescue\n" bectl -r ${zpool}/ROOT \
jail default /rescue/rescue ls -1
@@ -271,6 +279,11 @@
atf_check bectl -r ${zpool}/ROOT jail -b default
atf_check bectl -r ${zpool}/ROOT unjail default
atf_check -s not-exit:0 -x "jls | grep -F \"${root}\""
+ # 'unjail' by BE name. Force bectl to lookup jail id by the BE name.
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT jail -b default
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT jail -b -o name=bectl_test target
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT unjail target
+ atf_check -o empty -s exit:0 bectl -r ${zpool}/ROOT unjail default
# cannot unjail an unjailed BE (by either command name)
atf_check -e ignore -s not-exit:0 bectl -r ${zpool}/ROOT ujail default
atf_check -e ignore -s not-exit:0 bectl -r ${zpool}/ROOT unjail default
@@ -281,8 +294,24 @@
atf_check -s not-exit:0 -x "mount | grep -F '${root}'"
atf_check bectl -r ${zpool}/ROOT ujail default
}
+
+# If a test has failed, it's possible that the boot environment hasn't
+# been 'unjail'ed. We want to remove the jail before 'bectl_cleanup'
+# attempts to destroy the zpool.
bectl_jail_cleanup()
{
+ for bootenv in "default" "target"; do
+ # mountpoint of the boot environment
+ mountpoint="$(bectl -r bectl_test/ROOT list -H | grep ${bootenv} | awk '{print $3}')"
+
+ # see if any jail paths match the boot environment mountpoint
+ jailid="$(jls | grep ${mountpoint} | awk '{print $1}')"
+
+ if [ -z "$jailid" ]; then
+ continue;
+ fi
+ jail -r ${jailid}
+ done;
bectl_cleanup bectl_test
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, May 1, 5:54 PM (11 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
32590733
Default Alt Text
D18607.id52241.diff (5 KB)
Attached To
Mode
D18607: bectl: use jail id as the default jail name for a boot environment
Attached
Detach File
Event Timeline
Log In to Comment