小白自制Linux开发板 五. Debian文件系统制作,以及WIFI配置、交换分区配置
<p>该片文章将完整记录一个Debian的最小文件系统的生成,以及自定义配置WIFI组件、网络组件和交换分区配置</p><blockquote>
<p>本文章参考:<br>https://whycan.com/t_4236.html<br>http://www.leux.cn/doc/debootstrap.html(该网站在备案中,可能暂时无法查看了)<br>帖子整理完成。</p>
</blockquote>
<h2 id="1-制作Debian系统">1. 制作Debian系统</h2>
<p>构建debian文件系统,作为记录,最小rootfs在180MB左右。</p>
<h3>1.1 配置构建环境</h3>
<p>安装构建文件系统的工具,一个是用来chroot,一个是用来构建文件系统</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> qemu-user-static -<span style="color: rgba(0, 0, 0, 1)">y
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> apt <span style="color: rgba(0, 0, 255, 1)">install</span> debootstrap -<span style="color: rgba(0, 0, 0, 1)">y
</span><span style="color: rgba(0, 0, 255, 1)">mkdir</span> rootfs</pre>
</div>
<p>构建文件系统之前,你要知道你想要构建哪个版本的文件系统,<br>我从 https://www.debian.org/mirror/list.zh-cn.html 这里,<br>选择了我访问速度快的源,并且该源有armel。</p>
<p>armhf (支持硬件浮点)<br>armel (软浮点)</p>
<p>我看华为源挺快的,就用这个了mirrors.huaweicloud.com<br>然后就是debian的版本,我尝试一下最新的,buster</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">sudo</span> debootstrap --foreign --verbose --arch=armelbuster rootfs http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.huaweicloud.com/debian/</span></pre>
</div>
<p>构建完成之后,需要chroot进去修改密码等配置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd rootfs
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mount</span> --bind /dev dev/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mount</span> --bind /sys sys/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mount</span> --bind /proc proc/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">mount</span> --bind /dev/pts dev/pts/<span style="color: rgba(0, 0, 0, 1)">
cd ..
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">cp</span> /usr/bin/qemu-arm-static rootfs/usr/bin/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">chmod</span> +x rootfs/usr/bin/qemu-arm-<span style="color: rgba(0, 0, 0, 1)">static
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> LC_ALL=C LANGUAGE=C LANG=C <span style="color: rgba(0, 0, 255, 1)">chroot</span> rootfs /debootstrap/debootstrap --second-stage --<span style="color: rgba(0, 0, 0, 1)">verbose
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> LC_ALL=C LANGUAGE=C LANG=C <span style="color: rgba(0, 0, 255, 1)">chroot</span> rootfs</pre>
</div>
<p>最后一条命令chroot完成,<br>此时可以先apt-get等给你的文件系统安装你需要的软件包</p>
<p>为了提高下载速度,我们首先修改源</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/apt/sources.list</pre>
</div>
<p>改为(注意要换其他源用http方式可以访问的,要不然还得处理https的内容):</p>
<div class="cnblogs_code">
<pre>deb http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">mirrors.huaweicloud.com/debian buster main</span></pre>
</div>
<p>改完以后执行:</p>
<div class="cnblogs_code">
<pre>apt-get update</pre>
</div>
<p>使源生效</p>
<p>安装网络相关的库</p>
<div class="cnblogs_code">
<pre>apt-get <span style="color: rgba(0, 0, 255, 1)">install</span><span style="color: rgba(0, 0, 0, 1)"> wpasupplicant #安装WIFI配置相关的组件
apt</span>-get <span style="color: rgba(0, 0, 255, 1)">install</span> net-<span style="color: rgba(0, 0, 0, 1)">tools #安装网络基础组件、如使用ifconfig等
apt</span>-get <span style="color: rgba(0, 0, 255, 1)">install</span><span style="color: rgba(0, 0, 0, 1)"> udhcpc #当wifi连接成功后,需要用这个组件去获取IP地址
## 其他组件
apt</span>-get <span style="color: rgba(0, 0, 255, 1)">install</span> wireless-<span style="color: rgba(0, 0, 0, 1)">tools
apt </span><span style="color: rgba(0, 0, 255, 1)">install</span> <span style="color: rgba(0, 0, 255, 1)">sudo</span> vim openssh-<span style="color: rgba(0, 0, 0, 1)">server htop
apt </span><span style="color: rgba(0, 0, 255, 1)">install</span> pciutils usbutils acpi</pre>
</div>
<h3>1.2 配置账号</h3>
<p>修改root登录密码的方式如下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">passwd</span> root</pre>
</div>
<p>添加用户</p>
<div class="cnblogs_code">
<pre>groupadd <用户组><span style="color: rgba(0, 0, 0, 1)">
useradd </span>-m -g <用户组> -s /bin/bash <用户名>
<span style="color: rgba(0, 0, 255, 1)">passwd</span> <用户名></pre>
</div>
<h3>1.3 新增账号sudo配置</h3>
<p>对于出现</p>
<div class="cnblogs_code">
<pre><用户名> is not <span style="color: rgba(0, 0, 255, 1)">in</span> the sudoers <span style="color: rgba(0, 0, 255, 1)">file</span>.This incident will be reported.</pre>
</div>
<p>切换到超级用户:</p>
<div class="cnblogs_code">
<pre>$ <span style="color: rgba(0, 0, 255, 1)">su</span></pre>
</div>
<p>打开<code>/etc/sudoers</code>文件:</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/sudoers</pre>
</div>
<p>修改文件内容<br><img src="https://img2020.cnblogs.com/blog/483434/202110/483434-20211018174205921-1211442453.png"></p>
<p>保存退出</p>
<p>修改主机名,否则将会以当前编译的系统的主机名进行设置(如:笔者为Ubuntu,相当的尴尬)</p>
<div class="cnblogs_code">
<pre>HOSTNAME=<你的主机名>
<span style="color: rgba(0, 0, 255, 1)">echo</span> $HOSTNAME > /etc/<span style="color: rgba(0, 0, 255, 1)">hostname</span>
<span style="color: rgba(0, 0, 255, 1)">echo</span> $HOSTNAME > /proc/sys/kernel/<span style="color: rgba(0, 0, 255, 1)">hostname</span>
<span style="color: rgba(0, 0, 255, 1)">sed</span> -i <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/localhost/s/$/\t</span><span style="color: rgba(128, 0, 0, 1)">'"</span><span style="color: rgba(128, 0, 0, 1)">$HOSTNAME</span><span style="color: rgba(128, 0, 0, 1)">"'</span><span style="color: rgba(128, 0, 0, 1)">/g</span><span style="color: rgba(128, 0, 0, 1)">'</span> /etc/hosts</pre>
</div>
<h3>1.4 配置时区</h3>
<p>修改系统默认时区</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">cp</span> /usr/share/zoneinfo/Asia/Shanghai /etc/localtime</pre>
</div>
<h3>1.5 配置SSH</h3>
<p>如果要使用SSH服务,并且允许SSH客户端以root方式登录需要进行一下设置。</p>
<div class="cnblogs_code">
<pre>vi rootfs/etc/<span style="color: rgba(0, 0, 255, 1)">ssh</span>/sshd_config</pre>
</div>
<p>添加</p>
<div class="cnblogs_code">
<pre>PermitRootLogin yes</pre>
</div>
<h3>1.6 rootfs打包</h3>
<p>当所有的内容制作完成,就可以清理缓存,打包之后就可以替换你的文件系统了</p>
<div class="cnblogs_code">
<pre>apt-<span style="color: rgba(0, 0, 0, 1)">cache clean #删除安装包
exit#退出chroot
</span><span style="color: rgba(0, 0, 255, 1)">rm</span> rootfs/usr/bin/qemu-arm-static</pre>
</div>
<p>卸载刚在挂载的文件夹。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">cd rootfs
</span><span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">umount</span> dev/pts/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">umount</span> dev/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">umount</span> sys/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">umount</span> proc/
<span style="color: rgba(0, 0, 255, 1)">sudo</span> <span style="color: rgba(0, 0, 255, 1)">umount</span> dev/pts/</pre>
</div>
<p>打包文件。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># cd rootfs#进到文件系统目录,如果已经在该文件夹下,可以忽略
</span><span style="color: rgba(0, 0, 255, 1)">tar</span> cvf ../rootfs.<span style="color: rgba(0, 0, 255, 1)">tar</span> . #要注意那个.代表当前目录</pre>
</div>
<p>生成的rootfs.tar任意解压到文件系统即可</p>
<p> </p>
<h2 id="2-使用wpa-supplicant连接wifi">2. 使用wpa_supplicant连接wifi</h2>
<p>创建配置文件</p>
<div class="cnblogs_code">
<pre>vi /etc/wpa_supplicant.conf</pre>
</div>
<p>输入内容:</p>
<div class="cnblogs_code">
<pre>network=<span style="color: rgba(0, 0, 0, 1)">{
ssid</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">我的热点</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
psk</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">我的密码</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
}</span></pre>
</div>
<p>然后执行命令</p>
<div class="cnblogs_code">
<pre>wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf</pre>
</div>
<p> </p>
<p> 示例如下</p>
<div class="cnblogs_code">
<pre>root@dika-pc:~# wpa_supplicant -B -i wlan0 -c /etc/<span style="color: rgba(0, 0, 0, 1)">wpa_supplicant.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
root@dika</span>-pc:~# [<span style="color: rgba(128, 0, 128, 1)">444.817608</span>] wlan0: authenticate with e4:<span style="color: rgba(128, 0, 128, 1)">67</span>:1e:<span style="color: rgba(128, 0, 128, 1)">02</span>:<span style="color: rgba(128, 0, 128, 1)">33</span><span style="color: rgba(0, 0, 0, 1)">:c0
[</span><span style="color: rgba(128, 0, 128, 1)">444.843208</span>] wlan0: send auth to e4:<span style="color: rgba(128, 0, 128, 1)">67</span>:1e:<span style="color: rgba(128, 0, 128, 1)">02</span>:<span style="color: rgba(128, 0, 128, 1)">33</span>:c0 (try <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">)
[</span><span style="color: rgba(128, 0, 128, 1)">444.900867</span><span style="color: rgba(0, 0, 0, 1)">] wlan0: authenticated
[</span><span style="color: rgba(128, 0, 128, 1)">444.935561</span>] wlan0: associate with e4:<span style="color: rgba(128, 0, 128, 1)">67</span>:1e:<span style="color: rgba(128, 0, 128, 1)">02</span>:<span style="color: rgba(128, 0, 128, 1)">33</span>:c0 (try <span style="color: rgba(128, 0, 128, 1)">1</span>/<span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">)
[</span><span style="color: rgba(128, 0, 128, 1)">444.986874</span>] wlan0: RX AssocResp from e4:<span style="color: rgba(128, 0, 128, 1)">67</span>:1e:<span style="color: rgba(128, 0, 128, 1)">02</span>:<span style="color: rgba(128, 0, 128, 1)">33</span>:c0 (capab=<span style="color: rgba(128, 0, 128, 1)">0x411</span> status=<span style="color: rgba(128, 0, 128, 1)">0</span> aid=<span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">)
[</span><span style="color: rgba(128, 0, 128, 1)">445.033483</span><span style="color: rgba(0, 0, 0, 1)">] wlan0: associated
[</span><span style="color: rgba(128, 0, 128, 1)">446.047125</span><span style="color: rgba(0, 0, 0, 1)">] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
</span>^C</pre>
</div>
<p>执行dhcp命名,获取IP地址</p>
<div class="cnblogs_code">
<pre>root@dika-pc:~# udhcpc -<span style="color: rgba(0, 0, 0, 1)">i wlan0
udhcpc: started, v1.</span><span style="color: rgba(128, 0, 128, 1)">30.1</span><span style="color: rgba(0, 0, 0, 1)">
udhcpc: sending discover
udhcpc: sending </span><span style="color: rgba(0, 0, 255, 1)">select</span> <span style="color: rgba(0, 0, 255, 1)">for</span> <span style="color: rgba(128, 0, 128, 1)">172.16</span>.<span style="color: rgba(128, 0, 128, 1)">1.106</span><span style="color: rgba(0, 0, 0, 1)">
udhcpc: lease of </span><span style="color: rgba(128, 0, 128, 1)">172.16</span>.<span style="color: rgba(128, 0, 128, 1)">1.106</span> obtained, lease <span style="color: rgba(0, 0, 255, 1)">time</span> <span style="color: rgba(128, 0, 128, 1)">43200</span><span style="color: rgba(0, 0, 0, 1)">
root@dika</span>-pc:~# <span style="color: rgba(0, 0, 255, 1)">ping</span><span style="color: rgba(0, 0, 0, 1)"> www.dika.ren
PING www.dika.ren (</span><span style="color: rgba(128, 0, 128, 1)">149.129</span>.<span style="color: rgba(128, 0, 128, 1)">80.46</span>) <span style="color: rgba(128, 0, 128, 1)">56</span>(<span style="color: rgba(128, 0, 128, 1)">84</span><span style="color: rgba(0, 0, 0, 1)">) bytes of data.
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from <span style="color: rgba(128, 0, 128, 1)">149.129</span>.<span style="color: rgba(128, 0, 128, 1)">80.46</span>: icmp_seq=<span style="color: rgba(128, 0, 128, 1)">3</span> ttl=<span style="color: rgba(128, 0, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">217</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from <span style="color: rgba(128, 0, 128, 1)">149.129</span>.<span style="color: rgba(128, 0, 128, 1)">80.46</span>: icmp_seq=<span style="color: rgba(128, 0, 128, 1)">4</span> ttl=<span style="color: rgba(128, 0, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">417</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from <span style="color: rgba(128, 0, 128, 1)">149.129</span>.<span style="color: rgba(128, 0, 128, 1)">80.46</span>: icmp_seq=<span style="color: rgba(128, 0, 128, 1)">5</span> ttl=<span style="color: rgba(128, 0, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">102</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span><span style="color: rgba(128, 0, 128, 1)">64</span> bytes from <span style="color: rgba(128, 0, 128, 1)">149.129</span>.<span style="color: rgba(128, 0, 128, 1)">80.46</span>: icmp_seq=<span style="color: rgba(128, 0, 128, 1)">6</span> ttl=<span style="color: rgba(128, 0, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(128, 0, 128, 1)">108</span><span style="color: rgba(0, 0, 0, 1)"> ms
</span>^<span style="color: rgba(0, 0, 0, 1)">C
</span>--- www.dika.ren <span style="color: rgba(0, 0, 255, 1)">ping</span> statistics ---
<span style="color: rgba(128, 0, 128, 1)">6</span> packets transmitted, <span style="color: rgba(128, 0, 128, 1)">4</span> received, <span style="color: rgba(128, 0, 128, 1)">33.3333</span>% packet loss, <span style="color: rgba(0, 0, 255, 1)">time</span><span style="color: rgba(0, 0, 0, 1)"> 346ms
rtt min</span>/avg/max/mdev = <span style="color: rgba(128, 0, 128, 1)">102.009</span>/<span style="color: rgba(128, 0, 128, 1)">211.020</span>/<span style="color: rgba(128, 0, 128, 1)">417.367</span>/<span style="color: rgba(128, 0, 128, 1)">127.586</span> ms</pre>
</div>
<p> </p>
<h2 id="3-增加swap分区">3. 增加swap分区</h2>
<p>在使用一些软件的过程中,会遇到系统崩溃,尤其是使用 apt-get install 的时候,所以需要加入swap分区,可以简单理解为虚拟内存。</p>
<p>使用</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">free</span></pre>
</div>
<p>查看当前swap大小,<br>使用如下命令创建你想要添加swap分区的大小</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">dd</span> <span style="color: rgba(0, 0, 255, 1)">if</span>=/dev/zero of=/swap1 bs=1M count=<span style="color: rgba(128, 0, 128, 1)">512</span>#改成你要设置的SWAP大小,512就是512MB</pre>
</div>
<p>设置swap分区文件</p>
<div class="cnblogs_code">
<pre>mkswap /swap1</pre>
</div>
<p>激活swap分区</p>
<div class="cnblogs_code">
<pre>swapon /swap1</pre>
</div>
<p>此时使用free命令就能看到创建好的swap分区,但这只是临时性的, 重启会失效,需要配置一下,下次开机时候要开swap</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">vi</span> /etc/fstab</pre>
</div>
<p>操作,在最后一行添加 </p>
<div class="cnblogs_code">
<pre>/swap1 swap swap defaults <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">0</span></pre>
</div>
<hr>
<p> </p>
<h2>展示</h2>
<p>开始进入Debian</p>
<p> <img src="https://img2020.cnblogs.com/blog/483434/202110/483434-20211019075410730-1057812047.png"></p>
<p>使用我们自定义的pi账户登录</p>
<p><img src="https://img2020.cnblogs.com/blog/483434/202110/483434-20211019075535726-816346394.png"></p>
<p> </p>
<p> 使用命令查看Swap分区</p>
<p><img src="https://img2020.cnblogs.com/blog/483434/202110/483434-20211019075611442-1472048246.png"></p>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<hr>
<div style="background-color: #FFFAF0">
<div style="margin: 0px 20px 0px 20px">
<p>[转载请保留作者信息 作者:冯天文 ]</p>
</div>
</div><br><br>
来源:https://www.cnblogs.com/twzy/p/15160824.html
頁:
[1]