Table Of Contents
- 소스파일 받아서 컴파일 하기
- 바이너리 받아서 설치하기
- 빌드된 소스 다운로드 및 bin 설치 with ROOT권한
- 빌드된 소스 다운로드 및 bin 설치 without ROOT권한
- 빌드된 소스 다운로드 및 library 설치
- ldconfig 방법
- LD_LIBRARY_PATH 방법
서론
linux 컴퓨터에 어떤 프로그램을 설치하는 방법은 3가지가 있다. 여기선 제일쉬운 패키지 관리자 사용방법을 제외한 3번 빌드된 바이너리 파일을 받아서 설치 하는 방법을 설명한다.
- APT, YUM같은 패키지 관라자 로 실치
- 소스 파일을 받아서, 빌드해서 설치 (configure)
- 빌드된 바이너리 파일을 받아서, 설치하기
난 라즈베리파이 Zero 에 nodejs를 설치하려는데, apt install 이 armv6l 을 지원하지 않는다고 에러가 나서, 소스로 설치해야 했다.
제길!!1818 apt/yum에서 설치가 안되는 그때부터 힘들어 진다
소스파일 받아서 컴파일 하기
아래처럼 파일처럼 OS타입(linux)나 CPU타입(armv6l) 이 없으면, 이건 빌드(configure/make)를 해야하는 파일이라고 생각하면 된다.
$ node-v4.2.3.tar.gz
빌드하는 방법은 아래처럼 ./configure -> make -> make install 의 3단계를 거쳐야 한다. 여기서 제일 중요한건 configure 로서, 어디에 설치할치, CPU타입, 빌드타입을 적어서 알려줘야 한다. 여기선 바이너리 설치를 우선적으로 설명한다.
$ node-v4.2.3.tar.gz
$ tar -zxvf node-v4.2.3.tar.gz
$ cd node-v4.2.3
$ export CROSS_COMPILE="arm-linux-gnueabi"
$ ./configure --prefix=/usr/local/nodejs/v4.2.3 --target=${CROSS_COMPILE} --host=${CROSS_COMPILE} --build=${CROSS_COMPILE}
$ make
$ make install
바이너리 받아서 설치 하기
소스파일 이름에 OS타입(linux)나 CPU타입(armv6l) 이 적혀 있으면, 이건 바이너리 버전 즉 빌드된 파일이라고 생각하면 된다.
$ node-v4.9.1-linux-armv6l.tar
바이너리 다운로드 및 bin 설치 with root권한
linux에는 아래와 같은 암묵적인 규칙이 있다. 시스템 실행파일은 보통 /usr/bin, 사용자가 설치하는 실행파일은 /usr/local/bin경로에 설치하는 규칙말이다. 물론 사용자가 설치하는 실행파일을 /usr/bin에 설치하는것도 가능하다. sudo 권한만 있으면 불가능 한게 없다. 그러나 개판이 되겠지? 그러나, 안하는게 좋다.
경로 | 설명 |
---|---|
/bin | 시스템이 설치하는 가장 기본적인 프로그램의 경로 |
/usr/bin | 시스템이 설치하는 기본보다 확장된 프로그램의 경로 |
/usr/local/bin | 일반 사용자가 직접 설치하는 프로그램을 위한 경로 |
그리고, linux 시스템적으로 /usr/local/bin폴더 가 /usr보다 우선순위를 높게 해주었다. 왜냐면 사용자가 시스템 디폴트 환경이 마음에 안들어서, 소스받아서 설치하면 이게 우선순위가 높아야 그걸 쓸수 있지 않겠는가?? 아래처럼 PATH 환경변수를 보면, /usr/local/bin 의 우선순의가 높아서, 똑같은 실행파일이 있을시 /usr/local/bin의 실행파일이 overwrite해서 실행된다.
$ export
declare -x PATH="/usr/local/bin:/usr/bin:/bin::
이런 규칙을 따라서, /usr/local/src에 다운 받고, 압축은 /usr/local/nodejs에서 해제한다.
$ sudo mkdir -p /usr/local/src /usr/local/nodejs
$ cd /usr/local/src
$ wget http://nodejs.org/dist/v0.8.2/node-v4.9.1-linux-armv6l.tar.gz
$ tar -xvf node-v4.9.1-linux-armv6l.tar -C /usr/local/nodejs
그럼 실행파일은 어디? /usr/local/bin 에 설치해야 한다. 아래처럼 링크된 실행파일을 /usr/local/bin에 설치해주면 끝이다.
$ sudo ln -sf /usr/local/nodejs/v4.9.1/bin/node /usr/local/bin/node
$ sudo ln -sf /usr/local/nodejs/v4.9.1/bin/npm /usr/local/bin/npm
$ node --version
v4.9.1
바이너리 다운로드 및 bin 설치 without root권한
root권한 이 없으면, 위처럼 /usr/local/ 에 설치할수가 없다. 이럴때는 HOME폴더에 설치를 해야 한다. xz 확장자는 새로나온 압축툴입니다. gzip보다 30% 압축률이 높다네요
$ mkdir ~/src
$ cd ~/src
$ wget https://nodejs.org/download/release/v14.15.5/node-v14.x-linux-x64.tar.xz
$ tar -Jxvf node-v14.x-linux-tar.xz
바이너리 다운로드 후에, 시스템에게 알려줘야 한다. 시스템에 알려주는 방법은 PATH 설정을 통해서 하면 된다. PATH에 바이너리가 설치된 경로를 추가해 주자. 이렇게 하면 node의 global(-g) 경로로 인식을 한다.
$ vi ~/.bash_profile
$ export PATH=$HOME/src/bin:$PATH
$ source ~/.bash_profile
설치후 node tool을 설치해 보자. 설치로그를 보면 설치경로가 ~/src/node-v14.X.X/lib/node_modules 가 되었다.
$ which node
~/src/node/bin/node
$ npm install -g pm2
/home/manager/src/node-v14.15.5-linux-x64/bin/pm2 -> /home/manager/src/node-v14.15.5-linux-x64/lib/node_modules/pm2/bin/pm2
/home/manager/src/node-v14.15.5-linux-x64/bin/pm2-dev -> /home/manager/src/node-v14.15.5-linux-x64/lib/node_modules/pm2/bin/pm2-dev
node가 설치가 된 경로가 아닌, HOME같은 이상한 경로로 설치될수도 있다. 이런경우는 yum으로 설치하고, 바이너리로도 설치하고 섞어서 설치할때 이런 에러가 발생할수 있다. 이럴때는 아래처럼 설정파일을 삭제해 주자.
$ rm -rf ~/.npm
$ rm -rf node_modules
빌드된 소스 다운로드 및 library 설치
library도 아래와 같은 암묵적인 규칙이 있다. 즉 /usr/local/lib 에다가 사용자가 직접설치하는 lib을 설치하는게 좋다.
경로 | 설명 |
---|---|
/lib | 시스템이 설치하는 가장 기본적인 library 경로 |
/usr/lib | 시스템이 설치하는 기본보다 확장된 library 경로 |
/usr/local/lib | 일반 사용자가 직접 설치하는 library를 위한 경로 |
아래처럼 /usr/local/lib/oracle 밑에 oracle client 라이브러리를 설치한다. |
$ mkdir /usr/local/lib/oracle
$ cd /usr/local/lib/oracle
$ wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linuxx64.zip
$ unzip instantclient-basic-linuxx64.zip
그럼, 설치한 library를 쓸려면 어떻게 해야 할까? library파일을 시스템이 인식하게 하려면 2가지 방법이 있다. ldconfig 방법과 LD_LIBRARY_PATH 방법이다.
ldconfig방법
ldconfig를 실행하면, /etc/ld.so.conf 에 설정된 폴더들에 존재하는 so파일들을 /etc/ld.so.cache 에 저장해서 쓰게 해 준다. https://stackoverflow.com/questions/4743233/is-usr-local-lib-searched-for-shared-libraries
sudo sh -c "echo /usr/local/lib/oracle/instantclient_21_1 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
...이제 SO파일 쓸수 있다.
LD_LIBRARY_PATH를 수정하는 방법
LD_LIBRARY_PATH는 PATH 와 비슷하게, SO파일이 존재하는 경로이다. 또한 /usr/local/lib 이 /usr/lib 보다 우선순위가 높은것을 알수 있다.
echo $LD_LIBRARY_PATH
declare -x LD_LIBRARY_PATH="/usr/local/lib:/usr/lib"
만약! ldconfig를 안한다면, 오라클 라이브러리 SO가 있는 폴더를 LD_LIBRARY_PATH에 제일 앞에 추가해 준다.
vi ~/.bash_profile
LD_LIBRARY_PATH="/opt/oracle/instantclient_21_1:/usr/local/lib:/usr/lib"
expot LD_LIBRARY_PATH