안녕하세요, 타이젠 개발자 윤진입니다.


"에이서 아스파이어"

4년 전쯤 구매한 노트북입니다.


당시 사내에서 타이젠 앱 컨테스트가 열렸고,

여기저기 부유하며 컨테스트에 참여하기 위해 노트북을 구매하였습니다.

아직도; 다나와에서 이 모델을 구할 수 있네요.


출처 : 다나와


이 노트북에 우분투 16.04를 설치하니 몇가지 소소한 문제가 나왔습니다.

(타이젠이 공식적으로 17.04를 지원하지 않기 때문에 16.04를 쓰고 있습니다)

본 포스팅에 몇가지 이슈에 대해 그때그때 하나씩 옮기려고 합니다.




* 터치패드 동작실패

과거 터치패드의 동작방식이 마우스의 동작방식과 유사하다고 판단하여,

터치패드에서 발생하는 인풋을 마우스 인풋으로 변환하여 사용하였습니다.

운영체제 입장에서도 터치패드는 외부 마우스처럼 인식되었습니다.


하지만, 터치패드는 마우스와 같지 않습니다.

터치패드에 특화된 멀티터치 기능이나 손바닥인식보정 기능이 필요합니다.

'터치패드 인풋 = 마우스 인풋'인 상황에서,

위의 기능들은 터치패드 드라이버단에서 처리해야할 일이었습니다.


드라이버단의 수고를 덜어주기 위해,

Precision Touchpad는 운영체제에 터치패드의 인풋을 그대로 넘겨주고,

멀티터치나 손바닥인식보정은 터치패드의 인풋 데이터를 보고 운영체제가 처리합니다.

드라이버 제작자 입장에서는 구현해야할 기능이 줄어들기 때문에 개발비용을 절약할 수 있습니다.


하지만, Ubuntu 16.04에는 Precision Touchpad를 지원하는 기능이 빠져있습니다.

그래서 Normal Touchpad만 사용하거나 Precision Touchpad를 위한 패키지를 설치해주어야 합니다.


- Normal Touchpad 사용하기

① 전원 on

② 부팅 중 Acer 로고가 나올때 F2를 눌러 BIOS 진입

③ 화살표로 Main 메뉴 진입

④ 터치패드를 Advanced에서 Basic으로 변경

⑤ F10 키를 누르고 Save and Exit 선택

⑥ 재부팅 


- Precision Touchpad를 위한 패키지 설치하기

$ sudo apt-get install xserver-xorg-input-synaptics

위의 패키지를 설치하여 동작한다면 성공~!

패키지를 설치하여도 실패하는 경우가 있습니다.

이 경우 BIOS에서 Normal Touchpad를 설정하여 사용하세요.



* 셧다운 실패

메뉴의 '컴퓨터 끄기'를 실행하거나 cmd에서 shutdown하는 경우,

전원이 꺼지지 않는 이슈가 있습니다.

전원이 꺼지는데 상당한 시간이 걸리는게 아닌지 의심되어,

배터리가 1%가 될때까지 몇시간 동안 켜놨으나 꺼지지 않았습니다.


이 경우 여러가지 원인이 있을 수 있는데,

그 중 하나가 systemd의 문제에서 기인합니다.

systemd는 컴퓨터 종료시 유닛들을 정리하는데,

timeout이 없다면 하염없이 기다리는 문제가 있습니다.

따라서, systemd의 conf에서 timeout 값을 설정하여 제한시간 만큼만 기다리게 설정해야 합니다.


 $ sudo /etc/systemd/system.conf


위의 명령어를 치고 들어가서,

 DefaultTimeoutStartSec=30s

 DefaultTimeoutStopSec=30s

위의 필드의 주석을 풀고 제한시간을 입력해주세요.

제한시간은 시스템의 상태를 보고,

유닛이 자원을 정리하는데 필요한 최소한의 시간 이상으로 설정해주어야 합니다.

이에 대해서는 모범답안이란 없으니 자신의 상황에 맞춰 써주세요.




* 출처

https://us.answers.acer.com/app/answers/detail/a_id/36865/~/changing-the-precision-touchpad-settings-in-the-bios

https://ubuntuforums.org/showthread.php?t=2322413

https://askubuntu.com/questions/764568/ubuntu-16-04-hangs-on-shutdown-restart

https://ubuntu-mate.community/t/regarding-defaulttimeoutstartsec-defaulttimeoutstopsec/6373

  1. 2018.03.28 12:03

    비밀댓글입니다

  2. 철이 2018.05.20 13:18

    초대장좀 부탁드립니다
    schuel@hanmail.net

브라우저에 도메인 이름을 치면,

네임서버를 거쳐 도메인 이름은 IP 주소로 변환이 됩니다.


그렇다면 브라우저에 "localhost"를 치면,

"localhost"도 네임서버를 통해 IP 주소로 변환되는 것일까요?


레드헷/우분투 계열에서는 /etc/hosts 파일을 우선적으로 참고하여,

네임서버를 아이피주소로 바꿉니다.



브라우저나 터미널에서 도메인 이름을 치면 으레 네임서버에서 아이피를 얻어오게 됩니다.

요즘 환경에서 네임서버를 사용할 수 '없는' 상황은 드물기 때문에 hosts 파일의 존재감이 미미합니다.


하지만, 인터넷 역사의 극초반부에는 네임서버 같은게 있을 리가 없었죠.

네임서버는 1984년에 처음 만들어졌으니,

그 전에는 아이피 주소로 접근하거나 각자 매핑 테이블을 관리했죠.


매핑테이블은 txt 파일 형식으로 공유를 했는데, 그 파일 이름이 hosts.txt 였습니다.

이제는 네임서버가 그 모든 걸 관장하니 hosts 파일을 유지보수 + 공유할 이유가 없어졌습니다.


하지만, 호스트 컴퓨터가 네임서버에 접근할 수 없는 상황에서,

도메인 이름(호스트 이름)으로 접근이 필요한 경우도 있겠지요?

아니면 네임서버에 등록되지 않은 도메인 네임(호스트 이름)이 있을 수도 있겠네요.


그럴 때는 /etc/hosts 파일을 사용합니다.

/etc/hosts에서 매핑된 도메인 이름과 IP 주소를 사용합니다.


$ cat /etc/hosts
127.0.0.1    localhost
127.0.1.1    storycompiler


매핑 테이블에 특별한 문법은 없고,

IP주소(빈칸)도메인이름(빈칸)alias

위처럼만 써주면 됩니다.

별칭으로 사용하는 alias는 생략해도 됩니다.


hosts 파일을 수정한 뒤에는 그 내용을 다시 메모리에 올려놓아야하는데요,

network 데몬을 재실행하면 됩니다.


$ sudo /etc/init.d/networking restart
[ ok ] Restarting networking (via systemctl): networking.service.


이상으로 /etc/hosts에 대한 설명을 마치겠습니다.

그럼 좋은 하루 보내세요~

끝_


* References

http://www.tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap9sec95.html

https://en.wikipedia.org/wiki/Hosts_%28file%29

최신 버전 Ubuntu 15.04 64비트에 Tizen 2.3 SDK를 설치해보았습니다.

올초에 나온 Tizen 2.3 SDK는 14.04까지 공식지원하고 있습니다.

다행히 15.04에서도 SDK의 기본 기능을 사용하는데 문제는 없습니다.


하지만, 드디어 에러를 만나게 됩니다.

Tizen SDK 내에 edc 파일을 편집할 때 사용하는 enventor라는 툴이 실행이 안되더군요.

이번 포스팅은 enventor를 '임시'로 사용할 수 있는 방법을 공유합니다.



안녕하세요, Tizen 개발자 윤진입니다.


이번 포스팅은 타이젠 2.3 SDK에서 공식지원하지 않는 Ubuntu 15.04 환경에서 벌어진 일을 다룹니다.

Ubuntu 14.04에서는 위와 같은 에러 없이 Eventor를 사용하실 수 있습니다.

하지만, 최신 버전의 우분투에서 타이젠 SDK를 사용하고 싶으시다면 이번 포스팅을 참고해주세요.



SDK에서 edc 파일을 편집하기 위해 파일을 더블클릭하면 위와 같은 팝업창이 뜹니다.

팝업 내용은 edc 편집툴인 enventor를 런칭하지 못한다는 내용인데요,

에러로그 뷰를 살펴보라고 하지만, 에러로그 뷰에는 별 다른 내용이 없습니다.

그래서 이를 해결하기 위해서 enventor를 커맨트창에서 직접 실행해보았습니다.


$ ~/tizen-sdk/tools/enventor/bin/enventor 
/home/storycompiler/tizen-sdk/tools/enventor/bin/enventor: error while loading shared libraries: libelementary.so.1: cannot open shared object file: No such file or directory


elementary 라이브러리가 없어서 enventor가 실행이 안되는 것이었군요.

하지만, 타이젠 SDK에는 elementary 라이브러리가 포함되어 있습니다.


$ ls ~/tizen-sdk/tools/efl-tools/lib/libelementary.so.1
/home/storycompiler/tizen-sdk/tools/efl-tools/lib/libelementary.so.1

위의 위치를 보시면 EFL에서 제공하는 다수의 라이브러리를 확인하실 수 있습니다.

물론 elementary도 찾을 수 있지요.

라이브러리가 있는데 찾지 못하는 것은 라이브러리 위치가 등록되어있지 않기 때문입니다.

타이젠 라이브러리 디렉토리를 등록하기 위해 /etc/ld.so.conf.d 디렉토리에 tizen.conf 파일을 새로 만듭니다.

그 안에 위의 라이브러리 디렉토리를 추가해둡니다.


$ cat /etc/ld.so.conf.d/tizen.conf
/home/storycompiler/tizen-sdk/tools/efl-tools/lib


그리고 다시 enventor를 실행해봅니다.

이번에는 아래처럼 libgnutls 라이브러리가 없다고 나옵니다.


$ ~/tizen-sdk/tools/enventor/bin/enventor 
/home/storycompiler/tizen-sdk/tools/enventor/bin/enventor: error while loading shared libraries: libgnutls.so.26: cannot open shared object file: No such file or directory


libgnutls.so.26 버전은 여기에서 다운로드 받을 수 있습니다.

위의 사이트가 열리지 않을 경우에 대비하여 64비트 우분투 15.04용 rpm을 첨부합니다.

lib64gnutls26-2.12.14-2-mdv2012.0.x86_64.rpm

아래와 같이 libgnutls.so.26 버전을 설치합니다.

여기에서는 64비트 환경에 맞춰서 64비트용의 라이브러리를 설치하였습니다.


$ sudo rpm -Uvh --force --nodeps lib64gnutls26-2.12.14-2-mdv2012.0.x86_64.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing...
경고: lib64gnutls26-2.12.14-2-mdv2012.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 26752624: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:lib64gnutls26-2.12.14-2          ################################# [100%]

그리고 다시 enventor를 실행해봅니다.

이번에는 libgcrypt.so.11 파일이 없다고 나오네요.

$ ~/tizen-sdk/tools/enventor/bin/enventor
/home/storycompiler/tizen-sdk/tools/enventor/bin/enventor: error while loading shared libraries: libgcrypt.so.11: cannot open shared object file: No such file or directory


따라서 이번에도 libgcrypt.so.11 버전을 찾아서 받습니다.

위의 버전은 여기에서 다운로드 받으실 수 있습니다.

위의 사이트가 열리지 않을 경우에 대비하여 64비트 우분투 15.04용 rpm을 첨부합니다.

lib64gcrypt11-1.5.4-5.mga5.x86_64.rpm

$ sudo rpm -Uvh --force --nodeps lib64gcrypt11-1.5.4-5.mga5.x86_64.rpm
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing...
경고: lib64gcrypt11-1.5.4-5.mga5.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:lib64gcrypt11-1.5.4-5.mga5       ################################# [100%]


libgcrypt는 /usr/lib64에 설치가 됩니다.

하지만, 위의 위치는 ld.conf에 등록된 위치가 아닐 수 있습니다.

$ ls /usr/lib64/libgcrypt.so.11
/usr/lib64/libgcrypt.so.11


따라서 좀 전에 elementary를 등록하기 위해 만든 tizen.conf에 lib64도 등록해둡니다.

$ cat /etc/ld.so.conf.d/tizen.conf 
/home/storycompiler/tizen-sdk/tools/efl-tools/lib
/usr/lib64
$ sudo ldconfig


그리고 다시 enventor를 실행하면 이번엔 libtasn1.so.3이 없다는 에러가 나옵니다.

$ ~/tizen-sdk/tools/enventor/bin/enventor 
/home/storycompiler/tizen-sdk/tools/enventor/bin/enventor: error while loading shared libraries: libtasn1.so.3: cannot open shared object file: No such file or directory


이번에도 libtasn1.so.3을 여기에서 다운로드 받습니다.

위의 사이트가 열리지 않을 경우에 대비하여 64비트 우분투 15.04용 rpm을 첨부합니다.

libtasn1-3-1.2-31.2.x86_64.rpm

$ sudo rpm -Uvh --force --nodeps libtasn1-3-1.2-31.2.x86_64.rpm 
rpm: RPM should not be used directly install RPM packages, use Alien instead!
rpm: However assuming you know what you are doing...
경고: libtasn1-3-1.2-31.2.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 92fbd4a7: NOKEY
준비 중...                         ################################# [100%]
Updating / installing...
   1:libtasn1-3-1.2-31.2              ################################# [100%]


위의 파일마저 제대로 설치하였다면, 이제는 enventor를 실행할 수 있습니다.


자, 이제 다시 개발의 재미에 빠져보시죠.

그럼 좋은 하루 보내세요~

끝_


* References

http://rpmfind.net/linux/rpm2html/search.php?query=libgnutls.so.26%28%29%2864bit%29

http://rpmfind.net/linux/rpm2html/search.php?query=libgcrypt.so.11%28%29%2864bit%29

http://rpm.pbone.net/index.php3/stat/4/idpl/23618373/dir/redhat_el_5/com/libtasn1-3-1.2-31.2.x86_64.rpm.html

제어문과 변수까지 살펴보니 expr가 남았네요.

expr까지 간단하게 살피고 나서는,

쉘스크립트 자체 문법보다는 쉘스크립트와 함께 쓰이는 유용한 명령어들을 살펴보겠습니다.


쉘스크립트가 명령어를 좀 더 지능적으로 사용하려는 의도에서 만들어졌기 때문에,

이 다음부터가 본편이라 볼 수 있겠네요.



expr는 명령어로서 존재합니다.

$ ls /usr/bin/expr
/usr/bin/expr


하지만, bash 쉘은 expr를 built-in으로 내장시켰습니다.

쉘스크립트에서 expr 명령어를 사용하면,

/usr/bin/expr를 사용하지 않고 내장된 build-in 명령어를 실행합니다.

build-in 명령이 외부 명령보다 빠릅니다.

외부 명령어는 프로그램 로딩/런칭만으로도 하세월 보내겠죠.

물론, 굳이 외부 명령어를 사용하고 싶다면 절대경로를 지정해서 사용할 수 있습니다.


expr로 연산할 수 있는 내용은 아래 4가지 입니다.

- 산술 : +, -, *, /, %

- 논리 : |(or), &(and)

- 관계 : =, >, >=, <, <=, !=

- 문자열 : ':'(일치 혹은 substitute)


expr도 명령어이기 때문에 연산자와 피연산자는 (space)로 구분되어야 합니다.

아래와 같이 공백을 안주면 5+1을 하나의 문자열로 인식합니다.

$ expr 5+1
5+1

아래와 같이 공백을 주어야 제대로 답이 계산됩니다.

$ expr 5 + 1
6


연산자로 쓰이는 기호 중 일부는 이미 특수문자로 사용되고 있습니다.

특수문자 : '*' all, '&' bg, '|' pipe, '>', '<' redirection, '(', ')' grouping

위의 문자를 연산에 사용하려면 쉘스크립트가 낚아채서 다른 부호로 오해하지 않게,

각 부호 앞뒤로 따옴표로 감싸주거나 부호 앞에 escape 문자인 '\'를 붙입니다.

$ expr 5 '*' 2
10
$ expr 5 "*" 2
10
$ expr 5 \* 2
10


만약 expr에 사용되는 인수들을 통째로 따옴표처리하면,

expr에 연산자 / 피연산자의 구분되어 처리되지 않고 하나의 문자열로 취급됩니다.

$ expr '5 * 3'
5 * 3


'=' 연산은 좌우의 피연산자의 값이 같으면 1(true)을 출력하고 다르면 0(false)을 출력합니다.

여기서 '출력'의 의미는 '리턴값'과 다른 것에 주의합니다.

'출력'은 true의 경우 1이고, false의 경우 0입니다.

하지만 '리턴값'은 true인 상황에서는 0이고 false인 상황에서는 1이지요.

값에서 보면, '출력'과 '리턴값'은 서로 반대이기 때문에 헛갈릴 수밖에 없습니다.

$ a=5
$ expr $a = 5
1
$ echo $?
0
$ expr $a = 4
0
$ echo $?
1
$ expr $a = '5 * 3'
0
$ echo $?
1

이렇게 된 연유는 '리턴값'에 대한 유닉스 고유의 정책때문입니다.

유닉스에서는 에러없이 성공적으로 프로그램이 종료되면 '0'을 리턴합니다.

문제가 있으면 '0' 외에 다른 값을 출력합니다.

따라서 쉘스크립트에서도 '0'인 경우를 '성공'으로 판단합니다.


하지만 일반적인 프로그래밍 언어에서는 '1'은 true이고 '0'은 false입니다.

expr가 출력하는 값은 일반적인 프로그래밍 언어에서 사용하는 방식 그대로입니다.

이 부분은 오랜 시간 규약처럼 정해져서 이제는 바꾸기 힘들겁니다.

이에 대한 이야기는 나중에 할 기회가 또 오겠지요.


$ E="="
$ expr $E = "="
1

위와 같은 경우에는 마치 등호가 세 개 나란히 쓰인 것처럼 보이겠네요.

하지만, 가운데 등호만 등호로 인식되고,

좌우의 등호기호는 피연산자인 문자로 인식됩니다.

쉘 버전에 따라 좌우에 있는 '='도 연산자로 인식하여 오류가 나는 경우도 있습니다.


따라서 연산기호를 사용한 변수를 위해 변수 앞에 문자열 'x'를 붙여서 비교할 수 있습니다.

$ expr x$E = x"="
1

'x' 문자를 붙이면 변수가 null이더라도 제대로 비교가 되지요.


expr 명령어가 리턴값 외에 출력값이 있으니 출력값을 제거하고 싶을 때도 있을겁니다.

그럴 때는 redirection을 이용합니다.

$ a=7
$ expr $a = 7 > /dev/null && echo $a
7

/dev/null로 출력을 보내버리면 더 이상 화면에는 아무 것도 출력하지 않습니다.

하지만, &&가 연달아 붙어있습니다.

expr 명령문 자체가 성공을 의미하는 '0'을 리턴하므로,

&& 뒷편의 명령어도 실행이 됩니다.

echo $a에 의해 최종적으로 a 변수값이 출력되었습니다.


$ expr $a = 8 > /dev/null && echo $a

반면 위와 같이 $a가 7인데 8과 비교를 하였다면, 결과값은 실패를 의미하는 1이 나옵니다.

결과가 1이면 &&의 뒷부분은 실행되지 않습니다.


이제 logical 비교를 수행해보겠습니다.

$ expr "" \| ""
0
$ echo $?
1

null값 두 개를 oring(|) 해봤자 결과는 null입니다.

false를 의미하는 0을 출력하였고, 실패라는 의미의 '1'을 리턴하였습니다.


$ expr "" \| 0
0
$ echo $?
1

null과 0을 oring(|) 해도 결과는 false입니다.


반면 피연산자 중 하나가 1이거나 문자라면 결과는 true가 됩니다.

출력값은 1 혹은 문자가 나옵니다.

$ expr "" \| 1
1
$ echo $?
0
$ expr "" \| "a"
a
$ echo $?
0


$ expr "a" \| "hello"

위의 출력값은 무엇일까요?

"a"에서 이미 oring의 결과가 결정되었습니다.

따라서 출력은 "a"입니다.


and 연산은 피연산자 중에 하나가 null 혹은 0이면 출력은 언제나 '0'이 됩니다.

$ expr '' \& ''
0
$ echo $?
1
$ expr "" \& ""
0
$ echo $?
1
$ expr "" \& 1
0
$ echo $?
1
$ expr "" \& "a"
0
$ echo $?
1

리턴값은 실패를 의미하는 1입니다.


$ expr 1 \& "a"
1
$ expr "a" \& 1
a

양쪽에 값이 있으면 앞쪽에 나온 값이 출력값이 됩니다.

리턴값은 당연히 성공을 의미하는 0입니다.


":" 연산은,

string : 정규표현식

위와 같은 형태로 사용합니다.

string 문자열 내에서 정규표현식에 부합하는 문자열의 길이를 출력합니다.

$ expr story : story
5
$ echo $?
0
$ expr story : storycompiler
0
$ echo $?
1
$ expr storycompiler : story
5
$ echo $?


하지만 정규표현식은 string의 제일 첫 문자부터 일치여부를 가립니다.

$ expr compiler_of_story : story
0

위처럼 string에 story가 있음에도 불구하고,

출력값은 false를 뜻하는 0이 나왔습니다.


$ a="1234abcd"
$ expr $a : [^a-zA-Z]*[a-zA-Z]
5
$ expr $a : [^a-zA-Z]*[a-zA-Z]*
8

위처럼 복잡하게 정규식을 사용하여 정규식에 일치하는 문자개수를 출력할 수 있습니다.

마지막에 '*' 유무에 따라 "1234a" 혹은 "1234abcd"까지 일치하지요.


expr에 괄호를 사용하여 괄호 안에서 매치되는 부분만 출력할 수 있습니다.

$ expr "$a" : '[0-9]*\([a-z]*\)'
abcd
$ expr "$a" : "[0-9]*\([a-z]*\)"
abcd

a변수는 "1234abcd"인 경우,

[0-9]*에 의해 1234가 매치됩니다.

그리고 그 뒤에 괄호에 의해 abcd가 매치가 됩니다.

expr는 괄호 내에서 매치되는 부분이 있으면 그 내용을 출력합니다.

매치된 문자 개수말고 매치된 내용을 출력하게 되지요.


$ expr "$a" : [0-9]*\([a-z]*\)
0

단, 위처럼 ""나 ''로 정규식을 감싸지 않으면 매치된 문자열을 출력하지 않습니다.

따옴표로 감싸진 부분만 스트링으로 인지하여 출력합니다


여태까지 살펴본 expr의 수많은 연산자들 사이에는 우선순위가 있습니다.

총 7단계로 나눌 수 있습니다.

1. 괄호

     괄호는 다른 모든 우선순위를 능가합니다. 어느 언어에서나 마찬가지이죠.

2. string : 정규식

     문자열에서 정규표현식을 부분이 괄호를 제외하고 가장 높습니다.

3. *, /, %

     곰셈, 나눗셈, 나머지 연산

4. +, - 

    덧셈, 뺄셈

5. =, >, >=, <, <=, !=

    관계

6. &

    and연산

7. |

    or 연산


이상과 같습니다.

우선순위가 확실히 기억나지 않는다면 괄호로 감싸주면 되겠지요.


오늘은 여기까지 하겠습니다

그럼 좋은 하루 보내세요~

끝_


* References

http://www.grymoire.com/Unix/Sh.html#uh-84

  1. dn 2016.07.14 17:53

    좋은정보감사합니다!!!ㅠㅠ

  2. 뉴트리노개미 2016.11.06 11:59

    리눅스 쉘 프로그래밍 배우는중에 연산자가 어떤 종류가 있나 해서 들어왔는데 굉장히 자세한 예제를 들어 설명해주셔서 많은 정보를 익히고 갑니다. 감사합니다 ㅎㅎ

우분투 15.04가 세상에 태어난지 한 분기가 지나고 있습니다.

집에 설치한 지는 이틀이 지났군요.

이틀 동안 우분투 15.04에서만 볼 수 있는 다양한 문제 상황을 접할 수 있었습니다.


삼바설정툴도 문제를 일으키네요.

우분투를 처음 사용할 때부터 함께 해온 system-config-samba도 실행이 안됩니다.

GUI로 실행하면 그냥 먹통이 되네요.

GUI 툴이 크래쉬가 난다고 하여, 특별한 노티가 발생하진 않습니다.

그래서 한참을 기다렸습니다만 크래쉬가 나는 상황이었습니다.

터미널에서 실행하면 바로 죽는 것을 확인할 수 있네요.



우선, 삼바설정과 관련된 내용은 아래 포스팅을 참고하세요.

[Ubuntu/Linux] 삼바서버, 이렇게 설정하면 된다


우분투 15.04가 아닌 분들은 걱정하실 필요가 없습니다.

오직 15.04에서 삼바설정툴을 실행할 때만 발생합니다.


삼바서버설정툴을 아래와 같이 다운로드 받아야겠지요?

$ sudo apt-get install system-config-samba
패키지 목록을 읽는 중입니다... 완료

의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  libatk-wrapper-java libatk-wrapper-java-jni libgconf2-4 libgif4 libice-dev
  libpthread-stubs0-dev libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev
  libxdmcp-dev libxt-dev python-dateutil python-deltarpm python-keyring
  python-secretstorage x11proto-core-dev x11proto-input-dev x11proto-kb-dev
  xorg-sgml-doctools xtrans-dev
Use 'apt-get autoremove' to remove them.
다음 패키지를 더 설치할 것입니다:
  libglade2-0 libuser1 python-glade2 python-gtk2 python-libuser
제안하는 패키지:
  python-gtk2-doc
다음 새 패키지를 설치할 것입니다:
  libglade2-0 libuser1 python-glade2 python-gtk2 python-libuser
  system-config-samba
0개 업그레이드, 6개 새로 설치, 0개 제거 및 2개 업그레이드 안 함.
1,011 k바이트 아카이브를 받아야 합니다.
이 작업 후 8,799 k바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n] y


그리고 바로 실행을 시켜보면 에러메시지를 확인하실 수 있습니다.

$ sudo system-config-samba 

(system-config-samba:4881): IBUS-WARNING **: The owner of /home/storycompiler/.config/ibus/bus is not root!
Traceback (most recent call last):
  File "/usr/sbin/system-config-samba", line 45, in <module>
    mainWindow.MainWindow(debug_flag)
  File "/usr/share/system-config-samba/mainWindow.py", line 121, in __init__
    self.basic_preferences_win = basicPreferencesWin.BasicPreferencesWin(self, self.xml, self.samba_data, self.samba_backend, self.main_window)
  File "/usr/share/system-config-samba/basicPreferencesWin.py", line 97, in __init__
    self.admin = libuser.admin()
SystemError: could not open configuration file `/etc/libuser.conf': 그런 파일이나 디렉터리가 없습니다


중요한 에러는 제일 마지막 줄에 표시가 되었네요.

/etc/libuser.conf 설정파일이 없기 때문에 에러로 죽고 있습니다.

파일 이름만 봐서는 유저설정파일로 보이는데,

삼바설정툴에서 설정 파일의 존재를 따져보아 없으면 추가하는 루틴을 넣었으면 더 좋지 않았을까 싶네요.


간단하게 없는 파일을 생성해봅니다.

$ sudo touch /etc/libuser.conf


libuser.conf 파일이 생성되면 이제 삼버설정툴을 실행할 수 있습니다.

$ sudo system-config-samba


너무... 쉬워서 허무하셨을지도 모르겠네요.

그럼 좋은 하루 보내세요~

끝_


  1. 누더기 2016.12.24 16:28 신고

    간만에 삼바 설치하다가 식겁했는데 덕분에 금방 해결했네요. 감사합니다~

  2. 도움이 되셨다니 다행입니다 :)

데스크탑 PC를 한 대 사서 우분투를 설치하였습니다.

가물가물한 기억을 더듬어서 환경설정을 하고 있습니다.

기본적인 환경설정에만 꼬박 하루가 지나가네요.


사실 윈도우 PC에는 이미 타이젠 SDK가 설치되어 있습니다.

하지만, 윈도우에서는 개발하는 손맛이 나질 않아 우분투에도 타이젠 SDK를 설치하려고 합니다.

타이젠 SDK를 설치하는 과정 자체에는 어려운 것이 전혀 없으나,

타이젠 SDK를 위한 우선 설치해야하는 것들이 있습니다.



안녕하세요, Tizen 개발자 윤진입니다.


만약 타이젠 SDK를 윈도우에 설치하시려면 아래 포스팅을 참고해주세요.

[Tizen] 타이젠 SDK 윈도우에 설치하기, "생각보다 쉽다"


타이젠 SDK는 이클립스를 사용하고 있기 때문에 오라클 JDK를 설치해야합니다.

우분투 환경에서는 open jdk도 받을 수 있으나,

open jdk로는 이클립스를 구동할 수 없습니다.

반드시 오라클에서 배포하는 JDK 받으셔야 이클립스를 제대로 실행할 수 있습니다.


여기를 눌러 오라클 홈페이지에 들어갑니다.

2015. 6. 30 현재 가장 최신은 Java SE Development Kit 8u45 버전입니다.



위의 화면에서 "Accept License Agreement"를 눌러서 라이센스에 동의해주세요.

라이센스에 동의해야만 jdk를 다운로드 받을 수 있습니다.

우분투는 Linux x86(32비트)이나 Linux x64(64비트)를 다운로드 받으셔야 합니다.

여기서는 64비트용 jdk-8u45-linux-x64.tar.gz를 다운로드 받겠습니다.

오라클이 서버를 만드는 회사이니 만큼 다운로드 하나는 확실하게 그리고 빠르게 되네요. :)


다운로드가 완료되었으면 우선 압축부터 풀어야 합니다.

$ tar xvzf jdk-8u45-linux-x64.tar.gz


그리고 압축이 풀린 디렉토리를 통째로 옮깁니다.

$ sudo mkdir -p /usr/lib/jvm/jre1.8.0
$ sudo mv jdk1.8.0_45/* /usr/lib/jvm/jre1.8.0/


자바는 openjdk와 oracle jdk처럼 버전이 다양하기 때문에,

좀 전에 다운로드받은 oracle jdk가 실행될 수 있도록 설정해줍니다.

$ sudo update-alternatives --install <link> <name> <path> <priority>
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jre1.8.0/bin/java 0

곧, /usr/bin/java에 좀 전에 다운로드받은 /usr/lib/jvm/jre1.8.0/bin/java의 링크를 만들어두는 것이지요.


그리고 우분투 파이어폭스에서도 자바를 사용할 수 있도록 자바플러그인을 복사합니다.

$ mkdir ~/.mozilla/plugins
$ ln -s /usr/lib/jvm/jre1.8.0/lib/i386/libnpjp2.so ~/.mozilla/plugins/


마지막으로 추가로 필요한 패키지 몇 개를 설치합니다.

$ sudo apt-get install expect gtk2-engines-pixbuf libgnome2-0 qemu-user-static libwebkitgtk-1.0-0 gettext gksu module-init-tools libudev-dev libsdl1.2debian ruby
패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다      
상태 정보를 읽는 중입니다... 완료
gettext 패키지는 이미 최신 버전입니다.
libgnome2-0 패키지는 이미 최신 버전입니다.
libgnome2-0 패키지 수동설치로 지정합니다.
module-init-tools 패키지는 이미 최신 버전입니다.
다음 패키지가 자동으로 설치되었지만 더 이상 필요하지 않습니다:
  libatk-wrapper-java libatk-wrapper-java-jni libgconf2-4 libgif4 libice-dev
  libpthread-stubs0-dev libsm-dev libx11-dev libx11-doc libxau-dev libxcb1-dev libxdmcp-dev
  libxt-dev x11proto-core-dev x11proto-input-dev x11proto-kb-dev xorg-sgml-doctools
  xtrans-dev
Use 'apt-get autoremove' to remove them.
다음 패키지를 더 설치할 것입니다:
  libgksu2-0 libjavascriptcoregtk-1.0-0 libudev1 libwebkitgtk-1.0-common tcl-expect udev
다음 새 패키지를 설치할 것입니다:
  expect gksu gtk2-engines-pixbuf libgksu2-0 libjavascriptcoregtk-1.0-0 libudev-dev
  libwebkitgtk-1.0-0 libwebkitgtk-1.0-common qemu-user-static tcl-expect
다음 패키지를 업그레이드할 것입니다:
  libudev1 udev
2개 업그레이드, 10개 새로 설치, 0개 제거 및 146개 업그레이드 안 함.
18.6 M바이트/19.6 M바이트 아카이브를 받아야 합니다.
이 작업 후 130 M바이트의 디스크 공간을 더 사용하게 됩니다.
계속 하시겠습니까? [Y/n]


이제 타이젠 SDK 설치를 위한 준비가 끝났습니다.

타이젠 홈페이지에 방문하여 SDK를 다운로드 받습니다.



DOWNLOAD THE SDK 버튼을 누르면 Tizen SDK를 받을 수 있는 페이지가 나옵니다.

아래 페이지에 표시된 화살표 링크를 눌러 운영체제에 맞는 SDK를 고를 수 있습니다.



여기서는 64비트 우분투용 tizen-sdk_2.3.63_ubuntu-64.bin를 다운로드 받겠습니다.

다운로드 받으시고 실행권한을 주셔야 합니다.

$ chmod +x tizen-sdk_2.3.63_ubuntu-64.bin

그리고 바로 실행해보시지요.


만약, 설치가 여전히 안된다면 openjdk 때문일겁니다.

openjdk를 사용하실 필요가 없다면 지우셔도 무방합니다.

$ sudo rm -rf /usr/lib/jvm/java-8-openjdk-amd64



Install > Advanced에 들어가서,

- Package server : SDK이미지를 서버에서 내려받거나,

- SDK Image : 이미 다운로드받은 이미지로 설치할 수 있습니다.

여기서는 Package server를 선택합니다.

그리고 Install을 누르면 다음 항목으로 넘어갑니다.



여기서는 mobile & wearable을 모두 설치할 것이므로 Custom 버튼을 누릅니다.

라디오 버튼이 체크박스로 바뀌면,

Mobile-2.3 / Wearable-2.3 / Other tools를 모두 체크합니다.

다음으로 넘어가면 라이센스 항목이 나옵니다.



라이센스를 자세히 읽어보시고...

I agree 버튼을 눌러 다음으로 넘어가세요.



기본적으로 Installation Location은 ~/tizen-sdk로 되어 있고,

Data Location은 ~/tizen-sdk-data로 되어 있습니다.

다른 경로를 원하시면 변경하실 수 있습니다.

여기서는 그대로 사용하도록 하겠습니다.

이제 Install 버튼을 누르면 설치가 됩니다.

서버로부터 패키지를 다운로드 받고 설치하기 때문에 서버 상태에 따라 시간이 많이 걸릴 수도 있습니다.


설치가 완료되면 바로 Tizen SDK를 사용하실 수 있습니다.

개발의 재미에 빠져보세요~


끝_

  1. 앨리삵 2015.10.05 20:25 신고

    우분투에서 타이젠 빌드하려고 고군분투중입니다.
    한줄기 빛과 같은 블로그 포스팅 감사해요 ㅠㅅㅠ

  2. 정말 멋진 홈피를 가지고 계십니다! :)
    그래픽스 전문가에게 직접 배운다는 생각으로 열심히 방문해야겠습니다. 하핫.

인트라넷을 구축하고 있는 회사 혹은 군대에서는

인트라넷 외부에 있는 네임서버에 접근하지 못할 수 있습니다.

그럴 경우, 인트라넷망 내부에 있는 네임서버를 통해 주소를 얻어와야겠지요.


우분투가 나오기 전에는,

/etc/resolv.conf 혹은

/etc/network/interfaces 파일을 수정하여 DNS 서버를 설정한 기억이 납니다.


하지만, 우분투에서는 위의 설정파일 대신에 손쉽게 네트워크를 설정할 수 있는 GUI 툴을 제공합니다.

우분투 검색창에서 '네트워크' 혹은 'network'로 검색을 해봅니다.



프로그램에 '네트워크'가 보일겁니다.

'네트워크' 프로그램에서 설정한 값들은 온갖 환경설정 파일에서 설정한 것보다 우선순위가 높습니다.



네트워크 프로그램에서는 '유선'과 '네트워크 프록시'에 대한 항목이 있네요.

'유선'의 내용을 살펴보면,

IP 주소, 라우팅 그리고 네임서버를 설정할 수 있게 되어 있습니다.

옵션을 눌러 설정팝업창을 띄웁니다.



수동으로 설정할 경우,

IP 및 DNS 서버를 새롭게 등록할 수 있습니다.


DHCP는 자동으로 내려받는 DNS 서버 외에 새로운 서버를 추가할 수 있습니다.

IPv4 설정탭 > 추가 DNS 서버(V)

위의 설정에 추가하고자 하는 DNS 서버를 입력합니다.

여기서는 "208.67.222.222", "208.67.220.220" 두개의 DNS 서버를 등록합니다.


만약에, 위처럼 네트워크 프로그램을 이용하는 대신 고전스타일로 설정하고자 하면,

/etc/resolvconf 디렉토리를 이용해야 합니다.


기존처럼 /etc/resolv.conf를 사용해도 소용이 없습니다.

왜냐하면, 우분투가 12.04 부터 /etc/resolvconf 디렉토리와 /etc/network/interfaces 등을 종합하여,

/etc/resolv.conf를 덮어씌워 새로 만들기 때문이지요.


$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1


그 대신 아래와 같이 resolvconf 디렉토리에 있는 base 파일에 DNS 서버를 설정하면,

/etc/resolv.conf에 설정내용이 반영됩니다.


$ cat /etc/resolvconf/resolv.conf.d/base
nameserver 208.67.222.222


수정 직후에는 네임서버에 수정한 내용을 아래처럼 반영합니다.

$ sudo resolvconf -u


네임서버가 제대로 설정되었다면,

도메인 네임으로 사이트에 접근할 수 있습니다.


끝_


* References

http://www.stgraber.org/2012/02/24/dns-in-ubuntu-12-04/

https://blueprints.launchpad.net/ubuntu/+spec/foundations-p-dns-resolving

+ Recent posts