linux version : Rocky Linux release 8.7 (Green Obsidian)
kernel version : 4.18.0-425.10.1.el8_7.x86_64
sqlite 를 처음 설치하고, 테스트하려고 테스트 명령어를 날려봤다.
sqlite3 test.db
sqlite3 test.db 라는 명령어를 처음 수행하였으나, error 가 발생하였다.
$ sqlite3 test
sqlite3: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by sqlite3)
sqlite3: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by sqlite3)
sqlite3: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by sqlite3)
일단 내가 해석해보자면, sqlite3 를 사용할때 필요한 library 들 中 libm.so.6 과 libc.so.6 라이브러리에 GLIBC_2.29, 2.33, 2.34 버전을 찾을 수 없다는 에러 메시지인거 같다.
우선 ldd 명령어로 라이브러리 의존성을 확인했다.
./sqlite3: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./sqlite3)
linux-vdso.so.1 (0x00007ffc239c9000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0c4cc00000)
libz.so.1 => /lib64/libz.so.1 (0x00007f0c4c9e8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0c4c622000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0c4cf82000)
libm.so.6, libc.so.6 이 버젓이 있다.
결국 라이브러리를 업데이트를 해줘야할것같다.
google에 "version glibc_2.29' not found centos" 로 검색해보았다.
$ tar zxvf glibc-2.29.tar.gz
$ cd glibc-2.29
$ mkdir build; cd build;
$ ../configure --prefix=/opt/glibc-2.29
$ make -j4
$ sudo make install
$ export LD_LIBRARY_PATH=/opt/glibc-2.29/lib
결과는?? 똑같았다.... 무엇이 문제인가 생각해보니 /lib64 에 있던 libm.so.6이 링크였고, libm.so-2.28을 물고있어서 링크를 교체해 주었다.
# libm.so.6 이 있는 위치로 이동
cd /lib64
# 기존 링크 삭제
sudo rm libm.so.6
# 삭제후 재 2-29 버전의 libm 으로 교체
sudo ln -s /opt/glibc-2.29/lib/libm-29.so libm.so.6
libc.so.6 같은경우는 조심해야한다... 링크 삭제시에 기본 명령어들을 사용할수없다.
이후 sqlite 재실행 해보았다.
$ sqlite3 testdb
sqlite3: /lib64/libc.so.6: version `GLIBC_2.33' not found (required by sqlite3)
sqlite3: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by sqlite3)
드디어 2.29 버전은 사라졌다!!
2.33 과 2.34를 이제 나머지 셋팅을 해주어야하는데 libc.so.6은 다른 방법이 있는 것 같다...
linux 에서 스트림은 network 를 연결할 때, device 를 연결할 때 process 끼리 소통할 때 사용된다.
linux 는 파일로 모든 것이 이루어져 있기 때문에 파일에 관한 시스템 콜인 open, close, read, write 가 stream 을 다루는 함수가 된다. open 함수는 fd 값을 반환시키는데, fd가 바로 스트림이 된다. (fd 가 파일을 연결시켜주는 통로가 되기 때문에)
int open(const char* path, int flags, mode_t mode)
return 값이 int 형인 fd 가 된다. 즉 스트림을 만들어주는 함수가 이 open 함수가 되는 것이다.
그렇게 fd (stream) 을 받았으면 그 스트림에 데이터를 흘려 보낸다. 어떻게? write 함수로
# 확인 명령어
rpm -qa | grep nfs
# 결과값이 없을 경우 설치
# 아래 명령어로 설치할수있는 패키지 확인
yum search nfs
# 그 중에 nfs-utils.x86_64 설치 (nfs-util을 설치하면 된다. 그 뒤는 각자 설정에 따라)
yum install -y nfs-utils.x86_64