编译Mac系统下无流量限制的蓝灯

蓝灯作为一个科学上网工具还是不错的,特别是可以免费试用,不过每个月有800MB流量的限制,对于大多数不看视频的人来说够用了。偶尔看到ilanyu的博客《lantern编译过程》里提到,从源码编译的没有流量限制,于是便想试一试。博客里面讲到了如何编译Linux和Windows版的,但正好我用的是Mac...,只能自己动手,丰衣足食了。

ilanyu是通过docker镜像来编译的,这样可以省去搭建环境的麻烦。但是我试了一下,镜像里面应该没有安装编译Mac版依赖的一些东西(这些依赖写在Makefile里面),然后我在容器里面去安装的时候,一直下载不下来,所以我就索性直接在自己本地编译了。所以主要是一些依赖环境的搭建,下面记录一下整个过程。

步骤1. 下载蓝灯代码。

git clone https://github.com/getlantern/lantern.git

步骤2. 修改Makefile。这里主要修改一下版本和时间,不然可能到时候会强制升级,升级后又会限制流量了。在Makefile里面找到GIT_REVISIONGIT_REVISION_DATE两个变量,修改的大一些。比如我的修改如下:

GIT_REVISION := 9.9.9
GIT_REVISION_DATE := 2020-11-15 00:54:06 -0800

步骤3. 安装一些依赖的包。

npm config set registry https://registry.npm.taobao.org
sudo npm install -g appdmg
sudo npm install -g svgexport
sudo npm install -g gulp-cli

如果还提示依赖其他的,请自行安装。

步骤4. 蓝灯的是用golang写的,但是不知道为啥,自己fork了一份golang。所以如果用官方的go编译会编译不通过。因为有个变量在官方的go标准库里面没有。所以需要稍微修改一下代码。修改src/github.com/getlantern/flashlight/proxied/proxied.gosrc/github.com/getlantern/flashlight/client/reverseproxy.go,将里面的MaxIdleTime改为IdleConnTimeout,并且注释掉transport.EnforceMaxIdleTime()tr.EnforceMaxIdleTime()

哦,对了,还得安装golang环境...这个直接去go官方下个dmg的包安装一下就可以了。

步骤5. 执行以下命令编译即可:

VERSION=9.9.9
export VERSION
make package-darwin

然后可能出现下面这个错误:

➜  lantern git:(devel) ✗ make package-darwin
Building darwin/amd64...
Build tags:
Extra ldflags: -X github.com/getlantern/flashlight.compileTimePackageVersion=9.9.9
Generating distribution package for darwin/amd64 manoto...
Developer ID Application: Brave New Software Project, Inc: no identity found
make: *** [package-darwin-manoto] Error 1

如果看到这个,不用管,这是因为在生成dmg文件的时候因为签名的问题而失败了。但是这个时候蓝灯文件(Lantern.app)已经编译好了,只是没有打包成dmg文件而已。

当然,大家还是尽量支持正版...本文只是探索一下编译方法。


已有 35 条评论

  1. tt

    额,小白,怎么编译代码啊,表示看不明白啊。今天才下载的蓝灯,会不会也有编译的问题在?

    tt 回复
  2. tt

    额,小白,怎么编译代码啊,表示看不明白啊。今天才下载的蓝灯,会不会也有编译的问题在?

    tt 回复
  3. 金

    为啥报错 Missing "node" command.
    make: * [src/github.com/getlantern/flashlight/ui/resources.go] Error 1

    回复
    1. 时间轨迹
      @金

      可能代码有更新了吧~

      时间轨迹 博主 回复
    2. xuewei
      @金

      我也是这个问题

      xuewei 回复
  4. kongql

    如果我只是需要更改HTTP上面的代理IP呢?

    kongql 回复
    1. 时间轨迹
      @kongql

      默认就是只代理HTTP的流量呀

      时间轨迹 博主 回复
  5. 腾时

    群主请问,哪些代码是达到800MB流量后限速的? 限速能从代码上解决吗

    腾时 回复
    1. 时间轨迹
      @腾时

      这个不太清楚,我翻墙主要是为了使用Google Search和Gmail,所以限速没什么影响~

      时间轨迹 博主 回复
  6. gdod

    我编译成功后试了试,好像还是限速的吧,很慢

    gdod 回复
    1. 时间轨迹
      @gdod

      这种只是不限流量,不是不限速

      时间轨迹 博主 回复
  7. 啦啦啦

    之前一直都好好的,然后最近发现 5 分钟后 都会退出,mac 下的

    啦啦啦 回复
    1. 时间轨迹
      @啦啦啦

      这很奇怪啊,你可以从Terminal启动,然后看下日志

      时间轨迹 博主 回复
  8. dook

    最近有没有发现,mac编译好的,运行一会就自动退出了。

    dook 回复
    1. 时间轨迹
      @dook

      没有呀...

      时间轨迹 博主 回复
  9. 小陈

    楼主您好~我在Mac下编译,但是出了一个error,如下所示,“The specified item could not be found in the keychain”,请问这个是怎么回事?先谢谢了~

    Building darwin/amd64...
    Build tags:
    Extra ldflags: -X github.com/getlantern/flashlight.compileTimePackageVersion=9.9.9
    Generating distribution package for darwin/amd64 manoto...
    error: The specified item could not be found in the keychain.
    make: * [package-darwin-manoto] Error 1

    小陈 回复
    1. 时间轨迹
      @小陈

      抱歉,最近比较忙没太关注网站,才看到。这个错误提示有点少,我也看不出来是什么原因,感觉像是哪个工具的问题,你先看下lantern.app文件编译出来了没有,这个好像是打包的时候出的错误,不一定有影响

      时间轨迹 博主 回复
      1. 小陈
        @时间轨迹

        hi,感谢楼主的回复。我试了几次lantern.app没有编译出来。错误提示只有上面那些。

        小陈 回复
  10. 佛前一粒沙

    楼主我就想问问,windows下是不是也可以通过这种方式来进行编译呢?还是有其他方法?

    佛前一粒沙 回复
    1. 时间轨迹
      @佛前一粒沙

        没编译过Windows的,不过应该是一样的吧

      时间轨迹 博主 回复
  11. salt

    @时间轨迹mac版本生成成功了,谢谢
    但是在mac上生成windows版本会报错 这是什么情况呢?
    Build tags:
    Extra ldflags: -X github.com/getlantern/flashlight.compileTimePackageVersion=9.9.9
    INSTALLER_RESOURCES="installer-resources/windows" && \

    rm -f $INSTALLER_RESOURCES/.packaged-lantern.yaml && \
    rm -f $INSTALLER_RESOURCES/lantern.yaml && \
    cp installer-resources/.packaged-lantern.yaml $INSTALLER_RESOURCES/.packaged-lantern.yaml && \
    cp installer-resources/lantern.yaml $INSTALLER_RESOURCES/lantern.yaml && \
    cp "lantern_windows_386.exe" "$INSTALLER_RESOURCES/lantern.exe" && \
    cat $INSTALLER_RESOURCES/lantern.exe | bzip2 > update_windows_386.bz2 && \
    ls -l lantern_windows_386.exe update_windows_386.bz2 && \
    makensis -V1 -DVERSION=$VERSION installer-resources/windows/lantern.nsi && \
    cp "$INSTALLER_RESOURCES/lantern-installer-unsigned.exe" "lantern-installer.exe" && \
    cp installer-resources/.packaged-lantern-manoto.yaml $INSTALLER_RESOURCES/.packaged-lantern.yaml && \
    cp installer-resources/lantern.yaml $INSTALLER_RESOURCES/lantern.yaml && \
    makensis -V1 -DVERSION=$VERSION installer-resources/windows/lantern.nsi && \
    cp "$INSTALLER_RESOURCES/lantern-installer-unsigned.exe" "lantern-installer-manoto.exe" && \
    echo "-> lantern-installer.exe and lantern-installer-manoto.exe"

    -rwxr-xr-x 1 yangxiaoyu staff 14180864 4 2 22:04 lantern_windows_386.exe
    -rw-r--r-- 1 yangxiaoyu staff 5115728 4 2 22:04 update_windows_386.bz2
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    warning: !warning: MUI_LANGUAGE should be inserted after the MUI_[UN]PAGE_* macros (macro:MUI_LANGUAGE:9)
    Unable to convert processed string "سیستم نصب نال‌سافت v12-Dec-2016.cvs" to codepage 1256
    Assertion failed: (cbMB), function find, file Source/strlist.cpp, line 131.
    /bin/bash: line 1: 28669 Abort trap: 6 makensis -V1 -DVERSION=$VERSION installer-resources/windows/lantern.nsi
    make: * [package-windows] Error 134

    salt 回复
    1. 时间轨迹
      @salt

      我没有在Mac上面编译过Windows版本的,不过建议在Win上面去编译,问题应该会少点

      时间轨迹 博主 回复
  12. 马国辉

    src/github.com/getlantern/flashlight/client/reverseproxy.go 这个文件中注释掉这一行, 行号:22
    //transport.EnforceIdleConnTimeout()

    src/github.com/getlantern/flashlight/client/reverseproxy.go 这个文件中注释掉这一行,行号:392
    //tr.EnforceIdleConnTimeout()
    我编译的时候就是这么处理的。

    最后可以执行 make package-darwin VERSION=9.9.9,就不回报那个 VERSION environment value is required 的错误了

    马国辉 回复
    1. 时间轨迹
      @马国辉

      嗯,因为标准的Go的Transport类型里面是没有lantern使用的MaxIdleTime成员的,但是有一个功能一样的IdleConnTimeout成员。

      时间轨迹 博主 回复
  13. 马国辉

    还是要自己写啊?

    马国辉 回复
    1. 时间轨迹
      @马国辉

      现在电脑不在跟前,我记得就在源码根目录下的~

      时间轨迹 博主 回复
      1. 马国辉
        @时间轨迹

        我在到git的这个目录下看了,没有。我正琢磨怎么写呢。哈哈,那您有时间了麻烦您看下,辛苦您了。

        马国辉 回复
        1. 时间轨迹
          @马国辉

          我刚用手机看了下,就在蓝灯的源码根目录下,你是不是看的不是蓝灯的源码目录呀?

          时间轨迹 博主 回复
          1. 时间轨迹
            @马国辉

            你贴下错误吧,这两天在外面,看不了源码[晕]

            时间轨迹 博主
          2. 马国辉
            @时间轨迹

            嗯,我刚才也弄完了。我看着没有VERSION这个提示,后来我自己处理了一下,使用了

            make package-darwin VERSION=9.9.9之后,就没有问题了。

            还有一个问题就是我使用那个git文件之后,两个文件中报错,我注释掉的内容和您在文中给出的不以样。文件还是那两个文件。我记得一个是在392行,另一个是在22行报错的。刚才也没有记下来究竟那个文件的哪一行。

            马国辉
          3. 时间轨迹
            @马国辉

            哦,不好意思,那个地址贴错了,已修正。另外,这个错误是因为你没有导环境变量,我已经加在文章中编译命令那里了,你执行一下应该就不会有这个错误了[嘻嘻]

            时间轨迹 博主
          4. 马国辉
            @时间轨迹

            您好,刚才提示这个错误,我没有看明白是什么原因,您能帮忙看下嘛?
            VERSION environment value is required.
            make: * [require-version] Error 1

            马国辉
          5. 马国辉
            @时间轨迹

            哈哈,我刚也注意到了,您这篇文章最上面贴的事go的源码,不是蓝灯的,我也没仔细看,这是您最上面贴的:git clone https://github.com/getlantern/go.git

            马国辉
    2. 时间轨迹
      @马国辉

      不用自己写,源码里面有,你按照上面写的做些小修改就好

      时间轨迹 博主 回复
  14. 马国辉

    您好,Makefile文件的位置在哪儿啊?

    马国辉 回复

添加新评论

选择表情 captcha

友情提醒:不填或错填验证码会引起页面刷新,导致已填的评论内容丢失。

|