Skip to content

Instantly share code, notes, and snippets.

@HoKim98
Last active July 14, 2026 13:28
Show Gist options
  • Select an option

  • Save HoKim98/6aeb4d81e0794443564c1d5dec477823 to your computer and use it in GitHub Desktop.

Select an option

Save HoKim98/6aeb4d81e0794443564c1d5dec477823 to your computer and use it in GitHub Desktop.
install_ai_agent_ubuntu24.sh
#!/usr/bin/env bash
set -Eeuo pipefail
# ==============================================================================
# Ubuntu 24.04 AI Agent 통합 개발환경 자동 설치
# ==============================================================================
# 설치 항목
# - 기본 개발 도구: Git, Git LFS, curl, ffmpeg, build-essential, Node.js/npm
# - Python 가상환경: AI/Agent/Vision/RAG 개발 패키지
# - Ollama 및 로컬 모델: Gemma 4, LLaVA, Qwen3
# - YOLO11 / OpenCV / ByteTrack 지원(ultralytics 내 tracker)
# - LangChain / LangGraph / MCP / FastAPI / JupyterLab
# - 설치 확인 및 예제 프로그램 자동 생성
#
# 기본 실행:
# chmod +x install_ai_agent_ubuntu24.sh
# ./install_ai_agent_ubuntu24.sh
#
# 선택 실행 예:
# INSTALL_NVIDIA_DRIVER=1 ./install_ai_agent_ubuntu24.sh
# SKIP_MODELS=1 ./install_ai_agent_ubuntu24.sh
# GEMMA_MODEL=gemma4:e4b QWEN_MODEL=qwen3:8b ./install_ai_agent_ubuntu24.sh
#
# 주의:
# - NVIDIA 드라이버 자동 설치는 기본적으로 비활성화되어 있습니다.
# - 모델 다운로드에는 수 GB 이상의 디스크 공간과 시간이 필요할 수 있습니다.
# ==============================================================================
PROJECT_DIR="${PROJECT_DIR:-$HOME/ai_agent_workspace}"
VENV_DIR="${VENV_DIR:-$PROJECT_DIR/venv}"
GEMMA_MODEL="${GEMMA_MODEL:-gemma4:e2b}"
VISION_MODEL="${VISION_MODEL:-llava:7b}"
QWEN_MODEL="${QWEN_MODEL:-qwen3:4b}"
SKIP_MODELS="${SKIP_MODELS:-0}"
INSTALL_NVIDIA_DRIVER="${INSTALL_NVIDIA_DRIVER:-0}"
INSTALL_VSCODE="${INSTALL_VSCODE:-1}"
INSTALL_DOCKER="${INSTALL_DOCKER:-0}"
LOG_FILE="${LOG_FILE:-$HOME/ai_agent_install.log}"
exec > >(tee -a "$LOG_FILE") 2>&1
log() { printf '\n\033[1;32m[설치]\033[0m %s\n' "$*"; }
info() { printf '\n\033[1;36m[정보]\033[0m %s\n' "$*"; }
warn() { printf '\n\033[1;33m[주의]\033[0m %s\n' "$*" >&2; }
fail() { printf '\n\033[1;31m[오류]\033[0m %s\n' "$*" >&2; exit 1; }
trap 'fail "명령 실행 실패: $BASH_COMMAND (행: $LINENO). 로그: $LOG_FILE"' ERR
if [ -f /tmp/.ai-agent-ready ]; then
echo '이미 설치되었습니다'
exit
fi
# ------------------------------------------------------------------------------
# 1. 환경 확인
# ------------------------------------------------------------------------------
[[ "$(uname -s)" == "Linux" ]] || fail "Linux 환경에서만 실행할 수 있습니다."
command -v apt-get >/dev/null 2>&1 || fail "apt-get을 찾을 수 없습니다."
if [[ -r /etc/os-release ]]; then
# shellcheck disable=SC1091
source /etc/os-release
info "운영체제: ${PRETTY_NAME:-알 수 없음}"
if [[ "${ID:-}" != "ubuntu" ]]; then
warn "Ubuntu가 아닌 배포판입니다. 일부 설치가 실패할 수 있습니다."
fi
fi
if [[ "$EUID" -eq 0 ]]; then
SUDO=""
REAL_USER="${SUDO_USER:-root}"
else
command -v sudo >/dev/null 2>&1 || fail "sudo가 필요합니다."
SUDO="sudo"
REAL_USER="$USER"
fi
ARCH="$(dpkg --print-architecture)"
[[ "$ARCH" == "amd64" || "$ARCH" == "arm64" ]] \
|| fail "지원하지 않는 아키텍처입니다: $ARCH"
mkdir -p "$PROJECT_DIR"
# ------------------------------------------------------------------------------
# 2. Ubuntu 시스템 패키지
# ------------------------------------------------------------------------------
log "Ubuntu 패키지 목록을 갱신합니다."
$SUDO apt-get update
log "충돌이 발생하는 패키지를 삭제합니다."
$SUDO DEBIAN_FRONTEND=noninteractive apt-get remove --allow-change-held-packages -y \
nodejs \
podman
$SUDO DEBIAN_FRONTEND=noninteractive apt-get autoremove --allow-change-held-packages -y
log "AI 개발에 필요한 시스템 패키지를 설치합니다."
$SUDO DEBIAN_FRONTEND=noninteractive apt-get install -y \
build-essential \
ca-certificates \
curl \
wget \
git \
git-lfs \
unzip \
zip \
jq \
tree \
htop \
nano \
vim \
tmux \
pkg-config \
cmake \
python3 \
python3-dev \
python3-pip \
python3-venv \
python3-full \
ffmpeg \
libgl1 \
libsm6 \
libxext6 \
libxrender1 \
libgomp1 \
v4l-utils \
sqlite3 \
redis-server \
nodejs \
zstd
git lfs install || true
$SUDO systemctl enable --now redis-server 2>/dev/null || true
# ------------------------------------------------------------------------------
# 3. 선택: NVIDIA 드라이버
# ------------------------------------------------------------------------------
if lspci 2>/dev/null | grep -qi nvidia; then
info "NVIDIA GPU가 감지되었습니다."
if [[ "$INSTALL_NVIDIA_DRIVER" == "1" ]]; then
log "Ubuntu 권장 NVIDIA 드라이버를 설치합니다."
$SUDO apt-get install -y ubuntu-drivers-common
$SUDO ubuntu-drivers install
warn "NVIDIA 드라이버 적용을 위해 설치 완료 후 재부팅이 필요할 수 있습니다."
elif command -v nvidia-smi >/dev/null 2>&1; then
nvidia-smi || true
else
warn "NVIDIA 드라이버가 보이지 않습니다."
warn "자동 설치하려면 INSTALL_NVIDIA_DRIVER=1로 다시 실행하십시오."
fi
else
info "NVIDIA GPU가 감지되지 않았습니다. CPU 기반으로 구성합니다."
fi
# ------------------------------------------------------------------------------
# 4. Python 가상환경
# ------------------------------------------------------------------------------
log "Python 가상환경을 준비합니다: $VENV_DIR"
if [[ ! -x "$VENV_DIR/bin/python" ]]; then
python3 -m venv "$VENV_DIR"
fi
PYTHON="$VENV_DIR/bin/python"
PIP="$VENV_DIR/bin/pip"
log "pip 기본 도구를 업그레이드합니다."
"$PYTHON" -m pip install --upgrade pip setuptools wheel
log "AI·Agent·Vision·RAG Python 패키지를 설치합니다."
"$PIP" install --upgrade \
numpy \
pandas \
scipy \
matplotlib \
pillow \
requests \
httpx \
aiohttp \
python-dotenv \
pydantic \
pydantic-settings \
rich \
typer \
tqdm \
psutil \
pyyaml \
orjson \
tenacity \
opencv-python \
ultralytics \
torch \
torchvision \
torchaudio \
transformers \
accelerate \
sentence-transformers \
huggingface-hub \
safetensors \
langchain \
langchain-core \
langchain-community \
langchain-ollama \
langgraph \
langgraph-checkpoint-sqlite \
mcp \
fastapi \
"uvicorn[standard]" \
jupyterlab \
ipykernel \
chromadb \
faiss-cpu \
sqlalchemy \
redis \
beautifulsoup4 \
lxml \
pypdf \
python-docx \
openpyxl
# 가상환경을 Jupyter 커널로 등록
"$PYTHON" -m ipykernel install --user \
--name ai-agent-ubuntu24 \
--display-name "AI Agent (Ubuntu 24.04)" || true
# ------------------------------------------------------------------------------
# 5. Ollama
# ------------------------------------------------------------------------------
if command -v ollama >/dev/null 2>&1; then
info "Ollama가 이미 설치되어 있습니다."
else
log "Ollama를 설치합니다."
curl -fsSL https://ollama.com/install.sh | sh
fi
log "Ollama 서비스를 준비합니다."
if command -v systemctl >/dev/null 2>&1; then
$SUDO systemctl enable --now ollama 2>/dev/null || true
fi
if ! ollama list >/dev/null 2>&1; then
warn "Ollama 서비스 응답이 없어 사용자 백그라운드 서비스를 시작합니다."
nohup ollama serve >"$PROJECT_DIR/ollama.log" 2>&1 &
sleep 6
fi
ollama --version
ollama list >/dev/null 2>&1 || fail "Ollama 서비스에 연결할 수 없습니다."
if [[ "$SKIP_MODELS" == "1" ]]; then
warn "SKIP_MODELS=1: 로컬 모델 다운로드를 생략합니다."
else
log "Gemma 4 모델을 다운로드합니다: $GEMMA_MODEL"
ollama pull "$GEMMA_MODEL"
log "비전 모델을 다운로드합니다: $VISION_MODEL"
ollama pull "$VISION_MODEL"
log "Agent·코딩 보조 모델을 다운로드합니다: $QWEN_MODEL"
ollama pull "$QWEN_MODEL"
fi
# ------------------------------------------------------------------------------
# 6. 선택: Visual Studio Code
# ------------------------------------------------------------------------------
if [[ "$INSTALL_VSCODE" == "1" ]]; then
if command -v code >/dev/null 2>&1; then
info "Visual Studio Code가 이미 설치되어 있습니다."
else
log "Visual Studio Code 설치를 시도합니다."
if command -v snap >/dev/null 2>&1; then
$SUDO snap install code --classic || warn "VS Code 설치에 실패했습니다."
else
warn "snap을 사용할 수 없어 VS Code 설치를 생략합니다."
fi
fi
fi
# ------------------------------------------------------------------------------
# 7. 선택: Docker
# ------------------------------------------------------------------------------
if [[ "$INSTALL_DOCKER" == "1" ]]; then
log "Docker Engine을 Ubuntu 저장소 패키지로 설치합니다."
$SUDO apt-get install -y docker.io docker-compose-v2
$SUDO systemctl enable --now docker
if [[ "$REAL_USER" != "root" ]]; then
$SUDO usermod -aG docker "$REAL_USER"
warn "Docker 그룹 권한은 로그아웃 후 다시 로그인해야 적용됩니다."
fi
fi
# ------------------------------------------------------------------------------
# 8. 프로젝트 구조 및 설정 파일 생성
# ------------------------------------------------------------------------------
log "AI Agent 프로젝트 기본 구조를 생성합니다."
mkdir -p \
"$PROJECT_DIR/apps" \
"$PROJECT_DIR/data" \
"$PROJECT_DIR/models" \
"$PROJECT_DIR/notebooks" \
"$PROJECT_DIR/scripts" \
"$PROJECT_DIR/logs"
cat > "$PROJECT_DIR/.env.example" <<EOF
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=$GEMMA_MODEL
VISION_MODEL=$VISION_MODEL
QWEN_MODEL=$QWEN_MODEL
EOF
cat > "$PROJECT_DIR/activate.sh" <<EOF
#!/usr/bin/env bash
source "$VENV_DIR/bin/activate"
export OLLAMA_BASE_URL="\${OLLAMA_BASE_URL:-http://localhost:11434}"
cd "$PROJECT_DIR"
echo "AI Agent 가상환경 활성화 완료"
echo "Python: \$(python --version)"
echo "작업 폴더: $PROJECT_DIR"
EOF
chmod +x "$PROJECT_DIR/activate.sh"
cat > "$PROJECT_DIR/scripts/check_environment.py" <<'PYEOF'
import importlib
import platform
import subprocess
import sys
packages = [
"cv2", "numpy", "torch", "ultralytics", "transformers",
"langchain", "langgraph", "langchain_ollama", "mcp",
"fastapi", "chromadb", "sentence_transformers",
]
print("=" * 70)
print("AI Agent 개발환경 확인")
print("=" * 70)
print("OS:", platform.platform())
print("Python:", sys.version.split()[0])
for package in packages:
try:
module = importlib.import_module(package)
version = getattr(module, "__version__", "설치됨")
print(f"[OK] {package}: {version}")
except Exception as exc:
print(f"[FAIL] {package}: {exc}")
try:
import torch
print("CUDA 사용 가능:", torch.cuda.is_available())
if torch.cuda.is_available():
print("GPU:", torch.cuda.get_device_name(0))
except Exception:
pass
try:
result = subprocess.run(
["ollama", "list"], capture_output=True, text=True, check=True
)
print("\nOllama 모델:")
print(result.stdout.strip())
except Exception as exc:
print("[FAIL] Ollama:", exc)
PYEOF
cat > "$PROJECT_DIR/apps/simple_agent.py" <<PYEOF
from langchain.agents import create_agent
from langchain_ollama import ChatOllama
MODEL_NAME = "$GEMMA_MODEL"
def get_weather(city: str) -> str:
"""예제용 날씨 도구입니다."""
return f"{city}의 날씨 정보는 실제 API를 연결해 조회하도록 확장할 수 있습니다."
def main() -> None:
model = ChatOllama(
model=MODEL_NAME,
base_url="http://localhost:11434",
temperature=0,
)
agent = create_agent(
model=model,
tools=[get_weather],
system_prompt=(
"당신은 로컬에서 실행되는 한국어 AI Agent입니다. "
"필요하면 제공된 도구를 사용하고 결과를 명료하게 설명하세요."
),
)
result = agent.invoke(
{"messages": [{"role": "user", "content": "광주의 날씨 도구를 시험해 줘."}]}
)
print(result["messages"][-1].content)
if __name__ == "__main__":
main()
PYEOF
cat > "$PROJECT_DIR/apps/ollama_chat.py" <<PYEOF
from langchain_ollama import ChatOllama
MODEL_NAME = "$GEMMA_MODEL"
model = ChatOllama(
model=MODEL_NAME,
base_url="http://localhost:11434",
)
response = model.invoke("AI Agent와 일반 챗봇의 차이를 한국어로 간단히 설명해 줘.")
print(response.content)
PYEOF
cat > "$PROJECT_DIR/scripts/yolo_test.py" <<'PYEOF'
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
print("YOLO11 모델 준비 완료:", model.model_name)
PYEOF
cat > "$PROJECT_DIR/run_checks.sh" <<EOF
#!/usr/bin/env bash
set -e
source "$VENV_DIR/bin/activate"
cd "$PROJECT_DIR"
python scripts/check_environment.py
python scripts/yolo_test.py
EOF
chmod +x "$PROJECT_DIR/run_checks.sh"
cat > "$PROJECT_DIR/start_jupyter.sh" <<EOF
#!/usr/bin/env bash
source "$VENV_DIR/bin/activate"
cd "$PROJECT_DIR"
jupyter lab
EOF
chmod +x "$PROJECT_DIR/start_jupyter.sh"
cat > "$PROJECT_DIR/README_FIRST.txt" <<EOF
Ubuntu 24.04 AI Agent 개발환경
1. 가상환경 활성화
source "$PROJECT_DIR/activate.sh"
2. 환경 점검
"$PROJECT_DIR/run_checks.sh"
3. Ollama 모델 실행
ollama run "$GEMMA_MODEL"
ollama run "$VISION_MODEL"
ollama run "$QWEN_MODEL"
4. LangChain/Ollama 예제
python "$PROJECT_DIR/apps/ollama_chat.py"
5. Agent 도구 호출 예제
python "$PROJECT_DIR/apps/simple_agent.py"
6. JupyterLab
"$PROJECT_DIR/start_jupyter.sh"
7. 기존 CCTV 프로그램 실행 예
source "$VENV_DIR/bin/activate"
cd "\$HOME/다운로드/ibhak"
python yolo_visionllm_v3.py
EOF
# ------------------------------------------------------------------------------
# 9. 설치 확인
# ------------------------------------------------------------------------------
log "Python 핵심 패키지와 YOLO 설치를 확인합니다."
"$PYTHON" "$PROJECT_DIR/scripts/check_environment.py"
(
cd "$PROJECT_DIR"
"$PYTHON" "$PROJECT_DIR/scripts/yolo_test.py"
)
# ------------------------------------------------------------------------------
# 10. 완료 안내
# ------------------------------------------------------------------------------
printf '\n\033[1;36m============================================================\033[0m\n'
printf '\033[1;36m AI Agent 통합 개발환경 설치 완료\033[0m\n'
printf '\033[1;36m============================================================\033[0m\n'
printf '작업 폴더 : %s\n' "$PROJECT_DIR"
printf 'Python 환경 : %s\n' "$VENV_DIR"
printf '설치 로그 : %s\n' "$LOG_FILE"
printf '환경 활성화 : source "%s/activate.sh"\n' "$PROJECT_DIR"
printf '전체 점검 : "%s/run_checks.sh"\n' "$PROJECT_DIR"
printf 'JupyterLab : "%s/start_jupyter.sh"\n' "$PROJECT_DIR"
printf 'Gemma 4 실행 : ollama run %s\n' "$GEMMA_MODEL"
printf 'LLaVA 실행 : ollama run %s\n' "$VISION_MODEL"
printf 'Qwen3 실행 : ollama run %s\n' "$QWEN_MODEL"
printf '사용 안내 : cat "%s/README_FIRST.txt"\n' "$PROJECT_DIR"
if [[ "$INSTALL_NVIDIA_DRIVER" == "1" ]]; then
printf '\nNVIDIA 드라이버를 설치했다면 시스템을 재부팅하십시오:\n'
printf ' sudo reboot\n'
fi
printf '\n설치 완료 후 권장 첫 명령:\n'
printf ' source "%s/activate.sh"\n' "$PROJECT_DIR"
printf ' python apps/ollama_chat.py\n\n'
touch /tmp/.ai-agent-ready
#!/usr/bin/env bash
set -Eeuo pipefail
# Ubuntu 24.04용 CCTV Vision + Ollama/LLaVA 자동 설치 스크립트
# 구성: Python venv + OpenCV + NumPy + Ultralytics + Requests + Ollama + LLaVA
#
# 사용:
# chmod +x install_cctv_ai.sh
# ./install_cctv_ai.sh
#
# 선택 환경변수:
# PROJECT_DIR="$HOME/cctv_project" ./install_cctv_ai.sh
# OLLAMA_MODEL="llava:7b" ./install_cctv_ai.sh
# SKIP_OLLAMA_PULL=1 ./install_cctv_ai.sh
PROJECT_DIR="${PROJECT_DIR:-$HOME/cctv_project}"
VENV_DIR="$PROJECT_DIR/venv"
OLLAMA_MODEL="${OLLAMA_MODEL:-llava}"
GEMMA_MODEL="${GEMMA_MODEL:-gemma4}"
SKIP_OLLAMA_PULL="${SKIP_OLLAMA_PULL:-0}"
log() {
printf '\n\033[1;32m[설치]\033[0m %s\n' "$*"
}
warn() {
printf '\n\033[1;33m[주의]\033[0m %s\n' "$*" >&2
}
fail() {
printf '\n\033[1;31m[오류]\033[0m %s\n' "$*" >&2
exit 1
}
trap 'fail "설치 중 오류가 발생했습니다. 실패한 명령: $BASH_COMMAND"' ERR
if [ -f /tmp/.ai-cctv-ready ]; then
echo '이미 설치되었습니다'
exit
fi
if [[ "$(uname -s)" != "Linux" ]]; then
fail "이 스크립트는 Ubuntu/Linux 환경에서만 실행할 수 있습니다."
fi
if ! command -v apt-get >/dev/null 2>&1; then
fail "apt-get을 찾을 수 없습니다. Ubuntu 24.04 환경인지 확인하십시오."
fi
if [[ "${EUID}" -eq 0 ]]; then
SUDO=""
else
command -v sudo >/dev/null 2>&1 || fail "sudo가 설치되어 있지 않습니다."
SUDO="sudo"
fi
log "시스템 패키지 목록을 갱신합니다."
$SUDO apt-get update
log "충돌이 발생하는 패키지를 삭제합니다."
$SUDO DEBIAN_FRONTEND=noninteractive apt-get remove --allow-change-held-packages -y \
nodejs \
podman
$SUDO DEBIAN_FRONTEND=noninteractive apt-get autoremove --allow-change-held-packages -y
log "필수 시스템 패키지를 설치합니다."
$SUDO apt-get install -y \
python3 \
python3-pip \
python3-venv \
ffmpeg \
libgl1 \
curl \
ca-certificates
log "프로젝트 폴더를 준비합니다: $PROJECT_DIR"
mkdir -p "$PROJECT_DIR"
log "Python 가상환경을 준비합니다."
if [[ ! -x "$VENV_DIR/bin/python" ]]; then
python3 -m venv "$VENV_DIR"
fi
log "pip와 필수 Python 라이브러리를 설치합니다."
"$VENV_DIR/bin/python" -m pip install --upgrade pip setuptools wheel
"$VENV_DIR/bin/python" -m pip install \
opencv-python \
numpy \
ultralytics \
requests
log "YOLO11 모델 다운로드 및 로딩을 시험합니다."
(
cd "$PROJECT_DIR"
"$VENV_DIR/bin/python" -c "from ultralytics import YOLO; YOLO('yolo11n.pt')"
)
if command -v ollama >/dev/null 2>&1; then
log "Ollama가 이미 설치되어 있습니다: $(ollama --version 2>/dev/null || true)"
else
log "Ollama를 설치합니다."
curl -fsSL https://ollama.com/install.sh | sh
fi
log "Ollama 서비스를 준비합니다."
if command -v systemctl >/dev/null 2>&1; then
$SUDO systemctl enable --now ollama 2>/dev/null || true
fi
if ! ollama list >/dev/null 2>&1; then
warn "Ollama 서비스가 아직 응답하지 않습니다. 백그라운드 실행을 시도합니다."
nohup ollama serve >"$PROJECT_DIR/ollama.log" 2>&1 &
sleep 5
fi
ollama --version || fail "Ollama 설치 확인에 실패했습니다."
if [[ "$SKIP_OLLAMA_PULL" == "1" ]]; then
warn "SKIP_OLLAMA_PULL=1 설정으로 모델 다운로드를 건너뜁니다."
else
log "Ollama 모델을 다운로드합니다: $OLLAMA_MODEL"
ollama pull "$OLLAMA_MODEL"
fi
cat > "$PROJECT_DIR/activate.sh" <<EOF
#!/usr/bin/env bash
source "$VENV_DIR/bin/activate"
echo "가상환경 활성화 완료: $VENV_DIR"
EOF
chmod +x "$PROJECT_DIR/activate.sh"
cat > "$PROJECT_DIR/run_yolo_test.sh" <<EOF
#!/usr/bin/env bash
set -e
source "$VENV_DIR/bin/activate"
cd "$PROJECT_DIR"
python -c "from ultralytics import YOLO; YOLO('yolo11n.pt'); print('YOLO11 로딩 성공')"
EOF
chmod +x "$PROJECT_DIR/run_yolo_test.sh"
if [[ "$SKIP_OLLAMA_PULL" == "1" ]]; then
warn "SKIP_OLLAMA_PULL=1 설정으로 Gemma4 다운로드를 건너뜁니다."
else
log "Gemma 모델을 다운로드합니다: $GEMMA_MODEL"
ollama pull "$GEMMA_MODEL"
fi
printf '\n\033[1;36m설치가 완료되었습니다.\033[0m\n'
printf '프로젝트 폴더: %s\n' "$PROJECT_DIR"
printf '가상환경 활성화: source "%s/bin/activate"\n' "$VENV_DIR"
printf 'YOLO 테스트: "%s/run_yolo_test.sh"\n' "$PROJECT_DIR"
printf 'LLaVA 실행 : ollama run %s\n' "$OLLAMA_MODEL"
printf 'Gemma4 실행: ollama run %s\n' "$GEMMA_MODEL"
printf '카메라 확인: ls /dev/video*\n\n'
printf '기존 프로그램 실행 예:\n'
printf ' cd "$HOME/다운로드/ibhak"\n'
printf ' source "%s/bin/activate"\n' "$VENV_DIR"
printf ' python yolo_visionllm_v3.py\n\n'
printf '참고: anthropic 패키지와 ANTHROPIC_API_KEY는 필요하지 않습니다.\n'
touch /tmp/.ai-cctv-ready
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment