在树莓派3(RaspberryPi 3B

前置: 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/ 要下载需注册。 下载后的文件解包,我们需要的文件为:

\binaries\Linux\arm\little-endian\glibc\vlmcsd-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:\putty\vlmcsdpi 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