반응형

Host OS: Ubuntu 14.04 (amd64)

Linux Container template: ubuntu



우분투 데스크탑과 우분투 서버에서는 문제가 없었지만, 우분투 템플릿으로 Linux Container (LXC)를 새로 생성하고 나서 새로운 패키지를 추가하려고 하면 add-apt-repository 명령이 없다고 에러 메세지가 나온다.


이 때 먼저 software-properties-common 패키지를 설치하고 나면 add-apt-repository를 쓸 수 있다.


$ sudo apt-get -y install software-properties-common




*참고


참고로 add-apt-repository 명령을 치면 무조건 사용자에게 추가할 것인지 한 차례 물어보고 엔터 키를 치면 진행을 하게 되는데, 여기서 사용자의 입력을 생략하고 무조건 실행되도록 하려면 맨 끝에 -y 옵션을 주면 된다. [1]


$ sudo add-apt-repository ppa:openjdk-r/ppa -y


위 예시는 openjdk 패키지를 설치하기 위한 ppa를 추가한 것이다.


일반적인 우분투 터미널에서는 결국 sudo privilege를 얻기 위해서 사용자 패스워드를 입력해야만 하지만, 적어도 기본적으로 root 계정으로 켜지는 Linux Container의 경우에는 저렇게 해 주면 자동으로 진행되므로 편한 점이 있다.


# add-apt-repository ppa:openjdk-r/ppa -y




<참고자료>

[1] http://askubuntu.com/questions/304178/how-do-i-add-a-ppa-in-a-shell-script-without-user-input




반응형
블로그 이미지

Bryan_

,
반응형

Host OS: Ubuntu 16.04 (amd64)

lxc version: 2.0.4


Linux Container에 외부(즉 Host)에서 명령어를 주입하는 방법은 Container 시작할 때 명령어 같이 실행하는 방법과 이미 실행중일 때 명령어를 실행하는 방법으로 나뉜다.


일단 시작하지 않은(stop 또는 lxc-create만 해둔 상태) container는 lxc-start 또는 lxc-execute를 통해서 특정 명령어를 같이 실행할 수 있다.


# lxc-execute -n 컨테이너_이름 -- 실행할_명령어


그런데 이미 실행중인 container에 대해서 lxc-execute를 하면 이미 실행중이라는 에러가 나면서 실행되지 않는다. 이 때에는 lxc-attach를 쓰면 된다.


# lxc-attach -n 컨테이너_이름 -- 실행할_명령어


lxc-attach를 추가 명령어 없이 실행하면 해당 노드의 프롬프트로 바뀌어 버리는데, 실행할 명령어를 추가하게 되면 container의 프롬프트로 바뀌지 않은 채 명령어만 실행하고 Host의 쉘을 유지하게 된다. 이렇게 함으로써 host가 여러 개의 container에 대해서 같은 명령어를 일괄 실행할 수 있는 장점이 있다.


예를 들어, node4라는 이름의 container에 default route를 추가하는 명령어를 실행한 결과가 아래 그림과 같다. 원래 실행중인 container에 없던 default 경로가, lxc-attach와 함께 실행하는 route 명령어를 통해서 새로 추가되었음을 확인할 수 있다. 그리고 프롬프트가 바뀌지 않는 것도 확인할 수 있다.



다만 프롬프트만 바뀌지 않을 뿐, 실행 결과에 대한 출력은 host의 쉘에 모두 표시되므로 에러 여부도 판별할 수 있다.



<참고자료>

[1] "9.6 Starting a Command Inside a Running Container",

 https://docs.oracle.com/cd/E37670_01/E37355/html/ol_attach_containers.html



반응형
블로그 이미지

Bryan_

,