ロシアのウクライナ侵略でロシアの肩を持った論者を記録していく

この記事は随時更新予定

ロシアにも一理あるのではという話をここでする必要はあるか

(あとでなんか書く)

そういうわけでここから一覧

たぶん世間的にもそれなりのステータスがあるんじゃないかという人たち

かなり明確に親ロシアな人たち
  • 伊勢崎賢治この辺で批判されている。一見もっともなことを言っているけれども、ロシアに都合の悪い話はしらんぷりというのはいかんよね。
  • 岩上安身。この辺とか。ロシアのプロパガンダに乗っちゃっている。まあでも、この人、竹原元阿久根市長をよいしょしていた昔からダメだと思うので、持ち上げる人がいるのがわからん。
  • 鈴木宗男。国会質問を探して読んでくれ。ガチの親ロシア派。
  • 東郷和彦。元外務省欧亜局長。NHK日曜討論2022/4/10での話について池内恵氏による批判ポイント
  • 西田昌司youtube とか。帝政ロシア時代にロシアの一部だったからと言って、現在独立した主権国家であることが揺るがされてはならんと思うんですが。とかいろいろ。
  • 橋下徹ウクライナはさっさとロシアに降伏しろというのは明らかな親ロシアしぐさだと思うのだけど、なんかイキっているだけみたいに好意的な見方をされているのはなんでだろ。この人と鈴木宗男の言動を見るに、維新は親ロシア政党であると判断してよかろう。
  • 馬渕睦夫。特にリンクは張らないけど、著書でも「ディープステート」とか書いちゃっている陰謀論者である。元駐ウクライナ大使という経歴だけど、大丈夫なのか日本外交。
一応はロシアの侵略を非難している人たち
  • 原口一博。バランスを取ろうとしているのは分かるんだけど、ロシアの明らかな嘘をロシアの言い分も聞くべきと言いながら流しているんだよなー。こう言っているけど。あと、「ディープステート」と言っちゃう陰謀論者で、上に挙げた馬渕さんの話とか引いている。国会議員としてどうなんかね。

twitter 有名人。有名じゃないかもしれないけど。

親ロシアなアカウントはごろごろしているので、それだけでは挙げない。 もともと twitter の一部で有名で、この人どうしちゃったのと言われているような人だけ。

よくあるロシア擁護論について

大前提として

ロシアは国際秩序に反して一方的に攻め込んだのであり、ロシアが兵を引けばこの戦争はおさまるのだ。

個別の話

NATO東方不拡大の約束が…

袴田先生の文章を読め。

www.jfir.or.jp

アゾフ連隊

根も葉もない話ではないけれども、ロシア側はアゾフ連隊を悪魔化しすぎというところか。 CNNのこの記事がわりとまとまっていてよさげ。

www.cnn.co.jp

その他一般

ロシア政府はこう言っているけど…

ロシアは戦争となると「平気で噓をつく」国だ。 なにせ、ロシアが侵攻したあとでもラブロフ外相が「我々はウクライナを攻撃していない」と言っていたくらい。 そりゃウクライナや西側も自分たちに都合のよいことは言っているのだろうが、 ロシアの言っていることについては「程度の問題」ではなく「そのような事実が存在するか」から疑ってかからないといけない。 そういう中でなんの批判もなしに「ロシア政府がこう言っている」と引いてくるのは、ロシアの主張の裏付けもとらずに鵜呑みにする行為である。 ロシア寄りの主張を引いてくるにしても、それなりのファクトチェックを経た話を引くようにしてほしい。

X11 on FreeBSD で縦書きEPUBが読めるリーダー

結論を先に言うと

deskutils/calibre 一択。

メニューバーがなく、画面をクリックするとやたらでかいナビゲーション用のアイコンが出てくるのを "NIH-syndrome" と書いている人がいて笑った(ImageJ とか思い浮かべてください)けど、たしかにそれ以外は良い。

サンプル EPUB ファイル

株式会社内外プロセス宮沢賢治の「注文の多い料理店」と中原中也の「在りし日の歌」を縦書きのEPUBにしたファイルを公開してくれているので、それを読んでみた。

EPUBリーダー in FreeBSD packages

全部は拾えていないと思うけど、今回試したのは以下のソフトウェア。

結果としては

  • Calibre と Sigil は縦書きで表示されて読めた。ただ、Sigil はエディターだからね。
  • CoolReader と FBReader は横書きで表示された。この2つは EPUB3 に対応していないのだと思う。
  • foliate と okular は本文が表示されなかった。

そういうわけで Calibre がおすすめ。

auひかりで DHCPv6 で prefix delegation (IA-PD)

auひかりに移行した

フレッツだと夜 21時頃から0時頃までどうにも通信が詰まる。 だましだまし使っていたが、家族からの苦情により auひかりに引っ越した。 本当は Nuro がよかったのだが、諸事情で auひかりしか選択肢がなかった。

ホームゲートウェイにもう一個ルータをぶら下げる

auひかりでは貸与されたホームゲートウェイを使わないと接続できないが、 subnet を分離したかったので FreeBSD マシンをルーターにして図のように接続した。 IPv4 に関しては、本題ではないので詳しくは書かないが、 ホームゲートウェイからは 192.168.0.0/24 を払い出し、 それぞれの subnet 内で 192.168.1.0/24 と 192.168.2.0/24 からアドレスを振っている。 ホームゲートウェイで各 subnet について静的ルーティングの設定が必要である。

f:id:cugel:20220320133117p:plain
家庭内LANの構成

ホームゲートウェイの設定

うちで借りている機種は BL900HW である。Aterm

Prefix delegation (IA-PD) を使うので、DHCPv6 を有効にする必要がある。

ホームゲートウェイの設定画面から、 詳細設定→DHCPv6サーバ設定→IPv6アドレス配布設定→配布する情報 を 「設定2 [RA: プレフィックス配布 DHCPv6: プレフィックス/IPv6アドレス配布]」 または 「設定3 [RA: プレフィックス配布しない DHCPv6: プレフィックス/IPv6アドレス配布]」 に設定する。

設定3 の方がデバッグはしやすいが、設定2 の方が一般的な設定だろうか。

こう設定すると、ひかり電話を契約していても、ホームゲートウェイからは /64 の prefix が配布される。

WIDE-DHCP6 の設定

DHCPv6 client は WIDE DHCP6 を使う。ただし、isc-dhcp client の設定に応用するのは難しくないと思う。

よく見る設定

検索してよく出てくる設定は、フレッツでひかり電話を契約していると /56 の prefix が受け取れるので、 それを分割して各 subnet に設定するもので、dhcp6c.conf はこんな感じになる。

interface em0 {
    send ia-pd 0;
    send ia-na 0;
};

id-assoc pd 0 {
    prefix-interface em1 {
        sla-id 1;
        sla-len 8;
    };
    prefix-interface em2 {
        sla-id 2;
        sla-len 8;
    };
};

id-assoc na 0 {
};

しかし、降ってくる prefix が /64 だとこれではうまくいかない。 subnet にアドレスを配るのは SLAAC になると思うが、/64 を sla-len 8 で分割すると /72 になってしまう。 SLAAC は /64 でないとうまく動かない。 (DHCPv6 で配ればいけるのかもしれないが試していない)

降ってくる prefix が /64 でも subnet にも IPv6 が配れる IA-PD の設定方法

ここで落ち着いて設定の意味を考えてみよう。 ia-pd を送るということは、id に対応した prefix を要求するということになる。 ということは、id を変えて複数 ia-pd を送れば、複数の prefix が割り当てられるのではなかろうか。 そう考えると、dhcp6c.conf は次のようになる。

interface em0 {
    send ia-pd 1;
    send ia-pd 2;
    # send ia-na 0;
};

interface em1 {
    send ia-na 1;
};

interface em2 {
    send ia-na 2;
};

id-assoc pd 1 {
    prefix ::/64 1800;
    prefix-interface em1 {
        sla-len 0;
    };
};

id-assoc pd 2 {
    prefix ::/64 1800;
    prefix-interface em2 {
        sla-len 0;
    };
};

# id-assoc na 0 {
# };

id-assoc na 1 {
};

id-assoc na 2 {
};

つまり、ID を変えて複数の ia-pd を発行し、割り当てられた prefix をそのまま各 subnet に割り振るというやり方である。

2箇所、# でコメントアウトした部分があるが、上でホームゲートウェイの DHCPv6サーバーの設定を行ったところで「設定3」を選んだ場合はコメントインして id-na 0 を有効にしないといけない。

rtadvd の設定

あとは、SLAAC でアドレスを配布するために rtadvd を動かす設定である。 まず /etc/rtadvd.conf に

default:\
        :prefixlen#64:\

/etc/rc.conf に

rtadvd_enable="YES"
rtadvd_interfaces="em1 em2"

で特に問題なく動くと思う。client が FreeBSD の場合は rtsold を動かすのをお忘れなく。

今後の課題

現在電話オプションをつけているが、電話オプションがないと /56 もらえないという話は、検索するとフレッツについてしか出てこない。auひかりはどうかというと、これが情報がないので一度電話オプションを外してもここに書いた設定が動くか確認したい。もしも電話オプションなしでも prefix delegation が動くなら、毎月500円だか600円だか節約できる。

あとまあ、この設定は動いたけど、まだいろいろ設定できていないことがあるのはなんとかしたい。

Lenovo Yoga C630 に FreeBSD が入らない(その2)

前回までのあらすじ

FreeBSD-arm ML で Yoga C630 に FreeBSD/aarch64 がインストールできないんだけどどうしたらよかんべと聞いてみたところ、「Qualcommファームウェアefi アプリケーションが 4kb align になっていることを要求するよ」と教えてもらったが。

4kb align な loader.efi が作れない

4kb align な loader.efi ができれば勝ちなのだが、それがどうやっても作れていない。 やったことを書き連ねてみるので、こうやればいいんだというのがわかる方は教えて欲しい。

通常作られる loader.efi

make TARGET=arm64 TARGET_ARCH=aarch64 buildworld でできる loader.efi はそもそも C630 で起動しないので 4k align になっていないわけだが、それをどう確認したものか。たぶん objdump -h でヘッダ情報を見ればよいのだろうというわけで見てみる。FreeBSD をごにょごにょしていると objdump は2系統入っているのが普通で、まずは世間で一般的であろう GNUbinutils のが /usr/local/bin/objdump として入ってくる。それでヘッダ情報を見てみると、

$ /usr/local/bin/objdump -h loader_lua.efi

loader_lua.efi:     ファイル形式 msdos

セクション:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         fffffe00  00000000  00000000  00000000  2**4
                  CONTENTS, ALLOC, LOAD, CODE

となって、この Algn のところが 2**12 になればいいのかなという気がする。 しかし、この後いろいろ試すものの、ここが 2**12 になることはなかった。

さて、FreeBSD stable/13 では llvm の objdump が /usr/bin/llvm-objdump として入っている。そちらは、

/usr/bin/llvm-objdump -h loader_lua.efi

loader_lua.efi: file format coff-arm64

Sections:
Idx Name          Size     VMA              Type
  0 .reloc        00000000 0000000000000000 DATA
  1 .text         00133570 0000000000000148 TEXT

これを見ると、.text00148 の部分が 01000 になればよさそうである。 いろいろ試した結果、src/stand/efi/loader/arch/arm64/start.S の

        .section .peheader,"a"
efi_start:
        /* The MS-DOS Stub, only used to get the offset of the COFF header */
        .ascii  "MZ"
        .short  0
        .space  0x38
        .long   pe_sig - efi_start

        /* The PE32 Signature. Needs to be 8-byte aligned */
        .align  3
pe_sig:
        .ascii  "PE"
        .short  0

この部分の .align 3 のところをいじればよいことが分かった。

まず .align 3.align 12 または .balign 4096 としてみると、llvm-objdump の出力の上記の VMA の箇所は 01108 になった。GNU の objdump の出力は変わらない。そして、作成された loader_lua.efi は起動しなかった。

今度は 0x108 のぶんずらしてやろうと .align 3 に置き換えて .space 0xeb8 としてみた。 llvm-objdump の出力はちょうど 01000 になるが、GNU objdump の出力は変わらないし、作成された loader_lua.efi は起動しない。

ところで、arm64 の loader.efiobjcopy -O binary で出力されているのだけれども、 GNU objcopy のマニュアルにこんなことが書いてあって、アラインメントを整えようがないのではという疑惑が。

   objcopy can be used to generate a raw binary file by using an output
  target of binary (e.g., use -O binary).  When objcopy generates a raw
  binary file, it will essentially produce a memory dump of the contents
  of the input object file.  All symbols and relocation information will
  be discarded.  The memory dump will start at the load address of the
  lowest section copied into the output file.

ELF な loader.efi は作れるか

FreeBSD/arm64 では objcopy に指定するフォーマットを binary にして、自分で COFF ヘッダを作成している(と start.S のコメントに書いてある)のだけれども、だったら ELF にすれば 4kb align が可能ではないか。

結果的にうまくいかないので詳しくは省くが、amd64 を参考に src/stand/efi/loader/arch/arm64/ldscript.arm64 をいじれば下記のようにはなる。 ただ、これだと loader は全く BIOS に認識されずに Windows が起動してくる。 こちらについては自前で PEヘッダーを書けばよいのかもしれない。参考になる文献がないかな。

loader_lua_elf_align.efi:     ファイル形式 elf64-littleaarch64

セクション:
Idx Name          Size      VMA               LMA               File off  Algn
  0 .eh_frame     0000004c  0000000000001000  0000000000001000  00011000  2**12
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         000f96f8  0000000000002000  0000000000002000  00012000  2**12
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .data         00030130  00000000000fc000  00000000000fc000  0010c000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
  3 set_Xcommand_set 00000158  000000000012d000  000000000012d000  0013d000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
  4 set_Xficl_compile_set 00000000  000000000012d158  000000000012d158  0013d158  2**12
                  CONTENTS, ALLOC, LOAD, DATA
  5 .sdata        00000480  000000000012e000  000000000012e000  0013e000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
  6 .dynamic      000000f0  000000000012f000  000000000012f000  0013f000  2**12
                  CONTENTS, ALLOC, LOAD, DATA
  7 .dynsym       00000018  000000000013a000  000000000013a000  0014a000  2**12
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  8 .rela.dyn     00009828  0000000000130000  0000000000130000  00140000  2**12
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  9 .dynstr       00000001  000000000013c000  000000000013c000  0014c000  2**12
                  CONTENTS, ALLOC, LOAD, READONLY, DATA

grub-mkimage に頼ればいいんじゃね

grub-mkimage は 4kb align なイメージを作れているし、grub のモジュールって ELF にコンパイルした .o ぽいので、 .o を grub のモジュールだと騙してやれば grub-mkimage が loader を作ってくれるんじゃねという考えに至った。 これ自体はよい考えだと思うのだが、src/stand/efi/loader/arch/arm64/start.S で ImageBase というシンボルを参照していて、これがなんとリンク時に作成される(ldscript.arm64 を参照されたい)ので シンボルが解決できないというエラーになってしまう。 ではということで、grub の kernel.img をリンク後の loader_lua.sym で置き換えてみたが、今度は未対応のフォーマットということではねられてしまった。

今後の予定

私の力量では、この辺でお手上げである。

あきらめて Windows のまま使う? Linux を入れて使う?

Lenovo Yoga C630 に FreeBSD が入らない

Lenovo Yoga C630

Lenovo Yoga C630 ( Lenovo Yoga C630 製品仕様書 81JL0012JP | レノボジャパン ) は Qualcomm の Snapdragon 850 を積んだラップトップで、最近は新品なり中古なりが3万円程度で手に入る。 AArch64 はいまや UEFI で統一されようとしているという話で、このPCもそうなので FreeBSD のインストールも楽にゆくかなと思って一台手に入れてみた。だが、インストールイメージを入れた USBメモリを挿して電源を入れてもうんともすんとも言わない。試しに Grub2 を突っ込んでみたら、こちらは起動する。

loader.efi を 4kB align するにはどうすればよいのか

FreeBSD-arm ML に泣きを入れたところ、Qualcommファームウェアは 4kBアラインメントを要求するよということを教えてもらった。検索したらば、Linux を移植した人たちもそこで苦労したとか書いている。 Porting Linux to AArch64 Laptops - Linaro

Grub2 の util/mkimage.c grub2/mkimage.c at master · rhboot/grub2 · GitHub の arm64-efi の部分を見るに、

      .section_align = GRUB_PE32_SECTION_ALIGNMENT,
      .vaddr_offset = EFI64_HEADER_SIZE,

となってて、どちらの定数も 4096 になるので、FreeBSD の loader.efi も各セクションが 4kB でアライメントされていればよいらしいというところまではわかった。

しかし、どうすればそれが実現できるのかが分からない。

CFLAGS+= -mcmodel=small
LDFLAGS+= -Wl,-zcommon-page-size=0x1000

とやってみたり、ldscript の arm64 のところ ( ldscript.arm64 « arm64 « arch « loader « efi « stand - src - FreeBSD source tree ) のアライメントのところをやみくもに ALIGN(4096) に置き換えてみたりとやってみたが、 画面が真っ暗なままうんともすんとも言わないか、プレインストールされている Windows が立ち上がってくるかのどっちかにしかならなかった。 そうして、どっちの方が解決に近いのかも分からない。

どうすればよいか分かる方がいらしたら教えてください。よろしくおねがいします。

ホームディレクトリを自動で作成したい

古きよき /etc/passwd

adduserrmuser でユーザーのエントリだけでなく、ホームディレクトリも作ったり消したり、いっしょにやってくれて便利だ。 ホームディレクトリの準備は、ディレクトリを作成するだけでなく、スケルトディレクトリの内容をコピーしてくるところまである。 それが pw コマンドにくっついてしまっているのが /etc/passwd 以外を利用したい場合に面倒なところである。

LDAP とか AD をユーザー認証に使っている人はどうしているのか

LDAP とか Active Directory でユーザー認証しようという話って、認証するまでの話ばかりで 「ホームディレクトリをどうやって用意するか」という話がなおざりにされている気がしているのだけど どうなんだろう。 手作業でホームディレクトリを作成してスケルトディレクトリの内容をコピーしてもいいし、 それをシェルスクリプトにして自動化してもいいんだけど、なんかこうもうちょっとうまくやれないかという気分になる。

ログイン時に自動でホームディレクトリを用意する

そういう時はだいたい同じようなことを考えている人がいて、FreeBSDports&packages にも入っていることが多いよ というわけで探してみる。

pam_mkhomedir

名前からいかにもなのが pam_mkhomedir で、 これを /etc/pam.d の下に仕込んでおくと、ログイン時にホームディレクトリがなかったら自動で作成してくれる。 /etc/pam.d/system あたりに

session        required         pam_mkhomedir.so

という行を session セクションの終わりに足しておけばよい。

pam_winbind

Samba についてくる pam_winbind.so にも mkhomedir というオプションがあって、使ったことはないけれども下記のように書けるはず。

session        required         pam_winbind.so  mkhomedir

ZFS を活かしたい

でもさあ、せっかく zfs を使っているのだから、1ユーザー 1 (or more) ファイルシステムで使いたいではないですか。 そうすると、pam_mkhomedir も pam_winbind もちょっと使えない。 ではまた手動とかそういうのに戻るのかというとそれもなあと思っていた。

Automatic ZFS Home Directories on FreeBSD

そんなことを考えていたら、ひょんなことで https://github.com/fyrkat/zfsroot というものを見つけた。 なんと、FreeBSD で samba4 を使って Active Directory でユーザー認証して、 ZFS を使ってユーザーごとにファイルシステムを作成するという、 私の要件にどんぴしゃなものである。

ということで、ここから zfs-mkhomedir を拝借して、smb4.confpam.d/xdm に だいたい書かれている通りに仕込んだ。 pam.d/system の方に仕込むべきだったかもしれないが、まあそこはそれ。 あと、上記ページでは /home/DOMAIN/USER の形式を推しているが、 大規模サイトではそういう運用がよさそうだが、ご家庭で複数ドメイン運用なんてことは まずなさそうなので /home/USER 形式に変更してある。

X server が死ぬ

FreeBSD stable/12 を更新した

FreeBSD Security Advisories が出ていたので、使っている stable/12 を更新したところ、 X まわりの状況がだんだんと悪化した。

まず、時々 panic して再起動するようになって、それから xscreensaver がフリーズするようになり、 そのあたりで ports 一式をビルドしなおして強制アップグレードをかけたらそもそも X が起動しなくなった。 Xorg.0.log には

(EE) NVIDIA: A GPU exception occurred during X server initialization(EE)

と出てきて、素直に考えたらグラフィックボードが故障したのかなというところだけれども、 状況を考えると stable/12 で何か ABI 変更があっておかしなことになったのかもしれない。 要するになんでか分からない。

AMD FirePro W5100 調達

というわけで慌てて中古の FirePro W5100 を買って使おうとしたら、drm-kmod をインストールして kldload amdgpuすると panic する。 でまあ検索したら FreeBSD forum の投稿 に行きついたので、 drm-v5.0-fbsd12.1 をダウンロードして make; make install して pkg lock drm-kmod して kldload /boot/modules/radeonkms.ko とやったら動いたので、それで設定した。 当初 amdgpu を使おうとしたけれども、

drmn0: [drm:*ERROR* ] amdgpu_ring_test_helper[drm ERROR :amdgpu_device_ip_hw_init_phase2] hw_init of IP block <cik_sdma> failed -60
drmn0: amdgpu_device_ip_init failed

とエラーになるので、FirePro W5100 (bonaire) は radeonkms の方を使うのがよいみたい。 そういうわけで、/usr/local/etc/X11/xorg.conf.d/40-driver-radeon.conf は次のようになる。

Section "Device"
    Identifier    "Card0"
    Driver         "radeon"
EndSection

そういう感じで、グラフィックカードの故障だったのか stable/12 で入った変更に ports のドライバーが 追い付いていないのかわからないけれど、デスクトップ環境が戻ってきた。

Wayland

FirePro W5100 を調達したのは、AMD なら GnomeKDE 以外の Wayland compositor が使えるということを期待してなのだけれども、wayfire を動かそうとしたら

[EGL] command: eglGetPlatformDisplayEXT, error: EGL_BAD_PARAMETER (0x300c), message: "EGL_BAD_PARAMETER error: In function eglGetPlatformDisplay(), unsupported EGL Flatform"

と言われて動かなかった。