Fix stdin redirection for curl | bash execution - add /dev/tty to all read commands

This commit is contained in:
2025-12-23 13:04:04 +09:00
parent 07d749a66b
commit 638546a554

View File

@ -4,6 +4,7 @@
# root 계정에서 실행 # root 계정에서 실행
# Linux / DB 계정 통합 여부 선택 가능 # Linux / DB 계정 통합 여부 선택 가능
# dotfiles는 git에서 다운로드 # dotfiles는 git에서 다운로드
# 파이프 실행 지원 (curl | bash)
set -euo pipefail set -euo pipefail
@ -14,6 +15,21 @@ DOTFILES_BASE_URL="https://git.siane.kr/firstgarden/cafe24-testserver/raw/branch
LINUX_USER="" LINUX_USER=""
DB_USER="" DB_USER=""
# 터미널 입력 헬퍼 함수
# curl | bash로 실행할 때 /dev/tty에서 입력을 받도록 함
read_input() {
local prompt="$1"
local var_name="$2"
local is_secret="${3:-false}"
if [ "$is_secret" = "true" ]; then
read -s -p "$prompt" "$var_name" < /dev/tty
echo "" >&2
else
read -p "$prompt" "$var_name" < /dev/tty
fi
}
# 오류 처리 및 초기화 함수 # 오류 처리 및 초기화 함수
cleanup() { cleanup() {
EXIT_CODE=$? EXIT_CODE=$?
@ -25,7 +41,7 @@ cleanup() {
# LINUX_USER가 설정되어 있으면 초기화 옵션 제공 # LINUX_USER가 설정되어 있으면 초기화 옵션 제공
if [ -n "$LINUX_USER" ]; then if [ -n "$LINUX_USER" ]; then
read -p "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT read_input "초기화하고 다시 시작하시겠습니까? (y/n): " REINIT
if [[ "$REINIT" =~ ^[Yy]$ ]]; then if [[ "$REINIT" =~ ^[Yy]$ ]]; then
echo "" echo ""
echo "⚠️ $LINUX_USER 사용자 및 관련 설정을 초기화합니다..." echo "⚠️ $LINUX_USER 사용자 및 관련 설정을 초기화합니다..."
@ -76,7 +92,7 @@ echo "✓ 필수 패키지 설치 완료"
# ------------------------------------------------- # -------------------------------------------------
# 2. Linux 사용자 정보 입력 # 2. Linux 사용자 정보 입력
# ------------------------------------------------- # -------------------------------------------------
read -p "Linux 사용자 이름: " LINUX_USER read_input "Linux 사용자 이름: " LINUX_USER
# 사용자 존재 확인 및 재생성 옵션 # 사용자 존재 확인 및 재생성 옵션
if id "$LINUX_USER" &>/dev/null; then if id "$LINUX_USER" &>/dev/null; then
@ -86,11 +102,11 @@ if id "$LINUX_USER" &>/dev/null; then
echo " 1) 기존 사용자 사용 (비밀번호는 변경하지 않음)" echo " 1) 기존 사용자 사용 (비밀번호는 변경하지 않음)"
echo " 2) 사용자 삭제 후 재생성 (홈 디렉토리 포함 삭제)" echo " 2) 사용자 삭제 후 재생성 (홈 디렉토리 포함 삭제)"
echo "" echo ""
read -p "선택 (1 또는 2): " USER_ACTION read_input "선택 (1 또는 2): " USER_ACTION
case $USER_ACTION in case $USER_ACTION in
2) 2)
read -p "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM read_input "정말로 '$LINUX_USER'을(를) 삭제하고 재생성하시겠습니까? (y/n): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
echo "사용자 삭제 중..." echo "사용자 삭제 중..."
userdel -r "$LINUX_USER" 2>/dev/null || userdel "$LINUX_USER" 2>/dev/null || true userdel -r "$LINUX_USER" 2>/dev/null || userdel "$LINUX_USER" 2>/dev/null || true
@ -98,7 +114,7 @@ if id "$LINUX_USER" &>/dev/null; then
# 새 비밀번호 입력 (재시도 옵션) # 새 비밀번호 입력 (재시도 옵션)
while true; do while true; do
read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW read -s -p "새로운 Linux 사용자 비밀번호: " LINUX_PW < /dev/tty
echo "" echo ""
# 비밀번호 입력 확인 # 비밀번호 입력 확인
@ -107,12 +123,12 @@ if id "$LINUX_USER" &>/dev/null; then
continue continue
fi fi
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty
echo "" echo ""
if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then
echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다." echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2 read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW_2 < /dev/tty
RETRY_PW_2=${RETRY_PW_2:-Y} RETRY_PW_2=${RETRY_PW_2:-Y}
if [[ ! "$RETRY_PW_2" =~ ^[Yy]$ ]]; then if [[ ! "$RETRY_PW_2" =~ ^[Yy]$ ]]; then
echo "비밀번호 입력을 취소했습니다." echo "비밀번호 입력을 취소했습니다."
@ -137,7 +153,7 @@ if id "$LINUX_USER" &>/dev/null; then
else else
# 새 사용자 생성 (비밀번호 입력) # 새 사용자 생성 (비밀번호 입력)
while true; do while true; do
read -s -p "Linux 사용자 비밀번호: " LINUX_PW read -s -p "Linux 사용자 비밀번호: " LINUX_PW < /dev/tty
echo "" echo ""
# 비밀번호 입력 확인 # 비밀번호 입력 확인
@ -146,16 +162,16 @@ else
continue continue
fi fi
read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM read -s -p "Linux 사용자 비밀번호 확인: " LINUX_PW_CONFIRM < /dev/tty
echo "" echo ""
if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then if [[ "$LINUX_PW" != "$LINUX_PW_CONFIRM" ]]; then
echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다." echo "❌ Linux 사용자 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW read -p "다시 입력하시겠습니까? (Y/n): " RETRY_PW < /dev/tty
RETRY_PW=${RETRY_PW:-Y} RETRY_PW=${RETRY_PW:-Y}
if [[ ! "$RETRY_PW" =~ ^[Yy]$ ]]; then if [[ ! "$RETRY_PW" =~ ^[Yy]$ ]]; then
echo "" echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT < /dev/tty
RESTART_SCRIPT=${RESTART_SCRIPT:-Y} RESTART_SCRIPT=${RESTART_SCRIPT:-Y}
if [[ "$RESTART_SCRIPT" =~ ^[Yy]$ ]]; then if [[ "$RESTART_SCRIPT" =~ ^[Yy]$ ]]; then
exit 1 exit 1
@ -172,7 +188,7 @@ else
fi fi
# MariaDB 계정 설정 # MariaDB 계정 설정
read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT read -p "MariaDB 계정을 Linux 계정과 동일하게 사용할까요? (Y/n): " SAME_ACCOUNT < /dev/tty
SAME_ACCOUNT=${SAME_ACCOUNT:-Y} SAME_ACCOUNT=${SAME_ACCOUNT:-Y}
if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
@ -182,7 +198,7 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
else else
# 기존 사용자의 경우 비밀번호 입력 # 기존 사용자의 경우 비밀번호 입력
while true; do while true; do
read -s -p "MariaDB 비밀번호: " DB_PW read -s -p "MariaDB 비밀번호: " DB_PW < /dev/tty
echo "" echo ""
# 비밀번호 입력 확인 # 비밀번호 입력 확인
@ -191,16 +207,16 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
continue continue
fi fi
read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM read -s -p "MariaDB 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty
echo "" echo ""
if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then
echo "❌ MariaDB 비밀번호가 일치하지 않습니다." echo "❌ MariaDB 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW < /dev/tty
RETRY_DB_PW=${RETRY_DB_PW:-Y} RETRY_DB_PW=${RETRY_DB_PW:-Y}
if [[ ! "$RETRY_DB_PW" =~ ^[Yy]$ ]]; then if [[ ! "$RETRY_DB_PW" =~ ^[Yy]$ ]]; then
echo "" echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2 read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT2 < /dev/tty
RESTART_SCRIPT2=${RESTART_SCRIPT2:-Y} RESTART_SCRIPT2=${RESTART_SCRIPT2:-Y}
if [[ "$RESTART_SCRIPT2" =~ ^[Yy]$ ]]; then if [[ "$RESTART_SCRIPT2" =~ ^[Yy]$ ]]; then
exit 1 exit 1
@ -216,10 +232,10 @@ if [[ "$SAME_ACCOUNT" =~ ^[Yy]$ ]]; then
fi fi
echo "→ DB 사용자/비밀번호를 Linux 계정과 동일하게 사용합니다." echo "→ DB 사용자/비밀번호를 Linux 계정과 동일하게 사용합니다."
else else
read -p "MariaDB 사용자 이름: " DB_USER read -p "MariaDB 사용자 이름: " DB_USER < /dev/tty
# MariaDB 사용자 비밀번호 입력 (재시도 옵션) # MariaDB 사용자 비밀번호 입력 (재시도 옵션)
while true; do while true; do
read -s -p "MariaDB 사용자 비밀번호: " DB_PW read -s -p "MariaDB 사용자 비밀번호: " DB_PW < /dev/tty
echo "" echo ""
# 비밀번호 입력 확인 # 비밀번호 입력 확인
@ -228,16 +244,16 @@ else
continue continue
fi fi
read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM read -s -p "MariaDB 사용자 비밀번호 확인: " DB_PW_CONFIRM < /dev/tty
echo "" echo ""
if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then if [[ "$DB_PW" != "$DB_PW_CONFIRM" ]]; then
echo "❌ MariaDB 비밀번호가 일치하지 않습니다." echo "❌ MariaDB 비밀번호가 일치하지 않습니다."
read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2 read -p "다시 입력하시겠습니까? (Y/n): " RETRY_DB_PW2 < /dev/tty
RETRY_DB_PW2=${RETRY_DB_PW2:-Y} RETRY_DB_PW2=${RETRY_DB_PW2:-Y}
if [[ ! "$RETRY_DB_PW2" =~ ^[Yy]$ ]]; then if [[ ! "$RETRY_DB_PW2" =~ ^[Yy]$ ]]; then
echo "" echo ""
read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3 read -p "스크립트를 다시 시작하시겠습니까? (Y/n): " RESTART_SCRIPT3 < /dev/tty
RESTART_SCRIPT3=${RESTART_SCRIPT3:-Y} RESTART_SCRIPT3=${RESTART_SCRIPT3:-Y}
if [[ "$RESTART_SCRIPT3" =~ ^[Yy]$ ]]; then if [[ "$RESTART_SCRIPT3" =~ ^[Yy]$ ]]; then
exit 1 exit 1
@ -363,7 +379,7 @@ EXISTING_USER=$(mysql -u root -se "SELECT COUNT(*) FROM mysql.user WHERE User='$
if [ "$EXISTING_USER" -gt 0 ]; then if [ "$EXISTING_USER" -gt 0 ]; then
echo "⚠️ DB 사용자 '$DB_USER'이(가) 이미 존재합니다." echo "⚠️ DB 사용자 '$DB_USER'이(가) 이미 존재합니다."
read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW read -p "기존 사용자의 비밀번호를 변경하시겠습니까? (Y/n): " UPDATE_PW < /dev/tty
UPDATE_PW=${UPDATE_PW:-Y} UPDATE_PW=${UPDATE_PW:-Y}
if [[ "$UPDATE_PW" =~ ^[Yy]$ ]]; then if [[ "$UPDATE_PW" =~ ^[Yy]$ ]]; then
mysql -u root <<MYSQL_UPDATE mysql -u root <<MYSQL_UPDATE