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

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

brew warning

# brew 설치/삭제 시 다음과 같이 openjdk 에러 발생한다.
Warning: Calling the `appcast` stanza is deprecated! Use the `livecheck` stanza instead.
Please report this issue to the adoptopenjdk/openjdk tap (not Homebrew/brew or Homebrew/homebrew-core),
or even better, submit a PR to fix it:
  /usr/local/Homebrew/Library/Taps/adoptopenjdk/homebrew-openjdk/Casks/adoptopenjdk11.rb:9

# openjdk 저장소를 강제로 untap 후 openjdk 를 삭제해야 한다. 
brew untap --force adoptopenjdk/openjdk
brew uninstall adoptopenjdk11 adoptopenjdk12

# brew doctor 로 발견된 warning 해결하기
brew doctor

#####

Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences.

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 14.2.

# 해결방법
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install

#####

Warning: Some installed kegs have no formulae!
This means they were either deleted or installed manually.
You should find replacements for the following formulae:
  python@2
  ccze
  erlang@19
  spdylay
  boost-python

# 해결방법
brew uninstall --ignore-dependencies python@2 ccze erlang@19 spdylay boost-python

#####

Warning: You have the following deprecated, cask taps tapped:
  caskroom/versions
Untap them with `brew untap`.

# 해결방법
brew untap caskroom/versions

#####

Warning: Some installed formulae are deprecated or disabled.
You should find replacements for the following formulae:
  cronolog
  delta
  dosbox
  gcal
  glide
  ilmbase
  lua@5.1
  octant
  sdl_net
  sdl_sound
  sshfs
  xml2

# 해결방법
brew uninstall --ignore-dependencies cronolog delta dosbox gcal glide ilmbase lua@5.1 octant sdl_net sdl_sound sshfs xml2

#####

Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
  /usr/local/lib/libDSToolkitV30-v3.4.2.20.dylib
  /usr/local/lib/libevent-1.4.2.1.3.dylib
  /usr/local/lib/libevent_core-1.4.2.1.3.dylib
  /usr/local/lib/libevent_extra-1.4.2.1.3.dylib
  /usr/local/lib/libldap.dylib

# 해결방법
rm -rf  /usr/local/lib/libDSToolkitV30-v3.4.2.20.dylib
rm -rf  /usr/local/lib/libevent-1.4.2.1.3.dylib
rm -rf  /usr/local/lib/libevent_core-1.4.2.1.3.dylib
rm -rf  /usr/local/lib/libevent_extra-1.4.2.1.3.dylib
rm -rf  /usr/local/lib/libldap.dylib

#####

Warning: Unbrewed header files were found in /usr/local/include.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected header files:
  /usr/local/include/evdns.h
  /usr/local/include/event-config.h
  /usr/local/include/event.h
  /usr/local/include/evhttp.h
  /usr/local/include/evrpc.h
  /usr/local/include/evutil.h
  /usr/local/include/memcached/protocol_binary.h
  /usr/local/include/python3.7m/greenlet/greenlet.h

# 해결방법
rm -rf /usr/local/include/evdns.h
rm -rf /usr/local/include/event-config.h
rm -rf /usr/local/include/event.h
rm -rf /usr/local/include/evhttp.h
rm -rf /usr/local/include/evrpc.h
rm -rf /usr/local/include/evutil.h
rm -rf /usr/local/include/memcached/protocol_binary.h
rm -rf /usr/local/include/python3.7m/greenlet/greenlet.h

#####

Warning: Unbrewed '.la' files were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected '.la' files:
  /usr/local/lib/libevent.la
  /usr/local/lib/libevent_core.la
  /usr/local/lib/libevent_extra.la

# 해결방법
rm -rf  /usr/local/lib/libevent.la
rm -rf  /usr/local/lib/libevent_core.la
rm -rf  /usr/local/lib/libevent_extra.la

#####

Warning: Unbrewed static libraries were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected static libraries:
  /usr/local/lib/libevent.a
  /usr/local/lib/libevent_core.a
  /usr/local/lib/libevent_extra.a

# 해결방법
rm -rf  /usr/local/lib/libevent.la
rm -rf  /usr/local/lib/libevent_core.la
rm -rf  /usr/local/lib/libevent_extra.la

#####

Warning: You have unlinked kegs in your Cellar.
Leaving kegs unlinked can lead to build-trouble and cause formulae that depend on
those kegs to fail to run properly once built. Run `brew link` on these:
  python-certifi
  midnight-commander
  docker-credential-helper-ecr
  docker
  thefuck
  pygments
  docutils
  redis
  python-tabulate
  numpy
  macvim
  tcl-tk
  pyyaml
  python-typing-extensions
  libevent
  six
  black
  wireshark

# 해결방법
brew link --overwrite python-certifi midnight-commander docker-credential-helper-ecr docker thefuck pygments docutils redis python-tabulate numpy macvim tcl-tk pyyaml python-typing-extensions libevent six black wireshark

pipenv install pycrypto gmp file not found

# pipenv install 로 설치중 pycrypto 에서 다음과 같은 에러가 발생했다.
[pipenv.exceptions.InstallError]:       clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -fwrapv -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.sdk -std=c99 -O3 -fomit-frame-pointer -Isrc/ -I/usr/include/ -I/Users/ysoftman/.local/share/virtualenvs/ysoftman-kMySlf5j/include -I/usr/local/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c src/_fastmath.c -o build/temp.macosx-12-x86_64-3.9/src/_fastmath.o
[pipenv.exceptions.InstallError]:       src/_fastmath.c:36:11: fatal error: 'gmp.h' file not found
[pipenv.exceptions.InstallError]:       # include <gmp.h>
[pipenv.exceptions.InstallError]:                 ^~~~~~~
[pipenv.exceptions.InstallError]:       1 error generated.
[pipenv.exceptions.InstallError]:       error: command '/usr/bin/clang' failed with exit code 1
[pipenv.exceptions.InstallError]:       [end of output]

# brew reinstall gmp 를 다시 설치해 봤지만 해결되지 않았다.
# pip install --no-cache pycrypto 도 에러가 발생한다.

# 다음 환경 변수를 주면 설치된다.
# pip 로 설치시
env "CFLAGS=-I/usr/local/include -L/usr/local/lib" pip install --no-cache pycrypto

# pipevn 로 설치시
env "CFLAGS=-I/usr/local/include -L/usr/local/lib" pip install pycrypto

# 환경변수로 한번만 등록해도 된다.
export "CFLAGS=-I/usr/local/include -L/usr/local/lib" 
pip install pycrypto

mac os 업데이트

# macOS 를 Monterey(12.1) 로 업데이트 했다.

# brew 설치 커맨드 실행하면 xcode 가 오래됐으니 신규버전을 설치하라고 한다.
Error: Your Xcode (12.3) is too outdated.
Please update to Xcode 13.1 (or delete it).
Xcode can be updated from the App Store.

# 하지만 app sotre 에서 xcode 를 update 하면 1시간이 넘도록 진행하다 실패한다.
# xcode 는 아래 apple 홈페이지에서 다운 받아 설치하는 것이 더 빠르다.
# xcode_13.2.1.xip 파일을 다운 후 실행하면 xcode.app 가 풀리고 Applications 로 이동(설치)하면 된다.

# 그리고 CommLineTools 도 삭제하고 다시 설치해야 한다.
# 위 URL 에서 Command Line Tools for Xcode 13.2 다운받아 설치하거나
# xcode-select 로 설치한다.
sudo rm -rf /Library/Developer/CommandLineTools
xcode-select --install
# 버전 확인
pkgutil --pkg-info com.apple.pkg.CLTools_Executables

brew unkown command cask

맥 GUI 앱을 설치 할때 사용하는 cask 옵션이 언제부터인가 동작하지 않는다.
brew cask install docker
Error: Unknown command: cask

brew 2.6.0 부터 cask 가 deprecated 되었고, 이제는 --cask 로만 사용할 수 있다.

다음과 같이 사용하자.
brew install --cask docker

mac useful apps

# stats - cpu, gpu, ram, disk, network 모니터링
# 설치
brew install stats

# menubar 에 다음과 리소스 상태가 보인다.

#####

# runcat - 리소스 사용률에 따라 고양이가 빨리 달린다.
# 설치 - 앱스토어
# menuabar에 고양이가 달리고 있다.

# runners 메뉴에서 고양이 대신 다른것을 선택할 수 있다.

#####

# monitoring mac cpu throttling 
# 설치
brew install --cask hot

# hot.app 실행
# CPU speed limit 또는 Thermal Pressure 가 Nominal 이면 정상

# 참고로 다음 명령어로도 throttling 을 파악할 수 있다.
# appli silicon
# 다음 명령을 실행했을때 정상적이라면 다음과 같이 Nominal 로 표시된다.
# -s (--samplers)
sudo powermetrics -s thermal

# intel
# 다음 명령을 실행했을때 CPU_Speed_Limit 가 100 아래로 떨어지면 throttling 된것이다.
pmset -g thermlog

#####

# rectangle - 앱 위치 정렬
# https://github.com/rxhanson/Rectangle
# 설치
brew install --cask rectangle

# 아래 스샷의 단축키로 창을 정렬하는데 아주 유용하다.

mac JDK 설치

# JDK 의 오픈소스는 크게 openjdk 와 adoptopenjdk 가 있다.
# openjdk (TCK(Technology Compatibility Kit) 인증됨)설치
https://formulae.brew.sh/formula/openjdk
# 가장 최신 버전이 설치된다.
brew install openjdk

# 현재 openjdk 는 최신버전(13)외 11만 설치할 수 있다.
brew install openjdk@11

# 다음 위치에 java, javac 등이 있다.
/usr/local/opt/openjdk/bin

# 참고로 /usr/local/opt/openjdk 는 실제 아래로 경로에 소프트 링킹되어 있다.
/usr/local/Cellar/openjdk
/usr/local/Cellar/openjdk@11


#####


# adoptopenjdk(openjdk 호환, TCK(Technology Compatibility Kit) 인증이 안됨) 설치
https://github.com/AdoptOpenJDK/homebrew-openjdk
# brew cast 로 openjdk 최신 버전 설치
brew cask install adoptopenjdk

# 특정 버전을 설치하는 경우
brew cask install adoptopenjdk12
brew cask install adoptopenjdk11
brew cask install adoptopenjdk/openjdk/adoptopenjdk8

# 설치 위치
# jdk 버전을 변경하고 싶을때는 export JAVA_HOME= 으로 아래 경로를 설정하면 된다.
/Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home/
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/

mac apr tomcat native 라이브러리 문제

# mac 에서 tomcat conf/logging.properties 에서 로그레벨을 DEBUG 으로 하고
# tomcat 을 실행하면
./apache-tomcat-9.0.31/bin/catalina.sh run

# 다음과 같이 apr tomcat native 라이브러리를 찾을 수 없다는 에러가 발생한다.
org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 프로덕션 환경들에서 최적의 성능을 제공하는, APR 기반 Apache Tomcat Native 라이브러리가, 다음 java.library.path에서 발견되지 않습니다: [/Users/ysoftman/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]

# tomcat-native 설치 후
brew install tomcat-native

# 링크를 걸어주면 된다.
sudo ln -s /usr/local/opt/tomcat-native/lib/libtcnative-1.* /Library/Java/Extensions

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 에서 위 설정한것으로 로그인

brew python downgrade 와 vim 문제

# 2018-10월 현재 최신 python3.7 로 tensorflow 을 실행 할 수 없음
# mac에서 python 3.6.5 버전으로 다운그레이드하기로 함

# 현재 python 3.7 링크 제거
brew unlink python

# python 3.6.5 버전 설치
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/f2a764ef944b1080be64bd88dca9a1d80130c558/Formula/python.rb

# brew 로 설치한 vim 8.1 이 python 3.7 을 사용하고 있어
# vim 은 다음과 메시지를 발생하며 실행되지 않는다.
dyld: Library not loaded: /usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/Python
  Referenced from: /usr/local/bin/vim
  Reason: image not found
[1]    43109 abort      vim


# vim 제거(제거 후 /usr/bin/vim 을 사용해도 된다.)
brew remove vim

# vim python2 로 재설치
# 디렉토리가 비워있지 않아 설치 에러가 발생하면 /usr/local/Cellar/vim 에서 삭제
brew install vim --with-python@2

# 링크가 깨져 있으면
brew unlink vim && brew link vim

python 실행 에러

# case1
# 설치는 했지만 pip(python2) 를 찾을 수 없는 경우가 있다.
# python2 를 재설치
brew reinstall python@2

# 안되면 강제 삭제 후 재설치

brew uninstall --ignore-dependencies python@2
brew install python@2

# 참고로 centos 에서
sudo alternatives --set python /usr/bin/python2
# 또는
sudo alternatives --set python /usr/bin/python3
# 로 기본 파이썬 실행 /usr/bin/python 을 설정할 수 있다.

# case2
# pip install requests 모듈을 설치했는데도 
# 파이썬 실행시 다음과 같이 모듈이 없다는 에러가 발생한다.
ImportError: No module named requests

# 해당 모듈은 이미 설치가 된 상태이다.(맥 기준)
pip install requests 
Requirement already satisfied: requests in /Library/Python/2.7/site-packages

# 현재 파이썬에서 사용되는 라이브러리 경로를 확인해보면
# /Library/Python/2.7/site-packages 가 포함되어 있지 않다.
python
>>> import sys
>>> print sys.path

# 파이썬 모듈은 sys.path 에 설정된 경로에서 찾는다.
# PYTHONPATH 환경변수로 다음과 같이 추가하면 sys.path 에 추가된다.
# mac 의 경우
export PYTHONPATH=/Library/Python/2.7/site-packages

# linux 의 경우
export PYTHONPATH=/usr/local/lib/python2.7/site-packages

# sys.path 를 다시 확인해보면 경로가 추가되었고,이제 모듈 에러가 발생하지 않는다.
# 하지만 3.x 버전에선 다시 실행되지 않는 문제가 있다.
# python2, 3 을 모두 사용하려면 pyenv(별도 포스트 참고)로 파이썬을 버전별로 사용하자.
# pip 로 설치시 sudo 를 주면 root 권한으로 설치된다.
# 나중에 설치 삭제때 문제가될수 있어 권한을 사용자로 변경한다.
cd /usr/local/lib/python2.7/site-packages
sudo chown -R ysoftman:admin *

# case3
# python setup.py egg_info 에러 발생하는 경우
# pip 와 setuptools 를 최신으로 업그레이드 하자
sudo pip install --upgrade pip setuptools

# case4
# docker package 를 찾지 못하는 에러가 발생하는 경우
python -c "import docker"
ImportError: No module named docker

# 패키지는 설치된것으로 나온다.
pip list | grep docker

# 이럴땐 pip 로 해당 패키지를 unistall 해주고
sudo pip uninstall -y docker docker-py

# pip 로 docker 패키지를 다시 설치하자.
# 참고로 최신 docker 패키지에 docker-py 기능이 포함되어 있어
# docker-py 를 설치하면 다음의 에러가 발생하여 docker 만 새로 설치해야 한다.
# module' object has no attribute 'APIClient'
sudo pip install --force-reinstall --no-cache-dir docker

python 유닛테스트 컬러 출력하기, Operation not permitted 에러 해결하기

# green 이라는 패키지는 테스트시 콘솔로 출력되는 결과를 컬러풀하게 보여준다.
# https://github.com/CleanCut/green
# 설치하기
sudo pip install green

# 설치 중 다음과 같은 에러가 발생하면
OSError: [Errno 1] Operation not permitted: '/tmp/pip-rmbpTj-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

# python 재설치(또는 설치)해 보자.
brew reinstall python

# python 실행시 다음과 같이 green 으로 수행하면 된다.
# -v 옵션에 v 가 많을 수록 좀더 자세한 결과가 보여진다.
green -vv python ysoftman.py

pip 설치하기

# PIP(Python Package Index) 는 리눅스의 apt-get 이나 yum 과 같이 방대한 파이썬 라이브러를 쉽게 설치하고 사용하게 해준다.

# 데비안 계열에서 pip 설치
sudo apt-get install python-pip python3-pip

# 레드햇 계열에서 pip 설치
# 우선 EPEL(Extra Packages for Enterprise Linux, Fedora 에서 제공되는 최신 패키지 저장소) 를 추가해야 한다.  
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install python-pip

# mac pip 설치
# python 설치하면 pip 도 설치
brew install python@2 python

# linux pip 설치
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py
# 또는
# pip3가 생성되지 않으면 복사하고 첫줄을 변경해서 써도 된다.
cp /usr/local/bin/pip /usr/local/bin/pip3
vi /usr/loca/bin/pip3

#!/usr/local/opt/python3/bin/python3
# pip 는 다음처럼 pip 디렉토리로 설치된다.
/usr/local/lib/python2.7/site-packages/pip
/usr/local/lib/python3.6/site-packages/pip

# 수동으로 실행하기
python /usr/local/lib/python2.7/site-packages/pip -V

# 윈도우에서 pip 설치
(파이썬 2.7.9 이후나 파이썬 3에는 pip 가 포함되어 있어 업데이트한다.)
python.exe -m pip install -U pip

# 윈도우에서 파이썬 2.7.9 이전 버전이라면 다음 파이썬 파이을 다운 받아 실행한다.
https://bootstrap.pypa.io/get-pip.py
python.exe get-pip.py

# 윈도우에서 파이썬 pip 위치는 다음과 같다.
환경설정 path 추가하도록 하자.(리눅스의 경우 /usr/bin/pip 에 설치됨)
C:\Python34\Scripts\pip.EXE


##########


# pip 기본 명령
# pip 업그레이드
pip install -U pip

# 설치된 패키지 리스트
pip list

# 설치된 패키지 정보 보기
pip show 패키지명

# 패키지 설치
pip install 패키지명

# 특정 버전의 패키지 설치
pip install 패키지명==1.2.3

# 사내에서 proxy 서버를 사용해야 하는 경우
pip install --proxy=https://프로시서버ip:1234 패키지명

# 사내에서 proxy 서버를 사용해야 버전업그레이드 하는 경우
python3 -m pip install --proxy=http://프로시서버ip:123 --upgrade pip 

# 패키지 삭제
pip uninstall 패키지명

# 현재 디렉토리 모듈 editable 로 설치
# -e 옵셥으로 설치한 모듈 정보를 보면(pip show ysoftman123)
# location 값이 /usr/local/lib/python3.x 아닌 현재 로컬 디렉토리로 되어있다.
pip install -e .
# 이제 현재 디렉토리의 .py 를 변경한 상태로 모듈을 실행해볼 수 있다.
python -m ysoftman123

스크립트로 매트릭스(Matrix) 화면 만들기

콘솔 창에서 매트릭스 화면을 위해 스크립트를 작성해 보자.

[윈도우 .bat]
@rem ysoftman
@rem cmd 창에서 매트릭스효과 내기

@echo off
color 0a
mode 1000

:matrix
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%

goto matrix

[리눅스]
shell script

[맥]
http://www.asty.org/cmatrix/
brew install cmatrix

Mac 패키지 관리자 brew 사용하기

Mac 에서 리눅스의 yum, apt-get 같은 기능을 해주는게 port 와 brew 라는 프로그램이다.
의존성이 있는 프로그램들을 알아서 설치해주니 필수로 설치하도록 하자.
port 보단 brew 를 더 많이 사용하는것 같다.

# brew
# 자세한 사용방법 :http://brew.sh/index_ko.html
# 설치하기(ruby 사용)
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# brew 로 설치된 프로그램(패키지) 보기
# list 또는 ls
brew ls

# 패키지 path 보기
brew ls nmap

# 패키지 검색
brew search nmap

# brew 로 nmap 설치
brew install nmap

# 설치 후 과정만 다시 수행
brew postinstall nmap

# 설치된 패키지 중 old 버전 삭제
brew clean

# 패키지 삭제
brew remove nmap

# dead symlinks 인경우 제거
brew prune

# 패키지 정보(등록된 url 을 확인할 수 있다.)
brew info nmap

# curl 설치(http2 사용할 수 있도록)
# 2019년부터 --with-nghttp2 옵션 제거됐다.
# https://github.com/Homebrew/homebrew-core/issues/31510
# brew install curl --with-nghttp2
# http2 를 사용하려면 대신 curl-openssl 을 설치해야 한다.
brew install curl-openssl

# brew 로 설치된 프로그램은
# /usr/local/Cellar 에 다운로드되고
# /usr/local/bin 에 링크 파일을 생성한다.
# 원래 맥에서 기본 제공하는 /usr/bin/ 의 curl 같은 프로그램은
# brew 로 설치하면 /usr/local/bin 에 링크 파일이 생성되지 않는다.
# 이런 경우를 다음과 같이 keg-only 라고 한다.
"This formula is keg-only, which means it was not symlinked into /usr/local"

# 이렇게 설치시 자동으로 링크가 되지 않는 경우
# link --force 옵션으로 링크 파일을 강제 생성할 수 있다.
# /usr/local/bin/curl 링크 파일이 강제 생성
# 참고로 brew unlink 는 /usr/local/bin 링크 파일이 삭제한다.
brew link --force curl-openssl

# 그런데 macOS 에서 link --force 도 거부된다.
Warning: Refusing to link macOS-provided software: curl-openssl

# 대신 PATH 환경변수를 사용해야 한다.
export PATH=/usr/local/opt/curl-openssl/bin:$PATH

# 서비스(백그라운드) 작업시
brew services list
brew services start mysql@5.7
brew services stop mysql@5.7

MySQL ERROR 2002 (HY000)

# mysql (클라이언트)을 실행했을때 다음과 같은 에러가 발생했다.
# mac 의 경우 /tmp/mysql.sock
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

# [해결방법]
# mysql (데몬)을 실행시키면 /var/lib/mysql/mysql.sock 파일이 생성되며, mysql 데몬을 죽이면 사라지게 된다.
sudo /sbin/service mysqld start

# mac brew 서비스라면 다음과 같이 실행하면 /tmp/mysql.sock 파일이 생성된다.
brew services start mysql

# 참고, mac arm64 환경에서의 my.cnf 파일 위치
vi /opt/homebrew/etc/my.cnf
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1

# 참고, mysql 을 실행시 sock 파일을 명시
mysql --socket=/var/lib/mysql/mysql.sock -h localhost -P 3306 -u root -ptest123

#####

# 다음과 같이 localhost 를 사용해도 에러가 발생한다.
mysql -h localhost -P 3306 -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

# [해결방법]
# localhost -> 127.0.0.1 을 사용하면 된다.
mysql -h 127.0.0.1 -P 3306 -u root -ptest123