From e0f363d7184270952bec4f97d4b578d861efa79d Mon Sep 17 00:00:00 2001 From: Debanjum Date: Sun, 8 Jun 2025 16:30:52 -0700 Subject: [PATCH] Use UV to manage python version, env on khoj computer - Use khoj username on khoj's computer - Uv is much faster for builds --- computer.Dockerfile | 49 +++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/computer.Dockerfile b/computer.Dockerfile index 42b6b2df..dfa15064 100644 --- a/computer.Dockerfile +++ b/computer.Dockerfile @@ -72,39 +72,31 @@ RUN apt update \ && apt remove -y light-locker xfce4-screensaver xfce4-power-manager || true # Create Computer User -ENV USERNAME=operator +ENV USERNAME=khoj ENV HOME=/home/$USERNAME -RUN useradd -m -s /bin/bash -d $HOME -g $USERNAME $USERNAME && echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers +RUN groupadd $USERNAME && \ + useradd -m -s /bin/bash -d $HOME -g $USERNAME $USERNAME && \ + echo "${USERNAME} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers USER $USERNAME WORKDIR $HOME -# Setup Python -RUN git clone https://github.com/pyenv/pyenv.git ~/.pyenv && \ - cd ~/.pyenv && src/configure && make -C src && cd .. && \ - echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc && \ - echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc && \ - echo 'eval "$(pyenv init -)"' >> ~/.bashrc -ENV PYENV_ROOT="$HOME/.pyenv" -ENV PATH="$PYENV_ROOT/bin:$PATH" -ENV PYENV_VERSION_MAJOR=3 -ENV PYENV_VERSION_MINOR=11 -ENV PYENV_VERSION_PATCH=6 -ENV PYENV_VERSION=$PYENV_VERSION_MAJOR.$PYENV_VERSION_MINOR.$PYENV_VERSION_PATCH -RUN eval "$(pyenv init -)" && \ - pyenv install $PYENV_VERSION && \ - pyenv global $PYENV_VERSION && \ - pyenv rehash -ENV PATH="$HOME/.pyenv/shims:$HOME/.pyenv/bin:$PATH" +# Install Python using uv and create a virtual environment +COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ +ENV PYTHON_VERSION=3.11.6 +RUN uv python pin $PYTHON_VERSION +RUN uv venv $HOME/.venv --python $PYTHON_VERSION --seed +RUN echo 'export PATH="$HOME/.venv/bin:$PATH"' >> "$HOME/.bashrc" +ENV PATH="$HOME/.venv/bin:$PATH" # Install Python Packages -RUN python3 -m pip install --no-cache-dir \ +RUN uv pip install --no-cache-dir \ pyautogui \ Pillow \ pyperclip \ pygetwindow # Setup VNC -RUN x11vnc -storepasswd secret /home/operator/.vncpass +RUN x11vnc -storepasswd secret /home/khoj/.vncpass ARG WIDTH=1024 ARG HEIGHT=768 @@ -115,13 +107,22 @@ ENV DISPLAY_NUM=$DISPLAY_NUM ENV DISPLAY=":$DISPLAY_NUM" # Expose VNC on port 5900 -# run Xvfb, x11vnc, Xfce (no login manager) EXPOSE 5900 -CMD ["/bin/sh", "-c", " export XDG_RUNTIME_DIR=/run/user/$(id -u); \ - mkdir -p $XDG_RUNTIME_DIR && chown $USERNAME:$USERNAME $XDG_RUNTIME_DIR && chmod 0700 $XDG_RUNTIME_DIR; \ + +# Start Virtual Display (Xvfb), Desktop Manager (XFCE) and Remote Viewer (X11 VNC) +CMD ["/bin/sh", "-c", " \ + # Create and permission XDG_RUNTIME_DIR with sudo \n\ + export XDG_RUNTIME_DIR=/run/user/$(id -u); \ + sudo mkdir -p $XDG_RUNTIME_DIR && \ + sudo chown $(id -u):$(id -g) $XDG_RUNTIME_DIR && \ + sudo chmod 0700 $XDG_RUNTIME_DIR; \ + \ + # Start Virtual Display \n\ Xvfb $DISPLAY -screen 0 ${WIDTH}x${HEIGHT}x24 -dpi 96 -auth /home/$USERNAME/.Xauthority >/dev/null 2>&1 & \ sleep 1; \ xauth add $DISPLAY . $(mcookie); \ + \ + # Start VNC Server \n\ x11vnc -display $DISPLAY -forever -rfbauth /home/$USERNAME/.vncpass -listen 0.0.0.0 -rfbport 5900 >/dev/null 2>&1 & \ eval $(dbus-launch --sh-syntax) && \ startxfce4 & \