<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Flexlm on Hacper&#39;s Blog</title>
    <link>https://hacperme.com/tags/flexlm/</link>
    <description>Recent content in Flexlm on Hacper&#39;s Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh</language>
    <lastBuildDate>Wed, 05 Aug 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://hacperme.com/tags/flexlm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>MAC 绑定 License 的通用解决方案（Docker/WSL 双方案）</title>
      <link>https://hacperme.com/posts/notes/2026/mac-license-solution/</link>
      <pubDate>Wed, 05 Aug 2026 00:00:00 +0800</pubDate>
      <guid>https://hacperme.com/posts/notes/2026/mac-license-solution/</guid>
      <description>商用工具链 license 绑定 MAC 地址时的通用解法：Docker 指定 MAC 或 WSL 新增 bond 网卡</description>
      <content:encoded><![CDATA[<h1 id="mac-绑定-license-的通用解决方案">MAC 绑定 License 的通用解决方案</h1>
<h2 id="背景">背景</h2>
<p>很多商用工具链（Cadence Xtensa XCC、IAR、部分 Keil 版本等）使用 <strong>FlexLM/FlexNet</strong> 做许可证管理，license 文件通过 <code>HOSTID</code> 字段<strong>绑定主机 MAC 地址</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">INCREMENT XT_XCC_TIE_xxxxxx xtensad 15.0 30-dec-2026 uncounted \
</span></span><span class="line"><span class="cl">    xxxxxxxx HOSTID=112233445566 SN=xxx TS_OK \
</span></span><span class="line"><span class="cl">    SIGN=&#34;xxxx xxxx xxxx ...&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>HOSTID=112233445566</code> 即绑定 MAC <code>11:22:33:44:55:66</code>。换了机器（MAC 不匹配）就无法编译，找厂商重发 license 又费时费力。</p>
<h2 id="思路">思路</h2>
<p>FlexLM 校验的是<strong>系统网卡上是否存在 license 中绑定的 MAC 地址</strong>。所以核心解法就是：<strong>让当前系统存在一个该 MAC 地址的网卡</strong>。两个不污染物理网络的方式：</p>
<h2 id="方案一docker-容器指定-mac推荐">方案一：Docker 容器指定 MAC（推荐）</h2>
<p>Docker 创建容器时可以指定网卡 MAC 地址，容器内跑编译即可命中 license：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker run --rm -it <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --hostname my-dev-host <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>:/project <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -v /opt/:/opt/ <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  -v /opt/license/:/license/ <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --mac-address ff:ff:ff:ff:ff:ff <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  --env-file docker.env <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  your-registry/toolchain_ubuntu20.04:latest <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>  /bin/bash -c <span class="s1">&#39;cd /project/sdk/ &amp;&amp; ./build.sh -c &amp;&amp; ./build.sh -all&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>要点：</p>
<ul>
<li><code>--mac-address</code>：指定容器内网卡的 MAC（必须与 license HOSTID 对应）</li>
<li><code>-v /opt/license/:/license/</code>：挂载 license 文件目录</li>
<li><code>-v $(pwd):/project</code>：挂载工程</li>
<li><code>--rm</code>：编译完自动删除，宿主机网络零污染</li>
</ul>
<blockquote>
<p>适合有 Docker 的环境，一次性镜像，可复现、可交付。</p>
</blockquote>
<h2 id="方案二wsl-新增-bond-网卡指定-mac">方案二：WSL 新增 bond 网卡指定 MAC</h2>
<p>WSL2 环境（无 Docker）可以用 <code>ip link</code> 创建一个虚拟 bond 网卡并直接设置 MAC：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo ip link add bond0 <span class="nb">type</span> bond
</span></span><span class="line"><span class="cl">sudo ip link <span class="nb">set</span> bond0 address 34:5a:60:39:23:bb
</span></span><span class="line"><span class="cl">./build.sh -all
</span></span></code></pre></td></tr></table>
</div>
</div><ul>
<li><code>bond0</code> 是虚拟网卡，不影响物理网卡</li>
<li>设置 MAC 后系统就能被 license 校验命中</li>
<li>注意：WSL 重启后 bond0 会消失，需重新创建（可写进 <code>.bashrc</code> 或启动脚本）</li>
</ul>
<h2 id="小结">小结</h2>
<ul>
<li><strong>Docker <code>--mac-address</code></strong>：干净、可复现，推荐首选</li>
<li><strong>WSL bond 网卡</strong>：轻量、无 Docker 时兜底</li>
<li>本质都是&quot;虚拟网卡指定 MAC 命中 FlexLM 校验&quot;——一个思路，两个载体</li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
