CasaOS 설치 & SMB 공유 폴더 설정 가이드 (우분투)
CasaOS 설치 & SMB 공유 폴더 설정 가이드 (우분투)
1️⃣ CasaOS 설치 및 포트 자동 선택 스크립트
1) 스크립트 복사
우분투 터미널에서 아래 내용 복사 후 붙여넣기 하고 엔터 누르면 됩니다.
cat <<'EOF' > install-casaos-auto.sh
#!/usr/bin/env bash
set -euo pipefail
# --- 포트 자동 선택 ---
choose_port() {
for p in 80 8080 8888; do
if ! sudo lsof -i :$p >/dev/null 2>&1; then
echo $p
return
fi
done
echo "모든 후보 포트(80,8080,8888)가 이미 사용 중입니다." >&2
exit 1
}
PORT=$(choose_port)
echo "[*] 선택된 포트: $PORT"
# --- 시스템 업데이트 ---
sudo apt update && sudo apt install -y curl ca-certificates gnupg lsb-release
# --- CasaOS 설치 ---
if ! command -v casaos-cli >/dev/null 2>&1; then
echo "[*] CasaOS 설치 중 (curl 사용)..."
curl -fsSL https://get.casaos.io | sudo bash
else
echo "[*] CasaOS 이미 설치됨 → 포트만 변경"
fi
# --- 포트 변경 ---
sudo sed -i "s/^port *=.*/port = ${PORT}/" /etc/casaos/gateway.ini
sudo systemctl restart casaos-gateway
# --- 방화벽 열기 ---
if command -v ufw >/dev/null 2>&1; then
sudo ufw allow ${PORT}/tcp || true
fi
# --- 접속 정보 출력 ---
IP=$(hostname -I | awk '{print $1}')
echo "===================================="
echo "CasaOS 설치/설정 완료!"
echo "접속 주소: http://${IP}:${PORT}/"
echo "===================================="
EOF
2) 실행 권한 부여
chmod +x install-casaos-auto.sh
3) 설치 실행
sudo ./install-casaos-auto.sh
2️⃣ SMB 공유 폴더 생성 스크립트
1) 스크립트 복사
우분투 터미널에서 아래 내용 복사 후 붙여넣기 하고 엔터 누르면 됩니다.
cat <<'EOF' > setup-smb-end2end.sh
#!/usr/bin/env bash
set -euo pipefail
# =========================
# 환경변수(없으면 기본값)
# =========================
SHARE_PATH="${SHARE_PATH:-/DATA/Share_Files}"
SHARE_NAME="${SHARE_NAME:-Share_Files}"
SMB_USER="${SMB_USER:-comtech}" # 생성/사용할 Samba 계정
DIR_MODE="${DIR_MODE:-775}" # 폴더 퍼미션
SMB_PASS="${SMB_PASS:-}" # 비대화식 설정용(비워두면 대화식으로 묻는다)
SMB_CONF="/etc/samba/smb.conf"
BACKUP_DIR="/etc/samba/backup"
say() { echo -e "\e[1;32m[INFO]\e[0m $*"; }
warn(){ echo -e "\e[1;33m[WARN]\e[0m $*"; }
err() { echo -e "\e[1;31m[ERR ]\e[0m $*"; }
need_root(){
[[ $EUID -eq 0 ]] || { err "root로 실행하세요: sudo $0"; exit 1; }
}
install_samba(){
if ! command -v testparm >/dev/null 2>&1; then
say "samba 패키지 설치 중…"
apt update -y
apt install -y samba samba-common-bin
fi
}
backup_conf(){
mkdir -p "$BACKUP_DIR"
local ts; ts=$(date +'%Y%m%d-%H%M%S')
if [[ -f "$SMB_CONF" ]]; then
cp -a "$SMB_CONF" "$BACKUP_DIR/smb.conf.$ts.bak"
say "smb.conf 백업 완료 → $BACKUP_DIR/smb.conf.$ts.bak"
else
warn "기존 smb.conf 없음(신규 생성 예정)"
mkdir -p /etc/samba
touch "$SMB_CONF"
fi
}
ensure_global_minimal(){
if ! grep -q "^\[global\]" "$SMB_CONF"; then
say "[global] 섹션이 없어 최소 설정 추가"
cat >>"$SMB_CONF" <<'EOG'
[global]
server role = standalone server
workgroup = WORKGROUP
security = user
map to guest = Bad User
unix charset = UTF-8
dos charset = CP949
load printers = no
printing = bsd
disable spoolss = yes
log file = /var/log/samba/log.%m
max log size = 1000
EOG
fi
}
sanitize_brackets(){
sed -i 's/\\\[/[/g; s/\\\]/]/g' "$SMB_CONF"
}
remove_share_block(){
awk -v name="$SHARE_NAME" '
BEGIN{inblk=0}
/^\[/{
if(inblk){inblk=0}
}
/^\['"$SHARE_NAME"'\]$/ {inblk=1; next}
inblk==0 {print}
' "$SMB_CONF" > "$SMB_CONF.tmp"
mv "$SMB_CONF.tmp" "$SMB_CONF"
}
append_share_block(){
cat >>"$SMB_CONF" <<EOF2
[$SHARE_NAME]
path = $SHARE_PATH
browseable = yes
read only = no
valid users = $SMB_USER
EOF2
}
ensure_folder(){
mkdir -p "$SHARE_PATH"
local owner_user; owner_user="${SUDO_USER:-$USER}"
chown "$owner_user":"$owner_user" "$SHARE_PATH"
chmod "$DIR_MODE" "$SHARE_PATH"
say "폴더 준비: $SHARE_PATH (owner: $owner_user, mode: $DIR_MODE)"
}
ensure_smb_user(){
if pdbedit -L 2>/dev/null | cut -d: -f1 | grep -qx "$SMB_USER"; then
say "Samba 사용자 존재: $SMB_USER"
fi
if [[ -n "$SMB_PASS" ]]; then
printf "%s\n%s\n" "$SMB_PASS" "$SMB_PASS" | smbpasswd -a "$SMB_USER" -s
else
smbpasswd -a "$SMB_USER"
fi
}
reload_samba(){
say "testparm 검증"
testparm -s >/dev/null
say "Samba 재시작"
systemctl restart smbd 2>/dev/null || true
systemctl restart nmbd 2>/dev/null || true
systemctl restart samba 2>/dev/null || true
}
# =========================
# 실행
# =========================
need_root
install_samba
backup_conf
ensure_global_minimal
sanitize_brackets
ensure_folder
ensure_smb_user
remove_share_block
append_share_block
sanitize_brackets
reload_samba
say "✅ 완료: Windows에서 \\\\<서버IP>\\$SHARE_NAME 로 접속 (유저: $SMB_USER)"
EOF
2) 실행 권한 부여
chmod +x setup-smb-end2end.sh
3) 스크립트 실행
설명 : SHARE_PATH : 실제 폴더 경로 ( /DATA/ 경로 하위에 폴더가 생성됨. 그래서 "/DATA/공유할 폴더 이름" 영어로 입력하면 됩니다.)
SHARE_NAME : Windows에서 표시될 이름 ( 구분가능한 이름을 영어로 입력하시면됩니다.)
SMB_USER : 우분투 로그인 ID ( 윈도우에서 공유폴더 접근시 로그인 ID )
SMB_USER : 우분투 로그인 PW ( 윈도우에서 공유폴더 접근시 로그인 PW )
명령어 : sudo -E env SHARE_PATH=/DATA/생성할공유폴더이름 SHARE_NAME=윈도우에표시될폴더이름 SMB_USER=우분투로그인ID SMB_PASS=우분투로그인PW ./setup-smb-end2end.sh
4) 공유파일 생성되었는지 확인
① Samba 설정 파일에서 공유 섹션 확인
명령어 : sudo testparm -s | grep -A5 "Share_Files" ( 명령어 끝에 윈도우에서 사용되는 파일이름 명 입력 )
② Samba 서비스 상태 확인
명령어 : sudo systemctl status smbd --no-pager ( active (running) 이어야 정상 동작 중입니다.)
공개 마지막 업데이트: 2025-09-21 01:25:29 PM