kenshin

编译godns

| Comments

*nix系统编译godns的详细步骤

1.安装golang

1
2
3
4
5
6
7
8
9
10
11
12
13
14

$ sudo  wget https://go.googlecode.com/files/go1.1.1.src.tar.gz

$ sudo tar zxvf go1.1.1.src.tar.gz

$ cd go/src

$ sudo ./all.bash

$ sudo mv go /usr/local/go

$ sudo cp /usr/local/go/bin/*  /usr/local/bin 

$ sudo ln -s  /usr/local/bin/go /usr/bin/go

2.设置环境变量

1
2
3
4
5
6
7
8
9
10
11
$ vim ~/.bashrc

export PATH=$PATH:/usr/local/go/pkg/tool/linux_amd64/

GOBIN=/usr/local/go/bin

GOROOT=/usr/local/go/

GOPATH=$HOME/godns

export GOBIN GOROOT GOPATH

设置完成后,运行go env, 看设置是否都生效

3.部署代码

1
$ go get github.com/kenshinx/godns

4.编译

1
2
$ cd $GOPATH/src/github.com/kenshinx/godns
$ go build -o godns *.go

5.安装

1
2
sudo cp godns /usr/local/bin/ && sudo chown root:root /usr/local/bin/godns
sudo cp godns.conf /etc/godns.conf  && sudo chown root:root /etc/godns.conf

因为要绑定53端口,因此要以root权限运行。

6.运行

1
sudo nohup /usr/local/bin/godns -c /etc/godns &

由于Go语言不能像C,C++一样通过fork的方式实现Daemon进程,因此只能通过nohup的方式在后台运行。 但是nohup的方式运行,管理起来不是很方便,要结束,重启进程还得自己写shell管理脚本。 最好的daemonize方式是通过一些外部工具, 例如supervisord,下面是一个supervisor的配置示例。

1
2
3
4
5
6
7
8
9

[program:godns]
command=/usr/local/bin/godns -c /etc/godns.conf
autostart=true
autorestart=true
user=root
stdout_logfile_maxbytes = 50MB
stdoiut_logfile_backups = 20
stdout_logfile = /var/log/godns.log

Comments