Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c0272f4f70 | ||
|
|
a6c94e239b | ||
|
|
8e6e4a8fe9 | ||
|
|
4e526e8841 | ||
|
|
01dc7a0504 | ||
|
|
182d0a3fdc | ||
|
|
6443a93955 | ||
|
|
7449c01b14 | ||
|
|
5feb3cdd23 |
No files matched your search
@@ -66,10 +66,15 @@ jobs:
|
|||||||
|
|
||||||
- name: Zkouška
|
- name: Zkouška
|
||||||
run: |
|
run: |
|
||||||
XDG_DATA_HOME=/tmp/zkouska DICE_PORT=8321 DICE_HOST=127.0.0.1 \
|
# Vlastní adresář pro každý běh. Runner si /tmp mezi běhy drží
|
||||||
./dist/kostky > /tmp/server.log 2>&1 &
|
# a binárka umí sáhnout po databázi ve starém umístění, takže
|
||||||
|
# zbytek po dřívější zkoušce by tuhle poslal vedle.
|
||||||
|
XDG=$(mktemp -d)
|
||||||
|
|
||||||
|
XDG_DATA_HOME="$XDG" DICE_PORT=8321 DICE_HOST=127.0.0.1 \
|
||||||
|
./dist/dice-counter > /tmp/server.log 2>&1 &
|
||||||
server=$!
|
server=$!
|
||||||
trap 'kill $server 2>/dev/null || true' EXIT
|
trap 'kill $server 2>/dev/null || true; rm -rf "$XDG"' EXIT
|
||||||
|
|
||||||
for _ in $(seq 30); do
|
for _ in $(seq 30); do
|
||||||
curl -sf -o /dev/null http://127.0.0.1:8321/ && break
|
curl -sf -o /dev/null http://127.0.0.1:8321/ && break
|
||||||
@@ -79,15 +84,15 @@ jobs:
|
|||||||
curl -sf -o /dev/null http://127.0.0.1:8321/
|
curl -sf -o /dev/null http://127.0.0.1:8321/
|
||||||
curl -sf -o /dev/null http://127.0.0.1:8321/static/style.css
|
curl -sf -o /dev/null http://127.0.0.1:8321/static/style.css
|
||||||
curl -sf -o /dev/null http://127.0.0.1:8321/board
|
curl -sf -o /dev/null http://127.0.0.1:8321/board
|
||||||
test -f /tmp/zkouska/kostky/dice.db
|
test -f "$XDG/dice-counter/dice.db"
|
||||||
./dist/kostky --version
|
./dist/dice-counter --version
|
||||||
cat /tmp/server.log
|
cat /tmp/server.log
|
||||||
|
|
||||||
- name: Na release
|
- name: Na release
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
env:
|
env:
|
||||||
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
ASSET: kostky-linux-x86_64
|
ASSET: dice-counter-linux-x86_64
|
||||||
run: |
|
run: |
|
||||||
api="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
|
api="${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}"
|
||||||
auth="Authorization: token ${TOKEN}"
|
auth="Authorization: token ${TOKEN}"
|
||||||
@@ -104,8 +109,8 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Součet se počítá nad jménem, pod kterým se soubor stahuje, aby
|
# Součet se počítá nad jménem, pod kterým se soubor stahuje, aby
|
||||||
# šel ověřit rovnou: sha256sum -c kostky-linux-x86_64.sha256
|
# šel ověřit rovnou: sha256sum -c dice-counter-linux-x86_64.sha256
|
||||||
cp dist/kostky "$ASSET"
|
cp dist/dice-counter "$ASSET"
|
||||||
sha256sum "$ASSET" | tee "$ASSET.sha256"
|
sha256sum "$ASSET" | tee "$ASSET.sha256"
|
||||||
|
|
||||||
for file in "$ASSET" "$ASSET.sha256"; do
|
for file in "$ASSET" "$ASSET.sha256"; do
|
||||||
|
|||||||
@@ -31,17 +31,17 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
asset: kostky-windows-x86_64.exe
|
asset: dice-counter-windows-x86_64.exe
|
||||||
built: dist/kostky.exe
|
built: dist/dice-counter.exe
|
||||||
- os: macos-15-intel # Intel; macos-13 GitHub zrušil
|
- os: macos-15-intel # Intel; macos-13 GitHub zrušil
|
||||||
asset: kostky-macos-x86_64
|
asset: dice-counter-macos-x86_64
|
||||||
built: dist/kostky
|
built: dist/dice-counter
|
||||||
- os: macos-latest # Apple Silicon
|
- os: macos-latest # Apple Silicon
|
||||||
asset: kostky-macos-arm64
|
asset: dice-counter-macos-arm64
|
||||||
built: dist/kostky
|
built: dist/dice-counter
|
||||||
- os: ubuntu-24.04-arm # pro Raspberry Pi a spol.
|
- os: ubuntu-24.04-arm # pro Raspberry Pi a spol.
|
||||||
asset: kostky-linux-arm64
|
asset: dice-counter-linux-arm64
|
||||||
built: dist/kostky
|
built: dist/dice-counter
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
defaults:
|
defaults:
|
||||||
@@ -124,7 +124,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Součet se počítá nad jménem, pod kterým se soubor stahuje, aby
|
# Součet se počítá nad jménem, pod kterým se soubor stahuje, aby
|
||||||
# šel ověřit rovnou: shasum -a 256 -c kostky-macos-arm64.sha256
|
# šel ověřit rovnou: shasum -a 256 -c dice-counter-macos-arm64.sha256
|
||||||
cp "${{ matrix.built }}" "$ASSET"
|
cp "${{ matrix.built }}" "$ASSET"
|
||||||
soucet "$ASSET" | tee "$ASSET.sha256"
|
soucet "$ASSET" | tee "$ASSET.sha256"
|
||||||
|
|
||||||
|
|||||||
@@ -13,19 +13,19 @@ Stáhni binárku pro svůj systém z
|
|||||||
|
|
||||||
| Systém | Soubor |
|
| Systém | Soubor |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Linux (x86-64) | `kostky-linux-x86_64` |
|
| Linux (x86-64) | `dice-counter-linux-x86_64` |
|
||||||
| Linux (ARM64) | `kostky-linux-arm64` |
|
| Linux (ARM64) | `dice-counter-linux-arm64` |
|
||||||
| macOS (Apple Silicon) | `kostky-macos-arm64` |
|
| macOS (Apple Silicon) | `dice-counter-macos-arm64` |
|
||||||
| macOS (Intel) | `kostky-macos-x86_64` |
|
| macOS (Intel) | `dice-counter-macos-x86_64` |
|
||||||
| Windows (x86-64) | `kostky-windows-x86_64.exe` |
|
| Windows (x86-64) | `dice-counter-windows-x86_64.exe` |
|
||||||
|
|
||||||
Nic se neinstaluje — Python, Flask i šablony jsou uvnitř.
|
Nic se neinstaluje — Python, Flask i šablony jsou uvnitř.
|
||||||
|
|
||||||
Na Linuxu a macOS:
|
Na Linuxu a macOS:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
chmod +x kostky-*
|
chmod +x dice-counter-*
|
||||||
./kostky-linux-x86_64
|
./dice-counter-linux-x86_64
|
||||||
```
|
```
|
||||||
|
|
||||||
Na Windows stačí na `.exe` poklepat.
|
Na Windows stačí na `.exe` poklepat.
|
||||||
@@ -38,7 +38,7 @@ Binárky nejsou podepsané — podpisové certifikáty stojí tisíce ročně a
|
|||||||
počitadlo kostek by to byl nesmysl. Systémy si toho všimnou:
|
počitadlo kostek by to byl nesmysl. Systémy si toho všimnou:
|
||||||
|
|
||||||
- **macOS** stažený soubor označí za karanténní a odmítne ho spustit. Buď
|
- **macOS** stažený soubor označí za karanténní a odmítne ho spustit. Buď
|
||||||
značku sundej (`xattr -dr com.apple.quarantine kostky-macos-arm64`), nebo
|
značku sundej (`xattr -dr com.apple.quarantine dice-counter-macos-arm64`), nebo
|
||||||
soubor stáhni rovnou z terminálu přes `curl -LO` — tudy se karanténa
|
soubor stáhni rovnou z terminálu přes `curl -LO` — tudy se karanténa
|
||||||
nenastavuje.
|
nenastavuje.
|
||||||
- **Windows** ukáže modré okno SmartScreenu. *Další informace* →
|
- **Windows** ukáže modré okno SmartScreenu. *Další informace* →
|
||||||
@@ -60,7 +60,7 @@ Závislosti si skript nese v hlavičce (PEP 723) a `uv` je obstará sám.
|
|||||||
Server vypíše všechny adresy, na kterých je dostupný:
|
Server vypíše všechny adresy, na kterých je dostupný:
|
||||||
|
|
||||||
```
|
```
|
||||||
Kostky v1.1.0
|
dice-counter v1.2.2
|
||||||
|
|
||||||
Počitadlo je dostupné na:
|
Počitadlo je dostupné na:
|
||||||
→ http://10.186.234.182:8000 místní síť
|
→ http://10.186.234.182:8000 místní síť
|
||||||
@@ -68,7 +68,7 @@ Počitadlo je dostupné na:
|
|||||||
http://172.17.0.1:8000 virtuální síť
|
http://172.17.0.1:8000 virtuální síť
|
||||||
```
|
```
|
||||||
|
|
||||||
Kterou verzi máš, řekne i `kostky --version`; visí taky v patičce každé
|
Kterou verzi máš, řekne i `dice-counter --version`; visí taky v patičce každé
|
||||||
stránky. Když něco nefunguje, je to první věc, na kterou se zeptám.
|
stránky. Když něco nefunguje, je to první věc, na kterou se zeptám.
|
||||||
|
|
||||||
Na notebooku otevři `/board`, naskenuj QR kód telefonem a hraj. Tabule
|
Na notebooku otevři `/board`, naskenuj QR kód telefonem a hraj. Tabule
|
||||||
@@ -88,9 +88,9 @@ server vypíše při startu.
|
|||||||
|
|
||||||
| Spuštěno | Databáze |
|
| Spuštěno | Databáze |
|
||||||
|---|---|
|
|---|---|
|
||||||
| binárkou na Linuxu | `~/.local/share/kostky/dice.db` |
|
| binárkou na Linuxu | `~/.local/share/dice-counter/dice.db` |
|
||||||
| binárkou na macOS | `~/Library/Application Support/kostky/dice.db` |
|
| binárkou na macOS | `~/Library/Application Support/dice-counter/dice.db` |
|
||||||
| binárkou na Windows | `%LOCALAPPDATA%\kostky\dice.db` |
|
| binárkou na Windows | `%LOCALAPPDATA%\dice-counter\dice.db` |
|
||||||
| ze zdrojáků | `dice.db` v pracovním adresáři |
|
| ze zdrojáků | `dice.db` v pracovním adresáři |
|
||||||
|
|
||||||
Binárka se při každém spuštění rozbaluje do dočasného adresáře a pouští se
|
Binárka se při každém spuštění rozbaluje do dočasného adresáře a pouští se
|
||||||
@@ -129,7 +129,7 @@ nastaví ho, stáhne poslední vydanou binárku, ověří kontrolní součet a z
|
|||||||
službu:
|
službu:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash -c "$(curl -fsSL https://gitea.spacilovi.eu/david-spacil/dice-counter/raw/branch/main/deploy/pve-kostky.sh)"
|
bash -c "$(curl -fsSL https://gitea.spacilovi.eu/david-spacil/dice-counter/raw/branch/main/deploy/pve-dice-counter.sh)"
|
||||||
```
|
```
|
||||||
|
|
||||||
Na konci vypíše adresu, na které počitadlo poslouchá. Výchozí nastavení je
|
Na konci vypíše adresu, na které počitadlo poslouchá. Výchozí nastavení je
|
||||||
@@ -143,7 +143,7 @@ MEMORY=1024 STORAGE=local-zfs PORT=8080 bash -c "$(curl -fsSL ...)"
|
|||||||
| Proměnná | Výchozí |
|
| Proměnná | Výchozí |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `CTID` | první volné číslo |
|
| `CTID` | první volné číslo |
|
||||||
| `CT_HOSTNAME` | `kostky` |
|
| `CT_HOSTNAME` | `dice-counter` |
|
||||||
| `CORES`, `MEMORY`, `DISK` | `1`, `512`, `4` |
|
| `CORES`, `MEMORY`, `DISK` | `1`, `512`, `4` |
|
||||||
| `STORAGE` | první aktivní úložiště pro kontejnery |
|
| `STORAGE` | první aktivní úložiště pro kontejnery |
|
||||||
| `TEMPLATE_STORAGE`, `BRIDGE` | `local`, `vmbr0` |
|
| `TEMPLATE_STORAGE`, `BRIDGE` | `local`, `vmbr0` |
|
||||||
@@ -185,7 +185,7 @@ přes rouru z curlu na disku hostitele žádný druhý soubor není. O Proxmoxu
|
|||||||
neví, takže se dá použít i v kontejneru, který sis založil sám:
|
neví, takže se dá použít i v kontejneru, který sis založil sám:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash pve-kostky.sh instalator > install.sh
|
bash pve-dice-counter.sh instalator > install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Je idempotentní; druhé spuštění jen vymění binárku za nejnovější.
|
Je idempotentní; druhé spuštění jen vymění binárku za nejnovější.
|
||||||
@@ -223,7 +223,7 @@ Kdo bridge potřebuje, musí nastavit `DICE_HOST` na adresu hostitele v LAN.
|
|||||||
| | LXC | Docker |
|
| | LXC | Docker |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Odkud | vydaná binárka z releasu | image z registru |
|
| Odkud | vydaná binárka z releasu | image z registru |
|
||||||
| Databáze | `/var/lib/kostky/dice.db` | svazek `kostky-data` |
|
| Databáze | `/var/lib/dice-counter/dice.db` | svazek `dice-counter-data` |
|
||||||
| Aktualizace | `update` uvnitř kontejneru | `docker compose pull` |
|
| Aktualizace | `update` uvnitř kontejneru | `docker compose pull` |
|
||||||
| Adresa a QR | funguje samo | potřeba síť hostitele |
|
| Adresa a QR | funguje samo | potřeba síť hostitele |
|
||||||
|
|
||||||
@@ -262,7 +262,7 @@ při remíze na prvním místě se hraje dál.
|
|||||||
| `dice.py` | totéž v terminálu, bez ukládání |
|
| `dice.py` | totéž v terminálu, bez ukládání |
|
||||||
| `console.py` | aby čeština prošla i windowsovou konzolí |
|
| `console.py` | aby čeština prošla i windowsovou konzolí |
|
||||||
| `version.py` | která verze to je — z gitu, nebo z binárky |
|
| `version.py` | která verze to je — z gitu, nebo z binárky |
|
||||||
| `build.sh`, `kostky.spec` | stavba binárky |
|
| `build.sh`, `dice-counter.spec` | stavba binárky |
|
||||||
| `.gitea/workflows/` | testy, linuxová binárka a zkouška image doma |
|
| `.gitea/workflows/` | testy, linuxová binárka a zkouška image doma |
|
||||||
| `.github/workflows/` | binárky pro Windows a macOS |
|
| `.github/workflows/` | binárky pro Windows a macOS |
|
||||||
| `deploy/` | nasazení na server: Proxmox LXC a Docker |
|
| `deploy/` | nasazení na server: Proxmox LXC a Docker |
|
||||||
@@ -321,7 +321,7 @@ srovnat.
|
|||||||
```
|
```
|
||||||
|
|
||||||
Verzi si `build.sh` vezme z `git describe`, nebo se dá vnutit přes
|
Verzi si `build.sh` vezme z `git describe`, nebo se dá vnutit přes
|
||||||
`VERSION=v1.2.3 ./build.sh`. Zapíše ji do `verze.txt`, `kostky.spec` ji
|
`VERSION=v1.2.3 ./build.sh`. Zapíše ji do `verze.txt`, `dice-counter.spec` ji
|
||||||
přibalí a binárka ji pak umí ohlásit i na cizím počítači, kde žádný git není.
|
přibalí a binárka ji pak umí ohlásit i na cizím počítači, kde žádný git není.
|
||||||
Verzi Pythonu, proti kterému se staví, přebíjí `PYTHON_VERSION`.
|
Verzi Pythonu, proti kterému se staví, přebíjí `PYTHON_VERSION`.
|
||||||
|
|
||||||
@@ -366,7 +366,7 @@ ji kamkoli pověsí. Vedle každé visí i `.sha256`, takže se stažený soubor
|
|||||||
ověřit:
|
ověřit:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sha256sum -c kostky-linux-x86_64.sha256 # na macOS: shasum -a 256 -c
|
sha256sum -c dice-counter-linux-x86_64.sha256 # na macOS: shasum -a 256 -c
|
||||||
```
|
```
|
||||||
|
|
||||||
Nad pull requesty se Linux staví taky, jen se nikam nevěší. Totéž platí pro
|
Nad pull requesty se Linux staví taky, jen se nikam nevěší. Totéž platí pro
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ fi
|
|||||||
uv pip install --quiet --python "$python" -r requirements-build.txt
|
uv pip install --quiet --python "$python" -r requirements-build.txt
|
||||||
|
|
||||||
"$pyinstaller" --clean --noconfirm \
|
"$pyinstaller" --clean --noconfirm \
|
||||||
--distpath dist --workpath "$BUILD/work" kostky.spec
|
--distpath dist --workpath "$BUILD/work" dice-counter.spec
|
||||||
|
|
||||||
echo
|
echo
|
||||||
ls -lh dist/
|
ls -lh dist/
|
||||||
@@ -13,6 +13,15 @@ FROM python:3.11-slim
|
|||||||
# Verze se jinak nemá kde vzít — v image není git ani zabalená binárka.
|
# Verze se jinak nemá kde vzít — v image není git ani zabalená binárka.
|
||||||
ARG VERSION=neznámá
|
ARG VERSION=neznámá
|
||||||
|
|
||||||
|
# Podle image.source si Gitea připne balíček k repozitáři. Bez toho labelu
|
||||||
|
# image sice existuje, ale visí jen pod uživatelem a záložka Packages
|
||||||
|
# u repozitáře zůstane prázdná.
|
||||||
|
LABEL org.opencontainers.image.source="https://gitea.spacilovi.eu/david-spacil/dice-counter" \
|
||||||
|
org.opencontainers.image.url="https://gitea.spacilovi.eu/david-spacil/dice-counter" \
|
||||||
|
org.opencontainers.image.title="dice-counter" \
|
||||||
|
org.opencontainers.image.description="Počitadlo kostek: telefon zapisuje skóre, notebook ukazuje zápisník" \
|
||||||
|
org.opencontainers.image.version="$VERSION"
|
||||||
|
|
||||||
RUN useradd --system --uid 1000 --home-dir /app --shell /usr/sbin/nologin dice-counter
|
RUN useradd --system --uid 1000 --home-dir /app --shell /usr/sbin/nologin dice-counter
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
#
|
#
|
||||||
# Pouští se v terminálu uzlu Proxmoxu jako root, jedním příkazem:
|
# Pouští se v terminálu uzlu Proxmoxu jako root, jedním příkazem:
|
||||||
#
|
#
|
||||||
# bash -c "$(curl -fsSL https://gitea.spacilovi.eu/david-spacil/dice-counter/raw/branch/main/deploy/pve-kostky.sh)"
|
# bash -c "$(curl -fsSL https://gitea.spacilovi.eu/david-spacil/dice-counter/raw/branch/main/deploy/pve-dice-counter.sh)"
|
||||||
#
|
#
|
||||||
# Aktualizace stávajícího kontejneru na novější vydání:
|
# Aktualizace stávajícího kontejneru na novější vydání:
|
||||||
#
|
#
|
||||||
# CTID=123 MODE=update bash -c "$(curl -fsSL .../pve-kostky.sh)"
|
# CTID=123 MODE=update bash -c "$(curl -fsSL .../pve-dice-counter.sh)"
|
||||||
#
|
#
|
||||||
# Ze staženého souboru jde i obojí postaru: `bash pve-kostky.sh` a
|
# Ze staženého souboru jde i obojí postaru: `bash pve-dice-counter.sh` a
|
||||||
# `bash pve-kostky.sh update 123`.
|
# `bash pve-dice-counter.sh update 123`.
|
||||||
#
|
#
|
||||||
# Podoba je odkoukaná od community-scripts.org, ale nic z jejich frameworku
|
# Podoba je odkoukaná od community-scripts.org, ale nic z jejich frameworku
|
||||||
# se tu nestahuje — jejich build.func si instalační skript hledá natvrdo ve
|
# se tu nestahuje — jejich build.func si instalační skript hledá natvrdo ve
|
||||||
@@ -20,13 +20,13 @@
|
|||||||
# nezabezpečuje; do internetu ji nepouštěj.
|
# nezabezpečuje; do internetu ji nepouštěj.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
APP="Kostky"
|
APP="dice-counter"
|
||||||
GITEA="${GITEA:-https://gitea.spacilovi.eu}"
|
GITEA="${GITEA:-https://gitea.spacilovi.eu}"
|
||||||
REPO="${REPO:-david-spacil/dice-counter}"
|
REPO="${REPO:-david-spacil/dice-counter}"
|
||||||
|
|
||||||
# Výchozí hodnoty. Všechny se dají přebít proměnnou prostředí, třeba:
|
# Výchozí hodnoty. Všechny se dají přebít proměnnou prostředí, třeba:
|
||||||
# MEMORY=1024 STORAGE=local-zfs bash -c "$(curl -fsSL ...)"
|
# MEMORY=1024 STORAGE=local-zfs bash -c "$(curl -fsSL ...)"
|
||||||
CT_HOSTNAME="${CT_HOSTNAME:-kostky}"
|
CT_HOSTNAME="${CT_HOSTNAME:-dice-counter}"
|
||||||
CORES="${CORES:-1}"
|
CORES="${CORES:-1}"
|
||||||
MEMORY="${MEMORY:-512}"
|
MEMORY="${MEMORY:-512}"
|
||||||
DISK="${DISK:-4}"
|
DISK="${DISK:-4}"
|
||||||
@@ -64,7 +64,7 @@ header() {
|
|||||||
# 'INSTALL' jsou podstatné: nic z toho se tady nesmí rozvinout, všechny
|
# 'INSTALL' jsou podstatné: nic z toho se tady nesmí rozvinout, všechny
|
||||||
# proměnné patří až tomu, co poběží v kontejneru.
|
# proměnné patří až tomu, co poběží v kontejneru.
|
||||||
#
|
#
|
||||||
# Vypsat se dá i samostatně: `bash pve-kostky.sh instalator > install.sh`,
|
# Vypsat se dá i samostatně: `bash pve-dice-counter.sh instalator > install.sh`,
|
||||||
# což se hodí, když chceš appku dostat do kontejneru, který sis založil sám.
|
# což se hodí, když chceš appku dostat do kontejneru, který sis založil sám.
|
||||||
installer() {
|
installer() {
|
||||||
cat <<'INSTALL'
|
cat <<'INSTALL'
|
||||||
@@ -79,17 +79,18 @@ REPO="${REPO:-david-spacil/dice-counter}"
|
|||||||
PORT="${PORT:-8000}"
|
PORT="${PORT:-8000}"
|
||||||
VERSION="${VERSION:-}"
|
VERSION="${VERSION:-}"
|
||||||
|
|
||||||
USER_NAME=kostky
|
USER_NAME=dice-counter
|
||||||
HOME_DIR=/opt/kostky
|
HOME_DIR=/opt/dice-counter
|
||||||
DATA_DIR=/var/lib/kostky
|
DATA_DIR=/var/lib/dice-counter
|
||||||
|
SERVICE=dice-counter
|
||||||
|
|
||||||
msg() { echo -e "\e[1;34m →\e[0m $*"; }
|
msg() { echo -e "\e[1;34m →\e[0m $*"; }
|
||||||
ok() { echo -e "\e[1;32m ✓\e[0m $*"; }
|
ok() { echo -e "\e[1;32m ✓\e[0m $*"; }
|
||||||
die() { echo -e "\e[1;31m ✗\e[0m $*" >&2; exit 1; }
|
die() { echo -e "\e[1;31m ✗\e[0m $*" >&2; exit 1; }
|
||||||
|
|
||||||
case "$(dpkg --print-architecture)" in
|
case "$(dpkg --print-architecture)" in
|
||||||
amd64) ASSET=kostky-linux-x86_64 ;;
|
amd64) ASSET=dice-counter-linux-x86_64 ;;
|
||||||
arm64) ASSET=kostky-linux-arm64 ;;
|
arm64) ASSET=dice-counter-linux-arm64 ;;
|
||||||
*) die "Pro architekturu $(dpkg --print-architecture) binárka není." ;;
|
*) die "Pro architekturu $(dpkg --print-architecture) binárka není." ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -129,16 +130,16 @@ id -u "$USER_NAME" >/dev/null 2>&1 \
|
|||||||
install -d -o root -g root -m 755 "$HOME_DIR"
|
install -d -o root -g root -m 755 "$HOME_DIR"
|
||||||
|
|
||||||
# Zastavit se dá jen to, co běží — při první instalaci služba ještě není.
|
# Zastavit se dá jen to, co běží — při první instalaci služba ještě není.
|
||||||
if systemctl is-active --quiet kostky; then
|
if systemctl is-active --quiet "$SERVICE"; then
|
||||||
systemctl stop kostky
|
systemctl stop "$SERVICE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
install -o root -g root -m 755 "$TMP/$ASSET" "$HOME_DIR/kostky"
|
install -o root -g root -m 755 "$TMP/$ASSET" "$HOME_DIR/dice-counter"
|
||||||
echo "$VERSION" > "$HOME_DIR/verze"
|
echo "$VERSION" > "$HOME_DIR/verze"
|
||||||
ok "Binárka je na místě"
|
ok "Binárka je na místě"
|
||||||
|
|
||||||
msg "Zapisuji službu"
|
msg "Zapisuji službu"
|
||||||
cat > /etc/systemd/system/kostky.service <<EOF
|
cat > "/etc/systemd/system/$SERVICE.service" <<EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Počitadlo kostek
|
Description=Počitadlo kostek
|
||||||
Documentation=$GITEA/$REPO
|
Documentation=$GITEA/$REPO
|
||||||
@@ -150,13 +151,13 @@ Type=simple
|
|||||||
User=$USER_NAME
|
User=$USER_NAME
|
||||||
Environment=DICE_DB=$DATA_DIR/dice.db
|
Environment=DICE_DB=$DATA_DIR/dice.db
|
||||||
Environment=DICE_PORT=$PORT
|
Environment=DICE_PORT=$PORT
|
||||||
ExecStart=$HOME_DIR/kostky
|
ExecStart=$HOME_DIR/dice-counter
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
|
|
||||||
# Databáze je jediné, co appka potřebuje mít zapisovatelné. StateDirectory ji
|
# Databáze je jediné, co appka potřebuje mít zapisovatelné. StateDirectory ji
|
||||||
# založí a předá správnému uživateli, takže se tu nemusí nic chownovat.
|
# založí a předá správnému uživateli, takže se tu nemusí nic chownovat.
|
||||||
StateDirectory=kostky
|
StateDirectory=dice-counter
|
||||||
ReadWritePaths=$DATA_DIR
|
ReadWritePaths=$DATA_DIR
|
||||||
|
|
||||||
NoNewPrivileges=true
|
NoNewPrivileges=true
|
||||||
@@ -171,7 +172,7 @@ WantedBy=multi-user.target
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable --quiet --now kostky
|
systemctl enable --quiet --now "$SERVICE"
|
||||||
ok "Služba běží"
|
ok "Služba běží"
|
||||||
|
|
||||||
# --- konzole v rozhraní Proxmoxu --------------------------------------------
|
# --- konzole v rozhraní Proxmoxu --------------------------------------------
|
||||||
@@ -197,7 +198,12 @@ fi
|
|||||||
|
|
||||||
# Instalátor si necháme, ať je z čeho aktualizovat. Když se skript pouští
|
# Instalátor si necháme, ať je z čeho aktualizovat. Když se skript pouští
|
||||||
# rourou, soubor neexistuje a zůstane ten z minula.
|
# rourou, soubor neexistuje a zůstane ten z minula.
|
||||||
if [ -f "$0" ]; then
|
#
|
||||||
|
# `-ef` je tu nutnost, ne opatrnost: příkaz `update` si nový instalátor uloží
|
||||||
|
# rovnou sem a odsud ho pustí, takže `$0` a cíl jsou tentýž soubor. `install`
|
||||||
|
# na to řekne "are the same file", skončí chybou a se `set -e` by celý update
|
||||||
|
# spadl dřív, než by stihl cokoli udělat.
|
||||||
|
if [ -f "$0" ] && ! [ "$0" -ef "$HOME_DIR/install.sh" ]; then
|
||||||
install -m 755 "$0" "$HOME_DIR/install.sh"
|
install -m 755 "$0" "$HOME_DIR/install.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -209,7 +215,7 @@ set -euo pipefail
|
|||||||
# Nejdřív zkusíme obnovit i samotný instalátor, kdyby se mezitím zlepšil.
|
# Nejdřív zkusíme obnovit i samotný instalátor, kdyby se mezitím zlepšil.
|
||||||
# Bez sítě nebo při změněné adrese se použije ten uložený.
|
# Bez sítě nebo při změněné adrese se použije ten uložený.
|
||||||
NOVY=\$(mktemp)
|
NOVY=\$(mktemp)
|
||||||
if curl -fsSL "$GITEA/$REPO/raw/branch/main/deploy/pve-kostky.sh" -o "\$NOVY" 2>/dev/null \\
|
if curl -fsSL "$GITEA/$REPO/raw/branch/main/deploy/pve-dice-counter.sh" -o "\$NOVY" 2>/dev/null \\
|
||||||
&& bash "\$NOVY" instalator > "\$NOVY.in" 2>/dev/null \\
|
&& bash "\$NOVY" instalator > "\$NOVY.in" 2>/dev/null \\
|
||||||
&& bash -n "\$NOVY.in" 2>/dev/null; then
|
&& bash -n "\$NOVY.in" 2>/dev/null; then
|
||||||
install -m 755 "\$NOVY.in" "$HOME_DIR/install.sh"
|
install -m 755 "\$NOVY.in" "$HOME_DIR/install.sh"
|
||||||
@@ -227,7 +233,7 @@ for _ in $(seq 30); do
|
|||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" \
|
curl -fsS -o /dev/null "http://127.0.0.1:$PORT/" \
|
||||||
|| die "Služba nastartovala, ale neodpovídá. Mrkni na journalctl -u kostky."
|
|| die "Služba nastartovala, ale neodpovídá. Mrkni na journalctl -u $SERVICE."
|
||||||
|
|
||||||
# Verzi bereme ze souboru, ne z binárky. Starší vydání --version neumí
|
# Verzi bereme ze souboru, ne z binárky. Starší vydání --version neumí
|
||||||
# a místo výpisu by nastartovala server, který by tenhle skript zavěsil.
|
# a místo výpisu by nastartovala server, který by tenhle skript zavěsil.
|
||||||
@@ -243,11 +249,11 @@ install_into() {
|
|||||||
installer > "$tmp"
|
installer > "$tmp"
|
||||||
|
|
||||||
msg "Posílám instalátor do kontejneru $ctid"
|
msg "Posílám instalátor do kontejneru $ctid"
|
||||||
pct push "$ctid" "$tmp" /root/kostky-install.sh --perms 0755
|
pct push "$ctid" "$tmp" /root/dice-counter-install.sh --perms 0755
|
||||||
rm -f "$tmp"
|
rm -f "$tmp"
|
||||||
|
|
||||||
pct exec "$ctid" -- env PORT="$PORT" GITEA="$GITEA" REPO="$REPO" \
|
pct exec "$ctid" -- env PORT="$PORT" GITEA="$GITEA" REPO="$REPO" \
|
||||||
VERSION="$VERSION" AUTOLOGIN="$AUTOLOGIN" bash /root/kostky-install.sh
|
VERSION="$VERSION" AUTOLOGIN="$AUTOLOGIN" bash /root/dice-counter-install.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
address_of() {
|
address_of() {
|
||||||
@@ -265,9 +271,9 @@ hotovo() {
|
|||||||
echo -e " Zápisník na notebook: \e[1;32mhttp://${ip}:${PORT}/board\e[0m"
|
echo -e " Zápisník na notebook: \e[1;32mhttp://${ip}:${PORT}/board\e[0m"
|
||||||
echo -e " Zadávání z telefonu: \e[1;32mhttp://${ip}:${PORT}/\e[0m"
|
echo -e " Zadávání z telefonu: \e[1;32mhttp://${ip}:${PORT}/\e[0m"
|
||||||
echo
|
echo
|
||||||
echo -e " \e[2mDatabáze: /var/lib/kostky/dice.db (uvnitř kontejneru)"
|
echo -e " \e[2mDatabáze: /var/lib/dice-counter/dice.db (uvnitř kontejneru)"
|
||||||
echo -e " Aktualizace: v konzoli kontejneru napiš update"
|
echo -e " Aktualizace: v konzoli kontejneru napiš update"
|
||||||
echo -e " Log: pct exec $ctid -- journalctl -u kostky -f"
|
echo -e " Log: pct exec $ctid -- journalctl -u dice-counter -f"
|
||||||
echo -e " Konzole: pct enter $ctid"
|
echo -e " Konzole: pct enter $ctid"
|
||||||
echo -e " Zrušit: pct stop $ctid && pct destroy $ctid\e[0m"
|
echo -e " Zrušit: pct stop $ctid && pct destroy $ctid\e[0m"
|
||||||
echo
|
echo
|
||||||
@@ -276,7 +282,7 @@ hotovo() {
|
|||||||
# --- co se má vlastně dělat --------------------------------------------------
|
# --- co se má vlastně dělat --------------------------------------------------
|
||||||
#
|
#
|
||||||
# Rourou z curlu se argumenty předávají mizerně, tak jde všechno i proměnnou:
|
# Rourou z curlu se argumenty předávají mizerně, tak jde všechno i proměnnou:
|
||||||
# MODE=update CTID=123. Ze souboru funguje i `bash pve-kostky.sh update 123`.
|
# MODE=update CTID=123. Ze souboru funguje i `bash pve-dice-counter.sh update 123`.
|
||||||
MODE="${MODE:-${1:-create}}"
|
MODE="${MODE:-${1:-create}}"
|
||||||
[ "$MODE" = "update" ] && CTID="${CTID:-${2:-}}"
|
[ "$MODE" = "update" ] && CTID="${CTID:-${2:-}}"
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ exe = EXE(
|
|||||||
analysis.scripts,
|
analysis.scripts,
|
||||||
analysis.binaries,
|
analysis.binaries,
|
||||||
analysis.datas,
|
analysis.datas,
|
||||||
name="kostky",
|
name="dice-counter",
|
||||||
console=True,
|
console=True,
|
||||||
# Ořezání symbolů šetří pár megabajtů, ale jen na Linuxu. Na macOS by
|
# Ořezání symbolů šetří pár megabajtů, ale jen na Linuxu. Na macOS by
|
||||||
# rozbilo podpis, který si PyInstaller sám přidává a bez kterého se
|
# rozbilo podpis, který si PyInstaller sám přidává a bez kterého se
|
||||||
@@ -134,7 +134,7 @@ if __name__ == "__main__":
|
|||||||
console.utf8()
|
console.utf8()
|
||||||
|
|
||||||
if {"--version", "-V"} & set(sys.argv[1:]):
|
if {"--version", "-V"} & set(sys.argv[1:]):
|
||||||
print(f"kostky {version.current()}")
|
print(f"dice-counter {version.current()}")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
main()
|
main()
|
||||||
+1
-1
@@ -39,7 +39,7 @@ def default_db() -> Path:
|
|||||||
if chosen:
|
if chosen:
|
||||||
return Path(chosen)
|
return Path(chosen)
|
||||||
if getattr(sys, "frozen", False):
|
if getattr(sys, "frozen", False):
|
||||||
return data_home() / "kostky" / "dice.db"
|
return data_home() / "dice-counter" / "dice.db"
|
||||||
return Path("dice.db")
|
return Path("dice.db")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -8,6 +8,6 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{% block body %}{% endblock %}
|
{% block body %}{% endblock %}
|
||||||
<footer class="verze">kostky {{ verze }}</footer>
|
<footer class="verze">dice-counter {{ verze }}</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -152,7 +152,7 @@ def test_umisteni_databaze_z_binarky(monkeypatch, tmp_path):
|
|||||||
monkeypatch.setattr(storage.sys, "platform", "linux")
|
monkeypatch.setattr(storage.sys, "platform", "linux")
|
||||||
monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path))
|
monkeypatch.setenv("XDG_DATA_HOME", str(tmp_path))
|
||||||
|
|
||||||
assert storage.default_db() == tmp_path / "kostky" / "dice.db"
|
assert storage.default_db() == tmp_path / "dice-counter" / "dice.db"
|
||||||
|
|
||||||
|
|
||||||
def test_data_home_podle_systemu(monkeypatch, tmp_path):
|
def test_data_home_podle_systemu(monkeypatch, tmp_path):
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@ UNKNOWN = "neznámá"
|
|||||||
def bundled() -> str:
|
def bundled() -> str:
|
||||||
"""Verze vypálená do binárky při stavbě.
|
"""Verze vypálená do binárky při stavbě.
|
||||||
|
|
||||||
`build.sh` ji zapíše do souboru, `kostky.spec` ji přibalí. V binárce
|
`build.sh` ji zapíše do souboru, `dice-counter.spec` ji přibalí. V binárce
|
||||||
leží vedle šablon v dočasném adresáři, na který ukazuje `sys._MEIPASS`.
|
leží vedle šablon v dočasném adresáři, na který ukazuje `sys._MEIPASS`.
|
||||||
"""
|
"""
|
||||||
root = Path(getattr(sys, "_MEIPASS", Path(__file__).parent))
|
root = Path(getattr(sys, "_MEIPASS", Path(__file__).parent))
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ def export():
|
|||||||
|
|
||||||
return send_file(io.BytesIO(data), mimetype="application/vnd.sqlite3",
|
return send_file(io.BytesIO(data), mimetype="application/vnd.sqlite3",
|
||||||
as_attachment=True,
|
as_attachment=True,
|
||||||
download_name=f"kostky-{date.today().isoformat()}.db")
|
download_name=f"dice-counter-{date.today().isoformat()}.db")
|
||||||
|
|
||||||
|
|
||||||
@app.route("/stats")
|
@app.route("/stats")
|
||||||
@@ -364,7 +364,7 @@ def hall():
|
|||||||
|
|
||||||
def announce() -> None:
|
def announce() -> None:
|
||||||
"""Vypíše, kde všude je počitadlo k mání, a čím je zrovna spuštěné."""
|
"""Vypíše, kde všude je počitadlo k mání, a čím je zrovna spuštěné."""
|
||||||
print(f"Kostky {version.current()}\n")
|
print(f"dice-counter {version.current()}\n")
|
||||||
|
|
||||||
found = net.addresses()
|
found = net.addresses()
|
||||||
|
|
||||||
@@ -384,7 +384,7 @@ if __name__ == "__main__":
|
|||||||
console.utf8()
|
console.utf8()
|
||||||
|
|
||||||
if {"--version", "-V"} & set(sys.argv[1:]):
|
if {"--version", "-V"} & set(sys.argv[1:]):
|
||||||
print(f"kostky {version.current()}")
|
print(f"dice-counter {version.current()}")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
announce()
|
announce()
|
||||||
|
|||||||
Reference in new issue
Block a user