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

replace intel app to apple app

mac intel -> M1(apple silicon)으로 마이그레이션 후
intel kind의 프로세서들은 rosetta2 에뮬레이터가 변환해서 apple silicon 에서도 동작한다.
하지만 변환과정으로 비효율적이다.
activity Monitor.app > kind 로 intel 프로세스를 확인할 수 있다.

아직 apple silicon(arm64) 바이너리가 많이 없지만 있다면 대체해보자.

# file 명령으로 바이너리가 어떤 환경에서 실행 되는지 알 수 있다.
file /bin/sh

# bin/zsh 는 arm64, x86_64 둘다 지원하는 universal binary 다.
file /bin/zsh

# intel 용으로 zsh 를 실행하기
arch -x86_64 /bin/zsh

# arm64 용으로 zsh 를 실행하기
arch -arm64 /bin/zsh

# 그런데 /usr/local/bin/zsh 는 x86_64 바이너리다.
file /usr/local/bin/zsh

# 아래 사이트에서 brew 설치 스크립트를 실행하면
# apple silicon 용(/opt/Homebrew/bin 에 설치) homebrew 로 설치 된다.
# 설후 설정을 보면 HOMEBREW_PREFIX: /opt/Homebrew 로 되어 있다.
brew config

# apple silicon 용 brew 등의 바이너리를 우선 실행할 수 있도록 한다.
export PATH=/opt/Homebrew/bin:$PATH

# 이제 쉘을 재시작하고 zsh 설치해 보자.
# bash 도 arm64 으로 설치하자.
brew install zsh bash

# 새로 설치된 zsh 는 arm64 버전이다.
which zsh
/opt/Homebrew/bin/zsh
file /opt/Homebrew/bin/zsh
/opt/Homebrew/bin/zsh: Mach-O 64-bit executable arm64

# 이제 brew 로 arm64 버전의 프로그램을 설치 할 수 있다.
brew install vim fzf git lsd wegt dog 등등

# 참고로 x86_64 용(/usr/local/bin 에 설치) brew 를 사용하려면
# x86_64 용(/usr/local/bin 에 설치) homebrew 설치하고
arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/
install/HEAD/install.sh)"

# 다음과 같이 사용한다.
arch --x86_64 /usr/local/Homebrew/bin/brew install {패키지이름}

#####

arm64 zellij (/opt/Homebrew/bin/zellij) 0.39.1 을 사용하면 status-bar 등의 코드에서 에러가 발생한다.
SSE2 명령셋등 intel cpu 종속적인 코드가 있어 보인다.

# 당분간은 x86_64 zellij 사용하기 위해 arm64 로 설치된 zellij 는 제거한다.
brew uninstall zellij

# 몇주 후 0.39.2 버전이 나왔고 설치하니 해결되었다.
arch -arm64 brew install zellij

# 버전확인
/opt/homebrew/bin/zellij --version
zellij 0.39.2

# arm64 바이너리 확인
file /opt/homebrew/bin/zellij
/opt/homebrew/bin/zellij: Mach-O 64-bit executable arm64

#####

# 마이그레이션 후 파이썬 설치시
brew install python

# 또는 uname -m 이 x86_64 라면
arch -arm64 brew install python

# 다음과 같은 에러가 발생했다.
Error: An exception occurred within a child process:
  FormulaUnavailableError: No available formula with the name "/opt/Homebrew/Library/Taps/homebrew/homebrew-core/Aliases/python".

# 확인해보니 다음 경로 자체가 없었다.
/opt/Homebrew/Library/Taps/homebrew/homebrew-core

# homebrew/core 를 다시 구성후 설치하면 된다.
# 구성에 시간이 좀 걸린다.
brew tap homebrew/core

# 만약 /opt/Homebrew/Library/Taps/homebrew/homebrew-core 경로가 있는 상태에서도 안되면 삭제후 시도해보자.
rm -rf /opt/Homebrew/Library/Taps/homebrew/homebrew-core

#####

# 마이그레이션 후 
# pyenv 로 python 설치하면 다음과 같은 이유로 실패 한다.
pyenv install -v 3.12
ld: warning: duplicate -rpath '/Users/ysoftman/.pyenv/versions/3.12.0/lib' ignored
ld: warning: duplicate -rpath '/opt/homebrew/lib' ignored
ld: warning: search path '/Users/ysoftman/.pyenv/versions/3.12.0/lib' not found
ld: warning: search path '/Users/ysoftman/.pyenv/versions/3.12.0/lib' not found
ld: Undefined symbols:
ld: Undefined symbols:
  _libintl_bindtextdomain, referenced from:
      __locale_bindtextdomain in _localemodule.o
      __locale_bindtextdomain in _localemodule.o
  _libintl_dcgettext, referenced from:
      __locale_dcgettext in _localemodule.o
  _libintl_dgettext, referenced from:
      __locale_dgettext in _localemodule.o
  _libintl_gettext, referenced from:
      __locale_gettext in _localemodule.o
  _libintl_setlocale, referenced from:
      __locale_setlocale in _localemodule.o
      __locale_setlocale in _localemodule.o
      __locale_localeconv in _localemodule.o
      __locale_localeconv in _localemodule.o
      __locale_localeconv in _localemodule.o
      __locale_localeconv in _localemodule.o
  _libintl_textdomain, referenced from:
      __locale_textdomain in _localemodule.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Programs/_freeze_module] Error 1
make: *** Waiting for unfinished jobs....

# libintl.a 라이브러리에 있는 심볼들이 보인다.
# /opt/homebrew/lib/libintl.a 를 참조하지 않는게 문제 같다.
nm /opt/homebrew/lib/libintl.a | rg  "_libintl_(bindtextdomain|dcgettext|dgettext|gettext|setlocale)$"

# 구글링으로 여러 방법들을 시도...
# gettext library 를 찾지 못한다고 해서 다시 설치했지만 안된다.
brew reinstall gettext

# arm64 library 을 찾도록 LDFLAG 를 설정해도 안된다.
export LDFLAGS="-L/opt/homebrew/lib"
export CPPFLAGS="-I/opt/homebrew/include"

# 기존 x86_64 라이브러를 우선 참조하게 되는것 같아 해당 path 를 강제 삭제해도 안된다.
rm -rf /usr/local/Cellar/{gettext,readline}

# arm64 용으로 make gcc 등 컴파일러 최신으로 설치해도 안된다.
arch -arm64 brew install cmake make gcc

# 이번에는 실제 파이썬 소스를 다운받아 다음과 같이 빌드하면 잘된다.
# 아래처럼 configure 로 Makefile 이 생성하면 CC=gcc CXX=g++ 로 설정되어 있다.
git clone https://github.com/python/cpython
cd cpython; ./configure && make -j10

# pyenv 빌드시 clang (Apple clang version 15.0.0) 대신 
# 컴파일러를 gcc(없다면 설치 brew install gcc)로 변경하니 된다.
CC=/opt/homebrew/bin/gcc-13 pyenv install -v 3.12

# 몇달 후 zellij, /opt/homebrew 패키지들을 arm64 로 다시 설치등의 변화가 있었는데,
# 별도 CC 설정없이 clang (Apple clang version 15.0.0) 로도 됐다.
pyenv install -v 3.12

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 필드값을 수정

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 경쟁? 툴