반응형

sqlite 설치 환경

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" 로 검색해보았다.

참고 : https://www.deok.me/entry/CentOS-6x-%EC%97%90%EC%84%9C-version-GLIBC214-not-found-%EC%97%90%EB%9F%AC%EA%B0%80-%EB%B0%9C%EC%83%9D%ED%95%A0%EB%95%8C

 

CentOS 6.x 에서 version 'GLIBC_2.14' not found 에러가 발생할때

CentOS 6.x 에서 version 'GLIBC_2.14' not found 와 같이 에러가 날 경우 처리 방법 입니다. 제 경우 docker-compose 를 사용하려는데 아래와 같이 에러가 나네요. $ docker-compose -v docker-compose: /lib64/libc.so.6: version `

www.deok.me

 

결국 위의 블로그를 참고해 없는 버전에 대해 glibc 를 직접 받아주었다.

나는 2.29, 2.33, 2.34 버전이 없다고 했으니 받아보았다.

linux 서버이니까 다운받아서 filezilla는 번거로우니 wget 으로 설치해보겠다.

wget https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
wget https://ftp.gnu.org/gnu/glibc/glibc-2.33.tar.gz
wget https://ftp.gnu.org/gnu/glibc/glibc-2.34.tar.gz

 

압축 푼 뒤 설치하였다.

 $ 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

LD_LIBRARY_PATH 는 재로그인하면 셋팅이 안될꺼기 때문에

.bash_profile 에 아래와 같이 저장하였다.

export LD_LIBRARY_PATH=/opt/glibc-2.29/lib:$LD_LIBRARY_PATH

 

저장 후에 다시 sqlite3 testdb 를 날려보았다.

결과는?? 똑같았다.... 무엇이 문제인가 생각해보니 /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은 다른 방법이 있는 것 같다...

 

반응형
반응형

재부팅 시 자동 마운트를 등록하는 /etc/fstab에서 에러를 잡아내었다. 

참고 : studyheon.tistory.com/7

그 이후 생각해보니 재부팅 시 자동 마운트 말고도 해야할 작업들이 있었다. 

따라서 해야할 목록들을 실행시키는 스크립트를 만들고, 그 스크립트를 자동으로 실행시키기 위하여 어디에 등록해놔야하는 지 알아보았다. 

 

부팅 시 정해진 서비스/스크립트 실행

기존 : init 이라는 프로그램이 담당

현재 : systemd 가 담당

CentOS 7버전 부터 systemd가 담당하고 있다고 한다. 그리고 이 systemd가 rc.local을 실행시켜준다. 따라서 rc.local에 등록을 해주면 부팅 시 실행을 시켜준다. 

그렇다면~ 그냥 등록만 하면 되는가?? 아니였다.. 당연히 설정이 필요하다. 굳이 실행할 서비스가 없다면 켜져있을 필요가 없으니 처음에는 꺼져있을 것이다. 

systemctl status rc-local.service 명령어로 확인해본다. 

q 누르면 종료

한번도 설정하지 않았다면 inactive라고 나와있을 것이고, fail 로 나와있을 수도 있다. 

얘가 켜져있어야 rc.local 파일을 읽어서 실행시킬 수 있다. 따라서 활성화 시켜줘야한다. 

 

설정방법

1. chmod +x /etc/rc.d/rc.local 

-> 이것은 rc.local이 이 파일의 소유자든, 같은 그룹의 사람이든, 다른 사람이든 실행시킬수 있게 만드는 것이다. 

 

2. systemctl start rc-local.service

-> rc-local.service를 실행시킨다. 

 

3. sytstemctl status rc-local.service

-> 여기서 상태를 확인한다. 

 

이와 같이 나왔다면 아주 잘 성공한 것이다~

하지만... 

Active : fail이라고 나온다면 아주 절망적일텐데 소중한 경험을 할 수 있겠다~ 라고 생각해야한다 ^^ 

(늘 내 뜻대로 잘 안되지...)

 

여기까지 하고 만약 Active가 떴다면 /etc/rc.d/rc.local에 실행할 스크립트를 적어도 리부팅한 결과 아주 잘 작동한다. 

그러나 다음 부분이 있어서 찾아보니 이 다음 부분은 서비스에 해당하는 부분인 것 같다. 

Active가 아니라 fail이라고 떴어도 다음 부분은 서비스 실행이니 따라하도록 한다.

(급하면 밑에 fail 이후 조치를 보시길... )

 

4. vi /usr/lib/systemd/system/rc-local.service

한 뒤 마지막 라인에

[install]

WantedBy=multi-user.target

부분을 추가한다.  

 

5. systemctl enable rc-local.servcie

재부팅 시에도 활성화 되도록 enable 시켜준다. 

 

6. systemctl list-unit-files | grep rc.local

설정되었는 지 확인한다. 

 

자! 이제 위에서 systemctl status rc-local.service 에서 fail 이라고 나오고 밑 쪽에 

 rc-local.service: control process exited, code=exited status=127

이와 같은 에러가 발생하였다면 참고해주시기 바랍니다.

저는 위와같이 status=127 에러를 발생하였고,

열심히 구글링 해봤지만 이와같은 127번 에러는 찾을 수 없었습니다. 

그러나~ 계속 쳐다보다보니 

rc-local.service: control process exited, code=exited status=127

이 부분 위에 보면 어디가 실행이 안되었다. 혹은 어디에서 에러가 났다고 보여집니다.

확인해보니... /etc/rc.d/rc.local 에서 오타가 났음을 확인하였습니다...

따라서 127에러는 /etc/rc.d/rc.local 에서 오타가 났음을 알려주는 코드였습니다....

제 실력을 너무 믿었군요.. 

혹은 오타가 아니더라도 실행할 파일이 해당 위치에 없다던지 이런 오류이니

/etc/rc.d/rc.local을 잘 확인해보시기 바랍니다. 

 

참고 : conory.com/blog/42241  

 

systemd에서 부팅시 실행할 서비스 관리하기 (CentOS 7)

원래 부팅시 정해진 서비스 또는 스크립트를 실행시키는 건 init (System V Init)라는 프로그램의 몫이였습니다. 유닉스가 처음 생길때부터 그래왔고, 지금도 그렇습니다.(하지만 지금은 다른 아이로

conory.com

참고 : keviny.tistory.com/1

 

CentOS7 에서 Systemd로 서비스 등록하기 (+ systemctl vs. service)

CentOS 7부터는 이전에 사용하던 SysV(init system) 대신하여, systemd 을 system & service manager 로 사용합니다. Systemd is a system and service manager for Linux operating systems. It is designed to..

keviny.tistory.com

실행순서 참고 : coding-chobo.tistory.com/68 

 

부팅시 rc.local 활성화 (부팅시 스크립트 자동 실행)

1. "rc.local" 파일의 실행 권항을 부여하기 위해 아래의 명령어를 입력합니다. # chmod +x /etc/rc.d/rc.local 2. 아래의 명령어로 "rc-local.service"의 상태를 확인합니다. # systemctl status rc-local.servi..

coding-chobo.tistory.com

 

 

반응형
반응형

오늘 맞이한 에러는 bad UNC 와 mount error: could not resolve address for:: Unknown error 이렇게 두가지이다.

 

사실 두가지 모두 같은 에러에 해당하는 것 같다.

두가지 모두 /etc/fstab 에 적용한 뒤에 나타나는 에러이다.

 

이 두 가지 에러를 맞이하게 된 배경은 이렇다.

 

SSD 가 고장나서 교체를 하였는데, 미처 /etc/fstab을 백업하지 못하였고 기억을 더듬어 다시 설정하는 와중에 생긴 에러이다. xfs, ext4, nfs 에서는 나타나지 않았는데, NAS를 연결해놓은 cifs 설정에서만 나오는 에러코드였다.

 

확인해본 결과 맞다고 생각했던 등록방법이 아니였다... 

NAS를 cifs로 마운트 시켰는데, 이 경우 /etc/fstab의 등록방법은 앞에 //를 붙혀주고 :를 중간에 붙힐 필요없이 등록하면된다.

예)

(Client에서 설정)

//192.168.0.7/JHKIM /JHKIM cifs _netdev,user=jhkim,pass=1234,vers=1.0  0 0
1 2 3 4 5 6

1. //연결할IP/연결할디렉토리명 

- Server의 IP와 연결할 디렉토리명 연결해서 쓰면 된다. 

2. 만들어놓은 디렉토리

- Client에 만들 디렉토리명

3. 파일시스템

- cifs, xfs, nfs, ext4

4. 옵션

- 보통 defaults를 사용하지만 cifs의 경우 아이디와 비밀번호가 필요하다. user=아이디,pass=비밀번호 로 사용하면된다. 또한, 해당 버전이 필요하다 없으면  안써도 되지만 저의 경우 vers가 없으면 연결이 안됬습니다.. 따라서 vers없이 작동이 안된다면 vers=1.0 으로 설정 후 확인해보시길 바랍니다..

5. 파일 시스템의 백업 사용여부 

- 그냥 통상 0으로 냅둔다.

6. 검사

- 그냥 통상 0으로 냅둔다.

 

이렇게 설정한 뒤에 재부팅을 하여 확인하면 되지만, 매번 재부팅할 순 없으니... 재부팅 전 마운트가 되는 지 확인해본다. mount -a 명령어를 치면 /etc/fstab을 읽어서 마운트 시킨다. 

명령어를 수행한 뒤 결과가 아무것도 안나오면 성공이다.

df -h, df -k 뭐든 마운트 되었는 지 확인한다. 

 

※ 주의점 

맨 앞에 // 를 붙힌다. 중간에 nfs나 ext의 경우 ":연결할디렉토리명" 이지만 cifs는 "/연결할디렉토리명" 해야한다는 점이였다...

 

참고 : shs2810.tistory.com/57

반응형

+ Recent posts