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가 달라졌다.



unicode 환경 컴파일 작업중 ansi 파일을 읽고 쓰는 부분을 unicode에서 읽고 쓰기가 되도록 수정 하다보니

검색해보면 대부분 BOM을 사용하는것으로 검색이 된다.


하지만 내가 필요한 내용은 BOM이 없는 파일에서 utf-8 포맷의 텍스트 파일을 읽는것이라서

다음과 같은 방식으로 수정을 했다.



CString strBuffer; // 실제 작업용 버퍼
CStringA szFileBuffer; // 파일에서 읽어들일 버퍼

CString strFilePath;
strFilePath = _T("test.txt");

CFile   hFile;
DWORD n;
if(hFile.Open(strFilePath,CFile::modeRead)){
    n = (DWORD)hFile.GetLength();
    n = hFile.Read(szFileBuffer.GetBuffer(n), n);
    szFileBuffer.ReleaseBuffer(n);
    hFile.Close();
}
// utf-8 파일 내용을 unicode로 변환
strBuffer = CA2T(szFileBuffer, CP_UTF8);

// 이후 로직 처리

//파일 저장
if(hFile.Open(strFilePath,CFile::modeCreate | CFile::modeWrite )){
    // unicode 문자열을 utf-8로 변환
    szFileBuffer = CT2A(strBuffer, CP_UTF8);
    sf.Write(szFileBuffer, szFileBuffer.GetLength());        
    hFile.Close();
}


unicode에서도 CFile 은 BOM 이 없으면 ansi 형식으로 데이터를 읽으므로 CStringA를 사용하도록 하는것이 핵심!!


'지식창고 > 프로그램' 카테고리의 다른 글

CFile 에서 utf-8 파일 읽고 쓰기  (0) 2020.06.16
firefox Dns over HTTPS (DOH) 적용 하기  (0) 2018.05.17
nginx post 405 not allow 문제  (0) 2016.11.24
크롬 마우스 제스쳐 확장  (0) 2016.09.21
ConEmu 설정  (0) 2016.08.31
Laravel - 기본 라우팅  (0) 2015.05.19

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 2004 버전에서 WSL2를 지원하면서 docker desktop에서도 지원을 시작 하였다.


WSL2를 사용할 계획이 있다면 별도의 활성화 명령을 실행시키지 말고 도커설치를 권장합니다.

아주 편리하게 WSL2가 활성화 됩니다.


윈도우 10 버전이 2004 인지 확인한다. 아마도 시스템이 hyper-v 구동이 되는 가상화 지원이 되어야 할 것 같습니다.


설치 파일을 다운로드 받고 설치를 시작한다.
https://www.docker.com/products/docker-desktop


WSL2 체크를 확인한다.

설치 진행중

설치가 완료되면 재시작

로그인 하면 도커가 구동된다.

WSL2 커널 업데이트 안내 창이 실행되면 업데이트를 진행한다.


업데이트 하고 재부팅을 하면 도커가 구동되고 사용법이 안내된다. 이를 따라해보려면 GIT이 설치 되어 있어야한다.


버튼을 클릭하면 명령이 입력되어 실행된다.

받은 소스를 기반으로 이미지 빌드

빌드된 이미지 실행

localhost로 접속이 된다.


구동중인 컨테이너를 관리할 수 있다.


항상 도커를 사용할 계획이 아니라면 Start Docker Desktop when you log in 체크를 해제한다.



윈도우 10 2004 버전에서 home 버전에서도 wsl2가 된다는 소식에 hyper-v로 설치를 했다.

그런데 고급세션이 활성화가 안되는 것이다. 뭔가 설정을 빼먹은게 아닐까 싶어서 검색을 해봤는데

딱히 답이 없었다.

 

오늘 pro 버전을 설치 해보니 home 버전이라 안되는것을 확인 하였다.

 

TLDR;

hyper-v의 Guest가 윈도우10 home 버전에서는 고급세션 사용이 되지 않는다.


Guest에 처음 접속은 비활성 상태에서 실행된다

기본 연결은 고급세션이 비활성 상태

그런데 Guest가 pro 버전이면 다음과 같이 고급세션 연결 창이 실행된다.



고급세션 활성화 상태

검색해보니 Guest가 리눅스 버전인 경우 고급세션 사용이 가능하다는 글을 봤다.

따라서 윈도우 home에서만 제약이 있는것 같다.

만약 고급세션이 안되면 hyper-v 설정을 확인한다.


고급세션 모드 허용 체크!


환경 CentOS 7, yum   설치

에러 메시지
Error code EACCES: Insufficient permissions for extracting the browser archive. Make sure the Kibana data directory (path.data) is owned by the same user that is running Kibana.


디렉토리 생성이 안되어 kibana 프로세스가 계속 재구동 되는 문제 발생

해결
mkdir /usr/share/kibana/data
chown kibana:kibana /usr/share/kibana/data

CentOS 7에서 docker 사용 중 데이터 경로를 변경해야 해서 찾아보고 다음과 같이 설정해서 변경했습니다.

docker의 기본 데이터 저장 경로는 다음과 같습니다

/var/lib/docker

이 경로를 지정하는 가장 간단한 방법은 다음과 같이 data-root를 지정하면 됩니다.

vim /etc/docker/daemon.json

{  
    "data-root": "/data/docker"  
}

운영 중 변경하신다면 다음과 같이 하시면 됩니다.

 

  • 데몬 중지 ( systemctl stop docker)
  • 데이터 이전
  • daemon.json 생성
  • 데몬 기동 ( systemctl start docker)

 

상세 설명은 다음의 링크를 참고합니다.
https://docs.docker.com/config/daemon/systemd/

ps. 신규 에디터로 작성했는데 블로그 스킨과 뭐가 맞지 않는지 이상해보이네요.

Spring Boot Data Jpa 프로젝트에 Querydsl 적용하기  예제를 따라 해보려고 하다보니

gradle 5.0에서는 잘 되지 않았다.

처음에는 gradle 에서 달라진 annotationprocessor 때문이라고 생각해서 테스트를 해봤는데 잘 되지 않았다.

    compileOnly('org.projectlombok:lombok')
    annotationProcessor("org.projectlombok:lombok")

한참 구글링 해보면서 이런 저런 옵션을 설정 해봤는데 최종적으로는 다음과 같은 설정을 하면

gradle 5.0에서 queryDSL 과 lombok ,spring-boot 이 잘 동작 한다.


plugin

plugins {
id "org.springframework.boot" version "2.1.1.RELEASE"
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id "io.franzbecker.gradle-lombok" version "1.14"
id "io.spring.dependency-management" version "1.0.6.RELEASE"
id "java"
id "idea"
}

io.franzbecker.gradle-lombok 를 사용하면 dependencies 설정이 자동으로 들어가기 때문에 따로 설정 하지 않아도 된다.

queryDSL 설정은 다음과 같이 한다.

// querydsl 적용
def querydslSrcDir = 'src/main/generated'

querydsl {
library = "com.querydsl:querydsl-apt"
jpa = true
querydslSourcesDir = querydslSrcDir
}

compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}

configurations {
querydsl.extendsFrom compileClasspath
}

sourceSets {
main {
java {
srcDirs = ['src/main/java', querydslSrcDir]
}
}
}

이렇게 설정 하니 예제가 잘 동작 했다.

'지식창고 > Java' 카테고리의 다른 글

queryDSL lombok gradle 5.0  (4) 2019.01.02
eclipse workspace 삭제  (0) 2018.12.05
eclipse 설치한 플러그인  (0) 2018.04.10
gradle 유용한 플러그인  (0) 2016.07.25
eclipse neon으로 옮기면서 삽질  (0) 2016.07.15
eclipse + gradle => buildship  (0) 2016.07.04
  • seta 2019.05.01 18:58

    똑같이 설정해보았는데 빌드가 안되는데 dependencies 설정도 볼수 있을까요 ? ㅠㅠ

  • BlogIcon JohnSuhr 2019.06.23 22:58 신고

    ㅠㅠ 감사합니다 다른 문서 죄다 안되는데 여기서 한방에 해결했습니다!

  • BlogIcon 내나라 2019.09.16 15:12 신고

    저도 똑같이 설정 해보았는데 빌드가 안되는데 build.gradle 파일을 볼 수 있을까요 ?

    spring boot 2.1 + gradle 5.4.1 + eclipse
    --------

    마이바티스와 충돌때문에 안됐었습니다.
    마이바티스를 지우니까 잘 됩니다.

  • BlogIcon 대탈출 시즌3 다시보기 2020.06.22 10:20

    잘 보고 갑니다~~

구글에서 한글로 검색을 하면 거의대부분 파일 편집 방식으로 안내를 하고 있다.

영문으로 검색을 하면 이클립스 메뉴에서 삭제 방법을 안내 하고 있다.


Preferences -> General ->Startup and Shutdown 의 Workspaces


'지식창고 > Java' 카테고리의 다른 글

queryDSL lombok gradle 5.0  (4) 2019.01.02
eclipse workspace 삭제  (0) 2018.12.05
eclipse 설치한 플러그인  (0) 2018.04.10
gradle 유용한 플러그인  (0) 2016.07.25
eclipse neon으로 옮기면서 삽질  (0) 2016.07.15
eclipse + gradle => buildship  (0) 2016.07.04