오늘 한 일

  • Do it Java 책을 공부하기 시작했다. 환경부터 설정하는데 리눅스에서 설치하려하니 정말 대환장 파티였다. 평소에 apt을 주로 사용해서 프로그램들을 설치했는데 tar.gz 배포판으로 설치하려니 어디에 설치해야될지도 막막했다. 그 와중에 oracle의 java 유료화로 인해 jdk 8이후로는 jvm이 포함되어있지 않아 jdk 따로 jre 따로 설치해야 했다.
    • 결국 검색에 검색 끝에 압축해제 후 /usr/local/java 경로에 옮긴 뒤 환경 변수로 JAVA_HOME과 JRE_HOME을 설정해주는 것으로 마무리 했다.
      tar -xvzf jdk-11.0.8.tar.gz # 압축 해제
      sudo mv ~/jdk-11.0.8 /usr/local/java
      export JAVA_HOME=/usr/local/java/jdk-11.0.8 >> ~/.zshenv
      # jre도 같은 방식으로 설치
      
    • eclipse는 설치 후 /opt/eclipse 경로에 옮겨주었다.
      tar -xvzf eclipse-inst-linux64.tar.gz
      ./eclipse_inst # eclipse 설치 파일 실행
      sudo mv ~/eclipse /opt # 서드파티 어플리케이션 설치 경로로 프로그램 이동
      

      이 후 /usr/bin/eclipse에 ECLIPSE_HOME 환경변수를 추가해 터미널에서 eclipse 명령어로 실행할 수 있게 했고, /usr/share/applications에 desktop 파일을 작성해 바로가기도 추가했다. /usr/bin/eclipse

      #!/bin/bash
      export ECLIPSE_HOME=/opt/elipse/java-2020-09/eclipse
      $ECLIPSE_HOME/eclipse $*
      
      # 이후 권한 수정 (sudo chmod 755 /usr/bin/eclipse)
      

      /usr/share/applications/eclipse.desktop

      [Desktop Entry]
      
      Encoding=UTF-8
      Name=Eclipse
      Comment=Eclipse Java IDE
      Exec=eclipse
      Icon=/opt/eclipse/java-2020-09/eclipse/icon.xpm
      Terminal=false
      Type=Application
      Categories=Development
      StartupNotif=true
      
    • 이번 기회에 tar.gz 파일들을 어떻게 설치해야되는지 확실히 알게되었다. 비록 시간은 많이 썼지만 앞으로 그만큼 설치하는데 드는 시간을 절약할 수 있다고 생각하기로 했다.
  • 보통 linux에서 환경변수는 /etc/profile 혹은 .profile에 추가하면 사용자 로그인시 bash 쉘이 해당 파일을 읽으면서 사용할 수 있게 된다. 하지만 zsh은 profile을 사용하지 않고 zprofile을 사용한다는 글을 많이 보았는데, 이번 java, eclipse 설치를 하면서 .zprofile에 환경변수를 추가했음에도 echo $JAVA_HOME으로 테스트 했을 때 환경변수를 읽어오지 못했다. 인고의 시간 끝에 한 사이트에서 문제의 원인이 담겨있는 shell의 작동 순서 그림을 찾을 수 있었다. shell-startup-actual .zshrc에서 아래의 코드로 확인했을 때 일반적으로 터미널을 켜면 non-login interactive shell이 켜지는 것을 확인할 수 있었다.
    if [[ -o login ]]; then
      echo "I'm a login shell"
    fi
    
    if [[ -o interactive ]]; then
      echo "I'm interactive"
    fi
    # I'm interactive
      
    $ zsh -l
    # "I'm a login shell"
    # I'm interactive
    

    Ctnl+Alt+T로 터미널을 열었을 때 .zprofile을 건너뛰고 .zshrc를 읽기 때문에 추가했던 환경변수를 찾지 못했던 것이었다. 따라서 login/non-login에 상관없이 항상 읽는 .zshenv에 환경변수를 추가해 문제를 해결할 수 있었다.

  • /etc/profile vs ~/.profile
    • /etc/profile은 모든 사용자 환경에서 사용하는 환경 설정을 담고 있고 ~/.profile은 현재 사용자의 개인 환경 설정을 담고 있다. 따라서 /etc/profile -> .profile 순으로 읽혀진다.
    • 이는 /etc/bash.bashrc ~/.bashrc에서도 동일하게 적용되는 룰이다.
  • 참조