ラズパイ3のOSMCがアップデートされてなかった


ラズパイ3をメディアプレーヤーとして使うためにOSMCをインストールしているんですが、確認してみたら「OSMC November 2020 2020.11-1」からアップデートされていなかったので調査。

GUIからやってみると、updateを取得にしにいくもののすぐに終わる。

じゃあ、ssh接続してコマンドでやってみるか、と、「Keeping your OSMC system up to date」にある「sudo apt-get update」を実行してみるとエラー

osmc@osmc:~$ sudo apt-get update
Get:1 http://security.debian.org buster/updates InRelease [65.4 kB]
Get:2 http://ftp.debian.org/debian buster InRelease [122 kB]
Get:4 http://ftp.debian.org/debian buster-updates InRelease [51.9 kB]
Hit:3 http://ftp.fau.de/osmc/osmc/apt buster InRelease
Reading package lists... Done
E: Repository 'http://security.debian.org buster/updates InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
N: Repository 'http://ftp.debian.org/debian buster InRelease' changed its 'Version' value from '10.10' to '10.11'
E: Repository 'http://ftp.debian.org/debian buster InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
E: Repository 'http://ftp.debian.org/debian buster-updates InRelease' changed its 'Suite' value from 'stable-updates' to 'oldstable-updates'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
osmc@osmc:~$

このエラーの場合は、–allow-releaseinfo-change オプションで対応できるとのこと

osmc@osmc:/etc/apt$ sudo apt-get update --allow-releaseinfo-change
Get:1 http://security.debian.org buster/updates InRelease [65.4 kB]
Get:2 http://ftp.debian.org/debian buster InRelease [122 kB]
Get:3 http://ftp.debian.org/debian buster-updates InRelease [51.9 kB]
Get:5 http://security.debian.org buster/updates/main armhf Packages [306 kB]
Get:6 http://security.debian.org buster/updates/main Translation-en [166 kB]
Hit:4 http://ftp.fau.de/osmc/osmc/apt buster InRelease
Get:7 http://ftp.debian.org/debian buster/main armhf Packages [7698 kB]
Get:8 http://ftp.debian.org/debian buster-updates/main armhf Packages.diff/Index [9100 B]
Get:9 http://ftp.debian.org/debian buster/main Translation-en [5968 kB]
Get:10 http://ftp.debian.org/debian buster/contrib armhf Packages [40.1 kB]
Get:11 http://ftp.debian.org/debian buster/non-free armhf Packages [62.1 kB]
Get:12 http://ftp.debian.org/debian buster/non-free Translation-en [88.8 kB]
Get:13 http://ftp.debian.org/debian buster-updates/main armhf Packages 2021-09-18-2009.26.pdiff [1109 B]
Get:14 http://ftp.debian.org/debian buster-updates/main armhf Packages 2021-09-28-1420.03.pdiff [184 B]
Get:15 http://ftp.debian.org/debian buster-updates/main armhf Packages 2021-10-26-2004.40.pdiff [283 B]
Get:15 http://ftp.debian.org/debian buster-updates/main armhf Packages 2021-10-26-2004.40.pdiff [283 B]
Fetched 14.3 MB in 16s (881 kB/s)
Reading package lists... Done
N: Repository 'http://security.debian.org buster/updates InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
N: Repository 'http://ftp.debian.org/debian buster InRelease' changed its 'Version' value from '10.10' to '10.11'
N: Repository 'http://ftp.debian.org/debian buster InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
N: Repository 'http://ftp.debian.org/debian buster-updates InRelease' changed its 'Suite' value from 'stable-updates' to 'oldstable-updates'
osmc@osmc:/etc/apt$

これは大丈夫なのかな?と心配になりつつも「E:」がないので大丈夫だろう、と、「sudo apt upgrade」を実行

osmc@osmc:/etc/apt$ sudo apt upgrade
Running apt upgrade on your system can cause adverse effects on your system
Use apt full-upgrade, which is the proper way to administer a Debian / Ubuntu system
For more information about updates, see https://osmc.tv/wiki/general/keeping-your-osmc-system-up-to-date/
osmc@osmc:/etc/apt$

apt full-upgrade を使えと怒られた

osmc@osmc:/etc/apt$ sudo apt full-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  armv7-libass-osmc armv7-libnfs-osmc dh-python g++-6 gnupg-agent libass5 libavcodec57 libavformat57 libavutil55 libbind9-140
  libbluray1 libcdio13 libcryptsetup4 libdevmapper-event1.02.1 libdns162 libegl1-mesa libenca0 libevent-2.0-5 libgdbm3
  libgl1-mesa-glx libgles2-mesa libicu57 libisc160 libisccc140 libisccfg140 libiso9660-8 liblivemedia57 liblvm2app2.2 liblwres141
  libmicrodns0 libncurses5 libnfs8 libntfs-3g871 libpcre16-3 libperl5.24 libpostproc54 libprocps6 libprotobuf-lite10 libproxy1v5
  libpython3.5-minimal libpython3.5-stdlib libsndio6.1 libssl1.0.2 libstdc++-6-dev libswresample2 libswscale4 libunistring0
  libupnp6 libva-drm1 libva-wayland1 libva-x11-1 libva1 libvlccore8 libvpx4 libwayland-egl1-mesa libwebpmux2 libx264-148
  libx265-95 python-apt python-certifi python-chardet python-dbus python-gi python-gobject python-gobject-2 python-idna
  python-imaging python-pexpect python-pil python-ptyprocess python-requests python-six python-unidecode python-urllib3
  python3-distutils python3-lib2to3 python3.5 python3.5-minimal wireless-firmware-osmc
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  armv7-bluezalsa-osmc libbluetooth3 libfdk-aac1 libpython3.7 libsbc1 python-crypto python-ldb python-samba python-tdb
  python3-dbus python3-gi python3-pil python3-unidecode rbp2-image-5.10.78-2-osmc rbp2-mesa-osmc samba-common-bin
The following packages will be upgraded:
  apt apt-utils armv7-bluez-osmc armv7-eventlircd-osmc armv7-network-osmc armv7-remote-osmc avahi-daemon base-files
  base-files-osmc bind9-host ca-certificates curl debconf debian-archive-keyring distro-info-data iproute2 libapt-inst2.0
  libapt-pkg5.0 libavahi-client3 libavahi-common-data libavahi-common3 libavahi-compat-libdnssd1 libavahi-core7 libavcodec58
  libavformat58 libavutil56 libbind9-161 libbsd0 libc-bin libc-dev-bin libc-l10n libc6 libc6-dev libcairo2 libcurl4 libdns1104
  libgcrypt20 libglib2.0-0 libgnutls30 libgssapi-krb5-2 libhogweed4 libicu63 libisc1100 libisccc161 libisccfg163 libk5crypto3
  libkrb5-3 libkrb5support0 libldap-2.4-2 libldap-common libldb1 liblirc-client0 liblwres161 liblz4-1 libmariadb3 libnettle6
  libnss-myhostname libnss3 libntfs-3g883 libopenjp2-7 libp11-kit0 libpam-systemd libpostproc55 libpython3.7-minimal
  libpython3.7-stdlib libsmbclient libsndfile1 libssl-dev libssl1.1 libswresample3 libswscale5 libsystemd0 libtiff5 libudev1
  libvlc-bin libvlc5 libvlccore9 libwbclient0 libwebp6 libwebpdemux2 libwebpmux3 libx11-6 libx11-data libx11-xcb1 libxml2
  libzstd1 linux-libc-dev locales mariadb-common mediacenter-addon-osmc mediacenter-eventclients-common-osmc
  mediacenter-send-osmc mediacenter-skin-osmc multiarch-support ntfs-3g openssl openvpn psmisc python3.7 python3.7-minimal
  rbp-bootloader-osmc rbp-userland-osmc rbp2-device-osmc rbp2-ftr-osmc rbp2-kernel-osmc rbp2-libcec-osmc rbp2-mediacenter-osmc
  samba-common samba-libs sudo systemd systemd-sysv tzdata udev vlc vlc-bin vlc-data vlc-l10n vlc-plugin-base vlc-plugin-qt
  vlc-plugin-video-output wpasupplicant
122 upgraded, 16 newly installed, 0 to remove and 0 not upgraded.
Need to get 223 MB of archives.
After this operation, 76.9 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://security.debian.org buster/updates/main armhf libsmbclient armhf 2:4.9.5+dfsg-5+deb10u2 [155 kB]
<略>
Get:61 http://ftp.fau.de/osmc/osmc/apt buster/main armhf rbp2-device-osmc armhf 1.5.7 [553 kB]
Get:62 http://ftp.fau.de/osmc/osmc/apt buster/main armhf multiarch-support armhf 2.28-110.1 [215 kB]
Fetched 223 MB in 2min 18s (1619 kB/s)
Extracting templates from packages: 100%
Preconfiguring packages ...
(Reading database ... 41428 files and directories currently installed.)
Preparing to unpack .../base-files_10.3+deb10u11_armhf.deb ...
Unpacking base-files (10.3+deb10u11) over (10.3+deb10u7) ...
Setting up base-files (10.3+deb10u11) ...
<略>

Preparing to unpack .../56-liblwres161_1%3a9.11.5.P4+dfsg-5.1+deb10u6_armhf.deb ...
Unpacking liblwres161:armhf (1:9.11.5.P4+dfsg-5.1+deb10u6) over (1:9.11.5.P4+dfsg-5.1+deb10u2) ...
Preparing to unpack .../57-avahi-daemon_0.7-4+deb10u1_armhf.deb ...
Unpacking avahi-daemon (0.7-4+deb10u1) over (0.7-4+b1) ...
dpkg: warning: unable to delete old directory '/etc/resolvconf/update-libc.d': Directory not empty
dpkg: warning: unable to delete old directory '/etc/resolvconf': Directory not empty
Preparing to unpack .../58-mediacenter-addon-osmc_3.0.737_all.deb ...
Unpacking mediacenter-addon-osmc (3.0.737) over (3.0.699) ...
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.updates/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.services/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.remotes/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.pi/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.networking/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.logging/resources/osmc': Directory not empty
dpkg: warning: unable to delete old directory '/usr/share/kodi/addons/script.module.osmcsetting.apfstore/resources/osmc': Directory not empty
Preparing to unpack .../59-mediacenter-skin-osmc_19.1.0-19_all.deb ...
Unpacking mediacenter-skin-osmc (19.1.0-19) over (18.5.0-4) ...
Preparing to unpack .../60-libnss3_2%3a3.42.1-1+deb10u4_armhf.deb ...
Unpacking libnss3:armhf (2:3.42.1-1+deb10u4) over (2:3.42.1-1+deb10u3) ...
Preparing to unpack .../61-rbp2-libcec-osmc_6.0.2-3_armhf.deb ...
Unpacking rbp2-libcec-osmc (6.0.2-3) over (4.0.4-5) ...
<略>
Setting up libavformat58:armhf (7:4.1.8-0+deb10u1) ...
Setting up libbind9-161:armhf (1:9.11.5.P4+dfsg-5.1+deb10u6) ...
Setting up samba-common-bin (2:4.9.5+dfsg-5+deb10u2) ...
Checking smb.conf with testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_STANDALONE

Done
Setting up vlc-plugin-base:armhf (3.0.12-0+deb10u1) ...
Setting up vlc (3.0.12-0+deb10u1) ...
Setting up bind9-host (1:9.11.5.P4+dfsg-5.1+deb10u6) ...
Setting up avahi-daemon (0.7-4+deb10u1) ...
Removing obsolete conffile /etc/network/if-up.d/avahi-daemon ...
Removing obsolete conffile /etc/resolvconf/update-libc.d/avahi-daemon ...
Setting up rbp2-mediacenter-osmc (19.3.0-7) ...
Setting up rbp2-device-osmc (1.5.7) ...
Processing triggers for dbus (1.12.20-0+deb10u1) ...
Processing triggers for mime-support (3.62) ...
Processing triggers for libc-bin (2.28-110.1) ...
Processing triggers for ntp (1:4.2.8p12+dfsg-4) ...
Processing triggers for ca-certificates (20200601~deb10u2) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
Processing triggers for libvlc-bin:armhf (3.0.12-0+deb10u1) ...
osmc@osmc:/etc/apt$

そして再起動

無事に「OSMC November 2021 2021.11-2」にアップデートされました。

が・・・自作のプラグインとsteamlinkプラグインが無効化されてしまいました・・・

Ubuntu 20.04で標準のdrbd 8.4.11を使う場合の注意点


Ubuntu 20.04でインストールされるdrbdは8.4なのか9.11なのか?」で標準のdrbd 8.4.11と、レポジトリ追加してのdrbd 9.19.1で設定する手法について記載した。

標準のdrbd 8.4.11で使って見るかと設定してみたところ、いくつか問題が発生していた。

その1: 起動時のエラーログ

drbd起動時に下記の様な「/lib/drbd/drbd: line 148: /var/lib/linstor/loop_device_mapping: No such file or directory」というログが出力されている。

root@ubuntu02:~# systemctl status drbd
● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.
     Loaded: loaded (/lib/systemd/system/drbd.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2021-12-20 14:07:35 JST; 2s ago
    Process: 241197 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)
   Main PID: 241197 (code=exited, status=0/SUCCESS)

Dec 20 14:07:34 ubuntu02 drbd[241197]: /lib/drbd/drbd: line 148: /var/lib/linstor/loop_device_mapping: No such file or directory
Dec 20 14:07:34 ubuntu02 drbd[241216]: [
Dec 20 14:07:34 ubuntu02 drbd[241216]:      create res: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:    prepare disk: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:     adjust disk: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]:      adjust net: alfons
Dec 20 14:07:34 ubuntu02 drbd[241216]: ]
Dec 20 14:07:35 ubuntu02 drbd[241258]: WARN: stdin/stdout is not a TTY; using /dev/console
Dec 20 14:07:35 ubuntu02 drbd[241197]:    ...done.
Dec 20 14:07:35 ubuntu02 systemd[1]: Finished DRBD -- please disable. Unless you are NOT using a cluster manager..
root@ubuntu02:~#

まず、 /var/lib/linstor ディレクトリは標準状態では存在していない。

root@ubuntu02:~# ls -l /var/lib/linstor
ls: cannot access '/var/lib/linstor': No such file or directory
root@ubuntu02:~#

エラーの出力元の /lib/drbd/drbd の中で /var/lib/linstor/loop_device_mapping はどういう場面で登場しているかを調べる

# Set up/detach linstor loopback devices for LINSTOR file based pools
# FIXME I think setting up these loop device mappings should be done elsewhere,
# and not in the DRBD init file; possibly we need proper support in drbdadm.
handle_linstor_loopback()
{
        local line dev file
        # || [[ -n $line ]]: in case there is no newline at EOF
        while read -r line || [[ -n $line ]] ; do
                dev=${line%%:*}
                file=${line#*:}
                test -f "$file" && test -r "$file" && test -w "$file" || continue
                # should -f be allowed?
                [[ $dev = loop* ]] || [[ $dev = /dev/loop* ]] || continue
                case "$1" in
                        # what about existing, but "wrong", mappings?
                        start) losetup "$dev" 2>/dev/null || losetup "$dev" "$file";;
                        stop)  losetup "$dev" 2>/dev/null && losetup -d "$dev";;
                esac
        done < /var/lib/linstor/loop_device_mapping

        # at least we tried.
        return 0
}

/var/lib/linstor/loop_device_mapping を入力ファイルとして指定している。

どうやらdrbd起動時に /dev/loop10 = /work/testfile.iso みたいなループデバイスを作るための設定ファイルであるようだ。

ファイルが存在しないことによるログ出力なので、下記で対応した

root@ubuntu02:~# mkdir  /var/lib/linstor
root@ubuntu02:~# touch /var/lib/linstor/loop_device_mapping
root@ubuntu02:~# 

その2: drbdの降格に失敗する

「drbdadm primary shares」でPrimaryとして動作させたあと、他方のサーバに切り替えるため降格する「drbdadm secondary shares」を実行したところ、「0: State change failed: (-12) Device is held open by someone」というメッセージで失敗した。

root@ubuntu01:~#  drbdadm secondary shares
0: State change failed: (-12) Device is held open by someone
Command 'drbdsetup-84 secondary 0' terminated with exit code 11
root@ubuntu01:~# 

誰が使っているのかと「lsof /dev/drbd0」を実行してみたところ、multipathdが握っていた。

root@ubuntu01:~#  lsof /dev/drbd0
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
multipath 4910 root    5r   BLK  147,0      0t0  890 /dev/drbd0
root@ubuntu01:~# 

まずは単純にmultipathd.socketを停止させてから降格を実施してみる。

root@ubuntu01:~# systemctl stop multipathd.socket
root@ubuntu01:~#  drbdadm secondary shares
root@ubuntu01:~#

問題無く降格できた。

というわけで、/dev/drbd0 をmultipathdの対象外とするための設定を作成する。

/etc/mul/etc/multipath.conf に 下記の様な形でblacklist を追加した。

defaults {
    user_friendly_names yes
}

blacklist {
        devnode "^drbd[0-9]"
}

「multipath -t」を実行すると、初期値などが反映された フル記載の multipathd設定が表示されるので、 blacklist セクションに drbdに関する記述が追加されていることを確認する。

この対処後は、multipathdを起動した状態であっても drbdの降格に成功するようになった。

ClonezillaをLACP+タグVLAN環境で使う


システムディスクのバックアップ/リストアを行えるDebian/Ubuntuベースで構成されているClonezilla を使ってシステム障害に備えたバックアップディスクを取得しようと思ったのだが、ネットワークがLACP (802.3ad) +タグVLANで作成されていることに気がついた。

複数NICが搭載されている環境でClonzillaを起動すると、ネットワーク設定の際に「bond0 Use_channel_bonding」という選択肢が表示される。

しかし、次のNetwork Configで「static Use static IP address」を選択してみてもIPアドレスに関する設定のみでLACPで使うNICの選択やVLANに関する入力する場面はない。

というわけで、「enter_shell Enter_command_line_prompt._Do_it_manually」を選択してみるしかない。

選択して盛ると、設定したあと「exit」すれば続きから始まるよ、といわれる。

では、どのように設定を行うのか?下記でヒントを発見

Clonezillaの機能追加希望「#61 no lacp / etherchannel / Bonding support」(2015年07月15日~2016年10月13日)
Clonezillaのフォーラム「VLANs / bonding configuration」(2020年12月09日~2020年12月14日)

手動で設定する場合のやりかたと、ocs-live-nicbonding というスクリプトを追加して今後のバージョンで使える様にする、というものになる。

Clonezilla 2.8.0で確認してみると ocs-live-nicbonding は存在していた。

しかし、ドキュメントが見当たらないので、スクリプトを読んでみると下記仕様のようだった。

・bond0 を mode=802.3ad(LACP) 、miimon=100 で作成する
・ocs-live-nicbonding のオプションとして指定したNICがスレーブデバイスとして登録される
・xmit_hash_policy は指定しないのでデフォルトのlayer2設定

というわけで、eth3,eth4を使用してbond0を作成する場合は「ocs-live-nicbonding eth3 eth4」と実行する

「ip a s bond0」を実行してbond0が作成されていることを確認

bond0へのタグVLAN追加はvconfigコマンドで実行。

「vconfig add bond0 <VLANID>」を実行する

そうすると「bond0.<VLAN ID>」というデバイスが作成される(「ip a s bond0.<VLANID>」で確認)

IPアドレスを「ifconfig bond0.<VLANID> <IPアドレス> netmask <ネットマスク> up」を実行して設定。

で「exit」を実行すると、下記の様にClonezillaの操作に戻ります。

CentOS7,RHEL8,Ubuntu 20.04などでコンソール解像度を低くする


RHEL/CentOS6以降やUbuntu 18.04(?)以降など、最近にLinuxでは起動時に接続しているディスプレイの解像度を認識し、高解像度で表示しようとする。

これは Kernel Mode Setting (KMS) (kernel.orgの説明 / archlinux wikiの説明)の機能により実現されている。

しかし、複数台のサーバを設定する場合、モニタが1台しかないのでつなぎ替えて設定しようとすると、起動時にモニタがつながっていたサーバだけ解像度が高くなってしまう、という弊害がある。

この問題は、DELLサーバに搭載されるiDRAC機能によるリモートコンソール接続の時にも発生してしまい、起動時に物理モニタが接続されているサーバだけブラウザ上のコンソール表示が高解像度で表示されます。

これを避けるには強制的に解像度を指定する必要があります。

参考にした情報源

RedHat KB: RHEL 6 および RHEL 7 で VGA コンソールのテキスト解像度を 80×25 に設定する方法
archlinux wiki: GRUB/ヒントとテクニック の「3.1 フレームバッファの解像度を設定する
grubマニュアル: 6.1 Simple configuration handling
centos.org forum: How to change Grub menu resolution?

Ubuntu 20.04 Serverの場合

インストール直後は、起動直後に下記のようなgrubメニューが表示されない設定となっています。まずは、grubメニューが表示されるよう設定変更してください。(なお、設定手法については後述の /etc/default/grub の所に書いてあります)

grubメニューが表示されるようになったら、上記で止めて「c」を入力し、コマンドラインモードに変更します。

ここで「videoinfo」と入力します。

そうすると対応できる表示モードの一覧が出力されますが、モードが多い場合はスクロールしてしまい、全部を見ることができない場合があります。

そのような場合は「set pager=1」と入力し、そのあとに「videoinfo」を実行します。

なお、日本語キーボード利用時、= は、「^ へ ~」キー(通常の=の右隣)で入力出来ます。

解像度指定は「800x600x32」といったような形で行います。

実際にそれが使用できるかは「videotest 800x600x32」と実行します。

そうすると、下記の様に表示されます。これが読める状態であれば問題ありません。

このテストは終了する手法がないため、強制再起動します。(ctrl+alt+deleteなどで)

設定する解像度が決まったら普通にUbuntuを起動します。

設定するファイルは /etc/default/grub です。

Ubuntu 20.04をvSphere上でインストールした場合の初期値では下記の様になっていました。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

grubメニューを表示して10秒まつ設定(“GRUB_TIMEOUT_STYLE=menu”と”GRUB_TIMEOUT=10” ) を入れて

そこに、コンソール解像度を設定するための以下の設定を入れます。

grubでの解像度を指定するための「GRUB_GFXMODE=800×600」
grubでの設定内容をkernel起動後も維持するための「GRUB_GFXPAYLOAD_LINUX=keep」と、「GRUB_CMDLINE_LINUX_DEFAULT=」行への「nomodeset」追加

これを行った後の /etc/default/grub の内容は下記の様になります。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity nomodeset"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
GRUB_GFXMODE=800x600
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

書き換えたらgrub.cfgを生成するため「sudo update-grub2」を実行します。

instadmin@ubuntu:~$ sudo update-grub2
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.4.0-91-generic
Found initrd image: /boot/initrd.img-5.4.0-91-generic
done
instadmin@ubuntu:~$

設定後、再起動して解像度が指定通りになっていることを確認します。

CentOS7の場合

RedHatのKBに記載があります:「RHEL 6 および RHEL 7 で VGA コンソールのテキスト解像度を 80×25 に設定する方法

上記KBでは640×480に設定していますが、他の解像度が指定できないものかCentOS7でいろいろ試してみましたが出来ませんでした。

設定は /etc/default/grub に行います。

CentOS7をvSphere環境上にインストールした場合、下記の様になっていました。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap"
GRUB_DISABLE_RECOVERY="true"

この「GRUB_CMDLINE_LINUX=」行に「video=640×480」と「nomodeset」の両方を追加します。

RedHat KBではvideoだけでもいけるようなことを書いていましたが、実サーバ(DELL PowerEdge R640 UEFI設定)では問題なかったものの、vSphere仮想環境(BIOS設定)では起動途中で解像度が変わる動作をしたため「nomodeset」を追加しています。

ただ、KBにはnomodesetは悪、的な記述もあるので、ダメだったら追加する、ぐらいの方がいいかもしれません

追加後は以下の様な形になります。

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap video=640x480 nomodeset"
#GRUB_GFXMODE=800x600x24
GRUB_DISABLE_RECOVERY="true"

EFI環境の場合「grub2-mkconfig -o /etc/grub2-efi.cfg」、BIOS環境の場合「grub2-mkconfig -o /etc/grub2.cfg」を実行してgrub設定を更新します。

[root@centos7 ~]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-1160.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-1160.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-2c896cb2eafd4db586ecfbd67535d5dc
Found initrd image: /boot/initramfs-0-rescue-2c896cb2eafd4db586ecfbd67535d5dc.img
done
[root@centos7 ~]#

この後、再起動して解像度が設定されていることを確認します。

参考情報

CentOS7の場合、Ubuntu 20.04と異なり、grubでのvideoinfo/videotestコマンドがなく、vdeinfo/vbetestコマンドとなります。

参考として、下記にCentOS7での実行の様子を記載します。

grubメニューで止めて、「c」を入力し、コマンドラインモードに入ります。

CentOS7の場合はvideoinfoが搭載されていないgrubなので「vbeinfo」を実行します。

CentOS7の場合は set pager=1 の設定がされているようで出力が多い場合でも表示を止めてくれます。

表示テストは「vbetest 800x600x32」といった形で実施します。(おなじくvideotestコマンドが無い)

vbetestの終了は強制再起動(ctrl+alt+deleteなど)を行います。

Oracle Linux 8の場合(2021/12/08)

/etc/default/grub にいろいろ記述を入れてみてるのですが、解像度変更ができる気配がない・・・

また、grubでのvideoinfo, vbeinfo, videotest, vbetest はない模様

RHEL 8.6/Oracle Linux 8.6の場合(2022/07/11)

/etc/default/grubのGRUB_CMDLINE_LINUXに「video=800×600」を追加してみたところ、それっぽく動いている。

なお、去年試した時と同じくgrubでのvideoinfo, vbeinfo, videotest, vbetest は存在していないようだ。

/etc/default/grubのGRUB_CMDLINE_LINUXに「video=1024×768」を追加でも大丈夫だった。

Ubuntu 20.04 でリンク速度固定をする


Ubuntu 20.04.3 Serverでリンク速度の固定をしようと思ったのだが、公式に類するドキュメントが発見できなかった。

手動でやる場合は ethtoolコマンド、というのは分かるのだが、起動時に自動設定する方法が分からない。

Desktop版の設定

Ubuntu 20.04 DesktopではNetworkManagerがネットワークの設定を担当しており、 /etc/NetworkManager ディレクトリ内に関連する設定ファイルがあった。

具体的には /etc/NetworkManager/system-connections/接続名.nmconnection というファイルが作成されていた。

そのファイル内の[ethernet]セクションに下記の記載をすることで設定された。

[ethernet]
mac-address-blacklist=
speed=100
duplex=full

Server版の場合

Ubuntu 20.04 Server版では systemd-networkd と netplanがネットワーク設定を担当している。

IPアドレス設定については netplan側で行い、 /etc/netplan/99_config.yaml などで設定する。

リンク速度固定についてはsystemd側で設定を行うようだった。

今回直接のヒントになった情報はこちら:Set network interface speed with systemd-networkd

上記サイトでは /etc/systemd/networkd/internet.link というファイルを作って設定している。(Ubuntu 20.04 だと /etc/systemd/networkd/ というディレクトリは無く /etc/systemd/network/ )

実際には拡張子「.link」が重要となっていて、NICの初期認識の時に読み込むファイル群ということになっている。

私の場合は /etc/systemd/network/99-default.link というファイル名で作成した。

複数のNICがあり、それぞれで異なる設定を行いたい場合は /etc/systemd/network/99-nic1.link と /etc/systemd/network/99-nic2.link とMatch条件ごとにファイルを分けて設定する形になる。

ドキュメント: systemd.link

[Match]セクションで条件に該当するデバイスを定義し、[Link]セクションで値を設定する、という作りになっている。

たとえばドライバ e1000e のNIC全てに同じ設定を入れる場合は下記の様になる。

[Match]
Driver=e1000e

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

特定のMACアドレスに対してのみ適用したい場合は下記の様になる。

[Match]
PermanentMACAddress=00:0c:29:9c:7e:14

[Link]
AutoNegotiation=no
BitsPerSecond=1G
Duplex=half

なお、「MACAddress=~」で設定もできるが、Linuxでは物理的なMACアドレスに対して上書きで別途MACAddress値を設定してしまうことができる。

特にbonding設定時は必ずMACAddress値が変わってしまうため、物理的なデバイスについているPermanentMACAddressの値を使う必要がある。

bondingデバイス設定時などは「ip a s」で確認できるMACアドレスではなく、dmesgなどに登場する起動直後に認識しているMACアドレスを使う必要がある。

root@ubuntu:~# dmesg|grep eth
[    1.718483] e1000e 0000:03:00.0 eth0: (PCI Express:2.5GT/s:Width x1) 00:0c:29:9c:7e:0a
[    1.718709] e1000e 0000:03:00.0 eth0: Intel(R) PRO/1000 Network Connection
[    1.718927] e1000e 0000:03:00.0 eth0: MAC: 3, PHY: 8, PBA No: 000000-000
[    1.825725] e1000e 0000:0b:00.0 eth1: (PCI Express:2.5GT/s:Width x1) 00:0c:29:9c:7e:14
[    1.826001] e1000e 0000:0b:00.0 eth1: Intel(R) PRO/1000 Network Connection
[    1.826314] e1000e 0000:0b:00.0 eth1: MAC: 3, PHY: 8, PBA No: 000000-000
[    1.829127] e1000e 0000:03:00.0 ens160: renamed from eth0
[    1.843927] e1000e 0000:0b:00.0 ens192: renamed from eth1
root@ubuntu:~#

複数のMACアドレスを指定する場合は下記の様にスペースを空けて列挙する。

[Match]
PermanentMACAddress=00:0c:29:9c:7e:14 00:0c:29:9c:7e:0a

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

NICのデバイス名 ens192などを指定できないかチャレンジしたのですが、「Name=」や「OriginalName=」を使用してみましたが動作しませんでした。

設定値の反映については、確認した限りではauto negotiationのon/off切り替えについては、再起動が必要でした。

auto-negotiation offになった後の、リンク速度変更については、設定記載後に「udevadm test-builtin net_setup_link /sys/class/net/デバイス名」を実行することで反映されました。

root@ubuntu:~# udevadm test-builtin net_setup_link /sys/class/net/ens160
Load module index
Parsed configuration file /etc/systemd/network/99-default.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=e1000e
ens160: Failed to get ACTION= property: No such file or directory
Using default interface naming scheme 'v245'.
ID_NET_LINK_FILE=/etc/systemd/network/99-default.link
Unload module index
Unloaded link configuration context.
root@ubuntu:~#

リンク速度が変わったことが確認できます。

root@ubuntu:~# dmesg|grep ens160
[ 5510.551597] e1000e: ens160 NIC Link is Up 100 Mbps Full Duplex, Flow Control: None
[ 5510.551771] e1000e 0000:03:00.0 ens160: 10/100 speed: disabling TSO
root@ubuntu:~#

失敗編

/etc/networkd-dispatcher/routable.d にスクリプトを配置して、 ethtoolを実行してTSO offさせる、的な記述を発見。(How to execute post-up scripts with netplan)

/etc/networkd-dispatcher/routable.d/990-speed を作成し下記の内容を書いてみたところ、なぜか1秒間隔でスクリプトが実行され続けてしまった・・・なぜ?

#!/bin/bash

/usr/sbin/ethtool -s ens192 autoneg off speed 100 duplex full
exit 0

失敗ではないものの、実は一番最初に見つけた「How to permanently disable TSO & GSO in Ubuntu 18.04」で/etc/systemd/network/01-tso-and-gso.link ファイルを作って下記を記述

[Match]
# Set a match condition appropriate for your use case
Name=*

[Link]
TCPSegmentationOffload=false
GenericSegmentationOffload=false

と書かれていたのがもっとも正解に近かったという・・・


2021/12/24 追記

udevadmの詳細表示は下記の様に実行する

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/ens160
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=vmxnet3
ens160: Config file /usr/lib/systemd/network/99-default.link is applied
ens160: Failed to get ACTION= property: No such file or directory
ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
ens160: Device has name_assign_type=4
Using default interface naming scheme 'v245'.
ens160: Policy *keep*: keeping existing userspace name
ens160: Device has addr_assign_type=0
ens160: MAC on the device already matches policy *persistent*
Could not set AlternativeName= or apply AlternativeNamesPolicy= on ens160, ignoring: Operation not supported
ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

NICデバイス名の算出に関しては下記

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_id /sys/class/net/ens160
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Using default interface naming scheme 'v245'.
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx00505699e0a1
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp3s0
ID_NET_NAME_SLOT=ens160
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

ちなみに ens34については100Mb固定設定を行っていて、下記の様な出力となる。

osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_setup_link /sys/class/net/ens34
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=e1000
ens34: Config file /etc/systemd/network/98-ens34.link is applied
ens34: Failed to get ACTION= property: No such file or directory
ens34: Device has name_assign_type=4
Using default interface naming scheme 'v245'.
ens34: Policies didn't yield a name and Name= is not given, not renaming.
ID_NET_LINK_FILE=/etc/systemd/network/98-ens34.link
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$ sudo SYSTEMD_LOG_LEVEL=debug udevadm test-builtin net_id /sys/class/net/ens34
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          245
file size:         9953660 bytes
header size             80 bytes
strings            2163852 bytes
nodes              7789728 bytes
Load module index
Found container virtualization none.
timestamp of '/etc/systemd/network' changed
timestamp of '/run/systemd/network' changed
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Using default interface naming scheme 'v245'.
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx000c2953f0df
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp2s2
ID_NET_NAME_SLOT=ens34
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$ cat /etc/systemd/network/98-ens34.link
[Match]
PermanentMACAddress=00:0c:29:53:f0:df

[Link]
AutoNegotiation=no
BitsPerSecond=100M
Duplex=full

osakanataro@ubuntu:~$

上記で「ens34: Policies didn’t yield a name and Name= is not given, not renaming.」というのが出ているが、これはLinkセクションでName=で定義していないための表示。

/etc/systemd/network/98-ens34.link のLinkセクションにNAME=ens34aと記載すると、再起動後のNIC名がens34a と指定したものになる。

また Matchセクションの「OriginalName=」についてだが、マニュアル にINTERACEを元にするとあるが、起動後に変更されてると名前が変わってると使えない、ともある。

とりあえず起動状態のINTERFACEを確認するには 「sudo udevadm test /sys/class/net/ens34」で確認出来る

osakanataro@ubuntu:~$ sudo udevadm test /sys/class/net/ens34
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Load module index
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/98-ens34.link
Parsed configuration file /etc/systemd/network/98-ens224.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
Reading rules file: /usr/lib/udev/rules.d/01-md-raid-creating.rules
Reading rules file: /usr/lib/udev/rules.d/39-usbmuxd.rules
Reading rules file: /usr/lib/udev/rules.d/40-vm-hotadd.rules
Reading rules file: /usr/lib/udev/rules.d/50-apport.rules
Reading rules file: /usr/lib/udev/rules.d/50-firmware.rules
Reading rules file: /usr/lib/udev/rules.d/50-udev-default.rules
Reading rules file: /usr/lib/udev/rules.d/55-dm.rules
Reading rules file: /usr/lib/udev/rules.d/55-scsi-sg3_id.rules
Reading rules file: /usr/lib/udev/rules.d/56-dm-mpath.rules
Reading rules file: /usr/lib/udev/rules.d/56-dm-parts.rules
Reading rules file: /usr/lib/udev/rules.d/56-lvm.rules
Reading rules file: /usr/lib/udev/rules.d/58-scsi-sg3_symlink.rules
Reading rules file: /usr/lib/udev/rules.d/60-autosuspend-chromiumos.rules
Reading rules file: /usr/lib/udev/rules.d/60-block.rules
Reading rules file: /usr/lib/udev/rules.d/60-cdrom_id.rules
Reading rules file: /usr/lib/udev/rules.d/60-crda.rules
Reading rules file: /usr/lib/udev/rules.d/60-drm.rules
Reading rules file: /usr/lib/udev/rules.d/60-evdev.rules
Reading rules file: /usr/lib/udev/rules.d/60-fido-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-input-id.rules
Reading rules file: /usr/lib/udev/rules.d/60-multipath.rules
Reading rules file: /usr/lib/udev/rules.d/60-open-vm-tools.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-alsa.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-input.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-dm.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage-tape.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-storage.rules
Reading rules file: /usr/lib/udev/rules.d/60-persistent-v4l.rules
Reading rules file: /usr/lib/udev/rules.d/60-sensor.rules
Reading rules file: /usr/lib/udev/rules.d/60-serial.rules
Reading rules file: /usr/lib/udev/rules.d/60-tpm-udev.rules
Reading rules file: /usr/lib/udev/rules.d/61-autosuspend-manual.rules
Reading rules file: /usr/lib/udev/rules.d/61-persistent-storage-android.rules
Reading rules file: /usr/lib/udev/rules.d/63-md-raid-arrays.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs-dm.rules
Reading rules file: /usr/lib/udev/rules.d/64-btrfs.rules
Reading rules file: /usr/lib/udev/rules.d/64-md-raid-assembly.rules
Reading rules file: /usr/lib/udev/rules.d/66-azure-ephemeral.rules
Reading rules file: /usr/lib/udev/rules.d/66-snapd-autoimport.rules
Reading rules file: /usr/lib/udev/rules.d/68-del-part-nodes.rules
Reading rules file: /usr/lib/udev/rules.d/69-bcache.rules
Reading rules file: /usr/lib/udev/rules.d/69-lvm-metad.rules
Reading rules file: /usr/lib/udev/rules.d/69-md-clustered-confirm-device.rules
Reading rules file: /usr/lib/udev/rules.d/70-iscsi-disk.rules
Reading rules file: /usr/lib/udev/rules.d/70-iscsi-network-interface.rules
Reading rules file: /usr/lib/udev/rules.d/70-joystick.rules
Reading rules file: /usr/lib/udev/rules.d/70-mouse.rules
Reading rules file: /usr/lib/udev/rules.d/70-power-switch.rules
Reading rules file: /etc/udev/rules.d/70-snap.snapd.rules
Reading rules file: /usr/lib/udev/rules.d/70-touchpad.rules
Reading rules file: /usr/lib/udev/rules.d/70-uaccess.rules
Reading rules file: /usr/lib/udev/rules.d/71-power-switch-proliant.rules
Reading rules file: /usr/lib/udev/rules.d/71-seat.rules
Reading rules file: /usr/lib/udev/rules.d/73-seat-late.rules
Reading rules file: /usr/lib/udev/rules.d/73-special-net-names.rules
Reading rules file: /usr/lib/udev/rules.d/75-net-description.rules
Reading rules file: /usr/lib/udev/rules.d/75-probe_mtd.rules
Reading rules file: /usr/lib/udev/rules.d/78-graphics-card.rules
Reading rules file: /usr/lib/udev/rules.d/78-sound-card.rules
Reading rules file: /usr/lib/udev/rules.d/80-debian-compat.rules
Reading rules file: /usr/lib/udev/rules.d/80-drivers.rules
Reading rules file: /usr/lib/udev/rules.d/80-net-setup-link.rules
Reading rules file: /usr/lib/udev/rules.d/80-udisks2.rules
Reading rules file: /usr/lib/udev/rules.d/81-net-dhcp.rules
Reading rules file: /usr/lib/udev/rules.d/85-hdparm.rules
Reading rules file: /usr/lib/udev/rules.d/85-regulatory.rules
Reading rules file: /usr/lib/udev/rules.d/90-bolt.rules
Reading rules file: /usr/lib/udev/rules.d/90-console-setup.rules
Reading rules file: /usr/lib/udev/rules.d/90-fwupd-devices.rules
Reading rules file: /usr/lib/udev/rules.d/95-dm-notify.rules
Reading rules file: /usr/lib/udev/rules.d/95-kpartx.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-csr.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hid.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-hidpp.rules
Reading rules file: /usr/lib/udev/rules.d/95-upower-wup.rules
Reading rules file: /usr/lib/udev/rules.d/96-e2scrub.rules
Reading rules file: /usr/lib/udev/rules.d/99-systemd.rules
Reading rules file: /usr/lib/udev/rules.d/99-vmware-scsi-udev.rules
Reading rules file: /etc/udev/rules.d/ubuntu--vg-ubuntu--lv.rules
Using default interface naming scheme 'v245'.
ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.
Could not set AlternativeName= or apply AlternativeNamesPolicy= on ens34, ignoring: Operation not supported
DEVPATH=/devices/pci0000:00/0000:00:11.0/0000:02:02.0/net/ens34
INTERFACE=ens34
IFINDEX=6
ACTION=add
SUBSYSTEM=net
ID_MM_CANDIDATE=1
ID_NET_NAMING_SCHEME=v245
ID_NET_NAME_MAC=enx000c2953f0df
ID_OUI_FROM_DATABASE=VMware, Inc.
ID_NET_NAME_PATH=enp2s2
ID_NET_NAME_SLOT=ens34
ID_BUS=pci
ID_VENDOR_ID=0x8086
ID_MODEL_ID=0x100f
ID_PCI_CLASS_FROM_DATABASE=Network controller
ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller
ID_VENDOR_FROM_DATABASE=Intel Corporation
ID_MODEL_FROM_DATABASE=82545EM Gigabit Ethernet Controller (Copper) (PRO/1000 MT Single Port Adapter)
ID_PATH=pci-0000:02:02.0
ID_PATH_TAG=pci-0000_02_02_0
ID_NET_DRIVER=e1000
ID_NET_LINK_FILE=/usr/lib/systemd/network/99-default.link
TAGS=:systemd:
SYSTEMD_ALIAS=/sys/subsystem/net/devices/ens34
USEC_INITIALIZED=2681966
run: '/lib/open-iscsi/net-interface-handler start'
run: '/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/ens34 --prefix=/net/ipv4/neigh/ens34 --prefix=/net/ipv6/conf/ens34 --prefix=/net/ipv6/neigh/ens34'
Unload module index
Unloaded link configuration context.
osakanataro@ubuntu:~$

「INTERFACE=ens34」とはなっているが、OriginalName=ens34 と設定しても動作しなかったので、ダメなようだ。

MatchセクションでNIC特定に利用できたものは下記3つでした。
「PermanentMACAddress=」NICのMACアドレスで指定
  例: PermanentMACAddress=00:0c:29:9c:7e:0a

「Driver=」そのNICが使用するドライバ名で指定
  例: Driver=e1000

「Path=」そのNICの存在するPCIバスアドレスで指定
  例: Path=pci-0000:02:02.0

Path=で指定するパスは「sudo udevadm test /sys/class/net/ens34」の出力内にある「ID_PATH」の値を使用する