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

kerberos 패스워드 입력 문제

# mac + iterm2 + zsh(prezto) 환경에서
# 터미널을 오래동안 열어두고 사용하다 보면 어느순간 부터
# kerberos 패스워드 입력이 안되는 경우가 발생한다.
ysoftman@ysoftmanMac ~/workspace/❯ kinit ysoftman
ysoftman@ysoftman-company.com's password:
kinit: failed to read password
ysoftman@ysoftmanMac ~/workspace/❯ mypassword
zsh: command not found: mypassword

# stdin 입력을 테스트 해보면 이상은 없어 보인다.
ysoftman@ysoftmanMac ~/workspace/❯ read a
ysoftman input test
ysoftman@ysoftmanMac ~/workspace/❯ echo $a
ysoftman input test

# iterm 은 닫지 않고 bash 또는 zsh 쉘을 시작해도 같은 문제가 발생하고
# iterm 로 새 터미널을 시작하면 패스워드가 입력된다.
# mac 기본 kint
which kinit
/usr/bin/kinit

# 버전을 보면 오래 된것 같아
kinit --version
kinit (Heimdal 1.5.1apple1)
Copyright 1995-2011 Kungliga Tekniska Högskolan
Send bug-reports to heimdal-bugs@h5l.org

# 새 버전(1.18.2)을 설치 해봤다.
brew install krb5

# 새 버전의 kinit 을 사용하면 패스워드 입력이 잘 된다.
/usr/local/opt/krb5/bin/kinit

# 원래 맥에서 기본 제공하는 /usr/bin/ 의 curl,kinit 같은 프로그램은
# brew link --force 로도 /usr/local/bin/ 에 링크 생성을 못해
# PATH 환경변수에 /usr/local/opt/ 를 추가해야 한다
# export PATH=/usr/local/opt/krb5/bin:$PATH
# 하지만 다음과 같이 /usr/local/opt/krb5/bin/kinit 가 우선하는 상황에서
which -a kinit
/usr/local/opt/krb5/bin/kinit
/usr/bin/kinit

# /usr/local/opt/krb5/bin/kinit 를 사용하면 ssh 접속시 암호를 물어보는 등의 문제가 발생했다.
# 이런 문제로 /usr/local/opt/krb5/bin/kdestroy 하고 원래의 /usr/bin/kinit(klist,kdestroy) 를 사용해야 했다.

안드로이드폰 termux 사용

# 안드로이드폰으로 터미널 환경을 구성해 보자
# 준비
# 키보드(USB) 를 OTG 를 통해 폰에 연결한다.
# 안드폰에 termux 앱을 설치하자.
# termux는 aarch64(ARM 용으로 포팅한 64bit arch linux) 기반으로
# 패키지 관리자로 apt 또는 pkg(apt를 래핑)를 사용한다.
https://play.google.com/store/apps/details?id=com.termux&hl=en

# 참고로 키보드 사용시 단축키는 윈도우(리눅스)를 생각하면 된다.
alt + tab : 앱(전환)
alt + d : chrome 주소표시줄 포커싱
등등..

# termux 실행 후 필요한 패키지 설치
pkg update && pkg upgrade
pkg install -y zsh python2 python vim rust golang ripgrep curl git tig fzf tmux cmake ctags lua53 fortune cowsay figlet cmatrix golang ruby openssh libandroid-support man lsd dnsutils
pkg install -y vim-python
gem install lolcat

# 기본 zsh 로 변경
chsh -s zsh

# termux 스샷~


# /etc 에서 설정하는 파일들(krb5.conf, resolve.conf ... 등)은 ../usr/etc/ 에 위치한다.
# 만약 ../usr/etc/krb5.conf 설정 후 kinit 시 다음과 같은 에러가 발생한다면
kinit : Cannot contact any KDC for realm 'ysoftman.com' ...

# 각 서버의 디폴트 포트는 다음과 같고 포트까지 명시해보자
kdc = kauth.ysoftman.com:88
admin_server = kadmin.ysoftman.com:749
kpasswd_server = kadmin.ysoftman.com:464 # on UDP

# oh-my-zsh 를 사용하는 경우 powerline 폰트 하나
를 ~/.termux/font.ttf 파일로 생성해야 한다.
cp -v fonts/Hack/Hack-Regular.ttf ~/.termux/font.ttf

# known issue
- 아직 한국어를 지원하지 않고 오직 영어만 된다. 이슈를 줄이기 위해서라는데.. 흠. https://github.com/termux/termux-packages/issues/2796#issuecomment-424589888
- oh-my-zsh 는 동작하지만, prezto 는 zsh 시작시 모듈 로딩을 못하는 문제가 있다.
- vim plugin 중 youcomplteme 는 python 이 포함된 vim 을 사용해야 하는데
apt 로 설치되는 vim 은 python 으로 빌드된 것이 아니라 별도로 vim-python 도 설치해야 한다.

(eval):1: command not found 에러

# zsh 환경에서 명령 옵션에 파일을 자동완성하기 위해 tab을 누르면
# 다음과 같은 에러가 발생하는 경우가 있다.
ansible-playbook -i ./in...(eval):1: command not found: _ansible-playbook

# vim 파일 찾기 위해 tab을 누를때도
_arguments:448: _vim_files: function definition file not found

# 고질적인 문제로 해결벙법은 zcomdump 파일을 삭제하고 쉘 다시 시작하면 된다.
rm -fv ~/.zcompdump

zsh - prezto 1라인 문자 출력 문제

# zsh 기반의 prezto 쉘을 사용하는데
# 줄바꿈(\n)이 없는 한줄 문자열을 출력할때 보이지 않는 문제가 있다.
# 다음과 같이 \n 없이 실행하면 문자열이 출력되지 않는다.

# -n(newline 없이 출력)옵션을 사용하면 출력되지 않는다.
echo -n "ysoftman"

# c 테스트 코드(bash 에서는 ! 를 빼자)
# 명시적으로  flush 해도 출력되지 않는다.
echo -e "#include <stdio.h> \n int main() { printf(\"abcdefg\"); fflush(stdout); return 0;}" >! zz.c && gcc zz.c && ./a.out

# go 테스트 코드
echo -e "package main\n
import \"fmt\"\n
func main(){\n
        fmt.Print(\"AA\")\n
}" >! zz.go && go run zz.go


# 위 명령어 뒤에 && echo 하면 제대로 나온다.
# curl로 1줄짜리 응답을 받는 경우에도 똑같은 상황이다.
# oh-my-zsh, bash 환경에서는 문제가 없고, 다른 서버의 prezto 에서도 잘된다.

# 원인은 no_prompt_cr (prompt_cr 사용하지 않는다는 의미) 설정해 발생한다.
setopt no_prompt_cr

# prompt_cr 은 zsh 에서 사용하는 옵션으로 cr(carriage return) 을 출력한다.
http://zsh.sourceforge.net/Doc/Release/Options.html#index-NO_005fPROMPT_005fCR

# 다시 prompt_cr 을 사용하면 임시로 되긴 한다.
setopt prompt_cr

# 그런데 같은 이슈가 등록되어 있었고, 이미 해결된 상태다.
https://github.com/sorin-ionescu/prezto/issues/1473
https://github.com/sorin-ionescu/prezto/issues/1426

# 해결은 최신 zprezto 를 설치하면 된다는것.
# prezto 설치 스크립트로 다시 설치하자 상황종료~
https://github.com/ysoftman/myenv
zsh ./installprezto.zsh

ohmyzsh url escape bug

[이슈]
iterm2 를 사용하다 url 스트링을 copy & paste 하면 escape(\) 가 붙는 경우가 발생한다.
처음에는 iterm2 의 paste 설정에 escape 가 활성화되어 발생한줄 알았는데,
"escape shell characters with \" 기능을 비활성화되어 있었다.
iterm2 menu -> edit -> paste special -> advacned paste (opt + cmd + v)


원인은 ohmyzsh 사용에 있었다. (prezto 쉘 환경에서는 발생하지 않는다.)

[해결방법]
찾아 보니 해당 버그는 ohmyzsh 의 노운이슈로 zsh 5.2 + 맥 10.12 에서 발생한다.
https://github.com/robbyrussell/oh-my-zsh/issues/5499

다음 스택오버플로우에 스크립트를 수정하여 해결하는 방법이 명시되어 있다.
https://stackoverflow.com/questions/25614613/how-to-disable-zsh-substitution-autocomplete-with-url-and-backslashes

그냥 다음 버전에 고쳐지기를 기다려 봐야겠당~ㅋ

zsh prezto 사용하기

# zsh 에 oh-my-zsh 와 더블어 많이 사용하는 prezto 를 사용해보자.
# zsh 을 실행하고 prezto 를 다운받기
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

# 다음 스크립트를 복붙하여 실행
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

# .zshrc 에 설정
vi ~/.zshrc
source ~/.zprezto/init.zsh

# zstyle 수정
vi ~/.zpreztorc
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'prompt' \
'git' \
'syntax-highlighting' \
'history-substring-search' \

# iterm2 (night lion v2) +sh + prezto 사용화면


# 참고
https://github.com/sorin-ionescu/prezto
http://jeromedalbert.com/migrate-from-oh-my-zsh-to-prezto/
http://wikimatze.de/better-zsh-with-prezto

ASCII Art

# 텍스트 문구를 ASCII Art 로 생성하는 툴 들 설치
# ubuntu
sudo apt-get install figlet toilet fortune cowsay
# mac
brew install figlet toilet fortune cowsay

# fitlet 사용(toilet 사용방법도 비슷하다.)
# 예시) figlet -w 출력 폭 100으로 -f starwars 폰트로 'ysoftman' 출력
figlet -w 100 -f starwars ysoftman

# figlet 모든 폰트 적용해보기
showfigfonts ysoftman

# toilet 모든 폰트 출력해보기
for font in $(ls -1 /usr/local/Cellar/toilet/0.3/share/figlet | sed 's/.tlf//'); do echo $font; toilet -f $font "ysoftman"; done

# ASCII Arts 에는 "'\ 등의 문자가 포함되어 있어 다음과 같이 echo 로 출력하기 힘들다.
# echo '
#                   __ _
#  _   _ ___  ___  / _| |_ _ __ ___   __ _ _ __
# | | | / __|/ _ \| |_| __| '_ ` _ \ / _` | '_ \
# | |_| \__ \ (_) |  _| |_| | | | | | (_| | | | |
#  \__, |___/\___/|_|  \__|_| |_| |_|\__,_|_| |_|
#  |___/
# '
# 다음과 같은 방법을 사용하자.
# zzz 가 입력되기까지의 모든 문자를 연결해서 stdout 으로 보낸다.
cat << "zzz"
                  __ _
 _   _ ___  ___  / _| |_ _ __ ___   __ _ _ __
| | | / __|/ _ \| |_| __| '_ ` _ \ / _` | '_ \
| |_| \__ \ (_) |  _| |_| | | | | | (_| | | | |
 \__, |___/\___/|_|  \__|_| |_| |_|\__,_|_| |_|
 |___/
zzz

#####

# rust 로 만든 cfonts 도 있다.
# 설치
brew install cfonts

# 입체적인 폰트와, gradient color, background color 등으로 더 화려한 console 폰트를 만들 수 있다.

#####

# fortune 은 실행시 마다 랜덤하게 명언들을 출력해준다.
# cowsay 귀여운 소(당나귀 같은데..ㅋ)가 말을 해준다.
fortune | cowsay
 ____________________________________
/ Happiness is good health and a bad \
| memory.                            |
|                                    |
\ -- Ingrid Bergman                  /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

# -f 옵션으로 다양한 그림을 선택할 수 있다.(-l 그림 리스트로 확인)
cowsay -f cheese "ysoftman"
 __________
< ysoftman >
 ----------
   \
    \
      _____   _________
     /     \_/         |
    |                 ||
    |                 ||
   |    ###\  /###   | |
   |     0  \/  0    | |
  /|                 | |
 / |        <        |\ \
| /|                 | | |
| |     \_______/   |  | |
| |                 | / /
/||                 /|||
   ----------------|
        | |    | |
        ***    ***
       /___\  /___\

# cowsay 모든 종류 그림 샘플 보기
for i in $(cowsay -l); do cowsay -f $i "$i"; done

# fortune 을 설치하면 oh-my-zsh, prezto 에 login 할때
# fortune 기능이 활성화 되어 fortune 메시지가 나온다.
# .zlogin 파일에서 fortune 을 명령을 확인할 수 있다.
vi .zlogin

# cowsay 를 설치하면 ansible 실행시 매번 cowsay 메시지가 출력된다.
# 이를 막으려면 ANSIBLE_NOCOWS 환경변수를 설정해야 한다.
export ANSIBLE_NOCOWS=1