This is a collection of a few of my smaller webOS scripts.
License: AGPL v3 or later
This is a collection of a few of my smaller webOS scripts.
License: AGPL v3 or later
#!/bin/sh | |
# backup-part.sh | |
# usage: backup-part.sh <partition id> | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
if test "${#}" -ne 1; then | |
echo >&2 "${0}: <partition id>" | |
exit 1 | |
fi | |
partid="${1}" | |
# check that partid is numeric with POSIX-compatible regex (implicit ^ at start) | |
if ! expr "${partid}" : '[1-9][0-9]*$' >/dev/null; then | |
echo >&2 'error: invalid partition id' | |
exit 2 | |
fi | |
# simpler | |
#partname="$(grep -e "^part${partid}:" -- '/proc/partinfo' | cut -d '"' -f 2)" | |
# single process, stricter | |
partname="$(sed -n -e "s/^part${partid}: [0-9a-f]\\{8,\\} [0-9a-f]\\{8,\\} \"\\(.*\\)\"\$/\\1/p" -- '/proc/partinfo')" | |
if test -z "${partname}"; then | |
echo >&2 "error: partition ${partid} not found" | |
exit 3 | |
fi | |
binpath="part${partid}-${partname}.bin" | |
devpath="/dev/mmcblk0p${partid}" | |
if ! test -e "${devpath}"; then | |
echo >&2 "error: device ${devpath} does not exist" | |
exit 4 | |
elif ! test -b "${devpath}"; then | |
echo >&2 "error: ${devpath} is not a block device" | |
exit 5 | |
elif ! test -r "${devpath}"; then | |
echo >&2 "error: ${devpath} not readable" | |
exit 6 | |
fi | |
if test -e "${binpath}"; then | |
echo >&2 "error: ${binpath} already exists" | |
exit 7 | |
fi | |
dd if="${devpath}" of="${binpath}" | |
# vim: noet:ts=8:sw=8 |
#!/bin/sh | |
# check-devmode-sig.sh | |
# usage: check-devmode-sig.sh | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
KEYFILE='/usr/palm/services/com.palm.service.devmode/pub.pem' | |
DEVSHFILE='/media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sh' | |
DEVSIGFILE='/media/cryptofs/apps/usr/palm/services/com.palmdts.devmode.service/start-devmode.sig' | |
if [ -e "${DEVSHFILE}" ]; then | |
if [ ! -f "${KEYFILE}" ]; then | |
echo "error: missing key file" | |
exit 1 | |
fi | |
if [ ! -f "${DEVSIGFILE}" ]; then | |
echo "error: missing signature file" | |
exit 1 | |
fi | |
if [ "$(openssl dgst -sha512 -verify "${KEYFILE}" -signature "${DEVSIGFILE}" "${DEVSHFILE}" 2>/dev/null)" != 'Verified OK' ]; then | |
echo "error: invalid signature" | |
exit 1 | |
fi | |
echo "valid signature" | |
exit 0 | |
else | |
echo "start-devmode.sh doesn't exist" | |
exit 0 | |
fi | |
# vim: noet:ts=8:sw=8 |
#!/bin/sh | |
# install-cryptofs.sh | |
# usage: install-cryptofs.sh <ipk> | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
# check for a single argument | |
[ "${#}" -ne 1 ] && { echo >&2 "usage: ${0} <ipk>"; exit 1; } | |
# make sure arg is a file | |
[ -f "${1}" ] || { echo >&2 "error: not a file"; exit 1; } | |
ipk="$(realpath "${1}")" | |
payload="$(printf '{"subscribe":true,"target":{"deviceId":"INTERNAL_STORAGE","driveId":"","share":true},"id":"whatever","ipkUrl":"%s"}' "${ipk}")" | |
# exit after 30 seconds. hit ctrl+c to exit earlier | |
luna-send -w 30000 -i 'luna://com.webos.appInstallService/installLocal' "${payload}" | |
# vim: noet:ts=8:sw=8 |
#!/bin/sh | |
# install-dev.sh | |
# usage: install-dev.sh <ipk> | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
# check for a single argument | |
[ "${#}" -ne 1 ] && { echo >&2 "usage: ${0} <ipk>"; exit 1; } | |
# make sure arg is a file | |
[ -f "${1}" ] || { echo >&2 "error: not a file"; exit 1; } | |
# get absolute path | |
ipk="$(realpath "${1}")" | |
payload="$(printf '{"subscribe":true,"id":"com.ares.defaultName","ipkUrl":"%s"}' "${ipk}")" | |
# exit after 30 seconds. hit ctrl+c to exit earlier | |
luna-send-pub -w 30000 -i 'luna://com.webos.appInstallService/dev/install' "${payload}" | |
# vim: noet:ts=8:sw=8 |
#!/bin/sh | |
# launch.sh | |
# usage: launch.sh <app id> | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
# check for a single argument | |
[ "${#}" -ne 1 -o -z "${1}" ] && { echo >&2 "usage: ${0} <app id>"; exit 1; } | |
id="${1}" | |
payload="$(printf '{"id":"%s"}' "${id}")" | |
# wait up to 10 seconds. hit ctrl+c to exit earlier | |
luna-send-pub -w 10000 -n 1 -f 'luna://com.webos.applicationManager/launch' "${payload}" |
#!/bin/sh | |
# remove-dev.sh | |
# usage: remove-dev.sh <appid> | |
# by throwaway96 | |
# https://gist.github.com/throwaway96/1558bc833029224005b794009a2aa8b1 | |
# Copyright 2024. Distributable under the terms of the AGPL v3 or later. | |
# SPDX-License-Identifier: AGPL-3.0-or-later | |
# check for a single argument | |
[ "${#}" -ne 1 -o -z "${1}" ] && { echo >&2 "usage: ${0} <appid>"; exit 1; } | |
payload="$(printf '{"subscribe":true,"id":"%s"}' "${1}")" | |
# exit after 10 seconds. hit ctrl+c to exit earlier | |
luna-send-pub -w 10000 -i 'luna://com.webos.appInstallService/dev/remove' "${payload}" | |
# vim: noet:ts=8:sw=8 |