windows 10 20h1 에서 wsl2 docker를 사용중인데

8081포트에 bind 하는 프로그램이 10013 bind 에러를 내면서 실행이 되지 않았다.

포트를 사용중인 프로그램은 분명 없었는데


docker에서 elk를 테스트 해보려고 구동 했는데 역시 실행되지 않았다.

Creating network "docker-elk_elk" with driver "bridge"
Creating docker-elk_elasticsearch_1 ... error

ERROR: for docker-elk_elasticsearch_1  Cannot start service elasticsearch: Ports are not available: listen tcp 0.0.0.0:9200: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

ERROR: for elasticsearch  Cannot start service elasticsearch: Ports are not available: listen tcp 0.0.0.0:9200: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
ERROR: Encountered errors while bringing up the project.

intellij를 실행 했는데 bind 오류가 발생하면서 실행되지 않았다.

아무리 포트를 사용중인 프로그램을 찾아봐도 포트는 사용중이지 않았다.


intellij 오류창의 링크를 접속해보니 나와 같은 문제점이 있는 분이 있었고 그 아래 답변이 하나 있었다.


https://intellij-support.jetbrains.com/hc/en-us/articles/360007568559


나와 동일한 오류를 겪고 계신분의 덧글

On Windows "netsh winsock reset" in the Administrator console followed by the reboot should help. Also try disabling the antivirus/firewall and verify that the network configuration is correct.

관리자 창을 띄우고  명령을 실행하고 재부팅 하니 intellij와 개발 중인 프로그램은 실행되었다.

다만 도커는 아직도 안된다. 이건 조금 더 삽질을 해봐야 할 것 같다.

It's very uncommon when all 50 ports in this range are not available on the system.

Please provide the output from the following command in the Administrator console:

netsh interface ipv4 show excludedportrange protocol=tcp

Does it list all the ports in the range used by IntelliJ IDEA?

One of the possible reasons is a network misconfiguration caused by the Hyper-V. You can try to temporary disable Hyper-V Windows feature and see if it helps. Enabling it back should not cause the same problem again.

netsh 명령을 해보니 포트 목록에 9200이 포함되어 있다. hyper-v 관련 문제로 보인다.

그아래 다른 덧글을 좀 더 살펴보니 hyper-v가 예약한 포트 목록 때문으로 보인다고 한다.

관리자 콘솔에서 다음 명령 실행


netsh int ipv4 set dynamicport tcp start=49152 num=16383
netsh int ipv4 set dynamicport udp start=49152 num=16383

만세!! 오늘의 삽질 끝!


github의 관련 이슈
https://github.com/docker/for-win/issues/3171



vcpkg 2020.04를 사용중이였는데


2020.06 이 릴리즈되어서 업데이트를 했다.

그런데 프로젝트 빌드가 실패해서 이슈를 올리고 답변을 받은 내용을 정리 하자면


static triplet을 사용하는 방법이 .vcxproj 에 직접 수정을 해야 하는 방식에서

프로젝트 설정으로 변경되었다는 것이다.




내경우엔 x86-windows-static-md를 사용해야 해서 위와 같이 설정을 했다.

Triplet의 기본값은 $(VcpkgPlatformTarget)-$(VcpkgOSTarget) 이며

static 만 사용할 경우 Use Static libraries 를 예 로 설정 하면 된다.


.vcxproj 를 열여보면 다음과 같이 설정이 추가되어 있는것을 확인 할 수 있다.

  <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
    <VcpkgEnabled>true</VcpkgEnabled>
    <VcpkgUserTriplet>$(VcpkgPlatformTarget)-$(VcpkgOSTarget)-static-md</VcpkgUserTriplet>
  </PropertyGroup>


ps.

신규 업데이트가 있는것으로 착각 하고 git pull 로 업데이트 했는데

UI가 달라졌다.



vs2008을 10여년간 사용하다 vs2019를 사용하게 되어 boost를 설치 하려고 알아보니 vcpkg라는것이 있다고 하여

이런 저런 삽질을 진행한 결과를 정리한다.


참고 문서는 MS공식 문서가 제일 좋다.

vcpkg: a C++ package manager for Windows, Linux, and MacOS


설치

vcpkg를 설치할 경로에서 파워쉘을 실행하고 다음의 명령을 실행한다. GIT이 설치되어 있어야한다.


// vcpkg  저장소 clone
git clone https://github.com/microsoft/vcpkg.git
// 빌드
PS>./bootstrap-vcpkg.bat


빌드가 완료되면 vcpkg를 실행해볼 수 있다.

// 사용가능 패키지 검색
vcpkg search boost

//  visual studio 연동 설정
vcpkg integrate install

// 파워쉘에서 자동완성을 지원해준다고 하는데 어떻게 사용하는지 아직 확인 불가
vcpkg integrate powershell


이렇게 환경을 구성했으면 triplet 에 대해서 알아야 한다.


x86-windows : dll 로 사용한다.

x86-windows-static : lib로 사용한다 MT 옵션 컴파일

x86-windows-static-md : lib로 사용한다. MD 옵션 컴파일


boost를 static link 하려면 다음과 같이 설치 한다.

vcpkg install boost:x86-windows-static-md


Visual studio 에서는 x86-windows가 기본값으로 되어 있어서 static 으로 사용하려면 vcxproj 파일을 열고 다음과 같이 설정을 추가 해야한다.

<PropertyGroup Label="Globals"> 항목을 찾아서 아래쪽에 추가한다.


<PropertyGroup Label="Globals">
  <!-- .... -->
  <VcpkgTriplet Condition="'$(Platform)'=='Win32'">x86-windows-static</VcpkgTriplet>
  <VcpkgTriplet Condition="'$(Platform)'=='x64'">x64-windows-static</VcpkgTriplet>
</PropertyGroup>

처음에 dll 모드로 boost를 사용했더니 memory leak이 발생하였는데 이런때는

링커-입력-지연 로드된 DLL 에 boost의 dll을 지정해주면 된다.

오픈소스들중에 이런 문제가 종종 있는것 같다.

참고 링크 : https://stackoverflow.com/questions/9232837/how-to-remove-memory-leaks-between-opencv-1-1-and-mfc-6-0-without-linking-mfc-as


프로젝트 configuration이 Debug, Release 가 아닌 다른 이름이라면 이에 대한 설정도 별도로 해야 한다.

https://github.com/microsoft/vcpkg/blob/master/docs/about/faq.md#can-i-get-vcpkg-integration-for-custom-configurations


<PropertyGroup>
  <VcpkgConfiguration Condition="'$(Configuration)' == 'MyRelease'">Release</VcpkgConfiguration>
</PropertyGroup>



ps.

파워쉘 자동완성 기능은 윈도우 기본 탑재 파워쉘에서는 정상 동작 하지 않는다.

powershell7 을 설치 해보니 자동 완성이 잘 동작 했다.


2020.06 버전 부터는 static link 사용 방법이 달라졌다.


사용하는 프로그램의 업데이트가 있어서 그걸 작업하는중에 뭔가 이상했다.


재부팅을 하고 나니 시작 메뉴에 사용하던 아이콘들이 죄다 사라졌다.

윈도우 10의 시작 메뉴 버그가 나에게도 찾아왔다.


구글링하고 이거저거 해보기전에 바로가기가 제대로 있는지 확인


시스템 시작 메뉴

C:\ProgramData\Microsoft\Windows\Start Menu


사용자 시작 메뉴

C:\Users\계정명\AppData\Roaming\Microsoft\Windows\Start Menu


Start Menu는 한글 윈도우에서는 "시작 메뉴" 라고 표시된다.



바로가기는 그대로 있고 클릭하면 실행에 지장은 없다. 시작메뉴 아이콘만 새로 빌드되면 되지 싶었다.


일단 표시되는 바로가기는 사용자 아이콘은 나오고 시스템의 시작메뉴가 나오지 않는 상태였다.


그래서 시작메뉴의 아이콘 하나를 사용자 메뉴에 복사했더니


시스템 내부적으로 새로 추가된 아이콘을 처리 하기 시작했다. 그러면서 시스템의 시작메뉴 아이콘이 보여진다.



오호~~ 한참을 웅웅 거리며 스캔하고 빌드한 후 다시 시작메뉴를 살펴보니 아이콘이 돌아왔다.



phpstorm으로 laravel을 해보려고 구글링으로 셋팅중 gulp창이 보여서 열어봤더니 설정을 하라고 나온다.


Gulp는 어디서 들어봐서 설정시작


 1. Node.js설치

 2. npm install -g gulp로 설치

 3. 설치하면 자동적으로 phpstorm에서 인식함

    

     깔끔히 설치완료된 모습 이 모습을 보려고 다음과 같은 삽질을했음


 ● Gulp 창에서 npm install gulp 를 하라고 나옴

 ● 응? Gulp설치 했자나 뭐지? 어쩌란거야?

 ● package.json이 패키지 관리자면...알아서 필요한거 받아줄텐데...어떻게 하지

 ● npm init....이건 새로 만들때 쓰는거고..

 ● npm install gulp를 일단 해보니...되긴한데..laravel-elixir가 필요하단다..역시..뭔가 빠졌어.

 ● 삭제는 어떻게 하지?  npm remove gulp 그런데 node_modules 경로에 무슨 폴더다 이리 많아..
  

● 그냥 폴더 지워도 되는것 같다..다시 구글링 분명 패키지 자동 설치를 해줄꺼야.

찾았다. package.json의 경로에서 npm install

● 아직까지 이해가 안되는점

    ● 패키지를 global로 인스톨했는데 왜 프로젝트 경로에도 설치를 해야 하는걸까?