2022/06/11(土)FreeBSD 13.1R + Perl 5.36.0 の環境で adiaryの更新時エラー

暫定的な場当たり対処なので、とりあえず記事の形で・・・。

提起の通り、FreeBSD 13.1R 上で Perl 5.36.0 の環境で、adiary 3.40c を稼働させて、
おもむろに記事作成や更新を行うと、
[AutoLoader] Can't modify undef operator in scalar assignment at lib/SatsukiApp/adiary_4.pm line 925, near "undef
}"
Compilation failed in require at lib/Satsuki/AutoLoader.pm line 42.
といったエラーが出るようになりました。FreeBSD 13.0R + Perl 5.32 の環境までは発生しない。
OSもPerlも同時に更新したため、
Perl のバージョンアップで挙動が変わったのか、OSで何かあるのかが判らない状態です。

但し、更新そのものは出来ている模様。

これは、lib/SatsukiApp/adiary_4.pm の 913行目~
sub void_plugin_images {
        my $self = shift;
        my $h    = shift;
        my $form = shift;
        foreach(keys(%$form)) {
                if ($_ !~ /^(\w+)_void$/) { next; }
                if (! $form->{$_}) { next; }
                my $n = $1;
                $h->{$n} = undef
                $h->{"${n}_w"} = undef
                $h->{"${n}_h"} = undef
        }
}
と、なっているところを
sub void_plugin_images {
        my $self = shift;
        my $h    = shift;
        my $form = shift;
        foreach(keys(%$form)) {
                if ($_ !~ /^(\w+)_void$/) { next; }
                if (! $form->{$_}) { next; }
                my $n = $1;
                $h->{$n} = undef ;
                $h->{"${n}_w"} = undef ;
                $h->{"${n}_h"} = undef ;
        }
}
とすると、回避出来ました。これが正しいのかどうかは判りません。

2022/03/31(木)postgresql にて、任意の select 文を csv 出力する

自分メモその2。ざっくりと、こんな感じ。
# psql -h サーバFQDN DB名 -U ユーザ名 -c "《任意のselect 文》;" -A -F , > output.csv
サーバFQDN は、ホスト名のほか、IPアドレスでも可能です。自ホストの場合は localhost と指定します。
DB名・ユーザ名は、そのままですね。
任意のselect文は、全体をダブルクォーテーションで括ります。終端には必ずセミコロン「;」を付けます。
select 文中に括弧やダブルクォーテーションが入る場合、エスケープが必要かもしれません。

 -A は、「桁揃えなしのテーブル出力」で、これを指定しないと、CSV 出力の際に余計なスペース等が入ってしまいます。
 -F は、「桁揃えなし出力時のフィールド区切り文字」で、デフォルトの区切り文字は "|" なので、CSV 出力の場合は、必ずカンマ「,」を指定します。

あとは、リダイレクトで出力ファイル名の指定。
文字コードは、DBの文字コードが適用されます。

2022/03/31(木)FreeBSD12/FreeBSD13 にて Let's Encrypt を使う(manual 編)

2022/03/31 2:18 サーバ運営・管理
いつもの自分メモ。地味にいつも嵌るので、、
FreeBSD Ports においては、 securiry/py-certbot をインストールするのは、従来と同じです。

Webサーバ自体が Firewall 内部で、ルータのIPマスカレードや、NATで外部から直接アクセスできない(Firewall の内と外でIPアドレスが違うと Let's Encrypt のツールでは自動取得・自動更新は難しいと思う)ネットワーク構成の場合、--manual オプションで使うのが当方の環境では最も確実です。
但し、アクセス制限をかけたり、リダイレクトしている場合は、それらを全て一旦全て解除し、出来る限りフリーアクセスの状態にしないと、HTTPステータスが 401 になったり、 301 になったりで上手くいかない。

他に、もっと効率的な手法があればいいのですが、、
# certbot certonly --manual --preferred-challenges http-01 -d host.example.com
のように入力すると、
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for host.example.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Create a file containing just this data:

yPcvsXmaN4k_2rk-ZxFKmbp0EwgrmlgLflIPa5EsYtU.xGBBOehwohStkrITKI6h3ng8cYkGYXMtZXQnLK8SHUA

And make it available on your web server at this URL:

http://host.example.com/.well-known/acme-challenge/yPcvsXmaN4k_2rk-ZxFKmbp0EwgrmlgLflIPa5EsYtU

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
のように表示されます。

外部から、
http://host.example.com/.well-known/acme-challenge/yPcvsXmaN4k_2rk-ZxFKmbp0EwgrmlgLflIPa5EsYtU

でアクセス出来るよう、ファイルの中身が
yPcvsXmaN4k_2rk-ZxFKmbp0EwgrmlgLflIPa5EsYtU.xGBBOehwohStkrITKI6h3ng8cYkGYXMtZXQnLK8SHUA

であるコンテンツをサーバ上に設置するように。。 という意味のメッセージの模様:

上手くいくと、
Successfully received certificate.
Certificate is saved at: /usr/local/etc/letsencrypt/live/host.example.com/fullchain.pem
Key is saved at: /usr/local/etc/letsencrypt/live/host.example.com/privkey.pem
This certificate expires on 2022-06-28.
These files will be updated when the certificate renews.

NEXT STEPS:
- This certificate will not be renewed automatically. Autorenewal of --manual certificates requires the use of an authentication hook script (--manual-auth-hook) but one was not provided. To renew this certificate, repeat this same certbot command before the certificate's expiry date.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
のようなメッセ―ジが表示されます。
得られた公開鍵・秘密鍵を実際に運用するサーバに適切にセットアップすることで、公開鍵・秘密鍵のアップデート、新規登録が共に可能です。

尚、有効期間は 90日だが、一度同じホスト(FQDN)名で、Let's Encrypt のサーバ証明書を作ると、デフォルトでは、前回の有効期限から90日となる模様。