I am using the GUI to try and upgrade. This issue I am having is that the upgrade says it is successful, but even after a reboot of the Voyager, it says it is on 2.4.0 and that upgrade to 2.5.0 is available. I have run through the upgrade process 3 times and still the same.
I see there is another thread from someone else "Can't update to 2.5.0", but looking through my logs, I don't see the same error they had "could not read xxxxxxxxxxxxxxx bad object".'
I have also checked "Update failed 2.4.1 -> 2.5.0" and don't have the same error Same with "Failed to Complete Update 2.4.1 to 2.5.0"
here are my logs
- David @david2022-12-16 13:35:45.160Z
Hi @mikerotch, sorry that you're running into issues updating.
Thanks for sharing those logs! Unfortunately, there aren't any log entries from the update process, so I can't see if there have been any errors.
Do you know whether you're using the read-only filesystem? If it's enabled TinyPilot won't be able to update. If you are using it, you will need to disable it before updating.
If you're not using the read-only filesystem, can you run the update again and share another log once the update is 'complete'?
- MIn reply tomikerotch⬆:Alan Chiu @mikerotch
I think I may have discovered the issue. I replaced the rpi in the Voyager 2 with my own 8GB rpi since I plan to do many other things on the Voyager than just a remote KVM. Would this prevent an upgrade? If so, is it possible somehow to register the rpi that the Voyager came with and register my own rpi as the correct one?
EDIT: forgot to mention that I did check and the file system is not read-only.
- David @david2022-12-19 15:38:37.756Z
Thanks for checking that read-only is disabled!
Would this prevent an upgrade?
I don't think so. Using a different Pi 4B shouldn't cause any issues when updating.
Could you click 'update' in the GUI, let it run until it's 'successful', click 'ok', and then share another log? There should be a section in there dedicated to the update's logs. I'd like to look to see if there's a clue to the issue in there.
- MAlan Chiu @mikerotch
Here is the log. I had to change http to h t t p or else this forum thinks I am spamming my sending more than 15 links
2022-12-19 22:36:33.136 __main__ INFO Starting TinyPilot update 2022-12-19 22:36:33.137 __main__ INFO Launching update script: /opt/tinypilot-privileged/update + set -u + set -e + readonly VERSION_FILE=/home/tinypilot/target-version + VERSION_FILE=/home/tinypilot/target-version + SCRIPT_ARGS=() + [[ -f /home/tinypilot/target-version ]] ++ cat /home/tinypilot/target-version + VERSION=2.5.0 + SCRIPT_ARGS+=(--version "${VERSION}") + readonly SCRIPT_ARGS + curl --silent --show-error h t t p s://gk.tinypilotkvm.com/get-tinypilot-pro.sh + bash -s -- --version 2.5.0 + TARGET_VERSION= + [[ 2 -gt 0 ]] + case "$1" in + TARGET_VERSION=2.5.0 + shift + shift + [[ 0 -gt 0 ]] + readonly TEMP_DIR=/var/tmp + TEMP_DIR=/var/tmp ++ mktemp --tmpdir=/var/tmp --suffix .json + TARGET_VERSION_FILENAME=/var/tmp/tmp.Q7RUFul2tb.json + readonly TARGET_VERSION_FILENAME ++ mktemp --tmpdir=/var/tmp --suffix .tgz + BUNDLE_FILENAME=/var/tmp/tmp.3DBOoHo6AG.tgz + readonly BUNDLE_FILENAME + readonly INSTALLER_DIR=/opt/tinypilot-updater + INSTALLER_DIR=/opt/tinypilot-updater + readonly TINYPILOT_VERSION_FILE=/opt/tinypilot/VERSION + TINYPILOT_VERSION_FILE=/opt/tinypilot/VERSION + CURRENT_VERSION= + [[ -f /opt/tinypilot/VERSION ]] ++ cat /opt/tinypilot/VERSION + CURRENT_VERSION=2.4.0 + readonly CURRENT_VERSION + HAS_COMMUNITY_INSTALLED=0 + readonly TINYPILOT_README_FILE=/opt/tinypilot/README.md + TINYPILOT_README_FILE=/opt/tinypilot/README.md + [[ -f /opt/tinypilot/README.md ]] ++ head -n 1 /opt/tinypilot/README.md + [[ # TinyPilot Pro == \#\ \T\i\n\y\P\i\l\o\t ]] + readonly HAS_COMMUNITY_INSTALLED + trap clean_up EXIT + [[ -z 2.5.0 ]] + readonly TARGET_VERSION + [[ 2.4.0 == \2\.\5\.\0 ]] + readonly TINYPILOT_LICENSE_KEY=UNSPECIFIED + TINYPILOT_LICENSE_KEY=UNSPECIFIED ++ tr --delete '\0' + DEVICE_SERIAL_NUMBER=100000005cbc045c + readonly DEVICE_SERIAL_NUMBER ++ curl h t t p s://gk.tinypilotkvm.com/pro/download/2.5.0 --location --header 'TP-License: UNSPECIFIED' --header 'TP-Device-Serial-Number: 100000005cbc045c' --output /var/tmp/tmp.3DBOoHo6AG.tgz --write-out '%{h t t p _code}' --silent + h t t p _CODE=200 + readonly h t t p _CODE + [[ 200 != \2\0\0 ]] + sudo rm -rf /opt/tinypilot-updater + sudo mkdir -p /opt/tinypilot-updater + sudo tar --gunzip --extract --file /var/tmp/tmp.3DBOoHo6AG.tgz --directory /opt/tinypilot-updater + sudo chown root:root --recursive /opt/tinypilot-updater + [[ 0 -eq 1 ]] + pushd /opt/tinypilot-updater /opt/tinypilot-updater /opt/tinypilot + sudo ./install + . lib.sh + readonly TEMP_DIR=/var/tmp + TEMP_DIR=/var/tmp ++ mktemp --tmpdir=/var/tmp --suffix .yml + INSTALL_SETTINGS_FILE=/var/tmp/tmp.N0VjDF3dfY.yml + readonly INSTALL_SETTINGS_FILE + readonly TINYPILOT_SETTINGS_FILE=/home/tinypilot/settings.yml + TINYPILOT_SETTINGS_FILE=/home/tinypilot/settings.yml + readonly USTREAMER_SETTINGS_FILE=/home/ustreamer/config.yml + USTREAMER_SETTINGS_FILE=/home/ustreamer/config.yml ++ ls tinypilot-20221003185210-1-armhf.deb + TINYPILOT_DEBIAN_PACKAGE=tinypilot-20221003185210-1-armhf.deb + readonly TINYPILOT_DEBIAN_PACKAGE + trap clean_up EXIT ++ uname -m + [[ armv7l == \a\a\r\c\h\6\4 ]] + [[ -f /home/tinypilot/settings.yml ]] + echo 'Using settings file at: /home/tinypilot/settings.yml' Using settings file at: /home/tinypilot/settings.yml + cp /home/tinypilot/settings.yml /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_port 8001 + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_port + local value=8001 + grep --silent '^ustreamer_port:' /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_persistent true + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_persistent + local value=true + grep --silent '^ustreamer_persistent:' /var/tmp/tmp.N0VjDF3dfY.yml + USE_TC358743_DEFAULTS=false + grep --silent '^ustreamer_capture_device:' /var/tmp/tmp.N0VjDF3dfY.yml + '[' -f /home/ustreamer/config.yml ']' + grep --silent 'capture_device: "tc358743"' /home/ustreamer/config.yml + USE_TC358743_DEFAULTS=true + true + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_encoder omx + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_encoder + local value=omx + grep --silent '^ustreamer_encoder:' /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_format uyvy + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_format + local value=uyvy + grep --silent '^ustreamer_format:' /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_workers 3 + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_workers + local value=3 + grep --silent '^ustreamer_workers:' /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_use_dv_timings true + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_use_dv_timings + local value=true + grep --silent '^ustreamer_use_dv_timings:' /var/tmp/tmp.N0VjDF3dfY.yml + yaml_set_if_undefined /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_drop_same_frames 30 + local file_path=/var/tmp/tmp.N0VjDF3dfY.yml + local key=ustreamer_drop_same_frames + local value=30 + grep --silent '^ustreamer_drop_same_frames:' /var/tmp/tmp.N0VjDF3dfY.yml + echo 'Final install settings:' Final install settings: + cat /var/tmp/tmp.N0VjDF3dfY.yml ustreamer_drop_same_frames: 30 ustreamer_encoder: omx ustreamer_format: uyvy ustreamer_persistent: true ustreamer_port: 8001 ustreamer_quality: 100 ustreamer_use_dv_timings: true ustreamer_workers: 3 ustreamer_resolution: 1920x1080 tinypilot_external_port: 61079 tinypilot_external_tls_port: 61080 + apt-get update --allow-releaseinfo-change-suite Hit:1 h t t p s://linux.teamviewer.com/deb stable InRelease Hit:2 h t t p ://archive.raspberrypi.org/debian buster InRelease Get:3 h t t p ://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB] Hit:4 h t t p ://giteduberger.fr rpimonitor/ InRelease Fetched 15.0 kB in 7s (2,293 B/s) Reading package lists... + apt-get install -y git libffi-dev libssl-dev python3-dev python3-venv Reading package lists... Building dependency tree... Reading state information... git is already the newest version (1:2.20.1-2+deb10u6). libffi-dev is already the newest version (3.2.1-9). libssl-dev is already the newest version (1.1.1n-0+deb10u3). python3-dev is already the newest version (3.7.3-1). python3-venv is already the newest version (3.7.3-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. + python3 -m venv venv + . venv/bin/activate ++ deactivate nondestructive ++ '[' -n '' ']' ++ '[' -n /bin/bash -o -n '' ']' ++ hash -r ++ '[' -n '' ']' ++ unset VIRTUAL_ENV ++ '[' '!' nondestructive = nondestructive ']' ++ VIRTUAL_ENV=/opt/tinypilot-updater/venv ++ export VIRTUAL_ENV ++ _OLD_VIRTUAL_PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ PATH=/opt/tinypilot-updater/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ++ export PATH ++ '[' -n '' ']' ++ '[' -z '' ']' ++ _OLD_VIRTUAL_PS1= ++ '[' 'x(venv) ' '!=' x ']' ++ PS1='(venv) ' ++ export PS1 ++ '[' -n /bin/bash -o -n '' ']' ++ hash -r + pip install 'pip>=21.3.1' Looking in indexes: h t t p s://pypi.org/simple, h t t p s://www.piwheels.org/simple Collecting pip>=21.3.1 Cache entry deserialization failed, entry ignored Cache entry deserialization failed, entry ignored Using cached h t t p s://files.pythonhosted.org/packages/09/bd/2410905c76ee14c62baf69e3f4aa780226c1bbfc9485731ad018e35b0cb5/pip-22.3.1-py3-none-any.whl Installing collected packages: pip Found existing installation: pip 18.1 Uninstalling pip-18.1: Successfully uninstalled pip-18.1 Successfully installed pip-22.3.1 + pip install -r requirements.txt Looking in indexes: h t t p s://pypi.org/simple, h t t p s://www.piwheels.org/simple Collecting ansible==2.10.7 Using cached h t t p s://www.piwheels.org/simple/ansible/ansible-2.10.7-py3-none-any.whl (48.2 MB) WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))': /simple/ansible-base/ Collecting ansible-base==2.10.17 Using cached h t t p s://www.piwheels.org/simple/ansible-base/ansible_base-2.10.17-py3-none-any.whl (1.9 MB) Collecting cffi==1.15.1 Using cached h t t p s://www.piwheels.org/simple/cffi/cffi-1.15.1-cp37-cp37m-linux_armv7l.whl (219 kB) Collecting cryptography==37.0.4 Using cached h t t p s://www.piwheels.org/simple/cryptography/cryptography-37.0.4-cp37-cp37m-linux_armv7l.whl (1.8 MB) Collecting Jinja2==3.1.2 Using cached h t t p s://www.piwheels.org/simple/jinja2/Jinja2-3.1.2-py3-none-any.whl (133 kB) Collecting MarkupSafe==2.1.1 Using cached h t t p s://www.piwheels.org/simple/markupsafe/MarkupSafe-2.1.1-cp37-cp37m-linux_armv7l.whl (26 kB) Collecting packaging==21.3 Using cached h t t p s://www.piwheels.org/simple/packaging/packaging-21.3-py3-none-any.whl (40 kB) Collecting pycparser==2.21 Using cached h t t p s://www.piwheels.org/simple/pycparser/pycparser-2.21-py2.py3-none-any.whl (119 kB) Collecting pyparsing==3.0.9 Using cached h t t p s://www.piwheels.org/simple/pyparsing/pyparsing-3.0.9-py3-none-any.whl (98 kB) Collecting PyYAML==6.0 Using cached h t t p s://www.piwheels.org/simple/pyyaml/PyYAML-6.0-cp37-cp37m-linux_armv7l.whl (45 kB) Installing collected packages: PyYAML, pyparsing, pycparser, MarkupSafe, packaging, Jinja2, cffi, cryptography, ansible-base, ansible Successfully installed Jinja2-3.1.2 MarkupSafe-2.1.1 PyYAML-6.0 ansible-2.10.7 ansible-base-2.10.17 cffi-1.15.1 cryptography-37.0.4 packaging-21.3 pycparser-2.21 pyparsing-3.0.9 + ansible-playbook --inventory localhost, install.yml --extra-vars @/var/tmp/tmp.N0VjDF3dfY.yml --extra-vars tinypilot_debian_package_path=/opt/tinypilot-updater/tinypilot-20221003185210-1-armhf.deb PLAY [localhost] *************************************************************** TASK [Gathering Facts] ********************************************************* ok: [localhost] TASK [ansible-role-tinypilot-pro : install Janus Debian package] *************** skipping: [localhost] TASK [ansible-role-ustreamer : check that the H264 variables are in a consistent state] *** skipping: [localhost] TASK [ansible-role-ustreamer : create ustreamer group] ************************* ok: [localhost] TASK [ansible-role-ustreamer : create ustreamer user] ************************** ok: [localhost] TASK [ansible-role-ustreamer : check for a boot config file] ******************* ok: [localhost] TASK [ansible-role-ustreamer : save whether boot config file exists] *********** ok: [localhost] TASK [ansible-role-ustreamer : check whether this machine has a uStreamer settings file] *** ok: [localhost] TASK [ansible-role-ustreamer : read uStreamer settings file] ******************* ok: [localhost] TASK [ansible-role-ustreamer : decode settings file] *************************** ok: [localhost] TASK [ansible-role-ustreamer : read ustreamer_capture_device from config file if it's not already defined] *** ok: [localhost] TASK [ansible-role-ustreamer : enable TC358743 overlay in /boot/config.txt] **** ok: [localhost] TASK [ansible-role-ustreamer : set GPU memory to 256MB in /boot/config.txt] **** ok: [localhost] TASK [ansible-role-ustreamer : check for a boot cmdline file] ****************** ok: [localhost] TASK [ansible-role-ustreamer : read /boot/cmdline.txt] ************************* ok: [localhost] TASK [ansible-role-ustreamer : decode command-line string] ********************* ok: [localhost] TASK [ansible-role-ustreamer : change cma to 128M if it's set to a different value] *** skipping: [localhost] TASK [ansible-role-ustreamer : add cma=128M to cmdline.txt if it's missing] **** skipping: [localhost] TASK [ansible-role-ustreamer : create EDIDs folder] **************************** ok: [localhost] TASK [ansible-role-ustreamer : copy TC358743 EDID file] ************************ ok: [localhost] TASK [ansible-role-ustreamer : install TC358743 initializer service] *********** ok: [localhost] TASK [ansible-role-ustreamer : use custom settings for TC358743 chip for any facts not already defined] *** ok: [localhost] TASK [ansible-role-ustreamer : remove TC358743 initializer service file] ******* skipping: [localhost] TASK [ansible-role-ustreamer : disable TC358743 overlay in /boot/config.txt] *** skipping: [localhost] TASK [ansible-role-ustreamer : check if OS is Raspberry Pi OS] ***************** ok: [localhost] TASK [ansible-role-ustreamer : enable OpenMax IL acceleration] ***************** ok: [localhost] TASK [ansible-role-ustreamer : check that OpenMax IL acceleration is only compiled on Raspberry Pi OS] *** skipping: [localhost] TASK [ansible-role-ustreamer : collect universal required apt packages] ******** ok: [localhost] TASK [ansible-role-ustreamer : collect Raspberry Pi OS specific required apt packages] *** ok: [localhost] TASK [ansible-role-ustreamer : install libraspberrypi-dev if we're using OpenMax IL acceleration] *** ok: [localhost] TASK [ansible-role-ustreamer : collect Debian-specific required apt packages] *** skipping: [localhost] TASK [ansible-role-ustreamer : collect Ubuntu-specific required apt packages] *** skipping: [localhost] TASK [ansible-role-ustreamer : collect Janus WebRTC plugin specific required apt packages] *** skipping: [localhost] TASK [ansible-role-ustreamer : install uStreamer pre-requisite packages] ******* ok: [localhost] TASK [ansible-role-ustreamer : create uStreamer folder] ************************ changed: [localhost] TASK [ansible-role-ustreamer : get uStreamer repo] ***************************** ok: [localhost] TASK [ansible-role-ustreamer : clean uStreamer repository] ********************* changed: [localhost] TASK [ansible-role-ustreamer : build uStreamer] ******************************** changed: [localhost] TASK [ansible-role-ustreamer : fix uStreamer folder permissions] *************** changed: [localhost] TASK [ansible-role-ustreamer : install uStreamer as a service] ***************** ok: [localhost] TASK [ansible-role-ustreamer : enable systemd uStreamer service file] ********** ok: [localhost] TASK [ansible-role-ustreamer : save uStreamer settings file] ******************* ok: [localhost] TASK [ansible-role-tinypilot-pro : create uStreamer Janus plugin config] ******* skipping: [localhost] TASK [ansible-role-tinypilot-pro : install uStreamer Janus plugin] ************* skipping: [localhost] TASK [ansible-role-tinypilot-pro : (legacy cleanup) check for broken cycle-tls-keys script] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : (legacy cleanup) disable cycle-tls-keys systemd task] *** skipping: [localhost] TASK [ansible-role-tinypilot-pro : (legacy cleanup) remove cycle-tls-keys systemd task] *** skipping: [localhost] TASK [ansible-role-tinypilot-pro : (legacy cleanup) remove stale key material] *** skipping: [localhost] => (item=/etc/ssl/certs/tinypilot-ca.crt) skipping: [localhost] => (item=/etc/ssl/private/tinypilot-ca.key) skipping: [localhost] => (item=/etc/ssl/csr/tinypilot-ca.csr) skipping: [localhost] => (item=/etc/ssl/certs/tinypilot-nginx.crt) skipping: [localhost] => (item=/etc/ssl/private/tinypilot-nginx.key) skipping: [localhost] => (item=/etc/ssl/csr/tinypilot-nginx.csr) TASK [ansible-role-tinypilot-pro : (legacy cleanup) remove broken cycle-tls-keys script] *** skipping: [localhost] TASK [ansible-role-tinypilot-pro : install pip3] ******************************* ok: [localhost] TASK [ansible-role-tinypilot-pro : install cryptography] *********************** ok: [localhost] TASK [ansible-role-tinypilot-pro : ensure CSR directory exists] **************** ok: [localhost] TASK [ansible-role-tinypilot-pro : create CA private key] ********************** ok: [localhost] TASK [ansible-role-tinypilot-pro : check for a CA CSR file] ******************** ok: [localhost] TASK [ansible-role-tinypilot-pro : create the CA CSR] ************************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : check for a CA certificate file] ************ ok: [localhost] TASK [ansible-role-tinypilot-pro : sign the CA CSR] **************************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : create host CSR signing key] **************** ok: [localhost] TASK [ansible-role-tinypilot-pro : create CSR for nginx] *********************** ok: [localhost] TASK [ansible-role-tinypilot-pro : generate a CA-signed TLS certificate] ******* ok: [localhost] TASK [ansible-role-tinypilot-pro : install update-tls-cert-common-name as a service] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : Remove legacy config file.] ***************** ok: [localhost] TASK [ansible-role-nginx : Include OS-specific variables.] ********************* ok: [localhost] TASK [ansible-role-nginx : Define nginx_user.] ********************************* ok: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** skipping: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** skipping: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** included: /opt/tinypilot-updater/roles/ansible-role-nginx/tasks/setup-Debian.yml for localhost TASK [ansible-role-nginx : Update apt cache.] ********************************** ok: [localhost] TASK [ansible-role-nginx : Ensure nginx is installed.] ************************* ok: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** skipping: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** skipping: [localhost] TASK [ansible-role-nginx : include_tasks] ************************************** skipping: [localhost] TASK [ansible-role-nginx : Remove default nginx vhost config file (if configured).] *** ok: [localhost] TASK [ansible-role-nginx : Ensure nginx_vhost_path exists.] ******************** ok: [localhost] TASK [ansible-role-nginx : Add managed vhost config files.] ******************** ok: [localhost] => (item={'listen': [61079, '61080 ssl h t t p 2'], 'server_name': 'tinypilot', 'filename': 'tinypilot.conf', 'root': '/opt/tinypilot', 'index': 'index.html', 'error_page': '497 =307 h t t p s://$h t t p _host$request_uri', 'extra_parameters': 'ssl_certificate "/etc/ssl/certs/tinypilot-nginx.crt";\nssl_certificate_key "/etc/ssl/private/tinypilot-nginx.key";\nssl_protocols TLSv1.2;\nssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;\nssl_ecdh_curve secp384r1;\nssl_session_timeout 10m;\nssl_session_cache shared:SSL:10m;\nssl_session_tickets off;\nproxy_buffers 16 16k;\nproxy_buffer_size 16k;\nproxy_set_header Host $h t t p _host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_h t t p _version 1.1;\nlocation /socket.io {\n proxy_pass h t t p ://tinypilot;\n proxy_set_header Upgrade $h t t p _upgrade;\n proxy_set_header Connection "Upgrade";\n # Since this is a connection upgrade, we don\'t inherit the settings from\n # above. We need these so that nginx forwards requests properly to\n # Flask-SocketIO.\n # See: h t t p s://github.com/miguelgrinberg/Flask-SocketIO/issues/1501#issuecomment-802082048\n proxy_set_header Host $h t t p _host;\n proxy_set_header X-Forwarded-Host $h t t p _host;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\nlocation /state {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /stream {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n postpone_output 0;\n proxy_buffering off;\n proxy_ignore_headers X-Accel-Buffering;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /snapshot {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /janus/ws {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://janus-ws;\n proxy_set_header Upgrade $h t t p _upgrade;\n proxy_set_header Connection "Upgrade";\n proxy_set_header Host $h t t p _host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Scheme $scheme;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header X-Forwarded-Port $server_port;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\nlocation /ca.crt {\n alias "/etc/ssl/certs/tinypilot-ca.crt";\n}\nlocation / {\n proxy_pass h t t p ://tinypilot;\n}\nlocation /api/massStorage/backingFiles {\n # Allow large file transfers without buffering them.\n client_max_body_size 0;\n proxy_request_buffering off;\n proxy_read_timeout 1d;\n proxy_pass h t t p ://tinypilot;\n}\nlocation ~* ^/.+\\.(html|js|js.map|css|woff|woff2)$ {\n root "/opt/tinypilot/app/static";\n\n # We cache assets to prevent the browser from making redundant\n # requests to the same files while loading the page. (Observed on\n # Chrome 91.) We don’t want caching otherwise, though, in order to\n # avoid stale files after users update their device. Note, that in\n # addition to `max-age`, the browser’s caching behaviour is relative\n # to the `Last-Modified` header, so we make that seem recent.\n add_header Last-Modified $date_gmt;\n add_header Cache-Control \'public, max-age=10s\';\n}\nlocation ~* ^/.+\\.(jpg|jpeg|png|ico)$ {\n root "/opt/tinypilot/app/static";\n}\n# Authenticate any protected routes that are outside of the core\n# TinyPilot web app.\nlocation = /auth {\n internal;\n proxy_pass h t t p ://tinypilot/api/auth;\n proxy_pass_request_body off;\n proxy_set_header Content-Length "";\n proxy_set_header X-Original-URI $request_uri;\n\n # Redefine header directives, as they are not inherited here:\n # See h t t p ://nginx.org/en/docs/h t t p /ngx_h t t p _proxy_module.html#proxy_set_header\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n'}) TASK [ansible-role-nginx : Remove managed vhost config files.] ***************** skipping: [localhost] => (item={'listen': [61079, '61080 ssl h t t p 2'], 'server_name': 'tinypilot', 'filename': 'tinypilot.conf', 'root': '/opt/tinypilot', 'index': 'index.html', 'error_page': '497 =307 h t t p s://$h t t p _host$request_uri', 'extra_parameters': 'ssl_certificate "/etc/ssl/certs/tinypilot-nginx.crt";\nssl_certificate_key "/etc/ssl/private/tinypilot-nginx.key";\nssl_protocols TLSv1.2;\nssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;\nssl_ecdh_curve secp384r1;\nssl_session_timeout 10m;\nssl_session_cache shared:SSL:10m;\nssl_session_tickets off;\nproxy_buffers 16 16k;\nproxy_buffer_size 16k;\nproxy_set_header Host $h t t p _host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_h t t p _version 1.1;\nlocation /socket.io {\n proxy_pass h t t p ://tinypilot;\n proxy_set_header Upgrade $h t t p _upgrade;\n proxy_set_header Connection "Upgrade";\n # Since this is a connection upgrade, we don\'t inherit the settings from\n # above. We need these so that nginx forwards requests properly to\n # Flask-SocketIO.\n # See: h t t p s://github.com/miguelgrinberg/Flask-SocketIO/issues/1501#issuecomment-802082048\n proxy_set_header Host $h t t p _host;\n proxy_set_header X-Forwarded-Host $h t t p _host;\n proxy_set_header X-Forwarded-Proto $scheme;\n}\nlocation /state {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /stream {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n postpone_output 0;\n proxy_buffering off;\n proxy_ignore_headers X-Accel-Buffering;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /snapshot {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://ustreamer;\n}\nlocation /janus/ws {\n auth_request /auth;\n auth_request_set $auth_status $upstream_status;\n proxy_pass h t t p ://janus-ws;\n proxy_set_header Upgrade $h t t p _upgrade;\n proxy_set_header Connection "Upgrade";\n proxy_set_header Host $h t t p _host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Scheme $scheme;\n proxy_set_header X-Forwarded-Proto $scheme;\n proxy_set_header X-Forwarded-Port $server_port;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\nlocation /ca.crt {\n alias "/etc/ssl/certs/tinypilot-ca.crt";\n}\nlocation / {\n proxy_pass h t t p ://tinypilot;\n}\nlocation /api/massStorage/backingFiles {\n # Allow large file transfers without buffering them.\n client_max_body_size 0;\n proxy_request_buffering off;\n proxy_read_timeout 1d;\n proxy_pass h t t p ://tinypilot;\n}\nlocation ~* ^/.+\\.(html|js|js.map|css|woff|woff2)$ {\n root "/opt/tinypilot/app/static";\n\n # We cache assets to prevent the browser from making redundant\n # requests to the same files while loading the page. (Observed on\n # Chrome 91.) We don’t want caching otherwise, though, in order to\n # avoid stale files after users update their device. Note, that in\n # addition to `max-age`, the browser’s caching behaviour is relative\n # to the `Last-Modified` header, so we make that seem recent.\n add_header Last-Modified $date_gmt;\n add_header Cache-Control \'public, max-age=10s\';\n}\nlocation ~* ^/.+\\.(jpg|jpeg|png|ico)$ {\n root "/opt/tinypilot/app/static";\n}\n# Authenticate any protected routes that are outside of the core\n# TinyPilot web app.\nlocation = /auth {\n internal;\n proxy_pass h t t p ://tinypilot/api/auth;\n proxy_pass_request_body off;\n proxy_set_header Content-Length "";\n proxy_set_header X-Original-URI $request_uri;\n\n # Redefine header directives, as they are not inherited here:\n # See h t t p ://nginx.org/en/docs/h t t p /ngx_h t t p _proxy_module.html#proxy_set_header\n proxy_set_header X-Forwarded-Proto $scheme;\n}\n'}) TASK [ansible-role-nginx : Remove legacy vhosts.conf file.] ******************** ok: [localhost] TASK [ansible-role-nginx : Copy nginx configuration in place.] ***************** ok: [localhost] TASK [ansible-role-nginx : Ensure nginx service is running as configured.] ***** ok: [localhost] TASK [ansible-role-tinypilot-pro : create the `lib` directory if it does not exist] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : copy `lib` scripts] ************************* ok: [localhost] => (item=/opt/tinypilot-updater/roles/ansible-role-tinypilot-pro/files/lib/usb-gadget.sh) TASK [ansible-role-tinypilot-pro : set the path to config.txt on non-Ubuntu systems] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : set the path to config.txt for Ubuntu] ****** skipping: [localhost] TASK [ansible-role-tinypilot-pro : check for a boot config file] *************** ok: [localhost] TASK [ansible-role-tinypilot-pro : enable dwc2 driver in boot config] ********** ok: [localhost] TASK [ansible-role-tinypilot-pro : check for an /etc/modules file] ************* ok: [localhost] TASK [ansible-role-tinypilot-pro : enable dwc2 driver in modules] ************** ok: [localhost] TASK [ansible-role-tinypilot-pro : determine if a reboot is required] ********** ok: [localhost] TASK [ansible-role-tinypilot-pro : create TinyPilot privileged folder] ********* ok: [localhost] TASK [ansible-role-tinypilot-pro : copy usb-gadget initializer] **************** ok: [localhost] TASK [ansible-role-tinypilot-pro : copy usb-gadget de-initializer] ************* ok: [localhost] TASK [ansible-role-tinypilot-pro : install usb-gadget initializer as a service] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : enable systemd usb-gadget initializer service file] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : check the HID module file] ****************** ok: [localhost] TASK [ansible-role-tinypilot-pro : save whether the HID module should be patched] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : ensure HID module is not in use] ************ skipping: [localhost] TASK [ansible-role-tinypilot-pro : unload HID module] ************************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : patch HID module] *************************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : load HID module] **************************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : collect TinyPilot required apt packages on all systems] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : add pip to required apt packages] *********** ok: [localhost] TASK [ansible-role-tinypilot-pro : add pip3 to required apt packages] ********** skipping: [localhost] TASK [ansible-role-tinypilot-pro : install TinyPilot pre-requisite packages] *** skipping: [localhost] TASK [ansible-role-tinypilot-pro : create tinypilot group] ********************* ok: [localhost] TASK [ansible-role-tinypilot-pro : create tinypilot user] ********************** ok: [localhost] TASK [ansible-role-tinypilot-pro : copy admin scripts] ************************* ok: [localhost] => (item=change-hostname) ok: [localhost] => (item=check-default-credentials) ok: [localhost] => (item=collect-debug-logs) ok: [localhost] => (item=eject-mass-storage) ok: [localhost] => (item=mount-mass-storage) ok: [localhost] => (item=read-update-log) ok: [localhost] => (item=toggle-ssh-service) ok: [localhost] => (item=update) ok: [localhost] => (item=update-tls-cert-common-name) ok: [localhost] => (item=update-video-settings) TASK [ansible-role-tinypilot-pro : store passwordless sudo paths] ************** ok: [localhost] TASK [ansible-role-tinypilot-pro : enable tinypilot to execute a whitelist of commands as sudo] *** ok: [localhost] TASK [ansible-role-tinypilot-pro : install TinyPilot Debian package] *********** ok: [localhost] TASK [ansible-role-tinypilot-pro : create TinyPilot folder] ******************** skipping: [localhost] TASK [ansible-role-tinypilot-pro : [DEPRECATED] get TinyPilot repo] ************ skipping: [localhost] TASK [ansible-role-tinypilot-pro : find absolute path to python3] ************** ok: [localhost] TASK [ansible-role-tinypilot-pro : save absolute path to python3] ************** ok: [localhost] TASK [ansible-role-tinypilot-pro : create TinyPilot virtualenv] **************** ok: [localhost] TASK [ansible-role-tinypilot-pro : create TinyPilot app settings] ************** ok: [localhost] TASK [ansible-role-tinypilot-pro : fix TinyPilot folder permissions] *********** ok: [localhost] TASK [ansible-role-tinypilot-pro : install TinyPilot as a service] ************* ok: [localhost] TASK [ansible-role-tinypilot-pro : enable systemd TinyPilot service file] ****** ok: [localhost] TASK [ansible-role-tinypilot-pro : install tinypilot-updater as a service] ***** ok: [localhost] RUNNING HANDLER [ansible-role-ustreamer : restart uStreamer] ******************* changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=87 changed=5 unreachable=0 failed=0 skipped=33 rescued=0 ignored=0 + cp /var/tmp/tmp.N0VjDF3dfY.yml /home/tinypilot/settings.yml + chown tinypilot:tinypilot /home/tinypilot/settings.yml + clean_up + rm -rf /var/tmp/tmp.N0VjDF3dfY.yml + clean_up + rm -rf /var/tmp/tmp.Q7RUFul2tb.json /var/tmp/tmp.3DBOoHo6AG.tgz 2022-12-19 22:42:18.589 __main__ INFO Update completed successfully 2022-12-19 22:42:18.590 update.result_store INFO Writing result file to /home/tinypilot/logs/latest-update-result.json 2022-12-19 22:42:18.591 update.target_version INFO Clearing target version file /home/tinypilot/target-version
- David @david2022-12-20 13:27:24.472Z
Thanks for sharing that update log!
I think I know what has happened. When changing your port settings a few days back, the script altered the version number to force an update - but the script did not revert the change to the version number. Meaning that your device is already on version
2.5.0
, but the update process thinks it's on2.4.0
. That would also explain why the update process doesn't do anything.All we need to do here is restore the version number back to
2.5.0
.First, ssh into your TinyPilot, and then run this command:
echo "2.5.0" | sudo tee /opt/tinypilot/VERSION
Hope that helps!
- M
- David @david2022-12-21 12:10:18.045Z
Perfect! Thanks for the update. Please reach out again if you have any other questions.