Compare commits
3 Commits
99e17f6a1d
...
2ba85992fd
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ba85992fd | |||
| ea3868eec3 | |||
| 9534291959 |
@@ -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
|
||||
fi
|
||||
if [[ ! -e "$DATA_VOLUME_FILE" ]]; then
|
||||
echo "$DATA_VOLUME" > "$DATA_VOLUME_FILE"
|
||||
echo "数据卷 '$DATA_VOLUME' 已保存到配置文件"
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
19
public/assets/os/Dockerfile.alpine-3.19
Normal file
19
public/assets/os/Dockerfile.alpine-3.19
Normal 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"]
|
||||
|
||||
|
||||
20
public/assets/os/Dockerfile.centos-7
Normal file
20
public/assets/os/Dockerfile.centos-7
Normal 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"]
|
||||
23
public/assets/os/Dockerfile.debian-12
Normal file
23
public/assets/os/Dockerfile.debian-12
Normal 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"]
|
||||
|
||||
|
||||
22
public/assets/os/Dockerfile.fedora-39
Normal file
22
public/assets/os/Dockerfile.fedora-39
Normal 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"]
|
||||
|
||||
|
||||
22
public/assets/os/Dockerfile.openeuler-22.03
Normal file
22
public/assets/os/Dockerfile.openeuler-22.03
Normal 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"]
|
||||
|
||||
|
||||
23
public/assets/os/Dockerfile.ubuntu-22.04
Normal file
23
public/assets/os/Dockerfile.ubuntu-22.04
Normal 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"]
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) Mengning Software. 2025. All rights reserved.
|
||||
# Copyright (c) Mengning Software. 2025.
|
||||
# DevStar DevContainer startup script
|
||||
# Supported OS: ubuntu, debian, alpine
|
||||
|
||||
# 获取操作系统ID
|
||||
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"
|
||||
|
||||
###############################################################################
|
||||
# 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
|
||||
|
||||
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 "[WARN] PUBLIC_KEY_LIST is empty"
|
||||
fi
|
||||
}
|
||||
|
||||
UpdateWorkspaceRepo(){
|
||||
# 克隆或更新代码仓库
|
||||
###############################################################################
|
||||
# Workspace Repo
|
||||
###############################################################################
|
||||
UpdateWorkspaceRepo() {
|
||||
if [ -n "$RepoLink" ] && [ -n "$WorkSpace" ]; then
|
||||
# 检查目录是否存在且已经是git仓库
|
||||
if [ -d "$WorkSpace/.git" ]; then
|
||||
echo "检测到已有仓库,正在更新: $WorkSpace";
|
||||
(cd "$WorkSpace" && git pull 2>/dev/null) || {
|
||||
echo "警告: 仓库更新失败,继续执行...";
|
||||
}
|
||||
echo "[INFO] Updating repo: $WorkSpace"
|
||||
(cd "$WorkSpace" && git pull) || true
|
||||
else
|
||||
echo "正在克隆仓库: $RepoLink 到 $WorkSpace";
|
||||
git clone "$RepoLink" "$WorkSpace" 2>/dev/null || {
|
||||
echo "警告: 仓库克隆失败,创建空目录并继续执行...";
|
||||
mkdir -p "$WorkSpace";
|
||||
}
|
||||
echo "[INFO] Cloning repo: $RepoLink"
|
||||
git clone "$RepoLink" "$WorkSpace" || mkdir -p "$WorkSpace"
|
||||
fi
|
||||
else
|
||||
echo "警告: 仓库链接或工作空间未设置,跳过克隆";
|
||||
mkdir -p "$WorkSpace" 2>/dev/null || true;
|
||||
mkdir -p "$WorkSpace" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
start(){
|
||||
# 启动服务的命令
|
||||
echo "$DevstarHost host.docker.internal" | tee -a /etc/hosts;
|
||||
###############################################################################
|
||||
# Start
|
||||
###############################################################################
|
||||
start() {
|
||||
echo "[INFO] DevContainer start"
|
||||
|
||||
case $OS_ID in
|
||||
[ -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
|
||||
;;
|
||||
*)
|
||||
echo "[ERROR] Unsupported OS: $OS_ID"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
$USER_COMMANDS
|
||||
|
||||
[ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user