2022/05/14(土)debianをbuster(10.x)→bullseye(11.x)にアップグレード(zabbixネタ多し)

2022/05/14 17:49
自宅のdebianをbuster(10.x)からbullseye(11.x)にアップグレードした。

その際のメモ。
zabbix関連の対応が中心。

基本手順

第4章 Debian 10 (buster) からのアップグレード
基本的には公式手順に従う。
#apt update
#apt upgrade --without-new-pkgs
#apt full-upgrade
#apt autoremove
いつも通りsudoは適宜補完で。

システム再起動

システム再起動をかけておく。
カーネル自作の頃はここで結構トラブル起きていたが、今回は何も無し。

ログ周り諸々チェックして特に問題なさそう。

Rubyライブラリインストール

Rubyのバージョンが2.7に上がったのでgemでサービス運用に必要なライブラリを入れ直しておく。
twitterとhttpclientの2つ。
#gem install twitter httpclient
パッケージで入れてるサービスのPHPやPerlライブラリはdebianのパッケージに任せてて、
Rubyのライブラリは未だにgem管理というのはなんだかへんてこな感じがする……

が、自作サービスなのでAPTで依存性判断させるのめんどくさいし、
bundler管理するまでもないし今のところこの手順忘れなければいいかな。

sources.list更新

# apt-get update
すると、
無視:3 http://security.debian.org stable/updates InRelease
エラー:4 http://security.debian.org stable/updates Release
  404  Not Found [IP: 151.101.230.132 80]
E: リポジトリ http://security.debian.org stable/updates Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
と出る。
security.debian.orgのパスが変わったっぽいので対応しておく。
これはupgradeと無関係に直しておくべきもの。
# diff sources.list.20220512 sources.list
14,15c14,15
< deb http://security.debian.org/ stable/updates main contrib non-free
< deb-src http://security.debian.org/ stable/updates main contrib non-free
---
> deb http://security.debian.org/ stable-security/updates main contrib non-free
> deb-src http://security.debian.org/ stable-security/updates main contrib non-free
公式だとstable-securityじゃなくbuster-securityを推奨しているようだが、横着したいのでstable-securityで。
apt-get updateしてエラーの解消を確認。

[参考]
security.debian.org 'does not have a Release file' on with Debian Docker images - Server Fault

zabbix4→5関連

毎度zabbix関係に手間がかかる感じ。
色々でていたのでこの際まとめてきれいにする。

databaseアップグレードに失敗する

zabbixにアクセスすると下記表示。
The Zabbix database version does not match current requirements. Your database version: 4030046. Required version: 5000000. Please contact your system administrator.
/var/log/zabbix-server/zabbix_server.log
上では、起動時の
starting automatic database upgrade
の途中(93%くらい)で、
 17096:20220513:102638.403 completed 92% of database upgrade
 17096:20220513:102638.548 completed 93% of database upgrade
 17096:20220513:102638.762 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `hosts` add `discover` integer default '0' not null]
 17096:20220513:102638.763 database upgrade failed
 17207:20220513:102809.948 Starting Zabbix Server. Zabbix 5.0.8 (revision d3c78f993a).
とでてくる。

列が追加できないらしい。
mysql上でzabbix DBにつないでhostsテーブルのフォーマットを変えていく。
MariaDB [zabbix]> alter table hosts row_format=dynamic;
media_typeテーブルも同様。直す。
 16412:20220513:101210.637 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `media_type` add `event_menu_name` varchar(255) default '' not null]
MariaDB [zabbix]> alter table media_type row_format=dynamic;
zabbixを再起動すると、database upgradeは成功してzabbixの画面は開くようになった。

なお、
innodb_strict_mode = 0
で対応する説があるが、これはNG(データロスするか、実際にデータいじってるときにエラーが出るか)の認識。

[参考]
CentOS7で動いているZabbix4.0をZabbix5.0にアップグレードしてついでにNginxで動かす - 気まぐれ

エラーを消す

まだ、/var/log/zabbix-server/zabbix_server.logにここらへんの警告が出るので消していく。
 17207:20220513:102810.696 Zabbix supports only "utf8_bin" collation. Database "zabbix" has default collation "utf8_general_ci"
 17207:20220513:102810.723 character set name or collation name that is not supported by Zabbix found in 421 column(s) of database "zabbix"
 17207:20220513:102810.723 only character set "utf8" and collation "utf8_bin" should be used in database
 17207:20220513:102810.759 database is not upgraded to use double precision values
各tableのcollate直す。
正式手順は、
2 Repairing Zabbix database character set and collation
のようだけど、面倒であれば下記流しても良さそうだった。
MariaDB [zabbix]> ALTER TABLE acknowledges CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE actions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE alerts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_template CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog_details CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE conditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config_autoreg_tls CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_group CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagpair CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagvalue CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE correlation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dbversion CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dchecks CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dhosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE drules CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dservices CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE escalations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_recovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_suppress CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE events CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE expressions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE functions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalvars CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_theme CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_str CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_text CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_inventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hostmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_templates CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE housekeeper CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hstgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstepitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptestitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_map CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_mapping CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE ids CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE images CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_snmp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_preproc CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_rtdata CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items_applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_macro_path CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opdiscover CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_ophistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opperiod CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opseverity CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opstatus CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optrends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenance_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_windows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE mappings CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_message CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_param CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE module CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_hst CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opconditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE operations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opgroup CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_usr CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE profiles CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_dhistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE regexps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE rights CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE scripts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE service_alarms CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_times CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sessions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slides CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_trigger CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_shape CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_elements CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_link_triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE tag_filter CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_acknowledge CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_check_now CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_close_problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE timeperiods CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_depends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE valuemaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
DBのdefault collate直す。
MariaDB [(none)]> ALTER DATABASE zabbix DEFAULT COLLATE utf8_bin;
倍精度周りのdefault値直す。
MariaDB [zabbix]> ALTER TABLE trends
	MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
MariaDB [zabbix]> ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
SQLはここに掲載されている。
https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql

大体↓に書いてある! ありがたい。
[参考]
Zabbix5.0にアップデートした後にでるトラブルの対処法

PHP関連オプション

zabbixの画面に下記4つ警告が出ているので直す。
PHPの"post_max_size"オプション	8M	PHPのpostサイズの最小値は16Mです("post_max_size"設定オプション)。
PHPの"max_execution_time"オプション	30	PHPスクリプトの実行時間の最小値は300です ("max_execution_time"設定オプション)。
PHPの"max_input_time"オプション	60	PHPスクリプトの入力パース時間の最小値は300です("max_input_time"設定オプション)。
PHPの"date.timezone"オプション	不明	PHPのタイムゾーンが設定されていません ("date.timezone"設定パラメータ)。

/etc/apache2/sites-enabled/zabbix.conf
の、
<Directory "/usr/share/zabbix">
内に下記追記。
# diff zabbix.conf.20220513 zabbix.conf
11a12,15
>     php_value post_max_size 16M
>     php_value max_execution_time 300
>     php_value max_input_time 300
>     php_value date.timezone Asia/Tokyo
とりあえずこれできれいになった。
アップグレード終わり!

2022/02/12(土)春M(SpringM)で「0による浮動小数点数除算」

2022/02/12 25:22 PC(全般)
春M(SpringM)で特定のファイルに対して以下の操作をした時に、「0による浮動小数点数除算」とダイアログが出ることがある。
[対象操作]
・ファイル削除
・コンテキストメニュー呼び出し

一度ダイアログが出てしまうと、プロセスがファイルハンドルを掴みっぱなしになってしまうようで、
SpringMのプロセスを削除するまでそのファイルは操作ができない。

うかつに操作しに行くと、そのプロセスがハングすることもある。

発生するファイルの条件を調べたところ、字幕付きのmp4ファイルで何らかの理由で字幕streamがデータ無しになっている場合に発生するようだ。

ffprobeで調べるとこんな感じ。
$ ffprobe.exe -select_streams s -show_streams -loglevel error "***.mp4"

[STREAM]
index=2
codec_name=mov_text
codec_long_name=MOV text
profile=unknown
codec_type=subtitle
codec_time_base=0/1
codec_tag_string=tx3g
codec_tag=0x67337874
width=704
height=396
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000000
start_pts=0
start_time=0.000000
duration_ts=0
duration=0.000000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A

~ 省略 ~
[/STREAM]
これで、duration_ts=0になっているファイルが発生条件ぽい。
字幕でなくてもvideoやaudioがduration_ts=0の場合もおそらく発生すると思われる(そのようなファイルが手元にないので未検証)。

とりあえず、オリジナルのmp4を破壊してよいのであればdurationが0のストリームを破棄してやれば良いようだ。
上記の場合はvideoとaudio残して、字幕だけ削るので、
$ ffmpeg.exe -i input.mp4 -c:v copy -c:a copy output.mp4
とか。

どのストリームを残すかはソース次第で。

このファイルは問題なく操作できた。

Delphiは外部DLL呼び出しの例外に対してセンシティブだというのは聞いたことがある気がするので、
それが関係しているかもしれない。

2021/12/31(金)Windowsのウィンドウ再配置問題を切替器で打開する

2021/12/31 16:47 PC(全般)

概要

よく知られている問題として、Windowsにはウィンドウの再配置問題がある。

HDMI・DisplayPortでモニタを接続している際に、モニタの電源を切ったりケーブルの挿抜を行うとOS側がこれを検知する。
この時、マルチディスプレイ(拡張)で使用している場合は、接続が生きている側のモニタにウィンドウが再配置されてしまう。

この問題を切替器で解決したので下記にあらましを記載する。

問題の内容

上でケーブルの挿抜と書いたが、物理的なスイッチ(あるいは相当)を行う切替器でも発生する。
ソース1,2とモニタを繋げている切替器で、ソース1&モニタ→ソース2&モニタと切り替えた場合ソース1側では挿抜検知となる。

この問題PnPの仕様としてはごく自然だが、日常的にはこの仕様が邪魔になることが多い。

初めてモニタを繋いだ時・構成を変えた時には有用だが、接続モニタの切り替えや電源OFFを日常的に行う運用をする場合はかなり煩わしいことになる。

特に、資料閲覧や動画視聴などいずれかのディスプレイのウィンドウ配置を決めて使用しているユーザにとってはかなり痛い。
こういった用途の場合、左右のディスプレイの解像度や縦横配置を揃えていない場合も多く、再配置によるウィンドウの乱れ方が大きい。

OS側

Windowsには現状この問題の挙動を変える方法が存在していない認識。
WindowsのInside Previewにこの問題のパッチが来ているという話があるが、完全な機能ではないと言われている。リリース時期も(リリースされるかも)不明。

PersistentWindows, MonitorKeeperなどウィンドウの位置を記憶・復帰するツールは多数あるが、アプリケーションごとの仕様・使い方・権限などの違いにより完璧な動作は難しい。
ヒューリスティック的な挙動にならざるを得ない。

モニタ側

さて、この問題はOS側以外にモニタ・ドライバの作りや設定によって挙動がある程度変わる。

モニタでは、EIZOのモニタはこの問題に対応するためにCompatible Modeというモードを備えている。
EIZO以外に明示的にこの機能を謳っているモニタは発見できていない。

この設定を変えるとモニタの電源を切った際にモニタ側が切断信号をOS側に送らなくなる。
電源を切るケースについてはモニタを選ぶことで対応可能である(EV2495で確認)。

ただし、EIZOはこういったOSDの機能では優秀なものの、パネル周りはピンキリで価格も割高。
EV2495についてもオレンジや水色でかなり不快な縦線が見えるパネルが使用されていたりする(EV2456から継続している問題なので、EV2456 縦縞などで検索するとサンプルがでてくる)。

モニタの選択肢があまりに少ないのは辛いので、できればモニタに依存しない対応方法にしたい。

グラボ側

グラフィックボード(おそらくドライバの作り)も影響するようだ。

私の場合、今年の8月にRadeon HD6450からRyzen 5700Gの内蔵GPUに変更した。
同じRadeon系列であるにも関わらず、HD6450では発生しなかった再配置問題が5700Gだと発生するように。
しかもHDMI・DisplayPort問わず発生する。

体験する前までこの問題はDisplayPort限定と認識していたため、かなり想定外だった。

実質同一チップメーカーでも発生するしないがある上、グラボの機能として有無を探すのがすごく難しい。

グラボでなんとかするのもつらそうなので、グラボに依存しない対応方法にしたい。

課題と制約

あわせて、モニタの接続周りでいくつか課題を抱えていたのでそれもいっぺんに解決してしまいたい。

・ゲーム機をつなぎたいがモニタ側にHDMI端子が足りない
・モニタ側の接続切り替え操作が機種によっては操作しづらいので簡単に操作できるようにしたい。最近のモニタではボタンが背面にあるものすらある。
・リモートワークをする機会が多く、私用PCと業務PC(ノート)をいずれもモニタに繋ぐ。素早く切り替えられるようにしたい。

構成的な制約は以下の通り。

・モニタは2枚(Display1~2)。一旦ともにWUXGA横配置とする。機種・解像度・縦横配置は自由に変更可能にしたい。

・PC1(私用PC)。2枚のディスプレイにつなぎ、メイン・拡張で使用。絶対に再配置されたくない。ほぼサーバなので恒常的に起動状態。

・PC2(業務PC)。ノート。2枚のディスプレイにつなぎ、メイン・拡張で使用。本体モニタは使用しない。業務時間中は再配置されたくない。業務が終われば電源OFF・ケーブル取り外しで、業務開始時に再配置されるのは特に問題ない。

・Switch。Switchにこだわらずゲーム機など、モニタ1枚を使用するHDMI機器を最大2台くらい繋げられると理想。

つまりソースが5~6本、シンクが2本。これを上手く接続したい。

対応手段

課題を整理すると、PCとモニタの間になにか問題を解決するための仲介役が必須になるようだ。

EDID保持・固定などで調べるといくつか製品が見つかる。

大まかに2系統あるようだ。

・アダプタ(ドングル):HDMI->HDMIかDP->DP。HDMIのソース側の電源で動く。
アダプタの機能として、モニタ側の電源OFFをソース側に伝えない。モニタのEDIDを学習してそれをソース側に伝える、もしくは設定した固定EDIDをソース側に伝える。製品ごとの固定EDIDを持つものも(この場合、モニタの解像度ごとにアダプタが必要)。
amazonで売っている製品名不明のものや、同人ハードのDPHPDMAなど。

・切替器:HDMIのものが多くDPのものは少なかったり高かったり。外部電源が必要。
切替器の機能として、モニタ側の電源OFFをソース側に伝えない。モニタのEDIDを学習してそれをソース側に伝える、もしくは設定した固定EDIDをソース側に伝える。
TESmartの切替器など。

これを組み合わせて問題を何とかする。

実構成

いろいろ考えた挙げ句、TESmartの切替器を軸に以下の構成に落ち着いた。

 +----------+             +----------+
 | Display1 |             | Display2 |
 +----+-----+             +----+-----+
      |                        |
      +-------+           +----+
              |           |
         +----+-----------+---+          +----------+
         |  OUT1        OUT2  |          |          |
         |                    |          |      +---+------------+
         |  TESmart           |          |      |  OUT1          |
         |   TES-HMA0402A1U   |          |      |                |
         |                    |          |      |  SANWA SUPPLY  |
         | IN1  IN2  IN3  IN4 |          |      |   SW-HD31ML    |
         +--+----+----+----+--+          |      |                |
            |    |    |    |             |      | IN1  IN2  IN3  |
   +--------+    |    |    +-------------+      +--+----+--------+
   |             |    +-+                          |    |
   |    +--------+--+   |                          |    +--------+
   |    | BENFEI    |   |                          |             |
   |    |  DP->HDMI |   |    +------------+    +---+--------+    |
   |    +---+-------+   |    | Plugable   +----+ PCduoduo   |    |
   |        |           |    |  UGA-4KDP  | DP |  DP->HDMI  |    |
   |        |DP         |    +-+----------+    +------------+    |
   |        |           |      | USB                             |
+--+--------+---+    +--+------+-----+                           |
| HDMI     DP   |    | HDMI   USB    |                      +----+-----+
|               |    |               |                      | Nintendo |
|      PC1      |    |  PC2(Laptop)  |                      |  Switch  |
|               |    |               |                      +----------+
+---------------+    +---------------+

以下に、接続している機器についての詳細を記載する。

TESmart TES-HMA0402A1U
4入力2出力のHDMI切替器。切替器の電源が生きている間は切断信号をソース側に伝達しない。OUTにつないだモニタ側のEDIDを記憶し、IN側によしなに流してくれるようだ。細かい挙動を突き詰めていないが不満に感じるポイントがない。切り替えはモニタ側でやるより早いケースが多いと思う。物理ボタンはOUTに対してIN1~4をローテーションで切り替えるボタンが2つ(OUT1, OUT2用)。物理ボタンだと一発で指定ソースを選べないが、リモコンが付属しておりそちらではソースを直接指定できる。6入力だったら最高だった。現状のゲーム機器等のコネクタを考えるとDPではなくHDMI切替器である必要がある。

BENFEI DP->HDMIアダプタ
amazonで売っている安売りのDisplayPort→HDMI変換アダプタ。製品名不明で、別ブランドから同じ形のものがたくさん出ている。かなりの曲者で、3台入手したうち2台はPlugable UGA-4KDPからの変換に使うとNo Monitor 640x480固定になってしまう(EDIDが取れない?)。インピーダンスがばらついてるとか、チップが変わったとかそういうもののような気がする。PC1のDisplayPortにつなぐ分にはいずれも問題なかった。
この手の変換アダプタは国内サプライメーカーで販売しているものも中身同じだったりして、金を出せば失敗しないかというとなんとも言えないのが辛い。

Plugable UGA-4kDP
もともとモニタに空いているポートがDisplayPortしかなかったのでこれを使用していた。新構成でも流用。

DisplayLinkのチップを使用しており、挙動はやや怪しい(たまに止まる)。
DisplayLinkは製品の質でユーザからの不満が多い印象もあるが、現状USB単独でモニタを増やせる機器(チップ)自体があまり選択肢がない。その中ではPnPでドライバが入るのでDisplayLinkの信用度はけっこうある。

PCduoduo DP->HDMIアダプタ
amazonで売っている安売りのDisplayPort→HDMI変換アダプタ。製品名不明で、別ブランドから同じ形のものがいくつか出ている。BENFEIで2連続失敗したので購入。こいつはPlugableにつないでも問題なかった(EDIDをちゃんと取れた)。

SANWA SUPPLY SW-HD31ML
以前から使っていた切替器。TESmart切替器と合わせて、6入力を実現するために使用。IN切り替えがローテーションではなく直接ボタンでやれるのが良い。内部的には物理切替器とほぼ同じなので、この切替器につないだ機器は再配置問題が発生し得る。一緒に使う可能性がない機器の組み合わせ、もしくはモニタ1枚を使用する機器をつなぐ。

ついでにHDMIケーブルをすべて、細い割に不具合もなさそうなELECOMのCAC-HD14USシリーズで統一。

ケーブルの取り回しも楽になって(本数は増えたが)楽になった。

結果

メリット

・再配置問題を気にせずにモニタの電源を切れる。

・モニタの切り替えで本体操作不要。リモコンですばやく楽に。どのように切り替えても、PC1では再配置問題は発生しない。

・HDMIを軸に統一したので配線の考え方がシンプルに。HDMIに変換してHDMIで配線すればよい。ケーブルの流用が効くし、取り回しも楽。

・これからは、モニタはHDMI一口あれば何を買っても大丈夫。モニタ購入時に端子の個数・形状を気にしなくてよい。またウィンドウ再配置問題の対応(EIZOのCompatible Mode相当)も気にしなくてよい。

・これからは、PC1用のグラボはHDMIもしくはHDMIに変換できるコネクタ(DVIかDisplayPort)が計2個あれば何を買っても大丈夫。グラボ購入時にウィンドウ再配置問題を気にしなくてよい。

デメリット・課題

・ケーブルが増えた

・SW-HD31MLにつないでいる機器は再配置問題が発生しうる。今の用途だと回避しなくても不満がないが、回避したいとなるとTESmart切替器2台以上の組み合わせか50k以上する業務用機器になるかも

・TESmart切替器の消費電力(測っていない)

・TESmart切替器が単一障害点になってしまうので、今後故障時に同等製品がないと(あるいはやたらと高くなってたりすると)死ぬ。

余談

そのうちUSB-C(DP Alt)だらけになってしまいそうな気がするが、Windows側がなんとかしないとデイジーチェーンだろうが何だろうがこの問題は改善しない(はず)。

しばらくこの構成でつなぎつつ、OS側が何とかしてくれるのを期待したい。
結局、OS側ではなんともならずDP時代にはTESmartのDP切替器を使ってそうな気もする。

2021/09/19(日)pycronが動かない

2021/09/19 25:39 PC(全般)
Windowsのタスクスケジューラにどうも馴染めないので、pycronというWindows用cron実装ソフトを利用している。

システムをクリーンインストールした際に、pycronが動かなくなってしまったのでその解決方法についてメモ。

なお、かなり古いソフトで公式サイトも消失している。
同名のソフトやライブラリもあって検索がまともに機能しない。
なかなかに厳しい。

問題は、pycronを標準のc:\Program Files (x86)\pycronなどにインストールした場合に発生する。
サービスとして起動したpycronが一切のタスクを実行しない。

原因はpycronサービスがcron設定ファイルcrontab.txtを読めていないから。
これはWindowsのVirtualStore機能でハマりが発生している。

pycronは、付属のcrontab.txt Editor(GUIのcrontab編集ツール)でcrontab.txtを作ったり、スクリプトのテスト実行ができる。
便利なのだが、これが問題を起こす。

crontab.txt Editorを非管理者権限で動かして設定を保存すると、自動的にWindowsのVirtualStore機能が働き、

C:\Users\********\AppData\Local\VirtualStore\Program Files (x86)\pycron

にcrontab.txtを出力する。

しかし、pycronはデフォルトで、pycron.exeと同一ディレクトリにcrontab.txtが存在する想定で動く。

サービスとして動くpycron.exeはローカルシステムアカウント(SYSTEM)で動くため、
c:\Program Files (x86)\pycron\crontab.txt
を直接読みに行き、crontab.txtが存在しないので動かないという事象になる。

混乱を招くポイントとして、非管理者権限で動かしたファイラーなどからは、
c:\Program Files (x86)\pycron
の中身は、実際のディレクトリ内容にVirtualStoreディレクトリの内容を上書きしたような状態で表示される。
同一名ファイルが有る場合でも、VirtualStore側が優先ということ。

ログファイルについても、crontab.txt Editorでテスト実行をするとまずVirtualStore側にpycron.logが出力される。
サービスのpycron.exeはc:\Program Files (x86)\pycron\pycron.logを出力するので、
手順と閲覧方法によってはVirtualStore側に隠されてしまってサービスのログファイルが見えないことになったりする。

なお、管理者権限で動かしたプログラムからは、素のc:\Program Files (x86)\pycronの内容が見える。

解決手段は下記どれか。
a) Program Files (x86)以外にインストールする
b) crontab.txt Editorを管理者権限で実行して、c:\Program Files (x86)\pycronにcrontab.txtを出力する
c) pycron.cfgを書いて、VirtualStore側のcrontab.txtを読むようにする
d) crontab.txtを手動でVirtualStore側からc:\Program Files (x86)\pycronにコピー

ただ、a)以外は、crontab.txt Editorの実行権限を間違えるたびにトラブルになりそうなのがなんとも嫌。
なので、a)案を採用した。

タスクスケジューラはcronと比べUIや設定オプションの煩雑さの割に、スケジュールの細かいコントロールができないのが不満。
WSLを使えばよいのだろうが、こっちはこっちでHyper-Vとサードパーティ仮想化ソフトの共存が難しい問題がある。
VMWareやVirtualBox資産が結構あるので切り替えが難しい。

ここらへんあと2,3年の技術進化で共存なり寄せなりスッキリできるようになるんじゃないかと期待してるけど、
今のところはpycronで凌ぐ方向で。

2021/07/17(土)debianのexim3で外部メール送信できるようにする

2021/07/17 20:56 PC(Linux)
もともと自宅サーバではqmailやsendmailを動かしていたのだが、Debian 8.0(jessie)切替時にさっぱり切ってしまった。

現状exim4が動いているのだが、外部にメール送信ができない。

zabbixとかは独自にSMTPサーバが登録できるのでごまかしていたが、
ここ来て流石にサーバ内からメールを投げたいケースが出てきた。

ということで、外部にメール送信できるようにする

基本的に下記の手順通りでよし。

Exim4/外部SMTPサーバー経由でメールを送信したい(Debian) - Void of Knowledge

mailコマンドで送信できることを確認。
echo "test" | mail -s "test title" -r from@example.com to@example.com
今度時間あるときに転送周りとcronメールも整理しよう。

2021/07/17(土)WebサーバをHTTPSに対応させる

2021/07/17 19:42 PC(Linux)
時間がないのでメモだけ。

最近はLet's Encryptの証明書発行もかなり簡単にやれるというので、当サイトもついに対応することにした。

基本的には下記のやり方通り。

Debian9 + Apache に"Let's Encrypt"をセットアップしてみた!! : プログラミング Tips

ただし、certbotコマンドについてはサブドメインがあるので、
#certbot certonly --webroot -w /var/www/html -d dt8.jp www.dt8.jp
とした。

また、SSLCipherSuiteの設定は息が長くなるよう、
mod_sslで使用するSSLCipherSuiteの設定を詰めてみる '20 - Qiita
に従った。

ローカルからのアクセスでhttps://~が表示されることを確認。

問題なさそうなので、ファイアウォール設定を変更しIPv4 ポート443の外部アクセスを開けた。

/etc/iptables/rules.v4
を編集して、
#netfilter-persistent reload
サーバ入れ替えた際に、かなり雑に作業をしてしまったのでiptablesの管理方法をちゃんと定義できてない。
年末までになんとかしよう。

SSL Server Testで、一応A判定が出ていることを確認。
https://www.ssllabs.com/ssltest/analyze.html?d=www.dt8.jp

さらに証明書更新したら、自動的にサーバを再起動してメールを送る設定にする。

/etc/letsencrypt/renewal-hooks/

に適当なシェルを作成し、
#!/bin/bash
/usr/sbin/apache2ctl restart
/bin/echo "証明書を更新し、Webサーバを再起動しました。" | /usr/bin/mail -s "証明書更新・Webサーバ再起動通知" -r mailaddress@example.com mailaddress@example.com
とか書く。

クリティカルなサービスがないので完全自動で良いし、restartで安全に。
当たり前だが、落とせないサービスならこんな事やってはいけない。

念の為動作テストする。
#certbot renew --force-renewal
証明書の期限更新~Webサーバの再起動~メール送信の一連の処理が行われることを確認。
更新制限があるので、何度もテストすのはNG。

あとは、サイト内にhttp://~から書いているところがあるかもしれないので、気づいたら直す。
そもそもリニューアルを予定しているのでちまちまやってく。

半年以上安定したら、mod_rewriteでhttp→httpsに振るようにしたい。

[2021/10/14追記]
上の手順で十分だと思っていたら、3ヶ月後の証明書更新が見事に失敗していた。

/var/log/letsencrypt/letsencrypt.logに出力されたエラー内容は、下記。

certbot.errors.MissingCommandlineFlag: Missing command line flag or config entry for this setting:
Select the webroot for dt8.jp:
Choices: ['Enter a new webroot', '/var/www/html']

(You can set this with the --webroot-path flag)

2021-10-13 17:06:46,513:ERROR:certbot.renewal:All renewal attempts failed. The following certs could not be renewed:
2021-10-13 17:06:46,514:ERROR:certbot.renewal:  /etc/letsencrypt/live/dt8.jp/fullchain.pem (failure)
dt8.jpのエントリがないと言われる。
あれ、そうなのか… force-renewalが成功したのはなんでだろう。

/etc/letsencrypt/renewal/dt8.jp.conf
の、
[[webroot_map]]
に、
www.dt8.jp と同じ内容で、dt8.jpの行を追加。
#certbot renew --dry-run
したら通るようになったので次のcronを待って、証明書が更新されることを確認した。

2020/12/23(水)Windows10 で拡張子に対して関連付けができない

2020/12/23 26:28 PC(全般)
Windows10 で関連付けができない問題。

環境はWindows10 Pro 1803 17134.471

設定→アプリ→規定のアプリからデフォルトアプリケーションを変えようとすると、指定後に設定画面が若干フリーズして消える。

再度設定画面を開いてもデフォルトアプリケーションが変わっていない。

下記にあるように、WindowsのKBのバグらしい。

既定のアプリが変更できないのはKBの不具合だった
Windows 10:"KB4462919"適用後、規定のアプリの変更ができなくなる - Microsoft コミュニティ

ということでWindows Updateが簡単な解決方法になりそうだが、当該PCは現在Windows Updateができない別の問題にあたっておりWindows UpdateがNG。

それ以外の方法でとりあえず解決したい。

今回のケースの場合、関連付けを変えたい拡張子のファイルに対して、

コンテキストメニュー(右クリック)→プログラムから開く→別のプログラムを選択→「このファイルを開く方法を選んでください」ダイアログで「常にこのアプリを使って.~ファイルを開く」にチェックを入れて、開きたいプログラムをクリック

で、とりあえず変更できた。

なお、当該情報はレジストリに保存されているらしい。

例としてMP4ファイルであれば、

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp4\UserChoice

になる(直接書き換える手もあり)。
このあたりを確認しながら設定をすれば良さそうだ。

2020/12/06(日)Thunderbirdでメール中のリンクが開かない

2020/12/06 20:07 PC(全般)
メーラーは未だにThunderbirdを使っているが、どこかのタイミングからメール中のリンクが下記メッセージで開かなくなった。

「このファイルには、この操作を実行するように関連付けられたアプリがありません。アプリをインストールするか、または既にインストールされている場合は、規定のアプリの設定ページで関連付けを作成してください。」

セキュリティ関連かと思ったが流石に不便。
開けるように改善したい。

Thunderbird - ふなWiki

にあるように、一度オプション
network.protocol-handler.warn-external.https
network.protocol-handler.warn-external.http
をtrueに設定すると、リンククリック時にブラウザを選択できる。
以降はリンクがブラウザで開くようになる。

デフォルトブラウザを設定したら、上のオプションはfalseに戻して良いようだ。

2020/11/03(火)Windows8.1でWindows Defenderが有効にできない

2020/11/03 16:12 PC(全般)
Windows8.1でWindows Defenderが有効にできない問題。

環境はWindows8.1 64bit。

長期に渡ってAvira Antivirusを入れて使っていたPCで、Aviraが暴走するケースが増えてきたのでAvira→Windows Defenderに切り替えようとした。

Aviraのアンインストールにも一苦労したのだが、アンインストール後でもWindows Defenderが有効にできない。

Windows Defenderを起動しようとすると、
「このアプリは無効になっており、コンピューターを監視していません。」
とダイアログが出て進まない。

【Windows 8.1】 マカフィーを削除後、 Windows Defender - マイクロソフト コミュニティ

が該当しそうに見えるのだが、どこからたどっても状況は同じ。
解決しない。

日本語answers.microsoft.comはノイジーである。

結局、下記手順を順に試して、
Problems starting Windows Defender in Windows 8/8.1/10 - Microsoft Community

「8. Enabling Windows Defender from Group Policy」
でやっと解決。

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
キーがなかったので作成し、DWORD値で
DisableAntiSpyware:0
を作成したらWindows Defenderの画面が開くようになった。

その後は定義更新したら素直に監視状態までこぎつけた。

Windows8→8.1の過程でキーが作られなかったりしたのだろうか。謎。

Windows8.1自体がもうあまり寿命がないが、とりあえずこれで凌げそうである。

2020/05/04(月)TodoistでGoogle日本語入力が使えない

2020/05/04 18:47 PC(全般)
Todoistのタスク入力欄で、Google日本語入力での日本語入力が有効にならない問題。
環境はWindows10 64bit。Todoistはストアアプリ版。

OneNoteでGoogle日本語入力の半角全角を切り替えられない問題【ALL APPLICATION PACKAGE】 | umashii blog
にあるように、
C:\Program Files (x86)\Google\Google Japanese Input
に、
ALL APPLICATION PACKAGE
アクセス権を付与すると解消した。
OK キャンセル 確認 その他