|
|
各位基友好,最近一个多周,一直在自己编译自己的ImmortalWrt,作为小白,一瓶半不满半瓶晃悠的那种,我还是想拿出来分享一下,途中遇到了很多问题,最后各种折腾之后,还是搞成了,给大家分享一下我的方法。
勿喷,有问题的话,大家可以指出来一下
按照ImmortalWrt在GitHub 仓库 的介绍,最好是用 Debian11,但是现在 Debian 官网只有 12 的版本,因此在网上搜到了这个网站,分享给大家,可以在里面找打 debian11.10(记得是)
介绍下我这边的情况,我是在零刻 n100 上搭了一套 esxi8.0 的环境,然后装的 debian11,4 核8g100g,这个自己看到起搞就可以了。
在 esxi 上正常安装完成 debian11 之后,默认 ssh 应该就是开启的,可以给分个固定的 IP ssh 上去,这样配置起来更快。如果你ssh 没有开启,那么去网上搜一下 debian 开启 ssh 的教程啥的,一般在安装系统的时候,最后一步我记得是开启 ssh 的。
最后注意,最好是有课学的环境哈。
——————————debian11环境配置——————————
进来之后,先开始搞一下 debian 的环境配置
首先要切换到你的 root 账户
然后更新一下软件包,顺便安装一下 sudo(如果已经安装 sudo 了可以跳过这步)(一条一条执行)
- apt update
- apt upgrade -y
- apt install sudo
复制代码 在安装debian 的过程中,除了 root 之外,你肯定是加了一个普通用户的,因此这里在安装完成 sudo 之后,要加上你普通用户的权限
- #编辑 sudoers 文件
- nano /etc/sudoers
- # 找到 root ALL=(ALL:ALL) ALL,然后在他下面添加下面的行,如果没有root ALL=(ALL:ALL) ALL,那你直接将这两行添加到文件末尾就行
复制代码 然后,我这里因为家里用的 ipv6,但是原来我在用 debian 的时候,遇到过 ipv6 的网络问题,所以,我还要吧 debian 上的 v6 给关掉,这个看大家情况,执行不执行都行
- ## 关闭 ipv6
- sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
- sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
- sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
复制代码
欧克,以上就是在root 账户下,把能配置完成的都配置完成了,可以重启一下其实
然后切换到你的普通用户(我这里为了方便,就叫 opa 了)
然后在 opa 这个账户下,继续配置环境...
- #安装一些必要的软件包
- sudo apt update
- sudo apt upgrade -y
- sudo apt install sudo curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates clang build-essential autoconf automake libtool pkg-config
复制代码 这些包,貌似官方给的依赖项里面可能没有,我是这样搞的,因为遇到过这方面的问题,所以就直接这样搞了
这部分安装完了之后,就可以开始按照ImmortalWrt在GitHub 仓库 的介绍的依赖项直接进行配置了,我这里直接复制过来了,大家也可以去官方仓库去看一下
- ## 配置编译的依赖
- sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)'
复制代码 我在后期编译的时候,报错过,在网上搜了一下后,下面这部分我也会装上去
- sudo apt-get update && sudo apt-get install -y libev-dev lm-sensors libpam0g-dev liblzma-dev libsnmp-dev curl python3 iperf3 libglib2.0-dev libgpiod-dev
复制代码 还有一部分内容,需要调整,也是因为编译过程中,我碰到的错误,主要是针对 Rust 编程语言(我也不懂是啥,gpt 给我的解决办法,执行就完了)
- ## 安装基础工具,包括 build-essential 和 curl
- sudo apt-get install build-essential curl musl-tools
- ## 安装 Rust 和 rustup
- curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- ## 上一部执后,会有选项出来,貌似是“>”几个让你选择,出来之后直接回车,啥都不用管,执行完成之后开始执行下面的命令
复制代码
以上正常搞完了之后,debian 11 的环境,我是彻底搞完了,后面编译也没再因为环境报错了,有点啰嗦了...我也是小白起来的,大家凑合看吧
——————————正式开始编译——————————
环境在搞完了之后,最好是 reboot 一下,继续用 opa 这个账户进去
开始拉仓库了,我这里是拉了 3 个仓库
首先是immortalwrt的官方仓库
- git clone https://github.com/immortalwrt/immortalwrt.git
复制代码 其次是我需要用到sirpdboy的几个插件,但是因为在编译 immortalwrt 的固件的时候,会发生缺少依赖报错的情况,所以我要把他的仓库拉下来在编译之前把缺失的依赖搞到 imm 里面
- git clone https://github.com/sirpdboy/sirpdboy-package.git
复制代码 最后还有个库,是 op 的库,也是在编译 immortalwrt 固件的时候遇到的报错了,跟上面 sirpdboy 的库用途一致
- git clone https://github.com/openwrt/packages.git -b openwrt-23.05
复制代码 git 的时候,需要注意一下,immortalwrt的库有点大,所以,最好是课学环境稳定一点,要不然,不行的。
下面开始正常搞了,添加一下自己的软件源了
因为我编译的时候报错,前面git 了sirpdboy-package和openwrt packages,下面需要拷到immortalwrt的源码文件中
- #这里是第一个缺失的,因为我用到了https://github.com/brvphoenix/luci-app-wrtbwmon.git这个插件,但是提示我缺失wrtbwmon,我在sirpdboy-package发现有这个之后,就直接拉下来考进去就可以了,如果你不用luci-app-wrtbwmon,也可以在前面git 仓库的时候,不 git sirpdboy-package的库
复制代码
然后就可以开始更新了(每一行执行完成之后在执行下面一行)
因为我是编译我自己的包,所以,有一些单独的插件,我就没想从别个的软件源中去选了,我直接 git 到我编辑文件夹里面了,如果你没这方面需求,下面的代码你可以不执行的,直接用软件源的包的
- # 同步项目的源代码
- cd /home/opa/immortalwrt/package/feeds/luci
- ## 下载源码自定义软件包 源码
- git clone https://github.com/sirpdboy/luci-app-advancedplus.git && \
- git clone https://github.com/购物8/luci-app-filetransfer.git && \
- git clone https://github.com/sirpdboy/netspeedtest.git && \
- git clone https://github.com/rufengsuixing/luci-app-onliner.git && \
- git clone https://github.com/xiaorouji/openwrt-“师夷长技以制夷”.git && \
- git clone https://github.com/sirpdboy/luci-app-poweroffdevice.git && \
- git clone https://github.com/brvphoenix/luci-app-wrtbwmon.git
复制代码
搞完上一部,回到源码的目录中,再安装一下软件包(一样的,如果没上一步的需求,可以不执行,因为你当前还是在/home/opa/immortalwrt这个目录下面的)
- ## 回到源码目录中
- cd /home/opa/immortalwrt
- ## 再次更新安装软件包
- ./scripts/feeds install -a
复制代码
插句话,我自己编译的主要目的一个是空间太小,其次我是想一开始就一步到位,后面我不想再自己装包了,所以....就大费周章,所以我首次编译的时候,就遇到了下一个问题
我首次编译 imm 的包的时候,编译完了之后,发现很多东西跟官方下载的包是不一样的,基本上是完全不一样的,因此我就想了个法子,先把官方下载的包安装起,然后 ssh 上去查一下(具体怎么查,各位自己搜一下吧,我就不说了),然后复制出来,搞成一个文件
这是我自己查出来的,后面如果自己编译的话,可以按照这个方法搞一下,我是有点不明白,为啥编译 lede 的时候不会这样,但是编译 imm 包的就会这样(有知道的大神可以给讲一下)
同时你还得准备个 sh 文件(我这边直接起名add_packages.sh),等会把这个 list 文件中的 ipk 列表在编译的.config 文件中选中
- #!/bin/bash
- PACKAGES_FILE="packages.list"
- # 遍历packages.list中的每一行
- while IFS= read -r package
- do
- echo "CONFIG_PACKAGE_$package=y" >> .config
- done < "$PACKAGES_FILE"
复制代码
这两个文件,需要拷贝到/home/opa/immortalwrt下面,等会要用
进入到编译菜单
进来之后,怎么选我就不说了,选完了 save 一下退出来
然后吧刚才我们的packages.list通过执行add_packages.sh脚本的方式添加到刚才你 make menuconfig 生成的.config 文件中,执行下面的代码
- chmod +x add_packages.sh
- ./add_packages.sh
复制代码
下面,你还得进入一下make menuconfig,让刚才执行的add packages的包的依赖生效,进去之后,也可以继续调整自己的选项,也可以直接退出
开始编译了
首先要把编译需要的包预下载下来
然后检查文件完整性,删除一下错误文件
- find dl -size -1024c -exec ls -l {} \; -exec rm -f {} \;
复制代码
给目录赋权(我是为了保险才这样做的)
- sudo chown -R opa:opa /home/opa/immortalwrt
复制代码
可以开始编译了
我一般直接 -j4了,有问题我再 -j1试试
最后应该就可以搞出来了
最最最后,我不是大神,我是自己一点一点折腾出来的,所以遇到问题,各位还是要自己多多 Google 啥的,gpt 也是需要多问问,4-o 很好用哈哈哈哈
感谢sirpdboy,感谢immortalwrt,感谢 lede,有问题大家可以一起交流。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|