우분투에서 패키지를 설치하지 않고 압축을 풀어서 사용하면 로그인된 사용자에 맞게 설정할 시, 로그인된 사용자는 세팅한 명령어를 사용할 수 있지만 사용자 권한을 변경하면 해당 패키지를 찾지 못하여 에러가 발생합니다.

아래에서는 go라는 압축파일을 풀어 로그인된 사용자가 세팅한 다음, 루트계정으로 변환하여 해당 명령어를 실행하는 예제입니다.

예제

test$ tar -xcvf go1.7.1.linux-amd64.tar.gz # 패키지 압축해제
test$ sudo mv go /usr/local/ # /usr/local/ 폴더 하위로 압축파일 이동
test$ cd /home/test
test$ echo "export PATH=$PATH:/usr/local/go/bin" >> .bashrc # .bashrc파일에 go 패키지 등록
test$ source .bashrc # 적용
test$ go
# 정상적으로 적용
Go is a tool for managing Go source code.
Usage:
	go command [arguments]
The commands are:
 
....
 
test $ sudo su # root로 변경
root # go # 명령어 인식 못함
-bash: go: command not found


위와 같이 root 권한으로 실행하려고 할 때, 패키지를 못찾는 문제에 대해 해결하는 방법을 다음에서 설명합니다.

sudo su

test$ sudo su
root# cd ~root
root# echo "export PATH=$PATH:/usr/local/go/bin" >> .bashrc 
root# source .bashrc
root# go
# 정상적으로 적용
Go is a tool for managing Go source code.
Usage:
	go command [arguments]
The commands are:
 
....


sudo 명령어

위처럼 sudo su로 사용하는 것이 아닌 sudo go 처럼 권한만 가져와 실행한다고 하면 똑같은 에러가 발생합니다.

test$ sudo go
-bash: go: command not found


위와같은 문제를 해결하는 방법은 다음과 같이 두 가지가 존재합니다.

sudoers 파일 수정

test$ sudo vi /etc/sudoers
 
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  # <- 이 부분에 :/usr/local/go/bin과 같이 패키지 경로 추가
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root    ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

:wq!로 강제저장한 다음 sudo go env를 사용하면 명령어가 먹히는 것을 볼 수 있습니다.

심볼릭 링크 생성

test$ sudo ln -s /usr/local/go/bin/go /usr/bin/go


위와같이 할 경우 sudo go를 사용할 수 있는 것을 확인할 수 있습니다.


여기서 PATH만 사용할 경우는 위와처럼 하면 되지만 go와 같이 GOPATH라는 특수한 환경변수도 공유하여 사용하고 싶은 경우 아래와 같이 .bashrc를 수정합니다.

test$ sudo vi .bashrc
 
.....
 
alias sudo ='sudo env GOPATH=$GOPATH' # 추가


위까지 할 경우 sudo go env의 내용과 사용자계정으로 세팅한 내용이 똑같은 것을 확인할 수 있습니다.

여기에서는 root계정에 직접 go 환경을 세팅하는 것과 sudo 권한에 심볼릭 링크 등을 걸어 사용자 환경과 동일시하게 하는 방법을 소개했지만 sudo go처럼 실행하는 방법을 지양하고 있습니다. (할 필요도 없다고..)


'서버' 카테고리의 다른 글

Puppet, Chef, Ansible, Saltstack 비교  (0) 2017.02.18
Saltstack  (0) 2017.02.18
[Linux] sudo command not found 해결법 (Go 권한문제 해결법)  (0) 2017.02.02
[Linux] 디렉토리 구조  (0) 2017.01.28
HAProxy  (0) 2017.01.28
Mesos  (0) 2017.01.28

+ Random Posts