banner
miaoer

miaoer

喵二の小博客 https://www.miaoer.net xLog 分站
tg_channel
telegram
bilibili

rootfs版 CatWrt(OpenWrt) 起動イメージカスタマイズ

本篇は rootfs 版 CatWrt (OpenWrt) 起動イメージのカスタマイズであり、上級者向けのカスタムファームウェア機能を使用するのに適しています。これには、イメージの拡張、ソースの変更、ソフトウェアパッケージのカスタマイズが含まれます。

前言#

​ソフトルーターに詳しい友人たちは、ファームウェア(イメージ)をダウンロードする際、一般的に squashfs という文字が含まれたイメージを選択することを知っていますが、もう一つの神秘的な選択肢 - rootfs があります。これはあまり言及されることがなく、一般的な用途は docker のイメージや LXC コンテナを作成することですが、もう一つの用途として OpenWrt のシステムパーティションの作成があります。

私たちが普段接触する OpenWrt のルートファイルシステムは一般的に squashfs であり、このファイルシステムは私たちに一定の安全感をもたらします。ソフトルーターにプラグインをインストールしたり、設定を変更して OpenWrt に異常が発生した場合、マウントされたファイルの変更操作をクリアすることで初期状態に戻すことができます。ハードルーターでは、squashfs + 設定パーティションの外部マウントにより、外部ボタンを使ってルーターの変更を簡単に元に戻すことができます。squashfs は非常に良いですが、システムパーティションに直接ファイル、設定、プログラムを追加、削除、変更することを妨げます。


システムパーティションの変更ができない問題を解決する方法は非常に簡単で、OpenWrt のデフォルトの操作でもあります。

第一の方法:オーバーレイパーティションを作成し、すべての変更されたファイルをここに保存し、マウント方式でシステムパーティションを直接上書きして変更を実現します。この操作はイメージを作成するのに似ており、イメージの変更を通じてシステムを変更します。

/overlay パーティションを空にすると、システムパーティションの変更を元に戻すことができます。

第二の方法:システムパーティションの squashfs ファイルシステム内のファイルを他の書き込み可能なファイルシステム(f2fs、ext4、xfs など)に移動し、起動情報を作成してシステムを起動します。OpenWrt x86 では、システム -> マウントポイント ->/-> 変更を通じて、/ 下のファイルを新しい書き込み可能なパスにコピーし、起動項目を作成することで / の読み書きを実現できますが、この方法は初心者には優しくなく、経験者でも失敗することがあります。

それ以外にも、第三の方法があります:Linux カーネル + rootfs + grub(ブートローダー)を使用して起動可能な Linux システムを作成する方法です。この方法で作成されたシステムは、ルート権限下でルートパスが読み書き可能です。本記事ではこの方法を紹介します


実現の原理:同 Linux 起動プロセス


第一步:準備段階#

カーネル(kernel)、ブート(grub)および rootfs の準備。#

ブートローダー(bootlodaer)がブートプログラム(grub)を起動し、ブートプログラムがカーネル(kernel)を起動し、カーネルが rootfs を初期化(マウントと初期化)し、rootfs 内のプロセスを起動します。

起動パーティションをダウンロードします EFI ブートの 従来の BIOS ブート方式

一般的に OpenWrt は単独のカーネルとブートを提供していないため、私たちは作成したいターゲットバージョンのイメージをダウンロードしてベースパッケージの変更を行う必要があります。適切なブート方式のベースパッケージを作成することで、対応するターゲットのシステムで OpenWrt システムを簡単に起動できます。

rootfs をダウンロードします CatWrt.v23.8.x86_64-rootfs.tar.gz 一般的に rootfs は xxx-rootfs.tar.gz で終わります。

wget https://github.com/miaoermua/CatWrt/releases/download/v23.8/CatWrt.v23.8.x86_64-squashfs-combined-efi.img

wget https://github.com/miaoermua/CatWrt/releases/download/v23.8/CatWrt.v23.8.x86_64-rootfs.tar.gz

マルチパーティションマウントツール kpartx の準備#

Kpartx はパーティションのデバイスマッピングを作成するツールです。

Debian/Ubuntu:

apt install kpartx -y 

alpineLinux:

apk add kpartx

CentOS/Fedora/OpenRuler:

yum install kpartx -y

image

第二步:イメージ処理#

  1. cfdisk (fdisk) ツールを使用してイメージ内のシステムパーティションを削除します。
cfdisk CatWrt.v23.8.x86_64-squashfs-combined-efi.img

image

Delete 完了後、Write を選択し、yes を入力して Quit で終了します。

同期が完了するのを待ちます。

image

  1. dd コマンドを使用してイメージにスペースを追加します。
dd if=/dev/zero bs=1M count=256 >>CatWrt.v23.8.x86_64-squashfs-combined-efi.img 

bs パラメータ 数字 + 単位 count パラメータ 数量 >> は追加を示します。

これは /dev/zero から 1M*256 の容量をイメージに追加することを意味します(256M 拡張)。

必要に応じてイメージを任意のサイズに拡張できます。

例えば dd if=/dev/zero bs=1G count=5 >>CatWrt.v23.8.x86_64-squashfs-combined-efi.img は 5G 拡張を示します。

  1. cfdisk を使用して拡張後のイメージの末尾にパーティションを作成します。
cfdisk CatWrt.v23.8.x86_64-squashfs-combined-efi.img

Free space を選択します。

image

次に、作成するパーティションのサイズを尋ねられますが、ここではそのまま Enter を押します。

完了後、Write、yes、Quit を選択します。

fdisk 操作は似ています。

image

  1. kpartx を使用してイメージをハードディスクループデバイスとしてマウントします。
losetup /dev/loop7 CatWrt.v23.8.x86_64-squashfs-combined-efi.img

/dev/loop7 が占有されている場合は、他の loop0、loop1 などに変更します。

マッピングされたパーティションテーブルを確認します。

kpartx -av /dev/loop7

image

その中の loop7p2 が私たちのターゲットです。

このパーティションをフォーマットします。

mkfs.ext4 /dev/mapper/loop7p2

CatWrt カーネルは f2fs をサポートしており、f2fs フォーマットにフォーマットすることもできます。f2fs はイメージをフラッシュストレージメディア(USB ドライブ、外付けハードディスク SSD、固体ハードディスク(nvme 固体、m2SATA、SATASSD などを含む)に書き込むのに適しています)コマンド mkfs.f2fs /dev/mapper/loop7p2

image

  1. パーティション UUID を確認します(フォーマット後にパーティション UUID が変更されるため、先にフォーマットしてから確認する必要があります)。
cfdisk /dev/loop7

image

パーティション UUID は後続のシステムブートで使用されます。

  1. 一時的なマウントパスを作成し、システムパーティションをマウントします。
mkdir /mnt/mount
mount /dev/mapper/loop7p2 /mnt/mount

image

  1. rootfs を解凍します。
tar -xzvf CatWrt.v23.8.x86_64-rootfs.tar.gz -C /mnt/mount
cd /mnt/mount
ls

私たちはすでに起動イメージを作成しました。

image

第七歩終了。システムを変更する必要がない場合は、第八歩に進んでください。


この時点でこのイメージのシステムパーティションはすでに処理されています。もちろん、イメージを最適化することもできます。

chroot /mnt/mount

ソースを編集し、一部のソフトウェアを更新します(CatWrt にはこれがあります)。

image

bash-5.2# vim /etc/opkg/distfeeds.conf

Tencent ソースに変更します。

src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/base
src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.9/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony
bash-5.2# mkdir /var/lock -p
bash-5.2# opkg update

プログラムパッケージをインストールします…(文末を参照)。

終了します。

bash-5.2# exit

exit
  1. システムパーティションをアンマウントします。
root@pve:~# umount /mnt/mount
  1. boot パーティションをマウントし、起動項目を変更します。
mount /dev/mapper/loop7p1 /mnt/mount

ls /mnt/mount

image

root@pve:~/OpenWrt# cd /mnt/mount/boot/grub/

root@pve:/mnt/mount/boot/grub# ls

boot.img core.img grub.cfg

root@pve:/mnt/mount/boot/grub# vim grub.cfg
  1. 前に記録した UUID を PARTUUID に入力(置換)します。

image

  1. ファイルを保存し、パーティションをアンマウントします。
umount /mnt/mount
  1. ループデバイスをアンマウントします。
root@pve:~# losetup -d /dev/loop7

完成#

新しいイメージ(CatWrt.v23.8.x86_64-squashfs-combined-efi.img)を起動ディスクに書き込み、起動します。(PVE にハードディスクを追加)

この時点で名前を CatWrt.v23.8.x86_64-6G-ext4-rootfs-efi.img に変更する必要があります。

Enjoy Image!

スクリーンショット#

以下は 10G バージョン拡張のスクリーンショットです。

10G 拡張版のダウンロードリンク: Here

image

image

最適化#

仮想化環境下で AMD GPU、Intel GPU ドライバをアンインストールします。

opkg remove amdgpu-firmware

opkg remove i915-firmware

curl を更新します。

opkg upgrade libcurl4 curl

image

安全に更新できるプログラムリスト(等):

xray-core v2ray-core v2ray-geoip fdisk blkid mount-utils libopenssl-conf node libfdisk1 samba4-libs cfdisk parted samba4-server tailscale ethtool libblkid1 lsblk libmount1 tailscaled zerotier libopenssl3 terminfo

更新を推奨しないもの:kmod-xxx uci docker (d) dnsmasq-full containerd strongswan など。

apk パッケージマネージャーと neofetch をインストールします。

*Linux システム情報とディストリビューションアイコンを表示します。

opkg install apk alpine-keys alpine-repositories
apk update --allow-untrusted
apk add neofetch --allow-untrusted
neofetch

image

apk パッケージマネージャーを使用して、他のものをインストールできます。例えば、java をインストールして Minecraft サーバーを構築したり、glibc サポートをインストールして他のプログラムを実行したり、完全な開発環境をインストールしてリモートテストサーバーを構築することができます。

CatWrt 拡張アプリケーションのインストール、全系エコシステム共通 - 喵二の小ブログ (miaoer.xyz)

本ブログは CatWrt ユーザー体験プログラム江西理工大学の先輩から提供されたもので、原文は rootfs 版 CatWrt (OpenWrt) 起動イメージ定制 | Enjoy your life | AEnjoy’s Blog です。

この記事は Mix Space によって xLog に同期更新されました。原始リンクは https://www.miaoer.xyz/posts/blog/rootfs-catwrtoropenwrt-customization

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。