自己编译安装openwrt系统
发表于:2022-11-17 | 分类: Linux

前言

为什么要编译安装?

最近在使用openwrt系统做自己的网盘nas经常出现问题。主要表现在每次断电重启后系统就损坏了,又要重新刷一遍系统,非常麻烦。于是就想着自己动手编译一个比较好的系统。


Linux的软件安装方式

一般来说Linux软件的安装方式有两种。

一种方式是直接下载大神编译好的二进制文件,称为直接安装,常见的安装方法为使用包管理工具:apt、yum、apk等。

而另一种方式则是直接下载软件的源代码,勇源代码在自己的机器上进行编译,称为编译安装,常见的安装方法为使用编译工具make、cmake等。

下面我将从安装nginx的例子给大家说明直接安装和编译安装的不同。


直接安装的优缺点

这是直接安装nginx的Linux命令:

yum install nginx
# 直接通过apt包管理工具安装nginx

这种方式的好处是省力,快速,方便。直接一个命令交给包管理工具,然后你就可以去喝咖啡了,完全不用管。而缺点很明显,就是兼容性不够好,因为源代码编译的机器所使用的环境、处理器架构等都是与你本机有差异的。所以有可能软件在使用的过程中出现各种各样的问题,比如,死机、崩溃、速度慢等……


编译安装的优缺点

这是编译安装nginx的Linux命令:

mkdir -p /opt/data/source
cd /opt/data/source
wget http://nginx.org/download/nginx-1.17.4.tar.gz
tar zxmf nginx-1.17.4.tar.gz
# 获得源码并且解压

yum -y install gcc pcre-devel  zlib-devel openssl-devel libxml2-devel \
    libxslt-devel gd-devel GeoIP-devel jemalloc-devel libatomic_ops-devel \
    perl-devel  perl-ExtUtils-Embed
# 安装需要的依赖工具,一般是一些编译器

./configure \
    --with-threads \
    --with-file-aio \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_realip_module \
    --with-http_addition_module \
    --with-http_xslt_module=dynamic \
    --with-http_image_filter_module=dynamic \
    --with-http_geoip_module=dynamic \
    --with-http_sub_module \
    --with-http_dav_module \
    --with-http_flv_module \
    --with-http_mp4_module \
    --with-http_gunzip_module \
    --with-http_gzip_static_module \
    --with-http_auth_request_module \
    --with-http_random_index_module \
    --with-http_secure_link_module \
    --with-http_degradation_module \
    --with-http_slice_module \
    --with-http_stub_status_module \
    --with-stream=dynamic \
    --with-stream_ssl_module \
    --with-stream_realip_module \
    --with-stream_geoip_module=dynamic \
    --with-stream_ssl_preread_module \
    --with-compat  \
    --with-pcre-jit
    make && make install
# 进行编译,其中前面的--with可以指定需要的功能模块。

显然这么长串的命令对于新手来说确实不太友好。而且中间出现的各种错误也是成为一系列的绊脚石,成了劝退很多人的大坑。但是既然这么费劲,肯定有他的好处。好处就是,编译安装做出来的软件兼容性非常好!你可以理解为,根据你机器进行量身订做了一个软件!


Openwrt是什么?

这部分的内容建议自己百度,因为这边过于冗长,就不展示了。简单来说Openwrt也是一个嵌入式的Linux系统,主要安装在路由器中,用于管理网络,服务器搭建网盘等服务。


开始编译系统

进行编译前的准备

设备说明

开发板:NanoPi-R2S、存储卡8G以上、读卡器、能上网的电脑


编译前的准备

1.下载系统。

我们到Armbian去下载系统。
进入Armbian网站的NanoPi_R2S主页:https://www.armbian.com/nanopi-r2s/

我们下载jammy,所谓jammy就是Ubuntu的最新版发行代号。

直接戳Direct download进行下载。然后对下载的镜像进行解压。

2.刷写系统。

在电脑上安装balenaEtcher并且打开,通过读卡器连接储存卡到电脑,然后选择flash from file,选择我们刚刚解压的镜像,选择我们存储下的盘,点击Flash!然后等待就行了。

3.启动系统。

把刚刚刷好的系统放进我们的开发板,开发板wan口连接好路由器的lan口,启动。

当WAN口灯亮起时,我们到路由器主页查看NanoPi-R2S的ip地址,确保电脑和开发板连接同一个路由器。

然后使用ssh连接到开发板,默认用户名密码为root1234

4.配置系统。

登录系统后我们先更改root的密码,这边建议复杂一点。接着设置时区Asia/Shanghai,语言默认

然后我们更新系统

apt-get update
apt-get dist-upgrade

经过漫长的等待。系统更新完成。

接着我们下载依赖包

sudo apt install -y ack antlr3 aria2 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 libpython3-dev qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

然后我们就能够下载源代码并且进行编译的过程了,这里我们使用lean的源码

git clone https://github.com/coolsnowwolf/lede
cd lede
./scripts/feeds update -a
./scripts/feeds install -a
make menuconfig

我们接着可以看见图形界面了,在这里可以自己选择需要的插件

接着我们使用Save保存,然后输入以下的命令

make download -j8
# j后面跟着的是线程数量。
make V=s -j1

然后就是漫长的等待环节。当编译完成之后,我们就可以在bin/targets这个目录底下找到编译完成之后的固件了。那么使用同样的方法进行刷写,然后启动就大功告成了!

上一篇:
主页上新!
下一篇:
给学C语言的同学的一点建议