[NAS] npm 을 실행할때 `no space left on device` 에러 대처

Development Server

[NAS] npm 을 실행할때 `no space left on device` 에러 대처

증상

npm updatenpm install할때 다음과 같은 메시지가 뜨면서 설치가 안되면서 나스를 재부팅해야할 정도로 뻗어버린다.

npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated minimatch@0.2.14: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated lodash@1.0.2: lodash@<3.0.0 is no longer maintained. Upgrade to lodash@^4.0.0.
npm WARN deprecated graceful-fs@1.2.3: graceful-fs v3.0.0 and before will fail on node releases >= v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.
npm WARN optional Skipping failed optional dependency /http-signature/sshpk:
npm WARN nospc ENOSPC: no space left on device, mkdir '/root/.npm/sshpk'
npm ERR! Linux 3.4.6
npm ERR! argv "/share/HDA_DATA/.qpkg/nodejs/node-v6.5.0-linux-x86/bin/node" "/Apps/bin/npm" "install"
npm ERR! node v6.5.0
npm ERR! npm  v3.10.3
npm ERR! path /root/.npm/jsprim/1.3.0
npm ERR! code ENOSPC
npm ERR! errno -28
npm ERR! syscall mkdir

npm ERR! nospc ENOSPC: no space left on device, mkdir '/root/.npm/jsprim/1.3.0'
npm ERR! nospc This is most likely not a problem with npm itself
npm ERR! nospc and is related to insufficient space on your system.

npm ERR! Please include the following file with any support request:
npm ERR!     /share/HDA_DATA/Web/goose-dev.com/src/npm-debug.log


위 오류가 뜬 후에 qnap 관리자에서는 다음과 같은 메시지의 오류를 보면서 기능이 제대로 작동하지 않는다는것을 볼 수 있다. (팬이 굉음을 내며 돌아가거나, 공유폴더가 하나도 안뜨는 현상을 보임)

The system is unable to save your settings (file = [/etc/config/uLinux.conf], section = [wlan0], field = [is_default_gw], value = [FALSE]) due to insufficient ramdisk space. If restarting the server does not solve the problem please contact support for further assistance.

원인

공간이 부족하다는 의미인데 전체 공간이 부족하다는 의미보다는 경로에서 허용된 용량이 정해져 있는게 그걸 초과한거 같아 보인다.

구글링을 해보니 npm을 설치할때 .npm 디렉토리 속에 임시 파일들을 넣어두는데 여기서 오류가 뜨는것 같아보였다.
그래서 .npm을 검색해보니 /root/.npm경로에 들어있는것을 찾았다. 추측으로써 /root 경로가 용량제한이 걸려서 에러가 난거같아 보인다.

해결

/root 경로가 문제가 있으면 다른곳으로 이전시켜주는게 좋아 보였다. 그래서 심볼링 링크로 /tmp/.npm로 돌려줬다. tmp속에 .npm 디렉토리를 만든 이유는 시스템의 임시파일이랑 겹치는걸 회피하기 위함이다.

커멘드에서 직접 수정하고 재부팅하면 없어지기 때문에 nodejs qpkg가 있는곳에 sh파일을 수정하여 nodejs를 실행하면 /tmp/.npm으로 경로 변하게 스크립트 명령을 고쳐주면 된다.

cd {QPKG_DIR}/nodejs
vim nodejs.sh

이걸로 편집기를 열었다. 다음과 같이 명령을 넣어주면 된다.

start

mkdir /tmp/.npm
mkdir /tmp/.npm/debug
ln -s /tmp/.npm /root/.npm

stop

rm -rf /tmp/.npm

sh를 수정하여 다음과 같은 모습으로 만들었다.

_2016-09-01_22745.png

저장하고 나와서 ./nodejs.sh restart 명령을 실행해주면 /root/.npm이 심볼릭 링크로 걸려있는것을 확인할 수 있다.