반응형

OS Version : Rocky Linux release 9.3 (Blue Onyx)

 

해당 Error 원인 : 

libnsl.so.1 이 없다. 

dnf install -y libnsl

 

조치 후 정상적이다.

 

 

반응형
반응형
bb.c:(.text+0x0): multiple definition of `test'
/tmp/ccoyicve.o:aa.c:(.text+0x0): first defined here

 

 

첫번째 줄 해석 그대로 중복된 정의라는 얘기이다.

 

아래와 같이 해당 함수가 중복으로 선언이 되었다는 것을 알 수 있다. 

 

두번째 줄의 경우 첫번째로 선언되어 있는 곳을 알려준다. 

 

따라서 중복되는 함수를 유의 깊게 보면 된다.

 

위의 경우 test 라는 함수가 중복이 되었고, bb.c 파일과 aa.c 파일에 중복 선언이 되어있는 test 함수를 체크한다.

 

반응형
반응형

 

아예 ls, mv, cp 모든 기본명령어가 안먹혔다....

 

google에 검색하여 구세주같은 글을 보았다.

 

https://sh-safer.tistory.com/249

 

libc.so.6 심볼릭 링크 삭제시 복구 방법

원인 및 현상 무슨 정신으로 unlink libc.so.6 를 진행하여 shared library 심볼릭링크를 끊어 버렸다 shared library를 찾지 못한다는 내용. libc.so.6 cannot open shared object file no such file or directory 터미널까지 나

sh-safer.tistory.com

 

위 블로그에 있는 마지막 명령어가 먹어서 다행히도 잘 해결했다.

ldconfig -l -v /lib64/libc-2.24.so

 

 

 

반응형
반응형

glibc 를 설치하기 위하여 빌드를 하는 과정에서 생긴 오류이다.

bison 이 없거나 지나치게 오래되었다라는 건데... 

bison을 설치하여보자!!

 

참고 : https://stackoverflow.com/questions/53735137/glibc-configure-error-yacc-bison-missing

 

glibc configure error: yacc/bison missing

I'm following the instructions from LFS but with a twist: I'm only following parts of Section 5 - Constructing a Temporary System to the extent that I can build my own GCC, reason being that this i...

stackoverflow.com

 

역시나 stackoverflow 에는 없는 질문이 없다...

위와 같이 해결해보았다.

 

wget https://ftp.gnu.org/gnu/bison/bison-3.2.tar.gz
tar xf bison-3.2.tar.gz
cd bison-3.2
./configure --prefix=$HOME/install
make
make install

 

3.2 버전을 설치를 하는것이 해결이 될지는 모른다...

맨 위의 에러메세지에서 없거나 아주 오래되었다는거니까, 만약에 이 버전도 오래되었다면 최신버전을 설치해야겠다.

 

나와있는대로 조치하니 잘해결되었다!!~~ 

오늘도 무사히 셋팅을 하였다.

반응형
반응형

esxi 에서 서버의 디스크를 증설하였고, 그 마지막 단계에서 xfs_grow 에서 error 가 났다.

디스크 증설 도중에 아래와 같은 에러가 났다.

$ xfs_growfs /dev/mapper/centos-home
xfs_growfs: /dev/mapper/centos-home is not a mounted XFS filesystem

 

/dev/mapper/centos-home 이 XFS 파일시스템으로 마운트되지 않았다는 얘기였다...

cat /etc/fstab 으로 확인해보니 /dev/mapper/centos-root 가 XFS로 되어있었다. 정확한 mount 포인트가 아니였다.

정확한 mount 포인트를 설정해주어야 가능했다. centos-home 의 경우에는 마운트포인트가 '/' 였기 때문에 그 전과정까지는 centos-root 에 할당이 잘 되었던것같다. (lsblk 명령어 수행시 정상적으로 보인 이유) 

xfs_growfs /

위와 같이 명령어 수행시 정상적으로 수행되었다. 

 

*) 추측이 맞다면 xfs_growfs /dev/mapper/centos-root 로도 정상적으로 작동 될것같다. 안된다면 디스크 증설작업에서 lvextend 명령어에서도 /dev/mapper/centos-home 으로 설정이 되어서 그랬을것 같다... 다시 초기화하고 설정해야할듯싶다.

반응형
반응형

컴파일 시 warning

아래와 같은 warning 이 발생하였다.

warning: ‘%s’ directive writing up to 255 bytes into a region of size between 192 and 255 [-Wformat-overflow=]

해당 warning은 버퍼오버 플로우를 방지하라는 warning 이다.

이유는 담을 변수의 사이즈가 더 작거나 같거나 할때 나타는 warning 이다.

예시로는 아래와 같은 상황이다.

ex) 
char buf[5];
long a = 10000000;
sprintf( buf, "%d", a )

결국엔 buf의 사이즈보다 더 큰 상황이 올 것이고, 버퍼오버플로우가 날 것이다.

이 부분을 방지하는 것이다.

 

참고 : https://stackoverflow.com/questions/51697753/how-to-suppress-sprintf-warning-directive-writing-between-1-and-11-bytes-into

반응형
반응형

재부팅 시 자동 마운트를 등록하는 /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