Manabii について

無気力です。

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 が見えるようになりました。

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

Raspberry Pi 2 Model B で、MicroSD カードのみ /boot パーティションとして設定、他パーティションは USB-HDD で運用していた環境を、ほぼそのまま、ちょこっと修正して Raspberry Pi 4 Model B で運用した際の備忘録です。
なお、OS は Debian GNU/Linux 10 buster です。

事前に最新の Raspbian を MicroSD にインストールし、一度 Raspberry Pi 4 Model B で起動して初期設定を完了しておきます。

以下、Raspberry Pi 2 Model B 上での作業です。

  1. /boot パーティションのファイルを、別マシンなどにバックアップしておきます。(最悪これさえあれば Raspberry Pi 2 Model B で起動することが出来るので)
  2. Kernel building – Raspberry Pi Documentation」の手順に従って、Raspberry Pi 4 Model B 用のカーネルをビルドし、インストールを実行します。
  3. Raspberry Pi 2 Model B をシャットダウンします。

以下、任意の作業マシン上で行います。

  1. Raspberry Pi 2 Model B で利用していた MicroSD カードの /boot/cmdline.txt を編集します。
    最新の Raspbian の Raspberry Pi 4 Model B 用の /boot/cmdline.txt を参考に以下のように設定しました。

    console=serial0,115200 console=tty1 root=PARTUUID=xxxxxxxx-xx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles apparmor=1 security=apparmor

    ※カーネル再構築して、AppArmor を有効にしているのでその設定も行っています。
    なお、PARTUUID は、Raspberry Pi 2 Model B の電源を落とす前に blkid で調べることが出来ます。(今回は USB-HDD の /dev/sda1 に相当する PARTUUID を指定しました)

  2. 初期設定の完了した、最新の Raspbian の MicroSD カードから /boot の以下の全てのファイル・ディレクトリについて、cmdline.txt と kernel7l.img 以外を Raspberry Pi 2 Model B で利用していた MicroSD カードの /boot にコピーします。

あとは、Raspberry Pi 4 Model B に MicroSD カードを挿入、USB-HDD も接続して電源をオンすると、Raspberry Pi 4 Model B で今までの環境で起動が出来ました。

この方法、「Raspbian って、/boot にあるカーネル以外は共通のコードなので、/boot パーティションの内容を入れ替えて、カーネルバージョンとカーネルモジュールの整合性さえとれば起動できるのでは」と思いついたのですが、予想どおり上手くいきました。

余談ですが、使っている USB3.0 の HDD ケースと Raspberry Pi 4 との相性が悪いのか、上手く起動しないときがあります。そのような場合は、全ての電源を切って、USB-HDD だけを USB 接続して電源を入れると、上手く起動してくれるようです。
USB デバイスを抜き差したり、指すポートを変えてみたりすると起動するようです。

追記
Linux Kernel 4.19.97 を Raspberry Pi 2 Model B と、4 Model B でビルドしてみたところ、

Pi 2 Model B: 205m19.397s
Pi 4 Model B: 90m37.475s

と、圧倒的に Pi 4 Model B は早いです。

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

「スター・トレック:ピカード」が配信に

スター・トレック:ピカードが配信開始になりました。

私がスター・トレックに初めて触れたのが、ピカード船長の The Next Generation なのですが、それゆえに私の中でスタートレックと言えば TNG が真っ先に思い出されるのですね。

そんな TNG から続くシリーズである「スター・トレック:ピカード」、冒頭 Blue Skies が流れたのは、おおっと思いましたよ。この物語は「ネメシス・STX」からなんやかんやあった後のお話なのだと。

データは「ネメシス・STX」で亡くなってしまったけれど、今作ではデータの一部から双子の娘的存在が作られたようで、片方のダージがピカードに助けを求めるもロミュラン人の何者かに殺されてしまうし、もう片方のソージはなぜかボーグ・キューブでロミュランに協力をしているような描写がありました。

ここで思いつくのは、データとローアの関係だ。もしかしたら、タージとソージも同じような関係だったりするのかも・・・、と今の所は何も分からないので続きが気になって仕方がありません。

今回特に嬉しいのは、吹き替え版 (もちろん今までどおりのキャストで) も同時に配信であることです。普通、吹き替え版って相当遅れての公開になることが多いじゃないですか。それが、今回はいつものなじみの声で楽しめることが本当に嬉しいです。

macOS:「ERROR_7E7AEE96CA」でセキュリティアップデート等が出来ない

macOS を Catalina から Mojave に戻した環境で、Mojave 向けの macOS 追加アップデートを実行すると「ERROR_7E7AEE96CA」で失敗する現象が発生しました。

ネットを調べてみると、新 OS 上で旧 OS で使用していた Time Machine ボリュームに一度でもバックアップを行った状態で、復旧パーティションから起動し Time Machine からの復元で旧 OS 環境に戻したときに発生する模様です。

どうも、macOS の Time Machine は、復旧パーティションの情報もバックアップしている模様で、今回の場合だと、Mojave から利用していた Time Machine ボリュームを引き続き Catalina でも利用していた場合、Catalina の復旧パーティション情報もバックアップされてしまうようです。

こうなってしまうと例え USB メディアで Mojave のインストーラを起動して、内蔵 HDD を全初期化した上で、Mojave だった頃のシステムを指定して Time Machine から復元したとしても、復旧パーティションは Catalina ベース、起動 OS は Mojave という状態で復元されてしまいます。

※ちなみに、一度 Mojave をクリーンインストールした上で、復旧パーティション (Mojave ベース) から起動し、同様に復元を行うと、やはり復旧パーティションは Catalina ベース、起動 OS は Mojave になってしまいました。

と言うわけで、解決策としては、復旧パーティションのベース OS と、実行 OS を合わせる必要がありそうと言うことで、私の環境での本現象の解決方法は以下の通りです。

  1. 一旦 Time Machine にバックアップをします
    一旦、復旧パーティションは Catalina 、起動 OS は Mojave の環境で、新規に Time Machine にバックアップをとります。

  2. macOS Mojave を入手します
    App Store から macOS Mojave を入手します。
    このとき、Option キーを押しながら「入手」ボタンをクリックすることで、システム環境設定の「ソフトウェア・アップデート」が起動しますが、/Applications フォルダ内に「macOS Mojaveインストール.app」が作成されます。インストーラが起動したら終了します。

  3. USB インストールメディアを作成します
    macOS の起動可能なインストーラを作成する方法」の手順に従って、USB インストールメディアを作成します。

  4. インストール USB から起動してインストールと情報の転送を行います
    インストールメディアから起動して、ディスクユーティリティより内蔵 HDD を全初期化します。その後、通常どおり Mojave をインストールします。
    インストール後に、情報を転送するかどうか聞いてくるので、Time Machine から全てのデータを転送するようにして、データを移行します。

これで、何とか復旧パーティションは Mojave ベース、かつ起動 OS も Mojave という環境が戻り、もちろん、セキュリティアップデートも正常にあてることが出来ました。

自ドメインの DNSSEC 対応を終了

昨年の春前具合から自ドメインを DNSSEC 対応にしてきたのだけれど、もうやめます。

理由は、管理が手間過ぎるから。ZSK の運用も含めてスクリプトで自動化していたので、ずっと運用する分には問題はないのだけれど、いざ手動で何かを行う際にゾーン署名に用いている ZSK がどれなのか、自動化ゆえに余計にわけが分からなくなって管理がめんどい。

どうせ、DNSSEC の検証をしているフルリゾルバもあまりないような気もするし、それならやめちゃおう。

続きを読む

フォス・ファームハウスとカッスルクームへ Part 3 (2, 3 日目)

本内容は 2019 年 03 月時点での情報です。

前回の更新からだいぶん開いてしまいましたが、フォス・ファームハウスでの宿泊です。

本当はもっと前に書きたかったのですが、バタバタしているうちにだいぶん経ってしまいました。記憶が薄れないうちに思い出せる範囲で書いてみたいと思います。

続きを読む

RTX810 で SNMP Trap を送信し、Linux マシンで受ける

SNMP Trap を送信するルータは、YAMAHA RTX810 、受信するマシンの OS は Debian 10 。受信したトラップを root あてにメールする。

RTX810 の設定

snmp trap host [SNMP トラップを受けるサーバの IPv4 アドレス]
snmp trap community router
snmp trap enable snmp all

Debian 10 側の設定

  • snmptrapd をインストール

    # apt-get install snmp snmptrapd nmp-mibs-downloader
  • YAMAHA private MIB をダウンロード

    YAMAHA private MIB のページより、yamaha-private-mib.tar.gz をダウンロードし、アーカイブ中のファイルを /usr/local/share/snmp/mibs/yamaha 以下に保存する。

  • snmp の設定

    /etc/snmp/snmp.conf
    #mibs :
    mibdirs +/usr/local/share/snmp/mibs/yamaha
    mibs +ALL

    ※ mibs : をコメントアウトし、mibsdirs と mibs を設定する。

  • snmptrapd の設定

    /etc/snmp/snmptrapd.conf
    authCommunity log,execute router
    traphandle default /usr/bin/traptoemail -f snmp@example.com -s 127.0.0.1 root

    ※ snmp trap のコミュニティ名はルータと snmptrapd.conf で同じものとする。

  • snmptrapd を起動

    # systemctl start snmptrapd.service
  • 起動時に snmptrapd を有効とする

    # systemctl enable snmptrapd.service
  • ルータからの UDP 162 を通過するようにしておく

Debian 10 Buster で fail2ban のメモ

Debian 10 Buster で fail2ban を設定したときのメモ。とりあえず sshd だけで、メール通知するようにしたパターン。

  1. インストールする。

    # apt-get install fail2ban
  2. /etc/fail2ban/jail.conf を変更する。以下はインストール状態からの変更点のみ。
    ignoreip = 127.0.0.1/8 ::1 # ban 対象としない IP アドレスを指定
    destemail = root@example.com # 送信先メールアドレスを設定
  3. /etc/fail2ban/jail.d/sshd.conf を新規作成する。

    [sshd]
    enabled = true
    port	= 22 # 実際の sshd のポートを指定
    logpath	= %(sshd_log)s
    backend	= %(sshd_backend)s
    action	= %(action_mw)s
  4. fail2ban を再起動する。

    # systemctl restart fail2ban.service

テストしてみたところ IPv4 はもちろん、IPv6 でも正常に (?) ban されることを確認した。

ban が発動すると該当アドレスについて、iptables で「f2b-sshd」というチェインが作られ、REJECT されるようになっていた。なお、指定時間が経過後は「f2b-sshd」チェインは残るものの、REJECT が削除されて通信出来るようになるようだ。

また、fail2ban 自体を再起動すると「f2b-sshd」チェインも削除されるようだ。ただ、ban 対象がある場合はそれは復元されるみたい。

もちろん、既存のルールに影響することがないように設定される。