Add --share-log flag to upload install.log to paste.rs
This commit is contained in:
parent
6fefa3b6f5
commit
727df5c13f
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<br>
|
||||
* To upload the log from the ISO image and get a shareable URL, run<br>
|
||||
```shell
|
||||
curl -F'file=@/var/log/archinstall/install.log' https://0x0.st
|
||||
archinstall --share-log
|
||||
```
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue