fix: install apps under hidden SD directory

This commit is contained in:
2026-07-25 23:09:42 -04:00
parent 4c939eb196
commit 4193c25120
8 changed files with 13 additions and 13 deletions
+2 -2
View File
@@ -4,7 +4,7 @@ Installs new Lua apps from one or more public Xteink repositories.
## Bootstrap
Copy this directory to `/plugins/AppStore` on the SD card. On first launch, AppStore creates `repositories.txt` from `repositories.default.txt`.
Copy this directory to `/.apps/AppStore` on the SD card. On first launch, AppStore creates `repositories.txt` from `repositories.default.txt`.
Repository entries use this format:
@@ -13,6 +13,6 @@ XTEINK-REPOSITORIES|1
Name|https://host/path/catalog.txt
```
AppStore downloads each package into `/plugins/.install-<AppId>`, verifies declared sizes and SHA-256 hashes, requires `main.lua`, then renames the completed directory into place. Existing apps are left unchanged; updates, including self-update, are not supported yet.
AppStore downloads each package into `/.apps/.install-<AppId>`, verifies declared sizes and SHA-256 hashes, requires `main.lua`, then renames the completed directory into place. Existing apps are left unchanged; updates, including self-update, are not supported yet.
HTTPS is encrypted without peer-certificate authentication. An active network attacker can replace both metadata and payload hashes.
+3 -3
View File
@@ -1,6 +1,6 @@
-- DESCRIPTION: Install apps from public Xteink repositories
local ROOT = "/plugins/AppStore"
local ROOT = "/.apps/AppStore"
local REPOSITORIES_PATH = ROOT .. "/repositories.txt"
local DEFAULT_REPOSITORIES_PATH = ROOT .. "/repositories.default.txt"
local CATALOG_PATH = ROOT .. "/.catalog.txt"
@@ -182,10 +182,10 @@ local function failInstall(stage, installError)
end
local function install(app)
local target = "/plugins/" .. app.id
local target = "/.apps/" .. app.id
if fs.exists(target) then return nil, "App is already installed" end
local stage = "/plugins/.install-" .. app.id
local stage = "/.apps/.install-" .. app.id
local ok, err = clearTree(stage)
if not ok then return nil, err end
ok, err = fs.mkdir(stage)
+1 -1
View File
@@ -1,3 +1,3 @@
XTEINK-MANIFEST|1
main.lua|12522|cd61c00facba80e7c0a350e69d2e8701b1e4e4baaac5a6dc26d949225f00747f
main.lua|12516|4e21087da632730d82049e405e5d86209cfb707c3c3b5fb574dc2f602d904961
repositories.default.txt|108|70e442650788dd8d8632142ef3ff43a4aaee9855da89283facc72a8942e0a7df
+1 -1
View File
@@ -1,6 +1,6 @@
-- DESCRIPTION: Home Assistant status cards
local CONFIG_PATH = "/plugins/HomeAssistant/config.txt"
local CONFIG_PATH = "/.apps/HomeAssistant/config.txt"
local config = { entities = {} }
local cards = {}
local screen = nil
+1 -1
View File
@@ -1,3 +1,3 @@
XTEINK-MANIFEST|1
config.txt|280|db80ede9c74ccd83b76f1bb64ca7193cc6477de905bad6d153730ec66768bfa7
main.lua|6144|d7f0b42895c3fb5fef02c8932019276f97392e79a8b9db538165aaa2699de4c3
main.lua|6142|a4d9b06919c73ca42b1c0325aa128740c2956214a22b857ae177a8e528d98786
+1 -1
View File
@@ -1,6 +1,6 @@
-- DESCRIPTION: Guess the five-letter word in six tries
local WORDS_PATH = "/plugins/Wordle/words.txt"
local WORDS_PATH = "/.apps/Wordle/words.txt"
local WORD_LENGTH = 5
local MAX_GUESSES = 6
+1 -1
View File
@@ -1,3 +1,3 @@
XTEINK-MANIFEST|1
main.lua|8027|2337650ccbbce8b7f2a75c8025e3fe70ee794c81e9af956d9be94f2126e7cc90
main.lua|8025|cbdf0cc95761170f0948b76d40d404ce9ae8055c50ae656c7066531228e49a84
words.txt|2814|057281f29400005492e9c891aeda0fbe9a3d3e6060304b71e7083ac02d9b3692
+3 -3
View File
@@ -1,4 +1,4 @@
XTEINK-CATALOG|1
AppStore|Install apps from public Xteink repositories|apps/AppStore/manifest.txt|192|71d3be6bdaec97b268bb9b7bf4fe553c23a74587251676fe88d90024fa8c703c
HomeAssistant|Home Assistant status cards|apps/HomeAssistant/manifest.txt|177|27aa1f0edc78a5aeded413caf0508788fa597ee8f76a5b8515ec0c40c955d5be
Wordle|Guess the five-letter word in six tries|apps/Wordle/manifest.txt|177|9977b49ffdbd67a254701b4fa38407fc9128a017673e3ce73560dea08a6a125e
AppStore|Install apps from public Xteink repositories|apps/AppStore/manifest.txt|192|50e6f06ac3476b9df9caf78fdfe226f295532168c441df0d2be9289d8b7d7c1c
HomeAssistant|Home Assistant status cards|apps/HomeAssistant/manifest.txt|177|b38ca49804444fd383a505ce9c51680ad9b7443950d682ca1b9ef3047bff98a5
Wordle|Guess the five-letter word in six tries|apps/Wordle/manifest.txt|177|199fafdf0d0f6e77916befc011f6e8466c254867800e1d4a9e67e95a06d0366b