From 81f1fa4be35ff0f094bd0ad330de06331ab63ca9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 17 Jun 2026 04:40:21 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Sync=202026-06-17=2004:40:21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vlmcsd/Makefile | 67 +++++---- vlmcsd/files/40-vlmcsd | 42 ++++++ vlmcsd/files/{vlmcsd.conf => vlmcsd.config} | 2 +- vlmcsd/files/vlmcsd.ini | 27 ++++ vlmcsd/files/vlmcsd.init | 152 ++++++++++++++------ vlmcsd/src/Makefile | 35 +++++ 6 files changed, 249 insertions(+), 76 deletions(-) create mode 100644 vlmcsd/files/40-vlmcsd rename vlmcsd/files/{vlmcsd.conf => vlmcsd.config} (73%) mode change 100755 => 100644 mode change 100755 => 100644 vlmcsd/files/vlmcsd.ini mode change 100755 => 100644 vlmcsd/files/vlmcsd.init create mode 100644 vlmcsd/src/Makefile diff --git a/vlmcsd/Makefile b/vlmcsd/Makefile index 93354001..98f023d7 100644 --- a/vlmcsd/Makefile +++ b/vlmcsd/Makefile @@ -1,17 +1,12 @@ -# SPDX-License-Identifier: GPL-3.0-only -# -# Copyright (C) 2022 ImmortalWrt.org - include $(TOPDIR)/rules.mk PKG_NAME:=vlmcsd -PKG_RELEASE:=1 +PKG_VERSION:=svn1113 +PKG_RELEASE:=2 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/Wind4/vlmcsd.git -PKG_SOURCE_DATE:=2020-03-30 -PKG_SOURCE_VERSION:=70e03572b254688b8c3557f898e7ebd765d29ae1 -PKG_MIRROR_HASH:=skip +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://codeload.github.com/Wind4/vlmcsd/tar.gz/$(PKG_VERSION)? +PKG_HASH:=skip PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE @@ -22,17 +17,33 @@ PKG_BUILD_PARALLEL:=1 include $(INCLUDE_DIR)/package.mk define Package/vlmcsd - SECTION:=net - CATEGORY:=Network - TITLE:=A KMS Emulator in C - URL:=https://github.com/Wind4/vlmcsd - DEPENDS:=+libpthread - USERID:=vlmcsd:vlmcsd + SECTION:=net + CATEGORY:=Network + TITLE:=vlmcsd for OpenWRT + URL:=http://forums.mydigitallife.info/threads/50234 + DEPENDS:=+libpthread endef define Package/vlmcsd/description - KMS Emulator in C (currently runs on Linux including Android, FreeBSD, - Solaris, Minix, Mac OS, iOS, Windows with or without Cygwin) + vlmcsd is a KMS Emulator in C. +endef + +define Build/Prepare + $(call Build/Prepare/Default) + rm $(PKG_BUILD_DIR)/GNUmakefile +endef + +define Package/vlmcsd/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/vlmcsd $(1)/usr/bin/vlmcsd + $(INSTALL_DIR) $(1)/etc + $(INSTALL_BIN) ./files/vlmcsd.ini $(1)/etc/vlmcsd.ini + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_CONF) ./files/vlmcsd.config $(1)/etc/config/vlmcsd + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/vlmcsd.init $(1)/etc/init.d/vlmcsd + $(INSTALL_DIR) $(1)/etc/uci-defaults + $(INSTALL_BIN) ./files/40-vlmcsd $(1)/etc/uci-defaults/40-vlmcsd endef define Package/vlmcsd/conffiles @@ -40,20 +51,16 @@ define Package/vlmcsd/conffiles /etc/vlmcsd.ini endef -MAKE_FLAGS += \ - CC="$(TARGET_CC_NOCACHE)" \ - VLMCSD_VERSION="$(PKG_VERSION)" +define Package/vlmcsd/postinst-pkg +#!/bin/sh +[ -n "$${IPKG_INSTROOT}" ] && exit 0 -define Package/vlmcsd/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/bin/vlmcsd $(1)/usr/bin/vlmcsd +enabled="$$(uci -q get vlmcsd.config.enabled 2>/dev/null)" +if [ "$$enabled" = "1" ] && [ -x /etc/init.d/vlmcsd ]; then + /etc/init.d/vlmcsd enable >/dev/null 2>&1 || true +fi - $(INSTALL_DIR) $(1)/etc - $(INSTALL_BIN) ./files/vlmcsd.ini $(1)/etc/vlmcsd.ini - $(INSTALL_DIR) $(1)/etc/config - $(INSTALL_BIN) ./files/vlmcsd.conf $(1)/etc/config/vlmcsd - $(INSTALL_DIR) $(1)/etc/init.d - $(INSTALL_BIN) ./files/vlmcsd.init $(1)/etc/init.d/vlmcsd +exit 0 endef $(eval $(call BuildPackage,vlmcsd)) diff --git a/vlmcsd/files/40-vlmcsd b/vlmcsd/files/40-vlmcsd new file mode 100644 index 00000000..d31eb331 --- /dev/null +++ b/vlmcsd/files/40-vlmcsd @@ -0,0 +1,42 @@ +#!/bin/sh + +changed=0 + +if ! uci -q get vlmcsd.config >/dev/null 2>&1; then + uci -q batch <<'EOF' +set vlmcsd.config=vlmcsd +set vlmcsd.config.enabled='0' +set vlmcsd.config.auto_activate='1' +set vlmcsd.config.internet_access='0' +EOF + changed=1 +fi + +if ! uci -q get vlmcsd.config.enabled >/dev/null 2>&1; then + uci -q set vlmcsd.config.enabled='0' + changed=1 +fi + +if ! uci -q get vlmcsd.config.auto_activate >/dev/null 2>&1; then + autoactivate="$(uci -q get vlmcsd.config.autoactivate)" + if [ -n "$autoactivate" ]; then + uci -q set vlmcsd.config.auto_activate="$autoactivate" + else + uci -q set vlmcsd.config.auto_activate='1' + fi + changed=1 +fi + +if uci -q get vlmcsd.config.autoactivate >/dev/null 2>&1; then + uci -q delete vlmcsd.config.autoactivate + changed=1 +fi + +if ! uci -q get vlmcsd.config.internet_access >/dev/null 2>&1; then + uci -q set vlmcsd.config.internet_access='0' + changed=1 +fi + +[ "$changed" -eq 1 ] && uci commit vlmcsd + +exit 0 diff --git a/vlmcsd/files/vlmcsd.conf b/vlmcsd/files/vlmcsd.config old mode 100755 new mode 100644 similarity index 73% rename from vlmcsd/files/vlmcsd.conf rename to vlmcsd/files/vlmcsd.config index f89aa98a..99e4b6c9 --- a/vlmcsd/files/vlmcsd.conf +++ b/vlmcsd/files/vlmcsd.config @@ -1,4 +1,4 @@ config vlmcsd 'config' option enabled '0' - option auto_activate '0' + option auto_activate '1' option internet_access '0' diff --git a/vlmcsd/files/vlmcsd.ini b/vlmcsd/files/vlmcsd.ini old mode 100755 new mode 100644 index 5dc69e7f..fe1e52cf --- a/vlmcsd/files/vlmcsd.ini +++ b/vlmcsd/files/vlmcsd.ini @@ -16,6 +16,15 @@ #ePID/HwId设置为Windows中国政府版 (Enterprise G/GN) 显式 ;WinChinaGov = 06401-03858-000-555555-03-1033-17763.0000-2822018 / 01 02 03 04 05 06 07 08 +#使用自定义TCP端口 +;Port = 1688 + +#监听所有IPv4地址(默认端口1688) +;Listen = 0.0.0.0:1688 + +#监听所有IPv6地址(默认端口1688) +;Listen = [::]:1688 + #程序启动时随机ePIDs(只有那些未显式指定的) ;RandomizationLevel = 1 @@ -31,6 +40,12 @@ #每次请求后立即断开客户端 ;DisconnectClientsImmediately = yes +#写一个pid文件(包含vlmcsd的进程ID的文件) +;PidFile = /var/run/vlmcsd.pid + +#写日志到/var/log/vlmcsd.log +;LogFile = /var/log/vlmcsd.log + #创建详细日志 ;LogVerbose = true @@ -40,8 +55,20 @@ #设置更新间隔7天 ;RenewalInterval = 7d +#运行程序的用户为vlmcsduser +;user = vlmcsduser + +#运行程序的组为vlmcsdgroup +;group = vlmcsdgroup + #禁用或启用RPC的NDR64传输语法(默认启用) ;UseNDR64 = true #禁用或启用RPC的绑定时间特性协商(默认启用) ;UseBTFN = true + +#Windows 10/ Windows 11 KMS 安装激活密钥 +#Windows 10/11 Pro:W269N-WFGWX-YVC9B-4J6C9-T83GX +#Windows 10/11 Enterprise:NPPR9-FWDCX-D2C8J-H872K-2YT43 +#Windows 10/11 Pro for Workstations:NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J + diff --git a/vlmcsd/files/vlmcsd.init b/vlmcsd/files/vlmcsd.init old mode 100755 new mode 100644 index 7d559b22..62fc8afa --- a/vlmcsd/files/vlmcsd.init +++ b/vlmcsd/files/vlmcsd.init @@ -1,57 +1,121 @@ #!/bin/sh /etc/rc.common -START=99 USE_PROCD=1 +START=90 +STOP=10 -DNSMASQ_UCI_CONFIG="$(uci -q show "dhcp.@dnsmasq[0]" | awk 'NR==1 {split($0, conf, /[.=]/); print conf[2]}')" -if [ -f "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG" ];then - DNSMASQ_VLMCSD="$(awk -F '=' '/^conf-dir=/ {print $2}' "/tmp/etc/dnsmasq.conf.$DNSMASQ_UCI_CONFIG")/dnsmasq-vlmcsd.conf" -else - DNSMASQ_VLMCSD="/tmp/dnsmasq.d/dnsmasq-vlmcsd.conf" -fi +NAME="vlmcsd" +CONF="$NAME" +PROG="/usr/bin/vlmcsd" +INI_FILE="/etc/vlmcsd.ini" +KMS_PORT="1688" +DHCP_SECTION="$NAME" + +normalize_bool() { + case "$1" in + 1|on|true|yes|enabled) + return 0 + ;; + *) + return 1 + ;; + esac +} + +config_get_bool_compat() { + local __var="$1" + local section="$2" + local option="$3" + local default="${4:-0}" + local legacy_option="$5" + local value + + config_get value "$section" "$option" + if [ -z "$value" ] && [ -n "$legacy_option" ]; then + config_get value "$section" "$legacy_option" + fi + + if normalize_bool "${value:-$default}"; then + eval "$__var=1" + else + eval "$__var=0" + fi +} + +reload_dnsmasq() { + [ -x /etc/init.d/dnsmasq ] || return 0 + + /etc/init.d/dnsmasq reload >/dev/null 2>&1 || \ + /etc/init.d/dnsmasq restart >/dev/null 2>&1 || true +} + +sync_dns_srv() { + local enabled="$1" + local before after hostname domain srv target + + before="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)" + uci -q delete "dhcp.${DHCP_SECTION}" + + if [ "$enabled" = "1" ]; then + hostname="$(uci -q get system.@system[0].hostname)" + domain="$(uci -q get dhcp.@dnsmasq[0].domain)" + + [ -n "$hostname" ] || hostname="OpenWrt" + + srv="_vlmcs._tcp" + target="$hostname" + if [ -n "$domain" ]; then + srv="${srv}.${domain}" + target="${target}.${domain}" + fi + + uci -q set "dhcp.${DHCP_SECTION}=srvhost" + uci -q set "dhcp.${DHCP_SECTION}.srv=${srv}" + uci -q set "dhcp.${DHCP_SECTION}.target=${target}" + uci -q set "dhcp.${DHCP_SECTION}.port=${KMS_PORT}" + fi + + after="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)" + [ "$before" = "$after" ] && return 0 + + uci -q commit dhcp + reload_dnsmasq +} start_service() { local enabled auto_activate internet_access - config_load "vlmcsd" - config_get_bool enabled "config" "enabled" "0" - config_get_bool auto_activate "config" "auto_activate" "0" - config_get_bool internet_access "config" "internet_access" "0" + config_load "$CONF" + config_get_bool_compat enabled config enabled 0 + config_get_bool_compat auto_activate config auto_activate 1 autoactivate + config_get_bool_compat internet_access config internet_access 0 - [ "$enabled" -eq "1" ] || return 1 - - if [ "$auto_activate" -eq "1" ];then - hostname="$(uci get system.@system[0].hostname)" - echo "srv-host=_vlmcs._tcp,$hostname,1688,0,100" > "$DNSMASQ_VLMCSD" - /etc/init.d/dnsmasq restart 2>"/dev/null" + if [ "$enabled" -ne 1 ]; then + sync_dns_srv 0 + return 1 fi - procd_open_instance "vlmcsd" - procd_set_param command /usr/bin/vlmcsd - procd_append_param command -D - procd_append_param command -i "/etc/vlmcsd.ini" - procd_append_param command -l syslog - procd_append_param command -L "0.0.0.0:1688" - procd_append_param command -L "[::]:1688" + [ -x "$PROG" ] || return 1 - procd_set_param file "/etc/vlmcsd.ini" + sync_dns_srv "$auto_activate" + + procd_open_instance "$NAME" + procd_set_param command "$PROG" -D -i "$INI_FILE" -L "0.0.0.0:${KMS_PORT}" + procd_set_param file "$INI_FILE" procd_set_param respawn + procd_set_param stdout 1 + procd_set_param stderr 1 - procd_set_param user vlmcsd - procd_set_param group vlmcsd - procd_add_jail vlmcsd ronly log - procd_add_jail_mount "/etc/vlmcsd.ini" - - if [ "$internet_access" -eq "1" ];then + if [ "$internet_access" -eq 1 ]; then procd_open_data json_add_array firewall json_add_object "" - json_add_string type rule - json_add_string name "Allow-vlmcsd-tcp" - json_add_string proto "tcp" - json_add_string src "*" - json_add_string dest_port "1688" - json_add_string target "ACCEPT" + json_add_string type rule + json_add_string name "Allow-vlmcsd" + json_add_string proto "tcp" + json_add_string src "*" + json_add_string dest_port "$KMS_PORT" + json_add_string target "ACCEPT" json_close_object json_close_array procd_close_data @@ -61,15 +125,13 @@ start_service() { } stop_service() { - rm -f "$DNSMASQ_VLMCSD" - /etc/init.d/dnsmasq restart 2>"/dev/null" -} - -reload_service() { - stop - start + sync_dns_srv 0 } service_triggers() { - procd_add_reload_trigger vlmcsd + procd_add_reload_trigger "$CONF" dhcp system +} + +reload_service() { + restart } diff --git a/vlmcsd/src/Makefile b/vlmcsd/src/Makefile new file mode 100644 index 00000000..cce6da15 --- /dev/null +++ b/vlmcsd/src/Makefile @@ -0,0 +1,35 @@ +SRCDIR := src +BINDIR := bin +OBJDIR := build + +TARGETS := $(BINDIR)/vlmcs $(BINDIR)/vlmcsd + +.PHONY: all +all: $(BINDIR) $(TARGETS) + +$(BINDIR)/vlmcs: $(OBJDIR)/vlmcs.o $(OBJDIR)/kmsdata-full.o $(OBJDIR)/crypto.o \ + $(OBJDIR)/kms.o $(OBJDIR)/endian.o $(OBJDIR)/output.o \ + $(OBJDIR)/shared_globals.o $(OBJDIR)/helpers.o \ + $(OBJDIR)/network.o $(OBJDIR)/rpc.o \ + $(OBJDIR)/crypto_internal.o $(OBJDIR)/dns_srv.o + $(CC) $(LDFLAGS) -o $@ $^ + +$(BINDIR)/vlmcsd: $(OBJDIR)/vlmcsd.o $(OBJDIR)/kmsdata.o $(OBJDIR)/crypto.o \ + $(OBJDIR)/kms.o $(OBJDIR)/endian.o $(OBJDIR)/output.o \ + $(OBJDIR)/shared_globals.o $(OBJDIR)/helpers.o \ + $(OBJDIR)/network.o $(OBJDIR)/rpc.o \ + $(OBJDIR)/crypto_internal.o + $(CC) $(LDFLAGS) -o $@ $^ + +$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR) + $(CC) $(CFLAGS) -c $< -o $@ + +$(OBJDIR): + @mkdir -p $(OBJDIR) + +$(BINDIR): + @mkdir -p $(BINDIR) + +.PHONY: clean +clean: + @rm -rf $(OBJDIR) $(BINDIR)