V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
volvo007
V2EX  ›  OpenWrt

请教 openwrt 的编译问题

  •  
  •   volvo007 · 10 天前 via iPhone · 1001 次点击
    很久之前用过 openwrt ,时过境迁回来一看已经非常强大了。现在交叉编译也比原来容易很多

    就想问问大家一般自己编译一次 openwrt 大概要多久,我自己的台式 12600 在 Ubuntu 虚拟机里编译两个小时还报错……比较有挫败感,而且时间上也不允许天天搞几个小时去编译

    所以问问大家有没有一点套路,或者分享下一般的编译时间也好
    35 条回复    2024-05-13 01:57:33 +08:00
    wuruxu
        1
    wuruxu  
       10 天前   ❤️ 1
    AMD Ryzen 7 PRO 4750U 编译半个小时吧,第一次会更慢点
    自己使用的设备,可以编译最新稳定的 branch
    cslive
        2
    cslive  
       10 天前   ❤️ 1
    wsl 编译 4 个小时
    CatCode
        3
    CatCode  
       10 天前   ❤️ 1
    我 3700X 也就 1 个多小时啊

    要开启全局的、稳定的科学上网,因为会从各种网站上下载包。网络好的话,make download 两三分钟就能完成,网络不好可能某个包几 kb 的速度下载,半个小时都完不成这一步。甚至直接报错。
    klarkzh
        4
    klarkzh  
       10 天前 via iPhone   ❤️ 1
    需要这么久么,是插件或是软件装的很多么?我也 12600k ,openwrt 装了 4 个插件,给小米编译固件,make download 完之后编译只要 15 分钟啊
    vcn8yjOogEL
        5
    vcn8yjOogEL  
       10 天前   ❤️ 3
    sdk 编译自己需要的包, 然后用 imagebuilder 生成固件
    能用官方编译好的二进制就不要自己编译
    ochatokori
        6
    ochatokori  
       10 天前 via Android   ❤️ 1
    没有开多线程或者是下载太难了?
    12600 不应该 2 个小时这么久
    DAPTX4869
        7
    DAPTX4869  
       10 天前   ❤️ 1
    菜鸡不会, 都是直接拿别人的在线编译 https://openwrt.ai
    ysc3839
        8
    ysc3839  
       10 天前 via Android   ❤️ 1
    建议编译前先用 make download -j16 下载代码,后面的 -j16 代表最多同时下载 16 个,可以根据网络情况调整。
    另外 12600 跑虚拟机的话可能要注意一下大小核问题,编译很久可能是跑在小核上了?
    0o0O0o0O0o
        9
    0o0O0o0O0o  
       10 天前 via iPhone   ❤️ 1
    网络问题吧?多看日志

    见我在这里的回复 https://v2ex.com/t/1030850

    我是写成了脚本,docker pull 对应 tag 的 docker imagebuilder 镜像,没有任何缓存全新编译,而且是三个同时的,然后自动上传和刷入,没统计过时间,大约半小时吧
    chenyx9
        10
    chenyx9  
       10 天前 via Android
    记得古早时候说第一次编译要-j1 ,不然容易出错
    mohumohu
        11
    mohumohu  
       10 天前   ❤️ 1
    直接白嫖 GitHub Action 编译,不用自己挂几个小时。
    yyzh
        12
    yyzh  
       10 天前   ❤️ 1
    @chenyx9 现在也有.全新编译有时候会出现某个软件先开始编译但是里面有依赖另外一个还没开始编译的内容.然后就挂了.
    adoal
        13
    adoal  
       10 天前   ❤️ 2
    @vcn8yjOogEL 对的,除非要改内核开启不支持的特性或者树外设备,否则没必要自己编译。
    GoldenLeez
        14
    GoldenLeez  
       10 天前   ❤️ 1
    在本地执行 make menuconfig 配置完之后,拿到配置文件直接白嫖 github action ,一个多小时就编译完了,省时间还省电费
    volvo007
        15
    volvo007  
    OP
       10 天前 via iPhone
    @CatCode 现在想想我编译的几次,应该都是某些库下载太久。下次挂全局梯子看看。
    volvo007
        16
    volvo007  
    OP
       10 天前 via iPhone
    @klarkzh 我试试用默认配置编译了看看,然后慢慢加插件。虽然我也不觉得自己开了很多个(也许开了几个特别耗时的)
    volvo007
        17
    volvo007  
    OP
       10 天前 via iPhone
    @adoal 作为小白,其实主要还是不知深浅,不知道哪些需要编译,哪些可以后面 opkg 安装。我挺想在路由器上搞个 docker 的,这块可能就是安装方便?
    adoal
        18
    adoal  
       10 天前   ❤️ 1
    @volvo007 如果只是要安装应用程序包,不自己 patch 内核的话,你可以用 image builder 自己做一个预先打包了你想要安装的包的 image 拿来刷机,不需要编译
    icegaze
        19
    icegaze  
       10 天前 via Android
    必须是白嫖 git 的在线 action ,很快的。
    0o0O0o0O0o
        20
    0o0O0o0O0o  
       10 天前
    @adoal #18 看了你说的我才意识到 image builder 并没有编译源码,用了都一两年了才意识到,汗颜
    Puteulanus
        21
    Puteulanus  
       10 天前   ❤️ 1
    之前在 Paperspace 白嫖过 280 核的 IPU 机器编译,记得十多分钟就能跑完
    现在不给用了,非常怀念
    Puteulanus
        22
    Puteulanus  
       10 天前   ❤️ 1
    我之前用过的另一家 upcloud 的,他们的 flexible plan 可以单独把 CPU 拉得很高,价格我算能接受吧(每次编译应该不到 1 小时我记得,但太久了记忆有点模糊了),主要国外服务器网也快。走我邀请好像能有一些试用金: https://upcloud.com/signup/?promo=FD389Q

    kokutou
        23
    kokutou  
       10 天前   ❤️ 1
    7800x3d 顺序编译的,
    差不多是半小时-40 分钟吧
    WhatTheBridgeSay
        24
    WhatTheBridgeSay  
       10 天前   ❤️ 1
    你用 Linux 发行版会自编译吗?不会的话你用 OpenWrt 也不应该自编译,自编译后软件源涉及内核版本依赖的包全都用不了,等于是费力不讨好。某些大神主导的这股自编译风气不好
    jianzhao123
        25
    jianzhao123  
       10 天前 via iPhone
    @WhatTheBridgeSay 确实啊,内核的那个 md5 还是啥值对不上,还得改
    chenyx9
        26
    chenyx9  
       10 天前 via Android
    @adoal 我是为了改 wireless-regdb 这个包,顺手编译固件
    kokutou
        27
    kokutou  
       10 天前   ❤️ 1
    @WhatTheBridgeSay #24
    主要是路由器复位后不用装软件包了...
    官方版本一复位全都要重装...

    我自己编译也只用基本的几个包其他的不用
    ruidoBlanco
        28
    ruidoBlanco  
       10 天前   ❤️ 1
    @kokutou luci-app-attendedsysupgrade 你值得拥有。直接在 luci 里找官方给按当前硬件和装的包给现编一个。

    &t=1034s
    ruidoBlanco
        29
    ruidoBlanco  
       10 天前
    @ruidoBlanco 链接被截断了,自己跳到 1034 秒
    flynaj
        30
    flynaj  
       10 天前 via Android   ❤️ 1
    大部分情况 image builder 就够了,不需要编译代码。除非你要改内核这类的,
    volvo007
        31
    volvo007  
    OP
       9 天前 via iPhone
    @adoal 原来还有这种操作,我去搜搜关键词。感觉这样能省很多事情
    kokutou
        32
    kokutou  
       9 天前 via Android
    @adoal
    我用 image builder 做的包无法开机。。。r3gv1 上面
    axiauk
        33
    axiauk  
       8 天前   ❤️ 1
    半个小时左右,第一次编译 100%编译成功的的关键是 1 ,使用新建 openwrt 用户,2 ,执行 export FORCE_UNSAFE_CONFIGURE=1 ,3 编译前 make download ,4 ,编译前全默认只选架构( Libraries 选项中的 libustream-openssl libustream-wolfssl 二选一,两个都被依赖上必出错)。
    axiauk
        34
    axiauk  
       8 天前
    玩玩体验一下无所谓,实际上编译没一点好处。
    稳定版升级和正确使用姿势是:导出配置,导出已安装包名。
    1 ,导出已安装包名,升级恢复后 opkg install 粘贴下面所有包
    opkg list-installed | awk '{print $1}' | sed ':M;N;$!bM;s#\n# #g'
    2 ,恢复配置。
    lostman1337
        35
    lostman1337  
       8 天前   ❤️ 1
    @kokutou 升级重装软件包那是过去式了
    OpenWrt 和 ImmortalWrt 的官方 Selector 网站上都可以自己定制带软件包的官方固件,几分钟就能定制好,不需要自己编译,路由器复位后插件都在

    或者你可以先安装官方固件,然后安装好软件包,每次用系统自带的值守式系统更新功能跟随官方升级固件,会自动编译带对应软件包的固件进行升级,变相相当于保留了软件包,升级一次过后再复位插件也能保留

    除非是刚需某些不在官方目录里的插件以及调整固件空间大小,否则根本没必要自己折腾编译
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:10 · PVG 03:10 · LAX 12:10 · JFK 15:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.