fix: odstranit emoji ze vsech souboru
Kompletne odstraneno: - Emoji (smajliky, symboly, boxes, arrows) z README - Emoji ze skriptu (sipky, symboly) - Emoji z docker-compose (adresare) Nahrano za: - Textove alternativy (sipky -> '->', boxes -> '+', atd.) - ASCII pouze kde to slo Ciste vsechny 7 repo (overeno Python skriptem).
This commit is contained in:
@@ -3,11 +3,11 @@
|
||||
Bash skripty pro správu Dockeru na Macu i Linuxu.
|
||||
Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-domov/`.
|
||||
|
||||
> **Jsi začátečník?** Čti od [Začínáme](#zaciname) – vše je krok za krokem.
|
||||
> **Jsi začátečník?** Čti od [Začínáme](#zaciname) - vše je krok za krokem.
|
||||
|
||||
---
|
||||
|
||||
## 📦 Co tu je
|
||||
## Co tu je
|
||||
|
||||
| Skript | Alias | Co dělá |
|
||||
|---|---|---|
|
||||
@@ -17,13 +17,13 @@ Jedná se o **přesné kopie** skriptů z tvého lokálního `~/Skripty/docker-d
|
||||
| `docker-restore.sh` | `dk-restore` | Obnovuje Docker projekty ze zálohy |
|
||||
| `disk-watch.sh` | `dk-watch` | Sleduje volné místo na Docker datech |
|
||||
| `mount-nas.sh` | `dk-nas` | Připojí/odpojí NAS SMB share do `/Volumes/<ssd-data-mount>/multimedia` |
|
||||
| `update-macos.sh` | – | Aktualizace macOS přes Software Update |
|
||||
| `update-macos.sh` | - | Aktualizace macOS přes Software Update |
|
||||
|
||||
Všechny skripty jsou **idempotentní** (můžeš spustit víckrát), mají `--help`, podporují **dry-run** a bez potvrzení nic destruktivního neprovádějí.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Začínáme
|
||||
## Začínáme
|
||||
|
||||
### Krok 1: Naklonuj repo
|
||||
|
||||
@@ -73,14 +73,14 @@ Příklad struktury:
|
||||
|
||||
```
|
||||
~/DockerProjects/
|
||||
├── portainer/
|
||||
│ ├── docker-compose.yml
|
||||
│ └── data/
|
||||
├── vaultwarden/
|
||||
│ ├── docker-compose.yml
|
||||
│ └── data/
|
||||
└── nextcloud/
|
||||
└── docker-compose.yml
|
||||
+-- portainer/
|
||||
| +-- docker-compose.yml
|
||||
| +-- data/
|
||||
+-- vaultwarden/
|
||||
| +-- docker-compose.yml
|
||||
| +-- data/
|
||||
+-- nextcloud/
|
||||
+-- docker-compose.yml
|
||||
```
|
||||
|
||||
**Konfigurace cesty:**
|
||||
@@ -104,9 +104,9 @@ dk-backup --dry-run
|
||||
|
||||
---
|
||||
|
||||
## 📚 Detail ke každému skriptu
|
||||
## Detail ke každému skriptu
|
||||
|
||||
### `docker-update.sh` → `dk-update`
|
||||
### `docker-update.sh` -> `dk-update`
|
||||
|
||||
Bezpečná aktualizace Docker Compose projektů.
|
||||
|
||||
@@ -122,7 +122,7 @@ dk-update --dry-run # ukáže co by se dělalo, neprovede
|
||||
3. Restartuje s novými image
|
||||
4. Ověří, že vše běží
|
||||
|
||||
### `docker-backup.sh` → `dk-backup`
|
||||
### `docker-backup.sh` -> `dk-backup`
|
||||
|
||||
Záloha Docker projektů na NAS.
|
||||
|
||||
@@ -138,7 +138,7 @@ dk-backup --auto # bez dotazovani (cron-friendly)
|
||||
- Používá `tar --zstd` (moderní komprese)
|
||||
- Staré zálohy se **nemazou** (musíš ručně)
|
||||
|
||||
### `docker-cleanup.sh` → `dk-cleanup`
|
||||
### `docker-cleanup.sh` -> `dk-cleanup`
|
||||
|
||||
Bezpečné čištění Docker odpadu.
|
||||
|
||||
@@ -150,11 +150,11 @@ dk-cleanup --all # dangling + build cache + sites + tmp
|
||||
```
|
||||
|
||||
**Nikdy nemaže:**
|
||||
- ❌ Používané images
|
||||
- ❌ Bind-mount ani named volume data
|
||||
- ❌ Běžící kontejnery
|
||||
- Používané images
|
||||
- Bind-mount ani named volume data
|
||||
- Běžící kontejnery
|
||||
|
||||
### `docker-restore.sh` → `dk-restore`
|
||||
### `docker-restore.sh` -> `dk-restore`
|
||||
|
||||
Obnova ze zálohy.
|
||||
|
||||
@@ -165,7 +165,7 @@ dk-restore --only portainer # jen jeden projekt
|
||||
dk-restore --from 20240801-120000 # konkretni zaloha
|
||||
```
|
||||
|
||||
### `disk-watch.sh` → `dk-watch`
|
||||
### `disk-watch.sh` -> `dk-watch`
|
||||
|
||||
Sledování volného místa.
|
||||
|
||||
@@ -174,7 +174,7 @@ dk-watch # jen info o aktualnim stavu
|
||||
dk-watch --alert # posli Telegram alert kdyz < 10% volneho
|
||||
```
|
||||
|
||||
### `mount-nas.sh` → `dk-nas`
|
||||
### `mount-nas.sh` -> `dk-nas`
|
||||
|
||||
Připojí NAS SMB share.
|
||||
|
||||
@@ -185,10 +185,10 @@ dk-nas --umount # odpoj
|
||||
```
|
||||
|
||||
**Konfigurace:**
|
||||
- `SMB_SERVER` – default `<nas-ip>`
|
||||
- `SMB_SHARE` – default `Multimedia`
|
||||
- `SMB_USER` – default `mates`
|
||||
- `TARGET` – default `/Volumes/<ssd-data-mount>/multimedia`
|
||||
- `SMB_SERVER` - default `<nas-ip>`
|
||||
- `SMB_SHARE` - default `Multimedia`
|
||||
- `SMB_USER` - default `mates`
|
||||
- `TARGET` - default `/Volumes/<ssd-data-mount>/multimedia`
|
||||
- Heslo je v **macOS keychainu** pod `SMB:<server>/<share>`
|
||||
|
||||
### `update-macos.sh`
|
||||
@@ -201,33 +201,33 @@ Spustí `softwareupdate` na macOS.
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Bezpečnost
|
||||
## Bezpečnost
|
||||
|
||||
- ✅ **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
|
||||
- ✅ **Všechny skripty podporují `--dry-run`**
|
||||
- ✅ **Žádné destruktivní akce bez potvrzení**
|
||||
- ✅ **Hesla v macOS keychainu**, ne v skriptech
|
||||
- **Všechny skripty kontrolují `$EUID == 0`** (musíš být root pro sudo)
|
||||
- **Všechny skripty podporují `--dry-run`**
|
||||
- **Žádné destruktivní akce bez potvrzení**
|
||||
- **Hesla v macOS keychainu**, ne v skriptech
|
||||
|
||||
---
|
||||
|
||||
## 🏗 Struktura
|
||||
## Struktura
|
||||
|
||||
```
|
||||
mates-install-scripts/
|
||||
├── README.md # Tento soubor
|
||||
├── LICENSE # MIT
|
||||
├── docker-update.sh # Aktualizace Docker
|
||||
├── docker-backup.sh # Záloha na NAS
|
||||
├── docker-cleanup.sh # Čištění odpadu
|
||||
├── docker-restore.sh # Obnova ze zálohy
|
||||
├── disk-watch.sh # Sledování místa
|
||||
├── mount-nas.sh # Mount NAS
|
||||
└── update-macos.sh # Aktualizace macOS
|
||||
+-- README.md # Tento soubor
|
||||
+-- LICENSE # MIT
|
||||
+-- docker-update.sh # Aktualizace Docker
|
||||
+-- docker-backup.sh # Záloha na NAS
|
||||
+-- docker-cleanup.sh # Čištění odpadu
|
||||
+-- docker-restore.sh # Obnova ze zálohy
|
||||
+-- disk-watch.sh # Sledování místa
|
||||
+-- mount-nas.sh # Mount NAS
|
||||
+-- update-macos.sh # Aktualizace macOS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Související
|
||||
## Související
|
||||
|
||||
- **Jotty:** knowledge base (detailní postupy, troubleshooting)
|
||||
- **mates-docker-services:** Docker Compose šablony pro 14 služeb
|
||||
|
||||
+14
-14
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# disk-watch.sh — sledování volného místa na Docker datech
|
||||
# disk-watch.sh -- sledování volného místa na Docker datech
|
||||
#
|
||||
# Kontroluje:
|
||||
# - <ssd-data-mount> (Docker data)
|
||||
@@ -48,7 +48,7 @@ WARNINGS=()
|
||||
check_disk() {
|
||||
local path="$1" threshold="$2" label="$3"
|
||||
if [ ! -d "$path" ]; then
|
||||
printf '%s%s%s %s — adresář neexistuje\n' "$YELLOW" "⚠" "$NC" "$label"
|
||||
printf '%s%s%s %s -- adresář neexistuje\n' "$YELLOW" "" "$NC" "$label"
|
||||
return
|
||||
fi
|
||||
# df v macOS nevrací % použití přímo; parsujeme z výstupu
|
||||
@@ -60,23 +60,23 @@ check_disk() {
|
||||
total=$(echo "$line" | awk '{print $2}')
|
||||
|
||||
if [ -z "$capacity" ]; then
|
||||
printf '%s%s%s %s — nelze přečíst\n' "$YELLOW" "⚠" "$NC" "$label"
|
||||
printf '%s%s%s %s -- nelze přečíst\n' "$YELLOW" "" "$NC" "$label"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ "$capacity" -ge "$threshold" ]; then
|
||||
printf '%s●%s %s %s/%s (%s%%) — %sPŘEKROČEN PRAH%s (≥%s%%)\n' \
|
||||
printf '%s%s %s %s/%s (%s%%) -- %sPŘEKROČEN PRAH%s (%s%%)\n' \
|
||||
"$RED" "$NC" "$label" "$used" "$total" "$capacity" "$RED" "$NC" "$threshold"
|
||||
WARNINGS+=("$label: ${capacity}% (prah ${threshold}%)")
|
||||
else
|
||||
printf '%s●%s %s %s/%s (%s%%) — OK\n' \
|
||||
printf '%s%s %s %s/%s (%s%%) -- OK\n' \
|
||||
"$GREEN" "$NC" "$label" "$used" "$total" "$capacity"
|
||||
fi
|
||||
}
|
||||
|
||||
check_docker_disk() {
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
printf '%s●%s Docker — není dostupný\n' "$YELLOW" "$NC"
|
||||
printf '%s%s Docker -- není dostupný\n' "$YELLOW" "$NC"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -85,7 +85,7 @@ check_docker_disk() {
|
||||
out=$(docker system df --format '{{.Type}}\t{{.Size}}\t{{.Reclaimable}}' 2>/dev/null || true)
|
||||
|
||||
if [ -z "$out" ]; then
|
||||
printf '%s●%s Docker disk — nešlo přečíst\n' "$YELLOW" "$NC"
|
||||
printf '%s%s Docker disk -- nešlo přečíst\n' "$YELLOW" "$NC"
|
||||
return
|
||||
fi
|
||||
|
||||
@@ -95,10 +95,10 @@ check_docker_disk() {
|
||||
images_size_bytes=$(docker system df --format '{{.Type}}\t{{.Size}}' \
|
||||
| awk -F'\t' '$1 == "Images" {print $2}')
|
||||
|
||||
printf '%s●%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}"
|
||||
printf '%s%s Docker images: %s\n' "$BLUE" "$NC" "${images_size_bytes:-neznámé}"
|
||||
|
||||
# Velké images (>500 MB), které nejsou používané
|
||||
printf '%s●%s Velké images (>500 MB):\n' "$BLUE" "$NC"
|
||||
printf '%s%s Velké images (>500 MB):\n' "$BLUE" "$NC"
|
||||
docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}\t{{.ID}}' \
|
||||
| awk -F'\t' '{
|
||||
size = $1
|
||||
@@ -110,7 +110,7 @@ check_docker_disk() {
|
||||
printf ' %s\n' "$line"
|
||||
done
|
||||
|
||||
# Nepoužívané images (pozor, ne "používané" — bezpečnost)
|
||||
# Nepoužívané images (pozor, ne "používané" -- bezpečnost)
|
||||
unused=$(docker images --format '{{.Size}}\t{{.Repository}}:{{.Tag}}' \
|
||||
| awk -F'\t' '
|
||||
/^([0-9.]+[kMG]B)\s/ {
|
||||
@@ -121,7 +121,7 @@ check_docker_disk() {
|
||||
if (mb + 0 > 200) print size, $2
|
||||
}' | head -5)
|
||||
if [ -n "$unused" ]; then
|
||||
printf '%s●%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC"
|
||||
printf '%s%s Kandidáti na vyčištění (>200 MB):\n' "$YELLOW" "$NC"
|
||||
echo "$unused" | while read -r line; do printf ' %s\n' "$line"; done
|
||||
fi
|
||||
}
|
||||
@@ -130,7 +130,7 @@ check_top_offenders() {
|
||||
if [ ! -d "$SSD_DATA/Dockery" ]; then
|
||||
return
|
||||
fi
|
||||
printf '\n%s●%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC"
|
||||
printf '\n%s%s Top 5 největších adresářů v <docker-projects-root>:\n' "$BLUE" "$NC"
|
||||
/bin/du -sh "$SSD_DATA"/Dockery/*/ 2>/dev/null \
|
||||
| /usr/bin/sort -rh \
|
||||
| /usr/bin/head -5 \
|
||||
@@ -148,7 +148,7 @@ check_docker_disk
|
||||
check_top_offenders
|
||||
|
||||
if [ "${#WARNINGS[@]}" -gt 0 ]; then
|
||||
printf '\n%s●%s VAROVÁNÍ:\n' "$RED" "$NC"
|
||||
printf '\n%s%s VAROVÁNÍ:\n' "$RED" "$NC"
|
||||
for w in "${WARNINGS[@]}"; do
|
||||
printf ' - %s\n' "$w"
|
||||
done
|
||||
@@ -156,7 +156,7 @@ fi
|
||||
|
||||
if [ "$ALERT" = "1" ] && [ "${#WARNINGS[@]}" -gt 0 ]; then
|
||||
# Alert přes Hermes Telegram cron
|
||||
MSG="⚠️ Disk Watch — překročen prah
|
||||
MSG="️ Disk Watch -- překročen prah
|
||||
$(printf '%s\n' "${WARNINGS[@]}")
|
||||
|
||||
Datum: $(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# docker-backup.sh — bezpečná záloha Docker projektů a named volumes
|
||||
# docker-backup.sh -- bezpečná záloha Docker projektů a named volumes
|
||||
#
|
||||
# - vytvoří timestamp složku v <backup-root>/
|
||||
# - pro každý projekt v <docker-projects-root> zastaví kontejnery,
|
||||
@@ -97,7 +97,7 @@ FAILED=()
|
||||
for project in "${PROJECTS[@]}"; do
|
||||
cd "$DOCKERY/$project"
|
||||
ARCHIVE="$DEST/${project}.tar.zst"
|
||||
log " [$project] tar -c <docker-projects-root>/$project/ → $ARCHIVE"
|
||||
log " [$project] tar -c <docker-projects-root>/$project/ -> $ARCHIVE"
|
||||
# absolutní cesta (background tar pitfall: vždy absolutní)
|
||||
if /usr/bin/tar --exclude='._*' --exclude='.DS_Store' \
|
||||
--use-compress-program='/opt/homebrew/bin/zstd -1 -T0' \
|
||||
@@ -125,7 +125,7 @@ VOLUMES=$(docker volume ls --format '{{.Name}}' \
|
||||
|
||||
for vol in $VOLUMES; do
|
||||
ARCHIVE="$DEST/${vol}.tar.zst"
|
||||
log " [volume:$vol] → $ARCHIVE"
|
||||
log " [volume:$vol] -> $ARCHIVE"
|
||||
# Nejdřív dekomprimuj na hostiteli, pak pošli do kontejneru (alpine tar neumí zstd)
|
||||
if docker run --rm \
|
||||
-v "${vol}:/src:ro" \
|
||||
@@ -197,7 +197,7 @@ log "======================================"
|
||||
log "Záloha: $DEST"
|
||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||
err "Selhalo: ${#FAILED[@]}"
|
||||
for f in "${FAILED[@]}"; do err " ✗ $f"; done
|
||||
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
|
||||
exit 1
|
||||
fi
|
||||
log "Vše OK."
|
||||
+11
-11
@@ -1,12 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# docker-cleanup.sh — bezpečné čištění Docker odpadu
|
||||
# docker-cleanup.sh -- bezpečné čištění Docker odpadu
|
||||
#
|
||||
# Cíle (vše s výslovným potvrzením nebo dry-run):
|
||||
# - dangling images (<none>:<none>)
|
||||
# - starý build cache (docker builder prune -f)
|
||||
# - opuštěné (orphaned) Docker sítě — nikdy bridge/host/none
|
||||
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256…)
|
||||
# - opuštěné (orphaned) Docker sítě -- nikdy bridge/host/none
|
||||
# - zastaralé images s tagem <none> ale s referencí (REPO@sha256...)
|
||||
# - dočasné soubory (XDG_CACHE_HOME pro docker, /tmp/docker-*)
|
||||
#
|
||||
# Nikdy nemaže:
|
||||
@@ -98,7 +98,7 @@ show_plan_header() {
|
||||
# === DANGLING IMAGES ===
|
||||
plan_dangling() {
|
||||
if [ "$DO_DANGLING" = "0" ]; then return; fi
|
||||
printf '%s● Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC"
|
||||
printf '%s Dangling images (<none>:<none>):%s\n' "$BLUE" "$NC"
|
||||
|
||||
local pure_dangling=0
|
||||
local stopped_holding=0
|
||||
@@ -110,7 +110,7 @@ plan_dangling() {
|
||||
holders=$(docker ps -a --filter "ancestor=$id" --format '{{.Names}}\t{{.Status}}' 2>/dev/null | head -3)
|
||||
if [ -n "$holders" ]; then
|
||||
stopped_holding=$((stopped_holding + 1))
|
||||
printf ' %s %s ⚠ drží zastavený kontejner: %s\n' \
|
||||
printf ' %s %s drží zastavený kontejner: %s\n' \
|
||||
"$id" "$size" "$(echo "$holders" | head -1 | awk '{print $1}')"
|
||||
else
|
||||
pure_dangling=$((pure_dangling + 1))
|
||||
@@ -129,7 +129,7 @@ plan_dangling() {
|
||||
fi
|
||||
if [ "$stopped_holding" -gt 0 ]; then
|
||||
PLANNED_ITEMS+=("dangling-with-stopped-containers:$stopped_holding")
|
||||
printf ' 💡 Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n'
|
||||
printf ' Pro smazání těchto images je nutné nejprve odstranit zastavené kontejnery (--stopped-containers)\n'
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -137,7 +137,7 @@ plan_dangling() {
|
||||
# === BUILD CACHE ===
|
||||
plan_build_cache() {
|
||||
if [ "$DO_BUILDER" = "0" ]; then return; fi
|
||||
printf '%s● Build cache:%s\n' "$BLUE" "$NC"
|
||||
printf '%s Build cache:%s\n' "$BLUE" "$NC"
|
||||
|
||||
local size
|
||||
size=$(docker system df --format '{{.Type}}\t{{.Size}}' 2>/dev/null \
|
||||
@@ -158,7 +158,7 @@ plan_build_cache() {
|
||||
# === ORPHANED NETWORKS ===
|
||||
plan_networks() {
|
||||
if [ "$DO_NETWORKS" = "0" ]; then return; fi
|
||||
printf '%s● Opuštěné Docker sítě:%s\n' "$BLUE" "$NC"
|
||||
printf '%s Opuštěné Docker sítě:%s\n' "$BLUE" "$NC"
|
||||
|
||||
local count=0
|
||||
# Najdi sítě, které NEpoužívá žádný kontejner
|
||||
@@ -188,7 +188,7 @@ plan_networks() {
|
||||
# === TMP FILES ===
|
||||
plan_tmp() {
|
||||
if [ "$DO_TMP" = "0" ]; then return; fi
|
||||
printf '%s● Dočasné soubory:%s\n' "$BLUE" "$NC"
|
||||
printf '%s Dočasné soubory:%s\n' "$BLUE" "$NC"
|
||||
|
||||
local total_bytes=0
|
||||
local paths=()
|
||||
@@ -237,7 +237,7 @@ confirm() {
|
||||
# === STOPPED CONTAINERS ===
|
||||
plan_stopped() {
|
||||
if [ "$DO_STOPPED" = "0" ]; then return; fi
|
||||
printf '%s● Zastavené kontejnery:%s\n' "$BLUE" "$NC"
|
||||
printf '%s Zastavené kontejnery:%s\n' "$BLUE" "$NC"
|
||||
|
||||
local count=0
|
||||
while IFS= read -r line; do
|
||||
@@ -305,7 +305,7 @@ if [ "$DO_NETWORKS" = "1" ]; then
|
||||
fi
|
||||
|
||||
if [ "$DO_TMP" = "1" ]; then
|
||||
log "mazání starých /tmp/docker-* (≥7 dní)"
|
||||
log "mazání starých /tmp/docker-* (7 dní)"
|
||||
# -print -delete musí být v tomto pořadí; -delete sám o sobě na macOS BSD find někdy selže
|
||||
/usr/bin/find /tmp -maxdepth 1 -name 'docker-*' -type f -mtime +7 -print 2>&1 | while read -r f; do
|
||||
log " rm: $f"
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# docker-restore.sh — bezpečná obnova Docker projektů z tar.zst zálohy
|
||||
# docker-restore.sh -- bezpečná obnova Docker projektů z tar.zst zálohy
|
||||
#
|
||||
# - zobrazí dostupné zálohy v $BACKUP_ROOT
|
||||
# - vyžádá potvrzení (nebo --auto)
|
||||
@@ -230,11 +230,11 @@ for project in "${SELECTED[@]}"; do
|
||||
case "$sub" in
|
||||
_pre-restore-*) continue ;;
|
||||
docker-compose.y*ml) continue ;;
|
||||
.env|.env.*) continue ;; # .env necháme — je to runtime konfigurace
|
||||
.env|.env.*) continue ;; # .env necháme -- je to runtime konfigurace
|
||||
.DS_Store) continue ;;
|
||||
esac
|
||||
if [ -e "$SRC/$sub" ]; then
|
||||
log " [$project] mv $sub → _pre-restore-$TS_NOW/$project/"
|
||||
log " [$project] mv $sub -> _pre-restore-$TS_NOW/$project/"
|
||||
mv "$SRC/$sub" "$DEST/$sub" 2>&1 || warn " mv $sub selhal"
|
||||
fi
|
||||
done
|
||||
@@ -325,10 +325,10 @@ log "======================================"
|
||||
log " SHRNUTÍ OBNOVY"
|
||||
log "======================================"
|
||||
log "Obnoveno:"
|
||||
for p in "${SELECTED[@]}"; do log " ✓ $p"; done
|
||||
for p in "${SELECTED[@]}"; do log " [OK] $p"; done
|
||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||
err "Selhalo:"
|
||||
for f in "${FAILED[@]}"; do err " ✗ $f"; done
|
||||
for f in "${FAILED[@]}"; do err " [FAIL] $f"; done
|
||||
fi
|
||||
log ""
|
||||
log "Současná data jsou v: $DOCKERY/_pre-restore-$TS_NOW/"
|
||||
@@ -338,5 +338,5 @@ log ""
|
||||
if [ "$all_healthy" = "1" ]; then
|
||||
log "Všechny kontejnery běží."
|
||||
else
|
||||
warn "Některé kontejnery nejsou v pořádku — zkontrolujte logy."
|
||||
warn "Některé kontejnery nejsou v pořádku -- zkontrolujte logy."
|
||||
fi
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# docker-update.sh — bezpečná aktualizace Docker Compose projektů
|
||||
# docker-update.sh -- bezpečná aktualizace Docker Compose projektů
|
||||
#
|
||||
# - zastaví všechny kontejnery,
|
||||
# - stáhne nové image (docker compose pull),
|
||||
@@ -170,12 +170,12 @@ log "======================================"
|
||||
log " SHRNUTÍ"
|
||||
log "======================================"
|
||||
log "Aktualizováno: ${#UPDATED[@]} projekt(ů)"
|
||||
for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " ✓ $p"; done
|
||||
for p in "${UPDATED[@]:-}"; do [ -n "$p" ] && log " [OK] $p"; done
|
||||
log "Přeskočeno (beze změny): ${#SKIPPED[@]}"
|
||||
for p in "${SKIPPED[@]:-}"; do [ -n "$p" ] && log " - $p"; done
|
||||
if [ "${#FAILED[@]}" -gt 0 ]; then
|
||||
log "Selhalo: ${#FAILED[@]}"
|
||||
for p in "${FAILED[@]}"; do err " ✗ $p"; done
|
||||
for p in "${FAILED[@]}"; do err " [FAIL] $p"; done
|
||||
fi
|
||||
log ""
|
||||
log "Log: $LOG"
|
||||
+7
-7
@@ -14,31 +14,31 @@ if ! command -v brew >/dev/null 2>&1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "→ Aktualizace Homebrew metadata..."
|
||||
echo "-> Aktualizace Homebrew metadata..."
|
||||
brew update
|
||||
|
||||
echo ""
|
||||
echo "→ Upgrade formulae..."
|
||||
echo "-> Upgrade formulae..."
|
||||
brew upgrade
|
||||
|
||||
echo ""
|
||||
echo "→ Upgrade casks..."
|
||||
echo "-> Upgrade casks..."
|
||||
brew upgrade --cask
|
||||
|
||||
echo ""
|
||||
echo "→ Cleanup..."
|
||||
echo "-> Cleanup..."
|
||||
brew cleanup
|
||||
|
||||
echo ""
|
||||
echo "→ Autoremove..."
|
||||
echo "-> Autoremove..."
|
||||
brew autoremove
|
||||
|
||||
echo ""
|
||||
echo "→ Health check..."
|
||||
echo "-> Health check..."
|
||||
brew doctor
|
||||
|
||||
echo ""
|
||||
echo "→ Outdated packages:"
|
||||
echo "-> Outdated packages:"
|
||||
brew outdated || true
|
||||
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user