FreeBSD で Bash のアップデート

FreeBSD の ports へ Bash のアップデート(4.3.39_2 から bash-4.3.39_3 へ)が到着しました。そして珍しいものですが。shared-mime-info もアップデート(1.1_1 から 1.4 へ)も到着していました。

全て portmaster -a で一気に更新をしておきました。

Linksys WRT54G V2 の SD カードは Tomato で動作

先日 SD カードソケットを追加したリンクシス WRT54G V2 ですが、OpenWrt で動作しませんでした。その後 Tomato ファームウェアにも SD カードに対応したファームウェアが存在していることを発見して、この SD カード対応の Tomato ファームウェアをインストールして動作確認を行いました。しかし SD カードが動作するまでには苦難の道のりが待っていました(笑)。

SD カード対応版の Tomato ファームウェアで確認ができました。

要点を最初に述べるべきなのか、それとも実際に苦労した過程の順番に記述するべきか悩みました。

・・・要点から述べることとしました。

SD カードソケットへの配線間違え

まず SD カードソケットへの配線が参考にした OpenWrt の Wiki のページに誤りがありました。その間違えに気づいたのが、SD カード対応の Tomato ファームウェアをインストールしてから判明しました。当初はやはり Tomato ファームウェアでも動作しませんでした。そこで再度 SD カードの配線を見直すことから始めました。

イーサネット・スイッチ IC の ADM6996L のデータシートを探し出し、ピン配置(pinout)から集合抵抗器の RP3 から SD カードソケットへどのように配線されているか観察しました。ここで間違えが判明しました。ADM6996L と RP3 の関係は次のようになっていました。参考にしたものは SD #5(CLK)SD #7(DO) が入れ違っていました。

ADM6996L #80(EECS)–RP3–GPIO2–(未使用)
ADM6996L #81(EECK)–RP3–GPIO3–SD #5(CLK)
ADM6996L #84(EDO)—RP3–GPIO4–SD #7(DO)
ADM6996L #79(EDI)—RP3–GPIO5–SD #2(DI)

WRT54G V2 の場合、このように SD カードへ配線してください。

GPIO の割り当て
 CS – GPIO7
 CLK – GPIO3
 DI – GPIO5
 DO – GPIO4

[ 補足説明 ]
イーサネット・スイッチ IC の ADM6996L と SD カードは、共に GPIO の DI(データ入力), DO(データ出力), CLK(クロック信号) の三つの信号を共用します。ADM6996L と SD カードは、CS(チップセレクト)信号により、どちらのデバイスを有効にするか指定します。そのため CS 信号は共用できない理由になっています。GPIO2 が ADM6996L、GPIO7が SD カードの割り当てとなっています。

Tomato ファームウェアのバージョン

上記の通り SD カードソケットへの配線間違えを修正しましたが、すぐに SD カードを認識してくれたわけではありませんでした。
元々は、私が愛用している 2.4 系 Linux を使用した Shibby 版の Tomato ファームウェア(tomato-ND-1.28.5x-124-SD-VPN.trx)で動作確認を行なっていました。この Shibby 版の Tomato ファームウェアでは、 SD カードのモジュールを有効にするとモジュールエラーとなってしまって、SD カードを認識することはありませんでした。単純なソフトウェア上の問題なのか?それともハードウェアに依存するエラーなのかは不明でした。

そこで SD カードモジュールが追加されたオリジナル版の Tomato ファームウェアをインストールしてみました。すると SD カードを認識して、読み書きも問題なく出来ました。

Tomato ファームウェアの SD カードの設定画面です。

FON2100E の SD カードの時もそうでしたが、古いバージョンで動作することがこの Tomato ファームウェアでみられました。どうも最近は SD カードを追加する改造をする人が少なく、このようなファームウェアの問題点を指摘する人も少なくなっているのでしょうか?

参考ウェブサイト
Tomato firmware with SDHC mod – Gemini
http://gemini.net.pl/~slodki/tomato-sdhc.html
tomato-sdhc-ND-1.28.01
http://gemini.net.pl/~slodki/tomato-sdhc-ND-1.28.01.7z

さてここまで検証したところで、真打の OpenWrt Attitude Adjustment 12.09 を再度インストールしなおして、動作確認をしてみました。やはり動作エラーで SD カードを認識しませんでした。どうも SD カード関連のモジュールエラーのようです。

OpenWrt の場合、システムメモリの容量不足で特定のバージョンまでしか十分に動作させることが出来ないようです。システムメモリを増加させた WRT54G で、新しいバージョンのファームウェアの検証が十分に行われていないのかもしれません。

WRT54G については、もう少し検証を重ねてみたいと思っています。

[追記:2015-07-30]

どうも無線LANの設定などを行うと、何故か SD カードの内容が破壊されてしまうようです。そのため SD カードが認識され無くなってしまいます。SD カードを再度フォーマットし直して、挿し直すと認識するようになります。どうもファームウェアが安定していないようです。

FreeBSD 9.3 の p21 (BIND, OpenSSH, TCP) アップデート

FreeBSD 9.3 へ p21 アップデート(3個)が到着しました。BIND がリモート拒否の脆弱性問題、TCP のリソース枯渇問題、  OpenSSH の脆弱性の解消だそうです。なお FreeBSD 10 系のみの問題として bsdpatch が存在しています。
Debian にも BIND のシステムアップデートが到着していたので FreeBSD にも対策が来ると思っていました(笑)。

FreeBSD-SA-15:17.bind
https://www.freebsd.org/security/advisories/FreeBSD-SA-15:17.bind.asc
FreeBSD-SA-15:16.openssh
https://www.freebsd.org/security/advisories/FreeBSD-SA-15:16.openssh.asc
FreeBSD-SA-15:15.tcp
https://www.freebsd.org/security/advisories/FreeBSD-SA-15:15.tcp.asc
FreeBSD-SA-15:14.bsdpatch (FreeBSD 10 系のみ)
https://www.freebsd.org/security/advisories/FreeBSD-SA-15:14.bsdpatch.asc

/usr/src/UPDATING の内容

20150728:       p21     FreeBSD-SA-15:15.tcp
                        FreeBSD-SA-15:16.openssh
                        FreeBSD-SA-15:17.bind

Fix resource exhaustion in TCP reassembly. [SA-15:15]
Fix OpenSSH multiple vulnerabilities. [SA-15:16]
Fix BIND remote denial of service vulnerability. [SA-15:17]

ソースツリーの更新

subversion でソースツリーを更新しました。

# svn update /usr/src
Updating ‘/usr/src’:
U    /usr/src/sys/netinet/tcp_reass.c
U    /usr/src/sys/netinet/tcp_var.h
U    /usr/src/sys/netinet/tcp_subr.c
U    /usr/src/sys/conf/newvers.sh
U    /usr/src/crypto/openssh/auth2-chall.c
U    /usr/src/crypto/openssh/sshconnect.c
U    /usr/src/contrib/bind9/lib/dns/tkey.c
G    /usr/src/UPDATING
Updated to revision 286015.

ユーザランドとカーネルの再ビルド

今回のアップデートでは、ユーザランドとカーネルの再ビルド(再構築)が必要です。

# cd /usr/src
# make buildworld
# make buildkernel KERNCONF=MYKERNEL

ユーザランドとカーネルのインストール

# make installkernel
# make installworld

マシンの再起動

# reboot

Linksys WRT54G V2 へ SD カードソケットを設置

先日 USB ポートを設置したリンクシス WRT54G V2 へ SD カードのソケットを設置しました。

SD カードソケットの設置前の WRT54G V2 のボードです。

以下のウェブサイトを参考にして加工を行いました。

Linksys WRT54G/GL/GS GPIO [OpenWrt Wiki]
http://wiki.openwrt.org/toh/linksys/wrt54g/gpio
Add an SD card slot to a WRT54G v2 « Your Warranty Is …
http://www.yourwarrantyisvoid.com/2009/09/09/add-an-sd-card-slot-to-a-wrt54g-v2/

SD カードソケットの取り出し

今回の SD カードのソケットとして使用したのは、下記のダイソーの SD カードを含むいくつかの複合カードリーダを使用しました。ソケット類がいろいろと入手できるので、先日の SD カード専用のものよりお得かもしれません。しかしソケットのハンダ付けを外すのが少々難しいと感じました。ソケットの取り外しには、ハンダ盛りの手法により取り外しました。

ソケットを取り出したダイソーの SD カードリーダです。
接着剤で固定されていた筐体を剥がして取り出した内部基盤です。
ソケットを取り出して、蛇の目基盤へハンダ付けしたところです。

SD カードソケットの設置加工

今回の SD カードソケットへリード線を取り出す GPIO のポイントが非常に小さな集合抵抗器のところにあったため、ハンダ付けは苦労しました。さすがに老眼と手の震えを耐えながらの作業でした(苦笑)。

イーサネット・スイッチの IC の近くにある RP3 の抵抗器から GPIO 信号を取り出します。
(端子の記述に間違えがありました。新しい画像へ入れ替えました。)
リード線をハンダ付けしたところです。

GPIO #7 の CS の取り出しは、DMZ の LED のところから取り出し、そして 3.3 ボルトの電源はシリアルコンソールの端子にある 3.3 ボルト端子から引き出しました。

SD カードソケットを設置した様子です。
SD カードソケットを設置した様子を反対側から見たところです。

SD カードの動作確認

SD ソケットの加工が終わったところで、早速 SD 関連のモジュール類のインストールを行いました。USB 関連のソフトウェアがインストールされていると、フラッシュメモリの容量不足でインストールができなくなりました。そこで一旦システムの初期化を行った後、SD カード関連のモジュール類をインストールしてみましました。

SD カードの動作確認中の WRT54G です。

結果は SD カードを認識することができませんでした。FON2100E で設置した SD カードと同じような雰囲気です。動作確認で使用した OpenWrt Attitude Adjustment 12.09 では動作が難しいのでしょうか? Kamikaze 7.07 以降では kmod-broadcom-mmc のパッケージを使用するようにと上記の参考ウェブサイトには記述されていますが、2.4 カーネル用のものなのでとても使用することができません。困ってしまいました。このまま Attitude Adjustment 12.09 で動作確認を行なって行くか?それとも、一度古いバージョンのシステムをインストールし直した後、ハードウェアの動作確認を行うか思案中です。何となく FON2100E も WRT54G も同じところで躓いている感じです。

Linksys WRT54G へ USB ポート設置

先日、無駄にメモリを交換してしまった リンクシス WRT54G V2 へ USB ポートを設置してみました。USB ポートの設置にあたり、次のウェブサイトを参考にしました。

Linksys WRT54G, WRT54GL and WRT54GS [OpenWrt Wiki]
http://wiki.openwrt.org/toh/linksys/wrt54g

Adding a USB Port to a WRT54G v2 » Woodhouse Enterprises
http://woodhousellc.com/?p=30

USB ポートを設置する前の WRT54G V2 のボードの様子です。

WRT54G V2 の加工

上記のウェブサイトによりますと WRT54G V2 の BCM4712 の近くにある RH19 と RH20 の部分に USB の信号が BCM4712 から出力されているそうです。この信号が 4.7KΩ の抵抗で終端されている状態となっています。この 4.7KΩ の終端抵抗を取り除いて、新しく 15KΩの抵抗器へと交換します。

黄色い線で囲まれた部分が USB 信号を終端している抵抗器です。

この 15KΩ の抵抗器が必要となるのですが、ThinkPad 600 の部品取り用のマザーボードの USB ポート付近を探してみました。すると運良く 15KΩ のチップ抵抗器が二個存在していました。USB ポート付近の設計はどれも同じような設計になっているようです。そこでこの 15KΩ のチップ抵抗器を WRT54G V2 へ移植することとしました。ついでに USB ソケットも一緒に取り外して、WRT54G V2 で利用することとしました。

ThinkPad 600 のシステムボードに設置されていた 15KΩ のチップ抵抗器です。
ThinkPad 600 から取り外した USB 関連の部品です。

いつものようにコテライザーを使って 4.7KΩ のチップ抵抗器を取り除いた後、15KΩ のチップ抵抗器をハンダゴテを使ってハンダ付けしました。リード線を後から設置することもあり、ハンダを多めに盛りつけておきました。

4.7KΩ から 15KΩ のチップ抵抗器へ交換したところです。

今回の USB ポートの設置は動作確認が主な目的としました。そのため 5 ボルト電源は、バッファローの無線LANルータのうち、Atheros チップが使用されている機種で使用されている 5 ボルトの電源アダプタを利用することとしました。そのため、この 5 ボルトの電源アダプタに合う細身の電源ソケットも用意して、USB ソケット周りにリード線をハンダ付けしました。

USB ポートの設置加工が終わったところです。
左側の黒いソケットは 5 ボルト電源用です。
BCM4712 周辺のリード線の取り付け状況です。
アースは USB の終点抵抗器の近くのチップコンデンサの GND 側へ取り付けました。

USB ポートの設置加工が終わった WRT54G V2 のボードへ電源を投入して動作に問題がないことを確認しました。USB ポートへの電源ですが、WRT54G のボードへ電源が投入された後に、5 ボルト電源を投入するようにしました。そして電源を切る場合には、逆に 5 ボルト電源を切った後、WRT54G V2 のボードの電源を切るようにします。なお将来的には WRT54G V2 の 12 ボルト電源を三端子レギュレータで 5 ボルトへ降圧して USB ポートの電源として使用することを考えています。

USB ポートの動作確認中の WRT54G V2 です。

OpenWrt Attitude Adjustment 12.09 で動作

WRT54G V2 へのシステムは OpenWrt を使用することで決まっていましたが、USB ポート関係のソフトウェア関係でかなり紆余曲折をしました。

元々ウェブ GUI の LuCi の動作が軽い Barrier Breaker 14.07 で動作確認をしようとしたところ、USB 関連のカーネルモジュールのインストールがフラッシュメモリの容量不足によって出来ないことが判明しました。

そこでフラッシュメモリの余裕が大きめな Backfire 10.03.1 をインストールした後、USB 関連のモジュール類のインストールを行なって動作確認をしてみました。ここでは一応動作確認が出来たのですが、問題は異常なブロックデバイスの登録が行われることでした。USB メモリを取り付けた状態で起動させると、ブートログには、ちゃんと sda としてデバイスが認識されるのですが、なぜか /dev/sda として登録されないのです。fdisk -l コマンドで発見したのは、/dev/scsi/host0/bus0/target0/lun0/part1 というデバイスとして登録されていました。これを以下のマウント・コマンドでマウントさせるとちゃんと認識して動作することも確認できました。

# mount /dev/scsi/host0/bus0/target0/lun0/part1 /mnt

そこで Attitude Adjustment 12.09 をインストールして、再度 USB 関連のモジュール類をインストールしたところ、フラッシュメモリの容量がほぼ一杯になりながらもインストールが終了して、USB メモリも /dev/sda として認識させることができました。もちろん動作も問題ありませんでした。

USB メモリを /dev/sda1 として認識させることができました。

以下は Attitude Adjustment 12.09 で USB 関連のインストールを行った様子の記録です。

上記の参考ウェブサイトの案内どおりに基本的なモジュール類をインストールしました。

# opkg install kmod-usb-ohci kmod-usb-storage kmod-usb-core
Configuring kmod-scsi-core.
Configuring kmod-nls-base.
Configuring kmod-usb-core.
Configuring kmod-usb-storage.
Configuring kmod-usb-brcm47xx.
Configuring kmod-usb-ohci.

次に LuCi の設定画面からマウントの操作などができる block-mount をインストールしました。このインストールの後、[System] – [Startup] の中にあるブート時の起動デーモンに fstab が無効(disable)となっているものを有効(enable)へ変更させておきます。

# opkg install block-mount
Configuring libuuid.
Configuring libblkid.
Configuring blkid.
Configuring swap-utils.
Configuring block-mount.

USB メモリは、WRT54G V2 へ取り付ける前にパソコンにて Ext2 フォーマットしておきました。Ext2, Ext3, Ext4 のフォーマットを認識して動作させるためのモジュールの kmod-fs-ext4 をインストールします。古い OpenWrt のバージョンでは、それぞれのフォーマットごとにモジュールが分かれていましたが、Barrier Breaker 14.07 では一つにまとめられていました。

# opkg install kmod-fs-ext4
Configuring kmod-lib-crc16.
Configuring kmod-fs-ext4.

上記のインストールの後、WRT54G V2 を再起動させて、動作確認をします。telnet でログインした後、/dev/sda や /dev/sda1 が存在していることを ls コマンドで確認してください。

# ls /dev/sda
# ls /dev/sda1

以上で動作していれば問題ありませんが、何か問題の解決手段として fdisk をインストールする場合には、次のとおりインストールしてください。”fdisk -l” コマンドで利用可能なデバイスが表示されます。

# opkg install fdisk
Configuring libuuid.
Configuring libblkid.
Configuring fdisk.

# fdisk -l

[参考]

OpenWrt には同じバージョンの中にも複数のファームウェアが存在しています。最終的に使用したファームウェアは次のものです。

OpenWrt Attitude Adjustment 12.09 openwrt-brcm47xx-squashfs.trx
http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/openwrt-brcm47xx-squashfs.trx

FreeBSD で GnuTLS がアップデート

FreeBSD の ports へ GnuTLS のアップデート(gnutls-3.3.15 から gnutls-3.3.16 へ)が到着しました。

その他、GTK や LLVM などの重要な ports もアップデートがありました。

  • Upgrade of gnutls-3.3.15 to gnutls-3.3.16
  • Upgrade of gtk-update-icon-cache-2.24.27 to gtk-update-icon-cache-2.24.28
  • Upgrade of gtk2-2.24.27 to gtk2-2.24.28
  • Upgrade of llvm33-3.3_10 to llvm33-3.3_11