redhat7 MongoDB install with SELinux error_2

2022. 8. 2. 09:57웹개발

Failed to set up listener: SocketException: Address already in use

// 현재 실행중인 프로세스목록들 모두 보기
lsof -iTCP -sTCP:LISTEN -n -P

/*
COMMAND   PID   USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
...
mongod  @@@@@   root   11u  IPv4 @@@@@@@      0t0  TCP *:27017 (LISTEN)
...
*/

// 몽고디 PID 삭제
kill @@@@@

 

 

이후 나온 에러

exception in initAndListen: NonExistentPath: Data directory /data/db not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file., terminating

해결한줄 알았는데 ?

// 가장 많이 나왔던 답 실행
mkdir -p /data/db
# Success!!!

아니 루트에서 데이터와 디비 디렉토리를 만드는 이유를 모르겠는데 다들 만들라고 해서 그냥 만들었다.

이해가 기반해야지 내가 나중에 응용이 되는데... 하 내자신이 답답스럽다. 다음에 더 찾아본다.

 

 

이후 나온 에러

// mongod 실행시
CONTROL  [LogicalSessionCacheReap] Sessions collection is not set up; 
waiting until next s essions reap interval: config.system.sessions does not exist

// systemctl status mongod -l 실행시
ERROR: child process failed, exited with error number 14

Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted

찾아보니 Err-14는 권한문제라고 한다.

tmp폴더에서 mongodb-27017.sock의 권한이 어떤지 확인해야한다.

하지만 내가 이전에 삭제했어서 없었다.

tmp폴더 이름에서도 알 수 있듯이 순간 생성되고 순간 삭제되는 폴더라서, 이전에 삭제한건 상관 없다.

창 하나 더 켜서 mongod 실행 후 다시 폴더를 보면 생성되어 있는걸 알 수 있다.

// 폴더 혹은 파일 권한부여
chown mongod:mongod /tmp/mongodb-27017.sock

 

 

아 이제 에러는 없는데 아직도 active fail이다.

이제 진짜 문제가 뭔지 읽어보자

Job for mongod.service failed because the control process exited with error code. 
See "systemctl status mongod.service" and "journalctl -xe" for details.

// systemctl status mongod.service
# 프로세스와 연결정보, 간단한 에러 타이틀

// journalctl -xe
# 간단한 에러 타이틀 및 상세 정보

두 개 미리 쳐두고 하나씩 읽는데 보니까 가장 기본적인 프로세스 연결상태중 하나가 fail이었다.

Process: 21366 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=1/FAILURE)

/usr/bin/mongod 가서 먼저 존재하는지 확인하고 권한을 보아야한다.

 

 

권한 문제 없었다.

그보다 이것저것 하다가 또 락파일을 삭제한건지 그게 문제였던것 같아서 락파일 생성했다.

// 하기 경로에 락파일 생성
touch /var/run/mongodb/mongod.lock

// 접근권한
chown mongod:mongod mongod.lock

// 수정권한
chmod 755 mongod.lock

 

이후 다시 재시작해보니 또다른 에러 보임. 근데 익숙한 바이브

// 시작(재시작이 아님 애초에 실행이 안되어있음)
systemctl start mongod

# Err
# STORAGE  [initandlisten] exception in initAndListen: Location28596: 
# Unable to determine status of lock file in the data directory 
# /home/usr/app/data/mongo/data/db: boost::filesystem::status: Permission denied: 
# "/home/usr/mongo/data/db/mongod.lock", terminating

 

 

 

해당경로에 록파일이 없어서 그런거 아닐까? 다시 만든다.(생성 및 권한부여까지 동일)

 

 

 

다 해결한 것 같은데 아직도 액티브 페일 with err no 100이다.

// journalctl -xe
SELinux is preventing /usr/bin/mongod from search access on the directory /sys/fs/cgroup

뭔가 거의 다 온 느낌이다. 이번에는 SELinux 에러가 떴다.

SELinux찾다보니 cgroup과 netstat 접근을 허용해주어야한다는 글을 보았다.

 

하 셀리눅스가 뭔지도 모르는데...일단 한다.

셀리눅스가 막고있다고 하니 확인해본다.

// enforcing이라 실행중임을 알 수 있다.
$ grep "SELINUX=" /etc/sysconfig/selinux
# SELINUX= can take one of these three values:
SELINUX=enforcing

OR

$ getenforce
Enforcing


// 임시로 셀리눅스 끈다
setenforce 0

해당 프로그램을 셀리눅스에서 허가하도록 하는 방향도 있는데 그건 진짜 못건드리겠어서 일단 끄고 실행해보려고 한다.

 

아직도 안끝났다. 진짜 조금만 더 해보고 안되면 헬프 부르자

728x90

'웹개발' 카테고리의 다른 글

AWS EC2 기초 세팅_Ubuntu online  (0) 2022.08.08
AWS EC2 생성 및 연결 확인_Ubuntu  (0) 2022.08.08
redhat7 MongoDB install with yum error_1  (0) 2022.08.01
netstat, ss  (0) 2022.07.29
nodemon  (0) 2022.07.21