From 727df5c13f770ec43b6132d9fc7d7a1009a06deb Mon Sep 17 00:00:00 2001 From: Softer Date: Fri, 1 May 2026 14:35:58 +0300 Subject: [PATCH] Add --share-log flag to upload install.log to paste.rs --- .github/ISSUE_TEMPLATE/01_bug.yml | 4 +- README.md | 4 +- archinstall/lib/args.py | 7 +++ archinstall/lib/share_log.py | 74 +++++++++++++++++++++++++++++++ archinstall/main.py | 8 +++- docs/help/report_bug.rst | 2 +- 6 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 archinstall/lib/share_log.py diff --git a/.github/ISSUE_TEMPLATE/01_bug.yml b/.github/ISSUE_TEMPLATE/01_bug.yml index ab40754f..92d8ee3f 100644 --- a/.github/ISSUE_TEMPLATE/01_bug.yml +++ b/.github/ISSUE_TEMPLATE/01_bug.yml @@ -41,8 +41,8 @@ body: attributes: value: > **Note**: Assuming you have network connectivity, - you can easily post the installation log using the following command: - `curl -F'file=@/var/log/archinstall/install.log' https://0x0.st` + you can easily upload the installation log and get a shareable URL by running: + `archinstall --share-log` - type: textarea id: freeform diff --git a/README.md b/README.md index 95d15702..720e07ef 100644 --- a/README.md +++ b/README.md @@ -101,9 +101,9 @@ If you come across any issues, kindly submit your issue here on GitHub or post y When submitting an issue, please: * Provide the stacktrace of the output if applicable * Attach the `/var/log/archinstall/install.log` to the issue ticket. This helps us help you! - * To extract the log from the ISO image, one way is to use
+ * To upload the log from the ISO image and get a shareable URL, run
```shell - curl -F'file=@/var/log/archinstall/install.log' https://0x0.st + archinstall --share-log ``` diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index 77545736..a09f805d 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -55,6 +55,7 @@ class Arguments: skip_wifi_check: bool = False advanced: bool = False verbose: bool = False + share_log: bool = False @dataclass @@ -431,6 +432,12 @@ class ArchConfigHandler: default=False, help='Enabled verbose options', ) + parser.add_argument( + '--share-log', + action='store_true', + default=False, + help='Upload /var/log/archinstall/install.log to paste.rs and print the URL, then exit', + ) return parser diff --git a/archinstall/lib/share_log.py b/archinstall/lib/share_log.py new file mode 100644 index 00000000..16416fee --- /dev/null +++ b/archinstall/lib/share_log.py @@ -0,0 +1,74 @@ +import sys + +from archinstall.lib.command import SysCommand +from archinstall.lib.exceptions import SysCallError +from archinstall.lib.output import logger + +# paste.rs is a minimal text pastebin with syntax highlighting by extension. +# 10 MiB is its documented upload limit. +_PASTE_URL = 'https://paste.rs' +_PASTE_MAX_SIZE = 10 * 1024 * 1024 + + +def share_install_log() -> int: + """Upload /var/log/archinstall/install.log to paste.rs and print the URL. + + Intended for users to paste the URL into a GitHub issue when reporting a + bug. Always asks for explicit confirmation - the log may contain hostname, + mirror URLs, package list, partition layout and other system details which + become public on upload. + + All diagnostic output goes to stderr instead of the standard log helpers, + so the file we are about to upload is not modified by this command. + """ + log_path = logger.path + + if not log_path.exists(): + print(f'Log file not found: {log_path}', file=sys.stderr) + return 1 + + size = log_path.stat().st_size + if size == 0: + print(f'Log file is empty: {log_path}', file=sys.stderr) + return 1 + + if size > _PASTE_MAX_SIZE: + print( + f'Log file is too large to share: {size} bytes ' + f'(limit: {_PASTE_MAX_SIZE} bytes). ' + f'Trim it or upload manually.', + file=sys.stderr, + ) + return 1 + + print(f'About to upload {log_path} ({size} bytes) to {_PASTE_URL}', file=sys.stderr) + print( + 'The log may contain hostname, mirror URLs, package list and ' + 'partition layout. The uploaded paste is public.', + file=sys.stderr, + ) + + try: + answer = input('Continue? [y/N]: ').strip().lower() + except (EOFError, KeyboardInterrupt): + print(file=sys.stderr) + return 1 + + if answer not in ('y', 'yes'): + print('Cancelled.', file=sys.stderr) + return 1 + + try: + result = SysCommand(f'curl -sS --data-binary @{log_path} {_PASTE_URL}') + except SysCallError as e: + print(f'Upload failed: {e}', file=sys.stderr) + return 1 + + url = result.decode().strip() + + if not url.startswith('http'): + print(f'Unexpected response from {_PASTE_URL}: {url[:200]!r}', file=sys.stderr) + return 1 + + print(url) + return 0 diff --git a/archinstall/main.py b/archinstall/main.py index cf0e42f6..f7a6e4a5 100644 --- a/archinstall/main.py +++ b/archinstall/main.py @@ -16,6 +16,7 @@ from archinstall.lib.networking import ping from archinstall.lib.output import debug, error, info, warn from archinstall.lib.packages.util import check_version_upgrade from archinstall.lib.pacman.pacman import Pacman +from archinstall.lib.share_log import share_install_log from archinstall.lib.translationhandler import tr, translation_handler from archinstall.lib.utils.util import running_from_iso from archinstall.tui.ui.components import tui @@ -95,6 +96,9 @@ def run() -> int: print(tr('Archinstall requires root privileges to run. See --help for more.')) return 1 + if arch_config_handler.args.share_log: + return share_install_log() + translation_handler.save_console_font() _log_sys_info() @@ -141,8 +145,8 @@ def _error_message(exc: Exception) -> None: Archinstall experienced the above error. If you think this is a bug, please report it to https://github.com/archlinux/archinstall and include the log file "/var/log/archinstall/install.log". - Hint: To extract the log from a live ISO - curl -F 'file=@/var/log/archinstall/install.log' https://0x0.st + Hint: To upload the log and get a shareable URL, run + archinstall --share-log """ ) warn(text) diff --git a/docs/help/report_bug.rst b/docs/help/report_bug.rst index bacaeb4c..522d51a5 100644 --- a/docs/help/report_bug.rst +++ b/docs/help/report_bug.rst @@ -15,7 +15,7 @@ When submitting a help ticket, please include the :code:`/var/log/archinstall/in It can be found both on the live ISO but also in the installed filesystem if the base packages were strapped in. .. tip:: - | An easy way to submit logs is ``curl -F 'file=@/var/log/archinstall/install.log' https://0x0.st``. + | An easy way to submit logs is ``archinstall --share-log``, which uploads ``install.log`` to paste.rs and prints a shareable URL. | Use caution when submitting other log files, but ``archinstall`` pledges to keep ``install.log`` safe for posting publicly! There are additional log files under ``/var/log/archinstall/`` that can be useful: