목차

미니 서버 문서

주요 토픽들

Ubuntu 16.04 설치와 운영 노트

모델과 사양

아파치2 SSL 구축

참고 자료

# apt-get install apache2
# a2enmod ssl
# service apache2 restart
# mkdir /etc/apache2/ssl
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt # Common Name 에서 도메인 이름을 제대로 적어줄 것.

default-ssl 파일 조정. ServerAdmin, ServerName 올바르게 조정하고 바로 아래에,

SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

그리고 사이트 열기.

# a2ensite default-ssl
# service apache2 restart

여기서 서버가 제대로 동작하지 않으면, 에러 로그를 살펴 보자. Server should be SSL-aware but has no certificate configured [Hint: SSLCertificateFile] 이런 로그를 발견한다면 제대로 설정이 안 된 것이다.

가상 호스트 설정 또한 위와 마찬가지로 각각의 ServerName 마다 SSLEngine/SSLCertificateFile/SSLCertificateKeyFile 항목을 설정한다. 마지막으로 SSL에서도 VirtualHost를 하도록

NameVirtualHost *:443
Listen 443

설정도 추가한다.

이건 우분투 관련 설정이므로 적당히 고쳐서 써야 한다는 점 주의.

사운드 설정

$ sudo apt-get remove --purge alsa-base pulseaudio
$ sudo apt-get install alsa-base pulseaudio
$ sudo alsa force-reload

alsamixer 에서 MUTED 해제. 'MM'이라고 써져 있음 안됨.

블루투스 사용

# apt-get install bluez python-gobject python-dbus

블루투스 스피커를 사용해 보고 싶어 작업을 진행해 보았다. bluez, bluez-tools 패키지 설치. 설치 후 장비 검색 명령

$ hcitool scan
Scanning ...
	40:EF:4C:15:DF:B2	IA160
	28:E3:47:83:C2:0A	laptop

40:EF:4C:15:DF:B2 주소의 'IA160'이 내가 연결하고 싶은 블루투스 스피커이다.

서버에 사운드 설정을 하지 않아서 pulseaudio를 설치했다.

$ sudo apt-get install pulseaudio bluez-alsa
$ sudo update-rc.d pulseaudio defaults
$ sudo update-rc.d bluetooth defaults

bluetooth_sound 문서에서 기록

BitTorrent Sync 사용

vagrant와 이를 이용한 virtual machine 내역을 공유하기 위하여 NAS에 BitTorrent Sync를 이용해 보았다. 대용량 파일 변화 감지에 매우 유용하므로, 꽤 괜찮은 선택이 될 듯하다.

우선 이전 btsyncforrpi 문서에 많은 내용이 우선 기록되어 있다. 문서를 작성하는 2015년 11월까지도 리눅스는 별도의 GUI는 제공하지 않으므로, 데스크탑에서는 적당히 btsync를 꺼내 쓰면 될 것 같다.

NAS Config

별도의 사용자 btsync를 만들고 홈디렉토리에 .sync 디렉토리를 생성하고 여기에 모든 설정 파일등을 집어 넣는 식으로 작성하였다 이와 관련해서는 이전 문서를 참고.

{
  "device_name": "MiniServer",
  "listening_port" : 0, // 0 - randomize port

/* storage_path dir contains auxilliary app files if no storage_path field: .sync dir created in the directory
   where binary is located. otherwise user-defined directory will be used */
  "storage_path" : "/home/btsync/.sync",

/* set location of pid file */
  "pid_file" : "/home/btsync/.sync/btsync.pid",

/* use UPnP for port mapping */
  "use_upnp" : true,

/* limits in kB/s. 0 - no limit */
  "download_limit" : 0,
  "upload_limit" : 0,

/* proxy configuration */
// "proxy_type" : "socks4", // Valid types: "socks4", "socks5", "http_connect". Any other value means no proxy
// "proxy_addr" : "192.168.1.2", // IP address of proxy server.
// "proxy_port" : 1080,
// "proxy_auth" : false, // Use authentication for proxy. Note: only username/password for socks5 (RFC 1929) is supported, and it is not really secure
// "proxy_username" : "user",
// "proxy_password" : "password",

  "webui" :
  {
    "listen" : "0.0.0.0:8888" // remove field to disable WebUI

/* preset credentials. Use password or password_hash */
//  ,"login" : "admin"
//  ,"password" : "password"
//  ,"password_hash" : "some_hash" // password hash in crypt(3) format
//  ,"allow_empty_password" : false // Defaults to true
/* ssl configuration */
//  ,"force_https" : true // disable http
//  ,"ssl_certificate" : "/path/to/cert.pem"
//  ,"ssl_private_key" : "/path/to/private.key"

/* directory_root path defines where the WebUI Folder browser starts (linux only). Default value is / */
//  ,"directory_root" : "/home/user/MySharedFolders/"

/* directory_root_policy defines how directory_root is used (linux only).
   Valid values are:
     "all" - accepts directory_root and its subdirectories for 'getdir' and 'adddir' actions
     "belowroot" - accepts directory_root's subdirectories for 'getdir' and 'adddir' actions,
     but denies attempts to use 'adddir' to create directories directly within directory_root
   Default value is "all". */
//  ,"directory_root_policy" : "all"

/* dir_whitelist defines which directories can be shown to user or have folders added (linux only)
   relative paths are relative to directory_root setting */
//  ,"dir_whitelist" : [ "/home/user/MySharedFolders/personal", "work" ]
  }

/* !!! if you set shared folders in config file WebUI will be DISABLED !!!
   shared directories specified in config file  override the folders previously added from WebUI. */

  , "shared_folders" :
  [
    /* {
      "secret" : "MY_SECRET_1", // required field - use --generate-secret in command line to create new secret
      "dir" : "/home/user/bittorrent/sync_test", // * required field
      "use_relay_server" : true, //  use relay server when direct connection fails
      "use_tracker" : true,
      "use_dht" : false,
      "search_lan" : true,
      "use_sync_trash" : true, // enable SyncArchive to store files deleted on remote devices
      "overwrite_changes" : false, // restore modified files to original version, ONLY for Read-Only folders
      "known_hosts" : // specify hosts to attempt connection without additional Dsearch
      [
        "192.168.1.2:44444"
      ]
    } */
    {
      "secret"            : "<code>",
      "dir"               : "/home/btsync/<path>",
      "use_relay_server"  : true,
      "use_tracker"       : true,
      "search_lan"        : true,
      "use_sync_trash"    : true,
      "overwrite_changes" : false,
      "known_hosts"       : [
        "192.168.0.4:48867"
      ]
    }
  ]

/* Advanced preferences can be added to config file. Info is available at "http://help.getsync.com/customer/portal/articles/1902048-sync-advanced-preferences--more-options"
For example see folder_rescan_interval below */
// "folder_rescan_interval" : "86400"

}

이 정도 예로 만들면 될 것 같다. 아래는 우분투에서 쓸 init script

#!/bin/sh
### BEGIN INIT INFO
# Provides: btsync
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Multi-user daemonized version of btsync.
# Description: Starts the btsync daemon for all registered users.
### END INIT INFO

# Replace with linux users you want to run BTSync clients for
BTSYNC_USERS="btsync"
DAEMON=/usr/local/bin/btsync

start() {
  for btsuser in $BTSYNC_USERS; do
    HOMEDIR=`getent passwd $btsuser | cut -d: -f6`
    config=$HOMEDIR/.sync/config.json
    if [ -f $config ]; then
      echo "Starting BTSync for $btsuser"
      start-stop-daemon -b -o -c $btsuser -S -u $btsuser -x $DAEMON -- --config $config
    else
      echo "Couldn't start BTSync for $btsuser (no $config found)"
    fi
  done
}

stop() {
  for btsuser in $BTSYNC_USERS; do
    dbpid=`pgrep -fu $btsuser $DAEMON`
    if [ ! -z "$dbpid" ]; then
      echo "Stopping btsync for $btsuser"
      start-stop-daemon -o -c $btsuser -K -u $btsuser -x $DAEMON
    fi
  done
}

status() {
  for btsuser in $BTSYNC_USERS; do
    dbpid=`pgrep -fu $btsuser $DAEMON`
    if [ -z "$dbpid" ]; then
      echo "btsync for USER $btsuser: not running."
    else
      echo "btsync for USER $btsuser: running (pid $dbpid)"
    fi
  done
}

case "$1" in
 start)
start
;;
stop)
stop
;;
restart|reload|force-reload)
stop
start
;;
status)
status
;;
*)
echo "Usage: /etc/init.d/btsync {start|stop|reload|force-reload|restart|status}"
exit 1
esac

exit 0