commit 9efd731f98629ce8b4ec9dea73a1c7624e1d5f78 Author: 시골약사 Date: Sat Oct 4 14:02:02 2025 +0000 Initial commit: Raspberry Pi CUPS 브라더 프린터 설정 리포지토리 ✨ 주요 목적: - 라즈베리파이 3B+에서 브라더 프린터 CUPS 설정 - wget으로 브라더 프린터 드라이버(gz) 쉽게 다운로드 - 프린터 설정 자동화 스크립트 및 문서 제공 📦 포함 파일: - linux-brprinter-installer-2.2.6-0.gz: 브라더 프린터 드라이버 - 각종 설정 문서 (COM 포트, Samba 마운트, 동기화 등) - Gitea 저장소 가이드 🔧 기술 스택: - Raspberry Pi OS - CUPS (Common Unix Printing System) - Brother printer driver 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude diff --git a/com포트자동.md b/com포트자동.md new file mode 100644 index 0000000..8b3f043 --- /dev/null +++ b/com포트자동.md @@ -0,0 +1,64 @@ +sudo systemctl stop rdpclient + +cat | sudo tee /home/pi/rdp-start.sh > /dev/null <<'EOF' +#!/bin/bash +set -eu + +# ---- USB-Serial 자동 탐색 (Honeywell 우선) ---- +DEV="" +for CAND in /dev/ttyACM* /dev/ttyUSB*; do + if [ -e "$CAND" ]; then + VENDOR=$(udevadm info -q all -n "$CAND" 2>/dev/null | grep ID_VENDOR_ID || true) + PRODUCT=$(udevadm info -q all -n "$CAND" 2>/dev/null | grep ID_MODEL_ID || true) + if echo "$VENDOR$PRODUCT" | grep -qi "0c2e"; then + DEV="$CAND" + break + fi + fi +done + +if [ -n "$DEV" ]; then + echo "[RDP-START] serial redirect: $DEV -> COM3" + SERIAL_OPT="/serial:COM3,${DEV},Serial" +else + echo "[RDP-START] WARNING: no Honeywell device found; skipping serial redirect" + SERIAL_OPT="" +fi + +# ---- 경량 WM + 화면 절전 방지 ---- +openbox-session & +xset s off +xset -dpms +xset s noblank +setxkbmap us || true + +# ---- 접속 기본값 ---- +SIZE="1920x1080" +BPP="16" +SRV="pharmq.kr:7390" +USR="pqserver" +PW="pharmq119" + +# ---- 성능 최적화 (윈도우 UI 효과 제거) ---- +PERF="-wallpaper -themes -menu-anims -window-drag" + +# ---- FreeRDP 공통 옵션 ---- +BASE="/u:${USR} /p:${PW} /v:${SRV} \ +/bpp:${BPP} /clipboard /cert:ignore \ +/compression /network:lan ${PERF} /log-level:INFO /f" + +# ---- 코덱 순차 시도 ---- +for MODE in "/gfx:avc420" "/gfx" "/rfx" ""; do + LABEL="${MODE:-bitmap}" + echo "[RDP-START] trying: xfreerdp3 ${LABEL}" + if xfreerdp3 $BASE $SERIAL_OPT $MODE; then + echo "[RDP-START] connected with: ${LABEL}" + exit 0 + fi +done + +exit 1 +EOF + +sudo chmod +x /home/pi/rdp-start.sh +sudo systemctl start rdpclient diff --git a/git.md b/git.md new file mode 100644 index 0000000..68bc494 --- /dev/null +++ b/git.md @@ -0,0 +1,311 @@ +# Gitea 리포지토리 생성 및 푸시 가이드 + +## 🏠 서버 정보 + +- **Gitea 서버**: `git.0bin.in` +- **사용자명**: `thug0bin` +- **이메일**: `thug0bin@gmail.com` +- **액세스 토큰**: `d83f70b219c6028199a498fb94009f4c1debc9a9` + +## 🚀 새 리포지토리 생성 및 푸시 과정 + +### 1. 로컬 Git 리포지토리 초기화 + +```bash +# 프로젝트 디렉토리로 이동 +cd /path/to/your/project + +# Git 초기화 +git init + +# .gitignore 파일 생성 (필요시) +cat > .gitignore << 'EOF' +# Dependencies +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Build outputs +dist/ +build/ + +# Environment variables +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# IDE +.vscode/ +.idea/ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ + +# Database +*.db +*.sqlite +*.sqlite3 +EOF +``` + +### 2. Git 사용자 설정 확인 + +```bash +# Git 사용자 정보 확인 +git config --list | grep -E "user" + +# 설정되지 않은 경우 설정 +git config --global user.name "시골약사" +git config --global user.email "thug0bin@gmail.com" +``` + +### 3. 첫 번째 커밋 + +```bash +# 모든 파일 스테이징 +git add . + +# 첫 커밋 (상세한 커밋 메시지 예시) +git commit -m "$(cat <<'EOF' +Initial commit: [프로젝트명] + +✨ [주요 기능 설명] +- 기능 1 +- 기능 2 +- 기능 3 + +🛠️ 기술 스택: +- 사용된 기술들 나열 + +🔧 주요 구성: +- 프로젝트 구조 설명 + +🤖 Generated with [Claude Code](https://claude.ai/code) + +Co-Authored-By: Claude +EOF +)" +``` + +### 4. 원격 리포지토리 연결 및 푸시 + +```bash +# 원격 리포지토리 추가 (리포지토리명을 실제 이름으로 변경) +git remote add origin https://thug0bin:d83f70b219c6028199a498fb94009f4c1debc9a9@git.0bin.in/thug0bin/[REPOSITORY_NAME].git + +# 브랜치를 main으로 변경 +git branch -M main + +# 원격 리포지토리로 푸시 +git push -u origin main +``` + +## 📝 리포지토리명 네이밍 규칙 + +### 권장 네이밍 패턴: +- **프론트엔드 프로젝트**: `project-name-frontend` +- **백엔드 프로젝트**: `project-name-backend` +- **풀스택 프로젝트**: `project-name-fullstack` +- **도구/유틸리티**: `tool-name-utils` +- **문서/가이드**: `project-name-docs` + +### 예시: +- `figma-admin-dashboard` ✅ +- `anipharm-api-server` ✅ +- `inventory-management-system` ✅ +- `member-portal-frontend` ✅ + +## 🔄 기존 리포지토리에 추가 커밋 + +```bash +# 변경사항 확인 +git status + +# 변경된 파일 스테이징 +git add . + +# 또는 특정 파일만 스테이징 +git add path/to/specific/file + +# 커밋 +git commit -m "커밋 메시지" + +# 푸시 +git push origin main +``` + +## 🌿 브랜치 작업 + +```bash +# 새 브랜치 생성 및 전환 +git checkout -b feature/new-feature + +# 브랜치에서 작업 후 커밋 +git add . +git commit -m "Feature: 새로운 기능 추가" + +# 브랜치 푸시 +git push -u origin feature/new-feature + +# main 브랜치로 돌아가기 +git checkout main + +# 브랜치 병합 (필요시) +git merge feature/new-feature +``` + +## 🛠️ 자주 사용하는 Git 명령어 + +```bash +# 현재 상태 확인 +git status + +# 변경 내역 확인 +git diff + +# 커밋 히스토리 확인 +git log --oneline + +# 원격 리포지토리 정보 확인 +git remote -v + +# 특정 포트 프로세스 종료 (개발 서버 관련) +lsof -ti:PORT_NUMBER | xargs -r kill -9 +``` + +## 🔧 포트 관리 스크립트 + +```bash +# 특정 포트 종료 함수 추가 (bashrc에 추가 가능) +killport() { + if [ -z "$1" ]; then + echo "Usage: killport " + return 1 + fi + lsof -ti:$1 | xargs -r kill -9 + echo "Killed processes on port $1" +} + +# 사용 예시 +# killport 7738 +# killport 5000 +``` + +## 📋 VS Code 워크스페이스 설정 + +여러 리포지토리를 동시에 관리하려면 워크스페이스 파일을 생성하세요: + +```json +{ + "folders": [ + { + "name": "Main Repository", + "path": "." + }, + { + "name": "New Project", + "path": "./new-project-folder" + } + ], + "settings": { + "git.enableSmartCommit": true, + "git.confirmSync": false, + "git.autofetch": true + } +} +``` + +## 🚨 문제 해결 + +### 1. 인증 실패 +```bash +# 토큰이 만료된 경우, 새 토큰으로 원격 URL 업데이트 +git remote set-url origin https://thug0bin:NEW_TOKEN@git.0bin.in/thug0bin/repo-name.git +``` + +### 2. 푸시 거부 +```bash +# 원격 변경사항을 먼저 가져오기 +git pull origin main --rebase + +# 충돌 해결 후 푸시 +git push origin main +``` + +### 3. 대용량 파일 문제 +```bash +# Git LFS 설정 (필요시) +git lfs install +git lfs track "*.zip" +git lfs track "*.gz" +git add .gitattributes +``` + +## 📊 커밋 메시지 템플릿 + +### 기본 템플릿: +``` +타입: 간단한 설명 + +상세한 설명 (선택사항) + +🤖 Generated with [Claude Code](https://claude.ai/code) + +Co-Authored-By: Claude +``` + +### 타입별 예시: +- `✨ feat: 새로운 기능 추가` +- `🐛 fix: 버그 수정` +- `📝 docs: 문서 업데이트` +- `🎨 style: 코드 포맷팅` +- `♻️ refactor: 코드 리팩토링` +- `⚡ perf: 성능 개선` + +- `✅ test: 테스트 추가` +- `🔧 chore: 빌드 설정 변경` + +## 🔗 유용한 링크 + +- **Gitea 웹 인터페이스**: https://git.0bin.in/ +- **내 리포지토리 목록**: https://git.0bin.in/thug0bin +- **새 리포지토리 생성**: https://git.0bin.in/repo/create + +## 💡 팁과 모범 사례 + +1. **정기적인 커밋**: 작은 단위로 자주 커밋 +하세요 +2. **의미있는 커밋 메시지**: 변경 사항을 명확히 설명하세요 +3. **브랜치 활용**: 기능별로 브랜치를 나누어 작업하세요 +4. **.gitignore 활용**: 불필요한 파일은 제외하세요 +5. **문서화**: README.md와 같은 문서를 항상 업데이트하세요 + +--- + +**작성일**: 2025년 7월 29일 +**마지막 업데이트**: 토큰 및 서버 정보 최신화 +**참고**: 이 가이드는 재사용 가능하도록 작성되었습니다. 새 프로젝트마다 참고하세요. + +> 💡 **중요**: 액세스 토큰은 보안이 중요한 정보입니다. 공개 저장소에 업로드하지 마세요! \ No newline at end of file diff --git a/gitea.md b/gitea.md new file mode 100644 index 0000000..e69de29 diff --git a/linux-brprinter-installer-2.2.6-0.gz b/linux-brprinter-installer-2.2.6-0.gz new file mode 100644 index 0000000..ea5588a Binary files /dev/null and b/linux-brprinter-installer-2.2.6-0.gz differ diff --git a/rpi_com_redirect.md b/rpi_com_redirect.md new file mode 100644 index 0000000..935ed2c --- /dev/null +++ b/rpi_com_redirect.md @@ -0,0 +1,54 @@ +라즈베리파이 컴포트 리다이렉트 + + +pi@raspberrypi:~ $ +pi@raspberrypi:~ $ cat /home/pi/rdp-start.sh +#!/bin/sh +set -eu + +# ---- USB-Serial 자동 탐색 ---- +DEV="" +for CAND in /dev/ttyACM* /dev/ttyUSB*; do + [ -e "$CAND" ] && DEV="$CAND" && break +done + +if [ -n "$DEV" ]; then + echo "[RDP-START] serial redirect: $DEV -> COM3" + SERIAL_OPT="/serial:COM3,${DEV},Serial" +else + echo "[RDP-START] WARNING: no /dev/ttyACM* or /dev/ttyUSB* found; skipping serial redirect" + SERIAL_OPT="" +fi + +# ---- 경량 WM + 화면 절전 방지 ---- +openbox-session >/dev/null 2>&1 & +xset s off +xset -dpms +xset s noblank +setxkbmap us || true + +# ---- 접속 기본값 ---- +SIZE="1920x1080" +BPP="16" +SRV="pharmq.kr:7390" +USR="pqserver" +PW="pharmq119" + +# ---- 성능 최적화 (윈도우 UI 효과 제거) ---- +PERF="-wallpaper -themes -menu-anims -window-drag" + +# ---- FreeRDP 공통 옵션 ---- +BASE="/u:${USR} /p:${PW} /v:${SRV} \ +/size:${SIZE} /bpp:${BPP} /clipboard /cert:ignore \ +/compression /network:lan ${PERF} /log-level:INFO" + +# ---- 코덱 순차 시도 ---- +for MODE in "/gfx:avc420" "/gfx" "/rfx" ""; do + LABEL="${MODE:-bitmap}" + echo "[RDP-START] trying: xfreerdp3 ${LABEL}" + if xfreerdp3 $BASE $SERIAL_OPT $MODE; then + echo "[RDP-START] connected with: ${LABEL}" + exit 0 + fi +done + diff --git a/sync.md b/sync.md new file mode 100644 index 0000000..8eb0584 --- /dev/null +++ b/sync.md @@ -0,0 +1,88 @@ +# 1) 필요 패키지 +sudo apt update +sudo apt install -y inotify-tools rsync + +# 2) 수신 폴더/마운트 경로 확인(없으면 생성) +sudo mkdir -p /var/spool/hylafax/recvq +sudo mkdir -p /mnt/fax + +# 3) 실시간 이동 스크립트 생성 +cat | sudo tee /usr/local/bin/move-fax.sh >/dev/null <<'EOF' +#!/bin/bash +set -euo pipefail + +SRC="/var/spool/hylafax/recvq" +DST="/mnt/fax" +LOG="/var/log/fax-move.log" + +echo "[FAX-MOVE] started (SRC=${SRC}, DST=${DST})" | tee -a "$LOG" + +# NAS 마운트 대기(최대 60초) +for i in {1..60}; do + if mountpoint -q "$DST"; then + echo "[FAX-MOVE] mount OK: $DST" | tee -a "$LOG" + break + fi + if [ "$i" -eq 60 ]; then + echo "[FAX-MOVE] mount not ready after 60s, continuing and will keep trying..." | tee -a "$LOG" + fi + sleep 1 +done + +# inotify: 새 파일이 완전히 닫히거나(moved_to/close_write) 도착하면 처리 +# TIFF/TIF/PDF 우선 감시(확장자 제한 없이 동작 가능, 여기서는 전체 감시 후 파일만 필터) +inotifywait -m -e close_write -e moved_to --format '%w%f' "$SRC" | while read -r FILE; do + # 파일만 처리 + [ -f "$FILE" ] || continue + + BASENAME="$(basename "$FILE")" + TARGET="${DST}/${BASENAME}" + + # 마운트 점검(중간에 끊겼을 수도 있음) + if ! mountpoint -q "$DST"; then + echo "[FAX-MOVE] WARN: NAS not mounted, skip: $BASENAME" | tee -a "$LOG" + continue + fi + + # 복사 후 소스 제거(성공시에만) + if rsync -a --partial --inplace "$FILE" "$TARGET"; then + sync + rm -f -- "$FILE" + echo "[FAX-MOVE] moved: $BASENAME -> $DST" | tee -a "$LOG" + else + echo "[FAX-MOVE] ERROR: rsync failed for $BASENAME" | tee -a "$LOG" + fi +done +EOF + +sudo chmod +x /usr/local/bin/move-fax.sh + +# 4) systemd 서비스 유닛 생성 +cat | sudo tee /etc/systemd/system/fax-move.service >/dev/null <<'EOF' +[Unit] +Description=Move received faxes to NAS (real-time) +After=network-online.target mnt-fax.mount +Wants=network-online.target +Requires=mnt-fax.mount +ConditionPathIsDirectory=/var/spool/hylafax/recvq +ConditionPathIsMountPoint=/mnt/fax + +[Service] +Type=simple +ExecStart=/usr/local/bin/move-fax.sh +Restart=always +RestartSec=2 +User=pi +# NAS 일시 끊김 대비로 환경변수 여유(선택) +Environment=RSYNC_RSH=ssh + +[Install] +WantedBy=multi-user.target +EOF + +# 5) 적용 및 시작 +sudo systemctl daemon-reload +sudo systemctl enable --now fax-move.service + +# 6) 동작 확인(로그 tail) +sudo journalctl -u fax-move.service -n 50 -f diff --git a/삼바마운트.md b/삼바마운트.md new file mode 100644 index 0000000..a0e59ea --- /dev/null +++ b/삼바마운트.md @@ -0,0 +1,55 @@ +좋습니다 👍 지금 상황은 단순해요. +/etc/samba/ 폴더가 기본적으로 없는 경우가 있습니다. 그래서 nano에서 파일을 열려고 하면 "그런 파일이나 디렉터리가 없습니다" 라는 메시지가 나옵니다. + +해결 방법 +먼저 디렉터리를 만들어주세요: + +sudo mkdir -p /etc/samba +그다음 다시 자격증명 파일을 여세요: + +sudo nano /etc/samba/creds-fax +그리고 안에 다음을 입력합니다: + +username=0bin +password=@Trajet6640 +저장 후 나와서 권한 제한: + +sudo chmod 600 /etc/samba/creds-fax +✅ 이렇게 하면 /etc/samba/creds-fax 파일이 생기고, systemd에서 마운트 설정할 때 사용할 수 있어요. + +👉 원하시면 제가 바로 /etc/systemd/system/mnt-fax.mount 유닛까지 한방팩으로 작성해드릴까요? + +나의 말: +이제됫어 다음은 어떻게해 크리덴셜파일까지 생성해성 +ChatGPT의 말: +좋습니다 👌 이제 크리덴셜 파일까지 잘 만들었으니, 다음은 systemd 마운트 유닛을 만들어서 라즈베리파이가 켜질 때 자동으로 \\192.168.0.211\fax 를 /mnt/fax 로 마운트되도록 하면 됩니다. + +1. 마운트할 디렉터리 만들기 +sudo mkdir -p /mnt/fax +2. systemd 마운트 유닛 작성 +/etc/systemd/system/mnt-fax.mount 파일 생성: + +sudo nano /etc/systemd/system/mnt-fax.mount +내용 입력: + +[Unit] +Description=Mount SMB Share for Fax +After=network-online.target +Wants=network-online.target + +[Mount] +What=//192.168.0.211/fax +Where=/mnt/fax +Type=cifs +Options=credentials=/etc/samba/creds-fax,iocharset=utf8,vers=3.0,uid=pi,gid=pi,file_mode=0660,dir_mode=0770 + +[Install] +WantedBy=multi-user.target +3. systemd 리로드 & 마운트 +sudo systemctl daemon-reload +sudo systemctl enable mnt-fax.mount +sudo systemctl start mnt-fax.mount +4. 확인 +mount | grep fax +ls -l /mnt/fax +여기까지 하면 SMB 공유가 자동으로 /mnt/fax 에 마운트돼요. \ No newline at end of file diff --git a/팩스서버. md b/팩스서버. md new file mode 100644 index 0000000..f42065f --- /dev/null +++ b/팩스서버. md @@ -0,0 +1,6 @@ +1. NAS에 FAX 폴더 SMB로 마운트 +2. inotify 로 실시간 감시 +3. 수신되면 일단 라즈베리파이에 저장 (안정성 확보), +4. 수신될걸 FAX폴더 (NAS로 복사) +5. USB faxmodem으로 fax 안정적으로 수신후 , 라즈베리파이 저장 +6. 트리거로 cups로 인쇄된것 쏘기(즉시 네트워크 프린터로 인쇄 및 TTS 발송)