lightsail 로 서버 이전 후기

계속 사용해오던 cloudv의 가상서버에서 aws의 새로운 서비스인 lightsail로 이전했다.

굳이 웹호스팅을 쓰지 않고 가상서버로 구성해서 사용하는 것은 git 저장소도 한몫했는데 일단 혼자서 사용하다보니 뭐하러 이런걸 해야하나…라는 회의감과 그럴거면 차라리 github에서 사람들과 같이 코드를 만들고 올리고 하는게 더 낫겠다는 생각이 들었기 때문이었다. 그래서 차라리 웹데이터들은 더 저렴한 lightsail로 이전하고 git 데이터들은 github.com 으로 이전하기로 했다.

lightsail은 사용해보니 그냥 흔히 알고있는 가상서버다. 우리나라에서는 이미 많이 서비스하고 있는.

그런데 가격이 생각보다 싸다. 내 경우에는 월 5달러의 제일 저렴한 리눅스 서버로 골랐다. 메모리 512MB에 20GB의 디스크다. 디스크야 어차피 git 데이터가 github로 넘어간 이상 많이 필요치 않았지만, 너무 적은 메모리와 알 수 없는 cpu 성능 때문에 고민을 했다. 고민 끝에 최대한 메모리를 적게 쓰도록 아파치를 쓰지 않고 nginx로 쓰기로 했다.

그리고 어차피 방문객이 많지도 않고 방문객이 많으면 인스턴스를 늘리면 끝이니까.

bitnami의 여러 스택이 있었는데 사용하기 편하게 wordpress 스택을 선택하려 했지만 이 경우에는 멀티사이트를 만들기에 불편할 것 같아서 그냥 nginx 스택을 선택하고 직접 설정해서 아내의 홈페이지와 내 블로그 두개를 설치했다. nginx 설정 파일이 익숙치 않아서 약간 헤매었지만 금방 적응했다. bitnami류의 패키지 시스템이 마음에 들지 않았지만 직접 써보니 생각보다 괜찮았다. 멀티앱/멀티사이트간 여러 설정 파일들이 서로 꼬이지 않게 잘 정리되어 있었다. (물론 그런 이유로 인해 뭔가 하나 고치려면 한참 경로를 타고 들어가야 한다는건 불편하다.)

여튼 그렇게 설치하고 아파치에서 nginx로 변경했는데 와우… 속도가 생각보다 괜찮았다. 내가 아파치로 혼자 가상서버를 쓰는 것보다 훨씬 빨랐다.

접속방법에서 약간의 불편함은 있지만 어차피 접속할 일도 별로 없고… 게다가 1TB의 트래픽은 트래픽 걱정할 필요는 아예 없을만큼 정말 여유로웠다.

며칠간 여러 데이터들을 이전해본 후기

  1. 생각보다 속도가 빠름.
    도쿄 리전이고 가상서버에다가 메모리도 겨우 512MB라서 느릴 것으로 예상했지만 기존 서버보다 훨씬 빠른 느낌. 아파치와 엔진엑스의 차이인지도…
  2. 시간대 재설정 필요함.
    설치하게 되면 서버 시간을 한국에 맞춰야한다. ( https://gist.github.com/dongbum/1673616e33fb331ff8e876ee62216988 으로 저장해둔다.)
  3. 설정파일 트리구조를 잘 파악해둘 것.
    엔진엑스에 익숙치 않거니와 구조가 좀 복잡하긴하다.
  4. DNS 응답 속도가 아주 빨라짐.
    BIND나 PowerDNS로 네임서버를 직접 구성해서 썼었는데 그렇게 쓰는것보다 lightsail에서 제공하는 DNS의 응답속도가 훨씬 속도가 빨랐다. 거의 100배 정도.
  5. lightsail의 DNS는 Route 53과 약간 다름.
    lightsail에서도 300만 쿼리까지는 무료로 DNS를 제공해주는데 사용하기는 너무 편하게 되어있지만 기능적인 면에서는 Route 53 보다는 떨어진다.
  6. 512MB의 메모리로도 충분함.
    가장 저렴한 512MB 메모리의 인스턴스로도 블로그와 몇가지 개인서비스를 운영하는데에는 차고 넘치는 느낌이다.
  7. 사용상 몇가지 불편함이 있음.
    bitnami 패키지의 특성인지 보안을 위해 암호 같은게 어렵게 설정되어 있어서 약간 불편함. 암호를 일일히 바꾸고 쓰기보다는 그냥 쓰기로 결정했다.

CentOS 7에 plexpy 설치

plex 서버를 잘 사용 중인데 plexpy라는게 있다고 한다. 대강 보니 모니터툴 같은데 일단 리눅스에서 plexpy 를 설치해본다. 인터넷에 있는 몇몇 문서들은 도커를 이용한 설치를 예시로 하고 있는데 내 서버들은 아직 도커를 쓰지 않으므로 그냥 설치하는 것으로.

리눅스는 CentOS 7. plexpy 홈페이지에 들어가 InstallGuide 문서를 읽어본다.

https://github.com/JonnyWong16/plexpy/wiki/Installation

GIT을 이용하여 소스 코드를 다운 받는다.

git clone https://github.com/JonnyWong16/plexpy.git

[root@localhost source]# git clone https://github.com/JonnyWong16/plexpy.git
 Cloning into 'plexpy'...
 remote: Counting objects: 15652, done.
 remote: Total 15652 (delta 0), reused 0 (delta 0), pack-reused 15652
 Receiving objects: 100% (15652/15652), 77.18 MiB | 2.67 MiB/s, done.
 Resolving deltas: 100% (8905/8905), done.
 [root@localhost source]#

설치문서에는 /opt 에 설치하는 것을 예로 들고 있지만 이 경로를 난 좋아하지 않으므로 /usr/local/plexpy 에 설치할 예정.

다운 받은 내용을 /usr/local/plexpy 로 이동한다.

[root@localhost source]# mv plexpy /usr/local/
 [root@localhost source]# cd /usr/local/plexpy
 [root@localhost plexpy]#

plexpy.py를 실행하면 StandAlone 으로 실행하는 것 같지만 난 데몬서비스가 더 좋으므로 관련 문서를 읽어본다.

https://github.com/JonnyWong16/plexpy/wiki/Install-as-a-daemon

리눅스인 경우 다음의 문서를 읽어보라고 한다.

https://github.com/JonnyWong16/plexpy/blob/master/init-scripts/init.systemd

보여지는 스크립트 파일 내용을 vi 를 이용해 plexpy.service 파일로 입력한다.

파일 안에 있는 /opt 로 시작하는 경로들을 나에게 맞도록 /usr/local q로 시작하도록 수정한 다음 저장한다. 실행 유저과 그룹도 plexpy 로 변경.

.service 파일은 보통 /lib/systemd/system 에 저장한다고 하니 그곳으로 옮겨주고 스크립트를 재로딩한 다음, 제대로 읽혀지는지 테스트해본다.

[root@localhost plexpy]# mv plexpy.service /lib/systemd/system
 [root@localhost plexpy]# systemctl daemon-reload
 [root@localhost plexpy]# systemctl status plexpy.service
 ● plexpy.service - PlexPy - Stats for Plex Media Server usage
 Loaded: loaded (/usr/lib/systemd/system/plexpy.service; disabled; vendor preset: disabled)
 Active: inactive (dead)
 [root@localhost plexpy]#

서비스를 시작한다.

[root@localhost plexpy]# systemctl start plexpy.service
 Job for plexpy.service failed because the control process exited with error code. See "systemctl status plexpy.service" and "journalctl -xe" for details.
 [root@localhost plexpy]#

 

에러가 난다. 에러메시지대로 status 명령을 입력해본다.

[root@localhost plexpy]# systemctl status plexpy.service
 ● plexpy.service - PlexPy - Stats for Plex Media Server usage
 Loaded: loaded (/usr/lib/systemd/system/plexpy.service; disabled; vendor preset: disabled)
 Active: failed (Result: exit-code) since 화 2017-09-12 14:24:11 KST; 1min 10s ago
 Process: 23144 ExecStart=/usr/local/plexpy/PlexPy.py --quiet --daemon --nolaunch --config /usr/local/plexpy/config.ini --datadir /usr/local/plexpy (code=exited, status=217/USER)

9월 12 14:24:11 localhost.localdomain systemd[1]: Starting PlexPy - Stats for Plex Media Server usage...
 9월 12 14:24:11 localhost.localdomain systemd[1]: plexpy.service: control process exited, code=exited status=217
 9월 12 14:24:11 localhost.localdomain systemd[1]: Failed to start PlexPy - Stats for Plex Media Server usage.
 9월 12 14:24:11 localhost.localdomain systemd[1]: Unit plexpy.service entered failed state.
 9월 12 14:24:11 localhost.localdomain systemd[1]: plexpy.service failed.
 [root@localhost plexpy]#

 

설치 문서를 읽어보니 환경설정에 대한 내용을 하나도 실행 안한 것이었다.

유저를 추가하고 권한을 준다.

[root@localhost plexpy]# adduser --system --no-create-home plexpy
 [root@localhost plexpy]# chown plexpy:plexpy -R /usr/local/plexpy
 [root@localhost plexpy]#

 

이제 다시 시작해보면 에러가 나지 않는다.

[root@localhost plexpy]# systemctl start plexpy.service
 [root@localhost plexpy]#

 

서비스를 자동실행으로 등록한다.

[root@localhost plexpy]# systemctl enable plexpy.service
 Created symlink from /etc/systemd/system/multi-user.target.wants/plexpy.service to /usr/lib/systemd/system/plexpy.service.
 [root@localhost plexpy]#

 

웹브라우저로 서버의 8181 포트를 열어보면 다음과 같은 화면이 나온다. 이제부터는 웹에서 설정!

그런데 막상 설치해서 보니까 이게 뭐… 딱히 모니터링이라 하기도 애매하고… 어디다 써야할지는 잘 모르겠다. 아파치에 같이 물릴려고 했는데 귀찮아서 그냥 쓰는 것으로.

리눅스에서 스왑 메모리 관리하기

가상서버로 이사한 이후 메모리가 너무 적은지 계속 메모리 관련 에러가 난다.

passenger 모듈 설치에도 메모리에러 때문에 잘 안되었었는데 redmine + git을 사용하려고 하니 또 메모리가 너무 적다고 안된다고 한다. 아무래도 스왑메모리를 2기가 정도 지정해놓고 계속 써야할 모양.

dd if=/dev/zero of=/swap bs=1024 count=2048000

명령으로 2기가짜리 빈 파일을 만든다.

mkswap /swap

명령으로 스왑 생성

swapon /swap

명령으로 스왑 활성화

/etc/fstabs 에 추가

/swap swap swap defaults 0 0

redmine 설치 + passenger 모듈 설치시 에러

새로 설치된 서버에서 레드마인을 설치하다가 알게 된 사실.

레드마인에 Passenger 모듈을 이용해 아파치와 연동하려고 했다.

패신저 모듈을 설치하고 명령을 내렸는데…

c++ -o buildout/support-binaries/UstRouterMain.o  -Isrc/agent -Isrc/cxx_supportlib -Isrc/cxx_supportlib/vendor-copy -Isrc/cxx_supportlib/vendor-modified -Isrc/cxx_supportlib/vendor-modified/libev -Isrc/cxx_supportlib/vendor-copy/libuv/include -D_REENTRANT -I/usr/local/include -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-long-long -Wno-missing-field-initializers -feliminate-unused-debug-symbols -feliminate-unused-debug-types -fvisibility=hidden -DVISIBILITY_ATTRIBUTE_SUPPORTED -Wno-attributes -ggdb -DHAS_ALLOCA_H -DHAVE_ACCEPT4 -DHAS_SFENCE -DHAS_LFENCE -DPASSENGER_DEBUG -DBOOST_DISABLE_ASSERTS -std=gnu++11 -Wno-unused-local-typedefs -DHASH_NAMESPACE="__gnu_cxx" -DHASH_MAP_HEADER="<hash_map>" -DHASH_MAP_CLASS="hash_map" -DHASH_FUN_H="<hash_fun.h>" -c src/agent/UstRouter/UstRouterMain.cpp
c++: internal compiler error: 죽었음 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
rake aborted!
-----------------------------------------------
Your compiler failed with the exit status 4. This probably means that it ran out of memory. To solve this problem, try increasing your swap space: https://www.digitalocean.com/community/articles/how-to-add-swap-on-ubuntu-12-04
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:41:in `run_compiler'
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:102:in `compile_cxx'
/usr/local/share/gems/gems/passenger-5.0.30/build/support/cplusplus.rb:160:in `block in define_cxx_object_compilation_task'
Tasks: TOP => apache2 => buildout/support-binaries/PassengerAgent => buildout/support-binaries/UstRouterMain.o
(See full trace by running task with --trace)

--------------------------------------------

It looks like something went wrong

메시지와 함께 에러. 메모리가 부족하니 스왑메모리 용량을 늘리라는 메시지인데 스왑메모리 용량을 늘리는 작업을 하기에는 너무나 번거롭고… 어떻게 해야하나 고민중. Thin 서버를 쓰는 방향을 생각 중이다.

추가.

passenger-install-apache2-module 명령을 내려서 실행하다보면 다음과 같은 메시지가 있다.

Your system does not have a lot of virtual memory

Compiling Phusion Passenger works best when you have at least 1024 MB of virtual
memory. However your system only has 993 MB of total virtual memory (993 MB
RAM, 0 MB swap). It is recommended that you temporarily add more swap space
before proceeding. You can do it as follows:

  sudo dd if=/dev/zero of=/swap bs=1M count=1024
  sudo mkswap /swap
  sudo swapon /swap

See also https://wiki.archlinux.org/index.php/Swap for more information about
the swap file on Linux.

If you cannot activate a swap file (e.g. because you're on OpenVZ, or if you
don't have root privileges) then you should install Phusion Passenger through
DEB/RPM packages. For more information, please refer to our installation
documentation:

  https://www.phusionpassenger.com/library/install/apache/

Press Ctrl-C to abort this installer (recommended).
Press Enter if you want to continue with installation anyway.

읽어보면 메모리가 부족하다는 경고와 메모리 부족시 해결하는 방법과 작업실행 중단을 권고하는 메시지이다. 처음에는 이 메시지를 무시하고 계속 설치했기에 문제가 일어났었다.

구글에 검색해봐도 뾰족한 방법이 없기에 안내 메시지에 따라서 실행해봤다.

[root@localhost redmine-3.3.1]# free -h
              total        used        free      shared  buff/cache   available
Mem:           993M        566M         80M         56M        346M        233M
Swap:            0B          0B          0B
[root@localhost redmine-3.3.1]# ll /dev/zero
crw-rw-rw- 1 root root 1, 5 10월 18 15:42 /dev/zero
[root@localhost redmine-3.3.1]# dd if=/dev/zero of=/swap bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 2.11671 s, 507 MB/s
[root@localhost redmine-3.3.1]# mkswap /swap
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=0678c873-6899-4c19-b208-e2d69ed55bac
[root@localhost redmine-3.3.1]# swapon /swap
swapon: /swap: insecure permissions 0644, 0600 suggested.
[root@localhost redmine-3.3.1]# free -h
              total        used        free      shared  buff/cache   available
Mem:           993M        566M         66M         56M        359M        235M
Swap:          1.0G          0B        1.0G
[root@localhost redmine-3.3.1]#

실행하고 나니 0바이트였던 스왑메모리가 1기가로 지정되었다. 다시 passenger-install-apache2-module 명령을 내리면 아까와 같은 경고메시지는 없어지고 컴파일이 순조롭게 진행되었다.

리눅스에서 4TB 하드디스크 파티션하고 포맷하는 방법

CentOS 7을 설치하고 가지고 있는 하드디스크들을 장착하고 파티셔닝을 진행했다.

500GB 하드디스크와 250GB 하드디스크는 fdisk 명령어로 파티션을 나누고 mkfs.xfs 명령어로 포맷하고 마운트하니 제대로 인식되고 사용 가능했다. 그런데 새로 구입한 4TB 하드디스크도 같은 방법으로 파티셔닝하고 파일시스템 생성 후 마운트하니 2TB로 잡혔다.

왜 이런가 찾아보다가 발견.

hdd

내용은 이 디스크는 4TB이며 parted를 이용하라는 말이다.

parted 사용법은 다음 링크를 참조했다.

parted를 통해서 무사히 파티셔닝을 마쳤다.

mod_ruid2 설치 방법

Apache 2 버전에서 mod_ruid2 를 설치하기로 했다.

https://github.com/mind04/mod-ruid2 에 가서 최신버전의 zip 파일을 다운로드한다. 다운로드한 파일을 서버에 올리고 unzip master.zip 명령을 내려 압축을 해제한다. 이 글을 쓰고 있는 시점에 최신 버전은 0.9.8 버전이다.

참고로, 내 서버의 환경은 CentOS 6.5 이며 모든 최신업데이트가 전부 적용되어 있다. Apache는 CentOS에서 제공하는 아파치를 사용하고 있다.

apxs -a -i -l cap -c mod_ruid2.c 명령을 내리면 컴파일이 시작된다.

----------------------------------------------------------------------
 Libraries have been installed in:
 /usr/lib64/httpd/modules
 If you ever happen to want to link against installed libraries
 in a given directory, LIBDIR, you must either use libtool, and
 specify the full pathname of the library, or use the `-LLIBDIR'
 flag during linking and do at least one of the following:
 - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
 during execution
 - add LIBDIR to the `LD_RUN_PATH' environment variable
 during linking
 - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
 - have your system administrator add LIBDIR to `/etc/ld.so.conf'
 See any operating system documentation about shared libraries for
 more information, such as the ld(1) and ld.so(8) manual pages.
 ----------------------------------------------------------------------
 chmod 755 /usr/lib64/httpd/modules/mod_ruid2.so
 [activating module `ruid2' in /etc/httpd/conf/httpd.conf]
 [root@83rpm mod_ruid2-0.9.8]#

메시지가 나오고 컴파일이 종료된다.

혹시 sys/capability.h 파일이 없다는 메시지가 나온다면 lilbcap-dev 패키지를 설치하면 해결된다.

아파치 폴더의 httpd.conf 를 보면,

LoadModule ruid2_module       /usr/lib64/httpd/modules/mod_ruid2.so

처럼 모듈 로딩 명령이 들어가 있다.

가상호스트 설정에 들어가서 다음의 내용을 추가한다.

<IfModule mod_ruid2.c>
RMode config
RUidGid 원하는유저ID 원하는그룹ID
</IfModule>

다 입력했다면 아파치 서버를 재시작하고 다음의 내용의 PHP 파일을 만들어서 제대로 작동하는지 확인한다.

<?php
 makedir("testdir");
 ?>

이 내용은 http://fullpowe.blog.me/10158911404 를 참조했다.

추가. 위 php 파일의 makedir() 함수로 테스트를 하려했으나 mod_security 모듈에 의한 보안정책 위반으로 제대로 실행되지 않았다. 자체적으로 테스트해본 결과, mod_ruid2 모듈은 정상적으로 작동하는 것을 확인하였다.

git flow 에서 hotfix 사용 방법

git flow 에 익숙해져 가고 있는데 hotfix 사용법에 익숙치 않아서 애를 먹었다.

나중에 잊어버리지 않기 위해 hotfix 사용방법을 여기에 기록해둔다.

git flow hotfix start <핫픽스버전이름> <베이스버전이름>

명령으로 origin의 특정 브랜치로부터 핫픽스 브랜치를 시작한다.

수정작업을 진행한다.

수정작업을 진행하며 git commit 명령으로 계속 커밋을 해놓는다.

저장소로 커밋 내용을 보내기 위해

git push -u hotfix/<핫픽스버전이름>:hotfix/<핫픽스버전이름>

을 입력해서 저장소의 hotfix/<핫픽스버전이름> 브랜치로 계속 push를 한다.

수정 작업이 마무리되고 모든 것이 끝났다면 로컬의 develop 브랜치로 이동한 다음, git pull 명령을 입력하여 다른 사람들이 작업했던 것들을 받아온다.

git flow hotfix finish <핫픽스버전이름>

명령을 사용하여 핫픽스를 종료하고 hotfix 브랜치를 삭제하고 develop 브랜치에 변경 내용을 병합한다. 충돌이 나면 수정한다.

git push 명령으로 저장소에 반영한다.

아파치에서 특정 도메인에 대한 페이지를 모두 포워딩하기

아파치 웹서버에서 가상호스트를 설정하여 운영하던 중에 특정 가상호스트로 들어오는 모든 요청을 특정도메인의 특정페이지로 넘길 때의 설정 방법이다.

가상호스트 설정 파일에서 다음의 내용을 입력한다.

<VirtualHost *:80>
 RewriteEngine On
 RewriteCond %{HTTP_HOST} ^(request.domain.com) [NC]
 RewriteRule ^(.*)$ http://target.domain.com/target_page.jsp [R,L]
</VirtualHost>

지정된 도메인으로 오는 모든 요청이 지정된 페이지로 다 전환되어 버린다.

CentOS에 FreeTDS 설치하기

Step 1. 소스 다운로드

http://www.freetds.org 에서 FreeTDS 소스를 받는다.

Step 2. 압축 해제

다음의 명령으로 압축을 푼다.

gunzip freetds-stable.tgz

압축을 풀면 tar 파일이 하나 나온다. tar xvf 명령으로 압축을 해제한다.

tar xvf freetds-stable.tar

Step 3. 컴파일

압축 해제가 되면 freetds 폴더가 나오는데 여기에 들어가서 컴파일을 시작한다. configure / make / make install 명령으로 실행한다. 난 소스 설치할 때 위치를 지정해서 설치하는 편이라 –prefix 로 위치를 지정했다.

[dongbum@localhost freetds-0.91]$ ./configure --prefix=/usr/local/FreeTDS --enable-msdblib
[dongbum@localhost freetds-0.91]$ make
[dongbum@localhost freetds-0.91]$ make install

실행을 다 하고 나면 /usr/local/FreeTDS 에 freetds 관련 파일들이 설치된다.

Step 4. 라이브러리 파일 경로 설정

/etc/profile 에 LD_LIBRARY_PATH에 freetds의 라이브러리 파일들을 연결해준다. /etc/profile 파일을 vi로 연다음 다음처럼 추가한다.

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/FreeTDS/lib

설정이 적용되도록 재부팅을 한번 해준다.

Step 5. odbc.ini 파일 수정

/etc/odbc.ini 파일에 내가 사용할 DB의 이름을 설정해준다. 내 경우에는 freetds 외에도 sqlite 설정도 같이 추가하였다.

[dongbum@localhost log]$ cat /etc/odbc.ini
[111.222.333.444]
Driver = FreeTDS
Description = 111.222.333.444
Trace = No
Servername = 111.222.333.444
Database = 기본DB이름

[TEST_SQLITE3]
Description = TEST SQLITE
Driver = SQLite
Database = /test/sqlite/test_sqlite.db
StepAPI = NO

Step 6. odbcinst.ini 파일 수정

/etc/odbcinst.ini 파일에도 다음과 같은 설정을 추가해준다. 역시 SQLite를 사용하기 위한 설정도 추가하였다.

[FreeTDS]
Description = v0.64 with protocol v4.2
Driver = /usr/lib64/libtdsodbc.so
UsageCount = 5

[SQLite]
Description = ODBC for SQLite
Driver = /usr/local/lib/libsqlite3odbc.so
Setup = /usr/local/lib/libsqlite3odbc.so
FileUsage = 1
CPTimeout =
CPReuse =

/usr/lib64/libtdsodbc.so 파일은 /usr/local/FreeTDS/lib/libtdsodbc.so 파일을 향하도록 심볼릭링크를 걸어준다.

Step 7. freetds.conf 파일 수정

마지막으로 freetds.conf 파일을 수정해준다. 난 /usr/local/FreeTDS에 설치하였으므로 /usr/local/FreeTDS/etc/freetds.conf 파일을 수정해주면 된다.

[global] 섹션에

client charset = EUCKR
text size = 4290000000
tds version = 4.2

를 추가한다. 캐릭터셋과 tds 버전 등을 지정하는 문구 같은데 이 옵션에 대해 정확히는 나도 잘 모르겠다. 그리고 아까 추가한 서버이름을 그대로 추가해준다.

[111.222.333.444]
host = 111.222.333.444
port = 1433
tds version = 8.0

여기까지 다 설정하고나면 FreeTDS 사용이 가능하다.

리눅스에서 MSSQL 접속이 쉬운게 아니란걸 다시 한번 느낀다.