RHEL(CentOS) /sbin/init 파일을 못 찾고 부팅이 안 될경우?

RHEL(CentOS) 환경에서 운영중 갑자기 kernel panic 이 발생하고 부팅이 안 되는경우?
그리고 만약 시스템 파일이 유실  되었다면 어떻게 추적할까?

 

  1. OS CD 를 이용하여 rescue mode 진입 ( continue mode )
    또는 skip mode 로 진입하여 /mnt/sysimage 를 “/” 으로 하여 마운트를 진행
    ex)
    /mnt/sysimage
    /mnt/sysimage/boot
    /mnt/sysimage/tmp
  2.  rpm 명령을 이용하여 점검
    #rpm –root=/mnt/sysimage -Va > /tmp/rpm_va.txt
    해당 명령어상의 “missing” 체크
  3. 위의 “missing” 으로 표시된 파일들 restore 진행 또는 동일한 시스템의 파일을 복사하여
    restore 진행

    참고 :
    Link : https://access.redhat.com/solutions/29892
    Link : https://access.redhat.com/solutions/63257

awk 에서 if 문 사용하여 특정 컬럼의 특정 값 찾아내기

awk 환경에서 if 문을 사용하여 특정 값을 뽑아낼 수 있다.

ex) 아래와 같은 ps 결과에서 사용자가 “www-data” 인 값을을 뽑아내기

#ps -ef
www-data 17505 826 0 16:07 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17524 826 0 16:07 ? 00:00:00 /usr/sbin/apache2 -k start
root 17545 515 0 16:07 ? 00:00:00 sshd: root@pts/1
root 17547 17545 0 16:07 pts/1 00:00:00 -bash
www-data 17667 826 0 16:09 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17816 826 0 16:13 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17837 826 0 16:14 ? 00:00:00 /usr/sbin/apache2 -k start

 

@ awk 에 if 문을 사용하여 “www-data” 사용자 프로세스 를 출력하는 방법

# ps -ef|awk ‘{if ($1==”www-data”)print}’
www-data 1615 826 0 00:00 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17466 826 0 16:03 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17524 826 0 16:07 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17667 826 0 16:09 ? 00:00:00 /usr/sbin/apache2 -k start
www-data 17816 826 0 16:13 ? 00:00:00 /usr/sbin/apache2 -k start

 

awk 에 if 문을 이용하면 process 상태가 “D” stat 인 프로세스를 찾을때도 유용하다.

참고 : https://goo.gl/zH4qrZ

RHEL7(CentOS7) 에서 Oracle 11gR2 설치시 발생하는 문제?

간만에 RHEL7 에 Oracle 11gR2 를 설치하다가 발생된 문제점을 정리 함.

 

1. RHE7 Packages : ( 패키지가 기본 미디어에 포함되어 있지 않음 )
glibc-static, compat-libstdc++ – optional channel <== 해당 채널에서 다운로드

 

2. runInstaller 설치 과정에서 중단되는 문제

INFO: liblist`

INFO: /lib64/libstdc++.so.5: undefined reference to `memcpy@GLIBC_2.14'
collect2: error: ld returned 1 exit status

INFO: make: *** [ctxhx] Error 1

INFO: End output from spawned process.
INFO: ----------------------------------
INFO: Exception thrown from action: make

solution :
아래의 내용 실행

# Fix ctx/lib/ins_ctx.mk
 
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
 
cat << __EOF__ > /tmp/memcpy_wrap.c
#include 
#include 
 
asm (".symver wrap_memcpy, memcpy@GLIBC_2.14");
void *wrap_memcpy(void *dest, const void *src, size_t n) {
return memcpy(dest, src, n);
}
__EOF__
 
if [[ -e "${ORACLE_HOME}/ctx/lib/ins_ctx.mk" ]]; then
sed -i -e 's/\$(INSO_LINK)/\$(INSO_LINK) -Wl,--wrap=memcpy_wrap \$(ORACLE_HOME)\/ctx\/lib\/memcpy_wrap.o/g' ${ORACLE_HOME}/ctx/lib/ins_ctx.mk
gcc -c /tmp/memcpy_wrap.c -o ${ORACLE_HOME}/ctx/lib/memcpy_wrap.o && rm /tmp/memcpy_wrap.c
fi

link : http://www.uxora.com/oracle/dba/23-oracle-installation-errors-and-fixes

(RHEL)sosreport 실행시 iptables(nf_conntrack) 룰이 활성화 되는 문제

문제 :
RHEL6 에서 sosreport 를 실행 시킬경우 iptables 이 활성화 되면서 최악의 경우엔 /var/log/messages 파일
에아래와 같은 메시지가 발생.

내용 : 

“nf_conntrack: table full, dropping packet” <== 해당 메시지

위 메시지로만 보면 nf_contrack table 이 Full 이 되어 packet drop 이 발생된다는 내용으로
사용자는 iptables 를 활성화 한 적이 없으나? 

왜? iptables 이 활성화 되고 “nf_conntrack: table full, dropping packet” 메시지가 발생 되는지?

이해하기 힘들 것이다.

관련 내용을 찾아 보던 중 RHE6.4 에서 관련 Bug 가 확인 되었다.
Link : https://bugzilla.redhat.com/show_bug.cgi?id=980390

 RHEL6.4 환경에서 openswan 패키지가 설치되어 있고 sosreport 를 실행하게되면
sosreport 의 openswan plugin 이 실행 되면서 iptables 이 활성화 되는 문제점.

관련 내용은 위의 bugzilla 를 참고.

해결 발법 : 

1. openswan 패키지 삭제 
해당 패키지가 설치되어 있는 환경에서 sosreport 실행될때 iptables 작동으로 인한 nf_conntrack 모듈이 활성화 됨.
 
방법 : 
# rpm -e openswan-xxx
 
*) 해당 시스템에서 해당 패키지 사용 여부 확인 후 조치 필요
 
2. sos 패키지 업데이트
 
위 버그에 의해서 openswan 이 설치되어 있는 환경에서 sosreport 를 수행하게되면 iptables 가 작동되어 nf_conntrack 모듈이 활성화 됨.
 
방법 : 
# rpm -Uvh sos-xxx.rpm
 
3. /etc/sos.conf 상에 openswan plugin 비 활성화
sosreport 수행할 때 openswan plugin 을 수행하지 않도록 조치
 
방법 : 
# vi /etc/sos.conf

[plugins]
disable = <pluginA>, <pluginB>, <pluginC>
확인 :
# sosreport --list-plugin
 
4. nf_conntrack 모듈을 blacklist 처리
 
해당 모듈을 지속적으로 활성화 되지 않도록 조치
 
 

# vi /etc/modprobe.d/blacklist.conf

 
~~~ 생략
install nf_conntrack /bin/false  <=== 끝에 추가
 
관련 KBase 는 다음과 같습니다.
 
How do I blacklist a kernel module to prevent it from loading automatically?

RHCS, Error storing oracledb: Duplicate  로그 발생?

RHEL5,6 기반에 RHCS 서비스 데몬을 시작 하면서 아래와 같은 로그가 발생된다?

Error storing oracledb: Duplicate

이유가 뭘까?

이유는 /usr/share/cluster 디렉토리에 있었다.

Link : https://access.redhat.com/solutions/21663

내용을 보면 위 디렉토리에 중복된 스크립트가 포함되어 있어서 발생된 로그다.

ex)

oracledb
oracledb.bak
oracledb.bak.orig

문제된 파일을 삭제하거나 다른곳으로 옮겨야 한다.

ethtool 설정을 지속적으로 ethX, bondX, brX 에 적용 시키려면?

튜닝 혹은??? 여러가지 설정을 할때 ethtool 명령을 사용하게 된다.

그런데… ethtool 옵션에 대하여 rebooting 을 할때? 혹은 network restart 할때도 적용 시키고
싶을땐 어떻게 해야될까?

찾아보니??? 아래와 같은 방법이 있더라는…

우선 network 서비스 스크립트를 확인 해 볼 필요가 있다.

file : /etc/sysconfig/network-scripts/ifup-eth ( CentOS7.2 기준 )

    335 exec /etc/sysconfig/network-scripts/ifup-post ${CONFIG} ${2}

 CentOS7.2 버전의 경우 335번째 라인에 위와 같은 내용이 포함되어 있다.

ifup-post 를 호출하는??? 

그럼 ifup-post 에 어떤 내용이 들어 있을까?

file : /etc/sysconfig/network-scripts/ifup-post ( CentOS7.2 기준 )

    101 # Notify programs that have requested notification
    102 do_netreport
    103 
    104 if [ -x /sbin/ifup-local ]; then
    105     /sbin/ifup-local ${DEVICE}
    106 fi

엇??? Default 로는 ifup-local 파일이 없는뎅?

심지어 실행까지 하네???

여기서 확인해볼 내용은 아래의 Red Hat 문서 되시겠다.

Link : https://access.redhat.com/solutions/8694 ( RHN ID 필요 )

해당 문서에는 이렇게 언급되어 있다.

네트워크가 ifup 되고 스크립트 또는 프로그램을 실행 시키고 싶을땐 어떻게 하나요?

그렇다… ifup-local 파일은 이런 이유로 사용 될 수 있다.

파일의 예제는 아래처럼?

#!/bin/bash
if [ "$1" == "bond0" ]; then
  /sbin/ethtool -G eth0 rx 1024 tx 1024
  /sbin/ethtool -G eth1 rx 1024 tx 1024
fi

위 예제는 bond0 인터페이스의 slave 인터페이스인 eth0, eth1 에 대한 rx, tx  링 버퍼 사이즈 값을
설정 한 예제이다.

여기에 설정을 하면 network 인터페이스가 ifup 되면서 ifup-local 파일도 함께 실행 시켜줄 것이다.

끝.

google URL shortener 를 이용해서 다운로드 사이트를 만들어보자

문득?

이메일로 파일을 전송할때? 파일 사이즈 제한등으로 전달이 안 되는경우가 자주 발생되면서?

뭔가 대안을 고민하게 됨…

 방식은 요렇게?

1. ftp(upload) – 관련자가 파일을 올릴 수 있도록

2. web(download) – 관련자가 파일을 받을 수 있도록

마지막으로  google URL shortener 을 연동

Source :

#!/bin/bash

export indexf="/dir path/index.html"

echo "<table><tr><td colspan=3> <center><h2>Anonymous DownLoad Site </h2></center></h2></center> </td></tr>" > $indexf
echo "<tr><td> FileName </td><td> FileSize(Byte) </td><td> DownLoad Link </td></tr>" >> $indexf

for i in $(find ./down) 
do 
 if [ -f $i ] 
 then 
 export filen=$(echo $i|sed 's/\.\/down\///')
 export filen2="http://example.com/down/$filen"
 export filess=`ls -al $i|awk '{print $5}'`
 export sitea=`/usr/bin/python -c 'import googl; print googl.Googl("AIzaSyBP1sh9r-xxxxxx").shorten("'$filen2'")[u"id"]'`
 echo "<tr>" >> $indexf
 echo " <td> $filen </td><td> $filess </td><td> <a href="$sitea" target="_BLANK">$sitea</a> </td></tr> " >> $indexf
 echo "</tr>" >> $indexf
 fi 
done


echo "</table>" >> $indexf

위 스크립트를 일정 주기로 실행 ( cron )

google URL shortener 은 아래의 사이트에서 참고 하시기 바랍니다.
Link : http://www.commandlinefu.com/commands/view/10820/google-url-shortener

google api key 는 구글링해서 받으시기 바랍니다.

 

160406_cap1

위 스크립트 기반으로 작성된 html 을 웹에서 표시.

[shellscript] Line(줄) 단위로 배열 값 뽑아내기

쉘 환경에서(bash) 특정 Line 에 대한 배열을 뽑아내고 싶을때가 있다.
이런경우??? 어떻게 해야될까 찾아보다가 발견함.

example :

 
#!/bin/bash
while IFS='-' read -r f1 f2 f3 f4 f5 f6 f7
do
	 printf 'f1: %s, f2: %s, f3: %s f4: %s \n' "$f1" "$f2" "$f3" "$f4"
done < "/root/test.txt"

 

manpage :
read [-r] [이름 ...]
표준 입력으로부터 한 줄을 읽어들여 그 첫번째 단어를 첫번째 이름 에 할당하고 두번째  
단어를  두번째  이름  에  할당하고  나머지  남은 단어들을  마지막  이름  에  할당한다.   
IFS 에 있는 단어만을 단어 구분자로 인식한다.  아무런 이름 도 적지 않으면 읽어들인 행을 REPLY
변수에 할당한다.  파일 끝 문자를 만난 경우를 제외하고 반환값은 0 이다.   -r  옵션을  주면  
백슬래쉬-개행  문자  쌍을  무시하지  않고 백슬래쉬를 행의 일부로 인식한다.

 

# cat test.txt
i1-my-me-me2
i2-my-me-me3
i3-my-me-me4
i4-my-me-me5
i5-my-me-me6
i6-my-me-me7
i7-my-me-me8
i8-my-me-mej
i9-my-me-mel
i10-my-me-mek
i11-my-me-mem
i12-my-me-mea
i13-my-me-meb

result :

# ./rr2.sh
f1: i1, f2: my, f3: me f4: me2
f1: i2, f2: my, f3: me f4: me3
f1: i3, f2: my, f3: me f4: me4
f1: i4, f2: my, f3: me f4: me5
f1: i5, f2: my, f3: me f4: me6
f1: i6, f2: my, f3: me f4: me7
f1: i7, f2: my, f3: me f4: me8
f1: i8, f2: my, f3: me f4: mej
f1: i9, f2: my, f3: me f4: mel
f1: i10, f2: my, f3: me f4: mek
f1: i11, f2: my, f3: me f4: mem
f1: i12, f2: my, f3: me f4: mea
f1: i13, f2: my, f3: me f4: meb

 

참고 : http://www.cyberciti.biz/faq/unix-howto-read-line-by-line-from-file/

1 2 3 105