Skip to content

Commit

Permalink
Stay in workdir
Browse files Browse the repository at this point in the history
Fixes #209
  • Loading branch information
Jip-Hop committed Jul 7, 2024
1 parent 742a70b commit 9da33ab
Showing 1 changed file with 16 additions and 15 deletions.
31 changes: 16 additions & 15 deletions jlmkr.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,16 +115,16 @@
# Always add --bind-ro=/sys/module to make lsmod happy
# https://manpages.debian.org/bookworm/manpages/sysfs.5.en.html

JAILS_DIR_PATH = "jails"
JAIL_CONFIG_NAME = "config"
JAIL_ROOTFS_NAME = "rootfs"
DOWNLOAD_SCRIPT_DIGEST = (
"cfcb5d08b24187d108f2ab0d21a6cc4b73dcd7f5d7dfc80803bfd7f1642d638d"
)
SCRIPT_PATH = os.path.realpath(__file__)
SCRIPT_NAME = os.path.basename(SCRIPT_PATH)
SCRIPT_DIR_PATH = os.path.dirname(SCRIPT_PATH)
COMMAND_NAME = os.path.basename(__file__)
JAILS_DIR_PATH = os.path.join(SCRIPT_DIR_PATH, "jails")
JAIL_CONFIG_NAME = "config"
JAIL_ROOTFS_NAME = "rootfs"
SHORTNAME = "jlmkr"

# Only set a color if we have an interactive tty
Expand Down Expand Up @@ -591,7 +591,7 @@ def start_jail(jail_name):

systemd_run_additional_args = [
f"--unit={SHORTNAME}-{jail_name}",
f"--working-directory=./{jail_path}",
f"--working-directory={jail_path}",
f"--description=My nspawn jail {jail_name} [created with jailmaker]",
]

Expand Down Expand Up @@ -940,6 +940,8 @@ def get_mount_point(path):
path = os.path.dirname(path)
return path

def get_relative_path_in_jailmaker_dir(absolute_path):
return PurePath(absolute_path).relative_to(SCRIPT_DIR_PATH)

def get_zfs_dataset(path):
"""
Expand Down Expand Up @@ -970,21 +972,23 @@ def get_zfs_base_path():
return zfs_base_path


def create_zfs_dataset(relative_path):
def create_zfs_dataset(absolute_path):
"""
Create a ZFS Dataset.
Receives the dataset to be created relative to the jailmaker script (e.g. "jails" or "jails/newjail").
Create a ZFS Dataset inside the jailmaker directory at the provided absolute path.
E.g. "/mnt/mypool/jailmaker/jails" or "/mnt/mypool/jailmaker/jails/newjail").
"""
relative_path = get_relative_path_in_jailmaker_dir(absolute_path)
dataset_to_create = os.path.join(get_zfs_base_path(), relative_path)
eprint(f"Creating ZFS Dataset {dataset_to_create}")
subprocess.run(["zfs", "create", dataset_to_create], check=True)


def remove_zfs_dataset(relative_path):
def remove_zfs_dataset(absolute_path):
"""
Remove a ZFS Dataset.
Receives the dataset to be removed relative to the jailmaker script (e.g. "jails/oldjail").
Remove a ZFS Dataset inside the jailmaker directory at the provided absolute path.
E.g. "/mnt/mypool/jailmaker/jails/oldjail".
"""
relative_path = get_relative_path_in_jailmaker_dir(absolute_path)
dataset_to_remove = os.path.join((get_zfs_base_path()), relative_path)
eprint(f"Removing ZFS Dataset {dataset_to_remove}")
subprocess.run(["zfs", "destroy", "-r", dataset_to_remove], check=True)
Expand Down Expand Up @@ -1232,7 +1236,7 @@ def interactive_config():
def create_jail(**kwargs):
print(DISCLAIMER)

if os.path.basename(os.getcwd()) != "jailmaker":
if os.path.basename(SCRIPT_DIR_PATH) != "jailmaker":
eprint(
dedent(
f"""
Expand All @@ -1244,7 +1248,7 @@ def create_jail(**kwargs):
)
return 1

if not PurePath(get_mount_point(os.getcwd())).is_relative_to("/mnt"):
if not PurePath(get_mount_point(SCRIPT_DIR_PATH)).is_relative_to("/mnt"):
print(
dedent(
f"""
Expand Down Expand Up @@ -1967,9 +1971,6 @@ def main():
# Set appropriate permissions (if not already set) for this file, since it's executed as root
stat_chmod(SCRIPT_PATH, 0o700)

# Work relative to this script
os.chdir(SCRIPT_DIR_PATH)

# Ignore all args after the first "--"
args_to_parse = split_at_string(sys.argv[1:], "--")[0]
# Check for help
Expand Down

0 comments on commit 9da33ab

Please sign in to comment.