Manabii について

無気力です。

MacBook Air (M1, 2020) を買いました

久々にわくわくする Mac が出たので購入しましたよ。M1 プロセッサ搭載の MacBook Air (GPU 8 コア / メモリ 16GB / SSD 500GB) を。

デスクトップピクチャは Yosemite 付属のこれが一番好き。

実に Mac を買うのが 8 年ぶりでして、最後に買ったのは iMac Late 2012 でした。

それからなんやかんやあって、心から欲しいと思う iMac も出ないまま 2020 年になったわけですが、その iMac も最新 OS のサポートから外れ、どうしてもモバイルしなければいけないときは、今となっては重量的にも動作的にもあらゆる意味で「重い」 MacBook Late 2008 Aluminum に Ubuntu インストールしたマシンで何とかやってきましたが、カバンに入れて持ち歩くと重すぎて肩が痛くてたまらない。

そろそろマシンどうしようかなぁと思っていたときに M1 プロセッサ搭載の MacBook Air ですよ! しかもそんなに高くない。(iMac 比)

発表されたその日の夕方頃、急に物欲が高まり発注、到着したのは 2020/11/22 でした。その間楽しみで凄くそわそわしてました。😊

Apple M1 って表示されてる。

プロセッサのアーキテクチャが全く変更になったので、今までの Intel プロセッサ向けアプリケーションは Rosseta 2 というレイヤーを通して実行されるので、若干パフォーマンスが悪くなっているはずなのですが、今の所それほどそれが重たい、と感じたことは無いですね。ATOK の最新版も動いていますし、今まで使っていたほとんどのアプリは実行できているようです。

これは買う前から分かっていたのですが、VMware Fusion などの x86 仮想化は動作しないようです。まぁ、Windows が必要なときは、iMac の仮想で動かせば良いだけだし。

なお、一番痛かったのは、MacPorts でビルドが失敗するパッケージがあったりすることでしょうか。これは時間がたてば無くなっていくのではと思っています。

あとは OS の Big Sur 。MacBook Air で使っていると、なんだかキーボードがある iPad を使っているような感覚に陥ります。それだけ macOS がどんどん iOS / iPadOS に近付いていると言うことでしょうか。そういえば、Big Sur では iOS / iPadOS アプリも動作しますしね。

液晶画面はとても綺麗です。余りに綺麗すぎて MacBook Air で作業をした後に iMac の画面を見るとなんだかぼやっとしているなあと感じ、早く Apple silicon 搭載の iMac 出ないかなと思ってしまうほどです。😅

MacBook Air には、USB-C ポートが 2 個しか無く Ethernet 端子もないので、とりあえず「Satechi Type-C 2-in-1 LANポート付き アルミニウム 3ポートUSB 3.0ハブ」を購入しました。近年 Wi-Fi が無いところも少なくなってきましたが、有線しか出来ないところでもこれでネットに接続できます。

小さいし、邪魔にならない。

ちなみにこれを使って有線でスピードテストを行った結果は以下のような感じです。

実用上十分な速度が出ていました。

使い始めてまだ 1 週間の MacBook Air 、久々に購入して凄く満足感を味わうことの出来る Mac です。

Debian 10 から 11 (Testing) へのアップグレード

現段階 (2020/11/07 現在) では、Testing の Debian 11 に Debian 10 からアップグレードしてみたテスト。

/etc/apt/sources.list を書き換え、apt-get update && apt-get upgrade を実行した。いくつか設定ファイルに変更が入るので、とりあえず今まで利用していた設定ファイルを残してアップグレードを続ける。

終わったら、変更が発生したファイルのデフォルトの設定ファイルと利用中の設定ファイルの差分を取って、適切に変更して再起動する。

起動したら、apt-get update && apt-get dist-upgrade をするのだが、libnss-nis の部分でなんかエラーが出ているようなので、エラーメッセージで検索し、まずは apt-get -o APT::Immediate-Configure=false install libnss-nis:amd64 の様にして libnss-nis と依存パッケージだけアップグレードした。

そのあと apt-get dist-upgrade して、やはりくつか設定ファイルに変更が入るので、こちらも今まで利用していた設定ファイルを残してアップグレードを続ける。

終わったら、変更が発生したファイルのデフォルトの設定ファイルと利用中の設定ファイルの差分を取って、適切に変更して再起動する。(php-fpm 構成だったのだが、なぜか Apache モジュール版 php が入ったりするので適当に設定変更をする。)

php は 7.4 になった。Debian 10 の php は 7.3 だったが、最近は WordPress とかで php 7.3 すら古いとか言われる始末でこれは嬉しい。まぁ、すぐに 7.4 でも古いとか言われてしまうのかもしれないけれど。

思いのほかスムーズに進んで、おおよそ 2 時間程度で作業が完了した。

プライムデーで、Echo Show 5 を買いました

6 ヶ月の Amazon Music Unlimited もついて 4,980 円で。こういうのを経験してしまうと、もう通常価格で Amazon デバイスを買う気が起こらないなぁ。

しかし、Echo Spot が壊れて以来、久しぶりのディスプレイ付きスマートスピーカー。コンパクトですが、スピーカーの音質も Echo Dot 第三世代とそれほど変わらず、しかも Echo Spot よりだいぶん安いという。

それはさておき、音声プロフィールの複数作成で難儀しました。

今回買った Echo Show 5 は自室に置いて、すでに持っている Echo dot は居間に移動して家族で使おうと考え、追加で家族の音声プロフィールも作成できるのか確認したところ、Alexa アプリに複数の音声プロフィールの作成方法の記載がありました。

と言うことで、音声プロフィールを追加すべく、Alexa アプリ記載どおり「Alexa アプリからログアウト・ログインして、最初の画面で追加する人の名前入力して進める」という方法で試したのですが、何回行っても

うまくいきませんでした Amazon のサーバーに接続できませんでした。後でもう一度試して下さい。

とメッセージが表示され、正常に進むことが出来ませんでした。

しかもなぜか手順を繰り返す度に、連絡先に追加しようとした人の氏名が複数表示されるという謎現象も発生。(そしてそれをどうやっても削除できない。なお、これはカスタマーサポートに連絡することで Amazon 側で削除してくれました。)

結果としては、シンプルに音声プロフィールを追加する人が Echo 端末に「私の声を覚えて」と呼びかけることで登録できました。

最初から難しく考える必要なんて無かった・・・。

Fusion Drive の解除と再構成

Fusion Drive のデータの完全消去に関するメモ。GUI からデータの完全消去が出来ないので・・・。

  1. Mac を内蔵 Fusion Drive 以外から起動する
  2. とりあえずディスクの情報を得る
    $ diskutil list
    /dev/disk0 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *121.3 GB   disk0
       1:                        EFI EFI                     209.7 MB   disk0s1
       2:                 Apple_APFS Container disk2         121.1 GB   disk0s2
    
    /dev/disk1 (internal, physical):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      GUID_partition_scheme                        *1.0 TB     disk1
       1:                        EFI EFI                     209.7 MB   disk1s1
       2:                 Apple_APFS Container disk2         1000.0 GB  disk1s2
    
    /dev/disk2 (synthesized):
       #:                       TYPE NAME                    SIZE       IDENTIFIER
       0:      APFS Container Scheme -                      +1.1 TB     disk2
                                     Physical Stores disk1s2, disk0s2
       1:                APFS Volume Internal HD             954.4 KB   disk2s1
  3. Internal HD としてマウントされている /dev/disk2 をアンマウントする。
    $ diskutil unmountDisk disk2
  4. APFS コンテナの情報を得る
    $ diskutil apfs list
    APFS Containers (1 found)
    |
    +-- Container disk2
        ====================================================
        APFS Container Reference:     disk2 (Fusion)
        Size (Capacity Ceiling):      1121118199808 B (1.1 TB)
        Capacity In Use By Volumes:   8817790976 B (8.8 GB) (0.8% used)
        Capacity Not Allocated:       1112300408832 B (1.1 TB) (99.2% free)
        |
        +-< Physical Store disk1s2
        |   -----------------------------------------------------------
        |   APFS Physical Store Disk:   disk1s2 (Secondary, Designated Aux Use)
        |   Size:                       999995129856 B (1000.0 GB)
        |
        +-< Physical Store disk0s2
        |   -----------------------------------------------------------
        |   APFS Physical Store Disk:   disk0s2 (Main, "Faster" Disk Use)
        |   Size:                       121123069952 B (121.1 GB)
        |
        +-> Volume disk2s1
            ---------------------------------------------------
            APFS Volume Disk (Role):   disk2s1 (No specific role)
            Name:                      Internal HD (Case-insensitive)
            Mount Point:               Not Mounted
            Capacity Consumed:         970752 B (970.8 KB)
            FileVault:                 No
  5. disk2 が Fusion Drive なのでこれのコンテナを削除する
    $ diskutil apfs deleteContainer disk2

    ※これを行うと、Fusion Drive が解除され、物理ディスク /dev/disk0 と /dev/disk1 となる。

  6. それぞれ Secure Erase を実行する。
    $ diskutil secureErase 0 disk0
    $ diskutil secureErase 0 disk1

    ※どちらも 0 消去。

  7. Fusion Drive を再構築する
    $ diskutil resetFusion
    
    Internally-located hardware disk devices known to the currently-running macOS:
    Solid State                              (disk0)
    Rotational                               (disk1)
    
    Volumes exported by partitions or storage systems hosted on the above devices:
    
    disk0 will be used as the "main" ("faster") device
    disk1 will be used as the "secondary" ("larger") device
    
    WARNING: All of the above will be erased
    Do you want to continue? (Enter "Yes" to proceed to erase) Yes
    
    Force-unmounting all volumes on the chosen "main" ("faster") disk device
    Started on disk0
    Error: -69886: Invalid request
    Ignoring the error during the above unmount; proceeding
    Force-unmounting all volumes on the chosen "secondary" ("larger") disk device
    Started on disk1
    Error: -69886: Invalid request
    Ignoring the error during the above unmount; proceeding
    Creating a new partition map on the "main" ("faster") disk device
    Started on disk0
    Unmounting disk
    Creating the partition map
    Waiting for partitions to activate
    Finished on disk0
    Partition disk0s2 will be the "main" ("faster") APFS Physical Store
    Creating a new partition map on the "secondary" ("larger") disk device
    Started on disk1
    Unmounting disk
    Creating the partition map
    Waiting for partitions to activate
    Finished on disk1
    Partition disk1s2 will be the "secondary" ("larger") APFS Physical Store
    Creating an APFS Fusion Container importing two partitions
    Started on disk0s2
    Creating a new empty APFS Container
    Unmounting Volumes
    Switching disk0s2 to APFS
    Switching disk1s2 to APFS
    Creating APFS Container
    FusionLC autodetect: regular Fusion
    Created new APFS Container disk8
    Finished on disk0s2
    The new APFS Container is disk8
    Adding a logical APFS Volume to the APFS Container
  8. macOS を再インストールする

421 Misdirected Request errors ではまる

macOS の Safari で、https://www.manabii.info/ のリンクから、https://ipv6.manabii.info/ へ遷移した時に「421 Misdirected Request errors」が表示されて、散々悩んだのだけれど、解決したメモ。

原因は、サーバ側で Apache において SNI と HTTP/2 とワイルドカード TLS 証明書の条件が重なっていたからのようだ。

具体的には、以下のような構成を取っていた。

  • サーバ側では HTTP/2 と HTTP/1.1 を利用可能としていた。
  • TLS パラメータは下記証明書を除き、全てのバーチャルホストで同じとしていた。
  • https://www.manabii.info/ ではコモンネーム「*.manabii.info」というワイルドカード証明書を利用。
  • https://ipv6.manabii.info/ では、https://6.ipv6.manabii.info/ というホストもあるので、コモンネームが「ipv6.manabii.info」で、SANsに「6.ipv6.manabii.info」が入ったマルチドメイン証明書を利用。

ところが、macOS の Safari (HTTP/2 対応) において、https://www.manabii.info/ を表示した後に https://ipv6.manabii.info/ を表示するパターンで、表題のエラーが発生していた。

つまり、ブラウザで https://www.manabii.info/ を表示した後で、https://ipv6.manabii.info/ を表示するとき、HTTP/2 では www.manabii.info で使用した既に開いている通信を利用するので、*.manabii.info のワイルドカード証明書での TLS 接続状態で ipv6.manabii.info にアクセスしようとするための模様だ。

解決方法としては、以下の通り。

  • https://ipv6.manabii.info/ のバーチャルホストでは、*.manabii.info のワイルドカード証明書を使い、6.ipv6.manabii.info の ServerAlias は削除する。
  • https://6.ipv6.manabii.info/ を別のバーチャルとして設定し、コモンネームが「6.ipv6.manabii.info」の証明書を使用する。

HTTP/2 の SNI では、SSL パラメータは全てのバーチャルホストで同一とする必要があるのは知っていたのだけれど、まさか上記のような罠があるとは。

macOS Catalina で iOS デバイスの同期が出来ない現象の修復

macOS Catalina にアップグレードしてから、Mac と iPhone や iPad などの iOS デバイスとの同期が出来ない現象が発生していて困っていたのだけれど、原因を特定して修正が出来きました。

具体的には USB 接続で iOS デバイスを接続すると、Finder で認識されるものの、表示すると「iPhone を読み込み中」の表示のまま同期されない、同期設定画面も出ないという現象でした。

色々と原因を探って試行錯誤した結果、私の環境ではオーディオブックのファイルに何らかの影響があって、同期プロセスが止まってしまう模様。(macOS のブックアプリが、以前の iTunes ライブラリにあるオーディオブックをインポートできず、起動できないことで気付きました)

修正方法としては、macOS 上で、ミュージックフォルダ内のオーディオブックのファイルである拡張子 .m4b と Audible 形式である拡張子 .aa のファイルを検索し、別の場所に移動してから、ブックアプリを起動して終了とするだけで OK 。

これで、macOS Catalina にアップグレードして 1 ヶ月ちょっとぶりに iOS デバイスの同期が出来るようになりました。嬉しい !!

cdebootstrap で Raspberry Pi 4 用 Debian Buster arm64 環境を作る

AMD64 アーキテクチャ上のマシンで、Raspberry Pi 4 用の ARM64 な Debian Buster の環境を構築したメモです。

2020/09/13 補足: arm64 アーキテクチャのパッケージだけで完結できるよう修正をしました。

  1. あらかじめ microSD を初期化します。
    この例では、/dev/sdd1 は /boot (vfat) 、/dev/sdd2 は / (ext4) で作成したものとなります。

  2. ファイルシステムをマウントして、cdebootstrap で OS をインストールします。
    # apt-get install qemu-arm-static cdebootstrap
    # mount /dev/sdd2 /mnt
    # mkdir /mnt/boot
    # mount /dev/sdd1 /mnt/boot
    # cdebootstrap --arch=arm64 -f standard --foreign buster --include=ntp,lvm2,openssh-server,net-tools -v /mnt
  3. 作成した環境に chroot します。
    # chroot /mnt
  4. root のパスワード設定し一般ユーザを作成します。
    # passwd
    # useradd -d /home/username -s /bin/bash -m username
    # passwd username
  5. /etc/fstab を以下の内容で作成します。
    proc            /proc	proc    defaults		0	0
    /dev/mmcblk0p1	/boot	vfat    defaults		0	2
    /dev/mmcblk0p2	/       ext4    errors=remount-ro	0	1
  6. 以下のファイルを作成します。
    /etc/network/interfaces
    /etc/networks
    /etc/hosts
    /etc/hostname
    /etc/mailname
    /etc/resolve.conf

  7. /etc/apt/sources.list を以下の内容で作成します。
    deb http://deb.debian.org/debian/ buster main contrib non-free
    deb-src http://deb.debian.org/debian/ buster main contrib non-free
    
    deb http://security.debian.org/debian-security buster/updates main contrib non-free
    deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
    
    # buster-updates, previously known as 'volatile'
    deb http://deb.debian.org/debian/ buster-updates main contrib non-free
    deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
  8. archive.raspberrypi.org の公開鍵を設定します。
    # apt-get update
    # apt-get install gpg wget
    # wget -O - http://archive.raspberrypi.org/debian/raspberrypi.gpg.key | apt-key add -
  9. apt に archive.raspberrypi.org の設定を行います。/etc/apt/sources.list.d/archive.raspberrypi.org.list を以下の内容で作成する。
    deb http://archive.raspberrypi.org/debian/ buster main
    # Uncomment line below then 'apt-get update' to enable 'apt-get source'
    #deb-src http://archive.raspberrypi.org/debian/ buster main
  10. archive.raspberrypi.org の公開鍵をパッケージで設定します。
    # apt-get update
    # apt-get install raspberrypi-archive-keyring
    # rm /etc/apt/trusted.gpg
  11. /etc/apt/preferences を以下の内容で作成します。
    Package: *
    Pin: release a=testing
    Pin-Priority: 105
  12. raspi-config パッケージをインストールします。
    # apt-get install raspi-config
  13. ロケールやタイムゾーンを設定します。
    # apt-get install locales
    # dpkg-reconfigure locales
    # dpkg-reconfigure tzdata
    # apt-get install fake-hwclock
  14. ブートローダーとカーネルをインストールします。
    # apt-get install raspberrypi-bootloader raspberrypi-kernel
  15. initrd を作成します。
    # apt-get install dosfstools e2fsck-static
    # update-initramfs -c -k 5.4.51-v8+

    ※「5.4.51-v8+」の部分は、/lib/modules 以下の文字列に会わせる。

  16. /boot/cmdline.txt を以下の内容で作成します。
    console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet splash plymouth.ignore-serial-consoles
  17. /boot/config.txt を以下の内容で作成します。
    arm_64bit=1
    initramfs initrd.img-4.19.97-v8+ followkernel
  18. microSD カードをアンマウントします。
    # umount /mnt/boot
    # umount /mnt
  19. 出来上がった microSD カードを Raspberry Pi に挿入し起動し、sshd を有効とします。
    # systemctl enable ssh.service
  20. あとは rpi-eeprom パッケージを入れるなど、必要に応じて設定を行います。

NextCloud で Office ファイルをオンライン編集

NextCloud が凄い。オンプレミスの NextCloud 上で、Office ファイル形式をオンライン編集出来る様にするためには、たった 2 個アプリをインストールするだけでした。

AMD64 アーキテクチャのサーバに限るが、自分が管理している NextCloud 上の管理者で「Community Document Server」と「ONLYOFFICE」の 2 アプリを導入するだけ。

これで、Excel ドキュメントなども、Google ドキュメントのようにオンライン編集が出来てしまう。

特にデフォルトでも日本語は化けなかったが、フォントメニューで日本語フォントを選択させる場合、Debian の場合だったら、

# apt-get install fonts-ipafont-gothic fonts-ipafont-mincho
$ occ documentserver:fonts --add /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf
$ occ documentserver:fonts --add /usr/share/fonts/opentype/ipafont-mincho/ipamp.ttf
$ occ documentserver:fonts --add /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf
$ occ documentserver:fonts --add /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf

としてあげるだけ。こんなに簡単で良いのだろうか・・・。

・追記

そんなに簡単にいくはずは無かった。確かにオンラインで編集は出来るけれど、NextCloud から該当ファイルをダウンロードすると、編集分が反映されていない事がある・・・。

cdebootstrap で Raspberry Pi 用 Debian buster 環境を作る

Raspberry Pi で Debian 10 buster を使うために、amd64 アーキテクチャのマシン上で armhf の環境を構築したメモです。

以前、「Raspberry Pi 2 Model B に Debian Jessie / armhf をインストールする」を参考に Debian 8 を構築したときとだいぶん変わっていました。

PC 上でのこれから Raspberry Pi 用に Debian 10 をインストールする領域は以下のようになります。

/dev/sdb1 (MicroSD カード) -> /boot
/dev/sdc1 (USB-HDD) -> /
/dev/vg01/home (USB-HDD /dev/sdc2 内 LVM) -> /home
/dev/vg01/var (USB-HDD /dev/sdc2 内 LVM) -> /var
/dev/vg01/swap (USB-HDD /dev/sdc2 内 LVM) -> /swap
  1. fdisk 等で、MicroSD カードと USB-HDD にパーティションを切ります。
  2. LVM 上にボリュームを作成して初期化します。
    # pvcreate /dev/sdc2
    # vgcreate vg01 /dev/sdc2
    # lvcreate --name home --size 512GB vg01
    # lvcreate --name var --size 256GB vg01
    # lvcreate --name swap --size 2GB vg01
    # mkswap /dev/vg01/swap
    # mkfs.vfat /dev/sdb1
    # mkfs.ext4 /dev/sdc1
    # mkfs.ext4 /dev/vg01/home
    # mkfs.ext4 /dev/vg01/var
    # mkswap /dev/vg01/swap
  3. ファイルシステムをマウントします。
    # mount /dev/sdc1 /mnt/rootfs
    # mkdir /mnt/rootfs/boot
    # mkdir /mnt/rootfs/home
    # mkdir /mnt/rootfs/var
    # mount /dev/vg01/home /mnt/rootfs/home
    # mount /dev/vg01/var /mnt/rootfs/var
    # mount /dev/sdb1 /mnt/rootfs/boot
  4. cdebootstrap で環境を構築します。
    # cdebootstrap --arch=armhf -f standard --foreign buster --include=ntp,lvm2,openssh-server,net-tools -v /mnt/rootfs
  5. rpi-update コマンドをインストールします。
    # wget http://goo.gl/1BOfJ -O /mnt/rootfs/usr/bin/rpi-update && chmod 755 /mnt/rootfs/usr/bin/rpi-update
  6. Raspberry Pi 用の Linux カーネルとファームウェアをインストールします。
    # mkdir /mnt/rootfs/lib/modules
    # ROOT_PATH=/mnt/rootfs BOOT_PATH=/mnt/rootfs/boot /mnt/rootfs/usr/bin/rpi-update
  7. /boot/cmdline.txt を作成します。
    # echo 'dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait' > /mnt/rootfs/boot/cmdline.txt
  8. /mnt/rootfs/etc/fstab を作成します。
    proc		/proc	proc	defaults		0	0
    /dev/mmcblk0p1	/boot	vfat	defaults		0	2
    /dev/sda1	/	ext4	errors=remount-ro	0	1
    /dev/vg01/home	/home	ext4	defaults		0	2
    /dev/vg01/var	/var	ext4	defaults		0	2
    /dev/vg01/swap	none	swap	sw			0	0
  9. /mnt/rootfs/etc/network/interfaces を適当に編集します。
    source-directory /etc/network/interfaces.d
    
    auto lo
    iface lo inet loopback
    
    auto enxXXXXXXXXXXXX
    iface enxXXXXXXXXXXXX inet static
    	address xxx.xxx.xxx.xxx/24
    	gateway xxx.xxx.xxx.xxx
    	dns-nameservers xxx.xxx.xxx.xxx
  10. chroot して root のパスワードを設定します。
    # chroot /mnt/rootfs
    # passwd root
    # exit
  11. アンマウントします。
    # umount /mnt/rootfs/boot 
    # umount /mnt/rootfs/home 
    # umount /mnt/rootfs/var
    # umount /mnt/rootfs

出来上がった、Raspberry Pi に出来上がった MicroSD カードを挿し、USB-HDD を接続して起動します。
起動したら、以下を設定していきます。

  1. /etc/apt/sources.list を編集します。
    deb http://deb.debian.org/debian/ buster main contrib non-free
    deb-src http://deb.debian.org/debian/ buster main contrib non-free
    
    deb http://security.debian.org/debian-security buster/updates main contrib non-free
    deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
    
    # buster-updates, previously known as 'volatile'
    deb http://deb.debian.org/debian/ buster-updates main contrib non-free
    deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
  2. /etc/apt/sources.list.d/raspi.list を作成します。
    deb http://archive.raspberrypi.org/debian/ buster main
    deb-src http://archive.raspberrypi.org/debian/ buster main
  3. archive.rasberrypi.org 用の gpg.key をインポートします。
    # wget http://archive.raspberrypi.org/debian/raspberrypi.gpg.key -O - | apt-key add -
    # apt-get update
    # apt-get install raspberrypi-archive-keyring 
    # rm /etc/apt/trusted.gpg
  4. /etc/apt/preferences ファイルを作成します。
    Package: *
    Pin: release a=testing
    Pin-Priority: 105
  5. raspi-config コマンドをインストールします。
    # apt-get update
    # apt-get install raspi-config
  6. ロケールとタイムゾーンを設定し、fake-hwclock をインストールします。
    # apt-get install locales
    # dpkg-reconfigure locales
    # dpkg-reconfigure tzdata
    # apt-get install fake-hwclock
  7. あとは、hostname を設定したり、mailname を設定したり、hosts を設定したりいつもの作業です。

食わず嫌いしていた LVM (やってみたら凄い簡単だった) と、amd64 上であったとしても qemu-arm-static があれば cdebootstrap で armhf の環境に chroot 出来ると言うことが一番の収穫だったと思います。

Raspberry Pi 4: eeprom アップデータと wifi ファームウェアをインストールする

Raspberry Pi 4 で以前利用していた Raspberry Pi 2 の環境をそのまま使う」の続きです。

上記の設定では、内蔵 wi-fi が OS から認識されず、また eeprom のアップデータもインストールされない状態でしたので、それを修正します。

  1. /etc/apt/sources.list.d/raspi.list を以下の内容で作成します。
    deb http://archive.raspberrypi.org/debian/ buster main
    deb-src http://archive.raspberrypi.org/debian/ buster main
  2. Raspberry Pi 固有のリポリトジを追加して、eeprom アップデータ、Raspberry Pi 設定ツール、Wi-Fi のファームウェアをインストールします。
    # wget http://raspbian.raspberrypi.org/raspbian.public.key -O - | sudo apt-key add -
    # apt-get update
    # apt-get install rpi-eeprom raspi-config firmware-brcm80211
  3. /etc/apt/preferences を以下の内容に編集します。
    Package: *
    Pin: release a=testing
    Pin-Priority: 105
  4. 再起動します。

上記を実行すると、Linux カーネルは Raspberry Pi のリポリトジから提供されるものに置換されました。
また、Wi-Fi インタフェースについては、再起動後に ifconfig -a とすると wlan0 が見えるようになりました。