This commit is contained in:
birdhead 2025-10-16 21:15:12 +09:00
commit 913b76f946
2038 changed files with 488334 additions and 0 deletions

14
.gitignore vendored Normal file
View File

@ -0,0 +1,14 @@
# 로컬 데이터 볼륨 디렉토리 무시
/data/
/ssdoctors/
# 민감 정보를 포함할 수 있는 환경 변수 파일 무시
.env
.env.*
# 일반적인 IDE 및 시스템 파일 무시
.vscode/
.idea/
__pycache__/
*.pyc

BIN
20250803103455.dump Normal file

Binary file not shown.

82
Containerfile Normal file
View File

@ -0,0 +1,82 @@
# Containerfile
# 기반 이미지를 NVIDIA CUDA 이미지로 변경
FROM nvidia/cuda:12.2.2-devel-ubuntu22.04
#MAINTAINER "birdhead"
# 로케일 및 타임존 환경 변수 설정
ENV LANG en_US.UTF-8
ENV TZ=Asia/Seoul
ENV DEBIAN_FRONTEND=noninteractive
# 패키지 설치
RUN echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse" >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
cron \
rsyslog \
openssh-server \
supervisor \
build-essential \
vim \
curl \
wget \
git \
ca-certificates \
gnupg \
sudo \
pkg-config \
cmake \
g++ \
gdb \
libboost-all-dev \
libdcmtk-dev \
libsndfile1-dev \
libpq-dev \
libnsl-dev \
python3 \
python3-pip \
python3-venv \
jq \
# net-tools \
ffmpeg \
libopenblas-dev && \
ssh-keygen -A && \
mkdir -p /run/sshd && \
chown root:root /run/sshd && \
chmod 755 /run/sshd && \
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get install -y nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 필요한 커스텀 파일들을 이미지에 미리 복사
COPY --chown=root:root ./system/etc/. /etc/
COPY --chown=root:root ./system/usr_local/. /usr/local/
# Set Timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# npm을 사용하여 pm2 전역 설치
RUN npm install pm2 -g && npm cache clean --force
# ssdoctors 사용자가 비밀번호 없이 sudo를 사용하도록 설정
RUN echo "ssdoctors ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ssdoctors
# supervisord.conf 파일을 컨테이너 안으로 복사
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 컨테이너 시작 시 실행할 명령
#CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
# ✅ entrypoint.sh 스크립트 추가
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

70
Containerfile.ori Normal file
View File

@ -0,0 +1,70 @@
# Containerfile
# 기반 이미지를 NVIDIA CUDA 이미지로 변경
FROM nvidia/cuda:12.2.2-devel-ubuntu22.04
#MAINTAINER "birdhead"
# 로케일 및 타임존 환경 변수 설정
ENV LANG en_US.UTF-8
ENV TZ=Asia/Seoul
ENV DEBIAN_FRONTEND=noninteractive
# 패키지 설치
RUN \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse" >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
cron rsyslog openssh-server supervisor \
build-essential vim curl wget git ca-certificates gnupg \
sudo pkg-config \
cmake g++ gdb \
libboost-all-dev libdcmtk-dev libsndfile1-dev \
libpq-dev libnsl-dev \
python3 python3-pip python3-venv jq net-utils \
ffmpeg libopenblas-dev && \
\
# --- SSH 호스트 키 생성 및 필요 디렉토리 설정 ---
ssh-keygen -A && \
mkdir -p /run/sshd && \
chown root:root /run/sshd && \
chmod 755 /run/sshd && \
\
# --- Node.js 22.x 버전 설치 시작 ---
curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \
apt-get install -y nodejs && \
# --- Node.js 설치 끝 ---
\
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 필요한 커스텀 파일들을 이미지에 미리 복사
COPY --chown=root:root ./system/etc/. /etc/
COPY --chown=root:root ./system/usr_local/. /usr/local/
# Set Timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# npm을 사용하여 pm2 전역 설치
RUN npm install pm2 -g && npm cache clean --force
# ssdoctors 사용자가 비밀번호 없이 sudo를 사용하도록 설정
RUN echo "ssdoctors ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ssdoctors
# supervisord.conf 파일을 컨테이너 안으로 복사
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# 컨테이너 시작 시 실행할 명령
#CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
# ✅ entrypoint.sh 스크립트 추가
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

78
Containerfile.ori.v2 Normal file
View File

@ -0,0 +1,78 @@
# image_files/Containerfile
FROM localhost/base-server:latest
MAINTAINER "birdhead"
# 로케일 및 타임존 환경 변수 설정
ENV LANG en_US.UTF-8
ENV TZ=Asia/Seoul
ENV DEBIAN_FRONTEND=noninteractive
# ✅ 1. 필요한 커스텀 파일들을 이미지에 미리 복사합니다.
# 이 경로는 docker-compose.yml이 있는 위치를 기준으로 합니다.
COPY --chown=root:root ./system/etc/. /etc/
COPY --chown=root:root ./system/usr_local/. /usr/local/
# cron 패키지만 설치하도록 RUN 구문 대폭 수정
RUN \
rm -f /etc/apt/sources.list.d/ubuntu.sources && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ noble main restricted universe multiverse" > /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ noble-updates main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://kr.archive.ubuntu.com/ubuntu/ noble-backports main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse" >> /etc/apt/sources.list && \
echo "deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse" >> /etc/apt/sources.list && \
apt-get update && \
# ✅ blas 관련 패키지를 검색하여 정확한 이름을 찾습니다.
apt-cache search blas && \
# ✅ 검색된 이름을 바탕으로 패키지를 설치합니다.
# Ubuntu 24.04 (noble)에서는 libopenblas-dev가 기본일 수 있습니다.
apt-get install -y --no-install-recommends \
cron rsyslog openssh-server supervisor \
build-essential vim curl wget git ca-certificates gnupg \
sudo pkg-config \
cmake g++ gdb \
libboost-all-dev libdcmtk-dev libsndfile1-dev \
libpq-dev libnsl-dev \
python3 python3-pip python3-venv \
ffmpeg libopenblas-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set Timezone
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# --- [추가] npm을 사용하여 pm2 전역 설치 ---
RUN npm install pm2 -g && npm cache clean --force
# [추가] ssdoctors 사용자가 비밀번호 없이 sudo를 사용하도록 설정
RUN echo "ssdoctors ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ssdoctors
# 위에서 작성한 supervisord.conf 파일을 컨테이너 안으로 복사
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Supervisor 설정 파일을 기본 위치에 링크하여 supervisorctl이 쉽게 찾도록 함
RUN ln -s /etc/supervisor/conf.d/supervisord.conf /etc/supervisord.conf
# start.sh 스크립트를 복사하고 실행 권한 부여
#COPY start.sh /usr/local/bin/start.sh
#RUN chmod +x /usr/local/bin/start.sh
# 컨테이너 시작 시 실행할 명령을 새로운 start.sh로 변경
#ENTRYPOINT ["/usr/local/bin/start.sh"]
#CMD []
# ENTRYPOINT는 준비 스크립트를 실행
#ENTRYPOINT ["/usr/local/bin/start.sh"]
# CMD는 supervisord를 실행 (ENTRYPOINT의 마지막 exec "$@"를 통해 실행됨)
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]

54
Containerfile.working Normal file
View File

@ -0,0 +1,54 @@
# image_files/Containerfile
FROM localhost/base-server:latest
MAINTAINER "birdhead"
# 로케일 및 타임존 환경 변수 설정
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV TZ=Asia/Seoul
ENV DEBIAN_FRONTEND=noninteractive
# 단일 RUN 명령으로 레이어를 최소화하고 이미지 크기를 최적화
RUN \
apt-get update && \
# 로케일 및 필수 유틸리티 설치
apt-get install -y --no-install-recommends \
locales curl gnupg sudo lsb-release \
&& \
# en_US.UTF-8 로케일 생성
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
locale-gen && \
\
# PostgreSQL 17 공식 저장소 추가 및 설치
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql-archive-keyring.gpg && \
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list && \
\
# pgAdmin4 공식 저장소 추가
curl -fsS https://www.pgadmin.org/static/packages_pgadmin_org.pub | gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg && \
echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && \
\
# 패키지 목록 다시 업데이트 후 설치
apt-get update && \
apt-get install -y --no-install-recommends \
postgresql-17 \
pgadmin4-web \
apache2 \
&& \
# 설치 후 캐시 정리
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# entrypoint 스크립트 복사 및 실행 권한 부여
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# 포트 노출
EXPOSE 5432
EXPOSE 80
# 컨테이너 시작 시 실행할 명령 지정
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD []

5
backup_db.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
export NOW=$(date +'%Y%m%d%H%M%S')
#pg_dump -h ssdoctors.com -p 15433 -U spacs -d polyp -F c > ${NOW}.dump
pg_dump --no-owner --no-acl -h ssdoctors.com -p 15433 -U spacs -d polyp -F c > "${NOW}.dump"

29
bigdata.container Normal file
View File

@ -0,0 +1,29 @@
# ~/usb_work/podman/bigdata-server/bigdata.container
[Unit]
Description=BigData Server Container
After=network-online.target
[Container]
ContainerName=bigdata_server
Image=localhost/bigdata-server_base-server:latest
Build=Containerfile
NetworkMode=host
User=0:0
Environment=NVIDIA_VISIBLE_DEVICES=all
Environment=TZ=Asia/Seoul
Environment=DB_HOST=localhost
Environment=DB_PORT=15433
Environment=DB_USER=spacs
Environment=DB_PASSWORD=scaps
Environment=DB_NAME=spacs
Volume=./ssdoctors:/home/ssdoctors:Z
Volume=./data/workspace:/workspace:Z
RunInit=yes
# ✅ GPU 사용을 위한 핵심 옵션
Device=/dev/nvidia0
Device=/dev/nvidiactl
Device=/dev/nvidia-uvm
[Install]
WantedBy=default.target

29
bigdata.service Normal file
View File

@ -0,0 +1,29 @@
# ~/usb_work/podman/bigdata-server/bigdata.container
[Unit]
Description=BigData Server Container
After=network-online.target
[Container]
ContainerName=bigdata_server
Image=localhost/bigdata-server_base-server:latest
Build=Containerfile
NetworkMode=host
User=0:0
Environment=NVIDIA_VISIBLE_DEVICES=all
Environment=TZ=Asia/Seoul
Environment=DB_HOST=localhost
Environment=DB_PORT=15433
Environment=DB_USER=spacs
Environment=DB_PASSWORD=scaps
Environment=DB_NAME=spacs
Volume=./ssdoctors:/home/ssdoctors:Z
Volume=./data/workspace:/workspace:Z
RunInit=yes
# ✅ GPU 사용을 위한 핵심 옵션
Device=/dev/nvidia0
Device=/dev/nvidiactl
Device=/dev/nvidia-uvm
[Install]
WantedBy=default.target

6
build.sh Executable file
View File

@ -0,0 +1,6 @@
#!/bin/bash
#podman build -t postgresql-image .
podman-compose up --build -d

4
create.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/bash
podman build -t bigdata_server --network=host --security-opt=label=disable --device=nvidia.com/gpu=all -f Containerfile .

72
docker-compose.yml Normal file
View File

@ -0,0 +1,72 @@
version: '3.8'
services:
base-server:
build:
context: .
dockerfile: Containerfile
container_name: bigdata_server
restart: unless-stopped
network_mode: "host"
# podman-compose에서 동작하는 예시 방식
devices:
- "nvidia.com/gpu=all"
labels:
- "run.oci.runtime.podman.devices=all"
security_opt:
- label=disable # 또는 SELinux 사용시 제거하고 :Z 사용
- seccomp=unconfined
environment:
- NVIDIA_VISIBLE_DEVICES=all
- TZ=Asia/Seoul
- DB_HOST=localhost
- DB_PORT=15433
- DB_USER=spacs
- DB_PASSWORD=scaps
- DB_NAME=spacs
volumes:
- ./ssdoctors:/home/ssdoctors # (아래 node_modules 처리 참고)
- ./data/workspace:/workspace
# 2. PostgreSQL 서비스 (Bigdata용)
postgres:
build:
context: .
dockerfile: postgres.Containerfile
container_name: bigdata_postgresql # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
#pull_policy: always
#user: '70:70'
init: true
privileged: true
network_mode: "host"
ports:
- "15433:5432"
command: postgres -c port=15433 -c shared_preload_libraries=pg_cron -c cron.database_name=spacs
environment:
- TZ=Asia/Seoul
- POSTGRES_USER=spacs
- POSTGRES_PASSWORD=scaps
- POSTGRES_DB=spacs
- PGPORT=15433
volumes:
- ./data/postgresql:/var/lib/postgresql/data:Z
security_opt:
- label=disable
- seccomp=unconfined
#healthcheck:
# test: ["CMD-SHELL", "pg_isready -U spacs -d spacs -p 15433"]
# interval: 10s
# timeout: 5s
# retries: 5
volumes:
# (필요시 node_modules용 named volume 추가 아래 참고)

74
docker-compose.yml.gpu Normal file
View File

@ -0,0 +1,74 @@
#version: "3.9"
services:
base-server:
build:
context: .
dockerfile: Containerfile
#network: host
container_name: bigdata_server
restart: unless-stopped
network_mode: "host"
# podman-compose에서 동작하는 예시 방식
devices:
- "nvidia.com/gpu=all"
labels:
- "run.oci.runtime.podman.devices=all"
security_opt:
- label=disable # 또는 SELinux 사용시 제거하고 :Z 사용
- seccomp=unconfined
environment:
- NVIDIA_VISIBLE_DEVICES=all
- TZ=Asia/Seoul
- DB_HOST=localhost
- DB_PORT=15433
- DB_USER=spacs
- DB_PASSWORD=scaps
- DB_NAME=spacs
volumes:
- ./ssdoctors:/home/ssdoctors # (아래 node_modules 처리 참고)
- ./data/workspace:/workspace
# 2. PostgreSQL 서비스 (Bigdata용)
postgres:
build:
context: .
dockerfile: postgres.Containerfile
# network: host
container_name: bigdata_postgresql # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
#pull_policy: always
#user: '70:70'
init: true
privileged: true
network_mode: "host"
ports:
- "15433:5432"
command: postgres -c port=15433 -c shared_preload_libraries=pg_cron -c cron.database_name=spacs
environment:
- TZ=Asia/Seoul
- POSTGRES_USER=spacs
- POSTGRES_PASSWORD=scaps
- POSTGRES_DB=spacs
- PGPORT=15433
volumes:
- ./data/postgresql:/var/lib/postgresql/data:Z
security_opt:
- label=disable
- seccomp=unconfined
#healthcheck:
# test: ["CMD-SHELL", "pg_isready -U spacs -d spacs -p 15433"]
# interval: 10s
# timeout: 5s
# retries: 5
volumes:
# (필요시 node_modules용 named volume 추가 아래 참고)

77
docker-compose.yml.test Normal file
View File

@ -0,0 +1,77 @@
# /work/podman/bigdata-server/docker-compose.yml
version: '3.8'
services:
# 1. Base Server 서비스 (Bigdata용)
base-server:
build:
context: .
dockerfile: Containerfile
# image: localhost/base-server:latest
container_name: bigdata_server # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
#privileged: true
runtime: nvidia
# user: "${UID}:${GID}"
#labels: # ✅ 이 부분을 추가합니다.
# - "io.podman.compose.runtime=nvidia"
depends_on:
- postgres
#condition: service_healthy
# deploy:
#resources:
#reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all # ✅ GPU를 사용하기 위한 필수 환경 변수
- TZ=Asia/Seoul
- DB_HOST=localhost
- DB_PORT=15433
- DB_USER=spacs
- DB_PASSWORD=scaps
- DB_NAME=spacs
#devices:
#- /dev/nvidia0:/dev/nvidia0
#- /dev/nvidiactl:/dev/nvidiactl
#- /dev/nvidia-uvm:/dev/nvidia-uvm
#security_opt:
#- label=disable
network_mode: "host"
#cap_add:
# - SYS_PTRACE
volumes:
- ./ssdoctors:/home/ssdoctors:Z
# - ./system/usr_local:/usr/local:Z
#- ./system/etc:/etc:Z
- ./data/workspace:/workspace:Z
# 2. PostgreSQL 서비스 (Bigdata용)
postgres:
build:
context: .
dockerfile: postgres.Containerfile
container_name: bigdata_postgresql # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
#pull_policy: always
#user: '70:70'
init: true
#privileged: true
network_mode: "host"
command: postgres -c port=15433 -c shared_preload_libraries=pg_cron -c cron.database_name=spacs
environment:
- TZ=Asia/Seoul
- POSTGRES_USER=spacs
- POSTGRES_PASSWORD=scaps
- POSTGRES_DB=spacs
- PGPORT=15433
volumes:
- ./data/postgresql:/var/lib/postgresql/data:Z
#healthcheck:
# test: ["CMD-SHELL", "pg_isready -U spacs -d spacs -p 15433"]
# interval: 10s
# timeout: 5s
# retries: 5

72
docker-compose.yml.v1 Normal file
View File

@ -0,0 +1,72 @@
# /work/podman/bigdata-server/docker-compose.yml
version: '3.8'
services:
# 1. Base Server 서비스 (Bigdata용)
base-server:
build:
context: .
dockerfile: Containerfile
# image: localhost/base-server:latest
container_name: bigdata_server # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
privileged: true
# user: "${UID}:${GID}"
labels: # ✅ 이 부분을 추가합니다.
- "io.podman.compose.runtime=nvidia"
depends_on:
- postgres
#condition: service_healthy
# deploy:
#resources:
#reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities: [gpu]
environment:
- NVIDIA_VISIBLE_DEVICES=all # ✅ GPU를 사용하기 위한 필수 환경 변수
- TZ=Asia/Seoul
- DB_HOST=localhost
- DB_PORT=15433
- DB_USER=spacs
- DB_PASSWORD=scaps
- DB_NAME=spacs
#devices:
#- /dev/nvidia0:/dev/nvidia0
#- /dev/nvidiactl:/dev/nvidiactl
#- /dev/nvidia-uvm:/dev/nvidia-uvm
#security_opt:
#- label=disable
network_mode: "host"
#cap_add:
# - SYS_PTRACE
volumes:
- ./ssdoctors:/home/ssdoctors:Z
# - ./system/usr_local:/usr/local:Z
#- ./system/etc:/etc:Z
- ./data/workspace:/workspace:Z
# 2. PostgreSQL 서비스 (Bigdata용)
postgres:
build:
context: .
dockerfile: postgres.Containerfile
container_name: bigdata_postgresql # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
#user: "${UID}:${GID}"
network_mode: "host"
command: postgres -c port=15433 -c shared_preload_libraries=pg_cron -c cron.database_name=spacs
environment:
- TZ=Asia/Seoul
- POSTGRES_USER=spacs
- POSTGRES_PASSWORD=scaps
- POSTGRES_DB=spacs
volumes:
- ./data/postgresql:/var/lib/postgresql/data:Z # 이 경로는 bigdata-server/data/postgresql을 가리키게 됨
#healthcheck:
# test: ["CMD-SHELL", "pg_isready -U spacs -d spacs -p 15433"]
# interval: 10s
# timeout: 5s
# retries: 5

View File

@ -0,0 +1,61 @@
# /work/podman/bigdata-server/docker-compose.yml
version: '3.8'
services:
# 1. Base Server 서비스 (Bigdata용)
base-server:
image: localhost/base-server:latest
container_name: bigdata_server # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=spacs
- DB_PASSWORD=scaps
- DB_NAME=spacs
ports:
- "14020:22" # <<< 변경: SSH 포트 (예: 14010 -> 14020)
- "14022:14022" # <<< 변경: 서비스 포트 (예: 14012 -> 14022)
- "14023:14023" # <<< 변경: 서비스 포트
- "14025:1105" # <<< 변경: 서비스 포트
- "14024:1104" # <<< 변경: 서비스 포트
- "14026:14026" # <<< 변경: 서비스 포트
volumes:
- ./ssdoctors:/home/ssdoctors:Z
- ./system/usr_local:/usr/local:Z
- ./system/etc:/etc:Z
- ./data/workspace:/workspace:Z
networks:
- app-network
# 2. PostgreSQL 서비스 (Bigdata용)
postgres:
build:
context: .
dockerfile: postgres.Containerfile
container_name: bigdata_postgresql # <<< 변경: 컨테이너 이름 변경
restart: unless-stopped
command: postgres -c shared_preload_libraries=pg_cron -c cron.database_name=spacs
environment:
POSTGRES_USER: spacs
POSTGRES_PASSWORD: scaps
POSTGRES_DB: spacs
volumes:
- ./data/postgresql:/var/lib/postgresql/data:Z # 이 경로는 bigdata-server/data/postgresql을 가리키게 됨
ports:
- "15433:5432" # <<< 변경: PostgreSQL 접속 포트 (예: 15432 -> 15433)
networks:
- app-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U spacs -d spacs"]
interval: 10s
timeout: 5s
retries: 5
networks:
app-network:
driver: bridge

9
entrypoint.sh Executable file
View File

@ -0,0 +1,9 @@
#!/bin/sh
# /home/ssdoctors 디렉토리와 그 안의 모든 파일 소유권을 ssdoctors 사용자에게 변경
# 이렇게 하면 sshd가 정상적으로 세션을 만들 수 있습니다.
chown -R ssdoctors:ssdoctors /home/ssdoctors
# 소유권 변경 후, 원래 실행하려 했던 supervisor를 실행합니다.
# exec 명령어는 현재 프로세스를 supervisor 프로세스로 완전히 대체합니다.
exec /usr/bin/supervisord -n -c /etc/supervisord.conf

56
install.sh Executable file
View File

@ -0,0 +1,56 @@
#!/bin/bash
# 스크립트 실행 중 오류가 발생하면 즉시 중단
set -e
echo "--- [1/6] 기존 컨테이너 및 systemd 서비스를 정리합니다... ---"
# podman-compose로 실행된 모든 컨테이너 중지 및 삭제
sudo podman-compose down || true
# systemd 서비스 중지 및 비활성화
sudo systemctl stop bigdata.service || true
sudo systemctl disable bigdata.service || true
# 기존 서비스 파일 삭제
sudo rm -f /etc/systemd/system/bigdata.service
# systemd 리로드
sudo systemctl daemon-reload
echo "--- [2/6] 컨테이너 이미지를 빌드합니다... ---"
sudo podman-compose build
echo "--- [3/6] systemd 서비스 생성을 위해 base-server 컨테이너를 생성합니다... ---"
# 이전에 실패했던 컨테이너가 남아있을 수 있으므로 강제 삭제 후 생성
sudo podman rm -f bigdata_server || true
sudo podman create \
--name bigdata_server \
--systemd=always \
--privileged \
--runtime=nvidia \
--network=host \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e TZ=Asia/Seoul \
-e DB_HOST=localhost \
-e DB_PORT=15433 \
-e DB_USER=spacs \
-e DB_PASSWORD=scaps \
-e DB_NAME=spacs \
-v $(pwd)/ssdoctors:/home/ssdoctors:Z \
-v $(pwd)/data/workspace:/workspace:Z \
localhost/bigdata-server_base-server:latest
echo "--- [4/6] base-server를 위한 systemd 서비스 파일을 생성 및 등록합니다... ---"
# podman generate systemd는 create된 컨테이너 설정을 기반으로 서비스 파일을 만듭니다.
sudo podman generate systemd --new --files --name bigdata_server
sudo mv container-bigdata_server.service /etc/systemd/system/bigdata.service
sudo systemctl daemon-reload
echo "--- [5/6] postgres 컨테이너와 base-server 서비스를 시작합니다... ---"
# postgres는 podman-compose로 실행
sudo podman-compose up -d postgres
# base-server는 systemd로 실행 및 부팅 시 자동 시작 활성화
sudo systemctl enable --now bigdata.service
echo "--- [6/6] 설치 완료! 서비스 상태를 확인합니다. ---"
sleep 5 # 서비스가 시작될 시간을 잠시 기다립니다.
sudo podman-compose ps
sudo systemctl status --no-pager -l bigdata.service

52
install.sh.gpu Executable file
View File

@ -0,0 +1,52 @@
#!/bin/bash
# 스크립트 실행 중 오류가 발생하면 즉시 중단
set -e
echo "--- [1/6] 기존 컨테이너 및 systemd 서비스를 정리합니다... ---"
# podman-compose로 실행된 모든 컨테이너 중지 및 삭제
sudo podman-compose down || true
# systemd 서비스 중지 및 비활성화
sudo systemctl stop bigdata.service || true
sudo systemctl disable bigdata.service || true
# 기존 서비스 파일 삭제
sudo rm -f /etc/systemd/system/bigdata.service
# systemd 리로드
sudo systemctl daemon-reload
echo "--- [2/6] 컨테이너 이미지를 빌드합니다... ---"
sudo podman-compose build
echo "--- [3/6] systemd 서비스 생성을 위해 base-server 컨테이너를 생성합니다... ---"
# 이전에 실패했던 컨테이너가 남아있을 수 있으므로 강제 삭제 후 생성
sudo podman rm -f bigdata_server || true
sudo podman create \
--name bigdata_server \
--network=host \
--runtime=nvidia \
-e NVIDIA_VISIBLE_DEVICES=all \
-e TZ=Asia/Seoul \
-e DB_HOST=localhost \
-e DB_PORT=15433 \
-e DB_USER=spacs \
-e DB_PASSWORD=scaps \
-e DB_NAME=spacs \
-v $(pwd)/ssdoctors:/home/ssdoctors:Z \
-v $(pwd)/data/workspace:/workspace:Z \
localhost/bigdata-server_base-server:latest
echo "--- [4/6] base-server를 위한 systemd 서비스 파일을 생성 및 등록합니다... ---"
sudo podman generate systemd --new --files --name bigdata_server
sudo mv container-bigdata_server.service /etc/systemd/system/bigdata.service
sudo systemctl daemon-reload
echo "--- [5/6] postgres 컨테이너와 base-server 서비스를 시작합니다... ---"
# postgres는 podman-compose로 실행
sudo podman-compose up -d postgres
# base-server는 systemd로 실행 및 부팅 시 자동 시작 활성화
sudo systemctl enable --now bigdata.service
echo "--- [6/6] 설치 완료! 서비스 상태를 확인합니다. ---"
sleep 5 # 서비스가 시작될 시간을 잠시 기다립니다.
sudo podman-compose ps
sudo systemctl status bigdata.service

39
postgres.Containerfile Normal file
View File

@ -0,0 +1,39 @@
# postgres.Containerfile
# 1. 공식 postgres:17 이미지를 기반으로 시작합니다.
FROM docker.io/library/postgres:17
# 2. 패키지 설치를 위해 root 권한으로 전환합니다.
USER root
# 3. apt 패키지 및 Python 패키지 설치
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg \
python3 python3-pip \
lsb-release && \
\
# PostgreSQL 저장소 추가
mkdir -p /etc/apt/keyrings && \
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/keyrings/postgresql-archive-keyring.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list > /dev/null && \
\
# 패키지 목록 업데이트 및 확장 기능들 설치
apt-get update && \
apt-get install -y --no-install-recommends \
postgresql-17-mysql-fdw \
postgresql-17-cron \
postgresql-plpython3-17 && \
\
# Python 패키지 설치
python3 -m pip install --no-cache-dir --break-system-packages korean-romanizer && \
\
# 설치 후 불필요한 파일 정리
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 4. 보안을 위해 다시 postgres 사용자로 전환합니다.
USER postgres

View File

@ -0,0 +1,32 @@
# 1. 공식 postgres:17 이미지를 기반으로 시작합니다.
FROM docker.io/library/postgres:17
# 2. 패키지 설치를 위해 root 권한으로 전환합니다.
USER root
# 3. mysql_fdw 설치에 필요한 패키지들을 설치하고 저장소를 추가합니다.
# base-server의 Containerfile에서 했던 작업과 동일합니다.
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
curl \
gnupg \
lsb-release && \
\
# PostgreSQL 저장소 추가
mkdir -p /etc/apt/keyrings && \
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/keyrings/postgresql-archive-keyring.gpg && \
echo "deb [signed-by=/etc/apt/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list > /dev/null && \
\
# 패키지 목록 업데이트 및 확장 기능들 설치
apt-get update && \
apt-get install -y --no-install-recommends \
postgresql-17-mysql-fdw \
postgresql-17-cron && \
\
# 설치 후 불필요한 파일 정리
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# 4. 보안을 위해 다시 postgres 사용자로 전환합니다.
USER postgres

10
restore_db.sh Executable file
View File

@ -0,0 +1,10 @@
#!/bin/bash
if [ $# -eq 0 ]; then
echo "오류: 복원할 덤프 파일 이름을 파라미터로 전달해야 합니다."
echo "사용법: $0 [덤프 파일명]"
exit 1
fi
pg_restore --no-owner --no-privileges -h ssdoctors.com -p 15433 -U spacs -d polyp $1

12
rm.sh Executable file
View File

@ -0,0 +1,12 @@
#!/bin/bash
#podman stop postgres_pgadmin_dev
#podman rm postgres_pgadmin_dev
#podman pod rm postgresql_pod
podman-compose down

3
service.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
podman-compose up -d

29
service.sh.old Executable file
View File

@ -0,0 +1,29 @@
#!/bin/bash
echo '---------------------------------------------------------------'
podman pod create --name postgresql_pod -p 55432:5432 -p 50002:80
podman run --restart=unless-stopped \
--pod=postgresql_pod \
--name pgadmin4_dev \
-e 'PGADMIN_DEFAULT_EMAIL=birdhead76@gmail.com' \
-e 'PGADMIN_DEFAULT_PASSWORD=1813Bird!' \
-d docker.io/dpage/pgadmin4
podman run --pod=postgresql_pod \
-v /work/podman/postgresql/data:/var/lib/postgresql/data:Z \
-e POSTGRES_PASSWORD=scaps \
-e POSTGRES_USER=spacs \
--name postgresdb_dev \
-d docker.io/library/postgres
#-t ghcr.io/wg-easy/wg-easy:latest
echo '---------------------------------------------------------------'

624
spacs.sql Normal file
View File

@ -0,0 +1,624 @@
--
-- PostgreSQL database dump
--
-- Dumped from database version 14.8
-- Dumped by pg_dump version 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1)
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;
SET default_tablespace = '';
SET default_table_access_method = heap;
--
-- Name: SImage; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public."SImage" (
id integer NOT NULL,
name text DEFAULT ''::text NOT NULL,
value integer NOT NULL
);
ALTER TABLE public."SImage" OWNER TO spacs;
--
-- Name: SImage_id_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public."SImage_id_seq"
AS integer
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public."SImage_id_seq" OWNER TO spacs;
--
-- Name: SImage_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public."SImage_id_seq" OWNED BY public."SImage".id;
--
-- Name: _prisma_migrations; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public._prisma_migrations (
id character varying(36) NOT NULL,
checksum character varying(64) NOT NULL,
finished_at timestamp with time zone,
migration_name character varying(255) NOT NULL,
logs text,
rolled_back_at timestamp with time zone,
started_at timestamp with time zone DEFAULT now() NOT NULL,
applied_steps_count integer DEFAULT 0 NOT NULL
);
ALTER TABLE public._prisma_migrations OWNER TO spacs;
--
-- Name: s_image; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public.s_image (
index integer NOT NULL,
created_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
image_instance_uid character varying(256) DEFAULT ''::character varying NOT NULL,
file_location character varying(1024) DEFAULT ''::character varying NOT NULL,
acquisition_number integer NOT NULL,
image_number integer NOT NULL,
patient_index integer NOT NULL,
study_index integer NOT NULL,
series_index integer NOT NULL
);
ALTER TABLE public.s_image OWNER TO spacs;
--
-- Name: s_image_index_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public.s_image_index_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.s_image_index_seq OWNER TO spacs;
--
-- Name: s_image_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public.s_image_index_seq OWNED BY public.s_image.index;
--
-- Name: s_order; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public.s_order (
index integer NOT NULL,
created_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
study_reserve_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
order_modality character varying(16) DEFAULT ''::character varying,
order_name character varying(64) DEFAULT ''::character varying,
order_code character varying(64) DEFAULT ''::character varying,
order_status character varying(16) DEFAULT ''::character varying,
order_reason character varying(256) DEFAULT ''::character varying,
accession_number bigint DEFAULT 0,
physician_name character varying(64) DEFAULT ''::character varying,
order_department character varying(64) DEFAULT ''::character varying,
study_complete_date character varying(14) DEFAULT NULL::character varying,
status_flag character varying(1) DEFAULT 'Y'::character varying,
patient_index bigint NOT NULL
);
ALTER TABLE public.s_order OWNER TO spacs;
--
-- Name: s_order_index_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public.s_order_index_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.s_order_index_seq OWNER TO spacs;
--
-- Name: s_order_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public.s_order_index_seq OWNED BY public.s_order.index;
--
-- Name: s_patient; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public.s_patient (
index integer NOT NULL,
created_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
patient_name character varying(64) DEFAULT ''::character varying NOT NULL,
patient_id character varying(128) DEFAULT ''::character varying NOT NULL,
patient_uid character varying(128) DEFAULT ''::character varying,
patient_sex character varying(8) DEFAULT ''::character varying,
patient_birth_date character varying(8) DEFAULT ''::character varying,
patient_age character varying(4) DEFAULT ''::character varying,
patient_location character varying(8) DEFAULT ''::character varying
);
ALTER TABLE public.s_patient OWNER TO spacs;
--
-- Name: s_patient_index_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public.s_patient_index_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.s_patient_index_seq OWNER TO spacs;
--
-- Name: s_patient_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public.s_patient_index_seq OWNED BY public.s_patient.index;
--
-- Name: s_series; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public.s_series (
index integer NOT NULL,
created_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
series_instance_uid character varying(256) DEFAULT ''::character varying NOT NULL,
series_description character varying(256) DEFAULT ''::character varying NOT NULL,
series_report character varying(4096) DEFAULT ''::character varying NOT NULL,
modality character varying(16) DEFAULT ''::character varying NOT NULL,
patient_index integer NOT NULL,
study_index integer NOT NULL
);
ALTER TABLE public.s_series OWNER TO spacs;
--
-- Name: s_series_index_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public.s_series_index_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.s_series_index_seq OWNER TO spacs;
--
-- Name: s_series_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public.s_series_index_seq OWNED BY public.s_series.index;
--
-- Name: s_study; Type: TABLE; Schema: public; Owner: spacs
--
CREATE TABLE public.s_study (
index integer NOT NULL,
created_datetime character varying(14) DEFAULT to_char(now(), 'YYYYMMDDhhmmss'::text),
study_instance_uid character varying(256) DEFAULT ''::character varying NOT NULL,
study_description character varying(256) DEFAULT ''::character varying NOT NULL,
study_report character varying(4096) DEFAULT ''::character varying NOT NULL,
study_date character varying(8) DEFAULT ''::character varying NOT NULL,
study_time character varying(6) DEFAULT ''::character varying NOT NULL,
order_index integer NOT NULL,
patient_index integer NOT NULL
);
ALTER TABLE public.s_study OWNER TO spacs;
--
-- Name: s_study_index_seq; Type: SEQUENCE; Schema: public; Owner: spacs
--
CREATE SEQUENCE public.s_study_index_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER TABLE public.s_study_index_seq OWNER TO spacs;
--
-- Name: s_study_index_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: spacs
--
ALTER SEQUENCE public.s_study_index_seq OWNED BY public.s_study.index;
--
-- Name: SImage id; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public."SImage" ALTER COLUMN id SET DEFAULT nextval('public."SImage_id_seq"'::regclass);
--
-- Name: s_image index; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_image ALTER COLUMN index SET DEFAULT nextval('public.s_image_index_seq'::regclass);
--
-- Name: s_order index; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_order ALTER COLUMN index SET DEFAULT nextval('public.s_order_index_seq'::regclass);
--
-- Name: s_patient index; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_patient ALTER COLUMN index SET DEFAULT nextval('public.s_patient_index_seq'::regclass);
--
-- Name: s_series index; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_series ALTER COLUMN index SET DEFAULT nextval('public.s_series_index_seq'::regclass);
--
-- Name: s_study index; Type: DEFAULT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_study ALTER COLUMN index SET DEFAULT nextval('public.s_study_index_seq'::regclass);
--
-- Data for Name: SImage; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public."SImage" (id, name, value) FROM stdin;
2 test2 2
3 test3 3
4 test4 4
1 test11 1
5 test5 5
\.
--
-- Data for Name: _prisma_migrations; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public._prisma_migrations (id, checksum, finished_at, migration_name, logs, rolled_back_at, started_at, applied_steps_count) FROM stdin;
586a87d8-29f7-4f39-9c27-711e4768f2fd d47653fd619c9200de79be046d103ff8533322bc8106665291f20ce18d3d18ab 2023-06-04 20:30:17.821879+09 20230604113017_init \N \N 2023-06-04 20:30:17.811107+09 1
\.
--
-- Data for Name: s_image; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public.s_image (index, created_datetime, image_instance_uid, file_location, acquisition_number, image_number, patient_index, study_index, series_index) FROM stdin;
1 20230608100617 1.2.34.5678.20230608103818.1.1.4 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.4_4.dcm 0 4 1 1 1
2 20230608100649 1.2.34.5678.20230608103818.1.1.5 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.5_5.dcm 0 5 1 1 1
3 20230608100650 1.2.34.5678.20230608103818.1.1.6 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.6_6.dcm 0 6 1 1 1
4 20230608100650 1.2.34.5678.20230608103818.1.1.7 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.7_7.dcm 0 7 1 1 1
5 20230608100650 1.2.34.5678.20230608103818.1.1.8 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.8_8.dcm 0 8 1 1 1
6 20230608100651 1.2.34.5678.20230608103818.1.1.9 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.9_9.dcm 0 9 1 1 1
7 20230608100651 1.2.34.5678.20230608103818.1.1.10 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.10_10.dcm 0 10 1 1 1
8 20230608100651 1.2.34.5678.20230608103818.1.1.11 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.11_11.dcm 0 11 1 1 1
9 20230608100651 1.2.34.5678.20230608103818.1.1.12 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.12_12.dcm 0 12 1 1 1
10 20230608100652 1.2.34.5678.20230608103818.1.1.13 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.13_13.dcm 0 13 1 1 1
11 20230608100653 1.2.34.5678.20230608103818.1.1.14 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.1.1.14_14.dcm 0 14 1 1 1
12 20230608100638 1.2.34.5678.20230608103818.2.1.1 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.1_1.dcm 0 1 2 2 2
13 20230608100639 1.2.34.5678.20230608103818.2.1.2 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.2_2.dcm 0 2 2 2 2
14 20230608100640 1.2.34.5678.20230608103818.2.1.3 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.3_3.dcm 0 3 2 2 2
15 20230608100640 1.2.34.5678.20230608103818.2.1.4 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.4_4.dcm 0 4 2 2 2
16 20230608100640 1.2.34.5678.20230608103818.2.1.5 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.5_5.dcm 0 5 2 2 2
17 20230608100641 1.2.34.5678.20230608103818.2.1.6 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.6_6.dcm 0 6 2 2 2
18 20230608100641 1.2.34.5678.20230608103818.2.1.7 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.7_7.dcm 0 7 2 2 2
19 20230608100643 1.2.34.5678.20230608103818.2.1.8 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.8_8.dcm 0 8 2 2 2
20 20230608100643 1.2.34.5678.20230608103818.2.1.9 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.9_9.dcm 0 9 2 2 2
21 20230608100643 1.2.34.5678.20230608103818.2.1.10 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.10_10.dcm 0 10 2 2 2
22 20230608100643 1.2.34.5678.20230608103818.2.1.11 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.11_11.dcm 0 11 2 2 2
23 20230608100643 1.2.34.5678.20230608103818.2.1.12 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.12_12.dcm 0 12 2 2 2
24 20230608100643 1.2.34.5678.20230608103818.2.1.13 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.13_13.dcm 0 13 2 2 2
25 20230608100643 1.2.34.5678.20230608103818.2.1.14 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.14_14.dcm 0 14 2 2 2
26 20230608100643 1.2.34.5678.20230608103818.2.1.15 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.15_15.dcm 0 15 2 2 2
27 20230608100643 1.2.34.5678.20230608103818.2.1.16 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.16_16.dcm 0 16 2 2 2
28 20230608100643 1.2.34.5678.20230608103818.2.1.17 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.17_17.dcm 0 17 2 2 2
29 20230608100643 1.2.34.5678.20230608103818.2.1.18 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.2.1.18_18.dcm 0 18 2 2 2
30 20230608100648 1.2.34.5678.20230608103818.3.1.1 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.1_1.dcm 0 1 3 3 3
31 20230608100649 1.2.34.5678.20230608103818.3.1.2 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.2_2.dcm 0 2 3 3 3
32 20230608100650 1.2.34.5678.20230608103818.3.1.3 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.3_3.dcm 0 3 3 3 3
33 20230608100650 1.2.34.5678.20230608103818.3.1.4 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.4_4.dcm 0 4 3 3 3
34 20230608100650 1.2.34.5678.20230608103818.3.1.5 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.5_5.dcm 0 5 3 3 3
35 20230608100651 1.2.34.5678.20230608103818.3.1.6 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.6_6.dcm 0 6 3 3 3
36 20230608100652 1.2.34.5678.20230608103818.3.1.7 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.7_7.dcm 0 7 3 3 3
37 20230608100653 1.2.34.5678.20230608103818.3.1.8 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.8_8.dcm 0 8 3 3 3
38 20230608100653 1.2.34.5678.20230608103818.3.1.9 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.9_9.dcm 0 9 3 3 3
39 20230608100654 1.2.34.5678.20230608103818.3.1.10 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.10_10.dcm 0 10 3 3 3
40 20230608100655 1.2.34.5678.20230608103818.3.1.11 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.11_11.dcm 0 11 3 3 3
41 20230608100656 1.2.34.5678.20230608103818.3.1.12 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.12_12.dcm 0 12 3 3 3
42 20230608100657 1.2.34.5678.20230608103818.3.1.13 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.13_13.dcm 0 13 3 3 3
43 20230608100657 1.2.34.5678.20230608103818.3.1.14 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.14_14.dcm 0 14 3 3 3
44 20230608100658 1.2.34.5678.20230608103818.3.1.15 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.3.1.15_15.dcm 0 15 3 3 3
45 20230608100609 1.2.34.5678.20230608103818.4.1.1 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.1_1.dcm 0 1 4 4 4
46 20230608100611 1.2.34.5678.20230608103818.4.1.2 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.2_2.dcm 0 2 4 4 4
47 20230608100611 1.2.34.5678.20230608103818.4.1.3 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.3_3.dcm 0 3 4 4 4
48 20230608100611 1.2.34.5678.20230608103818.4.1.4 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.4_4.dcm 0 4 4 4 4
49 20230608100613 1.2.34.5678.20230608103818.4.1.5 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.5_5.dcm 0 5 4 4 4
50 20230608100613 1.2.34.5678.20230608103818.4.1.6 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.6_6.dcm 0 6 4 4 4
51 20230608100613 1.2.34.5678.20230608103818.4.1.7 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.7_7.dcm 0 7 4 4 4
52 20230608100613 1.2.34.5678.20230608103818.4.1.8 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.8_8.dcm 0 8 4 4 4
53 20230608100613 1.2.34.5678.20230608103818.4.1.9 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.9_9.dcm 0 9 4 4 4
54 20230608100613 1.2.34.5678.20230608103818.4.1.10 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.10_10.dcm 0 10 4 4 4
55 20230608100613 1.2.34.5678.20230608103818.4.1.11 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.11_11.dcm 0 11 4 4 4
56 20230608100613 1.2.34.5678.20230608103818.4.1.12 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.12_12.dcm 0 12 4 4 4
57 20230608100613 1.2.34.5678.20230608103818.4.1.13 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.4.1.13_13.dcm 0 13 4 4 4
58 20230608040617 1.2.34.5678.20230608103818.6.1.1 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.1_1.dcm 0 1 5 5 5
59 20230608040618 1.2.34.5678.20230608103818.6.1.2 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.2_2.dcm 0 2 5 5 5
60 20230608040619 1.2.34.5678.20230608103818.6.1.3 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.3_3.dcm 0 3 5 5 5
61 20230608040619 1.2.34.5678.20230608103818.6.1.4 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.4_4.dcm 0 4 5 5 5
62 20230608040619 1.2.34.5678.20230608103818.6.1.5 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.5_5.dcm 0 5 5 5 5
63 20230608040619 1.2.34.5678.20230608103818.6.1.6 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.6_6.dcm 0 6 5 5 5
64 20230608040620 1.2.34.5678.20230608103818.6.1.7 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.7_7.dcm 0 7 5 5 5
65 20230608040620 1.2.34.5678.20230608103818.6.1.8 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.8_8.dcm 0 8 5 5 5
66 20230608040620 1.2.34.5678.20230608103818.6.1.9 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.9_9.dcm 0 9 5 5 5
67 20230608040621 1.2.34.5678.20230608103818.6.1.10 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.10_10.dcm 0 10 5 5 5
68 20230608040621 1.2.34.5678.20230608103818.6.1.11 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.11_11.dcm 0 11 5 5 5
69 20230608040621 1.2.34.5678.20230608103818.6.1.12 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.12_12.dcm 0 12 5 5 5
70 20230608040621 1.2.34.5678.20230608103818.6.1.13 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.13_13.dcm 0 13 5 5 5
71 20230608040621 1.2.34.5678.20230608103818.6.1.14 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.14_14.dcm 0 14 5 5 5
72 20230608040621 1.2.34.5678.20230608103818.6.1.15 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.15_15.dcm 0 15 5 5 5
73 20230608040621 1.2.34.5678.20230608103818.6.1.16 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.16_16.dcm 0 16 5 5 5
74 20230608040621 1.2.34.5678.20230608103818.6.1.17 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.17_17.dcm 0 17 5 5 5
75 20230608040622 1.2.34.5678.20230608103818.6.1.18 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.18_18.dcm 0 18 5 5 5
76 20230608040622 1.2.34.5678.20230608103818.6.1.19 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.19_19.dcm 0 19 5 5 5
77 20230608040622 1.2.34.5678.20230608103818.6.1.20 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.20_20.dcm 0 20 5 5 5
78 20230608040622 1.2.34.5678.20230608103818.6.1.21 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.21_21.dcm 0 21 5 5 5
79 20230608040622 1.2.34.5678.20230608103818.6.1.22 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.22_22.dcm 0 22 5 5 5
80 20230608040623 1.2.34.5678.20230608103818.6.1.23 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.23_23.dcm 0 23 5 5 5
81 20230608040623 1.2.34.5678.20230608103818.6.1.24 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.24_24.dcm 0 24 5 5 5
82 20230608040623 1.2.34.5678.20230608103818.6.1.25 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.25_25.dcm 0 25 5 5 5
83 20230608040623 1.2.34.5678.20230608103818.6.1.26 Storage\\2023\\06\\08\\ES_1.2.34.5678.20230608103818.6.1.26_26.dcm 0 26 5 5 5
\.
--
-- Data for Name: s_order; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public.s_order (index, created_datetime, study_reserve_datetime, order_modality, order_name, order_code, order_status, order_reason, accession_number, physician_name, order_department, study_complete_date, status_flag, patient_index) FROM stdin;
\.
--
-- Data for Name: s_patient; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public.s_patient (index, created_datetime, patient_name, patient_id, patient_uid, patient_sex, patient_birth_date, patient_age, patient_location) FROM stdin;
1 20230608100617 Test^Hilbert^^ 20230608103818101 M
2 20230608100638 Test^Hilbert^^ 20230608103818102 M
3 20230608100648 Test^Hilbert^^ 20230608103818103 M
4 20230608100609 Test^Hilbert^^ 20230608103818104 M
5 20230608040617 Test^Hilbert^^ 20230608103818106 M
\.
--
-- Data for Name: s_series; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public.s_series (index, created_datetime, series_instance_uid, series_description, series_report, modality, patient_index, study_index) FROM stdin;
1 20230608100617 1.2.34.5678.20230608103818.1.1 ksuaghoahsglahglsahg ES 1 1
2 20230608100638 1.2.34.5678.20230608103818.2.1 ksuaghoahsglahglsahg ES 2 2
3 20230608100648 1.2.34.5678.20230608103818.3.1 ksuaghoahsglahglsahg ES 3 3
4 20230608100609 1.2.34.5678.20230608103818.4.1 ksuaghoahsglahglsahg ES 4 4
5 20230608040617 1.2.34.5678.20230608103818.6.1 ksuaghoahsglahglsahg ES 5 5
6 20230608100638 1.2.34.5678.20230608103818.1.2 ksuaghoahsglahglsahg ES 1 1
\.
--
-- Data for Name: s_study; Type: TABLE DATA; Schema: public; Owner: spacs
--
COPY public.s_study (index, created_datetime, study_instance_uid, study_description, study_report, study_date, study_time, order_index, patient_index) FROM stdin;
1 20230608100617 1.2.34.5678.20230608103818.1 20230608 103833 20 1
2 20230608100638 1.2.34.5678.20230608103818.2 20230608 105033 20 2
3 20230608100648 1.2.34.5678.20230608103818.3 20230608 105043 20 3
4 20230608100609 1.2.34.5678.20230608103818.4 20230608 105104 20 4
5 20230608040617 1.2.34.5678.20230608103818.6 20230608 163012 20 5
\.
--
-- Name: SImage_id_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public."SImage_id_seq"', 5, true);
--
-- Name: s_image_index_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public.s_image_index_seq', 83, true);
--
-- Name: s_order_index_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public.s_order_index_seq', 1, false);
--
-- Name: s_patient_index_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public.s_patient_index_seq', 5, true);
--
-- Name: s_series_index_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public.s_series_index_seq', 5, true);
--
-- Name: s_study_index_seq; Type: SEQUENCE SET; Schema: public; Owner: spacs
--
SELECT pg_catalog.setval('public.s_study_index_seq', 5, true);
--
-- Name: SImage SImage_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public."SImage"
ADD CONSTRAINT "SImage_pkey" PRIMARY KEY (id);
--
-- Name: _prisma_migrations _prisma_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public._prisma_migrations
ADD CONSTRAINT _prisma_migrations_pkey PRIMARY KEY (id);
--
-- Name: s_image s_image_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_image
ADD CONSTRAINT s_image_pkey PRIMARY KEY (index);
--
-- Name: s_order s_order_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_order
ADD CONSTRAINT s_order_pkey PRIMARY KEY (index);
--
-- Name: s_patient s_patient_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_patient
ADD CONSTRAINT s_patient_pkey PRIMARY KEY (index);
--
-- Name: s_series s_series_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_series
ADD CONSTRAINT s_series_pkey PRIMARY KEY (index);
--
-- Name: s_study s_study_pkey; Type: CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_study
ADD CONSTRAINT s_study_pkey PRIMARY KEY (index);
--
-- Name: s_study fk_patient_index; Type: FK CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_study
ADD CONSTRAINT fk_patient_index FOREIGN KEY (patient_index) REFERENCES public.s_patient(index) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: s_series fk_patient_index; Type: FK CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_series
ADD CONSTRAINT fk_patient_index FOREIGN KEY (patient_index) REFERENCES public.s_patient(index) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: s_image fk_patient_index; Type: FK CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_image
ADD CONSTRAINT fk_patient_index FOREIGN KEY (patient_index) REFERENCES public.s_patient(index) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: s_image fk_series_index; Type: FK CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_image
ADD CONSTRAINT fk_series_index FOREIGN KEY (series_index) REFERENCES public.s_series(index) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- Name: s_image fk_study_index; Type: FK CONSTRAINT; Schema: public; Owner: spacs
--
ALTER TABLE ONLY public.s_image
ADD CONSTRAINT fk_study_index FOREIGN KEY (study_index) REFERENCES public.s_study(index) ON UPDATE CASCADE ON DELETE CASCADE;
--
-- PostgreSQL database dump complete
--

5
start.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
podman-compose -f docker-compose.yml.gpu up -d

68
supervisord.conf Executable file
View File

@ -0,0 +1,68 @@
[unix_http_server]
file=/tmp/supervisor.sock
chmod=0700
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
# --- 이 섹션을 새로 추가하세요 ---
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisord]
nodaemon=true
user=root
# --- 시스템 서비스 ---
[program:rsyslog]
command=/usr/sbin/rsyslogd -n # 포그라운드 실행 옵션 -n
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:cron]
command=/usr/sbin/cron -f # 포그라운드 실행 옵션 -f
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:sshd]
command=/bin/sh -c "mkdir -p /run/sshd && /usr/sbin/sshd -D"
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
# --- 애플리케이션 서비스 ---
[program:sveltekit]
command=/usr/bin/pm2-runtime start build/index.js --name sveltekit-app
directory=/home/ssdoctors/project/BigDatapolyp
user=ssdoctors
autostart=true
autorestart=true
# HOME 환경 변수를 명시적으로 지정
environment=HOME="/home/ssdoctors",PATH="/usr/bin:%(ENV_PATH)s",PORT="14023",HOST="0.0.0.0"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stopasgroup=true
killasgroup=true

109
supervisord.conf.ori Executable file
View File

@ -0,0 +1,109 @@
[unix_http_server]
file=/tmp/supervisor.sock
chmod=0700
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
# --- 이 섹션을 새로 추가하세요 ---
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisord]
nodaemon=true
user=root
# --- 시스템 서비스 ---
[program:rsyslog]
command=/usr/sbin/rsyslogd -n # 포그라운드 실행 옵션 -n
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:cron]
command=/usr/sbin/cron -f # 포그라운드 실행 옵션 -f
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:sshd]
command=/usr/sbin/sshd -D # 포그라운드 실행 옵션 -D
user=root
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
# --- 애플리케이션 서비스 ---
[program:sveltekit]
command=/usr/bin/pm2-runtime start build/index.js --name sveltekit-app
directory=/home/ssdoctors/project/SDcmWeb-exec
user=ssdoctors
autostart=true
autorestart=true
# HOME 환경 변수를 명시적으로 지정
environment=HOME="/home/ssdoctors",PATH="/usr/bin:%(ENV_PATH)s",PORT="14013",HOST="0.0.0.0"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
stopasgroup=true
killasgroup=true
[program:mwl-server]
command=/home/ssdoctors/project/mwl-server-exec/mwl-server
directory=/home/ssdoctors/project/mwl-server-exec
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
user=ssdoctors
stopasgroup=true
killasgroup=true
[program:qr-server]
command=/home/ssdoctors/project/qr-server-exec/qr-server
directory=/home/ssdoctors/project/qr-server-exec
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
user=ssdoctors
stopasgroup=true
killasgroup=true
[program:dbhooks]
command=stdbuf -oL /home/ssdoctors/project/dbhooks-exec/dbhooks.sh
directory=/home/ssdoctors/project/dbhooks-exec
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
user=ssdoctors
#stopasgroup=true
#killasgroup=true

0
system/etc/.pwd.lock Normal file
View File

View File

@ -0,0 +1,28 @@
# vim:set ft=sh sw=2 sts=2 et:
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -n "$XDG_RUNTIME_DIR" ] && \
[ "$XDG_RUNTIME_DIR" = "/run/user/`id -u`" ] && \
[ -S "$XDG_RUNTIME_DIR/bus" ]; then
# We are under systemd-logind or something remarkably similar, and
# a user-session socket has already been set up.
#
# Be nice to non-libdbus, non-sd-bus implementations by using
# that as the session bus address in the environment. The check for
# XDG_RUNTIME_DIR = "/run/user/`id -u`" is because we know that
# form of the address, from systemd-logind, doesn't need escaping,
# whereas arbitrary addresses might.
DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus"
export DBUS_SESSION_BUS_ADDRESS
fi
if [ -x "/usr/bin/dbus-update-activation-environment" ]; then
# tell dbus-daemon --session (and systemd --user, if running)
# to put a minimal subset of the Xsession's environment in activated
# services' environments
dbus-update-activation-environment --verbose --systemd \
DBUS_SESSION_BUS_ADDRESS \
DISPLAY \
XAUTHORITY \
XDG_CURRENT_DESKTOP \
${NULL+}
fi

View File

@ -0,0 +1,22 @@
# On systems with systemd running, we expect the agent to be launched
# via systemd's user mode (see
# /usr/lib/systemd/user/gpg-agent.{socket,service} and
# systemd.unit(5)). This allows systemd to clean up the agent
# automatically at logout.
# If systemd is absent from your system, or you do not permit it to
# run in user mode, then you may need to manually launch gpg-agent
# from your session initialization with something like "gpgconf
# --launch gpg-agent"
# Nonetheless, ssh and older versions of gpg require environment
# variables to be set in order to find the agent, so we will set those
# here.
agent_sock=$(gpgconf --list-dirs agent-socket)
export GPG_AGENT_INFO=${agent_sock}:0:1
if [ -n "$(gpgconf --list-options gpg-agent | \
awk -F: '/^enable-ssh-support:/{ print $10 }')" ]; then
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
fi

109
system/etc/adduser.conf Normal file
View File

@ -0,0 +1,109 @@
# /etc/adduser.conf: `adduser' configuration.
# See adduser(8) and adduser.conf(5) for full documentation.
# A commented out setting indicates that this is the default in the
# code. If you need to change those settings, remove the comment and
# make your intended change.
# STDERRMSGLEVEL, STDOUTMSGLEVEL, and LOGMSGLEVEL set the minimum
# priority for messages logged to syslog/journal and the console,
# respectively.
# Values are trace, debug, info, warn, err, and fatal.
# Messages with the set priority or higher get logged to the
# respective medium.
#STDERRMSGLEVEL=warn
#STDOUTMSGLEVEL=info
#SYSLOGLEVEL=info
# The login shell to be used for all new users.
# Default: DSHELL=/bin/bash
#DSHELL=/bin/bash
# The directory in which new home directories should be created.
# Default: DHOME=/home
# DHOME=/home
# The directory from which skeletal user configuration files
# will be copied.
# Default: SKEL=/etc/skel
#SKEL=/etc/skel
# Specify inclusive ranges of UIDs and GIDs from which UIDs and GIDs
# for system users, system groups, non-system users and non-system groups
# can be dynamically allocated.
# Default: FIRST_SYSTEM_UID=100, LAST_SYSTEM_UID=999
#FIRST_SYSTEM_UID=100
#LAST_SYSTEM_UID=999
# Default: FIRST_SYSTEM_GID=100, LAST_SYSTEM_GID=999
#FIRST_SYSTEM_GID=100
#LAST_SYSTEM_GID=999
# Default: FIRST_UID=1000, LAST_UID=59999
#FIRST_UID=1000
#LAST_UID=59999
# Default: FIRST_GID=1000, LAST_GID=59999
#FIRST_GID=1000
#LAST_GID=59999
# Specify a file or a directory containing UID and GID pool.
#UID_POOL=/etc/adduser-pool.conf
#UID_POOL=/etc/adduser-pool.d/
#GID_POOL=/etc/adduser-pool.conf
#GID_POOL=/etc/adduser-pool.d/
# Specify whether each created non-system user will be
# given their own group to use.
# Default: USERGROUPS=yes
#USERGROUPS=yes
# Defines the groupname or GID of the group all newly-created
# non-system users are placed into.
# It is a configuration error to define both variables
# even if the values are consistent.
# Default: USERS_GID=undefined, USERS_GROUP=users
#USERS_GID=100
#USERS_GROUP=users
# The permissions mode for home directories of non-system users.
# Default: DIR_MODE=0750
#DIR_MODE=0750
# The permissions mode for home directories of system users.
# Default: SYS_DIR_MODE=0750
#SYS_DIR_MODE=0750
# If set to a nonempty value, new users will have quotas copied
# from that user with `edquota -p QUOTAUSER newuser'
# Default: QUOTAUSER=""
#QUOTAUSER=""
# Non-system user- and groupnames are checked against this regular
# expression.
# Default: NAME_REGEX="^[a-z][-a-z0-9_]*\$?$"
#NAME_REGEX="^[a-z][-a-z0-9_]*\$?$"
# System user- and groupnames are checked against this regular
# expression.
# Default: SYS_NAME_REGEX="^[A-Za-z_][-A-Za-z0-9_]*\$?$"
#SYS_NAME_REGEX="^[A-Za-z_][-A-Za-z0-9_]*\$?$"
# When populating the newly created home directory of a non-system user,
# files in SKEL matching this regex are not copied.
# Default: SKEL_IGNORE_REGEX="\.(dpkg|ucf)-(old|new|dist|save)$"
#SKEL_IGNORE_REGEX="\.(dpkg|ucf)-(old|new|dist|save)$"
# list of groups that new non-system users will be added to
# if ADD_EXTRA_GROUPS is non-zero or set on the command line.
# Default: EXTRA_GROUPS="users"
#EXTRA_GROUPS="users"
# Setting this to something other than 0 will cause adduser to add
# newly created non-system users to the list of groups defined by
# EXTRA_GROUPS.
# Default: ADD_EXTRA_GROUPS=0
#ADD_EXTRA_GROUPS=0
# use extrausers by default
#USE_EXTRAUSERS=1

View File

@ -0,0 +1,2 @@
Please read the update-alternatives(1) man page for information on this
directory and its contents.

1
system/etc/alternatives/awk Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/mawk

1
system/etc/alternatives/c++ Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/g++

1
system/etc/alternatives/c89 Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/c89-gcc

1
system/etc/alternatives/c99 Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/c99-gcc

1
system/etc/alternatives/cc Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/gcc

1
system/etc/alternatives/cpp Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/cpp

View File

@ -0,0 +1 @@
/usr/bin/vim.basic

1
system/etc/alternatives/ex Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/fakeroot-sysv

View File

@ -0,0 +1 @@
/usr/bin/xzcat

View File

@ -0,0 +1 @@
/usr/bin/xzcmp

View File

@ -0,0 +1 @@
/usr/bin/xzdiff

View File

@ -0,0 +1 @@
/usr/bin/xzegrep

View File

@ -0,0 +1 @@
/usr/bin/xzfgrep

View File

@ -0,0 +1 @@
/usr/bin/xzgrep

View File

@ -0,0 +1 @@
/usr/bin/xzless

View File

@ -0,0 +1 @@
/usr/bin/xz

View File

@ -0,0 +1 @@
/usr/bin/xzmore

View File

@ -0,0 +1 @@
/usr/bin/mawk

View File

@ -0,0 +1 @@
/usr/bin/node

View File

@ -0,0 +1 @@
/usr/bin/less

View File

@ -0,0 +1 @@
/usr/bin/pinentry-curses

1
system/etc/alternatives/rmt Symbolic link
View File

@ -0,0 +1 @@
/usr/sbin/rmt-tar

View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/unxz

1
system/etc/alternatives/vi Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/vim.basic

1
system/etc/alternatives/vim Symbolic link
View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/vim.basic

View File

@ -0,0 +1 @@
/usr/bin/which.debianutils

View File

@ -0,0 +1,2 @@
Acquire::Changelogs::AlwaysOnline "true";
Acquire::http::User-Agent-Non-Interactive "true";

View File

@ -0,0 +1,32 @@
APT
{
NeverAutoRemove
{
"^firmware-linux.*";
"^linux-firmware$";
"^linux-image-[a-z0-9]*$";
"^linux-image-[a-z0-9]*-[a-z0-9]*$";
};
VersionedKernelPackages
{
# kernels
"linux-.*";
"kfreebsd-.*";
"gnumach-.*";
# (out-of-tree) modules
".*-modules";
".*-kernel";
};
Never-MarkAuto-Sections
{
"metapackages";
"tasks";
};
Move-Autobit-Sections
{
"oldlibs";
};
};

View File

@ -0,0 +1,3 @@
// Pre-configure all packages with debconf before they are installed.
// If you don't like it, comment it out.
DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};

View File

@ -0,0 +1 @@
Apt::AutoRemove::SuggestsImportant "false";

View File

@ -0,0 +1,3 @@
DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };
Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";

View File

@ -0,0 +1 @@
APT::Periodic::Enable "0";

View File

@ -0,0 +1 @@
Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";

View File

@ -0,0 +1 @@
Acquire::Languages "none";

View File

@ -0,0 +1,3 @@
Package: nodejs
Pin: origin deb.nodesource.com
Pin-Priority: 600

View File

@ -0,0 +1,3 @@
Package: nsolid
Pin: origin deb.nodesource.com
Pin-Priority: 600

View File

@ -0,0 +1,10 @@
# Ubuntu sources have moved to the /etc/apt/sources.list.d/ubuntu.sources
# file, which uses the deb822 format. Use deb822-formatted .sources files
# to manage package sources in the /etc/apt/sources.list.d/ directory.
# See the sources.list(5) manual page for details.
deb http://kr.archive.ubuntu.com/ubuntu/ noble main restricted universe multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ noble-updates main restricted universe multiverse
deb http://kr.archive.ubuntu.com/ubuntu/ noble-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu noble-security main restricted universe multiverse

View File

@ -0,0 +1 @@
deb [arch=amd64 signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main

View File

@ -0,0 +1,44 @@
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
## Ubuntu distribution repository
##
## The following settings can be adjusted to configure which packages to use from Ubuntu.
## Mirror your choices (except for URIs and Suites) in the security section below to
## ensure timely security updates.
##
## Types: Append deb-src to enable the fetching of source package.
## URIs: A URL to the repository (you may add multiple URLs)
## Suites: The following additional suites can be configured
## <name>-updates - Major bug fix updates produced after the final release of the
## distribution.
## <name>-backports - software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
## Components: Aside from main, the following components can be added to the list
## restricted - Software that may not be under a free license, or protected by patents.
## universe - Community maintained packages. Software in this repository receives maintenance
## from volunteers in the Ubuntu community, or a 10 year security maintenance
## commitment from Canonical when an Ubuntu Pro subscription is attached.
## multiverse - Community maintained of restricted. Software from this repository is
## ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free
## licence. Please satisfy yourself as to your rights to use the software.
## Also, please note that software in multiverse WILL NOT receive any
## review or updates from the Ubuntu security team.
##
## See the sources.list(5) manual page for further settings.
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
## Ubuntu security updates. Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg

71
system/etc/bash.bashrc Normal file
View File

@ -0,0 +1,71 @@
# System-wide .bashrc file for interactive bash(1) shells.
# To enable the settings / commands in this file for login shells as well,
# this file has to be sourced in /etc/profile.
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, overwrite the one in /etc/profile)
# but only if not SUDOing and have SUDO_PS1 set; then assume smart user.
if ! [ -n "${SUDO_USER}" -a -n "${SUDO_PS1}" ]; then
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
# Commented out, don't overwrite xterm -T "title" -n "icontitle" by default.
# If this is an xterm set the title to user@host:dir
#case "$TERM" in
#xterm*|rxvt*)
# PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
# ;;
#*)
# ;;
#esac
# enable bash completion in interactive shells
#if ! shopt -oq posix; then
# if [ -f /usr/share/bash-completion/bash_completion ]; then
# . /usr/share/bash-completion/bash_completion
# elif [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi
#fi
# sudo hint
if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then
case " $(groups) " in *\ admin\ *|*\ sudo\ *)
if [ -x /usr/bin/sudo ]; then
cat <<-EOF
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
EOF
fi
esac
fi
# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
function command_not_found_handle {
# check because c-n-f could've been removed in the meantime
if [ -x /usr/lib/command-not-found ]; then
/usr/lib/command-not-found -- "$1"
return $?
elif [ -x /usr/share/command-not-found/command-not-found ]; then
/usr/share/command-not-found/command-not-found -- "$1"
return $?
else
printf "%s: command not found\n" "$1" >&2
return 127
fi
}
fi

View File

@ -0,0 +1,11 @@
# In git versions < 1.7.12, this shell library was part of the
# git completion script.
#
# Some users rely on the __git_ps1 function becoming available
# when bash-completion is loaded. Continue to load this library
# at bash-completion startup for now, to ease the transition to a
# world order where the prompt function is requested separately.
#
if [[ -e /usr/lib/git-core/git-sh-prompt ]]; then
. /usr/lib/git-core/git-sh-prompt
fi

View File

@ -0,0 +1,15 @@
#
# This file contains a list of port numbers between 600 and 1024,
# which should not be used by bindresvport. bindresvport is mostly
# called by RPC services. This mostly solves the problem, that a
# RPC service uses a well known port of another service.
#
631 # cups
636 # ldaps
655 # tinc
774 # rpasswd
783 # spamd
873 # rsync
921 # lwresd
993 # imaps
995 # pops

View File

@ -0,0 +1,157 @@
# This file lists certificates that you wish to use or to ignore to be
# installed in /etc/ssl/certs.
# update-ca-certificates(8) will update /etc/ssl/certs by reading this file.
#
# This is autogenerated by dpkg-reconfigure ca-certificates.
# Certificates should be installed under /usr/share/ca-certificates
# and files with extension '.crt' is recognized as available certs.
#
# line begins with # is comment.
# line begins with ! is certificate filename to be deselected.
#
mozilla/ACCVRAIZ1.crt
mozilla/AC_RAIZ_FNMT-RCM.crt
mozilla/AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt
mozilla/ANF_Secure_Server_Root_CA.crt
mozilla/Actalis_Authentication_Root_CA.crt
mozilla/AffirmTrust_Commercial.crt
mozilla/AffirmTrust_Networking.crt
mozilla/AffirmTrust_Premium.crt
mozilla/AffirmTrust_Premium_ECC.crt
mozilla/Amazon_Root_CA_1.crt
mozilla/Amazon_Root_CA_2.crt
mozilla/Amazon_Root_CA_3.crt
mozilla/Amazon_Root_CA_4.crt
mozilla/Atos_TrustedRoot_2011.crt
mozilla/Atos_TrustedRoot_Root_CA_ECC_TLS_2021.crt
mozilla/Atos_TrustedRoot_Root_CA_RSA_TLS_2021.crt
mozilla/Autoridad_de_Certificacion_Firmaprofesional_CIF_A62634068.crt
mozilla/BJCA_Global_Root_CA1.crt
mozilla/BJCA_Global_Root_CA2.crt
mozilla/Baltimore_CyberTrust_Root.crt
mozilla/Buypass_Class_2_Root_CA.crt
mozilla/Buypass_Class_3_Root_CA.crt
mozilla/CA_Disig_Root_R2.crt
mozilla/CFCA_EV_ROOT.crt
mozilla/COMODO_Certification_Authority.crt
mozilla/COMODO_ECC_Certification_Authority.crt
mozilla/COMODO_RSA_Certification_Authority.crt
mozilla/Certainly_Root_E1.crt
mozilla/Certainly_Root_R1.crt
mozilla/Certigna.crt
mozilla/Certigna_Root_CA.crt
mozilla/Certum_EC-384_CA.crt
mozilla/Certum_Trusted_Network_CA.crt
mozilla/Certum_Trusted_Network_CA_2.crt
mozilla/Certum_Trusted_Root_CA.crt
mozilla/CommScope_Public_Trust_ECC_Root-01.crt
mozilla/CommScope_Public_Trust_ECC_Root-02.crt
mozilla/CommScope_Public_Trust_RSA_Root-01.crt
mozilla/CommScope_Public_Trust_RSA_Root-02.crt
mozilla/Comodo_AAA_Services_root.crt
mozilla/D-TRUST_BR_Root_CA_1_2020.crt
mozilla/D-TRUST_EV_Root_CA_1_2020.crt
mozilla/D-TRUST_Root_Class_3_CA_2_2009.crt
mozilla/D-TRUST_Root_Class_3_CA_2_EV_2009.crt
mozilla/DigiCert_Assured_ID_Root_CA.crt
mozilla/DigiCert_Assured_ID_Root_G2.crt
mozilla/DigiCert_Assured_ID_Root_G3.crt
mozilla/DigiCert_Global_Root_CA.crt
mozilla/DigiCert_Global_Root_G2.crt
mozilla/DigiCert_Global_Root_G3.crt
mozilla/DigiCert_High_Assurance_EV_Root_CA.crt
mozilla/DigiCert_TLS_ECC_P384_Root_G5.crt
mozilla/DigiCert_TLS_RSA4096_Root_G5.crt
mozilla/DigiCert_Trusted_Root_G4.crt
mozilla/Entrust.net_Premium_2048_Secure_Server_CA.crt
mozilla/Entrust_Root_Certification_Authority.crt
mozilla/Entrust_Root_Certification_Authority_-_EC1.crt
mozilla/Entrust_Root_Certification_Authority_-_G2.crt
mozilla/Entrust_Root_Certification_Authority_-_G4.crt
mozilla/GDCA_TrustAUTH_R5_ROOT.crt
mozilla/GLOBALTRUST_2020.crt
mozilla/GTS_Root_R1.crt
mozilla/GTS_Root_R2.crt
mozilla/GTS_Root_R3.crt
mozilla/GTS_Root_R4.crt
mozilla/GlobalSign_ECC_Root_CA_-_R4.crt
mozilla/GlobalSign_ECC_Root_CA_-_R5.crt
mozilla/GlobalSign_Root_CA.crt
mozilla/GlobalSign_Root_CA_-_R3.crt
mozilla/GlobalSign_Root_CA_-_R6.crt
mozilla/GlobalSign_Root_E46.crt
mozilla/GlobalSign_Root_R46.crt
mozilla/Go_Daddy_Class_2_CA.crt
mozilla/Go_Daddy_Root_Certificate_Authority_-_G2.crt
mozilla/HARICA_TLS_ECC_Root_CA_2021.crt
mozilla/HARICA_TLS_RSA_Root_CA_2021.crt
mozilla/Hellenic_Academic_and_Research_Institutions_ECC_RootCA_2015.crt
mozilla/Hellenic_Academic_and_Research_Institutions_RootCA_2015.crt
mozilla/HiPKI_Root_CA_-_G1.crt
mozilla/Hongkong_Post_Root_CA_3.crt
mozilla/ISRG_Root_X1.crt
mozilla/ISRG_Root_X2.crt
mozilla/IdenTrust_Commercial_Root_CA_1.crt
mozilla/IdenTrust_Public_Sector_Root_CA_1.crt
mozilla/Izenpe.com.crt
mozilla/Microsec_e-Szigno_Root_CA_2009.crt
mozilla/Microsoft_ECC_Root_Certificate_Authority_2017.crt
mozilla/Microsoft_RSA_Root_Certificate_Authority_2017.crt
mozilla/NAVER_Global_Root_Certification_Authority.crt
mozilla/NetLock_Arany_=Class_Gold=_Főtanúsítvány.crt
mozilla/OISTE_WISeKey_Global_Root_GB_CA.crt
mozilla/OISTE_WISeKey_Global_Root_GC_CA.crt
mozilla/QuoVadis_Root_CA_1_G3.crt
mozilla/QuoVadis_Root_CA_2.crt
mozilla/QuoVadis_Root_CA_2_G3.crt
mozilla/QuoVadis_Root_CA_3.crt
mozilla/QuoVadis_Root_CA_3_G3.crt
mozilla/SSL.com_EV_Root_Certification_Authority_ECC.crt
mozilla/SSL.com_EV_Root_Certification_Authority_RSA_R2.crt
mozilla/SSL.com_Root_Certification_Authority_ECC.crt
mozilla/SSL.com_Root_Certification_Authority_RSA.crt
mozilla/SSL.com_TLS_ECC_Root_CA_2022.crt
mozilla/SSL.com_TLS_RSA_Root_CA_2022.crt
mozilla/SZAFIR_ROOT_CA2.crt
mozilla/Sectigo_Public_Server_Authentication_Root_E46.crt
mozilla/Sectigo_Public_Server_Authentication_Root_R46.crt
mozilla/SecureSign_RootCA11.crt
mozilla/SecureTrust_CA.crt
mozilla/Secure_Global_CA.crt
mozilla/Security_Communication_ECC_RootCA1.crt
mozilla/Security_Communication_RootCA2.crt
mozilla/Security_Communication_RootCA3.crt
mozilla/Security_Communication_Root_CA.crt
mozilla/Starfield_Class_2_CA.crt
mozilla/Starfield_Root_Certificate_Authority_-_G2.crt
mozilla/Starfield_Services_Root_Certificate_Authority_-_G2.crt
mozilla/SwissSign_Gold_CA_-_G2.crt
mozilla/SwissSign_Silver_CA_-_G2.crt
mozilla/T-TeleSec_GlobalRoot_Class_2.crt
mozilla/T-TeleSec_GlobalRoot_Class_3.crt
mozilla/TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_1.crt
mozilla/TWCA_Global_Root_CA.crt
mozilla/TWCA_Root_Certification_Authority.crt
mozilla/TeliaSonera_Root_CA_v1.crt
mozilla/Telia_Root_CA_v2.crt
mozilla/TrustAsia_Global_Root_CA_G3.crt
mozilla/TrustAsia_Global_Root_CA_G4.crt
mozilla/Trustwave_Global_Certification_Authority.crt
mozilla/Trustwave_Global_ECC_P256_Certification_Authority.crt
mozilla/Trustwave_Global_ECC_P384_Certification_Authority.crt
mozilla/TunTrust_Root_CA.crt
mozilla/UCA_Extended_Validation_Root.crt
mozilla/UCA_Global_G2_Root.crt
mozilla/USERTrust_ECC_Certification_Authority.crt
mozilla/USERTrust_RSA_Certification_Authority.crt
mozilla/XRamp_Global_CA_Root.crt
mozilla/certSIGN_ROOT_CA.crt
mozilla/certSIGN_Root_CA_G2.crt
mozilla/e-Szigno_Root_CA_2017.crt
mozilla/ePKI_Root_Certification_Authority.crt
mozilla/emSign_ECC_Root_CA_-_C3.crt
mozilla/emSign_ECC_Root_CA_-_G3.crt
mozilla/emSign_Root_CA_-_C1.crt
mozilla/emSign_Root_CA_-_G1.crt
mozilla/vTrus_ECC_Root_CA.crt
mozilla/vTrus_Root_CA.crt

View File

@ -0,0 +1,2 @@
build_name: ubuntu-oci:minimized
serial: 20250714

View File

@ -0,0 +1,2 @@
30 3 * * 0 root test -e /run/systemd/system || SERVICE_MODE=1 /usr/lib/x86_64-linux-gnu/e2fsprogs/e2scrub_all_cron
10 3 * * * root test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r

View File

@ -0,0 +1,55 @@
#!/bin/sh
set -e
# Systemd systems use a systemd timer unit which is preferable to
# run. We want to randomize the apt update and unattended-upgrade
# runs as much as possible to avoid hitting the mirrors all at the
# same time. The systemd time is better at this than the fixed
# cron.daily time
if [ -d /run/systemd/system ]; then
exit 0
fi
check_power()
{
# laptop check, on_ac_power returns:
# 0 (true) System is on main power
# 1 (false) System is not on main power
# 255 (false) Power status could not be determined
# Desktop systems always return 255 it seems
if command -v on_ac_power >/dev/null; then
if on_ac_power; then
:
elif [ $? -eq 1 ]; then
return 1
fi
fi
return 0
}
# sleep for a random interval of time (default 30min)
# (some code taken from cron-apt, thanks)
random_sleep()
{
RandomSleep=1800
eval $(apt-config shell RandomSleep APT::Periodic::RandomSleep)
if [ $RandomSleep -eq 0 ]; then
return
fi
if [ -z "$RANDOM" ] ; then
# A fix for shells that do not have this bash feature.
RANDOM=$(( $(dd if=/dev/urandom bs=2 count=1 2> /dev/null | cksum | cut -d' ' -f1) % 32767 ))
fi
TIME=$(($RANDOM % $RandomSleep))
sleep $TIME
}
# delay the job execution by a random amount of time
random_sleep
# ensure we don't do this on battery
check_power || exit 0
# run daily job
exec /usr/lib/apt/apt.systemd.daily

8
system/etc/cron.daily/dpkg Executable file
View File

@ -0,0 +1,8 @@
#!/bin/sh
# Skip if systemd is running.
if [ -d /run/systemd/system ]; then
exit 0
fi
/usr/libexec/dpkg/dpkg-db-backup

83
system/etc/debconf.conf Normal file
View File

@ -0,0 +1,83 @@
# This is the main config file for debconf. It tells debconf where to
# store data. The format of this file is a set of stanzas. Each stanza
# except the first sets up a database for debconf to use. For details, see
# debconf.conf(5) (in the debconf-doc package).
#
# So first things first. This first stanza gives the names of two databases.
# Debconf will use this database to store the data you enter into it,
# and some other dynamic data.
Config: configdb
# Debconf will use this database to store static template data.
Templates: templatedb
# World-readable, and accepts everything but passwords.
Name: config
Driver: File
Mode: 644
Reject-Type: password
Filename: /var/cache/debconf/config.dat
# Not world readable (the default), and accepts only passwords.
Name: passwords
Driver: File
Mode: 600
Backup: false
Required: false
Accept-Type: password
Filename: /var/cache/debconf/passwords.dat
# Set up the configdb database. By default, it consists of a stack of two
# databases, one to hold passwords and one for everything else.
Name: configdb
Driver: Stack
Stack: config, passwords
# Set up the templatedb database, which is a single flat text file
# by default.
Name: templatedb
Driver: File
Mode: 644
Filename: /var/cache/debconf/templates.dat
# Well that was pretty straightforward, and it will be enough for most
# people's needs, but debconf's database drivers can be used to do much
# more interesting things. For example, suppose you want to use config
# data from another host, which is mounted over nfs or perhaps the database
# is accessed via LDAP. You don't want to write to the remote debconf database,
# just read from it, so you still need a local database for local changes.
#
# A remote NFS mounted database, read-only. It is optional; if debconf
# fails to use it it will not abort.
#Name: remotedb
#Driver: DirTree
#Directory: /mnt/otherhost/var/cache/debconf/config
#Readonly: true
#Required: false
#
# A remote LDAP database. It is also read-only. The password is really
# only necessary if the database is not accessible anonymously.
# Option KeyByKey instructs the backend to retrieve keys from the LDAP
# server individually (when they are requested), instead of loading all
# keys at startup. The default is 0, and should only be enabled if you
# want to track accesses to individual keys on the LDAP server side.
#Name: remotedb
#Driver: LDAP
#Server: remotehost
#BaseDN: cn=debconf,dc=domain,dc=com
#BindDN: uid=admin,dc=domain,dc=com
#BindPasswd: secret
#KeyByKey: 0
#
# A stack consisting of two databases. Values will be read from
# the first database in the stack to contain a value. In this example,
# writes always go to the first database.
#Name: fulldb
#Driver: Stack
#Stack: configdb, remotedb
#
# In this example, we'd use Config: fulldb at the top of the file
# to make it use the combination of the databases.
#
# Even more complex and interesting setups are possible, see the
# debconf.conf(5) page for details.

View File

@ -0,0 +1 @@
trixie/sid

View File

@ -0,0 +1 @@
https://debuginfod.ubuntu.com

7
system/etc/default/dbus Normal file
View File

@ -0,0 +1,7 @@
# This is a configuration file for /etc/init.d/dbus; it allows you to
# perform common modifications to the behavior of the dbus daemon
# startup without editing the init script (and thus getting prompted
# by dpkg on upgrades). We all love dpkg prompts.
# Parameters to pass to dbus.
PARAMS=""

1
system/etc/default/locale Symbolic link
View File

@ -0,0 +1 @@
../locale.conf

View File

@ -0,0 +1,3 @@
# Specify command line options here. This config file is used
# by the included systemd service file.
networkd_dispatcher_args="--run-startup-triggers"

47
system/etc/default/rsync Normal file
View File

@ -0,0 +1,47 @@
# defaults file for rsync daemon mode
#
# This file is only used for init.d based systems!
# If this system uses systemd, you can specify options etc. for rsync
# in daemon mode by copying /lib/systemd/system/rsync.service to
# /etc/systemd/system/rsync.service and modifying the copy; add required
# options to the ExecStart line.
# start rsync in daemon mode from init.d script?
# only allowed values are "true", "false", and "inetd"
# Use "inetd" if you want to start the rsyncd from inetd,
# all this does is prevent the init.d script from printing a message
# about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=false
# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
# using a remote shell. When using a different file for
# rsync you might want to symlink /etc/rsyncd.conf to
# that file.
# RSYNC_CONFIG_FILE=
# what extra options to give rsync --daemon?
# that excludes the --daemon; that's always done in the init.d script
# Possibilities are:
# --address=123.45.67.89 (bind to a specific IP address)
# --port=8730 (bind to specified port; default 873)
RSYNC_OPTS=''
# run rsyncd at a nice level?
# the rsync daemon can impact performance due to much I/O and CPU usage,
# so you may want to run it at a nicer priority than the default priority.
# Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''
# run rsyncd with ionice?
# "ionice" does for IO load what "nice" does for CPU load.
# As rsync is often used for backups which aren't all that time-critical,
# reducing the rsync IO priority will benefit the rest of the system.
# See the manpage for ionice for allowed options.
# -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
# the next line to activate this.
# RSYNC_IONICE='-c3'
# Don't forget to create an appropriate config file,
# else the daemon will not start.

5
system/etc/default/ssh Normal file
View File

@ -0,0 +1,5 @@
# Default settings for openssh-server. This file is sourced by /bin/sh from
# /etc/init.d/ssh.
# Options to pass to sshd
SSHD_OPTS=

View File

@ -0,0 +1,37 @@
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DSHELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=no

41
system/etc/deluser.conf Normal file
View File

@ -0,0 +1,41 @@
# /etc/deluser.conf: `deluser' configuration.
# See deluser(8) and deluser.conf(5) for full documentation.
# A commented out setting indicates that this is the default in the
# code. If you need to change those settings, remove the comment and
# make your intended change.
# Remove home directory and mail spool when user is removed
# Default: REMOVE_HOME = 0
#REMOVE_HOME = 0
# Remove all files on the system owned by the user to be removed
# Default: REMOVE_ALL_FILES = 0
#REMOVE_ALL_FILES = 0
# Backup files before removing them. This options has only an effect if
# REMOVE_HOME or REMOVE_ALL_FILES is set.
# Default: BACKUP = 0
#BACKUP = 0
# Target directory for the backup file
# Default: BACKUP_TO = "."
#BACKUP_TO = "."
# Select compression (from tar --auto-compress) for backups
# Default: BACKUP_SUFFIX = .gz
#BACKUP_SUFFIX = .gz
# Space-Separated list of regular expressions. Do not delete files
# matching any of these.
# Default: NO_DEL_PATHS="^/bin\$ ^/boot\$ ^/dev\$ ^/etc\$ ^/initrd ^/lib ^/lost+found\$ ^/media\$ ^/mnt\$ ^/opt\$ ^/proc\$ ^/root\$ ^/run\$ ^/sbin\$ ^/srv\$ ^/sys\$ ^/tmp\$ ^/usr\$ ^/var\$ ^/vmlinu"
#NO_DEL_PATHS="^/bin\$ ^/boot\$ ^/dev\$ ^/etc\$ ^/initrd ^/lib ^/lost+found\$ ^/media\$ ^/mnt\$ ^/opt\$ ^/proc\$ ^/root\$ ^/run\$ ^/sbin\$ ^/srv\$ ^/sys\$ ^/tmp\$ ^/usr\$ ^/var\$ ^/vmlinu"
# Only delete a group if there are no users belonging to this group.
# Default: ONLY_IF_EMPTY = 0
#ONLY_IF_EMPTY = 0
# Single regular expression which describes filesystems types which should
# be excluded when looking for files of a user to be deleted.
# Default: EXCLUDE_FSTYPES = "(proc|sysfs|usbfs|devpts|tmpfs|afs)"
#EXCLUDE_FSTYPES = "(proc|sysfs|usbfs|devpts|tmpfs|afs)"

View File

@ -0,0 +1,52 @@
TIMESYNCD_CONF=/run/systemd/timesyncd.conf.d/01-dhclient.conf
timesyncd_servers_setup_remove() {
if [ ! -d /run/systemd/system ]; then
return
fi
if [ ! -x /usr/lib/systemd/systemd-timesyncd ]; then
return
fi
if [ -e $TIMESYNCD_CONF ]; then
rm -f $TIMESYNCD_CONF
systemctl try-restart systemd-timesyncd.service || true
fi
}
timesyncd_servers_setup_add() {
if [ ! -d /run/systemd/system ]; then
return
fi
if [ ! -x /usr/lib/systemd/systemd-timesyncd ]; then
return
fi
if [ -e $TIMESYNCD_CONF ] && [ "$new_ntp_servers" = "$old_ntp_servers" ]; then
return
fi
if [ -z "$new_ntp_servers" ]; then
timesyncd_servers_setup_remove
return
fi
mkdir -p $(dirname $TIMESYNCD_CONF)
cat <<EOF > ${TIMESYNCD_CONF}.new
# NTP server entries received from DHCP server
[Time]
NTP=$new_ntp_servers
EOF
mv ${TIMESYNCD_CONF}.new ${TIMESYNCD_CONF}
systemctl try-restart systemd-timesyncd.service || true
}
case $reason in
BOUND|RENEW|REBIND|REBOOT)
timesyncd_servers_setup_add
;;
EXPIRE|FAIL|RELEASE|STOP)
timesyncd_servers_setup_remove
;;
esac

13
system/etc/dpkg/dpkg.cfg Normal file
View File

@ -0,0 +1,13 @@
# dpkg configuration file
#
# This file can contain default options for dpkg. All command-line
# options are allowed. Values can be specified by putting them after
# the option, separated by whitespace and/or an `=' sign.
#
# Do not enable debsig-verify by default; since the distribution is not using
# embedded signatures, debsig-verify would reject all packages.
no-debsig
# Log status changes and actions to a file.
log /var/log/dpkg.log

Some files were not shown because too many files have changed in this diff Show More