Compare commits

...

3 Commits

Author SHA1 Message Date
2ba85992fd Merge branch 'main' into feature/trae-ide-support
All checks were successful
DevStar Studio CI/CD Pipeline / DevStarStudio-CICD-Pipeline (pull_request) Successful in 39m13s
2025-12-31 01:47:13 +00:00
ea3868eec3 fix runner注册 (#36) 删除testKubernetesConnection
Some checks failed
DevStar Studio CI/CD Pipeline / DevStarStudio-CICD-Pipeline (push) Has been cancelled
<!-- start tips -->
Please check the following:
1. Make sure you are targeting the `main` branch, pull requests on release branches are only allowed for backports.
2. Make sure you have read contributing guidelines: https://github.com/go-gitea/gitea/blob/main/CONTRIBUTING.md .
3. For documentations contribution, please go to https://gitea.com/gitea/docs
4. Describe what your pull request does and which issue you're targeting (if any).
5. It is recommended to enable "Allow edits by maintainers", so maintainers can help more easily.
6. Your input here will be included in the commit message when this PR has been merged. If you don't want some content to be included, please separate them with a line like `---`.
7. Delete all these tips before posting.
<!-- end tips -->

Reviewed-on: #36
Co-authored-by: vecmatex <kwtian@mail.ustc.edu.cn>
Co-committed-by: vecmatex <kwtian@mail.ustc.edu.cn>
2025-12-31 01:46:17 +00:00
9534291959 添加devcontainer alpine linux中配置SSH功能的脚本 (#50)
Some checks failed
DevStar Studio CI/CD Pipeline / DevStarStudio-CICD-Pipeline (push) Failing after 37m37s
os配置SSH功能的脚本,本地测试Ubuntu、alpine、debian可正常通过配置的密钥登录,fedora、openeuler、centos本地测试现在还存在一定问题,还在调整对应dockerfile和tmpl脚本对应的配置

Co-authored-by: mengning <mengning@ustc.edu.cn>
Reviewed-on: #50
Co-authored-by: wuchaoyi <1312187427@qq.com>
Co-committed-by: wuchaoyi <1312187427@qq.com>
2025-12-29 10:23:12 +00:00
9 changed files with 235 additions and 137 deletions

View File

@@ -144,16 +144,16 @@ function install {
function start {
if [[ -z "$IMAGE_STR" ]]; then
install
else
install_dependencies
fi
# 创建Docker数据卷用于持久化存储DevStar相关的配置和用户数据
if create_volume "$DATA_VOLUME"; then
mkdir -p "$(dirname "$DATA_VOLUME_FILE")"
if [[ -e "$DATA_VOLUME_FILE" ]]; then
echo "错误:路径 '$DATA_VOLUME_FILE' 已存在" >&2
exit 1
if [[ ! -e "$DATA_VOLUME_FILE" ]]; then
echo "$DATA_VOLUME" > "$DATA_VOLUME_FILE"
echo "数据卷 '$DATA_VOLUME' 已保存到配置文件"
fi
echo "$DATA_VOLUME" > "$DATA_VOLUME_FILE"
echo "数据卷 '$DATA_VOLUME' 已保存到配置文件"
else
exit 1
fi

View File

@@ -0,0 +1,19 @@
FROM docker.io/library/alpine:3.19
RUN apk add --no-cache \
build-base \
openssh \
openssh-keygen \
openssh-client \
openrc \
git \
bash \
curl \
ca-certificates
RUN mkdir -p /run/openrc && touch /run/openrc/softlevel
EXPOSE 22
CMD ["/bin/sh"]

View File

@@ -0,0 +1,20 @@
FROM centos:7
RUN yum install -y \
openssh-server \
openssh-clients \
git \
sudo \
curl \
wget \
ca-certificates \
gcc \
gcc-c++ \
make \
gdb \
&& yum clean all
RUN ssh-keygen -A
EXPOSE 22
CMD ["/bin/bash"]

View File

@@ -0,0 +1,23 @@
FROM docker.io/library/debian:12
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
openssh-server \
git \
bash \
sudo \
curl \
wget \
ca-certificates \
build-essential \
gdb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/bin/bash"]

View File

@@ -0,0 +1,22 @@
FROM docker.io/library/fedora:39
RUN dnf install -y \
openssh-server \
openssh-clients \
git \
sudo \
curl \
wget \
ca-certificates \
gcc \
gcc-c++ \
make \
gdb \
&& dnf clean all
RUN ssh-keygen -A
EXPOSE 22
CMD ["/bin/bash"]

View File

@@ -0,0 +1,22 @@
FROM docker.io/openeuler/openeuler:22.03-lts
RUN yum install -y \
openssh-server \
openssh-clients \
git \
sudo \
curl \
wget \
ca-certificates \
gcc \
gcc-c++ \
make \
gdb \
&& yum clean all
RUN ssh-keygen -A
EXPOSE 22
CMD ["/bin/bash"]

View File

@@ -0,0 +1,23 @@
FROM docker.io/library/ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
openssh-server \
git \
bash \
sudo \
curl \
wget \
ca-certificates \
build-essential \
gdb \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/bin/bash"]

View File

@@ -193,12 +193,6 @@ func registK8sRunner(ctx context.Context, token string) error {
return fmt.Errorf("获取K8s配置失败: %v", err)
}
// 测试连接
err = testKubernetesConnection(k8sURL, k8sToken)
if err != nil {
return fmt.Errorf("Kubernetes连接测试失败: %v", err)
}
// 创建K8s客户端
clientset, err := createKubernetesClient(k8sURL, k8sToken)
if err != nil {
@@ -302,24 +296,6 @@ func createKubernetesClient(k8sURL, token string) (*kubernetes.Clientset, error)
return clientset, nil
}
func testKubernetesConnection(k8sURL, token string) error {
clientset, err := createKubernetesClient(k8sURL, token)
if err != nil {
return err
}
// 尝试获取节点列表来测试连接
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
_, err = clientset.CoreV1().Pods("").List(ctx, metav1.ListOptions{Limit: 1})
if err != nil {
return fmt.Errorf("权限不足,无法访问集群资源: %v", err)
}
log.Info("Kubernetes连接测试成功")
return nil
}
func createRunnerDeployment(token, instanceURL string) (*appsv1.Deployment, error) {
timestamp := time.Now().Format("20060102150405")

View File

@@ -1,7 +1,22 @@
#!/bin/sh
# Copyright (c) Mengning Software. 2025. All rights reserved.
# 获取操作系统ID
# Copyright (c) Mengning Software. 2025.
# DevStar DevContainer startup script
# Supported OS: ubuntu, debian, alpine
set -e
###############################################################################
# Banner
###############################################################################
echo " "
echo "╔══════════════════════════════════════════════════════════════════════════════════╗"
echo "║ DevStar DevContainer © Mengning Software 2025-2026 ║"
echo "╚══════════════════════════════════════════════════════════════════════════════════╝"
echo " "
###############################################################################
# OS Detection
###############################################################################
if [ -f /etc/os-release ]; then
OS_ID=$(grep '^ID=' /etc/os-release | cut -d= -f2 | tr -d '"')
elif [ -f /etc/alpine-release ]; then
@@ -10,157 +25,135 @@ else
OS_ID=$(uname -s | tr '[:upper:]' '[:lower:]')
fi
Setup_SSH_Server(){
mkdir -p /etc/ssh;
echo "[INFO] Detected OS: $OS_ID"
cat >> /etc/ssh/sshd_config << EOF
###############################################################################
# SSH Setup
###############################################################################
Setup_SSH_Server() {
echo "[INFO] Setting up SSH server"
mkdir -p /etc/ssh
if ! grep -q "^PubkeyAuthentication" /etc/ssh/sshd_config 2>/dev/null; then
cat >> /etc/ssh/sshd_config << EOF
PubkeyAuthentication yes
PermitRootLogin yes
PasswordAuthentication no
EOF
fi
rm -f /etc/ssh/ssh_host_* 2>/dev/null;
ssh-keygen -A;
mkdir -p ~/.ssh;
chmod 700 ~/.ssh;
echo "$PUBLIC_KEY_LIST" > ~/.ssh/authorized_keys;
chmod 600 ~/.ssh/authorized_keys;
}
rm -f /etc/ssh/ssh_host_* 2>/dev/null || true
ssh-keygen -A
UpdateWorkspaceRepo(){
# 克隆或更新代码仓库
if [ -n "$RepoLink" ] && [ -n "$WorkSpace" ]; then
# 检查目录是否存在且已经是git仓库
if [ -d "$WorkSpace/.git" ]; then
echo "检测到已有仓库,正在更新: $WorkSpace";
(cd "$WorkSpace" && git pull 2>/dev/null) || {
echo "警告: 仓库更新失败,继续执行...";
}
else
echo "正在克隆仓库: $RepoLink$WorkSpace";
git clone "$RepoLink" "$WorkSpace" 2>/dev/null || {
echo "警告: 仓库克隆失败,创建空目录并继续执行...";
mkdir -p "$WorkSpace";
}
fi
mkdir -p /root/.ssh
chmod 700 /root/.ssh
if [ -n "$PUBLIC_KEY_LIST" ]; then
echo "$PUBLIC_KEY_LIST" > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
else
echo "警告: 仓库链接或工作空间未设置,跳过克隆";
mkdir -p "$WorkSpace" 2>/dev/null || true;
echo "[WARN] PUBLIC_KEY_LIST is empty"
fi
}
start(){
# 启动服务的命令
echo "$DevstarHost host.docker.internal" | tee -a /etc/hosts;
###############################################################################
# Workspace Repo
###############################################################################
UpdateWorkspaceRepo() {
if [ -n "$RepoLink" ] && [ -n "$WorkSpace" ]; then
if [ -d "$WorkSpace/.git" ]; then
echo "[INFO] Updating repo: $WorkSpace"
(cd "$WorkSpace" && git pull) || true
else
echo "[INFO] Cloning repo: $RepoLink"
git clone "$RepoLink" "$WorkSpace" || mkdir -p "$WorkSpace"
fi
else
mkdir -p "$WorkSpace" 2>/dev/null || true
fi
}
case $OS_ID in
###############################################################################
# Start
###############################################################################
start() {
echo "[INFO] DevContainer start"
[ -n "$DevstarHost" ] && echo "$DevstarHost host.docker.internal" >> /etc/hosts
case "$OS_ID" in
ubuntu|debian)
apt-get update -y
# 检查 SSH 是否已安装
if ! dpkg -l | grep -q "^ii.*openssh-server"; then
echo "SSH 未安装,将进行安装"
apt-get install ssh -y
else
echo "SSH 已安装"
fi
# 检查 Git 是否已安装
if ! dpkg -l | grep -q "^ii.*git"; then
echo "Git 未安装,将进行安装"
apt-get install git -y
else
echo "Git 已安装"
fi
command -v sshd >/dev/null 2>&1 || apt-get install -y openssh-server
command -v git >/dev/null 2>&1 || apt-get install -y git
Setup_SSH_Server
service ssh restart;
echo 'DEVCONTAINER_STATUS="restart"' >> /etc/environment; # 起什么作用?
service ssh restart
;;
alpine)
# 检查并安装 SSH 服务器
if ! apk info openssh-server >/dev/null 2>&1; then
echo "SSH 未安装,将进行安装"
apk add openssh-server openssh-keygen openssh-client --no-cache
else
echo "SSH 已安装"
fi
# 检查并安装 Git
if ! apk info git >/dev/null 2>&1; then
echo "Git 未安装,将进行安装"
apk add git --no-cache
else
echo "Git 已安装"
fi
# 安装 openrc 用于服务管理
if ! apk info openrc >/dev/null 2>&1; then
echo "openrc 未安装,将进行安装"
apk add openrc --no-cache
fi
;;
centos)
# sudo yum update -y
# sudo yum install -y epel-release
# sudo yum groupinstall -y "Development Tools"
# sudo yum install -y yaml-cpp yaml-cpp-devel
;;
fedora)
# sudo dnf update -y
# sudo dnf group install -y "Development Tools"
# sudo dnf install -y yaml-cpp yaml-cpp-devel
apk info openssh-server >/dev/null 2>&1 || \
apk add --no-cache openssh openssh-keygen openssh-client
apk info git >/dev/null 2>&1 || apk add --no-cache git
apk info bash >/dev/null 2>&1 || apk add --no-cache bash
Setup_SSH_Server
/usr/sbin/sshd
;;
*)
exit 1
echo "[ERROR] Unsupported OS: $OS_ID"
exit 1
;;
esac
$USER_COMMANDS
UpdateWorkspaceRepo
[ -n "$USER_COMMANDS" ] && sh -c "$USER_COMMANDS"
UpdateWorkspaceRepo
[ -n "$POST_START_COMMANDS" ] && sh -c "$POST_START_COMMANDS"
echo "DEVCONTAINER_STARTUP_COMPLETE"
tail -f /dev/null
}
restart(){
case $OS_ID in
###############################################################################
# Restart
###############################################################################
restart() {
echo "[INFO] DevContainer restart"
case "$OS_ID" in
ubuntu|debian)
service ssh restart;
service ssh restart
;;
alpine)
;;
centos)
;;
fedora)
pkill sshd || true
/usr/sbin/sshd
;;
*)
echo "Unsupported OS: $OS_ID";
exit 1;
echo "[WARN] Restart not supported: $OS_ID"
;;
esac
tail -f /dev/null
}
###############################################################################
# Entry
###############################################################################
echo " "
echo "╔══════════════════════════════════════════════════════════════════════════════════╗"
echo "║ Powered by DevStar Copyright (c) Mengning Software. 2025. All rights reserved. ║"
echo "╚══════════════════════════════════════════════════════════════════════════════════╝"
echo " "
# 根据参数或环境变量执行不同命令
case "${1:-$DEVCONTAINER_STATUS}" in
"restart")
restart
$POST_START_COMMANDS
echo "DEVCONTAINER_STARTUP_COMPLETE"
sh -c "tail -f /dev/null"
;;
"start")
start
echo "DEVCONTAINER_STARTUP_COMPLETE"
sh -c "tail -f /dev/null"
;;
*)
echo "Usage: $0 {start|stop|restart}"
echo "Usage: $0 {start|restart}"
exit 1
;;
esac