Blog

  • DokuwikiをPHP8対応に更新

    Centos7上で、ローカル向けのwikiページ作成ツールとしてdokuwiki+php7.4を使用していた。
    php7.4 のサポートが2022/11/28 で終了したので、セキュリティ保持の為にphp8.* へバージョンアップした。健忘禄としてメモを残す。
    (外部に公開している訳では無いので、ほとんど自己満足ですが)

    <現在のphp バージョンの確認>
    # yum list installed php*

    読み込んだプラグイン:fastestmirror
    Loading mirror speeds from cached hostfile
    * base: download.nus.edu.sg
     省略
    インストール済みパッケージ
    php.x86_64 7.4.33-2.el7.remi @remi-php74
    php-cli.x86_64 7.4.33-2.el7.remi @remi-php74
    php-common.x86_64 7.4.33-2.el7.remi @remi-php74
    php-json.x86_64 7.4.33-2.el7.remi @remi-php74
    php-mbstring.x86_64 7.4.33-2.el7.remi @remi-php74
    php-pecl-zip.x86_64 1.21.1-1.el7.remi.7.4 @remi-php74
    php-sodium.x86_64 7.4.33-2.el7.remi @remi-php74
    php-xml.x86_64 7.4.33-2.el7.remi @remi-php74
    #

    <事前準備 現状の保全等>
    # cp -p /etc/php.ini /etc/php.ini-20230123

    # cp -p -r /var/www /var/www-20230124BK

    <dokuwiki をバージョンアップする>
    ワーク用のディレクトリで解凍する。

    # tar xvfz dokuwiki-a6b3119b5d16cfdee29a855275c5759f.tgz
    dokuwiki/.htaccess.dist
    dokuwiki/COPYING
    dokuwiki/README
    dokuwiki/SECURITY.md

    ファイルを上書きする
    # \cp -f -r -p ./* /var/www/html/dokuwiki/

    パーミッションを戻す
    # chown -R apache dokuwiki
    # chgrp -R apache dokuwiki

    <phpを更新 バージョンアップ>
    7.4系を削除する

    # php -v
    PHP 7.4.33 (cli) (built: Dec 19 2022 13:32:43) ( NTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies

    # yum remove “php*”
    読み込んだプラグイン:fastestmirror
    依存性の解決をしています
    –> トランザクションの確認を実行しています。
    —> パッケージ php.x86_64 0:7.4.33-2.el7.remi を 削除

    途中省略

    トランザクションの要約

    削除 7 パッケージ

    インストール容量: 42 M
    上記の処理を行います。よろしいでしょうか? [y/N]y
    Downloading packages:
    Running transaction check

     以下省略

    # php -v
    -bash: /bin/php: そのようなファイルやディレクトリはありません

    # yum -y install –enablerepo=epel,remi,remi-php82 php php-cli php-common php-json php-mbstring php-pecl-zip php-sodium php-xml

    読み込んだプラグイン:fastestmirror

    Loading mirror speeds from cached hostfile

    • base: download.nus.edu.sg
    • epel: epel.mirror.angkasa.id
    • extras: download.nus.edu.sg
    • remi: fr2.rpmfind.net
    • remi-php74: fr2.rpmfind.net
    • remi-php82: fr2.rpmfind.net
    • remi-safe: fr2.rpmfind.net
    • updates: download.nus.edu.sg
      remi | 3.0 kB 00:00:00
      remi-php82 | 3.0 kB 00:00:00
      (1/2): remi-php82/primary_db | 168 kB 00:00:00
      (2/2): remi/primary_db | 3.4 MB 00:00:01
      パッケージ php-json は php-common によって不要になりました。代わりに php-common-8.2.1-1.el7.remi.x86_64 のインストールを試みています。
      依存性の解決をしています
      –> トランザクションの確認を実行しています。
      —> パッケージ php.x86_64 0:8.2.1-1.el7.remi を インストール
      —> パッケージ php-cli.x86_64 0:7.4.33-2.el7.remi を 更新
      —> パッケージ php-cli.x86_64 0:8.2.1-1.el7.remi を アップデート
      —> パッケージ php-common.x86_64 0:7.4.33-2.el7.remi を 更新
      —> パッケージ php-common.x86_64 0:8.2.1-1.el7.remi を 非推奨
      —> パッケージ php-json.x86_64 0:7.4.33-2.el7.remi を 不要
      —> パッケージ php-mbstring.x86_64 0:7.4.33-2.el7.remi を 更新
      —> パッケージ php-mbstring.x86_64 0:8.2.1-1.el7.remi を アップデート
      —> パッケージ php-pecl-zip.x86_64 0:1.21.1-1.el7.remi.7.4 を 更新
      —> パッケージ php-pecl-zip.x86_64 0:1.21.1-1.el7.remi.8.2 を アップデート
      —> パッケージ php-sodium.x86_64 0:7.4.33-2.el7.remi を 更新
      —> パッケージ php-sodium.x86_64 0:8.2.1-1.el7.remi を アップデート
      —> パッケージ php-xml.x86_64 0:7.4.33-2.el7.remi を 更新
      —> パッケージ php-xml.x86_64 0:8.2.1-1.el7.remi を アップデート
      –> 依存性解決を終了しました。

    依存性を解決しました

    ====================================================================================================
    Package アーキテクチャー バージョン リポジトリー 容量

    インストール中:
    php x86_64 8.2.1-1.el7.remi remi-php82 2.0 M
    php-common x86_64 8.2.1-1.el7.remi remi-php82 1.2 M
    php-json.x86_64 7.4.33-2.el7.remi を入れ替えます
    更新します:
    php-cli x86_64 8.2.1-1.el7.remi remi-php82 6.0 M
    php-mbstring x86_64 8.2.1-1.el7.remi remi-php82 573 k
    php-pecl-zip x86_64 1.21.1-1.el7.remi.8.2 remi-php82 70 k
    php-sodium x86_64 8.2.1-1.el7.remi remi-php82 97 k
    php-xml x86_64 8.2.1-1.el7.remi remi-php82 238 k
    トランザクションの要約

    インストール 2 パッケージ
    更新 5 パッケージ

    総ダウンロード容量: 10 M
    Downloading packages:
    Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
    (1/7): php-8.2.1-1.el7.remi.x86_64.rpm | 2.0 MB 00:00:00
    (2/7): php-common-8.2.1-1.el7.remi.x86_64.rpm | 1.2 MB 00:00:00
    (3/7): php-mbstring-8.2.1-1.el7.remi.x86_64.rpm | 573 kB 00:00:00
    (4/7): php-pecl-zip-1.21.1-1.el7.remi.8.2.x86_64.rpm | 70 kB 00:00:00
    (5/7): php-sodium-8.2.1-1.el7.remi.x86_64.rpm | 97 kB 00:00:00
    (6/7): php-xml-8.2.1-1.el7.remi.x86_64.rpm | 238 kB 00:00:00
    (7/7): php-cli-8.2.1-1.el7.remi.x86_64.rpm | 6.0 MB 00:00:01

    合計 7.8 MB/s | 10 MB 00:00:01
    Running transaction check
    Running transaction test
     以下省略

    # php -v
    PHP 8.2.1 (cli) (built: Jan 3 2023 18:40:55) (NTS gcc x86_64)
    Copyright (c) The PHP Group
    Zend Engine v4.2.1, Copyright (c) Zend Technologies

    <動作確認>
    ・マシンをreboot する。
    ・dokuwiki の動作を確認する。

    <その他>
    ・作業時には関連するサービス(Apacheとかetc)を事前に停止する事。その手順等の記載は省略している。
    ・管理機能を有効にしているなら(プラグインの設定をコントロール出来るなら)、dokuwiki はアップデートのプラグインが提供されているので、これの利用がお勧め。リスクが少ないので。
     今回は、3面の環境を同居させている環境(ちょっと変な事をしている)なので、プラグインではうまく更新が出来ない(一部が更新されない)ので、上書きした。
    ・php8.*系に対応していない(dokuwiki 側が)場合のエラーは以下。

    [Tue Jan 24 16:57:37.602483 2023] [php:error] [pid 1604] [client 172.16.11.11:58467] PHP Fatal erro
    r: Array and string offset access syntax with curly braces is no longer supported in /var/www/html
    /dokuwiki1/inc/init.php on line 557

    ・現状で、ワーニングが結構記録される(Apahce のエラーLogに)が未調査(取り敢えず動いているので)

    PHP再インストール  20230829追記

    yum を使用してのアップデート時、エラーとなるようになったので、phpを再インストールした。
    (リポジトリが壊れた事が原因みたいだが、面倒なので再インストール)

    <ワーニングの内容>

    –> トランザクションの確認を実行しています。
    —> パッケージ libzip5.x86_64 0:1.9.2-3.el7.remi を 更新
    —> パッケージ libzip5.x86_64 0:1.10.1-1.el7.remi を アップデート
    —> パッケージ microcode_ctl.x86_64 2:2.1-73.15.el7_9 を 更新
    —> パッケージ microcode_ctl.x86_64 2:2.1-73.16.el7_9 を アップデート
    —> パッケージ php-pecl-zip.x86_64 0:1.21.1-1.el7.remi.8.2 を 更新
    —> パッケージ php-pecl-zip.x86_64 0:1.22.2-1.el7.remi.7.4 を アップデート
    –> 依存性の処理をしています: php(api) = 20190902-64 のパッケージ: php-pecl-zip-1.22.2-1.el7.remi.7.4.x86_64
    –> 依存性の処理をしています: php(zend-abi) = 20190902-64 のパッケージ: php-pecl-zip-1.22.2-1.el7.remi.7.4.x86_64
    –> 依存性解決を終了しました。
    エラー: パッケージ: php-pecl-zip-1.22.2-1.el7.remi.7.4.x86_64 (remi-php74)
    要求: php(api) = 20190902-64
    インストール: php-common-8.2.1-1.el7.remi.x86_64 (@remi-php82)
    php(api) = 20220829-64
    利用可能: php-common-5.4.16-48.el7.x86_64 (base)
    php(api) = 20100412-64
    利用可能: php-common-7.4.33-7.el7.remi.x86_64 (remi-php74)
    php(api) = 20190902-64
    利用可能: php-common-7.4.33-8.el7.remi.x86_64 (remi-php74)
    php(api) = 20190902-64
    エラー: パッケージ: php-pecl-zip-1.22.2-1.el7.remi.7.4.x86_64 (remi-php74)
    要求: php(zend-abi) = 20190902-64
    インストール: php-common-8.2.1-1.el7.remi.x86_64 (@remi-php82)
    php(zend-abi) = 20220829-64
    利用可能: php-common-5.4.16-48.el7.x86_64 (base)
    php(zend-abi) = 20100525-64
    利用可能: php-common-7.4.33-7.el7.remi.x86_64 (remi-php74)
    php(zend-abi) = 20190902-64
    利用可能: php-common-7.4.33-8.el7.remi.x86_64 (remi-php74)
    php(zend-abi) = 20190902-64
    問題を回避するために –skip-broken を用いることができます。
    これらを試行できます: rpm -Va –nofiles –nodigest

    <事前準備>

    cp -p php.ini php.ini-20230829

    cp -p -r www/ www www-20230829BK

    systemctl stop httpd

    <phpの再インストール>

    # yum list installed php*

    base: ftp-srv2.kddilabs.jp

    epel: mirror.earthlink.iq

    extras: ftp-srv2.kddilabs.jp

    remi-php74: fr2.rpmfind.net

    remi-safe: fr2.rpmfind.net

    updates: ftp-srv2.kddilabs.jp
    インストール済みパッケージ
    php.x86_64 8.2.1-1.el7.remi @remi-php82
    php-cli.x86_64 8.2.1-1.el7.remi @remi-php82
    php-common.x86_64 8.2.1-1.el7.remi @remi-php82
    php-mbstring.x86_64 8.2.1-1.el7.remi @remi-php82
    php-pecl-zip.x86_64 1.21.1-1.el7.remi.8.2 @remi-php82
    php-sodium.x86_64 8.2.1-1.el7.remi @remi-php82
    php-xml.x86_64 8.2.1-1.el7.remi @remi-php82

    # yum remove “php*”

    読み込んだプラグイン:fastestmirror
    Loading mirror speeds from cached hostfile

    読み込んだプラグイン:fastestmirror
    依存性の解決をしています
    –> トランザクションの確認を実行しています。
    —> パッケージ php.x86_64 0:8.2.1-1.el7.remi を 削除
    —> パッケージ php-cli.x86_64 0:8.2.1-1.el7.remi を 削除
    —> パッケージ php-common.x86_64 0:8.2.1-1.el7.remi を 削除
    —> パッケージ php-mbstring.x86_64 0:8.2.1-1.el7.remi を 削除
    —> パッケージ php-pecl-zip.x86_64 0:1.21.1-1.el7.remi.8.2 を 削除
    —> パッケージ php-sodium.x86_64 0:8.2.1-1.el7.remi を 削除
    —> パッケージ php-xml.x86_64 0:8.2.1-1.el7.remi を 削除
    –> 依存性解決を終了しました。

    依存性を解決しました

    ===================================================================================================
    Package アーキテクチャー

    バージョン リポジトリー 容量

    削除中:
    php x86_64 8.2.1-1.el7.remi @remi-php82 5.8 M
    php-cli x86_64 8.2.1-1.el7.remi @remi-php82 24 M
    php-common x86_64 8.2.1-1.el7.remi @remi-php82 16 M
    php-mbstring x86_64 8.2.1-1.el7.remi @remi-php82 2.3 M
    php-pecl-zip x86_64 1.21.1-1.el7.remi.8.2 @remi-php82 265 k
    php-sodium x86_64 8.2.1-1.el7.remi @remi-php82 228 k
    php-xml x86_64 8.2.1-1.el7.remi @remi-php82 875 k

    トランザクションの要約

    削除 7 パッケージ

    インストール容量: 50 M
    上記の処理を行います。よろしいでしょうか? [y/N]y
    Downloading packages:
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
    削除中 : php-8.2.1-1.el7.remi.x86_64 1/7
    削除中 : php-cli-8.2.1-1.el7.remi.x86_64 2/7
    削除中 : php-sodium-8.2.1-1.el7.remi.x86_64 3/7
    削除中 : php-xml-8.2.1-1.el7.remi.x86_64 4/7
    削除中 : php-pecl-zip-1.21.1-1.el7.remi.8.2.x86_64 5/7
    削除中 : php-mbstring-8.2.1-1.el7.remi.x86_64 6/7
    削除中 : php-common-8.2.1-1.el7.remi.x86_64 7/7
    検証中 : php-mbstring-8.2.1-1.el7.remi.x86_64 1/7
    検証中 : php-8.2.1-1.el7.remi.x86_64 2/7
    検証中 : php-pecl-zip-1.21.1-1.el7.remi.8.2.x86_64 3/7
    検証中 : php-xml-8.2.1-1.el7.remi.x86_64 4/7
    検証中 : php-sodium-8.2.1-1.el7.remi.x86_64 5/7
    検証中 : php-cli-8.2.1-1.el7.remi.x86_64 6/7
    検証中 : php-common-8.2.1-1.el7.remi.x86_64 7/7

    削除しました:
    php.x86_64 0:8.2.1-1.el7.remi php-cli.x86_64 0:8.2.1-1.el7.remi
    php-common.x86_64 0:8.2.1-1.el7.remi php-mbstring.x86_64 0:8.2.1-1.el7.remi
    php-pecl-zip.x86_64 0:1.21.1-1.el7.remi.8.2 php-sodium.x86_64 0:8.2.1-1.el7.remi
    php-xml.x86_64 0:8.2.1-1.el7.remi

    完了しました!

    ]# yum -y install –enablerepo=epel,remi,remi-php82 php php-cli php-common php-m bstring php-pecl-zip php-sodium php-xml
    読み込んだプラグイン:fastestmirror
    Loading mirror speeds from cached hostfile

    • base: ftp-srv2.kddilabs.jp
    • epel: mirror.earthlink.iq
    • extras: ftp-srv2.kddilabs.jp
    • remi: fr2.rpmfind.net
    • remi-php74: fr2.rpmfind.net
    • remi-php82: fr2.rpmfind.net
    • remi-safe: fr2.rpmfind.net
    • updates: ftp-srv2.kddilabs.jp
      remi | 3.0 kB 00:00:00
      remi-php82 | 3.0 kB 00:00:00
      (1/2): remi-php82/primary_db | 199 kB 00:00:00
      (2/2): remi/primary_db 25% [====== ] 0.0 B/s | 1.0 MB –:–:– ETA (2/2): remi/primary_db 60% [=============== ] 1.8 MB/s | 2.3 MB 00:00:00 ETA (2/2): remi/primary_db | 3.6 MB 00:00:01
      依存性の解決をしています
      –> トランザクションの確認を実行しています。
      —> パッケージ php.x86_64 0:8.2.9-2.el7.remi を インストール
      —> パッケージ php-cli.x86_64 0:8.2.9-2.el7.remi を インストール
      —> パッケージ php-common.x86_64 0:8.2.9-2.el7.remi を インストール
      —> パッケージ php-mbstring.x86_64 0:8.2.9-2.el7.remi を インストール
      —> パッケージ php-pecl-zip.x86_64 0:1.22.2-1.el7.remi.8.2 を インストール
      —> パッケージ php-sodium.x86_64 0:8.2.9-2.el7.remi を インストール
      —> パッケージ php-xml.x86_64 0:8.2.9-2.el7.remi を インストール
      –> 依存性解決を終了しました。

    依存性を解決しました

    ===================================================================================================
    Package アーキテクチャー

    バージョン リポジトリー 容量

    インストール中:
    php x86_64 8.2.9-2.el7.remi remi-php82 2.0 M
    php-cli x86_64 8.2.9-2.el7.remi remi-php82 6.1 M
    php-common x86_64 8.2.9-2.el7.remi remi-php82 1.2 M
    php-mbstring x86_64 8.2.9-2.el7.remi remi-php82 578 k
    php-pecl-zip x86_64 1.22.2-1.el7.remi.8.2 remi-php82 71 k
    php-sodium x86_64 8.2.9-2.el7.remi remi-php82 99 k
    php-xml x86_64 8.2.9-2.el7.remi remi-php82 246 k

    トランザクションの要約

    インストール 7 パッケージ

    総ダウンロード容量: 10 M
    インストール容量: 50 M
    Downloading packages:
    (1/7): php-8.2.9-2.el7.remi.x86_64.rpm | 2.0 MB 00:00:00
    (2/7): php-common-8.2.9-2.el7.remi.x86_64.rpm | 1.2 MB 00:00:00
    (4/7): php-mbstring-8.2.9-2.el7.re 42% [==========- ] 0.0 B/s | 4.4 MB –:–:– ETA (3/7): php-mbstring-8.2.9-2.el7.remi.x86_64.rpm | 578 kB 00:00:00
    (4/7): php-pecl-zip-1.22.2-1.el7.remi.8.2.x86_64.rpm | 71 kB 00:00:00
    (5/7): php-sodium-8.2.9-2.el7.remi.x86_64.rpm | 99 kB 00:00:00
    (6/7): php-xml-8.2.9-2.el7.remi.x86_64.rpm | 246 kB 00:00:00

    (7/7): php-cli-8.2.9-2.el7.remi.x8 73% [================== ] 4.3 MB/s | 7.6 MB 00:00:00 ETA (7/7): php-cli-8.2.9-2.el7.remi.x86_64.rpm | 6.1 MB 00:00:00

    合計 10 MB/s | 10 MB 00:00:00
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
    インストール中 : php-common-8.2.9-2.el7.remi.x86 [ ] 1/7 インストール中 : php-common-8.2.9-2.el7.remi.x86 [# ]

     省略


    検証中 : php-common-8.2.9-2.el7.remi.x86_64 1/7
    検証中 : php-sodium-8.2.9-2.el7.remi.x86_64 2/7
    検証中 : php-mbstring-8.2.9-2.el7.remi.x86_64 3/7
    検証中 : php-cli-8.2.9-2.el7.remi.x86_64 4/7
    検証中 : php-pecl-zip-1.22.2-1.el7.remi.8.2.x86_64 5/7
    検証中 : php-8.2.9-2.el7.remi.x86_64 6/7
    検証中 : php-xml-8.2.9-2.el7.remi.x86_64 7/7

    インストール:
    php.x86_64 0:8.2.9-2.el7.remi php-cli.x86_64 0:8.2.9-2.el7.remi
    php-common.x86_64 0:8.2.9-2.el7.remi php-mbstring.x86_64 0:8.2.9-2.el7.remi
    php-pecl-zip.x86_64 0:1.22.2-1.el7.remi.8.2 php-sodium.x86_64 0:8.2.9-2.el7.remi
    php-xml.x86_64 0:8.2.9-2.el7.remi

    完了しました!

    http を再起動して、動作を確認。OKなら、マシンを再起動して動作を確認。yum を実行してワーニングが消える事を確認して終了。

  • 新型コロナ(COVID-19)に感染した

    12月になって、新型コロナウイルス感染症(COVID-19)の陽性判定を受けたので療養した。健忘禄(備忘録が正しいがあえてこちら)として簡単にメモを残す。

    ・0日目 朝から咽がいがらっぽい。熱は平熱より若干高いが誤差の範囲。 36.6度
         夕方、37.6度 まで体温が上がる。簡易検査で自己検査。わずかに線が出る。
         この日より家庭内別居開始。

    上の方は検査失敗(Cのラインも出ていない)なめ方が不足したのかも(家人はちゃんと検査出来た)
    0日目:下側は唾液を検査薬と混ぜる方式。薄らとでは有るが陽性反応(Tのライン)が出ている

    ・1日目 朝、37.8度。かかり付けの病院へ電話。発熱外来として対応するとの事で、病院の外で検査/聞き取り等。インフルエンザと両方が判定出来る検査を実施。コロナ側が薄らと反応が出たとの事で、陽性判定。痰を切る薬と解熱剤(カロナール)を処方される。野外で1時間半以上待機するのがとっても苦痛だった。”車で来院しますか?”と聞かれた理由が解ったが既に遅し。
         夜、38.8度まで上がる。解熱剤を飲むと、37.6度まで下がる。

    ・2日目~5日目 37.4~38.8度の範囲で体温が頻繁に上がり下がりする。倦怠感有り。咽がいがらっぽい。仕事は療養扱い(特別休)を開始。会議等のみ、リモートで参加。
         家人は、濃厚接触者なので、自宅待機(出勤禁止になるらしい)。家庭内別居。タオル等も含め、完全に分けて生活。但し、マンションなので、水回りとか限界有り。

    5日目:薄いが陽性ラインがはっきり出ている

    ・6日目~9日目 36.6~37.8度の範囲で体温が頻繁に上がり下がりする。咽のいがらっぽいのは継続。倦怠感はほとんどなくなった。7日目の自己検査では薄ら陽性が出る。9日目は、36.6度を超える事が無くなった。この間、仕事は療養扱い(特別休)を継続。会議等のみ、リモートで参加を継続。
         家人は、出勤したが、ホテル泊で帰宅せず。完全別居で接触無し。

    ・10日目 熱は完全に平熱。自己検査も陰性。この日から、正式に仕事復帰。
          家人も職場で検査して陰性(医療承認された検査キットで)を確認した上で帰宅。

    10日目:陽性反応無しになった

    ワクチンは4回目まで接種で、5回目の案内が来た直後でした。ほぼ、在宅勤務で、外出する機会も無かったのですが、何処で罹患したんだろ?。時々、出社しているので、その時が一番疑われるのですが、今回、職場では他に罹患者が出ることはありませんでした。
    現在、咽のいがらっぽい(痰が絡む等)のは、完全に回復していませんが、ほぼ、元に戻っています。
    10日近く、家から出る事が無かったので、体力(足の筋肉とか)が落ちたのが一番の課題。この歳になると、元に戻らない。3,000歩も歩くと、足が痛い。じじいになったもんだ!。

    自宅療養者は、”MyHER-SYS”で自分で状況の入力を求められますが、これ、出来が・・・・・
    何でこんなにレベルが低い事がまかり通るのか。これが今回の一番のショックな出来事でした。ほんのちょっとの事だと思うのですが、なぜ出来ないんだろ?。保健所の方とか、現場の人の苦労が推察されます。

  • Kaizalaのサービスが終了になる 緊急時の連絡どうする?

    少し前(2022/8中)に、MS社からKaizalaのサービスが2023/8/31で終了する旨の発表が有りました。

    元々、将来的にTeamsへ統合する旨は発表されていたので、MS社としては既定の路線では有ります。なので、覚悟はしていましたが、正直、2025年頃まではサービスが継続されないかな?と期待していました。

    Kaizala(無償版)は、災害時を想定した緊急の連絡方法として、非常に使い勝手が良いサービスです。

     a)電話番号に紐付いたサービスで、アカウントの管理が簡易。緊急時に、端末の追加や代替え端末や要員での運用が容易(社用端末以外からの運用も容易)。急遽の端末追加(インストールも含め)や、情報共有先の追加が非常に簡単。

     b)余計な機能が無く、使い方がシンプル。且つ、LINEライクなUIなので、多くの人がすぐに操作可能。

     c)余計な通知やCM等が無いので、インストールしておいて邪魔にならない。

     d)MS社がサービスしており、災害時でもサービスが継続される可能性が高い。且つ、日本での普及率が低いので、非常時に高トラフィックになりずらい(と思われる)。

    要は、信頼出来るサービス元が運用している簡易な使い勝手のSNSです。

    代替えを探さないといけない(普通に考えると、Teamsへ移行ですが、これ、アカウントの運用が面倒)のですが、それらしいサービスが無いですね。困った!

    <2023/03/02 追記>

    色々調べたり、いくつか検証してみた結果 ”Telegram”を選択した。要件とした上記の4項目の内、”b)”、”c)”の2項目に少し不満が残るが下記に注意すればなんとかなりそうと判断。

     1)既に個人的に使用している人が居る事に考慮が必要。
     2)サービスとしては10億以上のユーザが利用中。ワールドワイドで検索される/接続される可能性が有り、セキュリティ設定に配慮が必要。
     3)日本語版が無い(正確には、正式サポートで無い)。
     4)ビデオチャットの機能が無い。
     5)機能が多い。シンプルでないので、取っ付きが悪い。<-想定メンバに日常SNSを使用していない(LINEですら未使用)が居るのでちょっと課題。
     6)一定期間(デフォは6ヶ月)の利用が無いとアカウントが削除される。
     7)短期間にアカウントの削除とかAPPのインストール->アンインストールを繰り返すと、ロックされる。<-検証等で短期間にインストールを繰り返すとかの場合、注意が必要。
     8)OS(iOS、Android、Windows etc)により、結構UIが異なる。

    最近、話題の秘匿性が高い(シークレットチャット等)事は今回のポイントにならない。

    普段使用で無いので、”6)”は注意が必要なポイント。ちなみに、最近のスマホ(iOS以外でも)は、長期間未使用のアプリを停止とか削除する機能が有るので、考慮しておく必要が有る。(年3回とか定期的に非常通信の訓練を実施すれば良いが)

    複数の端末に導入して1ヶ月ほど様子を見ているが、今の所、外部からの検索とかスパムを受けるとかは無い。セキュリティ設定は端末別に3パターンほど実施しているが、一番緩い設定でも問題が無さそうとの感触。

  • パスワードを平文で保持するのが当たり前の文化

    先日、今だに(2022年の暮れが近い時期に)これが普通なんだと驚いたのでメモで残す。

     ※:以下の記述は、誹謗中傷とかの意図は全く有りません。誤解されませんようにお願い致します。

    知人から、ある医療系の全国組織(日本****会(医師会では有りませんが近い組織))の会員専用サイトで、パスワードが解らなくなったので何とかしてくれと頼まれました。又かよ!と文句を言いながら(10年近く前に同じ事を頼まれた)、サイトへアクセスして、パスワードの再発行の手続きを代行したのですが、”パスワードの再発行は後日郵送します” となり、すぐには出来ませんでした。

    ここまでは、公共系とかで時々有るので、又かよ(実は、前回も郵送で届いた)と思いながら郵便が届いたら又連絡してで一旦戻しました(もう一回うまいタダ酒が飲める(高給取りが奢ってくれる店なので)と喜んだのは内緒)。驚いたのは、その郵便が届いたとの事で見せてもらったら、”登録して有ったパスワードが再発行パスワードとしてそのまま記載” されていた事です。てっきり、臨時パスワード(一時パスワード)が届き、それでログインしてパスワードを変更するのだと思っていたので。

    前回の時も同じ対応だったのですが、その当時は、今ほどパスワードの管理を強く求められる風潮は無く、”まあこんなもんか。全く、何処の業者がやってんだ。リテラシーが低いな!”ぐらいにしか思いませんでした。しかし、今回は、このご時世にまだパスワードをハッシュ化せずに保持しているのか?とちょっとびっくりでした。医療系という個人情報に敏感で有るべき組織で・・・。

    パスワードを忘れた人へ、元のパスワードを教える為に平文で保持しているのは良く有る事ですが、今時どうなんだろ?(今回の組織もそうなのかも?)。

    私としては、シビアな情報を扱うサイトでID+パスワードでのユーザ管理は崩壊していると思っています。特に、ブルートフォース対策とか取られていない場合は(今回のサイトも対策はされていないと思われる応答だった)、危険だと思っています。顧客から要求されても、絶対にやらないんですが・・(もうそんな機会も無いけど)。

  • これから子育てをする方に 見える学力見えない学力

    大昔に読んだ本で、「見える学力 見えない学力」 という本が有ります。文庫本で出版されており、著者も決して有名ではない人(失礼ですが、小学校の教諭をされていた岸本さん)なので、ご存じ無い方の方が多いかも知れません。

    最近、ふと思う事が有って検索して見ましたら、改版を繰り返しながら販売しているんですね。

    見える学力、見えない学力 | 岸本 裕史 |本 | 通販 | Amazon

    残念ながら、岸本先生は2006年に亡くなられていますが、陰山先生で有名になった「100ます計算」を始めた方です。

    小さなお子さんをお持ちの方にはとってもお勧めですが、新人の採用や教育に関わる人は是非一読される事をお勧めいたします。

  • Web2.0の時を思い出した

    昔、Web2.0と言う言葉が流行った時が有りますが、今は、Web3って言うんですね。あんまり興味が無かったので、よく知らなかったのですが、最近、

    https://kabumatome.doorblog.jp/archives/65997669.html

    の記事を見て、昔を思い出しました。

    Web2.0が流行った時、私には、何が新しいパラダイムなのか理解が出来なかったのです。これは、Web2.0を構成していると宣伝されている内容が、個々には、全て昔から(何年も前から)有る物で、技術的にみた場合、新しい概念とか考え方が含まれていなかったからです。

    有る時、知り合いの人(業界では結構有名な方で、雑誌に連載も持っておられた人)と食事をさせて頂いた時、”XXさんWeb2.0はマーケティング用語ですよ。営業用の言葉ですよ。”と言われ、妙に納得させられた事を思い出しました。

    私は、それから、いわゆる3文字熟語とかを多用し、さも、時代の先端を行っているような事を言う人を信用しなくなった(裏を読もうとするようになった)のですが。この辺、宗教的な事とも似たような所が有りますね。(ちなみに、”宗教は信用しても良いが宗教家は信用してはならない”っていう言葉(有る、著名な宗教家の著書の中の言葉)を読んだのは学生時代ですが、社会人になって、何度か役にたちました)

    全部読んだ訳では有りませんが、この本、出だしからちょっとと言う感じですね。意図的なのかも知れませんが、にしてもちょっと・・・

    2022/7/26 追記

    書籍は回収になったみたい。当然と言えば当然ですが、なぜ、事前にチェック出来なかったのだろう?。インプレスって、そんないい加減な会社じゃ無かった印象が有るけど・・・。筆者の肩書きで信用したってことかしら?

    https://book.impress.co.jp/info/20220725.html

  • 秘密情報の保護ハンドブックが更新

    秘密情報の保護ハンドブックが2022/5/17時点で更新されていた。ちょっとページ数が多いですが、一読の価値が有ります。

    https://www.meti.go.jp/shingikai/sankoshin/chiteki_zaisan/fusei_kyoso/pdf/20220517_3.pdf

  • Windows環境内でのバックアップ

    Windows環境下で、内部的にバックアップを取得(ファイル共有でマウントしている場合でも利用可能)する方法として、古くから実績が有る robocopy の使用方法メモ。MS社純正のコマンドで、差分取得が可能。

    使用例として標準的なのは以下のパターン。

    robocopy c:\元DIR e:\先DIR /MIR /R:1 /W:1 /LOG+:c:\ログの出力先DIR\bakuplog.txt /NP /NDL /FFT /DCOPY:T /SEC

    上記で指定しているオブションの概要は以下。(オブションは非常に多いので、詳細を知りたい場合はマニュアルを確認する事。指定を大文字としているのは、旧来からの慣習を踏襲している為で、最新のルールに従うなら小文字とする事)

    /MIR   指定ディレクトリのミラー化(なので、元のファイルが削除されるとCopy先も削除される)

    /R:1   失敗したコピーの再試行回数(デフォは100万回と非常に多い)

    /W:1   再試行までの待ち時間(秒)(デフォは30秒)

    /LOG+:  状態の出力を追記モードで出力する

    /NP    コピー操作の進行状況表示の抑止

    /NDL   ディレクトリ名のログ出力を抑止

    /FFT   FATファイル時間(2秒の精度)を想定

    /DCOPY:T ディレクトリのコピー対象を”タイムスタンプ”で指定(デフォはDA(データと属性))

    /SEC    セキュリティと共にファイルをコピーする(/COPY:DAT と同じ意味)※1

     ※1:最新のMS社マニュアルでは”/SEC”のオブションの機能についての独立した説明が無い。有効に機能しているが、使用をしない方が良いかも?。

    使用時には、バッチファイル等を作成して起動する事が望ましい。指定を間違うとファイルを壊すリスクが有るので。自動実行する場合も、バッチファイル等としておくと便利。

  • SSL証明書に関するメモ-お勉強編

    本HPで使用しているSSL証明書は、Let’s Encryptの発行する物を使用している。これの証明書Keyサイズは256Bit。何処かのドキュメントには2048Bit以上を推奨とかの記載が有るので、少し勉強してみた。

    現在の証明書は以下。

     署名アルゴリズム     sha256RSA     <-鍵交換とかの指定

     署名ハッシュアルゴリズム sha256       <-証明書でのハッシュ関数

     公開キー ECC(256 Bits)    <-ECCは256Bits以上を推奨

     公開キーのパラメーター ECDH_P256     <-ECDHE 256Bits以上 RSA 2048Bits以上

    朝日新聞社とかと一緒。Google社とかは、公開キーがRSA(2048Bits)で異なる。

    現状の状況でセキュリティとかの問題は無い(推奨される状況をクリアしている)事が確認出来たので、このままとする事とした。

    <参考メモ>

     CAの署名アルゴリズムと鍵長の推奨(必須としてクリアすべき)は以下。

     ・ECDSAとSHA-256の組み合せで鍵長256Bits以上    <-本HPはこちら

     ・RSA署名とSHA-256の組み合わせで鍵長2048Bits以上

     参考となるページのリンク

    https://it-tech-note.com/ssl-tls/

    <2023/1/20 追記 参考情報>

    暗号移行の記事が有った。3年以内とかには対応が必要となるみたい。多分、その頃までこのサイトは維持していないと思うが、知識としてはウオッチしておきたい。

    https://qiita.com/lemiyachi/items/c20a18b172c6f192a262

  • Informixでログを監視する

    Informixのログ(通常はonline.log)には、エラーが出力されますが、これをエラーレベルでアラートを出すとかが出来ます。以下はサンプル!。

    !!表示がおかしい! 一部の文字が正しく記述されていない。 いずれ、直します。取り敢えずイメージは伝わるかと。

    概要仕様は以下

    Informixのイベントアラーム通知機能を利用して、以下の機能を実現する。

    1)スクリプトの先頭(又は、iniファイル等で)で、以下の項目を指定可能な事。

     a)出力先ファイル名(含むディレクトリ) なお、出力先は、最大2カ所指定可能とし、いずれも追記で出力する
     b)出力対象アラームの重要度(1~5で指定し、指定した重要度以上を対象とする)

      1:注意不要レベル

      2:通知レベル

      3:注意レベル(デフォルト設定)

      4:緊急レベル

      5:致命的レベル


     c)出力ファイルフォーマット(1行で出力するか、複数行で出力するかの指定)
     d)出力項目レベル指定(1~5、9(全て)で指定し、指定した項目以内を対象とする)
     ①年月日時分秒 + 重要度
     ②イベントクラスID
     ③クラスメッセージ
     ④固有のメッセージ
     ⑤関連項目パス

     例:”3”を指定したら、①~③までを出力

     e)MSGガイダンス出力の有無指定(0:出力しない  1:出力する)

     ①重要度Severity :
     ②イベントクラスIDClass ID :
     ③クラスメッセージClass msg :
     ④固有のメッセージSpecific msg :
     ⑤関連項目パスSee Also :

     なお、年月日時分秒についてはガイダンスは出力しない。

     f)MSGのKeyガイダンスの指定(”IDS Err MSG:”等先頭に出力可能にする)

     g)上記”f)”の出力有無指定(0:出力しない  1:出力する)

    2)クラスMSGまでの出力は、固定長で有ること

    3)文字コードは、全て、半角英数字とし、コードセットの影響を受けない形とする。

    4)exit_status への変数を設定すること

    ※:以下のサンプルコードはそのままでは動きません。一部の文字がおかしい&表示されていない等がある。

    #!/bin/sh
    #========================================================
    # Informix Alarmprogram
    #========================================================

    OUTPUT_FILE_1=/tmp/log1.log
    OUTPUT_FILE_2=/usr/informix94/online.log
    OUTPUT_FORMAT=1 # 1:single-line 2:multi-line
    OUTPUT_SEVERITY=1 # 1-5
    OUTPUT_LEVEL=5 # 1-5,9
    OUTPUT_GUIDANCE=1 # 0-1
    OUTPUT_KEY_GUIDANCE_TEXT=
    OUTPUT_KEY_GUIDANCE=0 # 0-1
    OUTPUT_DATE=date '+%Y/%m/%d %H:%M:%S'

    EVENT_SEVERITY=$1
    EVENT_CLASS=$2
    EVENT_MSG=”$3″
    EVENT_ADD_TEXT=”$4″
    EVENT_FILE=”$5″

    cd dirname $0
    EXIT_STATUS=0

    #=======================================================
    # Output File Check
    #—————————————————————————–
    # Argument
    # file_name
    # Return
    # 0 : OK
    # 1 : NG
    #=======================================================
    file_chkeck() {

    if [ -f $1 ] ; then
        if [ ! -w $1 ] ; then
            echo "ERROR: \"$1\" not writable."
            return 1
        fi
    else
        touch $1 > /dev/null 2>&1
        if [ $? -ne 0 ] ; then
            echo "ERROR: \"$1\" cannot create."
            return 1
        fi
    fi
    
    return 0

    }

    if [ “$OUTPUT_FORMAT” = “” ] \
    || ([ $OUTPUT_FORMAT -lt 1 ] || [ $OUTPUT_FORMAT -gt 2 ]) ; then
    echo “ERROR: syntax error OUTPUT_FORMAT=$OUTPUT_FORMAT”
    exit 1
    fi

    if [ “$OUTPUT_SEVERITY” = “” ] \
    || ([ $OUTPUT_SEVERITY -lt 1 ] || [ $OUTPUT_SEVERITY -gt 5 ]) ; then
    echo “ERROR: syntax error OUTPUT_SEVERITY=$OUTPUT_SEVERITY”
    exit 1
    fi

    if [ “$OUTPUT_LEVEL” = “” ] \
    || (([ $OUTPUT_LEVEL -lt 1 ] || [ $OUTPUT_LEVEL -gt 5 ]) && [ $OUTPUT_LEVEL -ne 9 ]) ; then
    echo “ERROR: syntax error OUTPUT_LEVEL=$OUTPUT_LEVEL”
    exit 1
    fi

    if ([ “$OUTPUT_GUIDANCE” != “0” ] && [ “$OUTPUT_GUIDANCE” != “1” ]) ; then
    echo “ERROR: syntax error OUTPUT_GUIDANCE=$OUTPUT_GUIDANCE”
    exit 1
    fi

    if ([ “$OUTPUT_KEY_GUIDANCE” != “0” ] && [ “$OUTPUT_KEY_GUIDANCE” != “1” ]) ; then
    echo “ERROR: syntax error OUTPUT_KEY_GUIDANCE=$OUTPUT_KEY_GUIDANCE”
    exit 1
    fi

    if [ “$OUTPUT_FILE_1” != “” ] ; then
    file_chkeck $OUTPUT_FILE_1
    if [ $? -ne 0 ] ; then
    EXIT_STATUS=1
    OUTPUT_FILE_1=
    fi
    fi

    if [ “$OUTPUT_FILE_2” != “” ] ; then
    file_chkeck $OUTPUT_FILE_2
    if [ $? -ne 0 ] ; then
    EXIT_STATUS=1
    OUTPUT_FILE_2=
    fi
    fi

    if [ “$OUTPUT_FILE_1” = “” ] && [ “$OUTPUT_FILE_2” = “” ] ; then
    exit $EXIT_STATUS
    fi

    # Severity Check
    if [ $# -lt 1 ] || [ $EVENT_SEVERITY -lt $OUTPUT_SEVERITY ] ; then
    exit $EXIT_STATUS
    fi

    for OUTPUT_FILE in $OUTPUT_FILE_1 $OUTPUT_FILE_2
    do
    if [ $OUTPUT_KEY_GUIDANCE -eq 1 ] ; then
    echo “${OUTPUT_KEY_GUIDANCE_TEXT}\c” >> $OUTPUT_FILE
    fi

    echo "${OUTPUT_DATE} \c" >> $OUTPUT_FILE
    if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
        echo "Severity:\c" >> $OUTPUT_FILE
    fi
    echo "$OUTPUT_SEVERITY" | awk '{ printf("%2s", $1)}' >> $OUTPUT_FILE
    
    if [ $OUTPUT_LEVEL -ge 2 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Class ID:\c" >> $OUTPUT_FILE
        fi
        echo "$EVENT_CLASS" | awk '{ printf("%3s", $1)}' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 3 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Class msg:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_MSG}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 4 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "Specific msg:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_ADD_TEXT}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    if [ $OUTPUT_LEVEL -ge 5 ] ; then
        if [ $OUTPUT_FORMAT -eq 1 ] ; then
            echo " \c" >> $OUTPUT_FILE
        else
            echo "" >> $OUTPUT_FILE
        fi
    
        if [ $OUTPUT_GUIDANCE -eq 1 ] ; then
            echo "See Also:\c" >> $OUTPUT_FILE
        fi
        echo "${EVENT_FILE}" | awk '{ printf "%s", $0 }' >> $OUTPUT_FILE
    fi
    
    echo "" >> $OUTPUT_FILE

    done