JAVA_HOME 환경 변수 설정 (Java 버전 여러 개 설치된 경우)

|

JAVA_HOME 환경 변수 설정

개발을 하다보면 환경 변수 JAVA_HOME에 값을 설정해야 할 일이 자주 발생합니다. 먼저 /usr/libexec/java_home -V 명령어를 이용하여 Mac에 설치된 Java 버전을 확인합니다. 만약 별도로 Java를 설치하지 않았으면 다음과 같은 결과가 출력됩니다.

$ /usr/libexec/java_home -V

Matching Java Virtual Machines (1):
    11.0.1, x86_64:	"OpenJDK 11.0.1"	/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home


맥 OS에 설치된 Java 버전이 2 가지 이상인 경우에도 동일한 방법으로 확인할 수 있습니다. 저같은 경우는 특정 프레임워크 빌드를 위해 JDK 1.8을 추가로 설치했더니 다음과 같이 출력되었습니다.

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.1, x86_64:	"OpenJDK 11.0.1"	/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home
    1.8.0_192, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/openjdk-11.0.1.jdk/Contents/Home

이 중 원하는 버전으로 JAVA_HOME으로 설정하면 됩니다.

또는 아래의 명령어를 수행하면 보다 편리하게 설정 가능합니다.

# Java 10
export JAVA_HOME=$(/usr/libexec/java_home -v 10)

# Java 9
export JAVA_HOME=$(/usr/libexec/java_home -v 9)

# Java 1.8
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

# Java 1.7
export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

# Java 1.6
export JAVA_HOME=$(/usr/libexec/java_home -v 1.6)

MAC OS에 ROS2 for Android 설치하는 방법

|

MAC OS에 ROS2 for Android 설치하는 방법

ROS 2.0 설치 방법은 자주 업데이트되거나 변경되기 때문에 아래 방법이 잘 되지 않으면 Esteve github를 참고하는 편이 좋습니다. 2018년 11월 6일 기준 제가 직접 설치하면서 검증한 방법입니다.


JAVA 8 설치

ROS 2 for Android는 Java 8 버전에서만 제대로 동작합니다. 저같은 경우는 그보다 높은 버전이 설치되어 있어서 하위 버전의 JDK를 추가로 설치해줬습니다. JDK 1.8은 여기에서 다운로드 할 수 있습니다.

다음 명령어를 이용해서 JAVA_HOME 설정을 해주고 gradle도 설치합니다.

$ brew tap caskroom/versions
$ brew cask install java8
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home

$ brew cask install java

$ brew install gradle

맥 OS에는 vcstool도 기본적으로 설치되어 있지 않기 때문에 설치해줍니다.

pip3 install vcstool


ament_ws 설치

mkdir ament_ws/src
cd ament_ws
curl -skL https://raw.githubusercontent.com/esteve/ament_java/master/ament_java.repos -o ament_java.repos
vcs import src < ament_java.repos
src/ament/ament_tools/scripts/ament.py build --symlink-install --isolated


Anroid Studio 및 NDK 설치

Android NDK를 다운로드해서 설치합니다. 여기에서 다운로드 가능하며 버전은 16b 이상이면 가능합니다. 저는 17b 버전으로 설치했습니다. 물론 Android Studio나 Android SDK도 비슷한 방법으로 다 설치가 되어 있어야 합니다.

그 이후 환경 변수를 아래와 같이 설정합니다.

export ANDROID_PATH=/Users/snowdeer/Library/Android
export ANDROID_SDK=${ANDROID_PATH}/sdk
export ANDROID_NDK=${ANDROID_PATH}/ndk/android-ndk-r17b
export ANDROID_NDK_HOME=${ANDROID_NDK}
export ANDROID_HOME=${ANDROID_SDK}
export ANDROID_TOOLS=${ANDROID_SDK}/platform-tools
export PATH=$PATH:$ANDROID_SDK:$ANDROID_TOOLS:$ANDROID_NDK

ROOT_DIR=${HOME} AMENT_WORKSPACE=${ROOT_DIR}/ament_ws ROS2_ANDROID_WORKSPACE=${ROOT_DIR}/ros2_android_ws export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

export PYTHON3_EXEC=”$( which python3 )” export ANDROID_ABI=armeabi-v7a export ANDROID_NATIVE_API_LEVEL=android-21 export ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-clang

ROS 2 for Android 소스 다운로드

mkdir -p ${ROS2_ANDROID_WORKSPACE}/src
cd ${ROS2_ANDROID_WORKSPACE}
wget https://raw.githubusercontent.com/esteve/ros2_java/master/ros2_java_android.repos
vcs import ${ROS2_ANDROID_WORKSPACE}/src < ros2_java_android.repos
source ${AMENT_WORKSPACE}/install_isolated/local_setup.sh


빌드

rcl_lifecycle 패키지 같은 경우 최근에 ROS 2에 추가되었는데 아직 ROS 2 for Android에서는 지원하지 않는 것 같아서 제외했습니다.

ament build --isolated --skip-packages test_msgs rcl_lifecycle \
  --cmake-args \
  -DPYTHON_EXECUTABLE=${PYTHON3_EXEC} \
  -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
  -DANDROID_FUNCTION_LEVEL_LINKING=OFF \
  -DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \
  -DANDROID_TOOLCHAIN_NAME=${ANDROID_TOOLCHAIN_NAME} \
  -DANDROID_STL=gnustl_shared \
  -DANDROID_ABI=${ANDROID_ABI} \
  -DANDROID_NDK=${ANDROID_NDK} \
  -DTHIRDPARTY=ON \
  -DCOMPILE_EXAMPLES=OFF \
  -DCMAKE_FIND_ROOT_PATH="$AMENT_WORKSPACE/install_isolated;$ROS2_ANDROID_WORKSPACE/install_isolated" \
  -- \
  --parallel \
  --ament-gradle-args \
  -Pament.android_stl=gnustl_shared -Pament.android_abi=$ANDROID_ABI -Pament.android_ndk=$ANDROID_NDK --

Mac OS 초기 세팅 (개발용 세팅)

|

Mac OS 초기 세팅 (개발용 세팅)

지극히 개인적인 세팅입니다. 맥 OS 업데이트가 있을 때마다 한 번씩 초기화를 해줬더니 초기화 이후 해줘야 할 일들의 정리가 필요하더군요.


업데이트

모든 OS 공통입니다. 업데이트를 제일 먼저해줍니다. App Store를 실행해서 필요한 업데이트 모두 진행합니다.


시스템 설정

언어 설정

개발 위주로 사용하다보니 OS 언어를 한글보다는 영문으로 사용하는 것이 더 편리합니다. Language & Region 항목으로 가서 선호하는 언어를 English로 변경합니다.


Dock 설정

Dock 아이콘 크기를 조금 작게 수정하고, Magnification은 활성화하고 크기는 중상 정도로 세팅합니다. 또한 Dock에서 불필요한 아이콘들은 미리 정리합니다.


Keyboard 설정

Keyboard 세팅은 건드릴 부분이 좀 많습니다.

  • Keyboard 탭에서 Key RepeatFast로 설정
  • Delay Until RepeatShort 쪽에서 1칸 정도 왼쪽으로 설정
  • Touch Bar showsF1, F2, etc. Keys로 설정(요즘은 가급적 터치바의 기본 상태를 쓰려고 노력중입니다. 어차피 fn 키로 펑션키를 실행할 수 있으니깐요.)

Text 탭에서 다음 항목을 모두 Off로 변경해줍니다.

  • Correct spelling automatically
  • Capitalize words automatically
  • Add period with double-space
  • Touch Bar typing suggestions
  • Use smart quotes and dashes

Shortuts에서

  • Spotlight 항목의 Show Finder search window 키를 Option + E로 수정(최대한 Windows 탐색기와 비슷하게 하기 위해서)
  • Show Spotlight search 단축키는 F12로 변경(Mission Control의 Dashboard와 충돌나면, Dashboard 단축키를 사용안함으로 변경)


Display 해상도 변경

System Preferences 에서 Displays 선택합니다. Resolution 항목을 취향껏 정해주면 되는데, 저는 최고 해상도로 설정했습니다.


Sharing 설정(ssh 서버 on)

다른 PC에서 현재 맥북에 ssh 접속을 할 수 있도록 해줍니다. Sharing에서 Remote LoginOn으로 체크합니다.


Touch ID

Touch ID는 검지와 중지 2개 정도 등록하면 괜찮을 듯 싶네요.


Finder 설정

Preferences에서 다음 항목을 수정합니다.

  • General에서 New Finder windows show: 항목을 Home folder로 설정
  • AdvanceShow all filename extensions 항목을 On으로 설정


Homebrew 설치

이제 본격적인 개발용 세팅입니다. 각종 패키지를 편하게 설치하기 위해서는 Homebrew를 설치해줍니다. 자세한 것은 여기를 참조하면 됩니다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

설치 후 brew doctor 명령어로 정상 동작하는지 확인할 수 있습니다.


Command Line Tool 설치

개발용으로는 필수적인 단계입니다. git 등 개발용 툴들을 일일이 직접 설치해도 되지만, xcode에서 제공하는 Command Line Tool을 이용하면 더 편리합니다.

xcode-select --install


한글 단축키 변경

기본 한/영 전환은 Caps Lock입니다. 불편하지 않으면 그냥 써도 되지만 저는 우측 Cmd 키가 편해서 바꾸기 위해서 키를 바꿉니다.여기를 참고해서 설치하면 됩니다.


zsh 및 Oh-My-Zsh 설치

리눅스에서도 애용하고 있는 zshOh-My-zsh를 설치해줍니다.


zsh 설치

brew install zsh


Oh-My-Zsh 설치

sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

초기 세팅은 nano .zshrc 실행해서 작성하면 되며, 기존에 Linux에서 사용하던 .zshrc 내용을 거의 그대로 사용할 수 있습니다. 제가 주로 사용하는 plugin 2개는 다음 명령어로 설치할 수 있습니다.

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

.zshrc 파일에서 테마는 agnoster으로 정합니다.

색상 팔레트는 Preference에서 원하는 조합으로 지정가능합니다.

폰트 때문에 특수 문자 일부가 깨는 현상 발생할 수 있습니다. Powerline 폰트나 D2Coding 폰트를 설치하면 해결됩니다.


git 설정

git config --global user.name "snowdeer"
git config --global user.email "snowdeer0314@gmail.com"
git config --global core.precomposeunicode true
git config --global core.quotepath false


JDK (Java Runtime) 설치

여기에서 dmg 파일을 다운로드해서 설치합니다.


필요한 프로그램 설치


ip 설치

Mac에는 ip 명령어가 없기 때문에 ip addr 같은 명령어를 사용할 수 없습니다. 다음 명령어로 설치해줍니다.

brew install iproute2mac

MAC OS에 ROS2 설치하는 방법

|

MAC OS에 ROS2 설치하는 방법

OS 2.0 설치 방법은 자주 업데이트되거나 변경되기 때문에 아래 방법이 잘 되지 않으면 공식 홈페이지를 참고하는 편이 좋습니다. 2018년 11월 5일 기준 제가 직접 설치하면서 검증한 방법입니다.

먼저 Homebrew나 XCode CLT(Command Line Tool)는 설치가 되어 있어야 합니다. 다음 명령어를 이용해서 각각을 설치할 수 있습니다.

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

xcode-select --install


그 이후 아래와 같이 필요한 컴포넌트들을 설치해줍니다.

brew install python3

# install asio and tinyxml2 for Fast-RTPS
brew install asio tinyxml2

# install dependencies for robot state publisher
brew install tinyxml eigen pcre poco

# OpenCV isn't a dependency of ROS 2, but it is used by some demos.
brew install opencv

# install OpenSSL for DDS-Security
brew install openssl

# install Qt for RViz
brew install qt freetype assimp


pip 명령어를 이용해서 다음 컴포넌트들도 설칲해줍니다.

python3 -m pip install catkin_pkg empy pyparsing pyyaml setuptools argcomplete


ROS 2 binary 다운로드

여기서는 그냥 ROS 2.0 바이너리 파일을 다운받아서 압축을 풀고 설치해줍니다. 바이너리 파일은 여기에서 다운받을 수 있습니다.

mkdir -p ~/ros2_install
cd ~/ros2_install
tar xf ~/Downloads/ros2-bouncy-macos-x86_64.tar.bz2


테스트

다음 명령어를 이용해서 잘 동작하는지 확인해봅니다. 터미널 2개를 열어서 각 터미널간 메시지 전송이 잘되는지 확인합니다.

. ~/ros2_install/ros2-osx/setup.bash

ros2 run demo_nodes_cpp talker
. ~/ros2_install/ros2-osx/setup.bash

ros2 run demo_nodes_cpp listener


CSR UTIL disabled

본격적인 ROS 2.0 개발을 하기 위해서는 맥 OS의 기본 설정인 CSR UTIL의 상태를 disable로 변경해주어야 합니다. 그렇지 않으면 터미널 외 다른 IDE 등에서 ROS 2.0 환경 설정을 가져오거나 동적 라이브러리 연동이 어렵습니다. CSR UTILdisable로 변경하는 방법은 다음과 같습니다.

맥 OS를 재시작하면서 Command + R 버튼을 눌러서 리커버리 모드로 진입합니다. 거기서 터미널을 열고 다음 명령어를 수행합니다.

$ csrutil status

$ csrutil disable

그 이후 재부팅을 해야 시스템에 적용됩니다.

Tkinter - 레이아웃에 Weight 적용하기

|

Tkinter - 레이아웃 Row, Column에 Weight 적용하기

root = tk.Tk()
root.title("SnowDeer's Tkinter Example")
root.resizable(False, False)
root.geometry("640x480")

for col in range(0, 4):
    root.grid_columnconfigure(col, weight=1)