레이블이 wsl인 게시물을 표시합니다. 모든 게시물 표시
레이블이 wsl인 게시물을 표시합니다. 모든 게시물 표시

rust unstable library error

# wsl 환경에서 cargo 로 bat 설치(빌드)시 
cargo install bat

# 다음과 같은 에러가 발생한다.
error[E0658]: use of unstable library feature 'is_terminal'
/home/ysoftman/.cargo/registry/src/github.com-1ecc6299db9ec823/grep-cli-0.1.8/src/lib.rs:238:23
std::io::stderr().is_terminal()

# rust 버전은 다음과 같다.
rustc --version
rustc 1.66.1 (90743e729 2023-01-10) (built from a source tarball)

# 메시지의 링크를 보면 이슈가 있다.

# unstable 상태가 에러가 아니라면 계속 진행하는 옵션을 줘도 실패한다.
cargo install -Z unstable-option --keep-going bat

# mac 에선 cargo 로 bat 설치시 똑같은 grep-cli v0.1.8 버전을 사용해 빌드하는데 잘된다.
# mac 에 설치된 grep-cli library 버전
cargo search grep-cli
grep-cli = "0.1.8"    # Utilities for search oriented command line applications.

# rustup 을 설치해서 rustc/cargo 버전을 올려보자.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# cargo 가 제대로 동작하지 않는다면 다음과 같이 삭제 후 재설치한다.
rustup uninstall stable && rustup install stable

# 최신 버전 확인
cargo --version
cargo 1.71.0 (cfd3bbd8f 2023-06-08)

# 이제 빌드 에러 없이 설치된다.
cargo install bat

Alacritty terminal emulator

terminal emulator 는 맥에서 iterm2 를, 윈도우에서는 자체 terminal 를 쓰고 있었다.

여담이지만 윈도우에서는 microsoft(마소) terminal 나오기전까지 hyper 를 썼었다.
오픈소스라 좋았지만 자잘한 버그도 꽤있었다. 마소 오픈소스로 terminal(스타수 69K , 2020-11기준)을 내놓은건 정말 잘한것 같다.

여러 터미널 예뮬레이터가 중 아직 0.5 버전이지만 스타수가 27k(2020-11기준)나 되고 
GPU Acceleration 으로 아주 빠르다는 alacritty 를 사용하게 됐다.
사실 rust 로 만들었다고 해서 더 끌렸는데, 
사용중인 ripgrep, fd, bat 등의 rust 로 만든 프로그램들이 아주 좋기 때문이다.

맥(catalina 버전)에서 brew 또는 cargo 또는 깃헙에 올려둔 Alacritty-v0.5.0.dmg 릴리즈 파일을 설치 후 실행하면 다음과 같은 에러가 발생한다.

이때는 system preferences > security & privacy > allows apps download from > app store and identified developers 로 선택한다.

설치하기
직접 클론 받아 빌드 & 설치하는 경우
cd alacritty
make app && make install

빌드 바이너리를 사용하는 경우, 아래 URL 에서 다운받으면 된다.

alacritty 깃헙에서 alcritty.yml 설정 파일을 ${HOME}/.alcritty.yml 로 위치시키고
폰트, 컬러, 크기등을 입맛에 맞게 설정해 저장하면 즉시 반영돼 보인다.

#####

alacritty vs iterm2 (GPU rendering 활성화)
성능 비교를 위해 다음 명령으로 수행시간을 측정했다.
time tree /usr

user+system 수행 시간 자체는 비슷하지만 화면에 뿌려지는 시간 차이가 난다.
alacrityy = 28 s
iterm2 = 35 s

time seq 1 1000000

seq 로 숫자 출력되는 속도도 alacritty 가 빠르다.
alacritty = 1.200 s
iterm2 = 4.156 s

터미널 화면을 크게 하고 cacademo 플레이 했을때도 iterm2 는 많이 끊기는데,
alacritty 는 매끄럽게 재생된다.(이건 fps 결과가 없어 직접 눈으로 체감해봐야 한다.)

역시 rust == fast 다. alacritty 터미널 화면 출력에서 확실히 빠른게 체감된다.
CPU 를 많이 쓰긴 하지만 빠른 화면 출력이 맘에 들고 폰트,컬러등 화면도 잘 나와 iterm2 보다 alacritty 를 주로 사용할것 같다.
(추가로 윈도우에서도 위 테스트를 해봤는데, terminal 더 빠르다. 윈도우에서는 terminal 을 주로 사용)

#####

디폴트 단축키
마우스 클릭으로 URL 오픈시 
iterm2: cmd+click
alacritty: shift+click

마우스 클릭으로 블럭(단어) 선택시
iterm2: alt+double-click
alacritty: shift+double-click

마우스 클릭으로 라인전체 선택시
iterm2: alt+triple-click
alacritty: shift+triple-click

#####

윈도우 환경
설정파일 위치
%APPDATA%\alacritty\alacritty.yml

wsl(windows subsystem for linux) 실행
alacritty -e wsl

PC 무한 재부팅

PC 전원을 켜면 2~3 초 후 꺼지고 다시 켜지기를 계속 반복 한다.
이런 PC 무한 재부팅시 다음 순서로 확인해보자.

1. RAM 모듈 접촉불량이 원인으로 뺐다 다시 끼운다. 이 경우가 대부분이라고 한다.
2. 메인보드의 BIOS 데이터 유지를 위한 전지(CR2032) 불량이 원인. 보통 전지 수명이 다해  BIOS 날짜가 초기화 되는 등의 이유로 교체하는데, 오래 먼지가 쌓이고 찌든때 심지어 곰팡이까지 번식하는 경우도 있고 이 경우 메인보드가 전원을 껐다 켯다 반복한다.
3. 파워 수명이 다한 경우, 새 파워로 교체해야 한다.

내 경우는 CR2032 전지 교체로 해결했다.
2014년에 구입후 6년이 지나니 아래 사진 처럼 찌든때, 곰팡이? 등이 문제가 된것 같다.

전지 교체후 BIOS 데이터가 초기화 됐으니 현재 날짜 설정과 
WSL(windows subsystem for linux) 실행을 위해 intel VT(Virtualization Technology) 기능을 활성화 해야 한다.

wsl bash completion is too slow

# wsl(windows subsystem for linux) 의 bash 탭으로 파일 자동 완성을 시도하면 너무 오래걸리는 문제가 있다.
bash ./a탭... 한참 후 파일 자동완성

# 터미널을 하나 더 열어 이전 터미널의 bash 탭 동작의 system call 을 살펴보면
# /mnt/c/windows 경로들의 수많은 파일들을 찾고 있는 것을 볼 수 있다.
strace -p 이전터미널pid

# path 환경변수 설정에 /mnt/c/windows 경로가 포함되어 있는 것이 문제였다.
echo $PATH
/mnt/c/Program Files/Intel/iCLS Client/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
...

# path 에서 /mnt/c/windows... 경로들을 빼고 재설정하면 빠르게 자동완성 된다.

# 이 이슈가 등록되어 있고,
# 배포판(ubuntu 등)의 /etc/wsl.conf 파일을 생성하고 다음 옵션값을 설정하면
# /mnt/c/window 등 윈도우 경로들이 추가되지 않는다.
sudo vi /etc/wsl.conf
[interop]
appendWindowsPath=false

# cmd -> wsl 배포판 상태를 확인
C:\Users\Administrator>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2

# 배포판을 terminate 시킨다.
C:\Users\Administrator>wsl -t ubuntu-18.04

# 이제 wsl 배포판(ubuntu)를 다시 시작하면
# path 환경변수에서 윈도우 경로가 빠져있고 bash 자동완성이 빠르게 동작한다.

# appendWindowsPath=false 옵션으로 윈도우 관련 경로들이 제외됐기 때문에
# wsl 에서 vscode 를 code . 실행을 위해선 아래 경로를 추가해야 한다.

matplotlib on wsl

# wsl(windows subsystem for linux) 에서 matplotlib 사용시
# 다음과 같이 그래프를 출력하는데
import matplotlib.pyplot as plt
plt.show()

# 다음과 같은 에러가 발생한다.
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

# 해결방법
# python3-tk 설치
sudo apt-get install python3-tk

# DISPLAY 환경변수 설정(.bashrc 에 추가하자)
export DISPLAY=localhost:0.0

# 윈도우용 xserver 설치 후
# xlaunch 앱 실행 -> multiple windows 선택 실행한다.
https://sourceforge.net/projects/vcxsrv/

# 이제 다시 실행하면 그래프 창을 볼 수 있다.

vscode 원격 개발

# vscode 1.35 부터 remote develop extension 을 설치해
# ssh, docker container, wsl 의 원격 개발 환경을 이용 할 수 있다.
# 참고로 아이콘도 좀 심플하게(예쁘게) 변경됐다.~ㅎ

# 원격 접속은 원격 서버의 ${HOME}/.vscode-server 프로그램을 설치하고 vscode-server 가 실행돼 원격으로 접속하게 된다.
# vscode-server 는 wget 로 다운로드를 하게 되는데
# 참고로 사내망이라면 http_proxy 환경 변수를 설정 해줘야 한다.

# docker container 가 이미 떠있는 경우
remote-containers : attach to running container
-> 현재 떠있는 컨테이너 선택 -> 새 vscode 창이 오픈

# 새 vscode 가 생성되면 컨테이너의 소스 파일을 열어 볼 수 있고,
# vscode 터미널에서 빌드 커맨드 등을 실행할 수 있는 상태가 된다.

# remote ssh 는 ~/.ssh/config 와 ~/.ssh/authorized_keys 사용한다.
# kerberos 인증 환경에서도 접속할 수 있다.
# settings.json 설정에 다음을 추가하면 로그인 터미널 상태를 표시해준다.
"remote.SSH.showLoginTerminal": true

# 로그인 터미널에 다음과 같은 에러가 발생하는 경우
channel 2: open failed: administratively prohibited: open failed

# 대상 호스트 서버의 /etc/ssh/sshd_config 에 tcp 포워딩 가능하도록 설정한다.
AllowTcpForwarding yes

# 그리고 sshd 서버를 재시작한다.
sudo systemctl restart sshd

# 기타 접속 이슈 해결방법 참고
https://code.visualstudio.com/docs/remote/troubleshooting#_troubleshooting-hanging-or-failing-connections

# remote develop 기능은 vscode live share(로컬 코드를 공유)와 비슷하지만
# 원격 장비의 코드를 vscode 로 볼 수 있어 좋은것 같다.

apache httpd 2.4 AH00076 에러

# apache httpd 2.4 를 윈도우(WSL:windows subsystem for linux)에서 실행하면
sudo /home/ysoftman/httpd/bin/apachectl start

# 다음과 같은 워닝이 발생한다.
[core:warn] [pid 1510] (92)Protocol not available: AH00076: Failed to enable APR_TCP_DEFER_ACCEPT

# httpd.conf 맨 마지막에 다음을 추가해 주자.
# 참고 http://httpd.apache.org/docs/2.4/mod/core.html
AcceptFilter http none
AcceptFilter https none

wsl 환경에서 netstat 사용하기

# WSL(Windows Subsystem for Linux) 에서
# 리눅스 netstat 가 작동하지 않는다.
which netstat
/bin/netstat

# wsl 에서는 .exe 를 실행할 수있다.
# (cmd.exe calc.exe explorer.exe 등을 실행할 수 있어 좋다.)
# 마운트된 C 드라이브의 윈도우 디렉토리의 netstat.exe 를 실행하면 된다.
# 윈도우 netstat.exe -p (PID/Program) 옵션이 없어 사용할 수 없다.
/mnt/c/Windows/System32/netstat.exe -nato

# 다음과 같이 alias 를 설정해 놓으면 편하다.
echo "alias netstat='/mnt/c/Windows/System32/netstat.exe'" >> ~/.zshrc

tomcat 설치 및 실행

# mac 에서 설치
brew install tomcat

# ubuntu 에서 설치
sudo apt-get install tomcat8 tomcat8-docs tomcat8-examples tomcat8-admin

# bin path
/usr/share/tomcat8/bin/

# conf path
/var/lib/tomcat8/conf/

# log path
/var/log/tomcat8/

# mac 에서 path
brew ls tomcat
/usr/local/Cellar/tomcat/9.0.14/bin/catalina
/usr/local/Cellar/tomcat/9.0.14/homebrew.mxcl.tomcat.plist
/usr/local/Cellar/tomcat/9.0.14/libexec/bin/ (17 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/conf/ (10 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/lib/ (30 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/logs/ (5 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/temp/safeToDelete.tmp
/usr/local/Cellar/tomcat/9.0.14/libexec/webapps/ (571 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/work/ (2 files)
/usr/local/Cellar/tomcat/9.0.14/libexec/ (2 files)
/usr/local/Cellar/tomcat/9.0.14/RELEASE-NOTES
/usr/local/Cellar/tomcat/9.0.14/RUNNING.txt

# 포트 변경
sudo vi /var/lib/tomcat8/conf/server.xml
# mac 에선
sudo vi /usr/local/Cellar/tomcat/9.0.14/libexec/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443 />


# 설정 파일 아래 내용 추가
sudo vi /var/lib/tomcat8/conf/tomcat-users.xml
# mac 에선
sudo vi /usr/local/Cellar/tomcat/9.0.14/libexec/conf/tomcat-users.xml

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="ysoftman" password="1234" roles="manager-gui,admin-gui"/>
</tomcat-users>

# 버전 확인
sudo bash /usr/share/tomcat8/bin/version.sh

# mac 에서 버전 확인
/usr/local/bin/catalina version

# mac 에서 시작
/usr/local/bin/catalina start

# mac 에서 종료
/usr/local/bin/catalina stop

# 시작
systemctl start tomcat8

# 종료
systemctl stop tomcat8

# 재시작
systemctl restart tomcat8

# WSL(windwos subsystem for linux)환경에서는
# systemctl 을 사용하면 다음과 같이 에러가 발생한다.
# 부팅시 systemd 를 초기화 할 수 없기 때문인것 같다.
System has not been booted with systemd as init system (PID 1). Can't operate

# 이 경우 다음과 같이 service 로 실행하자.
sudo service tomcat8 start

# stop, restart 도 service 로 실행
sudo service tomcat8 stop
sudo service tomcat8 restart

# 로컬로 톰캣 동작을 확인
http://localhost:8080/ ->  manager webapp 에서 위 설정한것으로 로그인

WSL hyper 사용하기

# 윈도우 WSL(Windows Subsystem for Linux)로 Ubuntu 를 사용할 수 있다.
# wsl 사용을 위해 다음 기능이 켜져있어야 한다.(reboot 필요)
프로그램 및 기능(appwiz.cpl) -> windows 기능 켜기/끄기 -> Linux 용 Windows 하위 시스템 체크

# 그런데 mac 의 iterm2 과 같은 멋진 터미널 환경이 아니다.
# 폰트, 컬러, 스크롤, 글자깨짐 등 어느것 하나 맘에 들지 않는다.
# electron 기반의 hyper 를 설치해 보자.
https://hyper.is/

# hyper 실행 후 ctrl + , 로 설정파일(.hyper.js)을 열 수 있다.
# .hyper.js 파일은 홈디렉토리(리눅스:~, 윈도우: c:\Users\%USERNAME%) 에 위치한다.

# shell 의 값을 다음과 같이 bash 로 변경하여 다시 실행한다.
shell: "C:\\Windows\\System32\\bash.exe",

# 윈도우 앱스토에서 ubuntu(18버전)으로 업데이트하면
# c:\windows\system32\bash.exe, wsl.exe 가 버전업된다.
# ubuntu 16, 18등은 별도의 윈도우 앱 디렉토리에 설치된다.
# shell로 bash.exe 설정했으면 무조건 bash 가 실행되니,
# zsh 를 실행을 위해선 다음과 같이 wsl.exe 또는 ubuntu1804.exe 으로 변경한다.
shell: "C:\\Windows\\System32\\wsl.exe",

# 또는
shell: "C:\\Users\\Administrator\\AppData\\Local\\Microsoft\\WindowsApps\\ubuntu1804.exe",

# bash.exe 가 아닌 경우 쉘 인자는 빈값으로 둬야 한다.
shellArgs: [],

# 폰트 크기도 좀 키우면 좋다.
fontSize: 14

# 현재 사용중인 ubuntu 버전을 확인해 보자
cat /etc/os-release

# 만약 zsh 를 사용을 위해 chsh 명령을 사용할때 PAM 인증 실패한다면
chsh -s /usr/local/bin/zsh $USER
chsh: PAM: 인증 실패
# 다음 파일을 열어 pam_shells.so 를 주석처리하면 된다.
sudo vi /etc/pam.d/chsh
# auth       required   pam_shells.so

# ls 디렉토리 컬러 속성변경
# other write 권한이 있는 디렉토리는 백그라운드 처리로 읽기 어렵다.
# 다음처럼 ls 배경값을 40(black)으로 설정하자.(.bashrc, .zshrc 에 추가)
export LS_COLORS=$LS_COLORS:"ow=01;36;40"


# 플러그인 설치
npm install hyper-search

# .hyper.js 에 추가 후 재시작
plugins: ['hyper-atom-dark-transparent',
'hyper-search',
 ],

# hyper-search 사용
mac 에선 cmd + f
windows 에선 ctrl + shift + f

linux , windows 10 bash 터미널 beep 없애기

# linux , windows 10 의 linux bash 터미널을 열어 작업할때,
# backspace 로 글자를 더이상 지울 수 없는 경우 beep 가 발생한다.
# 습관적으로 backspace 를 연타하게 되는데 beep 가 아주 거슬린다.
# terminal beep
# /etc/inputrc 파일을 열어 bell-style none 으로 설정한다.
# 기본적으로 이부분이 주석처리되어 있어 주석해제해주면 된다.
# 파일 저장 후 bash 종료하고 다시 실행하면 beep 가 발생하지 않는다~
sudo vi /etc/inputrc
set bell-style none

# vim beep
# vim 도 똑같이 beep 가 발생하는데 .vimrc 에 visualbell 을 설정하자.
vi ~/.vimrc

# beep 사용하지 않고 t_vb 로 설정된 문자로 bell 을 표시하는데
# t_vb 로 설정된것이 없어 visual bell 도 사용하지 않게 된다.
set visualbell t_vb=

# 참고
https://linuxconfig.org/turn-off-beep-bell-on-linux-terminal

# 추가로 windows 의 wsl + termianl 앱사용시 less beep
# git diff, man ls 등 페이지 처음/끝에서 더 이동하려고 하면 (less 커맨드) beep 가 발생한다.
# echo $LESS 는 다음과 같이 설정되어 있는데
# LESS='-g -i -M -R -S -w -X -z-4'
# -R -Q 를 추가하면 된다.(bashrc 등에 넣어주자.)
export LESS="$LESS -R -Q"


vscode 커맨드라인에서 실행하기

# vscode 를 mac 터미널 커맨드라인에서 실행하기
# vscode 1.0 이전까지는 
# 쉘 리소스에 (.bashrc, .zshrc ...) 에 다음 코드를 추가해야 한다.
code () {
    VSCODE_CWD="$PWD" open -n -b "com.microsoft.VSCode" --args $*
}

# vscode 1.0 부터는
# 명령 팔렛트(command + shift + p) -> install -> "쉘 명령: PATH 에 'code' 명령 설치" 를 수행

# 참고로 vscode 1.0 이후 부터는 위 코드를 사용하고 있다면 중복된다고 경고가 나오니 삭제하자.

# wsl 을 사용하는 경우 경로 추가가 필요하다.
# export PATH=$PATH:"mnt/c/Program/Files/Microsoft/VS/Code/bin/"
# 최신 버전은 경로가 다음과 같이 바뀌었다.
username=$(wslvar userprofile | tr '\\' ' ' | awk '{print $NF}')
export PATH=$PATH:"/mnt/c/Users/${username}/AppData/Local/Programs/Microsoft VS Code/bin"

# 이제 쉘에서 다음과 같이 바로 vscode 로 파일을 열어 실행할 수 있다.
code file.txt