openwrt系统定制

正在查看 10 条回复
  • 作者
    帖子
    • okass - WirelessLink社区okass
      参与者
      #1208
      Up
      3
      ::

      如下话题包含了openwrt系统定制部分的内容

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1209
      Up
      1
      ::

      1. openwrt文件系统架构详解

       

      1> 文件系统的目录树

      forums.wirelesslink.net | openwrt文件系统目录

       

      [备注]

      • 蓝色部分是源码自带的默认目录
      • 绿色部分是编译后生成的目录架构

       

      2> 原始目录架构解释

      • config   ,存放着整个系统的配置文件。
      • include  ,openwrt 的 Makefile 都存放在这里,文件名为 *.mk 。这里的文件是在 Makefile 里被 include 的,类似于库文件。这些文件定义了编译过程。
      • package,存放了 openwrt 系统中适用的软件包,包含针对各个软件包的 Makefile。openwrt定义了一套 Makefile 模板,各软件参照这个模板定义了自己的信息,如软件包的版本、下载地址、编译方式、安装地址等。在二次开发过程中,这个文件夹我们会经常打交道。事实上,通过 ./scripts/feed update -a和 ./scripts/feed install -a 的软件包也会存放在这个目录之中。
      • scripts,存放了一些脚本,使用了 bash、python、perl 等多种脚本语言。编译过程中,用于第三方软件包管理的 feeds 文件也是在这个目录当中。在编译过程,使用到的脚本也统一放在这个目录中
      • staging_dir,用于保存在 build_dir 目录中编译完成的软件,所以这里也和 build_dir 有同样的子目录结构。比如,在 target-XXX 文件夹中保存了目标平台编译好的头文件、库文件。在我们开发自己的 ipk 文件时,编译过程中的预处理头文件、链接动态库、静态库都是到这个子文件夹中。
      • target,openwrt 的源码可以编译出各个平台适用的二进制文件,各平台在这个目录里定义了 firmware 和 kernel 的编译过程。
      • tmp,从名字来看,是临时文件夹。在编译过程中,有大量中间临时文件需要保存,都是在这
      • toolchain,这个文件中存放的就是编译交叉编译链的软件包,包括:binutils,gcc,libc等等.
      • tools,编译时主机需要使用一些工具软件,tools 里包含了获取和编译这些工具的命令。软件包里面有 Makefile 文件,有的还包含了 patch。每个Makefile当中都有一句$(eval $(call HostBuild)),这表明编译这个工具是为了在主机上使用的。

      其他目录

      主要目录就是前面提及的8个,剩下的是单个文件。

      • Makefile,在顶层目录执行 make 命令的入口文件。
      • rules.mk,定义了 Makefile 中使用的一些通用变量和函数。
      • Config.in,在include/toplevel.mk中我们可以看到,这是和make menuconfig相关联的文件。
      • feeds.conf.default,是下载第三方一些软件包时所使用的地址。
      • LICENSE & README,即软件许可证和软件基本说明.其中README描述了编译软件的基本过程和依赖文件。

       

      3> 新增目录
      1、bin

      保存编译完成后的二进制文件,包括:完整的 bin 文件、所有的 ipk 文件。

      2、build_dir

      在前面的原始目录中,我们提到了 host 工具、toolchain 工具还有目标文件。openwrt 将在这个目录中展开各个软件包来进行编译,所以这个文件夹中包含如下 3 个子文件夹:

      • host ,  在该文件夹中编译主机使用的工具软件。
      • toolchain-XXX,  在该文件夹中编译交叉工具链。
      • target-XXX,  在此编译目标平台的目标文件,包括各个软件包和内核文件。

      3、dl

      “download”的缩写,从 feeds.conf 指定的仓库下载的 package 和 feed 中 Makefile 中指定版本的各种源码包。在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是会自动安装在所编译的固件中,也就是我们 make menuconfig 的时候,为固件配置的一些软件包,如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到 build_dir 目录下。

      4、feeds

      openwrt 的附加软件包管理器的扩展包索引目录。有点绕,简单来说就是下载并管理软件包的。默认的 feeds下载有packages、management、luci、routing、telephony。如要下载其他的软件包,需打开源码根目录下面的 feeds.conf.default 文件,去掉相应软件包前面的#号,然后更新源:

      ./scripts/feeds update -a

      安装下载好的包:

      ./scripts/feeds install -a4. dl

      在编译过程中使用的很多软件,刚开始下载源码并没有包含,而是在编译过程中从其他服务器下载的,这里是统一的保存目录。

       

       

      4> 软件包的编译过程:

      1、软件包编译过程

      按照 package 中的脚本下载软件包到 dl 目录下,再将 dl 目录下的软件包解压到 build_dir 目录下,在该目录下进行编译,将生成的目标文件放到 staging_dir 目录下,最终编译完成的镜像文件放到 bin 文件中。

      package → dl → build_dir → staging_dir → bin

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1210
      Up
      2
      ::

      2. openwrt修改默认后台IP地址及DNS网关

       

      openwrt源码默认的IP地址为192.168.1.1,这个一般会与网络中的其他设备Ip产生冲突,比如光猫路由器等

      源码中关于网络配置的地方在这里

       

      1>修改默认的后台ip地址

      # cd openwrt

      # vim package/base-files/files/bin/config_generate

      搜索”ipaddr”字段,大概是99行左右。修改成自己想要的ip地址即可

      forums.wirelesslink.net | 修改openwrt默认的ip地址和dns网关

       

      2> 修改默认的dns网关。可以在编译前修改文件,也可以进入网页后台修改。

      新增如下代码

      set network.$1.gateway=’192.168.1.1′
      set network.$1.dns=’127.0.0.1 223.5.5.5 8.8.8.8′

      forums.wirelesslink.net | openwrt新增dns网关

       

      达到目的了保存 wq!退出,删除临时文件夹,终端输入:

      # rm -rf tmp

      如果之前编译过,可以使用多线程进行编译

      # make V=s -j$(nproc)

       

      进行快速编译即可

       

      PS:

      如果可以进入网页后台配置的,建议进入后台处理。比如PPPOE拨号等,如果没有十足的把握修改源码,建议妥善稳当点处理。

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1215
      Up
      0
      ::

      3. 安装luci主题

      标准的openwrt编译完成后,基本进入不了后台,此时需要安装luci主题来完成

      安装Web管理界面LuCY;

      1.打开显示的路由器Linux终端中,输入“opkg update”,开始下载Packages.gz并更新;
      2.输入“opkg install luci”,安装LuCY主体,先开始自动下载各种关联库,下载完会自动安装配置。
      3.输入“/etc/init.d/uhttpd enable”回车,打开uhttpd服务;
      4.输入“/etc/init.d/uhttpd start”回车,让uhttpd自启动;
      5.在电脑端的浏览器中输入“xxx.xxx.xxx.xxx”,可访问路由器就表示LuCY安装成功;

      luci的相关包地址镜像为如下,也可以手动下载后上传到服务器进行安装:
      https://downloads.openwrt.org/snapshots/packages/x86_64/luci/
      http://mirror.nullivex.com/snapshots/packages/x86_64/luci/

       

      3.1 将自定义主题编译进固件的方法

      [参考:]

      https://www.kejiwanjia.com/jiaocheng/hardware/luyou/13715.html

      https://github.com/jerrykuku/luci-theme-argon

       

      1> 进入openwrt目录:直接下载到package目录(子目录)即可

      # cd ../openwrt/package

      # git clone https://github.com/jerrykuku/luci-theme-argon.git
      # make menuconfig  #choose LUCI->Theme->Luci-theme-argon
      # make -j1 V=s

       

      2>.修改luci依赖Makefile
      luci默认强制依赖bootstrap主题,如果不修改Makefile,就不能选择默认主题 。你可以选择删除依赖或者修改依赖,比如默认是+luci-theme-bootstrap可以修改为+luci-theme-argon,这样默认主题就修改成了argon。如果删除掉+luci-theme-bootstrap依赖,就需要手动通过make menuconfig选择主题,可以自由选择。

      #cd ../openwrtfeeds/luci/collections/luci/Makefile

      PS: 经过修改makefile文件修改默认主题的方法,发现在编译成功后启动系统,并不是自己设定的默认主题。关于该问题的讨论:

      https://www.right.com.cn/forum/thread-4067121-1-1.html

       

       

      3> 编译主题

      编译主题有两种方式

      i. 编译整个固件 这样可以将选择的主题集成到固件中,需要升级整个固件。命令: make V=s
      ii. 单独编译主题 命令:make packge/主题包名/compile V=s 示例(编译argon主题):

      # make packge/luci-theme-argon/compile V=s

      编译完成后会生成ipk文件在bin的子目录中,具体目录根据芯片架构有所区别,我们可以通过find命令查找具体位置

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1219
      Up
      0
      ::

      4. openwrt 如何升级安装软件包

       

      1>登录SSH
      2>更新软件列表
      3>一键更新所有软件包

      opkg update
      opkg list-upgradable | cut -f 1 -d ‘ ‘ | xargs opkg upgrade

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1220
      Up
      0
      ::

      5. openwrt 安装第三方主题

      以argon 主题为例

      wirelesslink.net | openwrt argon主题

       

      1> 主题安装条件

      • openwrt 原生系统 及其衍生类系统, lede等都可以
      • 磁盘空间充足能够访问外网

      2> 安装方法

      A. 通过在线安装方法安装

      opkg update
      opkg install wget
      opkg install ca-certificates
      
      #注意这里版本可能不是最新的,打开https://github.com/jerrykuku/luci-theme-argon/releases/可以看到最新链接
      
      wget --no-check-certificate https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.2.9/luci-theme-argon_2.2.9-20211016-1_all.ipk
      
      opkg install *ipk
      
       

      B. 先下载到本地,然后上传到openwrt服务器进行安装

       

      C. 手动在线构建

      cd openwrt/package
      git clone https://github.com/jerrykuku/luci-theme-argon.git
      make menuconfig  #choose LUCI->Theme->Luci-theme-argon
      make -j1 V=s
       
      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1221
      Up
      0
      ::

      6. openwrt 编译build-in 添加passwall 或第三方主题、插件

       

      源码地址:

      • PassWall及其他常用openwrt包源码地址(含argon主题):

      https://github.com/kenzok8/openwrt-packages

       

      • SSR-plus源码地址:

      https://github.com/fw876/helloworld

       

      • openwrt主题argon源码地址:

      https://github.com/jerrykuku/luci-theme-argon

       

      1> 按照本站之前的编译教程: openwrt 固件编译及常见问题  操作,将openwrt的仓库克隆到本地:

      # git clone https://github.com/Lienol/openwrt

      2> 添加软件包源

      # vim /openwrt/feeds.conf.default.

      添加如下源:

      src-git helloword https://github.com/fw876/helloworld
      src-git passwall https://github.com/kenzok8/openwrt-packages
      src-git argon https://github.com/jerrykuku/luci-theme-argon

       

      3> 更新及安装源码包

      # ./scripts/feeds update -a
      # ./scripts/feeds install -a

       

      4> 配置参数,此时已经可以看到配置界面包含了passwall等插件的信息

      # make menuconfig

       

      5> 下载dl库文件

      # make -j8 download V=s

       

      6> 编译 等待固件输出

      #  make -j8 V=s

       

       

      =========================================================

      6.1 [new] openwrt编译build in 第三方插件

      1> 将源码包下载至package目录

      # sudo git clone https://github.com/kiddin9/openwrt-bypass.git

      2> 更新源

      # sudo ./scripts/feeds update -a

      # sudo ./scripts/feeds install -a

      3> 重新配置menuconfig,选择刚才添加的插件

      # sudo make menuconfig

      4>编译 等待固件输出

      #  sudo make -j8 V=s

       

       

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
      • okass - WirelessLink社区okass
        参与者
        #1227
        Up
        0
        ::

        合入上面的passwall 包后编译错误

         

        Collected errors:
        * check_data_file_clashes: Package dnsmasq-full wants to install file /home/openwrt/openwrt_en/openwrt/build_dir/target-x86_64_musl/root-x86/etc/hotplug.d/ntp/25-dnsmasqsec
        But that file is already provided by package * dnsmasq
        * check_data_file_clashes: Package dnsmasq-full wants to install file /home/openwrt/openwrt_en/openwrt/build_dir/target-x86_64_musl/root-x86/etc/init.d/dnsmasq
        But that file is already provided by package * dnsmasq
        * check_data_file_clashes: Package dnsmasq-full wants to install file /home/openwrt/openwrt_en/openwrt/build_dir/target-x86_64_musl/root-x86/etc/uci-defaults/50-dnsmasq-migrate-resolv-conf-auto.sh
        ….

        * check_data_file_clashes: Package luci-app-fileassistant wants to install file /home/openwrt/openwrt_en/openwrt/build_dir/target-x86_64_musl/root-x86/usr/lib/lua/luci/controller/fileassistant.lua
        But that file is already provided by package * luci-app-advanced

        ….

        * opkg_install_cmd: Cannot install package luci-app-fileassistant.

         

        [fixed]

        openwrt官方固件默认编译dnsmasq,app依赖于dnsmasq-full,两者之间会有编译冲突, 在编译前去掉其中一个就行了

        –> Base system –>dnsmasq 去掉

        forums.wirelesslink.net | dnsmasq设置

        访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1228
      Up
      0
      ::

      8. 提示passwall 架构不兼容

       

      * pkg_hash_fetch_best_installation_candidate: Packages for luci-app-passwall found, but incompatible with the architectures configured
      * opkg_install_cmd: Cannot install package luci-app-passwall.
      * satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-i18n-passwall-zh-cn:

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1229
      Up
      0
      ::

      9. 编译输出提示磁盘空间不够

       

      error: ext4_allocate_best_fit_partial: failed to allocate 3819 blocks, out of space?

      [fixed]

       

      原因:

      因为menuconfig 配置了很多项目,导致输出镜像文件过大。

       

      解决办法:

      # make menuconfig

      找到菜单项”Target Images”,”Root filesystem partition size (in MB)” ,把值改大即可,这里改为1024MB

      forums.wirelesslink.net | openwrt image大小修改

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • okass - WirelessLink社区okass
      参与者
      #1230
      Up
      0
      ::

      10. 编译完后进入后台出错,argon主题错误

       

      /usr/lib/lua/luci/template.lua:97: Failed to execute template ‘sysauth’.
      A runtime error occurred: /usr/lib/lua/luci/template.lua:97: Failed to execute template ‘header’.
      A runtime error occurred: /usr/lib/lua/luci/template.lua:97: Failed to execute template ‘themes/argonne/header’.
      A runtime error occurred: [string “/usr/lib/lua/luci/view/themes/argonne/heade…”]:23: attempt to call field ‘node_childs’ (a nil value)

       

      [fiexed]

      原因: argon主题包有问题,手动安装包可以解决,或者重新安装包可以解决。

      解决办法:

      1> 方案一、登录后台,手动下载argon的安装包,手动安装可以解决

      2> 方案二、

      # vim /etc/config/luci
      config core 'main'
      option lang 'auto'
      option resourcebase '/luci-static/resources'
      option ubuspath '/ubus/'
      option mediaurlbase '/luci-static/argonne'

      将option mediaurlbase ‘/luci-static/argonne’ 改为默认的主题option mediaurlbase ‘/luci-static/bootstrap’

      # service luci restart 即可

       

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
    • TomyTang - WirelessLink社区TomyTang
      参与者
      #1412
      Up
      0
      ::

      11.opkg 安装插件出错的解决办法

      “webadmin.lua file is already provided by package *luci-base”

      解决方案1.

      # opkg install *.ipk –force-depends

      解决方案2.

      # opkg install *.ipk –force-overwrite

      仍然提示错误:check_data_file_clashes: Package luci-lib-ipkg wants to install file /usr/lib/lua/luci/model/ipkg.lua
      But that file is already provided by package * luci-base

      # 先删除这个文件即可

      # cd /usr/lib/lua/luci/model/ && mv ipkg.lua ipkg.luabak

      #再安装

      opkg install *.ipk –force-depends

       

      访问ChatGPT的可用VPS机房IP推荐 Lisahost美国原生IP搬瓦工美西DMITTripodcloudFrantech
正在查看 10 条回复
  • 哎呀,回复话题必需登录。
WirelessLink社区
Logo