레이블이 LINUX인 게시물을 표시합니다. 모든 게시물 표시
레이블이 LINUX인 게시물을 표시합니다. 모든 게시물 표시

2021년 3월 20일 토요일

netstat말고 ss명령을 사용합시다.


tcp 파일을 이용해서 현재 접속 현황을 가지고 오는 자바로 만들어진 프로그램이 있다.
이 프로그램에서 cpu 사용량이 15% 이상을 치는 문제가 발생했다.

리눅스에서 tcp와 udp의 소켓 정보는 /proc/net/tcp, tcp5, udp, udp6 파일에서 확인 할 수 있다.
문제의 프로그램은 위 파일을 읽고 파싱하여 데이터를 가져온다.
커넥션이 적을 때는 문제가 없지만, 커넥션이 많아지면서 문제가 발생한 것이다. 

커넥션 수가 20000개가 넘어가면 읽는 시간은 느려지지 않지만, cpu사용율이 15% 가까이 발생한다. 
커넥션 수가 50000개가 넘어가면 전체 데이터를 읽어오는 시간은 20초 가까이 걸리며 cpu사용율을 100% 가까이 사용한다.

tcp, udp 파일에서 하나의 라인은 하나의 커넥션이다.
처음에는 5만 라인이 굉장히 많은 줄 알았다. 그러나 /proc/net/tcp 파일을 복사해서 그 복사한 파일을 읽었더니 굉장히 빨랐다. 
/proc/net/tcp 파일 자체가 문제였던 거다. 구글링으로 문제에 대해 검색을 시작했다. 

구글링 후 알게 된 하나는 netstat명령과 ss 명령의 차이점이었다. 둘 다 네트워크의 상태를 보는 명령이지만 구조 자체가 다르다. 
netstat은 /proc/net/tcp 파일을 읽어들인다. 그렇기 때문에 커넥션이 많을 때는 netstat 명령 역시 느려진다. 
반대로 ss 명령은 커넥션이 많을 때도 굉장히 빠르다. 


AF_NETLINK를 이용하기 위해서는 C 언어를 이용해야 했다. C 언어 자체는 잘 모르지만 예제 샘플을 이용해서 원하는 형태의 프로그램은 만들 수 있을 것 같았다. 
만들어진 프로그램을 JNI을 이용해서 가지고 오면 될것으로 봤다.

여기에는 몇가지 문제가 있었다. kernel 과 직접 통신하기 때문에 커널 버전에 맞는 각각의 실행파일을 따로 준비해야 한다. (문제가 있었던 프로그램은 여러 서버에서 돌아가야 했다.)
커스터마이징을 한다고 해도 c 코드 자체를 수정하기가 쉽지 않다. 관리포인트가 늘어나는 문제도 있다.

고민을 거듭하다 방향을 바꿔서 그냥 ss 명령을 사용하는 방법을 생각했다.
ss 명령은 iproute 패키지의 일부분이다. iproute 패키지는 소스가 공개되어있다.
문제가 되었던 프로그램이 돌아가던 운영체제는 대부분이 centos나 redhat이었다.
centos 4,5,6,7 버전의 minimal 설치 패키지를 조사하여 iproute 패키지가 있는 지 확인하였다. 전부 있는 것으로 확인하였다.

ss 커맨드를 이용한 방법으로 개발을 진행하겠다고 컨펌을 받고 개발을 진행하였고 잘 마무리 되었다.

나중에 알게된 솔라윈즈에서 작성한 글이 딱 내가 겪었던 일을 잘 설명해 주어서 링크한다.

2021년 1월 27일 수요일

단락 연산자(short-circuit operator)

 리눅스에서 명령어를 연속 해서 사용 할 때가 있다.

보통 || 와 &&을 사용한다. 이를 단락 연산자(short-circuit operator)라고 한다.

첫번째 명령어를 실행하고 곧이어 두번째 명령어를 실행하는 역할이다.


예제는 다음과 같다.

[root@localhost ~]# true || echo 'ok'
[root@localhost ~]# false || echo ok
ok
[root@localhost ~]#

||는 앞의 명령어 성공하면 뒤의 echo 'ok'는 실행하지 않는다.
앞의 명령이 실패하면 뒤의 echo 'ok' 명령를 실행한다.

&&은 ||과 반대이다. 앞의 명령이 성공하면 뒤의 명령을 실행한다.
앞의 명령이 실패하면 뒤의 명령을 실행하지 않는다.

[root@localhost ~]# true && echo 'ok'
ok
[root@localhost ~]# false && echo 'ok'
[root@localhost ~]#

앞 명령어와 상관없이 실행하고자 할 때는 ;를 쓴다.
[root@localhost ~]# echo '1ok'; echo '2ok'
1ok
2ok
[root@localhost ~]#

2017년 11월 24일 금요일

리눅스 ls 자주 쓰는 옵션 정리.

-l 옵션이 있어야 되는 옵션도 있고, 없어도 되는 옵션도 있지만
기본적으로 전부 붙임. 더 자세한 건 man
#디렉토리만
ls -d */
ls -l | grep `^d'

#파일만
ls -l | egrep -v '^d'


#파일 크기별 (큰 파일부터...)
ls -lS

#파일 크기별 역순(작은 파일 부터...)
ls -lSr


#일자 전체 출력
ls --full-time
ls -l --time-style=full-iso


#크기를 읽기 좋게(e.g., 1K 234M 2G)
ls -lh

#하위 디렉토리 포함
ls -lR


 

timestamp별 정렬
#접속일자 순
ls -ult

#접속일자 역순(-r 옵션이 순서를 reverse함)
ls -ultr


#변경일자 순
ls -clt

#변경일자 역순(-r 옵션이 순서를 reverse함)
ls -cltr


#수정일자 순
ls -lt

#수정일자 역순(-r 옵션이 순서를 reverse함)
ls -ltr

접속일자, 수정일자, 변경일자가 뭔지는 여기서 확인.

리눅스의 timestamp

리눅스의 timestamp는 3가지가 있다.

예전 글에도 ctime과 mtime의 차이점에 대해 썼었는데, 그에 대한 연장선이다.

Access(atime) - 파일을 마지막으로 읽은 시간
Modify(mtime) - 파일 내용이 마지막으로 바뀐 시간
Change(ctime) - 파일의 메타 데이터가 마지막 으로 변경된 시간 (e.g. 권한)

 

stat 명령어로 timestamp를 확인 할 수 있다.

toucth 명령어로 test.txt 파일을 하나 생성 후 확인
[root@df test]# touch test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:36:11.380000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:36:11.380000000 +0900
Birth: -

처음 생성시 Access, Modify, Change가 모두 동일 한 걸 볼 수 있다.

 

touch 명령어로 Access 수정 후 확인.
[root@df test]# touch -a -d '1 Jan 2000 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2017-11-23 17:36:11.380000000 +0900
Change: 2017-11-23 17:39:18.467000000 +0900
Birth: -

 

touch 명령어로 Modify 수정 후 확인.
[root@df test]# touch -m -d '1 Jan 2006 12:34' test.txt
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:39:52.616000000 +0900
Birth: -

 

권한 변경후 확인(Change)
[root@df test]# chmod 777 test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2000-01-01 12:34:00.000000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -

 

cat 명령어로 해당 파일을 읽어 확인.
[root@df test]# cat test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 0 Blocks: 0 IO Block: 4096 일반 빈 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2006-01-01 12:34:00.000000000 +0900
Change: 2017-11-23 17:40:18.557000000 +0900
Birth: -

Access 만 변경 된 걸 볼 수 있다.

 

echo 명령어로 내용 추가 후 확인.
[root@df test]# echo test >> test.txt 
[root@df test]# stat test.txt
File: `test.txt'
Size: 5 Blocks: 8 IO Block: 4096 일반 파일
Device: fd00h/64768d Inode: 68752651 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2017-11-23 17:48:21.985000000 +0900
Modify: 2017-11-23 17:50:20.241000000 +0900
Change: 2017-11-23 17:50:20.241000000 +0900
Birth: -

Access는 그대로, Modify와 Change가 같이 변했다.

 

그니까 find로 파일 내용이 변경된 파일을 찾으려면 mtime을 이용해야 한다.
# 수정한지 20일 이상( -mtime +20 )된 파일과 디렉토리
find . -mtime +20 -ls

2016년 12월 28일 수요일

fail2ban ip 영구 차단

엄청 간단하다.

/etc/fail2ban/jail.conf 중 bantime = -1(영구차단)로 설정

 

예전에는 아마도 fail2ban 재시작시 banip가 없어지게끔 되어 있었나보다.

현재는 (Fail2ban v0.9.5) sqlite에 DB로 저장 되어 있기 때문에 다른 설정이 필요치 않다.

다만 재시작 시 로딩이 조금 느리다..




sqlite 파일 위치
[root@df log]# fail2ban-client get dbfile
Current database file is:
`- /var/lib/fail2ban/fail2ban.sqlite3

table 확인
[root@df log]# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 .table
bans fail2banDb jails logs

차단된 명령어는 bans란 테이블에 들어가 있다. 그중에 ip값만 가져오면 차단된 ip 목록을 확인 가능하다.
중복된 것도 있기 때문에 distinct를 사용한다.
[root@df log]# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bans;"
1.206.220.154
1.31.67.224
1.34.190.13
101.25.28.112
103.243.107.193
103.243.54.168
104.43.161.37
...

ps.
테스트 서버에 findtime = 60, maxretry = 3 으로 설정 하고 ssh 포트를 기본포트(22)로 변경 하고 났더니, 하루에 100개이상의 공격이 들어온다... ㅎㄷㄷ;

2016년 12월 7일 수요일

디렉토리를 심볼릭링크 생성시 여러개가 만들어지는 원인.

디렉토리를 ln -s 명령으로 심볼릭 링크로 만들 때, 두 번 실행시 dest 폴더 안에 원하지 않는 링크가 생긴다.

명령을 두번 실행하면 첫번째 명령에서 만들어진 '심볼릭 링크 디렉토리'안에 또하나의 파일이 생긴다.

세번째부터는 깨진 파일이라도 있으니까 그 아래로는 더 이상 생성되지 않는다.

 

이럴 때는 -n 명령을 써보자

-n 옵션의 설명은 다음과 같다.

-n, --no-dereference
treat LINK_NAME as a normal file if it is a symbolic link to a directory

디렉토리의 심볼릭 링크면 일반 파일로 취급한다고 한다.

 

테스트 해보자.

n 옵션이 없으면 아래와 같이 두번까지 정상 실행되며, 세번째부터 에러가 나온다.
dirSym 으로 들어가 보면 깨진 dirSrc 심볼릭 링크가 만들어져있다.
[root@df tmp]# mkdir dirSrc
[root@df tmp]# ln -s dirSrc dirSym
[root@df tmp]# ln -s dirSrc dirSym
[root@df tmp]# ln -s dirSrc dirSym
ln: failed to create symbolic link `dirSym/dirSrc': 파일이 있습니다

 

dirSym 링크를 지우고 n 옵션을 주고 다시 실행하면 아래와 같이 두번째에 에러가 발생한다.
[root@df tmp]# rm dirSym
rm: remove 심볼릭 링크 `dirSym'? y
[root@df tmp]# ln -sn dirSrc dirSym
[root@df tmp]# ln -sn dirSrc dirSym
ln: failed to create symbolic link `dirSym': 파일이 있습니다

 

 

결론 : 디렉토리를 symbolic link로 만들 때는 n 옵션을 추가해서 만들자.
ln -sn src dest

2016년 11월 25일 금요일

logrotate가 안될 때...

오랜만에 서버 점검을 하니 messages 로그가 비정상으로 크다.

무려 1.8G!
-rw-------. 1 root root 1915638280 2016-11-25 09:01 messages

 

접근 시도가 많은 것으로 알고 failer들 차단하고 나섰는 데, 뭔가 이상하다.

로그 파일이 messages밖에 없다. 기본적으로 rotate가 돌아서 messages.1이나

messages-날짜, 이런 형식으로 있어야 되는 데, 없다.

 

rotate가 안되고 있다!!.
 
아래 명령어로 확인. -d 옵션이 debug 모드.
/usr/sbin/logrotate -d /etc/logrotate.conf

출력 내용중 아래와 같이 이상점 발견
considering log /var/log/messages
log needs rotating

로테이트가 필요없다고!? 2G에 육박하고 있는 데 무슨 소리야.

 

logrotate는 /var/lib/logrotate.status 파일의 내용을 참조하여 rotate를 한다.

해당 파일을 살펴보니 내용이 없다.
#비정상(문제서버)
[root@localhost log]# cat /var/lib/logrotate.status
logrotate state -- version 2

#정상(비교대상 서버)
[root@localhost log]# cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2016-1-1
"/var/log/cups/error_log" 2016-10-9
"/var/named/data/named.run" 2016-11-20
"/var/log/sssd/*.log" 2015-1-6
"/var/log/dracut.log" 2016-1-1
"/var/log/wtmp" 2015-1-6
"/var/log/spooler" 2016-11-20
"/var/log/btmp" 2016-11-1
"/var/log/xferlog" 2016-11-20
"/var/log/maillog" 2016-11-20
"/var/log/cups/*_log" 2015-1-6
"/var/log/secure" 2016-11-20
"/var/log/messages" 2016-11-20
"/var/account/pacct" 2015-1-6
"/var/log/cron" 2016-11-20
"/var/log/vsftpd.log" 2015-1-7

 

열심히 검색 했으나, 원인은 찾을 수가 없다.

 

해결법은 아래 명령어로 rotate를 강제 적용 하는 것이다.
/usr/sbin/logrotate -f /etc/logrotate.conf

위와 같이 하면 /var/lib/logrotate.status 내용이 정상 서버와 같이 만들어지고,
아래와 같이 로테이트 된다. 기존 파일을 분할하는 건 아니다.
-rw------- 1 root root 148 2016-11-25 09:58 messages
-rw-------. 1 root root 1915641841 2016-11-25 09:58 messages-20161125

2016년 11월 16일 수요일

PPS cfgmaker

mrtg로 pps 를 체크하는 것에 대해서 글을 썼는데,
cfgmaker로 만들고 그걸 다시 수정하는 게 번거로웠다.

cfgmaker는 perl 로 작성되어 있어서 수정이 가능하다.

그래서 target 관련 부분만 수정해서 ppscfgmaker를 만들었다.

diff로 비교해 보면 알지만 한개 라인만 수정하였다.
[root@localhost bin]# diff cfgmaker ppscfgmaker 
730c730
< my $default_target_directive = "Target[$target_name]: $if_ref:$router_connect";
---
> my $default_target_directive = "Target[$target_name]: ifInUcastPkts.$if_ref&ifOutUcastPkts.$if_ref:$router_connect + ifInNUcastPkts.$if_ref&ifOutNUcastPkts.$if_ref:$router_connect";

ppscfgmaker
확장자가 없으면 업로드가 안되서 .txt를 추가했다.
.txt 부분만 지우고 사용하면 된다.

2016년 11월 9일 수요일

MRTG PPS(packet per second) 설정

MRTG는 기본 BPS 외에 파라미터를 통해서 여러가지 그래프를 그릴 수 있다.

그 중에서 PPS 를 그려보자.

MRTG 사이트를 보면 MIB 리스트가 있는데, 거기에 보면 여러가지 OID 값이 있다.

그 중 패킷 관련 아래의 4가지만 적용한다.
#유니캐스트
ifInUcastPkts
ifOutUcastPkts

#NON 유니캐스트
ifInNUcastPkts
ifOutNUcastPkts

MRTG 적용 방법은 아래 처럼 하면 된다.

기존 cfgmaker 로 생성한 Target 정보를 아래처럼 변경하면 된다.

BPS 적용(cfgmaker 로 생성된 내용.)
Target[SWITCH_pps]: 86:public@111.111.222.222:::::2

PPS 적용
Target[SWITCH_pps]: ifInUcastPkts.86&ifOutUcastPkts.86:public@111.111.222.222:::::2+ ifInNUcastPkts.86&ifOutNUcastPkts.86:public@111.111.222.222:::::2



다른 블로그 글을 보니 ifInUcastPkt 와 ifOutUcastPkts 만 적용하는 하는 글도 보았는데,
여기서는 NON 유니캐스트도 포함시킨 것에 주의 하자.

2016년 10월 22일 토요일

selinux disabled

selinux 설정파일 위치는 /etc/sysconfig/selinux 로 알고 있었다.

해당 파일에서 SELINUX=disabled 로 변경 시키고 재부팅을 해도 selinux가 disable 되지 않는다.

확인 해 봤더니, 원래 위치는 /etc/selinux/config이고 /etc/sysconfig/selinux 파일은 링크만 걸려 있는 거다.

어떻게 된 일인지 특정 서버만 링크가 아닌 일반 파일이 /etc/sysconfig/selinux 생성되어 있다.

/etc/selinux/config 에서 설정 변경하니 정상적으로 disabled 된다.

2016년 9월 28일 수요일

centos 7에서 변경 된 것 30가지.

centos 7이 되면서 기존에 사용하던 명령어가 없어져서 난감한 경우가 참 많다.

꽤 많은 부분이 바뀐 것 같다. 그래서 찾아 본 링크

영문임.. OTL

2016년 7월 13일 수요일

determining if ip address is already in use for device eth0 centos

determining if ip address is already in use for device eth0

위와 같은 오류가 발생.

아무리 찾아 봐도 원인을 알 수 없다.

ARPCHECK=no 옵션을 주면 에러가 안 난다고 하는데, 왠지 찝찝하다.

해당 옵션이 무엇인지에 대한 설명은 /usr/share/doc/initscripts-9.03.40/sysconfig.txt 에 나와 있다.
    ARPCHECKn=yes|no
If set to 'no', ifup will not try to determine, if requested ip address
is used by other machine in network.
Defaults to 'yes'.

네트워크에 있는 다른 머신에 의해 결정한다는 건데, 이름에서 추측하건데 arp 체크를 통해 서 중복되는 ip를 찾는 것 같다.

근데!!! 중복되는 IP 가 없어~!!!!

arping 을 해 보라는 둥.. tcpdump 를 잡아 보라는 둥.. 전부 해봐도 특별한 이유가 없다..

xenserver로 설치 한 거라서 조금 특별한 원인이 있지 않을 까도 싶다.

결국 그냥 사용하는 걸로..;;

 

참조:https://blog.cles.jp/item/6718




160928 추가.

ip 셋팅이 되어 있는 부분을 command로 다시 설정하면서 꼬이는 것 같다.
ifconfig eth0 down
service network restart

오류가 나는 인터페이스를 다운 시킨 후 네트워크를 재시작하면 없어진다.

원격에서 작업시 매우 주의!!

2016년 6월 24일 금요일

centos7 netstat

netstat 명령어가 기본적으로 사라지고, ss 명령어가 생겼다.

 

listening sockets  보기.
# ss -l

 

모든 소켓 보기.
# ss - a

 

TCP 소켓 보기.
# ss - t

 

UDP 소켓 보기.
# ss - u

 

소켓 사용하는 프로세스 보기.
# ss - p

 

소켓 사용하는 메모리 보기.
# ss - m

 

 

참조

No default or ui configuration directive found

centos 7 iso 파일로 설치 중 오류.

No default or ui configuration directive found

파일 잘못 받아서 생기는 문제.

iso 파일을 로컬에 받지 않고, 네트워크 드라이브로 연결된 폴더에 넣었더니, 문제가 발생한 것 같음.

다른 파일로 다시 받았더니, 파일 크기 자체가 다름.

2016년 4월 8일 금요일

Device eth0 does not seem to be present, delaying initialization 에러

서버 파워가 나갔다. 완전 같은 기종으로 유휴 장비가 있어서
하드디스크만 교체하여 올리니 바로 올라갔다.

네트워크가 안된다.
Device eth0 does not seem to be present, delaying initialization 에러 발생.

여기 참조해서 처리.

networking interface rules이란게 있는 것도 처음 알았다.

방법은 간단했다.
# rm /etc/udev/rules.d/70-persistent-net.rules
# reboot

이렇게 하면 해당 파일을 os가 다시 만든다.

그리고
/etc/sysconfig/network-scripts/ifcfg-eth0
파일에서

새로 생성된 rules 파일에 있는 HWADDR 로 바꾸고,
UUID 부분은 삭제한다.

그리고 service network restart.

네트워크가 올라간다.

2015년 11월 11일 수요일

rsync 로 디렉토리 싱크시 /(슬러시) 주의.

*맨 뒤의 /(슬러시) 표시 주의

 
#같은 동작
rsync -arvze "ssh -p 22" --delete /test 192.168.0.2:/test
rsync -arvze "ssh -p 22" --delete /test 192.168.0.2:/test/
 
#같은 동작
rsync -arvze "ssh -p 22" --delete /test/ 192.168.0.2:/test
rsync -arvze "ssh -p 22" --delete /test/ 192.168.0.2:/test/
 

/를 붙이면 디렉토리를 생성하지 않는다
/를 붙이지 않으면 디렉토리를 생성한다.

결론. 원본 소스 부분만  /(슬러시) 표시만 주의 하면 됨. dest의 /(슬러시)는 영향을 주지 않음.




160930

man rysync 페이지에 해당 내용이 있었음.ㅡㅡ;

정리하면

  1. dest 는 슬래시 상관없음.(man 에도 안나오나, 테스트 결과가 그럼)

  2. src에 슬래시가 붙으면 src 디렉토리 미포함, 안 붙으면 포함

  3. dest 디렉토리가 없으면 1depth까지 생성.

디렉토리를 심볼릭 링크 걸 걸때 주의사항

*맨 뒤의  / 표시 주의
ln -s /usr/local/apache2/ /usr/local/apache/

ln: target `/usr/local/apache/' is not a directory: 그런 파일이나 디렉터리가 없습니다

잘못된 명령어.

 

ln -s /usr/local/apache2/ /usr/local/apache
ln -s /usr/local/apache2/ /usr/local/apache/
ln -s /usr/local/apache2 /usr/local/apache

처음에는 제대로 생성 되나, 다시 한번 실행하면 /usr/local/apache2/ 디렉토리 밑에 한개 더 생성된다.

 
결론. 전부 안됨. 그냥 주의 할 수 밖에 없음.

2015년 7월 17일 금요일

hpacucli 설치법

URL은 여기 or 여기

1. '제품별로 찾기'에 서버 모델명 넣자. (예: DL160 G8)

1

 

 

 

 

 

 

 

 

2. 검색 결과에서 내 서버 선택. DL160 Gen8 선택 -> HP ProLiant DL160 Gen8 서버 선택

2

 

 

 

 

 

 

3. 운영체제를 CentOs 설치하면 없다. RedHat으로 선택 하자.
4. 소프트웨어 - 시스템관리 카테고리에 보면 hpacucli-9.40-12.0.x86_64.rpm 있다.

3

 

 

 

 

 
다운로드 후 서버에 업로드
5. rpm -Uvh hpacucli-9.40-12.0.x86_64.rpm
---------------------------------------------
DOWNGRADE NOTE: To downgrade this application to any version prior to 9.10.x.x, the current RPM must be manually uninstalled using the "rpm -e" command before any prior versions can be installed.

LOCKING NOTE: The locking mechanism starting with versions 9.10.X.X, are not compatible with prior versions of the applications. Therefore, mixing older and newer versions of the various applications (ACU, HPACUCLI, HPACUSCRIPTING) is not recommended.
---------------------------------------------

요런 메시지 나오는 데, 그냥 무시.

6. #hpacucli 명령어가 나온다면 정상적으로 설치.
사용법은 각자 알아서.
아니면 여기.

2015년 5월 27일 수요일

sftp 상위 디렉토리 차단

ssh 접속은 사용안하고 sftp 만 사용하는 유저의 상위 디렉토리 차단.

openssh 버젼이 4.8 이상이면 됨. (웬만하면 다 될 듯..)

 

아래처럼 바꾸고, 추가 해줌.

vim /etc/ssh/sshd_config
# override default of no subsystems
#바꿈
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp

# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
# 추가
Match group sftpusers
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

#sftp 전용 그룹 추가.
groupadd sftpusers

#dev라는 유저를 추가 (이것만 계속 반복으로 유저 추가)
useradd -g sftpusers -d /home/dev -s /sbin/nologin dev
chown root:root /home/dev
chmod 755 /home/dev
passwd dev

#sshd 재시작
service sshd restart

/home 디렉토리는 기존에 사용하고 있던 디렉토리이고,

user 그룹이 sftpusers 가 아닌 id들은 위의 로직을 타지 않음.

참고 :
https://wiki.archlinux.org/index.php/SFTP_chroot
http://www.programkr.com/blog/MQTM5ADMwYTx.html

2015년 1월 9일 금요일

AP 연동 설치 .(apache 2.4.10 + php 4.4.9 )

php 4.4.9 소스 설치
apache 2.4.10
mysql client 5.1.73
OS : Centos 6.6 32bit


1. php 버젼을 업그레이드 할 수가 없는 상황에서 OS와 httpd만 업그레이드 함.
2. 호환성은 무시하고 간다.
3. CentOS 7.0 버젼으로 하고 싶었으나, 32bit 모듈 문제로 32bit 지원하는 6 버젼 제일 최신으로 감.
4. mysql 은 설치하지 않음. 다른 서버에 설치 되어 있음. client 만 설치.




 


하다 보니 문제점이 속속 터짐.
문제점 1
#make 시 openssl 에러
#make: *** [ext/openssl/openssl.lo] Error 1
해결


참고 : http://blog.renoeve.com/?p=1204




 


문제점 2.
libphp4.so: undefined symbol: ap_get_server_version


ap_get_server_version 해당 함수는 없어졌음.
ap_get_server_banner 으로 바꾸면 됨.
참조 1.


http://www.yongbok.net/blog/apache2-undefined-symbol-unixd_config/


참조2.


http://d.hatena.ne.jp/rougeref/20121115




문제점 3.
mysql 사용시 아래처럼 에러 남.


File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
Character set ’#19’ is not a compiled character set and is not specified in the ’NONEXISTENT/charsets/Index’ file
File ’NONEXISTENT/charsets/?.conf’ not found (Errcode: 2)
php 기본 내장 client API 는 latin 밖에 지원하지 않는 다고 함.


 


클라이언트 용만 설치 후
yum -y install mysql mysql-devel
php 설치시 configure 옵션을 변경 후 재설치.
’–with-mysql=/usr’ \




문제점 4.
Zend Optimizer 3.3.9 인식 안됨.


인식 안되는 문제는 Thread Safety enable로 설치되어서 임.
근데 왜 Thread Safety enable이냐면
아파치의 apxs를 이용하여 아파치의 mpm 모드를 체크하여, prefork 일 경우만 NTS 모드로 설치를 하는데,
apxs 명령어에 오류가 있다.


php의 configure 파일에서 APXS_MPM=$APXS -q MPM_NAME 부분을 APXS_MPM=httpd -V|awk ’/^Server MPM/{print $3}’ 로 변경.


 


참조: http://wp.enteroa.kr/tag/zend-optimizer/