Loading... # 前言 我的J1900软路由从年初更换为Lean的OpenWrt固件(**在谷歌云上自己编译的**)后,一直使用到现在,最近发现ssr插件不稳定:一觉醒来设备总是fq不了,我得进去管理页面手动关闭插件后再开启才能正常使用 <img src="http://shenguanqun.com/usr/themes/handsome/assets/img/emotion/aru/blood2.png" class="emotion-aru"> 如此往复几天,受不了的我终于下定决心来更新下固件! 记得我在笔记本上第一次就编译成功,怎么我来二次编译就翻了好多趟车 <img src="http://shenguanqun.com/usr/themes/handsome/assets/img/emotion/aru/blood.png" class="emotion-aru">,翻车现场有:1.编译失败;2.编译“成功”将新固件刷入,软路由无限重启... 让我折腾了2天,终于修成正果,于是决定另开此文来记录下怎么在本地Ubuntu编译Lean的Openwrt固件。 镇楼: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="http://shenguanqun.com/archives/76/" target="_blank" class="post_inser_a no-external-link"> <div class="inner-image bg" style="background-image: url(https://shenguanqun.com/usr/uploads/2020/08/2171434071.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">入坑J1900软路由</p> <div class="inster-summary text-muted"> 前言为了提升 fq速度,提高工作效率,我莫名其妙地了解到了软路由!? ::aru:meditation::一路下来... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 懒得动手的话,<img src="http://shenguanqun.com/usr/themes/handsome/assets/img/emotion/aru/pouting.png" class="emotion-aru"> 点[这里][1]下载我刚编译的吧~ # 一、跟着官方文档 https://github.com/coolsnowwolf/lede 0.装好 `Ubuntu 18 LTS x64`,我是直接安装到笔记本上,没用虚拟机。 1.以防万一网络环境不好,修改下软件源: ``` #备份源文档 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak #直接清空源文档后,增加国内源 sudo vim /etc/apt/sources.list deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse ``` 2.更新Ubuntu系统: ``` sudo apt-get update #更新软件列表 sudo apt-get upgrade #更新软件包 ``` 3.安装编译工具: ``` sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget ``` # 二、配置网络环境 <div class="tip inlineBlock error"> **不**要用**root** 用户 git 和编译!!! 国内用户编译前最好准备好梯子 </div> 敲黑板,前面我编译失败的原因之一就是梯子没有准备好:我以为在软路由设置了全局代理后,任何设备的终端都会走代理,然而事实不是这样子的... 为了避免编译失败,请务必重点配置好:让Ubuntu的终端走全局代理! 4.安装 `v2ray GUI 客户端`:`Qv2ray` 或者 `v2rayL`,无论使用哪个都是:添加线路、修改 `本地端口Socks`(比如我这里设置/修改为了 `Socks:1088`)、到浏览器测试下能否fq、即可。 * Qv2ray直接在`Ubuntu软件商店`搜索安装即可! * v2rayL安装方法如下: ``` #链接:https://github.com/jiangxufeng/v2rayL bash <(curl -s -L http://dl.thinker.ink/install.sh) ``` 5.安装 `proxychains`来协助Ubuntu的终端走代理: ``` sudo apt install -y proxychains ``` * 修改配置文件:移动到文档最有一行、注释掉这行:`socks4 127.0.0.1 9050`、再新添加:`socks5 127.0.0.1 1088`(这个`1088`就是上边v2ray客户端设置的端口,可以是其他任意端口/数字,但是你需要确保它们对应上) ``` sudo vim /etc/proxychains.conf ``` * 配置文件最后两行应该显示如下: ``` #socks4 127.0.0.1 9050 socks5 127.0.0.1 1088 ``` * 使用方法:哪条命令你想要它代理,就在最前面加上`proxychains`,比如我们在终端测试下:`proxychains curl https://www.google.com`,看到有`OK`的结果就ok了,如下: ``` sgq@ubuntu:~$ proxychains curl https://www.google.com ProxyChains-3.1 (http://proxychains.sf.net) |DNS-request| www.google.com |S-chain|-<>-127.0.0.1:1088-<><>-4.2.2.2:53-<><>-OK |DNS-response| www.google.com is 172.217.163.164 |S-chain|-<>-127.0.0.1:1088-<><>-172.217.163.164:443-<><>-OK ``` # 三、接着编译命令 6.万事俱备,让我们回到官方文档的剩余步骤:`需要联网下载的命令,我们就使用proxychains来使终端全局代理下载` ``` #下载源码 proxychains git clone https://github.com/coolsnowwolf/lede` #进入目录 cd lede ``` <div class="tip inlineBlock error"> 如果你是初次编译的话,那么你想要的 `ssr-plus`大概率会在feed里面被隐藏了的,此时你已进入lede目录,`vim feeds.conf.default`删除最后两行的 `#`即可解锁: </div> ``` src-git luci https://github.com/coolsnowwolf/luci src-git routing https://git.openwrt.org/feed/routing.git;openwrt-19.07 #src-git telephony https://git.openwrt.org/feed/telephony.git;openwrt-19.07 #src-git helloworld https://github.com/fw876/helloworld ``` 修改并保存好 `feeds.conf.default`,继续: ``` #更新feed列表 proxychains ./scripts/feeds update -a && ./scripts/feeds install -a #进入编译菜单勾一勾想要的功能 make menuconfig #下载dl库 proxychains make download #为了以防编译失败,建议使用单线程编译 proxychains make -j1 V=s ``` 不出幺蛾子的话、最后应该能够修成正果、祝你好运 <img src="http://shenguanqun.com/usr/themes/handsome/assets/img/emotion/aru/insidious.png" class="emotion-aru">编译完成后的固件路径在这里:`/lede/bin/targets` # 二次编译 ``` cd lede proxychains git pull proxychains ./scripts/feeds update -a && ./scripts/feeds install -a #如果需要重新配置:rm -rf ./tmp && rm -rf .config make menuconfig proxychains make download proxychains make -j1 V=s ``` # 进阶:云编译openwrt 不想傻兮兮等电脑耗时几个小时还不一定百分比编译成功?本地编译还是很蛋疼? 那么 `使用GitHub Actions云编译OpenWrt`会是一个很棒的解决方案,详情请点击大佬项目:https://github.com/P3TERX/Actions-OpenWrt 记录下我的折腾过程: ## 1.本地制作 `.config` 在本地编译环境下: ``` make menuconfig #定制好需要的插件 make defconfig ./scripts/diffconfig.sh > seed.config #该脚本的作用在于把你定制的跟默认的差异部分写入seed.config这个文件 ``` 打开seed.config文档,全选复制里面所有的内容, <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-01070b89f58454831e8c3ce99a88f47677" aria-expanded="true"><div class="accordion-toggle"><span>点击查看我20200731弄的配置</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div id="collapse-01070b89f58454831e8c3ce99a88f47677" class="panel-body collapse"> ``` CONFIG_TARGET_x86=y CONFIG_TARGET_x86_64=y CONFIG_TARGET_x86_64_DEVICE_generic=y CONFIG_ARIA2_BITTORRENT=y CONFIG_ARIA2_NOXML=y CONFIG_ARIA2_OPENSSL=y CONFIG_ARIA2_WEBSOCKET=y CONFIG_LIBCURL_COOKIES=y CONFIG_LIBCURL_FILE=y CONFIG_LIBCURL_FTP=y CONFIG_LIBCURL_HTTP=y CONFIG_LIBCURL_MBEDTLS=y CONFIG_LIBCURL_NO_SMB="!" CONFIG_LIBCURL_PROXY=y CONFIG_PACKAGE_aria2=y CONFIG_PACKAGE_ariang=y CONFIG_PACKAGE_ca-bundle=y CONFIG_PACKAGE_curl=y CONFIG_PACKAGE_frpc=y CONFIG_PACKAGE_gzip=y CONFIG_PACKAGE_hd-idle=y # CONFIG_PACKAGE_kmod-fast-classifier is not set CONFIG_PACKAGE_kmod-ipt-offload=y CONFIG_PACKAGE_kmod-nf-flow=y # CONFIG_PACKAGE_kmod-shortcut-fe is not set # CONFIG_PACKAGE_kmod-tun is not set CONFIG_PACKAGE_libbz2=y CONFIG_PACKAGE_libcap=y CONFIG_PACKAGE_libcurl=y CONFIG_PACKAGE_libdb47=y CONFIG_PACKAGE_libffi=y CONFIG_PACKAGE_libgdbm=y CONFIG_PACKAGE_liblzma=y CONFIG_PACKAGE_libsqlite3=y CONFIG_PACKAGE_libwebsockets-full=y CONFIG_PACKAGE_libxml2=y CONFIG_PACKAGE_luci-app-aria2=y CONFIG_PACKAGE_luci-app-flowoffload=y CONFIG_PACKAGE_luci-app-frpc=y CONFIG_PACKAGE_luci-app-hd-idle=y CONFIG_PACKAGE_luci-app-netdata=y # CONFIG_PACKAGE_luci-app-sfe is not set CONFIG_PACKAGE_luci-app-transmission=y CONFIG_PACKAGE_luci-app-ttyd=y CONFIG_PACKAGE_luci-app-watchcat=y # CONFIG_PACKAGE_luci-app-webadmin is not set # CONFIG_PACKAGE_luci-app-xlnetacc is not set # CONFIG_PACKAGE_luci-app-zerotier is not set CONFIG_PACKAGE_luci-i18n-aria2-zh-cn=y CONFIG_PACKAGE_luci-i18n-flowoffload-zh-cn=y CONFIG_PACKAGE_luci-i18n-frpc-zh-cn=y CONFIG_PACKAGE_luci-i18n-hd-idle-zh-cn=y CONFIG_PACKAGE_luci-i18n-netdata-zh-cn=y CONFIG_PACKAGE_luci-i18n-transmission-zh-cn=y CONFIG_PACKAGE_luci-i18n-ttyd-zh-cn=y CONFIG_PACKAGE_luci-i18n-watchcat-zh-cn=y CONFIG_PACKAGE_luci-theme-freifunk-generic=y CONFIG_PACKAGE_luci-theme-netgear=y CONFIG_PACKAGE_netdata=y CONFIG_PACKAGE_python3=y CONFIG_PACKAGE_python3-asyncio=y CONFIG_PACKAGE_python3-base=y CONFIG_PACKAGE_python3-cgi=y CONFIG_PACKAGE_python3-cgitb=y CONFIG_PACKAGE_python3-codecs=y CONFIG_PACKAGE_python3-ctypes=y CONFIG_PACKAGE_python3-dbm=y CONFIG_PACKAGE_python3-decimal=y CONFIG_PACKAGE_python3-distutils=y CONFIG_PACKAGE_python3-email=y CONFIG_PACKAGE_python3-gdbm=y CONFIG_PACKAGE_python3-light=y CONFIG_PACKAGE_python3-logging=y CONFIG_PACKAGE_python3-lzma=y CONFIG_PACKAGE_python3-multiprocessing=y CONFIG_PACKAGE_python3-ncurses=y CONFIG_PACKAGE_python3-openssl=y CONFIG_PACKAGE_python3-pkg-resources=y CONFIG_PACKAGE_python3-pydoc=y CONFIG_PACKAGE_python3-setuptools=y CONFIG_PACKAGE_python3-sqlite3=y CONFIG_PACKAGE_python3-unittest=y CONFIG_PACKAGE_python3-urllib=y CONFIG_PACKAGE_python3-xml=y CONFIG_PACKAGE_screen=y CONFIG_PACKAGE_transmission-daemon-openssl=y CONFIG_PACKAGE_transmission-web-control=y CONFIG_PACKAGE_ttyd=y CONFIG_PACKAGE_unzip=y CONFIG_PACKAGE_vim=y CONFIG_PACKAGE_watchcat=y CONFIG_PACKAGE_youtube-dl=y CONFIG_PACKAGE_youtube-dl-src=y # CONFIG_PACKAGE_zerotier is not set CONFIG_PACKAGE_zsh=y CONFIG_SQLITE3_DYNAMIC_EXTENSIONS=y CONFIG_SQLITE3_FTS3=y CONFIG_SQLITE3_FTS4=y CONFIG_SQLITE3_FTS5=y CONFIG_SQLITE3_JSON1=y CONFIG_SQLITE3_RTREE=y CONFIG_VDI_IMAGES=y ``` </div></div> ## 2.fork项目 * 修改了`diy-part1.sh`:删除`#`开启ssr插件源:`sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default` * 修改了workflow文件`.github/workflows/build-openwrt.yml`激活了两个功能:`点击 star 开始编译`和`上传固件到奶牛快传`。 准备完毕后就可以触发初次云编译了:按照要求,在fork项目里新建 `.config`文档,把前面 `seed.config的配置内容`粘贴到里面保存即可! 最终耗时 `3h 9m 24s`编译完成: [1]: https://odrive.sgq.moe/home/1/openwrt Last modification:December 16th, 2020 at 11:58 am © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat