Not only is the Internet dead, it's starting to smell really bad.:2021年02月中旬

2021/02/13(Sat)

[自宅システム管理者] HP Microserver N54LにNICを増設する

うちのファイルサーバーであるHP Microserver N54Lにはまだ長生きしてもらわんと困るのだが、ネットワーク周りはせめて増強せんとなーと以前 悩んでたのだが、なんせ空きスロットがPCI Express 2.0 x1しかもロープロ縛りなのでろくな選択肢が無く困ってしまってワンワンワワン。

結局その時は中古で0.8kのBroadcom Nextreme II(BCM5722) Single Port Adapterを増設し、オンボのNC107i(BCM5723)とチーミング組むことで妥協してしまった *1。 ただBCM5722/BCM5723ってジャンボフレーム非対応だったりいろいろと不満はあるのよね。

それから何も良いこと無かった2.5年間だけど、今ならば🦀Realtek RTL8125🦀すなわち

 \ ̄\                 / ̄/ 
/l  \  \             /  / lヽ  
| ヽ  ヽ   |             |   /  / | 
\ ` ‐ヽ  ヽ   ●      ●  /  / ‐  / 
  \ __ l  |  ||___|| /  l __ / 
     \  \/       \  / 
      /\|          |/\ 
    //\|          |/\\  
    //\|          |/\\   
    /   /\_____/\   \ 

採用の怪しげな中華2.5GbEカードが2.5~5kほどで売られてるのよね( これとか)、ははーんこれが流行の最先端と噂の #クラブハウス ってやつだな?

レビューだと実測2.4Gbpsくらい出てるそうで、発熱やドライバの安定性など気になる点はあるけど将来的な乗り換え先として有力候補やな。 とはいえまだ対応スイッチの選択肢があまり無いのがな、安くなってきてるとはいえ。

そういや別の 過去記事でHP Microserverにおあつらえ向きの

なNICにHP NC332(BCM5720)という製品があるけど中古のタマ数が少なくかつ高いと書いたのだが、こちらの 海外記事のようにHP NC360T(Intel 82575)のx4スロットをガリガリとx1に削って改造しちまう手もあるんだな、こっちなら中古も潤沢でせいぜい1~2kで入手できる。 ちゃんとx1に改造しても帯域出るならこれはアリやな。

つかわざわざ改造せんでもIntel Pro/1000 PT Dual Port Server AdapterのコピーキャットだけどPCI-E接続だけx1に設計変更したような 怪しげな中華メーカー品が2~4kで売ってたりもする、まぁ謎メーカー製品とHP純正を自分で削るのどっちが信頼性が高いかは知らん。

単にイーサーネットのポート増やしたいだけならUSB3.0カードを増設してそこにUSB-Ethernet変換ドングルを刺してもいいのだけどね、その方がリムーバブルドライブ使いたい時とかに便利ではある。 ただ安定してチーミング組みたいとかドライバのご用意されてないVMware ESXi使いたいとかだとUSB-Ethernetは論外なのだが。

ちなみに USB3.0 + 1GbE Comboなんて怪しい製品みつけたけど、こいつはVLI VL805に🦀Realtek RTL8153🦀がぶら下がってるだけなので、USB3.0カード増設してそこにUSB-Ethernet刺してるのと同じやなこれ。

*1:必ずNC107i用の HP Broadcom 1Gbドライバーはあらかじめアンインストールしておくこと、でないと増設したNextreme IIの方はOS標準のInboxドライバを使おうし、バージョンの異なるカーネルドライバを同時に読み込もうとしエラーになる。

2021/02/18(Thu)

[pなんとかsrc] lang/php7[34]でビルドエラー

うーんwww/php7[34]がビルド通らないのだけど、いまどきPHPなんか使う人おらんから気づかれないのだろうか。

/usr/pkgsrc/lang/php73/work.x86_64/php-7.3.27/ext/standard/net.c: In function 'zif_net_get_interfaces':
/usr/pkgsrc/lang/php73/work.x86_64/php-7.3.27/ext/standard/net.c:292:40: error: 'IFF_BROADCAST' undeclared (first use in this function); did you mean 'SO_BROADCAST'?
  292 |                        (p->ifa_flags & IFF_BROADCAST) ? p->ifa_broadaddr : NULL,
      |                                        ^~~~~~~~~~~~~
      |                                        SO_BROADCAST
/usr/pkgsrc/lang/php73/work.x86_64/php-7.3.27/ext/standard/net.c:292:40: note: each undeclared identifier is reported only once for each function it appears in
/usr/pkgsrc/lang/php73/work.x86_64/php-7.3.27/ext/standard/net.c:293:31: error: 'IFF_POINTOPOINT' undeclared (first use in this function)
  293 |               (p->ifa_flags & IFF_POINTOPOINT) ? p->ifa_dstaddr : NULL);
      |                               ^~~~~~~~~~~~~~~

理由は簡単でconfigureで存在するはずのnet/if.hの検出に失敗しとる。

configure:73140: checking for net/if.h
configure:73140: cc -c -O2 -pthread -I/usr/pkg/include -I/usr/include -fvisibility=hidden -I/usr/pkg/include -I/usr/include -I/usr/pkg
/include conftest.c >&5
In file included from /usr/include/net/if.h:86,
                 from conftest.c:269:
/usr/include/net/pfil.h:77:3: error: unknown type name 'u_long'
   77 |   u_long  phu_val;
      |   ^~~~~~
configure:73140: $? = 1
configure: failed program was:
| /* confdefs.h */
...
| /* end confdefs.h.  */
|
|   #ifdef HAVE_SYS_SOCKET_H
|   #include <sys/socket.h>
|   #endif
|   #include <net/if.h>
|
|
| #include <net/if.h>
configure:73140: result: no

なもんでHAVE_NET_IF_Hが未定義なもんでビルドエラーってわけ。

そもそもunknown typeと叱られとるu_long型は<sys/types.h>でtypedefされてるので<net/if.h>や<net/pfil.h>はこいつを正しくincludeせんとならんのだが、本家HEADみてもincludeしとらんから同じ問題出るはずなんだがな。 まぁどっかで副作用的に読み込まれて表面上問題になっとらんとかかな…

じっさいFの場合はstruct timevalのために<sys/time.h>をincludeしとる副作用で<sys/types.h>が有効になってるから気づかれないもよう。 これがOだとちゃんと<sys/types.h>と<sys/time.h>両方をincludeしとるので、過ちを正しく認識して適切な修正はいっとるもよう。

このu_longってやつ、要するに「unsigned long intとか長くて書くのが面倒くさい」というしょーもない理由で存在する歴史的事情の産廃なので抹殺したみある。 残すにしてもtypedefによるu_long型として<sys/types.h>にあるのがそもそも設計として変で、本来なら<sys/cdefs.h>あたりでdefineによるマクロとして定義しておけって話だよな。

まぁ<sys/cdefs.h>も 解説書きはじめて途中で飽きて放り投げるくらいに肥大化しとるから、こっちくんなではある。

[pなんとかsrc] www/p5-CGIの依存するパッケージがアレになっとる

そんでPHPよりもさらにオワコンのperl5の話だからどうでもいいのだけど、www/p5-CGI-Session(CGI::Session)をインストールすると実行時にCGI.pmが無いって怒られよるのな、ははこやつめ。 まぁいまどきのウェッブエンジニャーはperl5とか使わんよね、ちなみにこのチラシの裏とかperl5で書かれてたりでうちではバリバリ現役です(しろめ)。

話し戻して、そもそもCGI.pmってperl5本体に同梱されてたよなーと思ったのだがなんと5.20で消されたのだな(まぁこんな時代錯誤なもん残当だよな)。 それにpなんとかsrcのメンテナが気づいてなくて追従してないってことなんやな。

そんでついでに何年かぶりにperl5の新機能に目を通したら、raku(perl6)からの御下賜品である

が将来的に廃止の予定になっててクソ笑った、なんでや!use Swithとgrep()の時代に戻らんとあかんのですか!むかし某所のコードでこの手の新機能使いまくった記憶があるけどまぁもう関係ないからええわ。

あといつのまにuse features 'signatures'すると仮引数使えるようになってるのだな。

sub foo
{
	my $bar = shift;
	my $bus = shift;
	# あるいは
	my ($bar, $buzz) = @_;
}

としてたのが

use features 'signatures';
no warnings "experimental::signatures";

sub foo($bar, $buzz)
{
	...
}

と書けるようになってる。 まぁこれも将来的にやっぱやーめたになりそうなにおいがプンプンする。

つーか以前から存在したプロトタイプ宣言ってやつ

sub foo($$)
{
	my ($bar, $buzz) = @_;
	...
}

こいつを仮引数と同時に使おうとすると

use features 'signatures';
no warnings "experimental::signatures";

sub foo :prototype($$) ($bar, $buzz)
{
	...
}

と冗長な方の書式にせんとならんそうで、これは嫌過ぎる。