WSL의 resolvconf의 리셋을 쉽게 하려면
10886 단어 PowerShellWSLWSL 2tech
WSL2는 최근에 가끔 손상
/etc/resolv.conf
되며 IP 해결에 실패합니다.일시적인 것인지 모르겠지만 명령만으로는 해결할 수 없다는 생각에 셸 스크립트
.zshrc
는alias로 등록되었습니다.컨디션
전제 조건
WSL2는 기본적으로 resolv입니다.conf가 자동으로 생성되지만, 독립적으로 설정된 DNS라면 매번 다시 쓰고 손상되는 문제가 있습니다.개인의 사용 수요에 따라 이것은 매우 어렵다.
그래서 매번 Resolv.conf를 다시 쓰지 않기 위해서
/etc/wsl.conf
에 다음과 같은 설정을 추가했습니다.[network]
generateResolvConf = false
하지만 지금은 이 설정이 되어 있지만 가끔 파일과 함께 사라지기도 한다(수수께끼)🥲WSL의 셸 파일에서 Powerherll 명령 호출
WSL에 설정된nameserver IP는 powerherll
ipconfig
명령을 통해 확인할 수 있습니다.파워셸을 일부러 시작하지 않아도 WSL에서 확인할 수 있다.❯ powershell.exe ipconfig
Windows IP 構成
イーサネット アダプター イーサネット:
接続固有の DNS サフィックス . . . . .: flets-east.jp
(中略)
イーサネット アダプター vEthernet (WSL):
(中略)
IPv4 アドレス . . . . . . . . . . . .: 172.19.64.1
(中略)
※ 대략ipconfig.exe
도 가능합니다.이더넷 어댑터 vEthernet(WSL)의 IPv4 주소를 원합니다
172.19.64.1
.이것은 Resolv입니다.conf에 묻고 싶습니다.아래의 셸 파일에서 가져오려고 했지만, 파워홀입니다.exe를 찾을 수 없는 오류가 발생했습니다.
명령줄에서 실행할 때 이미 움직여서 PATH의 해석 방법이 다를 수 있습니다.
NAMESERVER=$(powershell.exe ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
원본은 아래 글에서 빌려 썼다.이 문제는 지정된 절대 경로를 통해 해결되었다.
tail -1
는 WSL 측의 네트워크 어댑터가 자신의 환경에서 마지막으로 왔기 때문이다.# sh ファイル実行時、 powershell が見えなかったので、絶対パス指定
POWERSHELL_COMMAND="/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe"
NAMESERVER=$($POWERSHELL_COMMAND ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
DNS 검색 설정 포함
매개 변수로 수신하면 다음과 같은 두 파일로 나뉜다.아래와 같이 호출할 것을 구상하다.
패스 같은 건 지저분하지만 혼자 해도 괜찮아요. 눈 감으세요.
~/scripts/write_resolv_conf_with_dns.sh
보충다음은 tmux를 사용한 상태에서 순조롭게 진행되지 못하는 상황이 있기 때문에 아래에서 실시하는 것이 비교적 안전할 수 있음을 설명한다.
wsl.exe sh -c "~/scripts/write_resolv_conf_with_dns.sh"
write_resolv_conf_with_dns.sh
에 구성됩니다.
#!/bin/sh
# DNS SERVER をスペース区切りで入れとく。適宜置き換え。
DNS_SERVER="でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3"
sudo ~/scripts/write_resolv_conf.sh $DNS_SERVER
write_resolv_conf.sh
에 구성됩니다.
#!/bin/sh
TMP_FILE_NAME="tmp_resolve.conf"
if [ -f $TMP_FILE_NAME ]; then
rm $TMP_FILE_NAME
fi
touch $TMP_FILE_NAME
# sh のバッチファイル実行上から powershell が見えなかったので、絶対パス指定
POWERSHELL_COMMAND="/mnt/c/Windows/System32/WindowsPowerShell/v1.0//powershell.exe"
NAMESERVER=$($POWERSHELL_COMMAND ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
echo "# created by script, $(date "+%Y/%m/%d %H:%M:%S")" >> $TMP_FILE_NAME
echo "nameserver $NAMESERVER" >> $TMP_FILE_NAME
if [ $# != 0 ]; then
echo "search $@" >> $TMP_FILE_NAME
fi
cat $TMP_FILE_NAME
mv $TMP_FILE_NAME /etc/resolv.conf
실행 결과
끼워 넣은 물건이 정확하게 작동했다.DNS 서버는 샘플로 실제 넣는 것과 다르다.
❯ ~/scripts/write_resolv_conf_with_dns.sh
# created by script, 2021/01/18 07:33:32
nameserver 172.19.64.1
search でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3
❯ cat /etc/resolv.conf
# created by script, 2021/01/18 07:33:32
nameserver 172.19.64.1
search でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3
zshrc에 명령 호출로 등록하기
이것도 잡지인데 밑에 썼어요.알리스가 늘어나면 다른 파일로 나누는 게 좋을 것 같아요.
또한 시도하는 과정에서 tmux를 실행할 때의 문제로 시작하면 스크립트가 순조롭게 작동하지 않습니다.
일단문제를 회피하기 위해exe를 끼워서 실행합니다.
물론 Tmux를 시작하지 않은 상태에서도 이동한다.
# resolv conf
if [ -f ~/scripts/write_resolv_conf_with_dns.sh ]; then
alias reset_resolv='wsl.exe sh -c "~/scripts/write_resolv_conf_with_dns.sh"'
fi
(가끔 tmux에서 조작하면 실패할 때가 있어서 잘 모르겠어요...)전망 등
설정이 더 복잡해지면 다른 프로그래밍 언어로 하고 싶은데...
현재는nameserver 설정과 DNS 서버만 있기 때문에 파라미터 처리와 파라미터 처리를 고려할 필요가 없지만 더 이상 증가하면 고통스럽다.
필요하면 다시 생각해봐.
총결산
지저분하지만 평소 괴롭혔던 문제를 자동으로 해결할 수 있기 때문에 그곳으로 생각을 돌리는 시간이 줄어들 것 같다.좋은 일.
앞으로도 자신이 편리하게 사용할 수 있는 환경을 계속 맞춤형으로 만들어야 한다.
비록 이번에 기재한 방법은 그다지 좋지 않지만, 나는 참고할 수 있다면 좋겠다고 생각한다.
Reference
이 문제에 관하여(WSL의 resolvconf의 리셋을 쉽게 하려면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yumechi/articles/02cfc83313b18331a75a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)