File size: 5,677 Bytes
262dad2
 
 
 
e0fac35
262dad2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2167684
e0fac35
 
 
 
262dad2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# ── Base image ────────────────────────────────────────────────────────────────
FROM node:20-slim

# ── System dependencies ───────────────────────────────────────────────────────
RUN apt-get update && apt-get upgrade -y && \
    apt-get install -y --no-install-recommends \
        python3 \
        python3-pip \
        python3-venv \
        make \
        g++ \
        wget \
        curl \
        git \
        neofetch \
        mediainfo \
        screen \
        nano \
        rsync \
    && rm -rf /var/lib/apt/lists/*

# ── Install bore ──────────────────────────────────────────────────────────────
RUN wget -q "https://github.com/ekzhang/bore/releases/download/v0.5.0/bore-v0.5.0-x86_64-unknown-linux-musl.tar.gz" \
        -O /tmp/bore.tar.gz && \
    tar -xzf /tmp/bore.tar.gz -C /usr/local/bin bore && \
    chmod +x /usr/local/bin/bore && \
    rm /tmp/bore.tar.gz

# ── Pin a stable machine-id ───────────────────────────────────────────────────
RUN echo "d8904b4d338adf83688caac869f64c0b" > /etc/machine-id && \
    mkdir -p /var/lib/dbus && \
    echo "d8904b4d338adf83688caac869f64c0b" > /var/lib/dbus/machine-id

USER root

# ── Set HOME and PATH ─────────────────────────────────────────────────────────
ENV HOME=/root \
    PATH="/root/venv/bin:/usr/local/bin:${PATH}" \
    VIRTUAL_ENV=/root/venv \
    PIP_NO_CACHE_DIR=1 \
    HOSTNAME=kanha

# ── Install shellular globally ────────────────────────────────────────────────
RUN npm install -g --prefix /usr/local shellular

# ── Create Python venv-seed (baked into image) ────────────────────────────────
RUN python3 -m venv /root/venv&& \
    /root/venv/bin/pip install --upgrade pip && \
    /root/venv/bin/pip install huggingface_hub && \
    rm -f /root/venv/lib/python*/EXTERNALLY-MANAGED

# ── Shell config ──────────────────────────────────────────────────────────────
RUN echo 'export PS1="\u@kanha:\w\$ "' >> /root/.bashrc && \
    echo 'cd /data' >> /root/.bashrc && \
    echo 'cd /data' >> /root/.bash_profile

# ── Force pip/python β†’ always use /root/venv ─────────────────────────────────
RUN printf '%s\n' \
    '#!/bin/sh' \
    'exec /root/venv/bin/pip "$@"' \
    > /usr/local/bin/pip && chmod +x /usr/local/bin/pip && \
    \
    printf '%s\n' \
    '#!/bin/sh' \
    'exec /root/venv/bin/pip3 "$@"' \
    > /usr/local/bin/pip3 && chmod +x /usr/local/bin/pip3 && \
    \
    printf '%s\n' \
    '#!/bin/sh' \
    'exec /root/venv/bin/python "$@"' \
    > /usr/local/bin/python && chmod +x /usr/local/bin/python && \
    \
    printf '%s\n' \
    '#!/bin/sh' \
    'exec /root/venv/bin/python3 "$@"' \
    > /usr/local/bin/python3 && chmod +x /usr/local/bin/python3

# ── apt/apt-get wrapper β†’ saves to apt.txt ───────────────────────────────────
RUN printf '%s\n' \
    '#!/bin/sh' \
    'APT_FILE="/data/apt.txt"' \
    'REAL_BIN="$1"' \
    'shift' \
    'if [ "$1" = "install" ]; then' \
    '    shift' \
    '    "$REAL_BIN" install "$@"' \
    '    STATUS=$?' \
    '    if [ $STATUS -eq 0 ]; then' \
    '        touch "$APT_FILE"' \
    '        for arg in "$@"; do' \
    '            case "$arg" in -*) continue ;; esac' \
    '            if ! grep -qx "$arg" "$APT_FILE"; then' \
    '                echo "$arg" >> "$APT_FILE"' \
    '            fi' \
    '        done' \
    '    fi' \
    '    exit $STATUS' \
    'fi' \
    '"$REAL_BIN" "$@"' \
    > /usr/local/bin/_apt_wrapper && chmod +x /usr/local/bin/_apt_wrapper

RUN printf '%s\n' \
    '#!/bin/sh' \
    'exec /usr/local/bin/_apt_wrapper /usr/bin/apt "$@"' \
    > /usr/local/bin/apt && chmod +x /usr/local/bin/apt

RUN printf '%s\n' \
    '#!/bin/sh' \
    'exec /usr/local/bin/_apt_wrapper /usr/bin/apt-get "$@"' \
    > /usr/local/bin/apt-get && chmod +x /usr/local/bin/apt-get

# ── Ensure /data exists ───────────────────────────────────────────────────────
RUN mkdir -p /data

# ── App ───────────────────────────────────────────────────────────────────────
COPY package*.json /root/app/
RUN cd /root/app && npm install --omit=dev
COPY . /root/app/

# ── Runtime ───────────────────────────────────────────────────────────────────
WORKDIR /data
EXPOSE 7860
ENV PORT=7860

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["node", "/root/app/app.js"]