soxogvv commited on
Commit
3be42aa
Β·
verified Β·
1 Parent(s): d6e48f1

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +45 -46
Dockerfile CHANGED
@@ -16,6 +16,7 @@ RUN apt-get update && \
16
  mediainfo \
17
  screen \
18
  nano \
 
19
  && rm -rf /var/lib/apt/lists/*
20
 
21
  # ── Install bore ──────────────────────────────────────────────────────────────
@@ -34,7 +35,7 @@ USER root
34
 
35
  # ── Set HOME and PATH ─────────────────────────────────────────────────────────
36
  ENV HOME=/root \
37
- PATH="/root/venv/bin:${PATH}" \
38
  VIRTUAL_ENV=/root/venv \
39
  PIP_NO_CACHE_DIR=1 \
40
  HOSTNAME=kanha
@@ -53,32 +54,28 @@ RUN echo 'export PS1="\u@kanha:\w\$ "' >> /root/.bashrc && \
53
  echo 'cd /data' >> /root/.bashrc && \
54
  echo 'cd /data' >> /root/.bash_profile
55
 
56
- # ── Force pip/python to always use venv (works in ALL shell types) ────────────
57
  RUN printf '%s\n' \
58
  '#!/bin/sh' \
59
- 'exec /data/persist/venv/bin/pip "$@"' \
60
- > /usr/local/bin/pip && \
61
- chmod +x /usr/local/bin/pip && \
62
  \
63
  printf '%s\n' \
64
  '#!/bin/sh' \
65
- 'exec /data/persist/venv/bin/pip3 "$@"' \
66
- > /usr/local/bin/pip3 && \
67
- chmod +x /usr/local/bin/pip3 && \
68
  \
69
  printf '%s\n' \
70
  '#!/bin/sh' \
71
- 'exec /data/persist/venv/bin/python "$@"' \
72
- > /usr/local/bin/python && \
73
- chmod +x /usr/local/bin/python && \
74
  \
75
  printf '%s\n' \
76
  '#!/bin/sh' \
77
- 'exec /data/persist/venv/bin/python3 "$@"' \
78
- > /usr/local/bin/python3 && \
79
- chmod +x /usr/local/bin/python3
80
 
81
- # ── apt/apt-get wrapper β†’ intercepts install and saves to apt.txt ─────────────
82
  RUN printf '%s\n' \
83
  '#!/bin/sh' \
84
  'APT_FILE="/data/apt.txt"' \
@@ -91,9 +88,7 @@ RUN printf '%s\n' \
91
  ' if [ $STATUS -eq 0 ]; then' \
92
  ' touch "$APT_FILE"' \
93
  ' for arg in "$@"; do' \
94
- ' case "$arg" in' \
95
- ' -*) continue ;;' \
96
- ' esac' \
97
  ' if ! grep -qx "$arg" "$APT_FILE"; then' \
98
  ' echo "$arg" >> "$APT_FILE"' \
99
  ' echo "βœ“ $arg saved to apt.txt"' \
@@ -103,20 +98,17 @@ RUN printf '%s\n' \
103
  ' exit $STATUS' \
104
  'fi' \
105
  '"$REAL_BIN" "$@"' \
106
- > /usr/local/bin/_apt_wrapper && \
107
- chmod +x /usr/local/bin/_apt_wrapper
108
 
109
  RUN printf '%s\n' \
110
  '#!/bin/sh' \
111
  'exec /usr/local/bin/_apt_wrapper /usr/bin/apt "$@"' \
112
- > /usr/local/bin/apt && \
113
- chmod +x /usr/local/bin/apt
114
 
115
  RUN printf '%s\n' \
116
  '#!/bin/sh' \
117
  'exec /usr/local/bin/_apt_wrapper /usr/bin/apt-get "$@"' \
118
- > /usr/local/bin/apt-get && \
119
- chmod +x /usr/local/bin/apt-get
120
 
121
  # ── Ensure /data exists ───────────────────────────────────────────────────────
122
  RUN mkdir -p /data
@@ -131,32 +123,39 @@ RUN printf '%s\n' \
131
  '#!/bin/sh' \
132
  'set -e' \
133
  '' \
134
- 'persist() {' \
135
- ' SRC="$1"' \
136
- ' DEST="$2"' \
137
- ' mkdir -p "$(dirname "$DEST")"' \
138
- ' if [ ! -e "$DEST" ]; then' \
139
- ' if [ -e "$SRC" ]; then' \
140
- ' cp -a "$SRC" "$DEST"' \
141
- ' rm -rf "$SRC"' \
142
- ' else' \
143
- ' mkdir -p "$DEST"' \
144
- ' fi' \
145
- ' else' \
146
- ' rm -rf "$SRC"' \
147
- ' fi' \
148
- ' ln -sf "$DEST" "$SRC"' \
149
- '}' \
150
  '' \
151
- 'persist /root/venv /data/persist/venv' \
152
- 'persist /root/.cache /data/persist/cache' \
153
  '' \
154
- 'rm -f /data/persist/venv/lib/python*/EXTERNALLY-MANAGED' \
 
 
 
 
155
  '' \
156
- 'export VIRTUAL_ENV=/data/persist/venv' \
157
- 'export PATH="/data/persist/venv/bin:$PATH"' \
 
 
 
 
 
 
 
158
  '' \
159
- '# ── apt.txt: reinstall saved packages on every restart ───────────────' \
160
  'APT_FILE="/data/apt.txt"' \
161
  'if [ ! -f "$APT_FILE" ]; then touch "$APT_FILE"; fi' \
162
  'if [ -s "$APT_FILE" ]; then' \
 
16
  mediainfo \
17
  screen \
18
  nano \
19
+ rsync \
20
  && rm -rf /var/lib/apt/lists/*
21
 
22
  # ── Install bore ──────────────────────────────────────────────────────────────
 
35
 
36
  # ── Set HOME and PATH ─────────────────────────────────────────────────────────
37
  ENV HOME=/root \
38
+ PATH="/root/venv/bin:/usr/local/bin:${PATH}" \
39
  VIRTUAL_ENV=/root/venv \
40
  PIP_NO_CACHE_DIR=1 \
41
  HOSTNAME=kanha
 
54
  echo 'cd /data' >> /root/.bashrc && \
55
  echo 'cd /data' >> /root/.bash_profile
56
 
57
+ # ── Force pip/python β†’ always use /root/venv ─────────────────────────────────
58
  RUN printf '%s\n' \
59
  '#!/bin/sh' \
60
+ 'exec /root/venv/bin/pip "$@"' \
61
+ > /usr/local/bin/pip && chmod +x /usr/local/bin/pip && \
 
62
  \
63
  printf '%s\n' \
64
  '#!/bin/sh' \
65
+ 'exec /root/venv/bin/pip3 "$@"' \
66
+ > /usr/local/bin/pip3 && chmod +x /usr/local/bin/pip3 && \
 
67
  \
68
  printf '%s\n' \
69
  '#!/bin/sh' \
70
+ 'exec /root/venv/bin/python "$@"' \
71
+ > /usr/local/bin/python && chmod +x /usr/local/bin/python && \
 
72
  \
73
  printf '%s\n' \
74
  '#!/bin/sh' \
75
+ 'exec /root/venv/bin/python3 "$@"' \
76
+ > /usr/local/bin/python3 && chmod +x /usr/local/bin/python3
 
77
 
78
+ # ── apt/apt-get wrapper β†’ saves to apt.txt ───────────────────────────────────
79
  RUN printf '%s\n' \
80
  '#!/bin/sh' \
81
  'APT_FILE="/data/apt.txt"' \
 
88
  ' if [ $STATUS -eq 0 ]; then' \
89
  ' touch "$APT_FILE"' \
90
  ' for arg in "$@"; do' \
91
+ ' case "$arg" in -*) continue ;; esac' \
 
 
92
  ' if ! grep -qx "$arg" "$APT_FILE"; then' \
93
  ' echo "$arg" >> "$APT_FILE"' \
94
  ' echo "βœ“ $arg saved to apt.txt"' \
 
98
  ' exit $STATUS' \
99
  'fi' \
100
  '"$REAL_BIN" "$@"' \
101
+ > /usr/local/bin/_apt_wrapper && chmod +x /usr/local/bin/_apt_wrapper
 
102
 
103
  RUN printf '%s\n' \
104
  '#!/bin/sh' \
105
  'exec /usr/local/bin/_apt_wrapper /usr/bin/apt "$@"' \
106
+ > /usr/local/bin/apt && chmod +x /usr/local/bin/apt
 
107
 
108
  RUN printf '%s\n' \
109
  '#!/bin/sh' \
110
  'exec /usr/local/bin/_apt_wrapper /usr/bin/apt-get "$@"' \
111
+ > /usr/local/bin/apt-get && chmod +x /usr/local/bin/apt-get
 
112
 
113
  # ── Ensure /data exists ───────────────────────────────────────────────────────
114
  RUN mkdir -p /data
 
123
  '#!/bin/sh' \
124
  'set -e' \
125
  '' \
126
+ 'mkdir -p /data/persist' \
127
+ '' \
128
+ '# ── Step 1: RESTORE β€” /data/persist β†’ /root/ (on restart) ───────────' \
129
+ '# Only syncs what is missing in /root/, never overwrites existing files' \
130
+ 'if [ -d "/data/persist/venv" ]; then' \
131
+ ' echo "β–Ά Restoring venv from backup..."' \
132
+ ' rsync -a --ignore-existing /data/persist/venv/ /root/venv/' \
133
+ 'fi' \
134
+ 'if [ -d "/data/persist/cache" ]; then' \
135
+ ' echo "β–Ά Restoring cache from backup..."' \
136
+ ' rsync -a --ignore-existing /data/persist/cache/ /root/.cache/' \
137
+ 'fi' \
 
 
 
 
138
  '' \
139
+ '# ── Step 2: Fix pip ─────────────────────────────────────────────────' \
140
+ 'rm -f /root/venv/lib/python*/EXTERNALLY-MANAGED' \
141
  '' \
142
+ '# ── Step 3: BACKUP β€” /root/ β†’ /data/persist/ (sync any changes) ─────' \
143
+ '# rsync only copies what changed, very fast' \
144
+ 'echo "β–Ά Syncing /root/venv to backup..."' \
145
+ 'rsync -a --delete /root/venv/ /data/persist/venv/' \
146
+ 'rsync -a --delete /root/.cache/ /data/persist/cache/' \
147
  '' \
148
+ '# ── Step 4: Background sync every 60s (root β†’ data) ─────────────────' \
149
+ '# Catches any pip installs or changes made while server is running' \
150
+ '(' \
151
+ ' while true; do' \
152
+ ' sleep 60' \
153
+ ' rsync -a --delete /root/venv/ /data/persist/venv/ 2>/dev/null' \
154
+ ' rsync -a --delete /root/.cache/ /data/persist/cache/ 2>/dev/null' \
155
+ ' done' \
156
+ ') &' \
157
  '' \
158
+ '# ── Step 5: apt.txt reinstall ────────────────────────────────────────' \
159
  'APT_FILE="/data/apt.txt"' \
160
  'if [ ! -f "$APT_FILE" ]; then touch "$APT_FILE"; fi' \
161
  'if [ -s "$APT_FILE" ]; then' \