Skip to content
This repository has been archived by the owner on Mar 19, 2024. It is now read-only.

Write connection details to TTY on boot #53

Merged
merged 19 commits into from
Jul 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions stage2/01-sys-tweaks/files/rc.local
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,12 @@ if [ ! -f /home/umbrel/statuses/service-configured ]; then
fi
fi

# Display connection details on the TTY
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You could add a clear here.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure we should clear the TTY here since there could be useful log output on the screen that we don't want to overwrite.

if [ -x "$(command -v umbrel-details)" ]; then
# We run this in the background because it waits for the Tor hidden service
# to be created on first boot. rc.local needs to exit so the boot process
# can continue.
umbrel-details &
fi

exit 0
1 change: 1 addition & 0 deletions stage2/06-umbrel-details/00-packages
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
python3-qrcode
4 changes: 4 additions & 0 deletions stage2/06-umbrel-details/01-run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/bash -e

echo "Installing umbrel-details"
install -m 755 files/umbrel-details "${ROOTFS_DIR}"/usr/local/bin/umbrel-details
109 changes: 109 additions & 0 deletions stage2/06-umbrel-details/files/umbrel-details
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#!/usr/bin/env python3

import sys
import os
import time
import subprocess
import io
import qrcode

umbrel_ascii = '''
,;###GGGGGGGGGGl#Sp
,##GGGlW""^' '`""%GGGG#S,
,#GGG" "lGG#o
#GGl^ '$GG#
,#GGb \GGG,
lGG" "GGG
#GGGlGGGl##p,,p##lGGl##p,,p###ll##GGGG
!GGGlW"""*GGGGGGG#""""WlGGGGG#W""*WGGGGS
"" "^ '" ""


@GGS lG#
!GGG !GGG
!GGG !GGG
!GGG !GGG
!GGG !GGG
!GGG !GGG
'GGG $GGl
"GGG#psqp##GG#
"%GGGGGG#"
'''.strip('\n')

def create_qr(data):
output_buffer = io.TextIOWrapper(io.BytesIO(), sys.stdout.encoding)

qr = qrcode.QRCode(border=0, error_correction=qrcode.constants.ERROR_CORRECT_Q)
qr.add_data(data)
qr.print_ascii(out=output_buffer)

output_buffer.seek(0)
qr_ascii = output_buffer.read().strip()

return qr_ascii

def combine_ascii(left_ascii, right_ascii, spacing=0):
left_lines = left_ascii.split('\n')
right_lines = right_ascii.split('\n')

no_left_lines = len(left_lines)
no_right_lines = len(right_lines)

left_width = max(list(map(lambda line: len(line), left_lines)))
max_height = max(no_left_lines, no_right_lines)

lines = []
for i in range(max_height):
left_line = left_lines[i] if i < no_left_lines else ""
right_line = right_lines[i] if i < no_right_lines else ""

padding = " " * ((left_width - len(left_line)) + spacing)

lines.append(left_line + padding + right_line)

return "\n".join(lines)

def read_file_when_available(file_path, timeout):
start = time.time()
while not os.path.exists(file_path):
if (time.time() - start) > timeout:
return False
time.sleep(1)

with open(file_path, "r") as file:
file_contents = file.read()

return file_contents

def run(command):
result = subprocess.run(command, stdout=subprocess.PIPE)
return result.stdout.decode('utf-8').rstrip("\n")

def main():
timeout = 30
tor_hostname_file = "/home/umbrel/tor/data/web/hostname"
tor_hostname = read_file_when_available(tor_hostname_file, timeout)

ip = run(['hostname', '-I']).split(" ")[0]

if not tor_hostname or not ip:
print("Couldn't get connection details")
return

tor_hostname_qr_ascii = create_qr(tor_hostname.strip())
ascii_banner = combine_ascii(umbrel_ascii, tor_hostname_qr_ascii, spacing=10)

connection_details = f"""


{ascii_banner}

Your Umbrel is up and running at:

http://umbrel.local
http://{ip}
http://{tor_hostname}
"""
print(connection_details)

main()