ESXi上でCentOS7なのにCentOS6だと言われる件

ESXi上でCentOS7をインストールした場合、open-vm-toolsをインストールされていても「CentOS6」だと言われてしまう件について調査した。

なお、何故かvCenter上から見た場合は警告されず、直接ESXi上で仮想マシンを見た際にだけ言われる。

結論めいたこと

open-vm-toolsのバグ(Fix CentOS 7.6 detection)で、open-vm-tools 10.3.10以降で修正されている。

しかし、2019/06/27時点でのCentOS7のopen-vm-toolsは10.2.5であり修正されていないバージョンであるため公式な手法では対処できない。

回避策としては2つある

/etc/centos-release を修正する

今回のバグは「CentOS Linux release 7.6.1810 (Core)」の文字列からOSバージョン判定をする際に「”6.”があればCentOS6」「”7.”があればCentOS7」「”8.”があればCentOS8」という順番で行っているせいで、「7.6.1810」の中にある「6.」を読み取ってしまい「CentOS6」と判定されていることにより発生している。

このため、/etc/centos-release 内の誤判定要素を無くすことで対処できなくもない。

例えば「 CentOS Linux release 7.6 1810 (Core) 」と、「.」を抜いてしまうとか。

ただ、このファイルは他のソフトウェアでもディストリビューション判別に使用されており、そこでの条件の書き方によっては正しく判定できなくなってしまう恐れもあるため、注意が必要である。

もしくはCentOS 7.7以降ではれば、「6.」に引っかかることがなくなるので、アップデートする、という手もとれる。

vSphere仮想マシンオプションのゲストOSを修正する

vSphere6.5以降(仮想マシンバージョン13以降)でCentOS7を使用する場合、仮想マシンオプションで「ゲストOS:Linux」と「ゲストOSのバージョン:CentOS 7(64ビット)」を設定する。

誤判定で「CentOS 6(64ビット)」と認識されているんだったら、仮想マシンオプションの「ゲストOSのバージョン」も「CentOS 6 (64ビット)」にしちゃえばいいじゃん。

という非常に雑な対応手法。

なんでこんなことに

githubにあるopen-vm-toolsのソースコードからopen-vm-tools/open-vm-tools/lib/misc/hostinfoPosix.c を見てみるとひたすら条件が列挙されている。

いままではバージョン表記の中に「.」が2個登場するという想定が無かったようで、Debianでも同様の手法で判定しています。

今回のCentOSでの対応は、いままで「6.」をキーにしていたものを「 6.」と数字の前にスペースが入っていることを検出するようにした、というものになっている。

個人的に結構意外だったのはRedHat Enterprise LinuxとCentOSの判定ルーチンが独立しているという点。

   if (strstr(distroLower, "red hat")) {
      if (strstr(distroLower, "enterprise")) {

         /*
          * Looking for "release x" here instead of "x" as there could be
          * build version which can be misleading. For example Red Hat
          * Enterprise Linux ES release 4 (Nahant Update 3)
          */

         int release = 0;
         char *releaseStart = strstr(distroLower, "release");

         if (releaseStart != NULL) {
            sscanf(releaseStart, "release %d", &release);
            if (release > 0) {
               snprintf(distroShort, distroShortSize, STR_OS_RED_HAT_EN"%d",
                        release);
            }
         }

         if (release <= 0) {
            Str_Strcpy(distroShort, STR_OS_RED_HAT_EN, distroShortSize);
         }

      } else {
         Str_Strcpy(distroShort, STR_OS_RED_HAT, distroShortSize);
      }
   }
   } else if (StrUtil_StartsWith(distroLower, "centos")) {
      if (strstr(distroLower, " 6.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS6, distroShortSize);
      } else if (strstr(distroLower, " 7.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS7, distroShortSize);
      } else if (strstr(distroLower, " 8.")) {
         Str_Strcpy(distroShort, STR_OS_CENTOS8, distroShortSize);
      } else {
         Str_Strcpy(distroShort, STR_OS_CENTOS, distroShortSize);
      }
   } 

そして、Oracle LinuxはCentOSと同様の記載になっているという点。

   } else if (StrUtil_StartsWith(distroLower, "enterprise linux") ||
              StrUtil_StartsWith(distroLower, "oracle")) {
      /*
       * [root@localhost ~]# lsb_release -sd
       * "Enterprise Linux Enterprise Linux Server release 5.4 (Carthage)"
       *
       * Not sure why they didn't brand their releases as "Oracle Enterprise
       * Linux". Oh well. It's fixed in 6.0, though.
       */
      if (strstr(distroLower, "6.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE6, distroShortSize);
      } else if (strstr(distroLower, "7.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE7, distroShortSize);
      } else if (strstr(distroLower, "8.")) {
         Str_Strcpy(distroShort, STR_OS_ORACLE8, distroShortSize);
      } else {
         Str_Strcpy(distroShort, STR_OS_ORACLE, distroShortSize);
      }
   }

Oracle Linux 7の /etc/oracle-release の表記はどういう風になってるんだろうかな・・・

Steam版Blenderをインストールしたけど拡張子.blendの関連付けが行われない

Steam版Blender」が無料になっていたので入手してインストールした。

従来のBlenderもインストールしていたので、アプリケーション一覧だと以下のような感じになっていた。(上がSteam版)

デスクトップ上のアイコンだと下側の「Blender」がSteam版。

Blenderアプリのバージョンアップを自動で行いたいからSteam版Blenderをインストールしたので、従来版Blenderのアンインストールをしたところ問題が発生。

拡張子.blendの関連付けがなくなってしまった。Steam版Blenderもアンインストールし、Steam版Blenderだけを再インストールしてみても関連付けを行ってくれない。

検索したところ「.blend file association」にて対処方法を発見。

1. Library -> Software
2. Right Click “Blender” -> Properties -> Set Launch Options
3. Add “-R” without quotes
4. Hit OK
5. Launch Blender
6. You should see a command prompt window and a message saying “File extension registered for the current user. To register for all users, run as an administrator.”
7. Hit OK
8. Right Click “Blender” -> Properties -> Set Launch Options
9. Remove “-R”
10. Double click any .blend file and it should open with the Steam Blender version

Steamアプリの中からSteam版Blenderを起動する際、1回だけ「-R」オプションをつけて起動することで関連付け処理が行われる、とのこと。

これを実行してみたら問題なく動作するようになった。

ラズパイ4がUS,EU圏以外でも発売できる理由って何なんだろう?

ラズベリーパイ4が発売になりました。

基板上にFCC ID(US)とCEロゴ(EU圏)が印字されているので、たぶんこの2箇所で使うのは合法なんだろうなぁ、って感じです。

で・・・いま手元にあるラズパイ3の箱を見てみると各国の電波系の認証IDとロゴがあります。

CE

CEマークで、EU圏で使う場合に必要です。

FCC

FCCマークで、アメリカで使う場合に必要です。

FCC IDが発行されます。文字列を指定できるようで、製品名称が入ったりします。

CMIT ID 中国のCCC認証を取得すると発行されるIDです。SRRCの場合もあるようです。

KCC

韓国のKCCマークです。

MSIP-CMN-P2R-RPI32がラズパイ3のIDのようです。

NCC

台湾のNCCマークです。

通称技適マークです。 工事設計認証のマーク。TELECとも呼ばれることがあります。

香港で使用するための認証です。

上記の認証を発行している組織「通訊事務管理局」のロゴです。

というわけで、私が所有しているラズパイ3を合法的に利用できるのは、日本、アメリカ、EU圏、韓国、中国、香港、台湾であるようです。

それ以外の国については認可がおりてないため取り締まられる可能性がある、ということになります。

いままでの機器における認可の取得状況を見る限り、ラズパイ4についても、同じようにアメリカとEU圏以外についてはちゃんと認証を取得しなければ不味いはずなのですが、現時点ではそれ以外の国についてちゃんと認証取得が完了しているかどうかは不明です。

いったいどのようになっているのでしょうかねぇ・・・


株機器会社イー・オータマの「各国申請代行」のページに各国の認証ロゴがあり、調べる手がかりになりました。

総務省の平成24年の記事「 各国の基準認証制度の概要 -MRA情報の調査に親しむ- 」というpdfファイルは韓国、カナダ、中国、オーストラリア、EU圏、シンガポール、アメリカにおける電波認証に係わる組織と規制についての説明が簡単にされており、大変役にたちました。

また平成22年発行の「各国基準認証制度の概要」ではインド、中国、韓国、カナダ、ペルー、ロシアで(データ通信も行う)無線機器を販売する際に必要となる認証について解説されています。

vSphere上にRHEL8を日本語でインストールしようとするとインストーラがちゃんと表示されない

vSphere 6.0環境でRHEL8をインストールしようと、日本語インタフェースで進めようとしたら、「インストール概要」の画面以降、仮想コンソールからはみ出た範囲まで使われるようになってしまう。

対処方法を捜索・・・vSphere側の「svga.height」「svga.width」指定ではうまくいかなかったので、Anaconda側のパラメータを「Anaconda Boot Options一覧」から探したところ「inst.resolution」を発見。

起動時のカーネルオプションに対して「inst.resolution=1024×768」を追加することで、下記の様に全てを表示させることに成功した。

UpdraftPlusというWordPressのバックアッププラグインが動いてなかった話

UpdraftPlus」というWordpressのプラグインがある。

これは、WordpressのデータをGoogle Driveなどの外部サーバにバックアップしてくれるというものである。

で・・・しばらく前に入れてみてたのですが、設定画面を開いてみると予想外のステータス表示が・・・

「WordPressは延滞しているスケジュールされたタスクを持っています」

・・・おや?

リンク先「The scheduler in my WordPress installation is not working – what should I do?」から「My scheduled backups do nothing, or “Backup Now” stops mid-way」を見てみるとwp-config.phpに「define(‘DISABLE_WP_CRON’, true);」って設定されていない?とのこと。

が・・・うちの環境だと説くに設定はされていない。

ただ、wp-cronを常時有効にすると負荷があがるという話もあるので他に方策が無いか探してみると「Can I run backups from the shell / cron?」という記事を発見。

WordPressをCLIで管理できるWP-CLIを使い、UpdraftPlusを動作させることができるというドキュメント「Using WP CLI with UpdraftPlus」があった。

試してみる・・・

まず、プラグインのインストール状況を確認するため「wp plugin list」を実行

$ wp plugin list
+---------------------------------------------+----------+--------+---------+
| name                                        | status   | update | version |
+---------------------------------------------+----------+--------+---------+
| akismet                                     | active   | none   | 4.1.2   |
| amp                                         | active   | none   | 1.2.0   |
| updraftplus                                 | active   | none   | 1.16.15 |
| wordpress-importer                          | inactive | none   | 0.6.4   |
| wp-multibyte-patch                          | active   | none   | 2.8.2   |
+---------------------------------------------+----------+--------+---------+
$

activeとなっていることを確認できたので「wp updraftplus backup」を実行!

$ wp updraftplus backup
Error: 'updraftplus' is not a registered wp command. See 'wp help' for available commands.
$

???

wordpressのフォーラムに「‘updraftplus’ is not a registered wp command.」という記事を発見。

回答「Free版じゃ使えないのでは?」

なるほど!

というわけで、うちの場合、Free版だったのでwp-cliによる実行は使えないようでした。