Cursorを使って、Freebsdのipfw(ファイアーウォール)のLinux(Fedora 41 Kernel 6.13)への移植実験をしてみた。

 

まず、chatgptと相談した結果

 

IPFW のソースコードは FreeBSD の公式リポジトリから取得できます。以下の手順で入手してください。


1. ソースコードの取得

(1) FreeBSD Git リポジトリから取得

sh
コピーする編集する
git clone https://git.freebsd.org/src.git freebsd-src
cd freebsd-src

(2) IPFW のソースコードの場所

カーネルモジュール(ドライバ部分)とユーザーランドの実行部は分離されています。

コンポーネント

パス

カーネルモジュール (ipfw.ko)

sys/netpfil/ipfw/

ユーザーランドツール (ipfw コマンド)

sbin/ipfw/

カーネル関連ヘッダ

sys/netpfil/ipfw/ip_fw.h など


2. IPFW のカーネルモジュール (ipfw.ko) をビルド

FreeBSD sys/modules/ipfw/ にあるカーネルモジュールを Fedora 41 に移植するには、Netfilter に適応させる必要があります。

(1) カーネルモジュールのビルド

sh
コピーする編集する
cd freebsd-src/sys/modules/ipfw
make

Linux への移植では、FreeBSD 固有のコードを Netfilter 用に修正する必要があります。)


3. ユーザーランドツール (ipfw) のビルド

sh
コピーする編集する
cd freebsd-src/sbin/ipfw
make

この ipfw コマンドは、カーネルモジュール ipfw.ko と通信し、ファイアウォールルールを管理します。


IPFW Fedora 41 に移植する場合、どの機能を優先的に移植したいですか?

  • カーネルモジュール(ipfw.ko から始めるか?

  • ユーザーランド(ipfw コマンド) の移植を優先するか?

まずは FreeBSD sys/netpfil/ipfw/ のソースを調査して、Linux への適応を考えるのが良さそうですね。

あなた:

まず、ユーザーランドから開始します。Makefileが無いので作成しなければなりませんが、FreeBSDのソースツリーから切り出せますか?

ChatGPT:

メモリを更新しました

FreeBSD sbin/ipfw/ には Makefile が含まれていませんが、FreeBSD のソースツリーから ipfw の関連ファイルを切り出し、Linux (Fedora 41) 用の Makefile を作成できます。


1. 必要なファイルを取得

まず、FreeBSD sbin/ipfw/ にある以下のファイルを取得します:

sh
コピーする編集する
cd freebsd-src/sbin/ipfw
ls

含まれている主なファイル:

  • ipfw.c (メインのコード)

  • ipfw2.c

  • ipfw.h

  • ipfw.8 (マニュアル)

また、ヘッダーとして以下も必要です:

sh
コピーする編集する
cd freebsd-src/sys/netpfil/ipfw/
ls
  • ip_fw.h

  • ip_dummynet.h (Dummynet サポート用)

以下、略

 

 

gitでfreebsdのソースツリーをコピー(自分のHOMEディレクトリ)して、その中のipfwのディレクトリを同じくHOMEディレクトリのトップへコピーして開始。

 

まず、Cursorで~/ipfwディレクトリを開き、chatで以下指示。

 

freebsdからLinuxへ移植する。

freebsdのソースは~/freebsd*** を走査する。

ユーザーランドのソースツリーを走査し、各ディレクトリにMakefileを生成配置。

 

CursorでMakefileを作成したら、移植開始。単にmakeして出てきたエラーをchatウィンドウへ送り(ターミナルウィンドウから一発)エラー修正を指示。

 

ipfwのソースにはヘッダファイルが無いので当然そのエラーから修正していくことに。具体的なchatgptからの返答がchatウィンドウに出る。それをプロジェクトに反映。

 

ざっとこんな感じ。

 

ドライバは措いてある。テストなので。結果、

のような作業風景になった。あくまでテストなので本番は、いちいちエラーをchatに手動でおくるのでは無く自動で送ることを想定している。

 

さて、できるかどうか。

 

結果:ユーザーランドの部分のビルドは出来たが セグメンテーションフォールトでコアダンプ。原因を探っていたら、使用回数の上限に達した。使用してみての感想だが、どれだけ的確な指示をAIに出せるかと、生成されたコードの確認とデバッグを自分で出来なければ辛いだろうなと。同じお金を出すなら他にも選択肢はあるので試してみてからにしようかなと。また、過渡期なのは否めない。将来、AIを使いながらのプログラミングは必須になるだろうとは思うが、今はおまかせは出来ないというのが実感。