使用WSL编译OpenWRT需要注意的事项
首先是安装WSL,很多人直接在微软的应用商店里安装ubuntu后却运行不了。其实很简单,只要在管理员PowerShell 或 Windows 命令提示符中输入此命令:wsl –install (默认安装 Ubuntu)
其次就是为WSL配置国内apt源
sudo vi /etc/apt/sources.list
替换为以下内容
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
为了避免在编译OpenWRT时出现一些莫名奇妙的错误,这里要设置WSL不加载 Windows 的 PATH 内容:
sudo vim /etc/wsl.conf
写入以下内容
[interop]
enabled = true
appendWindowsPath = false
然后重启一下WSL,在管理员PowerShell 或 Windows 命令提示符中输入:wsl –shutdown
不要在root用户下编译OpenWRT!
不要在root用户下编译OpenWRT!
不要在root用户下编译OpenWRT!
重要的话说三遍。
安装必要的环境
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
下载OpenWRT的源码包,我这里用的是Lean大的包
git clone https://github.com/coolsnowwolf/lede
进入lede目录并编辑目录下的feeds.conf.default
cd lede
vi feeds.conf.default
需要一些不可描述的功能时在文件的末尾追加以下内容:
src-git helloworld https://github.com/fw876/helloworld
src-git passwall https://github.com/xiaorouji/openwrt-passwall
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
src-git opentopd https://github.com/sirpdboy/sirpdboy-package
然后就是正式开始定制编译你的OpenWRT
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig
先选择你需要的插件并保存退出,以及一些功能的设置方法:
(1)启用ipv6需要在Extra packages中选择ipv6helper
(2)启用samba4
Extra packages里取消勾选autosamba.
LuCI – Applications里取消勾选luci-app-samba,勾选luci-app-samba4.
Network里取消samba36-server.
(3) 如果需要cloudflare ddns服务
Network–IP Addresses and Names里勾选ddns-scripts_cloudflare.com-v4
make download -j8
make V=s -j1 #在第一次时建议用单线程编译
make V=s -j$(nproc) #之后可以用多线程这样速度快
二次编译:
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make download -j8
make V=s -j$(nproc)
如果需要重新配置:
rm -rf ./tmp && rm -rf .config
make menuconfig
make V=s -j$(nproc)
在编译出现一些错误的时候你可以尝试清空一下,下面是几个常用的清空命令:
./scripts/feeds clean 清空下载的源码包
make clean 清除旧的编译产物(可选),在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除/bin和/build_dir目录中的文件。
make dirclean 清除旧的编译产物、交叉编译工具及工具链等目录(可选),更换架构编译前必须执行。此操作会删除/bin和/build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件
如何解决Ubuntu下的“E: Unable to correct problems, you have held broken packages.”的问题
sudo aptitude install 软件包:自动安装某个软件包
sudo aptitude install-y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
正常安装。
如何解决Ubuntu下的“E: Unable to correct problems, you have held broken packages.”的问题
原因
Linux下经常需要安装不同类型的库,在Ubuntu中,这些类库都是以“lib_name-version”的形式命名的。很多库之间存在依赖关系,即要安装这个就必须安装那个。有时候,类库之间依赖关系无法满足,你所要安装的程序就不能安装。
这类问题大多是由于相互依赖的几个库中一个或多个的版本已经更新,而用户要安装的库依赖于这几个库的较低的版本。
解决
sudo aptitude install (尖括号内为你要安装的程序的名字)
aptitude与 apt-get 一样,是 Debian 及其衍生系统中功能极其强大的包管理工具。与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。