前置: 1.主机名请从默认的RaspberryPi 改为 test.com
代码语言:javascript复制sudo nano /etc/hostname
请将文件中的RaspberryPi改为 test.com
2.将树莓派的ip地址改为静态,此例中为172.16.0.68,网关出口为172.16.0.1
代码语言:javascript复制sudo nano /etc/dhcpcd.conf
在该文件的最末加上如下设定:
代码语言:javascript复制interface eth0
static ip_address=172.16.0.68/24
static routers=172.16.0.1
static domain_name_servers=114.114.114.114 8.8.8.8
3.将主机本身解析到172.16.0.68
代码语言:javascript复制sudo nano /etc/hosts
注释掉关于RaspberryPi的记录,增加如下一行:
代码语言:javascript复制172.16.0.68 test.com
4.重启pi
5.本例中在windows系统中使用putty提供的pscp.exe上传相关文件。
一、建立kms服务器 在树莓派3上建立kms服务器有很多种做法,这里介绍一种比较简单的,一种复杂的。
请在(一)和(二)之中任择其一!
(一)使用已经编辑好的kms服务器文件。 该文件由Hotbird64大神编写。 下载地址为https://forums.mydigitallife.net/threads/emulated-kms-servers-on-non-windows-platforms.50234/ 要下载需注册。 下载后的文件解包,我们需要的文件为:
binariesLinuxarmlittle-endianglibcvlmcsd-armv6hf-Raspberry-glibc
将文件改名为:vlmcsdpi
1、新建KMS文件夹
代码语言:javascript复制mkdir /home/pi/kms
2、上传kms文件 在win下,启动cmd或者powershell,进入pscp.exe所在文件夹,我将pscp.exe和vlmcsdpi都放在e:putty下面了。
代码语言:javascript复制cd e:putty
pscp e:puttyvlmcsdpi pi@172.16.0.68:/home/pi/kms/
输入pi的密码后上传成功。
3、赋予执行权限
代码语言:javascript复制chmod 777 /home/pi/kms/vlmcsdpi
4、设定开机自启动
代码语言:javascript复制sudo nano /etc/rc.local
在exit 0之前加入:
代码语言:javascript复制/home/pi/kms/vlmcsdpi -l /var/log/vlmcsd.log > /dev/null 2>&1
5、启动服务:
代码语言:javascript复制/home/pi/kms/vlmcsdpi -l /var/log/vlmcsd.log
日志文件就是:/var/log/vlmcsd.log
6、停止服务: 查找进程号,杀掉就可以
代码语言:javascript复制sudo ps -ef | grep vlmcsdpi
sudo kill -s 9 进程号
这个方法是搭建快速,升级方便。如果Hotbird64大神出了新版,升级只要将新版文件替换进去就可以。
(二)使用py-kms搭建kms服务器 1.安装git
代码语言:javascript复制sudo apt-get install git
2.在pi的家目录中下载py-kms:
代码语言:javascript复制git clone https://github.com/myanaloglife/py-kms
因为pi中自带了python,所以下载完以后就可以进行初步测试:
代码语言:javascript复制cd py-kms
python server.py
看到
代码语言:javascript复制TCP server listening at 0.0.0.0 on port 1688.
的提示为成功。按Ctrl c退出。
3.使用supervisor确保kms服务长期运行:
现将py-kms放入/usr/local/:
代码语言:javascript复制sudo cp -r py-kms /usr/local/
安装supervisor:
代码语言:javascript复制sudo apt-get install python-setuptools
sudo easy_install supervisor
写入配置文件
代码语言:javascript复制mv /etc/supervisord.conf /etc/supervisord.conf.bak
sudo nano /etc/supervisord.conf
内容为:
代码语言:javascript复制;/etc/supervisord.conf
[unix_http_server]
file = /var/run/supervisord.sock
chmod = 0777
chown= root:root
[inet_http_server]
port=*:9001
username = pi
password = yourpassword
[supervisorctl]
; 必须和'unix_http_server'里面的设定匹配
serverurl = unix:///var/run/supervisord.sock
[supervisord]
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
user=root ; (default is current user, required if root)
childlogdir=/var/log/ ; ('AUTO' child log dir, default $TEMP)
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[program:pykms]
command=python /usr/local/py-kms/server.py
autorestart=true
user=root
写入配置文件后,执行:
代码语言:javascript复制sudo chmod 777 /var/run
sudo chmod 777 /var/log
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
启动supervisor:
代码语言:javascript复制sudo supervisor
4.使supervisor开机启动:
代码语言:javascript复制sudo nano /etc/rc.local
在exit 0之前加入:
代码语言:javascript复制sudo supervisor
重启pi后,查看进程是否正常启动:
代码语言:javascript复制supervisorctl
正常的情况下,server.py应该是running。 使用quit退出。
5.对kms服务器进行测试:
代码语言:javascript复制cd /usr/local/py-kms
python client.py -v 172.16.0.68
测试结果为:
代码语言:javascript复制Connecting to 172.16.0.68 on port 1688...
Connection successful!
Sending RPC bind request...
RPC bind acknowledged.
则为成功。
二、使局域网中的机器可以自行激活 在开始此步之前,请确保:局域网中所有其他DHCP服务器均已经关闭!
1.建立/etc/resolv.dnsmasq.conf文件
代码语言:javascript复制sudo cp /etc/resolv.conf /etc/resolv.dnsmasq.conf
sudo nano /etc/resolv.dnsmasq.conf
删除文件中原有内容,新建内容如下:
代码语言:javascript复制nameserver 114.114.114.114
nameserver 8.8.8.8
2.安装用于测试DNS的软件
代码语言:javascript复制sudo apt-get install dnsutils
3.安装轻型dns转发服务器、dhcp服务器
代码语言:javascript复制sudo apt-get install dnsmasq
4.配置dnsmasq:
代码语言:javascript复制sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf
配置内容如下:
代码语言:javascript复制#指定上游服务器地址,由/etc/resolv.dnsmasq.conf文件内容决定
resolv-file=/etc/resolv.dnsmasq.conf
# 严格按照resolv.dnsmasq.conf中的顺序进行查找
strict-order
#监听地址
listen-address=172.16.0.68,127.0.0.1
#地址池设定
dhcp-range=172.16.0.100,172.16.0.200,255.255.255.0,6h
#设定局域网后缀名,重要,请务必设置
domain=test.com
#指定网关(路由出口)
dhcp-option=3,172.16.0.1
#dhcp-option=option:router,172.16.0.1
#指定地址分发时分配给客户端的DNS,除了本地dns服务器地址,为保险起见,加了其他dns地址
dhcp-option=option:dns-server,172.16.0.68,114.114.114.114
#server=114.114.114.114
#通常用于对于访问不存在的域名,禁止其跳转到运营商的广告站点。
bogus-nxdomain=114.114.114.114
#设定kms服务器响应
srv-host=_vlmcs._tcp,test.com,1688,0,100
#开启日志记录,指定日志文件路径及文件名
log-dhcp
log-facility=/var/log/dnsmasq.log
重启dns服务:
sudo service dnsmasq restart
5.测试命令如下:(请在windows系统中测试,请务必保证网络中其他dhcp服务器已经关闭,Windows系统开启了自动获得地址) 在win下,启动cmd或者powershell
代码语言:javascript复制ipconfig /renew
nslookup -type=srv _vlmcs._tcp
nslookup -q=srv _vlmcs._tcp.test.com
下面2个命令都必须反馈相同的结果:
代码语言:javascript复制服务器: test.com
Address: 172.16.0.68
_vlmcs._tcp.test.com SRV service location:
priority = 0
weight = 100
port = 1688
svr hostname = test.com
test.com internet address = 172.16.0.68