개발 노트
[QNAP] Node 설치 본문
Qnap Nas Model : TS-231+
펌웨어 버전 : 4.4.2.1273 Build 20200413
Linux 버전 : Linux [이름] 4.2.8 #2 SMP Mon Apr 13 06:08:14 CST 2020 armv7l unknown
1번 ) APP Center를 이용하여 Node 설치
Node에서 파일을 실행시키기 위해 App Center 최신버전인 v8.9.4.0.1을 설치했다.
참고 : 기존 App Center에서 제공하는 Node 버전은 아래와 같다. (시놀로지는 v12, 14, 16을 제공하던데..)
설치 완료 이후 node는 오류 없이 실행되는 반면 npm은 그 어떤 command를 입력해도 아래와 같은 오류가 발생하였다.
module.js:540
throw err;
^
Error: Cannot find module '../lib/utils/unsupported.js'
관련하여 아무리 검색해도 결과는 Node를 재설치 하라는 답변 뿐이었다.
하지만 Nas 설치된 linux에는 apt 혹은 apt-get이 존재하지 않는것으로 확인되었다.
그래서 apt, apt-get으로 설치하는 방법은 사용할 수 없었다.
※ 참고로 Node 4, 6 버전을 설치하지 않은 이유는 제작한 스크립트에서 Async, Await를 사용하는데 해당 함수는 Node 8버전 이상 부터 사용이 가능하다고 하여 설치하지 않았다.
2번 ) NVM 이용
다른 방법을 찾던 도중 App Center를 통하지 않고 nvm을 이용해서 Nodejs를 설치하려 했으나,
nvm 설치 후 관련 command를 입력하면 아래와 같이 출력되었다.
[~] # nvm ls-remote
grep: invalid option -- 'w'
sort: invalid option -- 't'
BusyBox v1.01 (2020.04.12-19:10+0000) multi-call binary
Usage: grep [-ihHnqvs] PATTERN [FILEs...]
Search for PATTERN in each FILE or standard input.
Options:
-H prefix output lines with filename where match was found
-h suppress the prefixing filename on output
-i ignore case distinctions
-l list names of files that match
-n print line number with output lines
-q be quiet. Returns 0 if result was found, 1 otherwise
-v select non-matching lines
-s suppress file open/read error messages
BusyBox v1.01 (2020.04.12-19:10+0000) multi-call binary
Usage: sort [-n] [FILE]...
Sorts lines of text in the specified files
Options:
-n sort numerics
grep: invalid option -- 'w'
BusyBox v1.01 (2020.04.12-19:10+0000) multi-call binary
Usage: grep [-ihHnqvs] PATTERN [FILEs...]
Search for PATTERN in each FILE or standard input.
Options:
-H prefix output lines with filename where match was found
-h suppress the prefixing filename on output
-i ignore case distinctions
-l list names of files that match
-n print line number with output lines
-q be quiet. Returns 0 if result was found, 1 otherwise
-v select non-matching lines
-s suppress file open/read error messages
N/A
BusyBox라는것이 정확하게는 무엇인지 모르겠으나, nvm Command와 겹쳐서 관련 작업이 진행되지 않았다.
3번 ) Node 다른 버전 설치
Nodejs 버전을 변경하여 설치해보았다.
기존 8버전이 설치되어 있는 상태에서 가장 최신버전인 Node v16의 파일을 다운받았다.
( URL : https://nodejs.org/ko/download/ )
리눅스 버전이 ARM7 버전이라서 해당하는 버전의 Node를 다운받았고 파일 확장자는 tar.xz였다.
하지만 xz파일을 압축해제 하기 위해서는 관련 라이브러리가 필요했지만 linux에 설치 할 수 없어서 Mac에서 압축해제한 뒤
tar 파일로 다시 압축을 하였고 해당 파일을 FTP에 업로드 했다.
압축해제 이후 해당 Node-v16 폴더를 기존에 설치된 node 위치로 옮겼다.
APP Center를 이용한 Node 설치 경로 : /share/[파티션명]/.qpkg/node-v8/
새로운 Node 폴더 이동 : mv /share/Web/node-v16/ /share/[파티션명]/.qpkg/node-v8/
기존에 설치된 Node 폴더의 이름을 변경해주고, 새로 내려받은 Node 폴더의 이름을 기존에 사용되는 Node로 변경해주었다.
설정은 그대로지만, 폴더만 서로 바꿔치기 하여 적용하려고 하였다.
( 참고한 URL : https://note.redgoose.me/article/1853/ )
하지만 Node, Npm Command 호출시 아래와 같은 오류가 발생하였다.
node: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
libatomic.so.1 파일을 설치하려 했으나, 해당 파일도 apt를 이용하여 설치해야 했다.
4번 ) Node 다른 버전 설치 (v10)
3번에서 발생한 오류에 표시된 libatomic.so.1은 Node 12버전 이후부터 사용된다는 내용을 확인하여, 버전을 낮추어서 설치하면 되지 않을까 싶어서 v10을 설치하기로 하였다.
3번에서 사용한 방법과 비슷하게 진행하였다.
3번에서는 기존 APP Center를 이용하여 8버전을 설치한 이후, 해당 버전을 치환하는 방식으로 진행한 반면
이번에는 모두 삭제 처리 이후, 별도의 폴더에 Node를 설치하는것으로 진행하였다.
Node 설치 경로 : /usr/local/lib
Node 홈페이지에서 ARM7전용 v10 파일을 다운받아서 이전과 동일하게 Mac에서 작업 한 후, FTP로 업로드하고 해당 위치로 이동시켰다.
압축해제 이후 실제로 node, npm 명령어가 실행되는 위치는 '/usr/local/bin'으로 잡혀 있었기에 심볼릭 링크를 추가하였다.
ln -s /usr/local/lib/node-v10/bin/* /usr/local/bin/
# 추가된 내용
lrwxrwxrwx 1 admin administ 50 Mar 14 15:23 node -> /usr/local/lib/node-v10/bin/node*
lrwxrwxrwx 1 admin administ 49 Mar 14 15:23 npm -> /usr/local/lib/node-v10/bin/npm*
lrwxrwxrwx 1 admin administ 49 Mar 14 15:23 npx -> /usr/local/lib/node-v10/bin/npx*
Node, Npm Command를 실행하니 아래와 같은 오류가 발생하였다.
node: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
해당 오류를 검색해본 결과 libstdc++.so 파일의 버전이 맞지 않는것으로 확인되어 변경해주기로 하였다.
오류로 표시된 libstdc++.so.6의 버전을 확인해본 결과 6.0.18이었고, NAS에 설치된 libstdc++.so.6의 버전은 6.0.21이었다.
아래 URL을 참고하여 동일하게 진행해주었다.
( 참고 URL : https://develop-man.tistory.com/3)
# libstdc++.so.6 버전 확인
[~] # ll /usr/lib/libstdc++.so.6
lrwxrwxrwx 1 admin administ 19 Mar 12 02:20 libstdc++.so.6 -> libstdc++.so.6.0.18
# libstdc++.so.6 파일 검색
[~] # find / -name "libstdc++.so.6*"
/share/HDD_DATA/.qpkg/QDMS/qmpd/lib/libstdc++.so.6.0.21
# 새로운 버전 파일 복사
[~] # cp /share/HDD_DATA/.qpkg/QDMS/qmpd/lib/libstdc++.so.6.0.21 /usr/lib
# 기존 심볼릭 링크 삭제
[~] # rm /usr/lib/libstdc++.so.6
# 새로운 버전으로 심볼릭 링크 추가
[~] # ln -s /usr/lib/libstdc++.so.6.0.21 /usr/lib/libstdc++.so.6
드디어 설치 성공
[~] # node -v
v10.24.1
[~] # npm -v
6.14.12
** armv7l 버전은 Linux 커널 + busybox + 라이브러리 정도며, 일반적인 Linux 배포판과 다름
결국 Node v10을 설치했지만, 내가 원하는 기능들은 모두 Node v12 이상만 가능해서 설치는 성공했지만 아무짝에 쓸모없어짐 ㅠㅠ
(Node v12로 가기 위해선 apt를 이용한 설치가 필수지만 할 수 있는 방법이 없음)
NAS로는 정말 간단한 웹사이트 정도만 활용해야 할 듯...
'개발 > 애증의 QNAP' 카테고리의 다른 글
[QNAP] Crontab 설정 (0) | 2022.03.16 |
---|---|
[QNAP] Node permission denied (0) | 2022.03.11 |
[QNAP] MYSQL (0) | 2022.02.23 |