FROM ghcr.io/k8ieone/srht-git:latest # --- 依赖修复 --- # pgpy: git.sr.ht 需要但镜像缺失 # openssh-server: SSH push 支持 RUN apk add --no-cache py3-pip openssh-server \ && pip3 install pgpy # --- SSH 配置 --- # 生成主机密钥 RUN ssh-keygen -A # 解锁 git 用户(SSH 登录需要) RUN echo 'git:x' | chpasswd # 配置 sshd 使用 sourcehut 的 key dispatch COPY sshd_config_patch /tmp/sshd_config_patch RUN cat /tmp/sshd_config_patch >> /etc/ssh/sshd_config \ && rm /tmp/sshd_config_patch # 修复 start.sh 中 sshd 启动路径(Alpine 需要绝对路径) RUN sed -i 's|sshd &|/usr/sbin/sshd \&|' /start.sh # --- libgit2 属主检查修复 --- # gunicorn 以 root 运行,但 SSH 推送创建的仓库属于 git 用户 # libgit2 (pygit2) 会拒绝 root 访问非 root 的仓库 # 在启动时将仓库顶层目录 chown 为 root(内部文件保持 git 用户,不影响 SSH 推送) RUN sed -i '1a find /var/lib/git -mindepth 2 -maxdepth 2 -type d -exec chown root:git {} \\; -exec chmod g+ws {} \\; 2>/dev/null || true' /start.sh # --- Jinja2 修复 --- # 上游 core.sr.ht 已修复但此镜像未包含:启用 {% do %} 模板标签 COPY fix_jinja2_do.py /tmp/fix_jinja2_do.py RUN python3 /tmp/fix_jinja2_do.py && rm /tmp/fix_jinja2_do.py