2018. 8. 6. 20:12
1. 조사 목적
  - 망분리가 되어 있고
  - 특정 서버를 통해서만 내부로 들어올 수 있음

2. 아이디어
  - 특정서버에서 IP 포워딩을 통해 내부로 들어오게 한다.

3. 생성 방법
  1) /etc/sysctl.conf를 편집하여 
    net.ipv4.ip_forward = 1로 변경하고
  2) service network restart 한다.
  3) iptable에 규칙을 추가한다. 
     ex) 10.106.27.3에서 들어오면 10.103.25.34로 포워딩한다.
     - iptables -F
     - iptables -t nat -A POSTROUTING -j MASQUERADE
     - iptables -t nat -A PREROUTING -s 10.106.27.3 -j DNAT --to-destination 10.103.25.34

4. 참고 


Posted by citrine
2018. 7. 2. 15:15

1. 조사배경

  - Unix 관련 업무에 배당 받음

  - Solaris에서 Disk가 Full 이 된 것 같은 현상이 있는데 정확하게 조사하는 방법을 모름



2. 참고

[출처] Solaris 정보확인 명령어|작성자 정광원


3. 원문


1. 기본적인 정보 확인

■ CDE 환경에서 정보 확인 (GUI) 
CDE > Pannel > System Info 

■ uname 명령어를 통한 정보 확인 (운영체제 확인 
# uname –a 
SunOS sun 5.10 Generic_127127-11 sun4u sparc SUNW,Sun-Fire-480R 

■ /etc/release 파일을 통한 정보 확인 
# cat /etc/release 

■ ipcs 명령어를 사용한 큐, 공유메모리, 세마포어 설정 확인 
# ipcs 
[참고] sysdef 명령어를 사용해서도 확인이 가능하다

■ Solaris 버전을 확인 
# cat /var/sadm/softinfo/INST_RELEASE 
영체제 SunOS 
서버명 sun 
버전은 5.10 
커널 패치127127이며 
커널 패치의 리비전은 11 
애플리케이션 아키텍쳐 sun4u 
시스템 모델 Sun-Fire-480R

■설치된 OS 가 64 비트인지 32 비트인지 확인 
/bin/isainfo –kv 
<ex> 
64-bit sparcv9 kernel modules

2. 시스템 장치의 정보 확인


■ /usr/platform/`uname -i`/sbin/prtdiag 

# /usr/platform/`uname -i`/sbin/prtdiag | more

주의) Intel Platform 인 경우 명령어가 존재하지 않는다. 
- 시스템의 종류(범주)와 시스템 클럭 
- 총 메모리 크기 
- 구성되어 있는 시스템 보드의 수 
- 각 시스템 보드의 CPU와 메모리의 수와 종류 
- 메모리 읽기 방식(Interleave) 
- 설치된 I/O 카드(네트워크나 채널 I/O 등) 
- 시스템에 구성된 보드 중 발생한 장애와 현재 구성되어 있지만 사용하지 않는 시스템 
  정보도 언급된다. (이 경우 썬 서버만)

# /usr/platform/`uname -i`/sbin/prtdiag -v 
# /usr/platform/`uname -i`/sbin/prtdiag –l
 
  -l    Log output. If failures or errors exist in the system, 
           output this information to syslogd(1M) only. 
-v    Verbose mode. Displays the time of the most recent  AC 
           Power  failure,  and  the  most  recent hardware fatal 
           error information, and (if  applicable)  environmental 
           status. The hardware fatal error information is useful 
           to repair and manufacturing for  detailed  diagnostics 
           of FRUs.

예) Brd Type MHz Slot Name Model 
    1   SBus 25  0    SUNW,sbus-gem 
SUNW,sbus-gem 모델의 네트워크 카드가 Sbus 타입의 I/O 보드 1번의 0번 슬롯에 설치 되 
어 있는것을 의미한다. SUNW,sbus-gem은 썬에서 제작한 sbus용 gem(기가비트 멀티모드 
파이버 연결)카드다.


3. 시스템 패치 정보 확인

■ 모든패치에 대한 확인 
# showrev -p | more 
...... 
Patch: 114433-10 Obsoletes: 115485-01 Requires:  Incompatibles:  Packages: SUNWcsu, 
        SUNWcsl, SUNWesu, SUNWtoo, SUNWmdb, SUNWscpu, SUNWtnfc, SUNWcpcu, SUNWrcapu, 
SUNWrmwbu 
......

위의 내용을 해석하여 보면 114433-10 설치 되어 있으며 이 패치의 설치로 인해서 
115485-01 쓸모없이 제거되었고(Obsoletes), 이 패치를 설치 하기위해서 먼저 필요한 
패치는 없고(Requires), 관련 패키지는 SUNWcsu, SUNWcsl, SUNWesu....등이다.

■ 커널 패치에 대한 확인 
# uname -srv 
SunOS 5.9 Generic_118559-11 
위의 내용을 해석하여 보면 설치된 운영체제 커널에 적용된 최신패치를 보여준다. 
uname 명령어의 -a 옵션을 사용한 경우에도 보여 준다. 그 부분을 참고 하자.

4. 가상 메모리의 확인


■ swap 

# swap -s 
total: 45544k bytes allocated + 18984k reserved = 64528k used, 722236k available

# swap -l 
swapfile             dev  swaplo blocks   free 
/dev/dsk/c1d1s1     102,129      8 1048936 1048936

[참고] SolarisMemroyAdmin.txt 파일 참조


5. 디스크 정보의 확인


■ 장착된 디스크(인식된 디스크, Device Reconfiguration) 
    /etc/path_to_inst, prtconf | grep -v not 

# ls -l /dev/rdsk/*s2 
lrwxrwxrwx   1 root     root          54 Dec  7 04:20 /dev/rdsk/c0d0s2 -> ../../devices/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0:c,raw 

# cat /etc/path_to_inst | grep sd 
"/pci@0,0/pci-ide@7,1/ide@1/sd@0,0" 0 "sd" 
# cat /etc/path_to_inst | grep dad

# cat /etc/path_to_inst | grep cmdk 
"/pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0" 0 "cmdk" 

# prtconf | grep -v not
 

■ 디스크별 제조사와 모델명 확인 
    iostat -nE, format(inquiry) 

# iostat –nE
 
     -n    Display names  in  descriptive  format  (for  example, 
           cXtYdZ, rmt/N, server:/export/path).

     -E    Display all device error statistics.

[참고] format 명령어의 하위 명령어(inquirey)로도 확인이 가능하다. 
# format 

6. 파티션 정보 확인


■ prtvtoc 

# prtvtoc /dev/rdsk/c0d0s2 
* /dev/rdsk/c0d0s2 partition map 

# df -h 
Filesystem             size   used  avail capacity  Mounted on 
/dev/dsk/c1d1s7        1.9G   2.0M   1.8G     1%    /export/home

특정 슬라이스(파티션)의 폴더 단위의 용량 점검

# cd /export/home 
# du -sh *
 
   7K   hacker 
   8K   lost+found  
   7K   user01


7. 여러가지 장치에 대한 확인


■ 인식된 모든 장치에 대한 목록 확인 
# cat /etc/path_to_inst 

■ 그래픽카드 확인 
예) m64 그래픽카드라면 

# prtconf | grep -i m64
 
(일반적인 그래픽카드 관리 명령어) : ffbconfig 
해상도, 수직 주파수등을 알아 낼수 있다. 
(m64 그래픽카드 관리 명령어) : m64config 

# m64config –prconf 

■ 네트워크 카드 

# grep -i hme /etc/path_to_inst 
# ifconfg -a

# cat /etc/path_to_inst | grep hme 
# cat /etc/path_to_inst | grep qfe
 

8. CPU 정보 확인


■ psrinfo 

[/]# psrinfo 
0       on-line   since 10/15/2007 03:24:27 

[/]# psrinfo –p 


[/]# psrinfo -pv
 
The i386 physical processor has 1 virtual processor (0) 
[/]# psrinfo -v 
Status of virtual processor 0 as of: 10/15/2007 04:00:02 
  on-line since 10/15/2007 03:24:27. 

[참고] uname -X

9. Memroy 정보 확인


■ Physical Memory 확인(prtconf | grep Memory) 

# prtconf | grep Memory 
Memory size: 352 Megabytes


■ File Buffering Memory(prtmem) 

File Buffering Memory는 MemTool을 이용하여 알아 볼수 있다. 결과는 다음과 같다.

# prtmem 

[참고] prtmem 명령어는 솔라리스 기본 내장 명령어가 아니다. 설치 해서 사용해야 한다. 패키명은 RMCmem 이다.


■ Kernel Memory 확인(sar -k 1 1) 

sar명령어를 이용하여 byte단위로 알아 볼수 있다.

# sar -k 1 1 

■ Free Memory(vmstat 3)

Free Memory는 거의 항상 0 이다. 왜냐 하면 Buffer cache가 있기 때문이다. 
Free Memory는 vmstat 명령어로 알아 볼수 있다. 
vmstat 결과 나오는 첫번째 라인은 bootinf후 나오는평균치 이기 때문에 2번째 라인 부터 가 실질적인 결과이다.

# vmstat 3 
procs memory page disk faults cpu 
r b w swap free re mf pi po fr de sr f0 s2 s3 s4 in sy cs us sy id 
0 0 0 81832 74792 0 12 75 4 93 0 36 0 1 1 1 265 1940 303 5 1 93 


■ 각 프로세스 메모리 정보 
# ps -el | more 
F S   UID   PID  PPID  C PRI NI     ADDR     SZ    WCHAN TTY      TIME CMD 
19 T     0     0     0  0   0 SY fec28df4      0          ?        0:03 sched 
8 S     0     1     0  0  40 20 d3c11808    331 d403ee16 ?        0:00 init 
19 S     0     2     0  0   0 SY d3c11108      0 fec530a0 ?        0:00 pageout 
19 S     0     3     0  0   0 SY d3c10a08      0 fed0d818 ?        0:00 fsflush 
8 S     0   422     1  0  40 20 d3c10308    463 d4033d68 ?        0:00 sac 
SZ 필드의 값이 프로세스가 사용하고 있는 가상메모리(Virtual Memory) 총량이다. 이 안 
에는 매핑된 파일과 디바이스가 포함된다. 단위는 페이지 단위로 되어 있다.(pagesize(1))

# pagesize 
4096

# expr 4096 \* 564 
2310144

# expr 2310144 / 1024 
2256

위의 결과와 같이 약 2M(2256 Kbytes) 정도의 메모리를 사용하고 있다는 것을 알수 있다.

■ 한개의 프로세스 메모리 사용량 

/]# echo $$ 
925 
[/]# /usr/proc/bin/pmap -x 925 
925:    dtksh 
Address  Kbytes     RSS    Anon  Locked Mode   Mapped File 
08045000      12      12       4       - rwx--    [ stack ] 
08050000     532     388       -       - r-x--  dtksh 
080E4000      52      52       8       - rwx--  dtksh 
080F1000       8       -       -       - rwx--  dtksh 
080F3000      88      84      12       - rwx--    [ heap ] 
D2380000       4       4       -       - rwx--    [ anon ] 
D2390000      12      12       -       - r-x--  libmp.so.2 
D23A3000       4       4       -       - rwx--  libmp.so.2 
D23B0000      72      56       -       - r-x--  libICE.so.6 
D23D2000       4       4       -       - rwx--  libICE.so.6 
D23D3000       8       -       -       - rwx--  libICE.so.6 
D23E0000       4       4       4       - rwx--    [ anon ] 
D23F0000      32      32       -       - r-x--  libSM.so.6 
D2408000       4       4       -       - rwx--  libSM.so.6 
D2410000      80      56       -       - r-x--  libXext.so.0 
D2434000       4       4       -       - rwx--  libXext.so.0 
..... (중략)...... 
D2960000     496     420       -       - r-x--  libtt.so.2 
D29EC000      12      12       -       - rwx--  libtt.so.2 
D2A00000     344     224       -       - r-x--  libDtSvc.so.1 
D2A66000       8       8       -       - rwx--  libDtSvc.so.1 
D2A68000       8       4       -       - rwx--  libDtSvc.so.1 
D2A70000       4       4       4       - rwx--    [ anon ] 
D2A80000     220     200       -       - r-x--  libDtWidget.so.2 
D2AC8000      16      16       -       - rwx--  libDtWidget.so.2 
D2ACC000       8       -       -       - rwx--  libDtWidget.so.2 
D2AD0000     460      92       -       - r-x--  libDtHelp.so.1 
D2B52000      28      28       -       - rwx--  libDtHelp.so.1 
D2B6D000       4       4       4       - rwx--  libdl.so.1 
D2B70000       4       4       -       - r--s-  dev:102,0 ino:36861 
D2B80000       4       4       4       - rwx--    [ anon ] 
D2B90000     324     324       -       - r-x--  ld.so.1 
D2BF1000      16      16       4       - rwx--  ld.so.1 
D2BF5000       8       8       4       - rwx--  ld.so.1 
-------- ------- ------- ------- ------- 
total Kb    7092    5756      60       -

pmap명령의 결과 ksh 프로세서가 5756k의 real memory를 사용 한다는 것을 알수 있다. 
60k는 시스템의 다른 프로세서와 shared한다는 것도 알수 있다.

10. 커널 모듈 정보 확인


■ sysdef | more 

# sysdef | more 
..... 
* Hostid 
* Devices 
* Loadable Objects 
.....

# modinfo 
Id Loadaddr   Size Info Rev Module Name 
  5 fe933000   3f32   1   1  specfs (filesystem for specfs) 
12 fe96a962    18f   -   1  fssnap_if (File System Snapshot Interface) 
..... (중략).....

# modinfo -i 5 
Id Loadaddr   Size Info Rev Module Name 
  5 fe933000   3f32   1   1  specfs (filesystem for specfs)

프로세스의 정보 확인 
___________________________

메모리를 많이 사용하고 있는 프로세스 10개정도 확인

# ps -elf | head -1 ; ps -elf | sort -k 10 -r | head 
F S      UID   PID  PPID  C PRI NI     ADDR     SZ    WCHAN    STIME TTY      TIME CMD 
8 S     root   378   329  0  40 20 d461a728   4376 d4a5ce0a 10:09:27 ?        0:05 /usr/openwin/bin/Xsun :0 –nobanner 
…(중략)

[참고] 사용하고 있는 메모리 계산하는 방법 
메모리 사용량 = SZ * `pagesize` 
예) 4376 * 4096(or 8192) = 17924096 bytes(약 17Mbytes)


11. 네트워크 정보 확인


■ netstat 

1). IP 설정 확인

[/]# ifconfig -a 
lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1 
        inet 127.0.0.1 netmask ff000000 

(2). Routing Table 확인

[/]# netstat -nr 
Routing Table: IPv4 
  Destination           Gateway           Flags  Ref   Use   Interface 
-------------------- -------------------- ----- ----- ------ --------- 
192.168.8.0          192.168.8.2          U         1     61  pcn0 
224.0.0.0            192.168.8.2          U         1      0  pcn0 
default              192.168.8.254        UG        1     62  
127.0.0.1            127.0.0.1            UH       21  74190  lo0

(3). DNS Client 설정 확인

[/]# cat /etc/nsswitch.conf 
......(생략).....

[/]# cat /etc/resolv.conf 
nameserver 168.126.63.1

(4). 네트워크 활동량 점검

# netstat -an | more 
UDP: IPv4 
   Local Address         Remote Address     State 
-------------------- -------------------- -------  
      *.512                                 Idle 
      *.517                                 Idle 
......(중략)

# netstat -s 
RAWIP 
        rawipInDatagrams    =     0     rawipInErrors       =     0 
        rawipInCksumErrs    =     0     rawipOutDatagrams   =     0 
.....(중략)

# netstat -m (# netstat -mv) 
streams allocation: 
                                         cumulative  allocation 
                      current   maximum       total    failures 
streams                   238       272        1794           0 
queues                    674       740        3895           0 
mblk                      791      1270       39888           0 
…(중략) 

# netstat -i 2 
    input   pcn0      output           input  (Total)    output 
packets errs  packets errs  colls  packets errs  packets errs  colls 
44725   0     44926   0     0      45538   0     45739   0     0     
11      0     11      0     0      11      0     11      0     0     
…(중략)


12. 사용자의 Disk 사용량에 대한 정보


■ quot -af

13. 서버의 모델 출력


■ prtconf -vp | grep banner-name

14. PROM Mode 현재 설정 정보 확인


■ eeprom

[출처] Solaris 정보확인 명령어|작성자 정광원

Posted by citrine
2017. 12. 13. 14:36

1. 조사이유 : centos에서 fin_wait1이 발생하여 소켓 close를 하지 못하는 현상이 발생함


2. 관련 변수

/proc/sys/net/ipv4/tcp_fin_timeout : 우리쪽에서 닫은 경우 소켓을 FIN-WAIT-2 상태에 두는 시간입니다. 상대에게 문제가 생겨서 그쪽을 닫아주지 않을 수도 있고 상대가 갑자기 죽어버릴 수도 있기 때문입니다. 기본값은 60초입니다. 2.2에서 썼던 일반적인 값은 180초였고, 그 값으로 돌아갈 수도 있습니다. 단, 부하가 적은 웹 서버에서조차도 왕창 남아있는 죽은 소켓들이 메모리 부족을 일으킬 위험이 있다는 걸 잊지 마십시오. FIN-WAIT-2 소켓은 최대 1.5K의 메모리만을 잡아먹기에 FIN-WAIT-1보다는 덜 위험하지만, 대신 더 오래 유지되는 경우가 많습니다. 참고: tcp_max_orphans. 


/proc/sys/net/ipv4/tcp_max_orphans : 사용자 파일 핸들에 연결되어 있지 않아서 시스템이 가지고 있는 TCP 소켓의 최대 개수입니다. 이 개수를 초과하면 고아(orphaned) 연결은 즉시 초기화 되고 경고가 출력됩니다. 이 제한은 단순한 DoS 공격을 막기 위해서 존재할 뿐이며, 여기에 의존하거나 제한값을 억지로 낮춰선 안됩니다. 네트워크 상황이 기본값 이상을 필요로 한다면 도리어 (아마도 메모리 설치를 늘인 다음에) 이 값을 높여주어야 합니다. 그리고 네트워크 서비스가 시간을 끌도록(linger) 조정해 주고 그러한 상태를 좀더 공격적으로 죽여 주어야 합니다. 다시 한번 말하겠습니다: 각각의 고아 연결은 스왑 불가능한 메모리 64K를 잡아먹습니다. 

/proc/sys/net/ipv4/tcp_orphan_retries : 우리쪽에서 닫은 TCP 연결을 죽이기 전까지 몇 번이나 재시도를 할 것인가입니다. 기본값 7은 RTO에 때라서 50초-16분에 대응하게 됩니다. 그러한 소켓은 상당한 자원을 소모하므로, 장비가 부하가 있는 웹 서버라면 이 값을 낮추는 걸 생각해 봐야 합니다. 참고: tcp_max_orphans. 


3. 기타




/proc/sys/net/ipv4/icmp_destunreach_rate : 커널이 패킷을 전달할 수 없다고 판단하면 이를 제거하고, 패킷의 출발지로 그렇게 한 것에 대한 ICMP 알림을 보내 줍니다. 

## 네트워크관련 커널 변수들의 설명 
/proc/sys/net/ipv4/icmp_echo_ignore_all : echo 패킷에 대해 아무 대응도 하지 않습니다. 이걸 기본으로 설정하지 않는 게 가급적 좋지만, 호스트가 DoS 공격에서 중계점으로 쓰이고 있다면 이게 유용할 수 있습니다. 

/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts : 네트워크의 브로드캐스트 주소로 ping을 하면 모든 호스트들이 응답하도록 되어 있습니다. 이건 세련된 서비스 거부 공격 도구에 쓰일 수 있습니다. 이걸 1로 설정하면 그런 브로드캐스트 메시지를 무시합니다. 

/proc/sys/net/ipv4/icmp_echoreply_rate : 어떤 한 목적지로 echo 응답을 보내는 속도입니다. 

/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses : 이걸 설정하면 네트워크 내의 호스트가 어떤 프레임을 브로드캐스트 주소로 보낸 것으로 인식하여 잘못 대응하며 보낸 ICMP 오류를 무시합니다. 

/proc/sys/net/ipv4/icmp_paramprob_rate : 깨진 IP 혹은 TCP 헤더를 가진 잘못된 패킷에 대한 응답으로 보내는 비교적 알려지지 않은 ICMP 메시지입니다. 이 파일로 그러한 메시지를 보내는 속도를 제어할 수 있습니다. 

/proc/sys/net/ipv4/icmp_timeexceed_rate : 이건 traceroute에서 'Solaris middle star'(역자주: traceroute에서 응답하지 않아서 "*"로 표시되는 것)의 유명한 원인입니다. 보내는 ICMP Time Exceeded 메시지의 속도를 제한합니다. 

/proc/sys/net/ipv4/igmp_max_memberships : 호스트 상의 리스닝 하는 igmp (멀티캐스트) 소켓의 최대 개수입니다. FIXME:정말인가요? 

/proc/sys/net/ipv4/inet_peer_gc_maxtime : FIXME: inet peer 저장에 대해 좀더 설명을 추가해 주세요. 쓰레기 수집 작업 사이의 최대 간격입니다. 이 간격은 풀 상의 메모리가 줄어드는(혹은 소진되는) 것에 영향을 받습니다. jiffies 단위입니다. 

/proc/sys/net/ipv4/inet_peer_gc_mintime : 쓰레기 수집 작업 사이의 최소 간격입니다. 이 간격은 풀 상의 메모리가 많아지는 것에 영향을 받습니다. jiffies 단위입니다. 

/proc/sys/net/ipv4/inet_peer_maxttl : 항목의 최대 유지 시간입니다. 풀에 메모리가 없으면 (즉 풀 내의 항목의 개수가 아주 적으면) 이 시간이 지난 후 사용하지 않은 항목이 없어지게 됩니다. jiffies 단위입니다. 

/proc/sys/net/ipv4/inet_peer_minttl : 항목의 최소 유지 시간입니다. 재조립하는 쪽에서의 단편 유지 시간만큼은 되어야 합니다. 풀 크기가 inet_peer_threshold보다 작으면 이 최소 유지 시간이 보장됩니다. jiffies 단위입니다. 

/proc/sys/net/ipv4/inet_peer_threshold : INET peer 저장소의 대략적인 크기입니다. 이 문턱값을 넘어가면서부터 항목들을 적극적으로 버리게 됩니다. 이 문턱값은 항목들의 유지 시간과 쓰레기 수집 작업 사이의 간격을 결정하기도 합니다. 항목이 많으면 유지 시간이 짧아지고 쓰레기 수집 간격도 짧아집니다. 

/proc/sys/net/ipv4/ip_autoconfig : 호스트가 RARP, BOOTP, DHCP, 기타 유사한 방법으로 IP 구성을 받아온 경우 이 파일에 1이 들어갑니다. 그렇지 않으면 0입니다. 

/proc/sys/net/ipv4/ip_default_ttl : 패킷의 유지 시간(Time To Live)입니다. 안전하게 64로 설정하십시오. 거대한 네트워크를 가지고 있다면 올려 주십시오. 재미로 올리지는 마십시오. 그러면 라우팅 루프가 더 큰 손상을 유발합니다. 몇몇 환경에서는 이 값을 낮추는 것을 고려해야 할 수도 있습니다. 

/proc/sys/net/ipv4/ip_dynaddr : 동적 인터페이스 주소로 dial-on-demand(역자주: 트래픽이 있을 때 연결을 하는 회선)를 사용한다면 이걸 설정해 주어야 합니다. demand 인터페이스가 올라오면 응답을 받지 못한 모든 로컬의 TCP 소켓을 올바른 주소로 다시 연결시켜 줍니다. 이는 인터페이스를 올려주는 연결 자체는 동작하지 않고 두 번째 시도부터 동작하는 문제를 해결해 줍니다. 

/proc/sys/net/ipv4/ip_forward : 커널이 패킷 전달을 하게 되는 경우입니다. 기본적으로 꺼져 있습니다. 

/proc/sys/net/ipv4/ip_local_port_range : 나가는 연결의 로컬 포트의 범위입니다. 기본적으로는 상당히 작은 1024부터 4999로 되어 있습니다. 

/proc/sys/net/ipv4/ip_no_pmtu_disc : 경로 MTU 발견(Path MTU discovery)을 비활성화 시키려면 이걸 설정해 주십시오. 경로 MTU 발견은 경로 상에서 가능한 최대의 MTU(Maximum Transfer Unit) 값을 알아내는 기법입니다. 친절 설명서장의 MTU 경로 발견에 대한 절을 참고하실 수 있습니다. 

/proc/sys/net/ipv4/ipfrag_high_thresh : IP 조각 재조립에 쓰이는 최대 메모리입니다. ipfrag_high_thresh바이트의 메모리가 이 목적으로 할당되어 있으면 조각 처리부는 ipfrag_low_thresh에 도달할 때까지는 패킷을 쓰레기통에 던져넣게 됩니다. 

/proc/sys/net/ipv4/ip_nonlocal_bind : 응용 프로그램이 시스템 상의 장치에 없는 주소로 바인딩 할 수 있도록 해주고 싶으면 이걸 설정해 주십시오. 이는 장비가 비영속적인(혹은 동적) 연결상에 있을 때 유용합니다. 연결이 끊어져 있을 때도 서비스 프로그램이 시작하여 특정 주소로 바인딩을 할 수 있습니다. 

/proc/sys/net/ipv4/ipfrag_low_thresh : IP 조각 재조립에 쓰이는 최소 메모리입니다.

/proc/sys/net/ipv4/ipfrag_time : IP 조각을 메모리에서 유지하는 초 단위 시간입니다.

/proc/sys/net/ipv4/tcp_abort_on_overflow : 들어오는 연결이 많을 때의 동작을 제어하는 불리언 플래그입니다. 활성화 시키면 서비스에 과부하가 걸릴 때 커널이 재빠르게 RST 패킷을 보내도록 합니다. 

/proc/sys/net/ipv4/tcp_fin_timeout : 우리쪽에서 닫은 경우 소켓을 FIN-WAIT-2 상태에 두는 시간입니다. 상대에게 문제가 생겨서 그쪽을 닫아주지 않을 수도 있고 상대가 갑자기 죽어버릴 수도 있기 때문입니다. 기본값은 60초입니다. 2.2에서 썼던 일반적인 값은 180초였고, 그 값으로 돌아갈 수도 있습니다. 단, 부하가 적은 웹 서버에서조차도 왕창 남아있는 죽은 소켓들이 메모리 부족을 일으킬 위험이 있다는 걸 잊지 마십시오. FIN-WAIT-2 소켓은 최대 1.5K의 메모리만을 잡아먹기에 FIN-WAIT-1보다는 덜 위험하지만, 대신 더 오래 유지되는 경우가 많습니다. 참고: tcp_max_orphans. 

/proc/sys/net/ipv4/tcp_keepalive_time : 연결유지(keepalive)가 켜졌을 때 TCP가 얼마나 자주 연결유지 메시지를 보내는가입니다. 기본값: 2시간. 

/proc/sys/net/ipv4/tcp_keepalive_intvl : 조사용 패킷에 대한 응답이 없을 때 패킷을 얼마나 자주 재전송 하는가입니다. 기본값: 75초. 

/proc/sys/net/ipv4/tcp_keepalive_probes : 연결이 깨졌다고 판단할 때까지 TCP가 얼마나 많은 연결유지 조사 패킷을 보내는가입니다. 기본값: 9. tcp_keepalive_intvl과 곱하면 연결유지 패킷을 보내고서 연결이 응답 없이 유지될 수 있는 시간이 됩니다. 

/proc/sys/net/ipv4/tcp_max_orphans : 사용자 파일 핸들에 연결되어 있지 않아서 시스템이 가지고 있는 TCP 소켓의 최대 개수입니다. 이 개수를 초과하면 고아(orphaned) 연결은 즉시 초기화 되고 경고가 출력됩니다. 이 제한은 단순한 DoS 공격을 막기 위해서 존재할 뿐이며, 여기에 의존하거나 제한값을 억지로 낮춰선 안됩니다. 네트워크 상황이 기본값 이상을 필요로 한다면 도리어 (아마도 메모리 설치를 늘인 다음에) 이 값을 높여주어야 합니다. 그리고 네트워크 서비스가 시간을 끌도록(linger) 조정해 주고 그러한 상태를 좀더 공격적으로 죽여 주어야 합니다. 다시 한번 말하겠습니다: 각각의 고아 연결은 스왑 불가능한 메모리 64K를 잡아먹습니다. 

/proc/sys/net/ipv4/tcp_orphan_retries : 우리쪽에서 닫은 TCP 연결을 죽이기 전까지 몇 번이나 재시도를 할 것인가입니다. 기본값 7은 RTO에 때라서 50초-16분에 대응하게 됩니다. 그러한 소켓은 상당한 자원을 소모하므로, 장비가 부하가 있는 웹 서버라면 이 값을 낮추는 걸 생각해 봐야 합니다. 참고: tcp_max_orphans. 

/proc/sys/net/ipv4/tcp_max_syn_backlog : 연결해온 클라이언트의 응답(acknowldege)을 아직 받지 않은 연결 요청들 중 기억해 둘 개수의 최대값입니다. 기본값은 128Mb를 넘는 메모리를 가진 시스템에서는 1024이고, 그보다 작은 메모리의 장비에서는 128입니다. 서버가 과부하를 겪고 있다면 이 숫자를 늘여보십시오. 주의사항! 1024보다 크게 하려는 경우는 include/net/tcp.h에서 TCP_SYNQ_HSIZE를 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog 관계가 유지되도록 바꿔주고서 커널을 다시 컴파일 하는 것이 좋습니다. 

/proc/sys/net/ipv4/tcp_max_tw_buckets : 시스템이 동시에 가지고 있은 timewait 소켓의 최대 개수입니다. 이 값을 초과하면 time-wait 소켓을 즉시 파괴하고 경고를 출력합니다. 이 제한은 단순한 DoS 공격을 막기 위해서 존재할 뿐이며, 제한값을 억지로 낮춰선 안됩니다. 네트워크 상황이 기본값 이상을 필요로 한다면 도리어 (아마도 메모리 설치를 늘인 다음에) 이 값을 높여주어야 합니다. 

/proc/sys/net/ipv4/tcp_retrans_collapse : 몇몇 구린 프린터와의 호환성을 위한 버그에 대한 버그입니다. 재전송시에 더 큰 패킷을 보내려고 함으로써 특정 TCP 스택의 버그를 피해갑니다.

/proc/sys/net/ipv4/tcp_retries1 : 뭔가 문제가 있으며 이를 네트워크 계층에 보고해야 한다는 판단을 내리기 전까지 몇 번이나 재시도를 할 것인가입니다. 최소의 RFC값은 3이며, 기본값이기도 합니다. 이는 RTO에 따라서 3초-8분에 대응합니다.

/proc/sys/net/ipv4/tcp_retries2 : 살아있는 TCP 연결을 죽이기 전까지 몇 번이나 재시도를 할 것인가입니다. RFC 1122에서는 제한값이 100초보다 길어야 한다고 얘기하고 있습니다. 그건 너무 작은 값입니다. 기본값 15는 RTO에 따라서 13-30분에 대응합니다.

/proc/sys/net/ipv4/tcp_rfc1337 : 이 불리언값은 RFC 1337에서 설명한 'tcp에서의 time-wait 암살 위험'에 대한 수정 사항을 활성화합니다. 활성화하면 커널은 time-wait 상태인 소켓에 대해 RST 패킷을 무시합니다. 기본값: 0 

/proc/sys/net/ipv4/tcp_sack Selective ACK를 사용합니다. 이는 특정 패킷이 빠졌다는 걸 알려주도록 하며 빠른 복구를 도와줍니다.

/proc/sys/net/ipv4/tcp_stdurg : TCP urg 포인터 필드에 대한 호스트 요구사항에 따른 해석을 적용합니다. 대부분의 호스트는 이전의 BSD식 해석을 적용하기에, 이걸 켜주면 리눅스가 그 호스트들과 제대로 통신하지 못할 수도 있습니다. 기본값: FALSE 

/proc/sys/net/ipv4/tcp_syn_retries : 새 연결을 포기할 때까지 커널이 SYN 패킷을 보내 보는 횟수입니다. 

/proc/sys/net/ipv4/tcp_synack_retries : 연결의 반대편을 열어주기 위해 커널은 앞서 받은 SYN에 응답하는 ACK를 얹어서 SYN를 보냅니다. 이게 삼단계 핸드셰이킹의 2부입니다. 이 설정은 연결을 포기할 때까지 커널이 SYN+ACK 패킷을 보내 보는 횟수입니다. 

/proc/sys/net/ipv4/tcp_timestamps : timestamp는 여러 가지 목적이 있지만, 일련 번호를 되돌리는 것(wrapping)에 대한 보호를 위해 쓰입니다. 1 기가비트 연결에서는 이전 생성열의 것이라서 진로를 벗어난 값을 가진 이전의 일련 번호를 다시 마주칠 수 있습니다. timestamp는 이를 '오래된 패킷'이라고 알 수 있게 해줍니다. 

/proc/sys/net/ipv4/tcp_tw_recycle : TIME-WAIT 소켓의 빠른 재사용을 활성화합니다. 기본값은 1입니다. 기술 전문가의 조언/요청 없이 값을 바꿔선 안됩니다. 

/proc/sys/net/ipv4/tcp_window_scaling : TCP/IP는 보통 65535 바이트까지 윈도우가 커질 수 있도록 해줍니다. 정말 빠른 망에서는 이게 충분치 않을 수 있습니다. 윈도우 스케일링 옵션은 거의 기가바이트의 윈도우를 허용하는데, 이는 높은 대역폭과 지연 시간을 가진 제품에 좋습니다. 

/proc/sys/net/ipv4/conf/DEV/accept_redirects : 당신이 라우터를 잘못 사용하고 있다고 (즉, 당신의 패킷을 동일한 일터페이스에서 재전송 해주어야 한다고) 판단하면 라우터는 ICMP Redirect를 보내줍니다. 하지만 이건 미묘한 보안 위험이 될 수 있기에, 이걸 끄고서 안전한 전환(redirect)을 사용하는 걸 원할 겁니다. 

/proc/sys/net/ipv4/conf/DEV/accept_source_route : 이제는 별로 쓰이지 않습니다. 이전에는 패킷이 가면서 방문할 IP 주소 목록을 알려줄 수 있었습니다. 리눅스 장비가 이 IP 옵션을 존중하도록 해줄 수 있습니다. 

/proc/sys/net/ipv4/conf/DEV/bootp_relay : 출발지 주소가 0.b.c.d이고 목적지가 이 호스트가 아닌 패킷을 자신에게 온 패킷으로 받아들입니다. BOOTP 전달 데몬이 이 패킷을 잡아채서 전달하게 됩니다. 

/proc/sys/net/ipv4/conf/DEV/forwarding : 이 인터페이스에서 IP 포워딩을 켜거나 끕니다.

/proc/sys/net/ipv4/conf/DEV/log_martians : 역경로 필터링에 대한 절을 참고하십시오. 

/proc/sys/net/ipv4/conf/DEV/mc_forwarding : 이 인터페이스에서 멀티캐스트 전달을 할 것인지입니다. 

/proc/sys/net/ipv4/conf/DEV/proxy_arp : 이걸 1로 설정하면 그 주소에 대한 라우트를 커널이 가지고 있는 경우 이 인터페이스가 ARP 요청에 응답하게 됩니다. 'ip pseudo 브리지'를 구축하는 데에 아주 유용하게 사용할 수 있습니다. 이걸 켜주기 전에 넷마스크가 확실히 올바른지를 신경써 주십시오! 또한 따로 언급하는 arp_filter 역시도 ARP 질의에 영향을 준다는 걸 알아두십시오!

/proc/sys/net/ipv4/conf/DEV/rp_filter : 역경로 필터링에 대한 절을 참고하십시오. 

/proc/sys/net/ipv4/conf/DEV/secure_redirects : 기본 게이트웨이 목록에 있는 게이트웨이에 대해서만 ICMP 전환(redirect) 메시지를 받아들입니다. 기본적으로 켜져 있습니다. 

/proc/sys/net/ipv4/conf/DEV/send_redirects : 앞서 언급한 전환 메시지를 보내 주는지입니다. 

/proc/sys/net/ipv4/conf/DEV/shared_media : 이걸 설정해 주지 않으면 커널은 이 장치상에서 서로 다른 서브넷들이 직접 통신할 수 있다고 가정하지 않습니다. 기본 설정은 'yes'입니다. 

/proc/sys/net/ipv4/neigh/DEV/anycast_delay : neighbor solicitation 메시지에 대한 응답의 임의 지연의 최대값이며 jiffies(1/100초) 단위입니다. 아직 구현되어 있지 않습니다 (리눅스는 아직 애니캐스트 지원을 하지 않습니다). 

/proc/sys/net/ipv4/neigh/DEV/app_solicit : 사용자 수준 ARP 데몬에게 보내는 요청의 개수를 결정합니다. 0을 사용해 꺼주십시오. 

/proc/sys/net/ipv4/neigh/DEV/base_reachable_time : RFC2461에서 명세한 대로 random reachable time값을 계산하는 데 쓰이는 기본값입니다. 

/proc/sys/net/ipv4/neigh/DEV/delay_first_probe_time : 이웃이 접근 가능한 경우 첫 번째 time probe에 대한 지연 시간입니다. (gc_stale_time 참고) 

/proc/sys/net/ipv4/neigh/DEV/gc_stale_time : 얼마나 자주 낡은 ARP 항목을 검사할 것인지를 결정합니다. ARP 항목이 낡은 것이 되면 그 항목을 다시 확인하게 됩니다 (이는 IP 주소가 다른 장비로 옮겨간 경우에 유용합니다). ucast_solicit이 0보다 크면 먼저 알려진 호스트에게 ARP 패킷을 직접 보내려고 시도합니다. 그게 실패하고 mcast_solicit이 0보다 크면 ARP 요청을 브로드캐스팅 합니다. 

/proc/sys/net/ipv4/neigh/DEV/locktime : 이전 항목이 최소한 locktime만큼 오래된 경우에만 ARP/이웃 항목을 새 항목으로 교체합니다. 이는 ARP 캐시 스래싱을 방지해 줍니다. 

/proc/sys/net/ipv4/neigh/DEV/mcast_solicit : 멀티캐스트 solicitation에 대한 최대 시도 횟수입니다. 

/proc/sys/net/ipv4/neigh/DEV/proxy_delay : 프럭시 ARP 항목을 가지고 있는 ARP 요청에 대해 응답하기까지의 최대 시간입니다 (실제 시간은 random0..proxy_delay입니다). 몇몇 경우에 네트워크 플러딩을 막는 데에 사용합니다. 

/proc/sys/net/ipv4/neigh/DEV/proxy_qlen : 지연된 프럭시 arp 타이머의 최대 큐 길이입니다. (proxy_delay 참고) 

/proc/sys/net/ipv4/neigh/DEV/retrans_time : 재전송되는 Neighbor Solicitation 메시지간의 시간이며, jiffies(1/100초) 단위입니다. 주소 알아내기 및 이웃이 접근 불가능한지를 알아내는 데에 쓰입니다. 

/proc/sys/net/ipv4/neigh/DEV/ucast_solicit : 유니캐스트 solicitation에 대한 최대 시도 횟수입니다. 

/proc/sys/net/ipv4/neigh/DEV/unres_qlen : 대기중인 arp 요청에 대한 최대 큐 길이입니다. 즉, ARP 주소를 아직 확인하고 있는 동안 다른 계층에서 받아들이는 패킷의 개수입니다. 

/proc/sys/net/ipv4/route/error_burst 및 /proc/sys/net/ipv4/route/error_cost : 이 매개변수들은 라우팅 코드가 커널 로그에 기록하는 경고 메시지를 제한하는 데에 쓰입니다. error_cost 인자가 높으면 더 적은 메시지를 기록하게 됩니다. error_burst는 언제 메시지가 사라질 것인지를 제어합니다. 기본 설정은 5초에 한번으로 경고 메시지를 제한합니다. 

/proc/sys/net/ipv4/route/flush : 이 파일에 기록을 하면 라우팅 캐시를 비워버립니다.

/proc/sys/net/ipv4/route/gc_elasticity : 라우팅 캐시에 대한 쓰레기 수집 알고리즘의 빈도 및 동작을 제어하는 값입니다. 이건 장애 극복(fail over)을 하는 경우에 중요할 수 있습니다. 이전 라우트가 죽어서 새로운 라우트로 리눅스가 건너뛸 때까지 최소한 gc_timeout초만큼 지나게 됩니다. 기본값이 300으로 설정되어 있으며, 빠른 장애 극복을 위해 낮춰주는 것도 가능합니다. Ard van Breemen의 이 글도 참고하십시오. 

/proc/sys/net/ipv4/route/gc_interval : /proc/sys/net/ipv4/route_gc_elasticity를 참고하십시오.

/proc/sys/net/ipv4/route/gc_min_interval : /proc/sys/net/ipv4/route_gc_elasticity를 참고하십시오.

/proc/sys/net/ipv4/route/gc_thresh : /proc/sys/net/ipv4/route_gc_elasticity를 참고하십시오.

/proc/sys/net/ipv4/route/gc_timeout : /proc/sys/net/ipv4/route_gc_elasticity를 참고하십시오.

/proc/sys/net/ipv4/route/max_delay : 라우팅 캐시를 비워내는 것에 대한 최 대 지연 시간입니다.

/proc/sys/net/ipv4/route/max_size : 라우팅 캐시의 최대 크기입니다. 캐시가 이 크기에 도달하면 오래된 항목들이 없어지게 됩니다. 

/proc/sys/net/ipv4/route/min_delay : 라우팅 캐시를 비워내는 것에 대한 최소 지연 시간입니다. 

/proc/sys/net/ipv4/route/redirect_load : 특정 호스트로 더 많은 ICMP 전환 메시지를 보내야 하는가를 결정하는 인자입니다. 전환 메시지의 부하 한계(redirect_load) 또는 최대 개수(redirect_number)에 도달하고 나면 더이상 전환 메시지를 보내지 않게 됩니다. 

/proc/sys/net/ipv4/route/redirect_number : /proc/sys/net/ipv4/route/redirect_load를 참고하십시오. 

/proc/sys/net/ipv4/route/redirect_silence : 전환 메시지에 대한 중지 시간입니다. 부하나 개수 제한에 도달하여 중지된 후라고 해도, 이 시간이 지나면 전환 메시지를 다시 보내게 됩니다.

Posted by citrine
2017. 11. 10. 11:37

CentOS yum repository mirror 구축하기

2013/12/18 - [리눅스] - 우분투 apt 미러 서버 구성

위 글에 yum 미러는 어떻게 구축하냐는 댓글이 달려서 정리해본다.
방법은 매우 간단하다. 그냥 기존 mirror 사이트를 몽땅 긁어오면 된다. 물론 용량은 많이 필요하다.

일단 /data/centos 아래에 몽땅 다운로드 받는다고 가정하겠다.

mkdir -p /data/centos

아래 CentOS 미러 사이트 중 마음에 드는 녀석을 골라보라.

http://www.centos.org/download/mirrors/

개인적으로 rsync를 추천한다. 아래는 rsync로 neowiz에서 당겨오는 예제.

rsync  -avSHP --delete --exclude "local*" --exclude "isos" ftp.neowiz.com::centos /data/centos



다음은 wget으로 ftp 사이트 당겨오는 예제. cdnetworks를 예제로 해보자.

wget -m -nH -np -R "*.iso" -P "/data/" "ftp://centos.mirror.cdnetworks.com/centos/"



마지막으로 wget으로 http 사이트 당겨오는 예제. 이번엔 daum을 예제로 해보자.

wget -m -nH -np -R "index.*,*.iso" -P "/data/" "http://ftp.daum.net/centos/"



공통적으로 iso 파일은 다운로드 받지 않도록 했다. iso 파일까지 받으면 용량이 너무 커지므로...

파일을 다 받았다면 아파치 웹서버를 올려서 Client가 다운로드 받을 수 있도록 하면 되겠다. 여기서는 그냥 yum으로 설치하는 예제.

# 아파치 설치
yum -y install httpd

# 서버 부팅시 아파치 자동으로 올라오게 설정
chkconfig httpd on

# 아파치 시작
service httpd start

# CentOS Repo 디렉터리를 아파치 document root에 심볼릭 링크
ln -s /data/centos /var/www/html/centos

# SELinux 및 방화벽 끄기
lokkit --disabled --selinux=disabled



이렇게 하면 끝이다. Client에서 http로 rpm 다운로드가 가능하다. 아래는 Client에 repo 파일 설정하는 예제.
위에 구축한 서버 IP가 192.168.0.101이라 가정하면...

# vi /etc/yum.repos.d/test.repo

[base]
name=CentOS-$releasever - Base
baseurl=http://192.168.0.101/centos/$releasever/os/$basearch/
gpgcheck=0

[updates]
name=CentOS-$releasever - Updates
baseurl=http://192.168.0.101/centos/$releasever/updates/$basearch/
gpgcheck=0

[extras]
name=CentOS-$releasever - Extras
baseurl=http://192.168.0.101/centos/$releasever/extras/$basearch/
gpgcheck=0

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://192.168.0.101/centos/$releasever/centosplus/$basearch/
gpgcheck=0

[contrib]
name=CentOS-$releasever - Contrib
baseurl=http://192.168.0.101/centos/$releasever/contrib/$basearch/
gpgcheck=0



출처: http://www.snoopybox.co.kr/1739 [snoopybox]

Posted by citrine
2017. 9. 27. 19:56

0. 환경

 OS: Centos 6

 uname : Linux HyBoostF80 2.6.32-696.3.1.el6.x86_64 #1 SMP Tue May 30 19:52:55 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux


1. 기본 RPM 설치 (http://cassandra.apache.org/download/)

Installation from RPM packages

  • For the <release series> specify the major version number, without dot, and with an appended x.
  • The latest <release series> is 311x.
  • For older releases, the <release series> can be one of 30x22x, or 21x.
  • (Not all versions of Apache Cassandra are available, since building RPMs is a recent addition to the project.)

  • Add the Apache repository of Cassandra to /etc/yum.repos.d/cassandra.repo, for example for the latest 3.11 version:
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/redhat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS
  • Install Cassandra, accepting the gpg key import prompts:
sudo yum install cassandra

Start Cassandra (will not start automatically):

service cassandra start

Systemd based distributions may require to run systemctl daemon-reload once to make Cassandra available as a systemd service. This should happen automatically by running the command above.

Make Cassandra start automatically after reboot:

chkconfig cassandra on

Please note that official RPMs for Apache Cassandra only have been available recently and are not tested thoroughly on all platforms yet. We appreciate your feedback and support and ask you to post details on any issues in the corresponding Jira ticket.



2. cqlsh 에러 처리(https://stackoverflow.com/questions/35197362/unable-to-open-cqlsh-apache-cassandra-importerror-no-module-named-cqlshlib)

다음과 같이 에러가 나오면 
---------------------------------------------------------------------------------------------------------

./cqlsh.py

Traceback (most recent call last):

  File "./cqlsh.py", line 168, in <module>

    from cqlshlib import cql3handling, cqlhandling, pylexotron, sslhandling, cqlshhandling

ImportError: No module named cqlshlib

------------------------------------------------------------------------------------------------------


cqlshlib 라이브러리를 찾을수 없다는 에러이다..

cqlsh.py 파일을 열어서 

---------------------------------------------------------------------------------------------------------

...
import sys
...
from uuid import UUID
sys.path.append("/usr/lib/python2.7/site-packages")  #cqlshlib  파일의 위치를 찾아서 넣어준다.

---------------------------------------------------------------------------------------------------------


Posted by citrine
2017. 9. 12. 09:41

1. 배경 : rm -f * 시 다음과 같은 에러 메시지가 발생한다.

-bash: /bin/rm: 인수 명단이 너무 김


이럴 때는 다음과 같이 명령으로 해결한다.


ls | xargs rm -f



# 참고

http://faq.hostway.co.kr/?mid=Linux_ETC&page=8&document_srl=1397




'[IT] 리눅스' 카테고리의 다른 글

CentOS yum repository mirror 구축하기  (0) 2017.11.10
[Cassandra] 설치  (0) 2017.09.27
[CenOS] GUI 원격 접속  (0) 2017.06.20
[Ubuntu] "Failed to start session" 과 함께 로그인이 안될때  (0) 2017.03.02
[Ubuntu] tenflow 설치  (0) 2017.02.28
Posted by citrine
2017. 6. 20. 15:39

요약 : vnc 서버를 통한 원격 접속


# 설치


1. vnc 설치

yum -y install xrdp



EPEL 설치 (기업용 리눅스 환경을 위한 추가 패키지)

[root@localhost ~]# yum install epel-release



 tigervnc-server 설치
부팅시 xrdp, vncserver 자동 실행

[root@localhost ~]# yum install tigervnc-server 

[root@localhost ~]# chkconfig xrdp on [root@localhost ~]# chkconfig vncserver on

/etc/sysconfig/vncservers 설정 변경

[root@localhost ~]# vi /etc/sysconfig/vncservers


// 아래 주석된 2줄을 찾아서 똑같은 2줄을 추가하고 

// myusername 을 root 로 변경한다.


# VNCSERVERS="2:myusername" # VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost" VNCSERVERS="2:root" VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"

vncpasswd 설정

[root@localhost ~]# vncpasswd Password: Verify:

RDP 포트 3389 열어주기 설정

[root@localhost ~]# iptables -I INPUT -p tcp --dport 3389 -j ACCEPT [root@localhost ~]# /etc/init.d/iptables save

서비스 실행하기

[root@localhost ~]# service vncserver restart

[root@localhost ~]# service xrdp restart

데몬 실행후 윈도우 "원격데스크톱연결" 을 실행해서 접속하면 자~~알 된다.



출처: http://wookmania.tistory.com/85 [코드의추억]

Posted by citrine
2017. 3. 2. 10:30

1. 증상 :  "Failed to start session" 과 함께 로그인이 안됨

2. 환경 : Ubuntu server 설치후 init 5를 하여 graphic level로 접속을 시도함

3. 해결 : Ctrl+Alt+F1을 눌러 CLI 환경으로 로그인한다.

Posted by citrine
2017. 2. 28. 17:39

# 참고 (http://www.popit.kr/tensorflow-install-ubuntu16/)

www.poptip.kr


Tensorflow 설치하기 (Ubuntu 16)

먼저 이 글은 텐서플로우 문서에 있는 내용의 요약본이라고 생각하시면 정확합니다. 저는 우분투 14에서 텐서플로우 사용 중이였었는데 이상하게 시스템이 불안했습니다.  정확한 진단없이 드라이버 문제라고 생각하고 그래픽 드라이버 업데이트를 시도하다가 무한 부팅 대마왕을 만나게 되었고 그 결과 제 리눅스 데스크탑을 몇 개월간 고이 모셔두게 되었습니다. 하지만 페친님 도움으로 우분투 16에서 호환성이 더 좋다는 이야기를 듣고 우분투 16에 텐서플로우를 설치하게 되었습니다. 아래는 제가 텐서플로우를 설치한 방법입니다.

0. 바이오스 업데이트

제 시스템에 있던 가장 큰 문제는 바이오스가 그래픽 카드를 제대로 지원하지 못해서 생긴 사고(?) 입니다. 윈도우에서는 잘 돌아갔지만 이상하게 리눅스에서 문제를 일으킨다면 최신 바이오스가 있는지 체크해 보시길 바랍니다. 제 메인보드는 Z77X 칩셋 입니다.

1. Ubuntu 16 설치

리눅스도 윈도우 만큼이나 설치가 쉽습니다. 자세한 리눅스 설치법은 따로 설명하지 않습니다. 다만 제가 사용한 버전은 아래 그림과 같습니다 (제 시스템 스펙이 다 나오는군요. 업글하고 시포요ㅠㅠ)

system_spec

2. 그래픽카드 드라이버 업데이트

바닐라 상태(아무것도 설치되지 않은 상태)의 우분투 16에 System Settings > Software & Updates > Addition Drivers 탭으로 이동하신 다음 NVIDIA binary 드라이버를 선택해주시면 자동으로 업데이트 해줍니다. 업데이트가 완료되면 재부팅 한 번  해주세요.

driver_update

3. Cuda Toolkit 설치

저는 apt-get을 사용해서 cuda-toolkit을 설치 했습니다.

cuda-toolkit

4. cuDNN v4 설치

https://developer.nvidia.com/rdp/cudnn-download 에서 cuDNN v4 Library for Linux를 다운로드 받습니다.

cuDNN

다운로드 받은 파일을 압축해제하면 cuda폴더가 나옵니다. cuda 폴더로 이동합니다.

cudnn1

cuda폴더에는 include폴더와 lib64폴더가 있는 것을 볼 수 있습니다.

cudnn2

cuda 폴더를 /usr/local 아래로 복사합니다.  e.g) /usr/local/cuda

복사가 끝났으면 아랫줄을 실행하여 권한 설정을 해줍니다.

GPU 지원을 사용하기 위해서 .bashrc 또는 .bash_profile 에 다음 라인을 추가합니다.

5. Virtualenv 설치

저는 파이썬 3를 사용합니다만 파이썬2를 선호하시는 분들은 아래 명령어에서 python3를 python으로 바꿔 주시면 됩니다.

아래 명령어를 실행합니다.

virtualevn_install

위 명령어가 성공적으로 실행됐으면 tensorflow 폴더가 생성됩니다.

tensorflow_folder

virtualenv 를 활성화 합니다.

virtualevn_install

사용중인 파이썬 버전을 확인한후

python_version

아래 목록에서 해당 파이썬 버전의 텐셔플로우 바이너리 URL을 찾고

export를 실행합니다.

아래 명령어로 텐셔플로우를 설치합니다.

 

이제 설치는 다 끝났습니다.

6. 테스트

실행 하시면 아래와 비슷한 결과를 보실 수 있습니다.

console

6. Tips

아직 리눅스, 파이썬, 텐서플로우에 익숙하시지 않은 분들을 위한 팁입니다. 댓글에 질문을 남겨주시면 필요한 내용이다 싶은 내용들은 여기 팁란에 추가하도록 하겠습니다.

Vritualenv

virtualenv를 아주 간단하게 설명하면 고립된 환경입니다. 혹시나 모를 충돌을 방지해서 실험 환경을 독립적으로 가둬두는 겁니다.

따라서 시스템 재부팅, 콘솔 재시작등 다시 virtualenv를 활성화 시켜야 기존에 설치하신 텐셔플로우를 제대로 사용하실 수 있습니다.

활성화 시키는 방법은 아래와 같습니다.

활성화가 된경우 (tensorflow)가 붙어 있는 것을 보실수 있습니다.

비활성화 하시는 방법은 아래와 같습니다.

Jupyter notebook

개발자에게 IntelliJ, Visual Studio 와 같은 IDE가 있다면 데이터 사이언티스트에게는 Notebook이 있습니다.

간단하게 IDE처럼 실행하고 결과를 바로 볼 수 있게 도와주는 툴이라고 생각하시면 됩니다.

제 생각에는 아주 간단한 테스트를 제외하고 아무도 파이썬 콘솔에서 텐서플로우 코드를 작성하지 않을거라 생각합니다.

저는 대부분의 경우 Jupyter notebook을 사용하여 텐서플로우를 학습하고 있습니다.

설치 방법은 아래와 같습니다.

실행 방법은 아래와 같습니다.

실행하시면  아래와 같이 웹브라우져에서 노트북이 열립니다. 오른쪽 상단의 new 버튼을 클릭하고 notebook섹션에서 python[root]를 선택해서 노트북을 하나 생성합니다.

notebook_start

그리고 파이선 콘솔과 같이 사용하시면 됩니다.

notebook_run1

노트북을 실행하실 때 열어둔 콘솔에서 로그를 확인 하실 수 있습니다

notebook_gpu

GPU 모드 체크

지금 텐서플로우가 동작은 하는데 cpu에서 동작하는 것인지 gpu에서 동작하는 것인지 확인하시고 싶으실 겁니다.

console

저는 gpu모드를 사용중이기 때문에 위 그림과 같이 아래서 4번째 줄에 마지막에 (/gpu:0)이 로그에서 보여지고 있습니다. 따라서  gpu에서 잘 동작중 임을 알 수 있습니다.


Posted by citrine
2017. 2. 22. 14:19

1. 설정 파일 : /etc/profile (접속 사용자에모두 적용하기 위해서 다음 항목은 에 추가한다.)

2. 설정

# http proxy
http_proxy=http://10.106.27.254:3128

# https proxy
https_proxy=https://10.106.27.254:3128

# ftp proxy
ftp_proxy=ftp://10.106.27.254:3128

# proxy 예외
no_proxy="127.0.0.1, localhost"

# 환경변수 적용
export http_proxy
export https_proxy
export ftp_proxy
export no_proxy


Posted by citrine