2017년 12월 18일 월요일

Ubuntu 에 tightVNC Server 설치

일반적으로 Ubuntu Server 는 CUI 를 사용해서 관리를 한다.
(반드시 그래야 하는건 아니지만)

일반적으로 Ubuntu Desktop 은 GUI 를 사용해서 관리를 한다.
(반드시 그래야 하는건 아니지만)

Ubuntu 에 원격 컴퓨터에 설치되어 있는 경우,
ssh 를 통해 CUI 로 control 하면 된다.

문제는 원격으로 어떻게 GUI 를 control 하냐는 것이다.

Windows 에는 "윈도우 원격데스크탑" 이라는 control 프로그램이 있어서,
아주 편리하게 GUI 를 control 할 수 있다.

Ubuntu 에서는 VNC 라는 원격 control 프로그램이 있어서, 이것을 사용하면 된다.

※ 물론 예전에 포스팅한 것처럼 vcxsrv 를 사용하는 방법도 있다.
http://kimchki.blogspot.kr/2017/11/x-x-window-system-vcxsrv-windows-x.html

윈도우에서 리눅스로 접속을 할 것이므로,
일단 윈도우 버전을 다운로드 하고 설치 하자.
https://www.tightvnc.com


리눅스에서도 다운로드 하고 설치 하자
% sudo apt-get install tightvncserver

패키지 목록을 읽는 중입니다... 완료
의존성 트리를 만드는 중입니다
상태 정보를 읽는 중입니다... 완료
제안하는 패키지:
  tightvnc-java
다음 새 패키지를 설치할 것입니다:
  tightvncserver
0개 업그레이드, 1개 새로 설치, 0개 제거 및 0개 업그레이드 안 함.
633 k바이트 아카이브를 받아야 합니다.
이 작업 후 1,795 k바이트의 디스크 공간을 더 사용하게 됩니다.
받기:1 http://kr.archive.ubuntu.com/ubuntu xenial/universe amd64 tightvncserver amd64 1.3.10-0ubuntu3 [633 kB]
내려받기 633 k바이트, 소요시간 2초 (255 k바이트/초)
Selecting previously unselected package tightvncserver.
(데이터베이스 읽는중 ...현재 213733개의 파일과 디렉터리가 설치되어 있습니다.)
Preparing to unpack .../tightvncserver_1.3.10-0ubuntu3_amd64.deb ...
Unpacking tightvncserver (1.3.10-0ubuntu3) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Processing triggers for man-db (2.7.5-1) ...
tightvncserver (1.3.10-0ubuntu3) 설정하는 중입니다 ...
update-alternatives: using /usr/bin/tightvncserver to provide /usr/bin/vncserver (vncserver) in auto mode
update-alternatives: using /usr/bin/Xtightvnc to provide /usr/bin/Xvnc (Xvnc) in auto mode
update-alternatives: using /usr/bin/tightvncpasswd to provide /usr/bin/vncpasswd (vncpasswd) in auto mode

설치가 다 되었다면, 이제 실행을 해 보자.
% tightvncserver

You will require a password to access your desktops.

Password:
Verify:
Would you like to enter a view-only password (y/n)? n

New 'X' desktop is ubuntu:1

Creating default startup script /home/ck0911/.vnc/xstartup
Starting applications specified in /home/ck0911/.vnc/xstartup
Log file is /home/ck0911/.vnc/ubuntu:1.log

맨 처음 실행하는 것이라면, 암호를 설정하라고 뜬다.
암호는 vnc 에 로그인할때 사용하는 것이므로 알맞게 입력한다.
혹시 나중에 다시 암호를 변경할 수도 있다.
% tightvncpaswd

서버가 잘 실행되었는지 확인해 보자.
% ps -ef | grep vnc

tightvnc 를 실행했을 때, ubuntu:1
ps 를 실행했을 때, tightvnc:1
모두 숫자 1을 출력하는것을 볼 수 있다.
저 숫자 1을 기억해야 한다.
그래서 저 숫자 1에 해당하는 session 에 접속해야 한다.

그러면 session 을 여러개 띄울 수 있는것인가?
그렇다. tightvnc 를 다시 실행하면 session 을 여러개 띄어서
여러개의 가상 화면을 사용할 수 있다.

% tightvncserver

New 'X' desktop is ubuntu:2

Starting applications specified in /home/ck0911/.vnc/xstartup
Log file is /home/ck0911/.vnc/ubuntu:2.log

오~ 2번째 session 이 생성되었다.

아무튼, 일단 session 1 에 접속해 보자.
"IP주소:숫자" 형식으로 접속을 한다.


만약 접속이 안된다면, 포트가 막혀있는 것이다.


공유기 혹은 virtual box 같은 가상화를 사용하고 있다면,
반드시 포트 포워딩을 해줘야 한다.
사용하는 포트가 몇번인지 확인해 보자.
% netstat -nap

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:5901            0.0.0.0:*               LISTEN      1336/Xtightvnc
tcp        0      0 0.0.0.0:5902            0.0.0.0:*               LISTEN      1485/Xtightvnc

1번 session 은 5901 포트를, 2번 session 은 5902 포트를,
사용하고 있다는걸 확인할 수 있다.
만약 7번 session 이 열려 있다면, 5907 포트를 사용하게 된다.

※ 6001 포트와 6002 포트도 열려있는걸 볼 수 있는데, 이건 뭐하는건지 잘 모르겠다.

포트 포워딩을 설정하고 다시 접속을 시도해 보자.
접속이 된다면 이렇게 맹~한 화면이 나올것이다.


접속은 되었지만, 인터페이스가 실행되지 않았기 때문이다.

리눅스는 여러종류의 인터페이스가 존재하고,
자신이 원하는것을 설치하고 사용할 수 있다.
KDE, MATE, GNOME 등등

일단 기본적으로 GNOME 을 기반으로 실행해 보자.
인터페이스를 설치하자.
% sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal

vnc session 에 접속했을 때, 인터페이스가 자동으로 실행되도록 해야 한다.
먼저 이미 실행되어 있는 session 을 닫는다.
% vncserver -kill :1

환경설정 파일을 수정하자.
% vi ~/.vnc/xstartup
맨 마지막 부분에 인터페이스를 추가 하자.

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

다시 실행하자.
% tightvncserver

다시 접속하자.


그러면 잘 뜨는걸 확인할 수 있다.
물론 GNOME 말고도 다른 인터페이스를 사용하려면,
환경설정 파일을 수정하면 된다.





출처
https://www.tightvnc.com
http://www.whatwant.com/840
http://glassylife.tistory.com/8

2017년 12월 14일 목요일

PostgreSQL 소스에서 EXEC_BACKEND 의 의미

PostgreSQL 소스를 분석하다 보면,
아래와 같이 분기 되어 있는 부분들의 꽤 존재한다.

#ifdef EXEC_BACKEND
.....
#endif

이 부분은 windows os 에 port 할때 필요한 부분으로,
만약 windows os 일 경우~ 라는 의미이다.

그러므로, windows os 이외일 경우에는 신경쓰지 않아도 된다.
configure 에 정의되어 있다.

if test "$PORTNAME" = "win32"; then
  CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
fi

2017년 12월 13일 수요일

PostgreSQL 여러개를 하나의 컴퓨터(machine) 에서 사용하기

종종 하나의 machine 에서 여러개의 PostgreSQL 을 사용해야 할 때가 있다.

machine 을 여러 사용자가 사용할 수도 있고,
혹은~
개인적으로 여러개의 PostgreSQL 을 띄우고 이것저것 작업을 할 수도 있기 때문이다.

아래 2가지 조건만 만족하면 N개의 PostgreSQL 을 실행 시킬 수 있다.
1. data 가 달라야 한다.
2. port 가 달라야 한다.

data 가 달라야 한다는 말은,
"pg_ctl start -D" 옵션에 넣는 경로가 달라야 한다는 말이다.
당연히, 하나의 data 에 여러개의 process 가 작업을 하면 안될테니 말이다.

port 가 달라야 한다는 말은,
tcp listen port 가 달라야 한다는 말이다.
당연히, 하나의 port 를 여러개의 process 가 listen 할 수는 없을테니 말이다.

기존에 있던 data 말고, 새로운 data 를 생성한다.
% initdb -D [NEW_DIRECTORY]

새로운 data 로 이동한다.
% cd [NEW_DIRECTORY]

port 를 변경한다.
% vi postgresql.conf

앞에 주석 # 을 삭제한 후, 5432 말고 다른 port 를 입력한다.
#port = 5432

서버를 시작한다.
% pg_ctl start -D [NEW_DIRECTORY] -l logfile

새로운 서버로 접속한다.
% psql -p [NEW_PORT]

위와 같은 방식을 사용하면, N개의 PostgreSQL 을 실행 시킬 수 있다.





참고
https://www.postgresql.org/docs/9.6/static/app-postgres.html

2017년 12월 12일 화요일

PostgreSQL 환경 변수

PostgreSQL 을 사용하다 보면, 매번 입력해야 하는 매개변수가 있다.
그것은 바로 database directory path 이다.

처음 database 를 생성할때,

% initdb -D postgresql/data

database 를 실행할때,

% pg_ctl start -D postgresql/data -l logfile

매번 입력을 해줘야 한다.

결론은?
번거롭다는거다.

다행히, PostgreSQL 은 이런 번거로움을 해결할 수 있는 방법이 있다.
environment 를 설정하면 된다.

% export PGDATA=postgresql/data

이런식으로 PGDATA 환경변수를 설정해 놓으면 -D 옵션을 주지 않아도 된다.

% initdb

% pg_ctl start -l logfile

음. 한결 편해졌군.

주의할 점은 PGDATA 에는 절대경로를 넣어 줘야 한다.
상대경로를 넣어주면? 당연히 실행하는 위치마다 될수도 안될수도 있다.

또 하나 더.
psql 을 실행할때 매번 database 를 입력해 줘야한다.

% psql postgres

기본적으로 계속 postgres database 를 사용할 예정이라면,
이것도 환경변수에 넣어주면 매번 입력하지 않아도 된다.

% export PGDATABASE=postgres

% psql

개인적으로 그냥 편하게 .bashrc 에 PGDATA, PGDATABASE 를 넣어둔다.
그러면 다음에 로그인할때 신경쓰지 않고 사용할 수 있다.

PostgreSQL 메뉴얼을 살펴보면, 그 외에도 많은 환경변수들이 존재한다.
적당히 적절히 사용하면 큰 도움이 될거 같다.





출처
https://www.postgresql.org/docs/9.6/static/libpq-envars.html

PostgreSQL 외부에서 접속 하기

PostgreSQL 은 다중 사용자를 위한 Database 이다.
당연히, Server-Client 구조를 가지고 있다.
그러므로, PostgreSQL 을 설치한 machine 외에 다른 machine 에서
접속이 가능하다.

하지만 보안 때문에, 어느 Database 든지,
기본적으로 외부 접속을 disable 해 놓는다.
물론 PostgreSQL 도 외부 접속이 기본적으로 disable 되어 있다.

환경변수를 수정해서, 외부 접속이 가능하도록 해 보자.

% vi postgresql/data/pg_hba.conf

파일의 맨 끝으로 이동하면,
아래와 같은 구문이 나타난다.
접속을 허용하는 ip 주소를 입력하면 된다.

하나의 ip 를 입력할 수도 있고,
netmask 를 사용해서 ip 대역대를 입력할 수도 있다.

0.0.0.0/0 을 입력하면 모든 ip 접속을 허용하겠다는 의미이다.

# IPv4 local connections:
host    all             all             0.0.0.0/0            trust

% vi postgresql/data/postgresql.conf

listen 하는 ip 를 입력하는 곳이다.
기본적으로 localhost 로 되어 있을텐데,
모든 ip 를 listen 한다는 의미로 * 를 입력하면 된다.

listen_addresses = '*'

이제 서버를 재시작 해보자.

% psql -h [ip_address]

psql (9.6.5)
Type "help" for help.

postgres=# 

해당 ip 주소로 접속이 잘되는걸 확인할 수 있다.

만약 공유기에 물려있다면, 포트포워딩을 해줘야 한다. (port 5432)





출처
http://justckh.blogspot.kr/2013/10/postgresql-ip.html
http://moomini.tistory.com/91

C언어 문자열에 대한 sizeof 의 결과

C언어에서 sizeof 라는 연산자가 있다.
자료형의 크기를 얻을 때 사용한다.

sizeof(자료형);
이렇게 함수 사용하듯이 사용하면 된다.

생김새는 함수처럼 생겼지만,
특이하게도 sizeof 는 "연산자" 이다.

또 다른 특이한 점은,
sizeof 는 런타임시가 아닌,
컴파일시에 계산된다는 것이다.

아... 별종이구먼.
간단한 테스트를 해보기로 했다.

#include <stdio.h>

int main() {
    char *p="ABC";
    char a[]="ABC";

    printf("%lu\n", sizeof(p));
    printf("%lu\n", sizeof(*p));
    printf("%lu\n", sizeof(a));
    printf("%lu\n", sizeof("ABC"));

    return 0;
}

결과

8
1
4
4

8 이 나오는건, 포인터 변수이기 때문이다.
포인터 변수는 64bit machine 에서 8바이트이기 때문이다.
요즘 웬만한 컴퓨터는 64bit 이므로 아마 대부분 8 이라고 나올것이다.
당연한 이야기겠지만, 32bit machine 에서는 4 가 나올 것이다.

1 이 나온건, char 의 size 가 1 이기 때문이다.
*p 는 p 포인터의 내용물을 의미하기 때문이다.
그 내용물은 char 이므로 1 이 나온 것이다.
만약, p가 int *p 였다면, 4 가 나왔을 것이다.

4 가 나온건, a[] 배열의 크기가 4 이기 때문이다.
"ABC" 문자열을 저장하기 위해서는, 맨 마지막에 NULL 이 추가되어야 한다.
a[] 라고 정의하면, [] 안에 숫자는 컴파일러가 자동으로 채워준다.
그러므로 a[4] 라고 컴파일러가 자동으로 채워줬을 것이다.
그러므로 4 가 나온다.

마지막으로 4가 나온건, 문자열이 배열로 처리 되었기 때문이다.
컴파일 단계에서 배열로 처리되어서, 이미 문자열 크기만큼
배열이 할당되고, 그 크기가 출력된 것이다.

2017년 11월 29일 수요일

Ubuntu 로그인 할때 시스템 정보 출력

Ubuntu 에 로그인을 하면, 단순하게 Welcome 문구만 출력되는게 일반적일 것이다.

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Last login: Tue Nov 28 17:55:46 2017 from 121.133.176.6

하지만, 좀 더 많은 정보를 제공해 줄 수도 있다.

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-38-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Nov 28 22:39:25 KST 2017

  System load:     0.46                    Processes:                 119
  Usage of /:       13.7% of 38.26GB   Users logged in:         1
  Memory usage: 29%                     IP address for eth0:     172.30.1.104
  Swap usage:     4%                      IP address for docker0: 172.17.0.1

  Graph this data and manage this system at:
    https://landscape.canonical.com/

Last login: Tue Nov 28 22:33:49 2017 from 172.30.1.107

아래 명령어를 실행하면 위와 같은 정보가 표시된다.
% landscape-sysinfo

만약 설치되어 있지 않다면 설치를 해주면 된다.
% sudo apt-get install landscape-common

설치하고 나면, 다음 로그인 시 자동으로 출력되므로,
따로 설정할 것은 없다.





출처

2017년 11월 27일 월요일

Ubuntu 에서 diff (차이점) 보여주는 프로그램

작업을 하다 보면, 파일의 diff(차이점) 을 봐야할 때가 있다.

그것이
소스 파일의 변경 내용일 수도 있고,
환경 설정 파일의 차이 일수도 있고,
의외로 꽤 자주 필요하다.

diff 를 보여주는 훌륭한 무료 프로그램들이 많이 있다.
잘 사용하면 큰 도움이 될 것이다.

  • tkdiff

예전에 svn 을 주로 이용할 때는, tkdiff 를 많이 이용했었다.

설치
% sudo apt-get install tkdiff wish

사용
% tkdiff 1.txt 2.txt

  • diffuse

tkdiff 를 사용하기 힘든 환경일 때, 대안으로 사용했던 프로그램이었다.

설치
% sudo apt-get install diffuse

사용
% diffuse 1.txt 2.txt

  • meld

사용은 거의 안 해봤지만, 종종 사용해봤던 프로그램이었다.

설치
% sudo apt-get install meld

사용
% meld 1.txt 2.txt


각 프로그램 마다 인터페이스와 기능이 다르다는건 당연한 이야기이고,
셋 다 골고루 사용해 보고,
더 마음에 드는걸 사용하면 된다.

늘 그랬듯이 선택은 자신의 몫.


2017년 11월 26일 일요일

PostgreSQL 소스 설치 (Ubuntu Server 16.04)

PostgreSQL 를 Ubuntu Server 16.04 에 설치할 때,
에러 없이 한번에 주루룩 설치하면 좋겠지만,
현실은 에러 메세지를 몇번 해결해 줘야 한다.

설치 진행 중에 나타나는 에러와 해결 방법을 적어보았다.

PostgreSQL 을 다운로드 하자.
% wget https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.gz

압축을 해제 하자.
% tar vxzf postgresql-9.6.5.tar.gz

디렉토리로 이동 하자.
% cd postgresql-9.6.5

설정을 진행 하자.
% ./configure --prefix=$HOME/postgresql --enable-debug

checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking which template to use... linux
checking whether to build with 64-bit integer date/time support... yes
checking whether NLS is wanted... no
checking for default port number... 5432
checking for block size... 8kB
checking for segment size... 1GB
checking for WAL block size... 8kB
checking for WAL segment size... 16MB
checking for gcc... no
checking for cc... no
configure: error: in `/home/ck0911/postgresql-9.6.5_3':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details

컴파일러를 못 찾겠다는 에러다.
컴파일러를 설치 하자.
% sudo apt-get install gcc

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

readline 라이브러리를 못 찾겠다는 에러다.
readline 라이브러리를 설치 하자.
% sudo apt-get install libreadline-dev

configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure.  It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.

zlib 라이브러리를 못 찾겠다는 에러다.
zlib 라이브러리를 설치 하자.
% sudo apt-get install zlib1g-dev

configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -g -O2
configure: using CPPFLAGS= -D_GNU_SOURCE
configure: using LDFLAGS=  -Wl,--as-needed
configure: creating ./config.status
config.status: creating GNUmakefile
config.status: creating src/Makefile.global
config.status: creating src/include/pg_config.h
config.status: creating src/include/pg_config_ext.h
config.status: creating src/interfaces/ecpg/include/ecpg_config.h
config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s
config.status: linking src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c
config.status: linking src/backend/port/sysv_sema.c to src/backend/port/pg_sema.c
config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c
config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h
config.status: linking src/include/port/linux.h to src/include/pg_config_os.h
config.status: linking src/makefiles/Makefile.linux to src/Makefile.port

설정이 완료 되었다.
컴파일을 해보자.
% make

The program 'make' can be found in the following packages:
 * make
 * make-guile
Try: sudo apt install <selected package>

make 를 못 찾겠다는 에러다.
make 를 설치 하자.
% sudo apt-get install make

ERROR: `bison' is missing on your system. It is needed to create the
file `gram.c'. You can either get bison from a GNU mirror site
or download an official distribution of PostgreSQL, which contains
pre-packaged bison output.

bison 을 못 찾겠다는 에러다.
bison 을 설치 하자.
% sudo apt-get install bison

ERROR: `flex' is missing on your system. It is needed to create the
file `bootscanner.c'. You can either get flex from a GNU mirror site
or download an official distribution of PostgreSQL, which contains
pre-packaged flex output.

flex 를 못 찾겠다는 에러다.
flex 를 설치 하자.
% sudo apt-get install flex

All of PostgreSQL successfully made. Ready to install.

컴파일이 완료 되었다.
install 을 하자.
% make install

PostgreSQL installation complete.

설치가 완료 되었다.
initdb 를 실행시켜서 DB 가 잘 생성되는지 확인한다.
% initdb

The files belonging to this database system will be owned by user "ck0911".
This user must also own the server process.

The database cluster will be initialized with locale "ko_KR.UTF-8".
The default database encoding has accordingly been set to "UTF8".
initdb: could not find suitable text search configuration for locale "ko_KR.UTF-8"
The default text search configuration will be set to "simple".

Data page checksums are disabled.

creating directory /home/ck0911/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /home/ck0911/postgresql/data -l logfile start

db 가 잘 생성되었다. 이제 PostgreSQL 을 사용하면 된다.

※ 한꺼번에 설치하고자 할 때는
% sudo apt-get install gcc libreadline-dev zlib1g-dev make bison flex

※ xml library 도 설치해 주는것이 좋다.
% sudo apt-get install libxml2-dev





출처
https://askubuntu.com/questions/89389/how-to-solve-configure-error-readline-library-not-found
https://askubuntu.com/questions/508934/how-to-install-libpng-and-zlib

2017년 11월 25일 토요일

X 윈도 시스템 (X Window System) 그리고 VcXsrv (Windows X Server)

X 윈도 시스템 (X Window System)은 주로 유닉스 계열 운영체제에서 사용되는 윈도 시스템이다.
.
.
.
라고 정의되어 있다.

정의만으로는 그것이 무엇인지 알기 어렵다.
그래서 인터넷 이곳 저곳 찾아보고, 사용도 해보면서 개인적으로 내린 결론은,
쉽게 말해서 리눅스(유닉스 그 외)에서 사용 가능한 GUI 이다.

빌게이츠 횽이 만든 Windows OS 에서 볼 수 있는 그래픽 인터페이스를,
리눅스에서도 사용할 수 있게 만든것이 X Windows System 이다.

응? GUI 사용 가능하다는게 무슨 말이여?
리눅스는 원래 command(CLI) 로 동작하는 OS 아닌가?

맞다. 리눅스는 원래 CLI 로 동작하는 OS 이다.
당연한 얘기겠지만, CLI 방식을 불편해 하는 사용자가 있을것이고,
GUI 에 대한 요청이 있었을 것이다.
그래서 만들어진 것이다.

우리가 리눅스 서버 버전 말고, 리눅스 데스크탑 버전을 다운 받아서 설치하면,
마치 윈도우와 비슷하게 바탕화면도 있고 아이콘도 있고 GUI 환경에서 리눅스를 사용할 수 있다.


이곳에서 그래픽 유틸리티를 사용할 수 있고, 마우스를 사용해서 리눅스를 컨트롤 할 수 있다.
그래서 일반 사용자들도 손쉽게(아마도) 리눅스를 사용할 수 있게 되었을 것이다.

사실 윈도우가 더 편하긴 하겠지만.....아무튼,
X Window 에는 아주 아주 중요한 기능이 있다.
그것은 바로, X Window 가 Server-Client 구조로 동작한다는 것이다.
그래픽 화면을 뿌려줄때 Server-Client 구조로 뿌려준다는 말이다.

무슨 말인고 하니,
Server 는 리눅스 본체라고 생각하면 되고
Client 는 그래픽 화면이라고 생각하면 된다.

그래서....?

그래서~ 저 Client 를 다른 컴퓨터에 나타나게 할 수 있다는 말이다.
아직까지도 아리송 할 수 있으니, 직접 눈으로 보는게 나을거 같다.

아래 링크에 들어가서 vcXsrv 를 다운로드 하고 설치 하자.
https://sourceforge.net/projects/vcxsrv
무슨 프로그램인지는 나중에 설명하겠다.

Next 클릭

Install 클릭

Close 클릭

바탕화면의 VcXsrv 더블클릭


윈도우 트레이(tray)에 아이콘이 추가된 것을 확인할 수 있다.
정상적으로 실행이 된 것이다.

ubuntu 에 접속을 해 보자.
개인적으로 putty 라는 프로그램을 즐겨 사용한다.
putty 로 ubuntu 에 접속하기 전에,
추가적으로 설정해 줘야 하는것이 있다.


"Enable X11 forwarding" 을 체크해 줘야 한다.
나머지 설정은 자신의 취향대로 하면 된다.

자, 이제 리눅스에 접속한 후에, 그래픽 유틸리티 아무거나 실행시켜 보자.
딱히 떠오르는게 없으면, firefox 를 실행시켜 보자.
짠~ 하고 현재 접속한 컴퓨터에 그래픽 유틸리티가 나타날 것이다.

우와 신기하다 @.@

만약 firefox 가 설치되어 있지 않다면 apt-get 을 이용해서 설치해 주면 된다.
% sudo apt-get install firefox

개인적으로 firefox 보다는 chromium 을 사용한다.
% sudo apt-get install chromium-browser


chromium-browser 를 실행시키면,
짠~ 하고 현재 접속한 컴퓨터에 그래픽 유틸리티가 나타날 것이다.

만약 한글이 깨져서 나온다면, 아래 링크에서 해결방법을 구할 수 있다.
http://kimchki.blogspot.kr/2017/11/vcxsrv-windows-x-server.html

윈도우에 메모장이 있다면, 리눅스에는 gedit 가 있다.
간단한 편집 기능을 제공해 주는 유틸리티 이다.
% sudo apt-get install gedit
설치하고 실행해보자.


이것 역시 그래픽 화면을 끌어서 사용할 수 있다.
위와 같은 방식으로 리눅스의 GUI 를 사용할 수 있다.

여기까지 왔으면 얼추 눈치를 챘을 것이다.
리눅스는 GUI 를 X Window 라는 것으로 표현하고 있는데,
X Window 는 Server-Client 구조로 동작한다는 것이다.
Server 는 리눅스가 되는 것이고,
Client 는 리눅스에 접속한 내 컴퓨터가 된 것이다.
Client 에도 당연히 Server 에 응답해 줘야 하는 프로그램이 필요한데,
그것이 바로 VcXsrv 이다.
그래서 GUI 를 위해 리눅스가 설치된 컴퓨터에,
모니터를 굳이 직접 연결할 필요는 없다.

물론 VNC 같은 원격 연결 프로그램을 사용할 수도 있다.
개인의 취향따라 선택해서 사용하면 된다.
당연한 이야기이지만, 이게 좋다 저게 좋다 장단점이 있기 때문이다.


그리고 XLaunch 는 GUI 에 대한 환경 설정 변경을 도와준다.


GUI 가 화면에 나타나는 형태를 고를 수 있다.


처음 실행할때 자동으로 실행되는 프로그램을 선택할 수 있다.


Clipboard 내용을 공유할 수 있다.


자신만의 셋팅 값을 저장할 수 있고, 다음에 재사용할 수 있다.





출처
https://ko.wikipedia.org/wiki/X_윈도_시스템
https://www.x.org/wiki
https://sourceforge.net/projects/vcxsrv
https://blog.iwanhae.ga/x11-forwarding

2017년 11월 17일 금요일

VcXsrv Windows X Server 한글 깨짐

개인적으로 회사에서든 집에서든, ubuntu 를 자주 사용하는 편이다.

ubuntu 를 데탑처럼 사용할 때도 있지만,
주로 원격으로 사용을 많이 한다.
원격이라는건 뭐~ 흔히들 사용하는 ssh 를 주로 사용하는 편이다.

콘솔(CUI) 작업만으로는 한계가 있는 경우가 있어서,
그래픽(GUI) 작업을 병행할 때가 점점 많아지고 있다.

ssh 를 사용하면 그래픽 인터페이스를 직접 사용할 수 없으니,
당연히 x-windows 를 끌어와서 사용한다.

그래픽을 끌어오는 프로그램은 여러 종류가 있다.
그 중에서 VcXsrv 를 사용중인데, 그래픽을 끌어올때 한글이 깨져나온다.
VcXsrv 에 대해 더 자세한 내용은 아래 링크에서 얻을 수 있다.
http://kimchki.blogspot.kr/2017/11/x-x-window-system-vcxsrv-windows-x.html


한글 폰트가 없어서 깨져나오는 현상이었다.
물론 나는 ubuntu server 를 설치해서 사용중이라서,
한글 폰트가 설치되어 있지 않았다.
한글 폰트를 설치해 보자.

$ sudo apt-get install fonts-nanum-coding

다른 폰트를 원한다면, 물론 다른걸 설치해도 된다.

그리고 다시 실행해보면,
한글이 정상적으로 잘 나온다.






출처
http://clien-achive.blogspot.kr/2016/08/bash-on-ubuntu-on-windows-1.html

2017년 11월 15일 수요일

윈도우10 업데이트 강제 재부팅 막기

개인적으로 윈도우를 사용해서 서버를 돌리고 있다.

거창하게 뭔가 대단한 그런 서버를 돌리는건 아니고,
지극히 개인 용도로 사용하기 위해 돌리고 있는 수준이다.

그렇기 때문에, 서버용 윈도우를 사용해서 돌리는게 아니라
그냥 가정용 윈도우7을 사용하고 있다.

그렇게 지금까지 윈도우7을 잘 사용해오다가,
이제는 흐름에 맞춰서 윈도우10으로 갈아탔다.

그런데 어느날 보니, 서버가 재부팅이 되어 있었다.
어라? 뭐여?

순간 엄청 놀랬다.
공격당한건지, 잠깐 정전이 된건지, 부품이 노후화 된건지,,,,

윈도우 알림 tray 에 업데이트 되었다는 알림이 뜬걸 보고,
어라? 자동업데이트 하고 재부팅 했나보네....

구글링을 해보니, 역시나~
나 처럼 빌게이츠 횽한테 한방 먹은 사람들의 불만과 조치 방법들이 많이 검색되었다.


자동 업데이트? 그렇지. 좋지. 업데이트는 항상 하는게 좋지.
그런데 사용자 계정이 로그인 되어 있는데도 불구하고 자동 재부팅?
그건 좀 아니지 않나?

그래서 아래와 같이 하면 자동 재부팅을 막을 수 있다.

"로컬 그룹 정책 편집기" 를 실행시킨다.
"시작 - 실행 - gpedit.msc"

여러가지 셋팅들이 tree 형식으로 구성되어 있다.
업데이트와 관련된 곳으로 이동하자.
"컴퓨터 구성 - 관리 템플릿 - Windows 구성 요소 - Windows 업데이트"


오른쪽에 업데이트 관련 설정 항목들이 보인다.
"자동 업데이트 구성" 항목을 더블클릭한다.
어떤 블로그들을 보면, "사용 안 함" 으로 설정하면 된다고 설명하고 있다.
물론 그렇게 하고, 수동으로 업데이트를 실행해도 된다.

그 방법만 있는건 아니고, "자동으로 다운로드하고 설치할때 알림" 으로 설정해도 된다.


"예약된 자동 업데이트 설치 시 로그온한 사용자가 있을 경우 자동 다시 시작 사용 안 함"
항목을 "사용" 으로 설정한다.
이렇게 하면 자동으로 재시작 하는걸 막을 수 있다.


이런 문제 때문에 사람들의 불만이 쏟아져서, 이 글을 쓰고 있는 시점에는 MS 에서 옵션을 추가해 놓았다.
"시작 - 설정 - 업데이트 및 복구"


"사용 시간 변경" 이라는 옵션이 추가되었다.


아래와 같이 사용 시간을 설정하면, 그 시간 동안에는 재부팅을 안하는 기능이다.
컴퓨터 사용 시간이 불규칙 하거나, 이것만으로도 만족할 수 없다면,
위에 설명한것 처럼 재부팅을 막는게 최선인듯 하다.






출처
http://withoutwax.tistory.com/293
http://www.cnet.co.kr/view/100154469
http://lanian.tistory.com/entry/윈도우-10-업데이트-재부팅-중지-Windows10
http://igotit.tistory.com/entry/윈도우-10-자동업데이트-자동재부팅-방지-설정하기
http://mainia.tistory.com/4120
http://withoutwax.tistory.com/293
http://rette.iruis.net/2016/08/윈도-10-업데이트-자동-재부팅-막기

2017년 11월 10일 금요일

우분투(Ubuntu) 컴퓨터 이름 변경

우분투(ubuntu) 에서 컴퓨터 이름을 변경하고 싶을 때가 있다.

기본적으로 ubuntu 라고 되어 있다.

그래서 프롬프트에도 ubuntu 라고 표기되고, 네트워크에도 ubuntu 라고 표기된다.

ID@ubuntu:~$

아래 2개의 파일을 수정하면 컴퓨터 이름을 변경할 수 있다.

sudo vi /etc/hosts
sudo vi /etc/hostname

"ubuntu" 문자열을 다른 문자열로 수정하면 된다.



수정 후 서비스를 다시 시작해주면 적용이 된다.

sudo service hostname restart

물론 재부팅 해도 된다.
개인적으로 그냥 재부팅을 한다.

sudo reboot



출처
http://radiation.tistory.com/entry/Ubuntu-설치-후-컴퓨터host-이름-바꾸기

2017년 11월 8일 수요일

PostgreSQL psql 접속시, query 자동으로 실행시키는 방법

PostgreSQL 에 psql 을 통해 접속할때, 원하는 쿼리(혹은 명령어) query(or command) 를 자동으로 실행시킬 수 있다.

~/.psqlrc 파일에 query(or command) 를 추가하면 된다.
(만약 존재하지 않다면, 새로 생성해 주면 된다.)

개인적으로 timing 이라는 옵션을 즐겨 사용한다.
timing 은 query 수행에 시간이 얼마나 걸리는지 출력해 주는 명령어이다.

그런데 session 을 연결할때마다 \timing 을 입력하는것이 번거롭기도 해서,
psql 을 사용해서 session 에 연결할때 자동으로 실행하도록 하고 싶었다.

% vi ~/.psqlrc

이 텍스트 파일에 실행하고 싶은 query(or command) 를 기록하면 된다.
그러면, psql 이 실행되면서 위 파일내 query(or command) 를 실행해준다.
이제 힘들게 매번 타이핑 하지 않아도 된다.




출처
https://serverfault.com/questions/282046/how-can-i-have-timing-default-to-on-with-postgresql

2017년 11월 6일 월요일

PostgreSQL query 실행 시간 표시

PostgreSQL 에서 query(or command) 실행 시간을 알고 싶을 때가 있다.
timing 를 사용하면 수행시간을 출력해 준다.

postgres=# \timing
Timing is on.

이제부터 모든 query 에 대해 수행시간이 출력된다.

postgres=# select * from pg_class;
                 relname                 | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid |
relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasrules | relhastriggers | relhassubclass | relrowsecurity | relforcerowsecu
rity | relispopulated | relreplident | relfrozenxid | relminmxid |                relacl                 |       reloptions
-----------------------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+-
------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+----------------+----------------+----------------
-----+----------------+--------------+--------------+------------+---------------------------------------+-------------------------
......
......
......

(316 rows)

Time: 0.076 s

단위는 ms (millisecond) 로 표시된다.

"어? second 인데??"

아~~ 원래 millisecond 인데, millisecond 보다는 second 가 보기 편할거 같아서 소스를 수정해서 사용하고 있다.

만약 변경하고 싶다면, 아래처럼 소스를 수정하면 된다.


소스를 수정했으니 당연히 make, make install 도 해줘야 된다.

시간 표기를 안 하게 해주려면 timing 을 한번 더 실행해주면 된다.

postgres=# \timing
Timing is off.



출처
https://dba.stackexchange.com/questions/3148/how-can-i-time-sql-queries-using-psql

2017년 10월 18일 수요일

Windows 10, Windows Server 2016 정보

Windows 10, Windows Server 2016 에 어떠한 변화가 있는지 가끔 궁금할때가 있다.

물론 구글에서 검색하면 다양한 정보를 얻을 수 있다.

가끔 생각날 때는 아래 사이트에 접속하기도 한다.

http://jsb000.tistory.com/category

Windows 10, Windows Server 2016 에 대해 정리를 해 놓은 곳이다.

어떤이에게는 별 도움이 되지 않은 내용일 수도 있겠고,
어떤이에게는 소소하게 도움이 되기도 할거 같다.

그래서 결론은? 도움이 된다는겨? 안된다는겨?
케바케.


2017년 10월 16일 월요일

쉘 프롬프트 혹은 출력에 컬러 변경

평소에 우리가 사용하는 터미널(쉘)은 검은 바탕화면에 흰 글자이다.

종종 다른색으로 출력하고 싶을 때가 있다.
쉘은 화면에 출력을 할 때, 컬러를 변경할 수 있다.

% echo -e "\033[31m 글자색:빨강 \033[0m"
 글자색:빨강

출력하고 싶은 글자에 옵션을 주면 원하는 컬러로 출력 가능하다.

옵션은 쉘에서 적용을 받기 때문에,
프로그램을 만들때도 사용 가능하다.

#include <stdio.h>

int main() {
    printf("\033[34m 글자색:파랑 \033[0m\n");
    return 0;
}

 글자색:파랑

칼러 값 변환 테이블이 있으니, 원하는 값으로 설정하면 된다.

출처 : https://en.wikipedia.org/wiki/ANSI_escape_code#Colors

위 테이블에 나와있는 컬러로 출력해보자.

#include <stdio.h>

int main() {
    printf("\x1b[30m"   " Black"          "\x1b[0m" "\n");
    printf("\x1b[31m"   " Red"            "\x1b[0m" "\n");
    printf("\x1b[32m"   " Green"          "\x1b[0m" "\n");
    printf("\x1b[33m"   " Yellow"         "\x1b[0m" "\n");
    printf("\x1b[34m"   " Blue"           "\x1b[0m" "\n");
    printf("\x1b[35m"   " Magenta"        "\x1b[0m" "\n");
    printf("\x1b[36m"   " Cyan"           "\x1b[0m" "\n");
    printf("\x1b[37m"   " White"          "\x1b[0m" "\n");
    printf("\x1b[30;1m" " Bright Black"   "\x1b[0m" "\n");
    printf("\x1b[31;1m" " Bright Red"     "\x1b[0m" "\n");
    printf("\x1b[32;1m" " Bright Green"   "\x1b[0m" "\n");
    printf("\x1b[33;1m" " Bright Yellow"  "\x1b[0m" "\n");
    printf("\x1b[34;1m" " Bright Blue"    "\x1b[0m" "\n");
    printf("\x1b[35;1m" " Bright Magenta" "\x1b[0m" "\n");
    printf("\x1b[36;1m" " Bright Cyan"    "\x1b[0m" "\n");
    printf("\x1b[37;1m" " Bright White"   "\x1b[0m" "\n");
    printf("\n");
    return 0;
}

아래와 같이 결과가 나온다.


※ 컬러를 변경할때 \033 으로 시작을 해도 되고, \x1b 로 시작해도 된다.
※ \033 은 8진수 33을 의미하는 것이고, \x1b 는 16진수를 의미한다.

동일한 원리를 이용하여, 프롬프트도 컬러를 변경할 수 있다.
프롬프트 변경은 $PS1 환경변수를 변경하면 된다.

% export PS1="[\[\e[01;31m\]\u@\h\[\e[00m\] : \[\033[1;34m\]\w ]\n% "

위와 같이 옵션을 원하는대로 변경하면, 프롬프트도 변경할 수 있다.

※ [34;1m 을 [1;34m 으로 표기해도 된다. 순서를 바꿔도 상관없다.



출처
https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
http://blog.muabow.com/entry/C언어-출력에-색깔-입히기
http://jswlinux.tistory.com/145

2017년 10월 13일 금요일

PostgreSQL OID 확인 방법

종종 oid 를 확인하고 싶을 때가 있다.
(oid 는 tuple 를 구분하는 unique value 이다.)

postgres=# create table t1 (c1 char(20));
CREATE TABLE
postgres=# insert into t1 values ('aaa');
INSERT 0 1
postgres=# insert into t1 values ('bbb');
INSERT 0 1
postgres=# select * from t1;
          c1
----------------------
 aaa
 bbb
(2 rows)

postgres=# select oid,* from t1;
ERROR:  column "oid" does not exist
LINE 1: select oid, * from t1;
               ^
postgres=#

어라? 에러가 뜨네?
분명히 본거 같은데....

postgres=# select oid,relname from pg_class where relname='t1';
  oid  | relname
-------+---------
 24646 | t1
(1 row)

잘 나오는데.... 왜 t1 은 안 나올까....

구글링을 해봤다.
table 을 만들 때, 옵션을 줘야 된단다.

postgres=# create table t2 (c1 char(20)) with oids;
CREATE TABLE
postgres=# insert into t2 values ('aaa');
INSERT 24652 1
postgres=# insert into t2 values ('bbb');
INSERT 24653 1
postgres=# select * from t2;
          c1
----------------------
 aaa
 bbb
(2 rows)

postgres=# select oid,* from t2;
  oid  |          c1
-------+----------------------
 24652 | aaa
 24653 | bbb
(2 rows)

postgres=#

※ oid 는 명시적으로 표기하지 않으면 출력되지 않는다.
그래서 oid 와 모든 column 을 출력하고 싶으면 oid,* 라고 입력해야 한다.



출처
http://www.sqlines.com/postgresql/oid

2017년 10월 12일 목요일

Ubuntu 기부

사람들이 가장 많이 사용하는 OS 는 아무래도 Windows 일것이다.
물론 나도 Windows 를 사용하고 있다.

그렇지만 개인적으로, Windows 못지 않게 Ubuntu 도 많이 사용하고 있다.
회사에서도.... 집에서도....

몇년간 그렇게 사용하다가 어느날 문득,
너무 신세만 지고 살아온게 아닌가 라는 생각이 들었다.

Ubuntu 는 나에게 많은 것을 아낌없이 주었는데,
나는 해준것도 없이 받기만 한거 같았다.
그래서, 기부를 하기로 했다.

기부 하는 방법은 간단하다.
http://www.ubuntu.com - Downloads - Desktop 으로 이동한다.


기부 화면은 Download 하기 전에 나온다.
Download 를 클릭한다.


어디에 얼마를 기부할지를 조절할 수 있다.
기본으로 $3 씩 되어 있어서, 나는 그대로 냅뒀다.

유명한 결제 시스템 PayPal 을 통해서 기부하도록 되어 있다.
"Pay with PayPal" 을 클릭한다.


금액이 맞는지 확인하고, "바로 결제" 를 클릭한다.


https://www.paypal.com 에서 거래가 정상적으로 이루어진 것을 확인할 수 있다.

기부를 하니, 뿌듯하다.

뭔가 감사의 표시를 한거 같아서 좋다.
많은 사람들을 위해, Ubuntu 가 계속 잘 발전했으면 좋겠다.

2017년 10월 11일 수요일

무료 Hex 에디터 - HxD Hex Editor

컴퓨터에서 이런~ 저런~ 작업을 하다보면, hex editor 가 필요할 때가 있다.
도스 시절에는 he.com 을 엄청 유용하게 사용했던 기억이 있다.

출처 : http://xcoolcat7.tistory.com/489

지금은 윈도우 시대이므로, 당연 윈도우용을 사용해야 한다.
예전에 집에서는 WinHex 를 주로 사용했었다.
편리하기도 하고, 기능도 많고, 유용하긴 한데, 유료라는 큰 문제가 있다.
그래서 구글에서 무료 hex editor 를 찾았다.


HxD 라는 프로그램인데, 무료다.


왼쪽에는 hex 값들이 나오고, 오른쪽에는 문자들이 나온다.


제작자에게 감사해 하며 사용해야 겠다.

프로그램은 아래 홈페이지에서 다운로드 받을 수 있다.
https://mh-nexus.de/en/hxd

WinSCP 기부

나는 리눅스(Linux)를 많이 사용하는 편이다. 회사에서도 사용하고, 개인적으로도 사용하고 있다. 그러다 보니 자연스럽게, SFTP를 많이 사용하게 된다. 리눅스에서는 SFTP에 대해 기본적으로 이렇게 저렇게 잘 지원을 해주는 편인데, 윈도...