우여곡절 끝에 갤럭시 Wide3에 postmarketOS 서버를 올리다
USB IP 192.168.0.190, 25GB 웹 저장공간, Nginx·PHP-FPM·MariaDB 복구까지
Galaxy Wide3에 postmarketOS를 설치하고 USB 네트워크, Nginx, PHP-FPM, MariaDB, 25GB USERDATA 웹 저장공간을 묶어 mobile.netcity.co.kr 서버로 복구한 2페이지 분량의 작업 기록.
NETCITY 모바일 서버 작업기는 2026년 6월 2일부터 6월 3일까지 갤럭시 Wide3(SM-J737S)에 postmarketOS를 올리고 실제 웹서버로 복구한 과정을 기록한다. 처음에는 스마트폰에 리눅스를 설치할 수 있는지부터 확인했고, 이후 OEM 잠금 해제, 다운로드 모드, 이미지 빌드, USB 연결, 웹서버 복구, 데이터 파티션 확장, 재부팅 검증까지 이어졌다.
결과적으로 이 기기는 단순 테스트폰이 아니라 mobile.netcity.co.kr의 실제 응답을 담당하는 소형 리눅스 서버가 됐다. 공개 HTTPS 입구는 Ubuntu Nginx가 맡고, 요청은 USB 네트워크를 통해 192.168.0.190의 갤럭시 postmarketOS 서버로 전달된다. 폰 안에서는 Nginx, PHP-FPM, MariaDB가 동작하고, 기존 백업 웹페이지와 DB도 다시 올라갔다.
1페이지 / 설치까지: 우여곡절은 부팅 전에 시작됐다
첫 단계는 “갤럭시 폰에 리눅스가 실제로 올라갈 수 있는가”였다. Ubuntu Touch, postmarketOS, Red Hat 계열 리눅스의 차이를 확인한 뒤, Galaxy Wide3에 맞는 방향은 postmarketOS 쪽으로 잡았다. 이 선택은 데스크톱 배포판을 그대로 얹는 방식이 아니라, 스마트폰 하드웨어에 맞는 커널·루트파일시스템·부팅 구성을 따로 맞추는 작업에 가까웠다.
기기에서는 OEM 잠금 해제가 가능했고, 다운로드 모드와 복구 메뉴를 오가며 현재 상태를 확인했다. 처음 보는 메뉴가 나오고, USB 연결이 잡혔다가 다시 사라지는 과정도 있었다. 그래서 무작정 설치를 밀어붙이기보다, 현재 모델 정보와 연결 상태를 계속 확인하면서 빌드와 플래시 순서를 잡았다.
빌드 작업은 PC의 /var/www/html/postmarketOS_work 폴더에서 관리했다. postmarketOS용 작업 디렉터리, 커널 패키지, 기기 후보 패키지, 플래시 준비 파일, 복구 스크립트, USB NAT 스크립트가 모두 이 폴더에 모였다. 설치 후에도 앞으로의 관리 기준을 이 폴더로 잡았기 때문에, 단순한 임시 작업장이 아니라 운영 기록 저장소가 된 셈이다.
플래시 이후 첫 번째 목표는 “폰이 살아 있는가”였다. 화면이 뜨고, USB 네트워크가 잡히고, SSH로 접속할 수 있어야 다음 단계로 넘어갈 수 있었다. 최종적으로 postmarketOS edge 기반 시스템이 올라왔고, 커널은 6.15.0-exynos7870 계열로 확인됐다. 콘솔 UI 기반이라 화려한 모바일 런처는 없지만, 서버로 쓰기에는 오히려 가볍고 명확했다.
가장 중요한 네트워크 조건은 와이파이가 아니라 USB였다. 폰 쪽 IP는 192.168.0.190, 호스트 쪽 USB 피어는 192.168.0.189로 정리했다. 사용자는 “와이파이는 쓰지 않고 USB를 그 IP로 받는 게 더 중요하다”고 했고, 그 요구에 맞춰 USB NCM 인터페이스가 바뀌어도 route와 NAT가 다시 잡히도록 NetworkManager dispatcher 스크립트를 넣었다.
이 과정에서 한 번의 재부팅 검증은 실패에 가까웠다. 폰은 부팅됐지만 호스트 USB 인터페이스 이름이 바뀌면서 이전 라우트가 그대로 먹히지 않았다. 이후 동적으로 enx* 인터페이스를 찾아 192.168.0.190/32 라우트를 다시 넣는 방식으로 고쳤다. 두 번째 재부팅에서는 약 27초 안에 ping, SSH, 웹 응답이 돌아왔다.
2페이지 / 서버화: 웹루트, DB, 25GB 저장공간, 재부팅 검증
부팅과 접속이 확인된 뒤에는 실제 서버 역할을 넣었다. 폰 안에 Nginx, PHP-FPM 8.4, MariaDB를 설치했고, 기존 모바일 서버 백업에서 웹페이지와 이미지, DB 덤프를 복원했다. 복원 대상은 불필요한 전체 시스템 파일이 아니라 DB와 웹페이지, 이미지 중심으로 좁혔다. 이 덕분에 설치 후 남은 공간을 더 효율적으로 쓸 수 있었다.
처음에는 루트 파티션 여유가 충분하지 않았다. 그래서 안전한 캐시 정리와 예약 블록 조정으로 일부 공간을 확보한 뒤, 진짜 해법으로 /dev/mmcblk0p26 파티션을 웹 저장공간으로 쓰는 방향을 잡았다. 이 파티션은 ext4로 포맷하고 pmOS_userdata 라벨을 붙였으며, /srv/mobile-data에 마운트했다. 이후 /srv/mobile-data/www/default를 /srv/www/default에 bind mount해 Nginx 경로는 유지하면서 실제 저장공간은 25GB 파티션으로 옮겼다.
최종 확인 기준으로 /srv/www/default는 약 917MB 규모였고, 뒤쪽 저장소는 24.5GB 중 23GB 이상이 비어 있었다. 이 구조 덕분에 앞으로 이미지, G5 복원 페이지, 백업 웹자료를 더 올려도 루트 파티션을 압박하지 않는다. 스마트폰 서버를 오래 돌리려면 앱 설치보다 이런 저장공간 설계가 먼저다.
웹 복원은 단순히 파일을 복사하는 것으로 끝나지 않았다. G5 계열 DB와 웹 경로를 맞추고, PHP 확장 모듈을 보강하고, 과거 링크가 깨지지 않도록 호환 링크도 만들었다. /usb-android-termux-server/ 같은 기존 주소는 현재 Wide3 복원 현황판으로 이어지고, /g5-01부터 /g5-se10까지의 호환 경로도 정리했다.
공개 주소 https://mobile.netcity.co.kr/는 외부에서 Ubuntu Nginx가 HTTPS를 받고, 내부 USB 경로로 폰의 HTTP 서버에 넘기는 구조다. 완전히 폰이 공인 IP를 직접 받는 것은 아니지만, 실제 콘텐츠 응답과 DB 처리는 갤럭시 postmarketOS 쪽에서 이뤄진다. 이 구조는 현재 환경에서 가장 안전한 공개 방식이다.
마지막 단계는 운영 안정화였다. 재부팅 뒤에도 웹서버가 살아나는지 확인했고, SSH와 웹, PHP-FPM, MariaDB 프로세스를 모두 점검했다. 화면은 서버가 계속 켜진 상태에서 5분 후 자동으로 꺼지게 설정했다. 단추나 키 입력이 들어오면 다시 켜지는 콘솔 blank 방식이라 서버 프로세스에는 영향을 주지 않는다. tty1은 자동 로그인으로 잡아 폰 화면을 켰을 때 바로 서버 콘솔을 확인할 수 있게 했다.
하단 방문 카운터도 복구했다. 숫자는 JSON 파일에 남아 있었지만 PHP-FPM이 nobody 권한으로 돌고 있어 카운터 파일을 쓰지 못했다. 권한을 보정한 뒤 누적 방문 숫자와 오늘 방문 숫자가 다시 증가하는 것을 확인했다. 작은 문제처럼 보이지만, 실제 운영에서는 이런 권한 불일치가 “페이지는 뜨는데 기능은 죽는” 상태를 만든다.
이번 설치에서 얻은 운영 기준
- 스마트폰 리눅스 서버는 설치보다 부팅 후 네트워크 고정과 재부팅 복구가 더 중요하다.
- 와이파이보다 USB IP를 우선으로 잡으면 내부 서버 경로를 안정적으로 유지할 수 있다.
- 루트 파티션에 웹자료를 몰아넣지 말고, USERDATA 파티션을 웹 저장공간으로 마운트하는 편이 안전하다.
- Nginx, PHP-FPM, MariaDB, 파일 권한, 카운터 같은 작은 요소까지 모두 확인해야 “보이는 서버”가 아니라 “작동하는 서버”가 된다.
- 설치 기록, 스크립트, 설정 파일은 한 작업 폴더에 남겨야 다음 장애 때 복구 시간이 줄어든다.
이번 갤럭시 Wide3 postmarketOS 설치는 깔끔한 한 번의 성공담이 아니었다. 다운로드 모드와 메뉴 확인, USB 인식 문제, 라우트 재설정, 저장공간 부족, DB 복원, 카운터 권한까지 작은 장애가 계속 이어졌다. 하지만 그 우여곡절 덕분에 이제 이 폰은 단순한 테스트 장치가 아니라, 부팅 후 다시 웹서버로 돌아오는 모바일 리눅스 서버가 됐다.
관련 공개 주소: mobile.netcity.co.kr
참고: postmarketOS 공식 사이트, postmarketOS 설치 안내, postmarketOS 장치 위키
도시와 외간특수 일을 다룹니다.
댓글
총 0개일반회원은 구글 로그인 후 댓글 작성이 가능합니다.
Google 로그인
첫 댓글을 남겨보세요.