반응형

출처

https://serverfault.com/questions/914476/cant-access-mariadb-from-google-cloud-compute-instance


구글 클라우드 / Compute 인스턴스로부터 MariaDB에 접근할 수 없습니다.

저는 구글 클라우드 / Compute 인스턴스에서 실행하고 있는 Mysql에 원격 접근을 할 수 없는 거 같습니다. 저는 기본 설치를 시도하였습니다.

1. 저는 인스턴스를 기본값인 Debian을 사용하여 만들었습니다.

2. mysql을 apt-get install로 설치했고 설명하기 어렵지만 대신 MariaDB를 설치했습니다. 잘됩니다.

3. 저는 sudo mysql mysql_secure_installation을 prompt에 따라서 를 실행하였습니다. 설명하기 어렵지만 sudo를 사용하여 local 접근만 허용하기 위해 "root"를 위한 mysql.users 행을 "unix_socket"의 플러그인 열 값으로 나두었습니다.  잘 되었고 새로운 사용자를 추가하려고 합니다.

4. 저는 local에서 로그인하고 다음을 실행하였습니다.

create user 'myname'@'%' identified by 'mypass';

grant all privileges on * . * to 'mypass'@'%';

flush privileges;


저는 localhost에서 'myname'을 사용하여 접속할 수 있었습니다.

5. 저는 구글 클라우드 방화벽에서 8088 포트와 똑같은 규칙으로 만들었고 그 포트가 원격에서 잘 접속을 할 수 있었기 때문에 0.0.0.0/0으로 3306 포트를 열었습니다. 

6. 저는 원격에서 mysql을 접속했을 때 다음과 같은 내용을 얻었습니다.

이는 네트워크 문제일 수도 mysql 문제일 수도 있을 거 같은데 어느쪽인지 저는 모르겠습니다. 좋은 아이디어 있으신가요?

------

1개의 답변 중 1 개의 답변만 추려냄(자문자답)

알아내었습니다. /etc/mysql/maria.conf.d/50-server.cnf 설정 파일 깊은 곳에 뭍여 있었습니다. 그 파일에 놀라운 부분이 있었습니다.

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        = 127.0.0.1

bind-address 부분을 주석처리 하니 잘 작동하였습니다.

이것은 MySql을 요청할 때 Debian으로 MariaDB를 설치하는 것은 예외적으로 나쁜 결정의 결과입니다. mysql*과 mariadb*라는 이름으로 복잡한 설정 파일들이 있는데 아무도 그 파일들이 하고자 하는 일을 하지 않습니다.

반응형
반응형

출처

https://serverfault.com/questions/7689/how-do-i-get-rid-of-sockets-in-fin-wait1-state


어떻게 소켓의 FIN_WAIT1 상태를 제거할 수 있을까요?

kill하길 원하는 프로세스에 의해 막힌(blocked) 포트가 있습니다. (crash된 텔넷 대몬) 프로세스는 성공적으로 kill하였지만 포트는 아직 'FIN_WAIT1' 상태입니다. 'FIN_WAIT1' 상태에서 나오지 않으면 이 timeout은 '10년'은 갈 거 같습니다.

제가 찾은 그 포트를 비우는 유일한 방법은 전체 기계를 재부팅하는 것입니다. 당연이 이 방법을 사용하고 싶지는 않습니다.

$ netstat -tulnap | grep FIN_WAIT1 tcp 0 13937 10.0.0.153:4000 10.0.2.46:2572 FIN_WAIT1 -

리부팅 없이 어떻게 포트가 막히지 않도록(unblocked) 할 수 있는 지 아는 분 계신가요?

8개의 답변중 1개의 답변만 발췌

# 현재의 tcp_max_orphan의 값이 무엇인지 (origin_value에) 기록합니다. original_value=$(cat /proc/sys/net/ipv4/tcp_max_orphans) # tcp_max_orphans를 임시로 0으로 설정합니다. echo 0 > /proc/sys/net/ipv4/tcp_max_orphans # /var/log/messages를 확인합니다. # "kernel: TCP: too many of orphaned sockets"을 뱉으며 출력할 것입니다. # 연결이 끊어지기까지 얼마 걸리지 않을 것입니다. # 전에 있던 tcp_max_orphans의 값을 복구합니다. echo $original_value > /proc/sys/net/ipv4/tcp_max_orphans # 다음 명령으로 검증합니다. netstat -an|grep FIN_WAIT1

반응형
반응형

출처

https://stackoverflow.com/questions/47415796/multicast-from-tcp-replay-seen-by-wireshark-but-not-by-application


Wireshark에서 tcpreplay의 멀티캐스트가 보이지만 응용프로그램에서는 안 보입니다.

저는 tcpreplay로 진행할 멀티캐스트 패킷 캡쳐를 얻었습니다.

sysctl net.ipv4.conf.all.rp_filter=0
sysctl net.ipv4.conf.eth0.rp_filter=0
tcpreplay -i eth0 --loop=100 new.pcap

Wireshark로 eth0의 트래픽을 관찰하고 제가 관심있는 패킷(224.0.23.60:4937입니다.) 을 볼 수 있었습니다.

하지만 다음 Python 응용프로그램은 패킷을 찾을 수 없습니다.

import socket
import struct

MCAST_GRP = '224.0.23.60'
MCAST_PORT = 4937

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((MCAST_GRP, MCAST_PORT))  # use MCAST_GRP instead of '' to listen only
                         # to MCAST_GRP, not all groups on MCAST_PORT
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
   print '#'
   print sock.recv(64)

netstat -g를 실행하면 다음 출력이 나옵니다.

lo              1      all-systems.mcast.net
eth0            1      224.0.23.60

여기에 뭔가 놓친 것이 있습니까?

[편집] 정확히 내 패킷 캡처에서 IP src가 동일한 네트워크 하위 도메인 (ip src : 192.168.1.10)에 없는 반면 내 ip는 146.186.197.164와 비슷합니다.


1개의 답변만 발췌

이 문서(http://tcpreplay.synfin.net/wiki/FAQ)를 주의깊게 읽어 보시면, tcpreplay는 TCP/IP stack과 이더넷 장치 드라이버 사이에 패킷을 보내므로, 호스트 시스템의 TCP/IP 스택에서는 패킷을 볼 수 없습니다.

저는 VirtualBox로 '호스트 전용 어댑터'로 설정된 Debian OS를 사용하여 그 머신에서 tcp를 사용하여 해결하였습니다.


http://tcpreplay.synfin.net/wiki/FAQ 일부 발췌

tcpreplay를 같은 컴퓨터에서 실행하여 패킷을 보낼 수 있습니까?

일반적으로 안 됩니다. tcpreplay가 패킷을 보낼 때, 이 프로그램은 TCP/IP stack과 네트워크 카드의 장치 드라이버 사이에 패킷을 주입합니다. 그 결과, tcpreplay를 실행하는 TCP/IP 시스템은 패킷을 볼 수 없습니다.

한 가지 제안할 수 있는 것은VMWareParallels 또는 Xen 같은 것을 사용하는 것입니다. 가상 머신(guest)에서 tcpreplay를 실행하는 것은 호스트 운영체제에서 패킷을 볼 수 있게 합니다.


반응형
반응형

출처 : https://stackoverflow.com/questions/3413166/when-does-a-process-get-sigabrt-signal-6

언제 프로세스가 SIGABRT (시그널6)을 얻습니까?

프로세스가 C++에서 SIGABRT를 얻는 시나리오에는 어떤 것이 있습니까? 이 시그널은 프로세스 내에서만 항상 오는 건지 아니면 이 시그널이 한 프로세스에서 다른 데로 보내질 수 있나요?

어떤 프로세스가 이 시그널을 보내는지 확인하는 방법이 있습니까?


11개의 답변 중 1 개의 답변

abort()는 호출한 프로세스에게 SIGABRT 시그널을 보내고 이는 abort()가 기본적으로 작동하는 방법입니다.

보통 abort()는 내부 오류 또는 심각하게 깨진 제약 조건을 감지하는 라이브러리 함수에 의해 호출됩니다. 예를 들어 malloc()은 내부 구조가 힙 오버플로에 의해 손상된 경우 abort()를 호출합니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/9768444/possible-eventemitter-memory-leak-detected

가능한 EventEmitter 메모리 누수 감지됨

다음 warning이 나왔습니다.

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace: 
    at EventEmitter.<anonymous> (events.js:139:15)
    at EventEmitter.<anonymous> (node.js:385:29)
    at Server.<anonymous> (server.js:20:17)
    at Server.emit (events.js:70:17)
    at HTTPParser.onIncoming (http.js:1514:12)
    at HTTPParser.onHeadersComplete (http.js:102:31)
    at Socket.ondata (http.js:1410:22)
    at TCP.onread (net.js:354:27)

저는 server.js에 다음처럼 코드를 작성하였습니다.

http.createServer(
    function (req, res) { ... }).listen(3013);

이를 어떻게 고칠 수 있을까요?


21개의 답변 중 3개의 답변

이것은 노드 eventEmitter 문서에 설명되어 있습니다.

노드의 버전은 무엇입니까? 어떤 다른 코드가 있습니까? 정상적인 행동이 아닙니다.

간단히 말해서: process.setMaxListeners(0);

또한 다음도 참조하세요: node.js - 요청 - "emitter.setMaxListeners()" 방법?


경고가 있는 데는 이유가 있으며 올바른 수정이 제한을 늘리지 않고 동일한 이벤트에 그렇게 많은 리스너를 추가하는 이유를 알아내는 좋은 기회가 있음을 여기서 지적하고 싶습니다. 왜 그렇게 많은 리스너가 추가되고 있는지 알고 있고 그것이 정말로 원하는 것이라고 확신하는 경우에만 제한을 늘리십시오.

이 경고를 받았기 때문에 이 페이지를 찾았고 제 경우에는 전역 개체를 EventEmitter로 바꾸는 버그가 사용 중이었기 때문에 이 페이지를 찾았습니다! 이러한 것들이 눈에 띄지 않게 하고 싶지 않기 때문에 전 세계적으로 한도를 늘리지 않는 것이 좋습니다.


기본으로 최대 10개의 listener가 하나의 이벤트마다 등록될 수 있습니다.

다음이 당신의 코드라면 maxListeners를 다음을 통해 지정할 수 있습니다.

const emitter = new EventEmitter()
emitter.setMaxListeners(100)
// 0은 한계를 제한하지 않습니다.
emitter.setMaxListeners(0)

만약 다음이 당신의 코드가 아니라면 당신은 전역으로 그 수를 늘릴 수 있습니다.

require('events').EventEmitter.prototype._maxListeners = 100;

당연히 당신은 한계를 없앨 수 있지만 주의해야 합니다.

// 기본으로 한계를 없앤다. (주의하세요.)
require('events').EventEmitter.prototype._maxListeners = 0;

추신. 코드는 당신의 응용프로그램의 아주 시작에 와야 합니다.

추가: node 0.11부터 이는 기본 한계를 변경하여 작동합니다.

require('events').EventEmitter.defaultMaxListeners = 0
반응형
반응형

출처 : https://stackoverflow.com/questions/18924792/sort-and-remove-duplicates-from-int-array-in-c

C의 int 배열을 정렬하고 중복 제거하기

저는 C를 배우고 있고 정렬 부분가지 왔습니다. 저는 comp() 함수를 작성하고 int 의 배열로 정렬하는 데 qsort를 사용하였습니다. 이제 다음에 할 일은 배열로부터 중복을 제거하는 것입니다. 한 번에 정렬과 중복제거가 가능합니까?

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>    
int indexes[10] = { 0, 98, 45, 65, 45, 98, 78, 56, 65, 45 };

int comp(const void * elem1, const void * elem2) {

    int f = *((int*) elem1);
    int s = *((int*) elem2);

    if (f > s) {    
        return 1;
    }    
    if (f < s) {    
        return -1;
    }    
    return 0;
}

void printIndexArray() {    
    int i = 0;    
    for (i = 0; i < 10; i++) {    
        printf("i is %d\n", indexes[i]);    
    }
}

int main() {    
    qsort(indexes, sizeof(indexes) / sizeof(int), sizeof(int), comp);    
    printIndexArray();    
    return 0;
}

5 개의 답변 중 1 개의 답변

당신이 만든 숫자가 이미 정렬되었기 때문에 중복을 제거하는 것은 쉽습니다. C++에서는 std::unique로 만들어져 있습니다.

http://en.cppreference.com/w/cpp/algorithm/unique

당신 스스로 하고 싶기를 원하시면 unique가 하는 것과 똑같이 당신도 다음처럼 하실 수 있습니다.

int* unique (int* first, int* last)
{
  if (first==last) return last;

  int* result = first;
  while (++first != last)
  {
    if (!(*result == *first)) 
      *(++result)=*first;
  }
  return ++result;
}
반응형
반응형

출처 : http://stackoverflow.com/questions/3437404/min-and-max-in-c

C언어에서 MIN과 MAX

C에서 정의된 MINMAX가 어디에 있습니까?

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)


15 개의 답변 중 1 개의 답변

C에서 정의된 MINMAX 가 어디에 있습니까?

없습니다.

가능한 일반적이고 안전하게 이를 구현하는 최고의 방법은 무엇입니까? (주요 컴파일러에서 사용하는 컴파일러 확장/빌트인을 선호합니다.)

함수로써 저는 #define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))같은 매크로를 사용하지 않을 것입니다. 특별히, 당신의 코드에 배포할 계획이 있다면요. GCC 구문 표현에서 당신 스스로 표준인 fmax또는 fmin같은 것을 사용하거나 GCC의 typeof를 사용한 매크로를 고칠것입니다. (타입에 안전함도 보너스로 얻을 것입니다.)

#define max(a,b) \
   ({ __typeof__ (a) _a = (a); \
       __typeof__ (b) _b = (b); \
     _a > _b ? _a : _b; })

모두가 "아, 이중 평가에 대해 알고 있습니다. 문제가 없습니다."라고 말하고 몇 달 후에는 몇 시간 동안 가장 어리석은 문제를 디버깅하게 될 것입니다.

typeof 대신에 __typeof__를 사용하세요.

만약 ISO C 프로그램에서 include될 때 당신이 헤더파일을 작성한다면 typeof 대신에 __typeof__를 써야 작동될 것입니다.

반응형
반응형

출처

http://stackoverflow.com/questions/4466655/how-do-i-specify-what-function-to-export-from-so-library-when-compiling-the-c

C 코드를 컴파일할 때 .so 라이브러리로 부터 특정함수만 export하는 방법?

저의 "C" 코드에는 많은 함수들이 있습니다. .so를 컴파일할 때 .so 파일에 모든 이름을 볼 수 있습니다. 어떻게 export될 함수들만 지정할 수 있습니까? (내부적으로 사용되는 거는 공개되지 말아야 합니다.)


2개의 답변 중 1개의 답변

.so 파일을 언급하셨기 때문에, gcc나 gcc같은 컴파일러를 사용하신다고 가정합니다.

기본적으로 모든 extern 함수들은 연결된 object에서 보실 수 있습니다. 당신은 함수와 (전역변수를) hidden 속성을 사용하여 각 경우에 대해 (같은 라이브러리의 다른 소스 파일로부터 사용되는 함수를 extern으로 나둔 채로) 숨기실 수 있습니다.

int __attribute__((visibility("hidden"))) foo(void)
{
    return 10;
}

다른 방법으로 당신은 gcc-fvisibility=hidden 옵션을 보냄으로서 default를 hidden으로 바꿀 수 있습니다. 다음을 사용하여 export할 특별한 표시를 할 수 있습니다.

__attribute__((visibility("default")))
반응형
반응형

출처 : http://nerdoftherings.net/wp/?p=66

MSIZAP.exe - \windows\installer를 정리하는 방법


왜 이 숨겨진 디렉터리를 정리하기를 원할까요? 간단하게, 당신이 더 이상 원하지 않는 쓰레기들로 가득차 있기 때문입니다.

MS 업데이트 설치가 실패하거나 방해받을 때 제품과 상관없이 \windows\installer에 조각(파일, 디렉터리)들이 남겨져서 디스크 공간을 부족하게 합니다. 이는 MS에 의해 설계된 것으로 보이며 MsiZap을 다운로드함으로써 이 조각들을 제거합니다.

당신은 윈도우즈 폴더에 낚은 상태로 남아있는 필요없는 설치 파일들로부터 공간을 확보하길 원한다면. MsiZap.exe을 다운로드 받으시면 됩니다. 필요시에 다운로드를 모두 할 수 있도록 바로 여기에 링크를 해 놓았습니다. 이 프로그램은 필수이며 내가 알지 못하는 것을 지울 수 있도록 하는 이유입니다.

이제 당신은 이 중요한 파일을 가지고 있으며 다음은 이 프로그램을 사용하는 방법입니다.

'시작'=>'실행'을 누르고 cmd를 실행합니다. 

이 실행파일이 있는 곳에 command 프롬프트를 찾습니다. 저는 저의 경로로 이미 지정되어 있기 때문에 이 파일을 \%systemroot%\msizap.exe에 파일을 놓았습니다.

msizap.exe !G

윈도우즈가 얼마나 오래전에 설치된 것과 상관없이 화면에서 프로그램이 한 일을 봅니다. 그리고나서 당신의 시스템 드라이브를 보면 얼마나 공간을 절약되었는지 보실 수 있습니다.

이 프로그램이 나에게 도움에 되었던 만큼 도움이 되었으면 좋겠습니다.

실질적인 참조들과 더 많은 정보를 얻기 원하시면 밑을 보세요.

http://rafaelwolf.com/?p=263

http://www.pagestart.com/msizap.html

http://thebackroomtech.com/2009/01/19/howto-use-msizap-to-remove-orphaned-cached-windows-installer-data-files-to-increase-free-disk-space/

http://www.symantec.com/connect/articles/windows-install-clean-utility-using-msizap

http://sqlblog.com/blogs/linchi_shea/archive/2008/08/12/msizap-is-your-friend.aspx


반응형
반응형

출처 : http://www.dalyong.com/2696673

저번주 토요일에 정전이 발생한다는 공지를 보고 전기가 들어올 때 자동으로 켜게 하도록 하는 방법을 웹서핑을 해서 찾은 내용입니다.

전기 신호를 감지해서 컴퓨터 전원을 켠다고 하고요.

설정은 바이오스에서 가능합니다.

Power Management 부분에서 Restore On AC Power LossOn으로 되어 있으면 정전이 된 후 다시 전원이 들어오면 컴퓨터가 자동으로 켜지게 됩니다.

저번 주 금요일날 위의 방법대로 BIOS를 세팅을 하여 재부팅을 하였습니다. 

토요일에 정전이 되고 전원이 들어온 후 원격접속을 하니 컴퓨터가 잘 켜져 있음을 확인하였습니다.

반응형

+ Recent posts