diff --git a/archivebox/abx/archivebox/base_extractor.py b/archivebox/abx/archivebox/base_extractor.py index 81ea2200..f78921e0 100644 --- a/archivebox/abx/archivebox/base_extractor.py +++ b/archivebox/abx/archivebox/base_extractor.py @@ -81,7 +81,6 @@ class BaseExtractor: machine = installed_binary.machine assert uplink.machine == installed_binary.machine # it would be *very* weird if this wasn't true - # output_dir = self.get_output_path(snapshot) or CONSTANTS.TMP_DIR output_dir = CONSTANTS.DATA_DIR / '.tmp' / 'extractors' / self.name / str(snapshot.abid) output_dir.mkdir(parents=True, exist_ok=True) diff --git a/archivebox/main.py b/archivebox/main.py index fb0ea2ac..0b904734 100755 --- a/archivebox/main.py +++ b/archivebox/main.py @@ -1054,6 +1054,7 @@ def install(out_dir: Path=DATA_DIR, binproviders: Optional[List[str]]=None, bina from archivebox import CONSTANTS from archivebox.config.permissions import IS_ROOT, ARCHIVEBOX_USER, ARCHIVEBOX_GROUP + from archivebox.config.paths import get_or_create_working_lib_dir if not (os.access(ARCHIVE_DIR, os.R_OK) and ARCHIVE_DIR.is_dir()): run_subcommand('init', stdin=None, pwd=out_dir) # must init full index because we need a db to store InstalledBinary entries in @@ -1070,6 +1071,7 @@ def install(out_dir: Path=DATA_DIR, binproviders: Optional[List[str]]=None, bina print(f' DATA_DIR, LIB_DIR, and TMP_DIR will be owned by [blue]{ARCHIVEBOX_USER}:{ARCHIVEBOX_GROUP}[/blue].') print() + LIB_DIR = get_or_create_working_lib_dir() package_manager_names = ', '.join( f'[yellow]{binprovider.name}[/yellow]' @@ -1133,11 +1135,12 @@ def install(out_dir: Path=DATA_DIR, binproviders: Optional[List[str]]=None, bina else: binary.load_or_install(fresh=True, dry_run=dry_run).model_dump(exclude={'overrides', 'bin_dir', 'hook_type'}) if IS_ROOT: + LIB_DIR = with SudoPermission(uid=0): if ARCHIVEBOX_USER == 0: - os.system(f'chmod -R 777 "{CONSTANTS.LIB_DIR.resolve()}"') + os.system(f'chmod -R 777 "{LIB_DIR.resolve()}"') else: - os.system(f'chown -R {ARCHIVEBOX_USER} "{CONSTANTS.LIB_DIR.resolve()}"') + os.system(f'chown -R {ARCHIVEBOX_USER} "{LIB_DIR.resolve()}"') except Exception as e: print(f'[red]:cross_mark: Failed to install {binary.name} as user {ARCHIVEBOX_USER}: {e}[/red]') if binaries and len(binaries) == 1: diff --git a/archivebox/misc/checks.py b/archivebox/misc/checks.py index b6304a5a..b0322a1e 100644 --- a/archivebox/misc/checks.py +++ b/archivebox/misc/checks.py @@ -127,7 +127,7 @@ def check_data_dir_permissions(): # data_owned_by_default_user = data_dir_uid == DEFAULT_PUID or data_dir_gid == DEFAULT_PGID data_owner_doesnt_match = (data_dir_uid != ARCHIVEBOX_USER and data_dir_gid != ARCHIVEBOX_GROUP) if not IS_ROOT else False - data_not_writable = not (os.path.isdir(DATA_DIR) and os.access(DATA_DIR, os.W_OK)) # and os.access(CONSTANTS.LIB_DIR, os.W_OK) and os.access(CONSTANTS.TMP_DIR, os.W_OK)) + data_not_writable = not (os.path.isdir(DATA_DIR) and os.access(DATA_DIR, os.W_OK)) if data_owned_by_root: STDERR.print('\n[yellow]:warning: Warning: ArchiveBox [blue]DATA_DIR[/blue] is currently owned by [red]root[/red], it must be changed before archiving can run![/yellow]') elif data_owner_doesnt_match or data_not_writable: @@ -136,8 +136,6 @@ def check_data_dir_permissions(): if data_owned_by_root or data_owner_doesnt_match or data_not_writable: STDERR.print(f'[violet]Hint:[/violet] Change the current ownership [red]{data_dir_uid}[/red]:{data_dir_gid} (PUID:PGID) to a non-root user & group that will run ArchiveBox, e.g.:') STDERR.print(f' [grey53]sudo[/grey53] chown -R [blue]{DEFAULT_PUID}:{DEFAULT_PGID}[/blue] {DATA_DIR.resolve()}') - # STDERR.print(f' [grey53]sudo[/grey53] chown -R [blue]{DEFAULT_PUID}:{DEFAULT_PGID}[/blue] {CONSTANTS.LIB_DIR.resolve()}') - # STDERR.print(f' [grey53]sudo[/grey53] chown -R [blue]{DEFAULT_PUID}:{DEFAULT_PGID}[/blue] {CONSTANTS.TMP_DIR.resolve()}') STDERR.print() STDERR.print('[blue]More info:[/blue]') STDERR.print(' [link=https://github.com/ArchiveBox/ArchiveBox#storage-requirements]https://github.com/ArchiveBox/ArchiveBox#storage-requirements[/link]') diff --git a/pyproject.toml b/pyproject.toml index 54a6e66f..ecb13bbc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "archivebox" -version = "0.8.5rc47" +version = "0.8.5rc48" requires-python = ">=3.10" description = "Self-hosted internet archiving solution." authors = [{name = "Nick Sweeting", email = "pyproject.toml@archivebox.io"}] diff --git a/uv.lock b/uv.lock index be9e8a54..362eb3ac 100644 --- a/uv.lock +++ b/uv.lock @@ -41,7 +41,7 @@ wheels = [ [[package]] name = "archivebox" -version = "0.8.5rc46" +version = "0.8.5rc47" source = { editable = "." } dependencies = [ { name = "atomicwrites" },