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

vector certificate verify failed

# k8s 내부 인증서(apiserver,apiserver-etc-client...)를 업데이트 했다.

# vector daemonset 재시작했는데 vector pod error log 가 다음과 같이 발생한다.
# 에러 로그가 많아서 dump 로도 확인이 된다. 
kubectl cluster-info dump | rg -i error

2024-05-17T02:38:08.766363Z  WARN vector::kubernetes::reflector: Watcher Stream received an error. Retrying. error=InitialListFailed(HyperError(hyper::Error(Connect, ConnectError { error: Error { code: ErrorCode(1), cause: Some(Ssl(ErrorStack([Error { code: 167772294, library: "SSL routines", function: "(unknown function)", reason: "certificate verify failed", file: "ssl/statem/statem_clnt.c", line: 2092 }]))) }, verify_result: X509VerifyResult { code: 26, error: "unsuitable certificate purpose" } })))
2024-05-17T02:38:35.158930Z ERROR kube_client::client::builder: failed with error error trying to connect: error:0A000086:SSL routines:(unknown function):certificate verify failed:ssl/statem/statem_clnt.c:2092:: unsuitable certificate purpose

# vector 는 kubernetes_logs 를 소스로 하고 있고
# k8s 접근하기 위해서 인증과정을 거치게 되는것 같다.
# kube_config_file 로 kube config 파일을 명시하는 옵션이 있는데 사용하지 않아
# 디폴트로 in-cluster configuration 로 설정된다.

# vector 에서 사용하는 kube client rust 소스(go 소스도 같다.)에 다음과 같은 경로의 인증서를 참고 하는것 같다.
// Mounted credential files
const SERVICE_TOKENFILE: &str = "/var/run/secrets/kubernetes.io/serviceaccount/token";
const SERVICE_CERTFILE: &str = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt";

# vector pod 에도 다음과 같이 mount 설정이 있다.
spec:
  containers:
    volumeMounts:
    - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      name: kube-api-access-l82p5
      readOnly: true
  volumes:
  - name: kube-api-access-l82p5
    projected:
      defaultMode: 420
      sources:
      - serviceAccountToken:
          expirationSeconds: 3607
          path: token
      - configMap:
          items:
          - key: ca.crt
            path: ca.crt
          name: kube-root-ca.crt
      - downwardAPI:
          items:
          - fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
            path: namespace

# kube-root-ca.crt 는 모든 namespace 의 configmap 에 등록되어 있다.

#####

# pod(앱)가 k8s api 로 인증할때 service account(sa) 를 사용하는데
# 모든 pod 가 디폴트로 사용하는 sa default 외 별도로 vector sa 가 있다.
kubectl get sa
NAME      SECRETS   AGE
default   0         16h
vector    0         16h

# vector pod 에 보면 ServiceAccountName: vector 를 사용하고 있다.
# 그런데 secrects 0 이라 확인해봐면 not found 가 발생한다.
kubectl describe secret
Error from server (NotFound): secrets "vector" not found

# sa 를 새로 만들어 봐도 nout found 가 발생한다.
kubectl create serviceaccount ysoftman
kubectl describe secret ysoftman
Error from server (NotFound): secrets "ysoftman" not found


code editors

유료 IDE/editor 가 사용하기도 편하고 기능도 많지만 터미널 환경 + 무료 소프트웨어도 왠만한건 다되고 유료 못지 않게 편해서 이를 더 선호하는 편이다.
유료 에디터는 10년전 윈도우 환경 개발을 위해서 visual studio 사용이 마지막인것 같다.
요즘 많이 쓰는 jetbrains 제품은 사용하지 않는다.

예전에는 vscode 를 한참 썼는데 typescript/javascript 로 만들어서 그런지 뭔가 점점 무거워지고 느린 느낌이 들어 다시 vim 을 주로 사용하게 됐다.
neovim(nvim) 이 좀더 모던한 느낌이긴 한데 기존 vim 커스터마이징한 설정에 익숙해서 쉽게 nvim 으로 넘어가지 못하고 있다.
그러면서 가끔 vscode, neovim-lzayvim 의 command palette(커맨드를 검색해서 실행하는) 기능이 그리워 질때가 있다.

vscode 느낌이면서 가볍고 빠른 rust 로 다음 에디터들을 서브로 사용해 보려 한다.
참고로 요건 vim 에 영감을 받은 터미널 환경의 에디터들, amp는 요즘 관리가 안되고 있어 왠지 사라질것 같다.

zed, lapce 둘다 깃헙 좋아요가 30K 가 넘고, vscode 처럼 커맨드 팔렛트, 익스텐션(아직 개수는 많지 않음)을 사용할 수 있어 좋다.

아톰 만든 사람이 rust 로 만들었다는 zed
cmd+shift+p -> toggle vim mode

lapse 는 디폴트 단축키들이 vscode 많이 비슷해서 최종 낙점!ㅎ
[lapse default short cut]
cmd+shift+p -> enable modal editing (like vim)
cmd+shift+e toggle file explorer
cmd+shift+x toggle plugin focus
cmd+shift+f toggle search focus
cmd+= zoom in
cmd+- zoom out
cmd+] indent line  
cmd+[ outdent line
cmd+p goto file(fuzzy file finder)
alt+up move line up
alt+down move line down
ctrl+- jump location backward
ctrl+shift+- jump location forward
ctlr+` toggle terminal
alt+shift+i insert cursor end of line(multi cursor)
f2 rename
f12 goto definition

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

zellij multiplexer

# terminal multiplexer 로 tmux 만 사용하다 rust 로 만든 zellij 로 변경했는데, 역시 기대 이상으로 대만족!
# 더이상 tmux 가 생각나지 않을 정도로 좋다.

# 설치
# mac
brew install zellij
# cargo
cargo install zellij

# 자주 사용하는 단축키
# 기본적으로 아래 화면에 친절하게 단축키 설명이 있어 쉽게 사용할 수 있다.
# ctrl+b : 기본적인 tmux split(ctrl+", ctlr+%)등을 사용할 수 있다.
# ctrl+g : zellij 단축키 입력 비활성화(토글), 예를 들어 ctlr-t 로 fzf 단축키를 사용하고 싶은데 zellij 의 ctrl-t(tab 선택) 명령이 우선 작동하는데, ctrl-g 를 zellij 단축키를 비활성화한후 ctrl-t 를 하면 fzf ctrl-t 커맨드를 실행할 수 있다.
# ctrl-p : pane 선택
# ctrl-p, n : 새 pane 생성 
# ctrl-p, w : floating pane 생성, floating/일반 pane 사이 전환(토글)
# ctrl-p, x : 현재 pane 종료
# ctrl-p, z : pane frame 보이기/감추기(토글)
# ctrl-t, n : 새 tab 생성
# ctrl-t, x : 현재 tab 종료(tab 에 속한 모든 pane 종ㄹ)
# ctrl-t, ctrl-s : tab 에 속한 모든 pane 에 sync 로 동시 입력 가능(토글)
# ctrl-h, 방향키 또는 hjkl(vim방향키) : pane 을 특정 방향으로 이동
# ctrl-n, 방향키 또는 hjkl(vim방향키) : pane 크기를 특정 방향으로 줄이거나 늘이기
# ctrl-n, - : pane 크기를 전체적으로 줄이기
# ctrl-n, + : pane 크기를 전체적으로 늘이기
# alt-p : 적절한 위치와 크기로 pane 생성
# alt-h : 왼쪽 pane 으로 이동(선택), 다른 tab 의 pane 까지 이동 가능
# alt-l : 오른쪽 pane 으로 이동(선택), 다른 tab 의 pane 까지 이동 가능
# alt-k : 위 pane 으로 이동(선택)
# alt-j : 아래 pane 으로 이동(선택)

# 설정 파일
# 기본 설정 파일을 생성해 ~/.config/zellij/config.yaml 로 위치시키면 된다.
# config.yaml 수정으로 단축키 설정을 변경할 수 있다.
mkdir -p ~/.config/zellij/
zellij setup --dump-config > ~/.config/zellij/config.yaml

# 테마 변경
mkdir -p ~/.config/zellij/themes
https://github.com/zellij-org/zellij/tree/main/example/themes 에서 테마 마들을 다운로드 받는다.
~/.config/zellij/config.yaml > theme 필드값을 수정

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

rust cli tools

# xNix 전통 command 를 대체하는 rust 로 만든 command tools
time(벤치마크) - hyperfine(https://github.com/sharkdp/hyperfine)

# 그 밖에 유용한 툴
터미널 에뮬레이터 alacritty(https://github.com/alacritty/alacritty)
정규표현식 생성기 grex(https://github.com/pemistahl/grex)
코드 통계 보기 tokei(https://github.com/XAMPPRocky/tokei)
git diff 툴 git-delta(https://github.com/dandavison/delta)

# golang 경쟁? 툴

chrome ERR_CONNECTION_RESET

rust 로 간단한 html 응답을 주는 웹 서버를 만들어 테스트하기 위해 chrome 에서 다음과 같이 입력하면 화면에 아무것도 나타나지 않는다.
chrome secret 모드에서도 안된다.
https://localhost:9090

같은 주소에 대해서 firefox 는 표시된다.
curl http://localhost:9090/ 요청도 html 응답을 받고 있다.
rust 서버에서 http request/response 출력해보면 응답도 잘 주고 있다.

chrome 79.0.3945.117 버전을 사용하는데,
chrome 개발툴 -> network 요청결과 status fail 이고,
chrome 개발툴 -> console 에는 다음과 같은 에러가 보인다.
GET http://localhost:9090/ net::ERR_CONNECTION_RESET 200 (OK)
맨 오른쪽 :9090/:1 링크를 클릭하면 그제야 html 화면이 보인다.

vscode rust language server 문제

# vscode 에서 RLS(rust language server) 플러그인을 사용한다.
https://marketplace.visualstudio.com/items?itemName=rust-lang.rust

# 그런데 상태 바에 RLS starting 계속 진행중이되면서
# formatting, completion 등이 동작하지 않는다.
# 원인은 cargo 로 생성한 여러 프로젝트들을 하나의 vsocde 에서 열게 되서 발생한것이다.
# 현재는 RLS 가 동작하려면 vscode 의 최상위(root)위치에 cargo.toml 이 있어야 한다.
# 해당 이슈는 현재 수정 중으로 좀더 있으면 개선 될것 같다.
https://github.com/rust-lang/rls-vscode/pull/601

# 참고로 단순히 하나의 프로젝트만 vscode 로 열면 잘 동작한다.
# 그리고 이때 RLS 설치가 되면 다시 멀티 프로젝트를 열었을때
# 빌드 등은 안되지만 formatting, completion 등은 작동한다.