php5からphp7に変更
この2日間、朝になると自宅のWebサーバが落ちている。決まって同じ時間から症状が発生しているので、状況を調査。
apachectl reloadで発症
すると、logrotated が、ログの切替処理の中で “/etc/init.d/apache2 reload”を実行すると、その後から動かないことが見えてきた。
/var/log/apache2/error.log を観察すると、以下のようなエラーが多発。
[Fri May 11 ...AH00052: child pid 1475 exit signal Segmentation fault (11) [Fri May 11 ...AH00167: long lost child came home! (pid 1475) [Fri May 11 ...AH00052: child pid 1476 exit signal Segmentation fault (11) [Fri May 11 ...AH00546: no record of generation 0 of exiting child 1476
これをネタにググったら、php が原因のような話があったので、現状の php5 を php7 に変更してみた。
php7.0に変更
$ sudo aptitude remove php5-common $ sudo aptitude install php7.0 php7.0-common php7.0-mysql libapache2-mod-php7.0 php7.0-mbstring $ sudo a2enmod php7.0 $ sudo /etc/init.d/apache2 restart
そうしたら、無事に reload ができるようになってきた。
php7.2 に変更しようとしてみたが、WordPress の中で使っている PHP Code widget が非対応ということで、ひとまず見送り。
anthy から mozc に移行
今まで、emacs での日本語入力には、anthy を使っていたけど、 emacs25 + anthy(1:0.3-6) になったあたりから、記号をタイプすると、 \xxx\xxx\xxx といった、UTF-8 のゴミが表示されるようになってきた。
色々と設定を触っているけど、うまく治らない。
mozc を使う
原因をこれ以上調べていても面倒なので、mozc(google-ime) に切り替えてみた。
(( install )) $ sudo aptitude install emacs-mozc mozc-server mozc-data (( .emacs/init.el )) + (load-library "mozc") + (set-input-method "japanese-mozc")
さほど、問題はないんだけど、canna – anthy と使ってきた慣れで、 変換範囲の変更が \C-i \C-o で変更できないのが気持ち悪いな。
Windows の WSL じゃ mozc-server で動かない
環境を揃えるという意味で、Windows 上の Linux 環境でも mozc にするか…と思ったけど、mozc は ローカルホストで、mozc-server を動かすサーバ・クライアント型。ダメだろうとは思ってたけど、試してみると、インストール直後は サーバを起動してくれたから、変換できたけど、WSL のウィンドウを全部消してから、改めて使うと mozc-server が落ちてるので、漢字変換ができない。 WSL のデーモンいつになったら、使いやすくなるのかな。
WSLでdebianを入れる
WSL(Windows Subsystem for Linux?) で Debian が簡単にインストールできるようなので、インストールしてみる。
Bash on Windows で Ubuntu は使わないので消す
Debian 派生の Ubuntu といっても、デスクトップ環境が使えないなら、Ubuntu の必要性はない。Windows で LaTeX 環境として使っていた程度で、執着はないので、あっさり消す。
> cmd.exe 管理者モードで起動 > lxrun /uninstall /full
WSL で Debian を入れる
サーバ管理という点では、Debian に慣れているし、ほぼ Ubuntu でいいじゃんと思いつつも、信者なので。
Enter new UNIX username:
xxxxxxxx
Enter new UNIX password: yyyyyyyy Retype new UNIX password: yyyyyyyy $ sudo bash # apt-get update ; apt-get dist-upgrade # apt-get install aptitude # aptitude install lv w3m git \ emacs25 anthy anthy-el \ cjk-latex latex-cjk-all tgif man \ gcc g++ flex bison make cmake # aptitude purge nano # vi /etc/locale.gen ja_JP.UTF-8 UTF-8 # コメントを外す # locale-gen # update-locale LANG=ja_JP.UTF-8
wsl.conf
(( /etc/wsl.conf )) # Enable extra metadata options by default [automount] enabled = true mountFsTab = true root = /mnt/ options = "metadata,umask=22,fmask=11" # Enable DNS – even though these are turned on by default, we’ll specify here just to be explicit. [network] generateHosts = true generateResolvConf = true
味真野小学校/万葉中学校/鯖江高校のTwitterBotを停止
今まで、味真野小学校(@AjimanoES),万葉中学校(@ManyoJHS),鯖江高校(@SabaeHS) のホームページの更新情報をつぶやく勝手BOTを運営していた。しかし、子供も進学&卒業と共にメンテナンスが疎かになってしまって、変な動作をしても迷惑をかけてしまうので、Tweetするためのdlvr.itの各アカウントと、Twitterアカウントを停止した。どのアカウントも多少は利用者がいたけど、大量ユーザというほどでもないので、あっさり削除。
IPv6パススルーをOFF
自宅内では、外部とはつながっていないけど、IPv6 の管理を行っていて、それなりにうまく動いていると思っていた。(自宅内のみの、IPv6 DNS , DHCPv6 , ssh) しかし、久々に持ち帰った PC が、自宅サーバに繋がらない。原因は、根っこの自宅ルータが、IPv6 機能を持っていて RA 情報を流してくれるため、DHCPv6 を動かしているのに無視されている。
根っこのルータの配下につながっている、Buffalo のルータの IPv6 パススルーの設定をOFF にした。これで、自宅サーバの DHCPv6 情報を使ってくれるようになった。
Squidフィルタを撤去
子供のコンテンツフィルタとして、自作のフィルタを動かしていたけど、Squid の設定ファイルが随分古くなっていたので、フィルタ関連の設定やファイルを撤去。
postfix,dovecotのSSL化
子供の進学で自宅を離れ、出先でも自宅サーバにメールの読み書きがあれば、様子を伺えるんだけど、自宅サーバのメール関連のSSL化が不完全だったので、子供の引っ越し先に泊まった際に見直し。
すでに、dehydrated を Web サーバで導入済みなので、それを postfix , dovecot に利用させるだけなんだけど、一度失敗してたのでリトライ。
((/etc/apache2/site-enable/010-default-ssl.conf)) - SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem - SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key - SSLCertificateChainFile /etc/apache2/ssl.crt/server-ca.crt + SSLCertificateFile /var/lib/dehydrated/certs/MYDOMAIN/cert.pem + SSLCertificateKeyFile /var/lib/dehydrated/certs/MYDOMAIN/privkey.pem + SSLCertificateChainFile /var/lib/dehydrated/certs/MYDOMAIN/chain.pem ((/etc/postfix/main.cf)) - smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem - smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key + smtpd_tls_cert_file=/var/lib/dehydrated/certs/MYDOMAIN/cert.pem + smtpd_tls_key_file=/var/lib/dehydrated/certs/MYDOMAIN/privkey.pem ((/etc/dovecot/conf.d/10-ssl.conf)) - ssl_cert = </etc/ssl/certs/ssl-cert-snakeoil.pem - ssl_key = </etc/ssl/private/ssl-cert-snakeoil.key + ssl_cert = </var/lib/dehydrated/certs/MYDOMAIN/cert.pem + ssl_key = </var/lib/dehydrated/certs/MYDOMAIN/privkey.pem
これで、メールサーバのアカウント登録で、「登録されていない安全でない証明書を使うか?」といった表示もなくなるし、Windows の標準メールでも登録ができるようにできた。
OSの更新で、USBRH, Tira2が動かなくなった
Linux/Debian で、ホームオートメーションとして10年前から使っていた、USBRH(温湿度センサー)、Tira2(赤外線リモコン送受信機)が動かなくなった。
部屋の温度を nagios,munin でモニタリングしたり、部屋のAV機器をリモコン操作できるようにしていたけど、Debian/Buster/sid を使っているもんだし、USB デバイスの扱いが新しいデバイス向けに厳格になったんだろうな。古いハードウェア扱いになったのか、デバイスが認識されず /dev/usb の中からも消えてしまった。まあ仕方ないか。
技を使えば認識できるようになるとは思うけど、普通のホームデバイス使ったほうが楽だよな。Siri や Google Home mini と連動させて、それなりに便利だったんだけど。
仕方がないので、Amazonで売れ筋で安いやつということで、eRemote mini を発注した。
PowerShellおちるぞ…
Mac や Linux で Microsoft の PowerShell が動くようになったということで、ちょいとテスト。
$ curl https://packages.microsoft.com/keys/microsoft.asc ¥ | sudo apt-key add - $ sudo sh -c 'echo "deb [arch=amd64] ¥ https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" ¥ > /etc/apt/sources.list.d/microsoft.list' $ sudo aptitude update $ sudo aptitude install powershell
んで、使い方もよく知らないけど、ひとまず pwsh 起動。
root@host:/home/foobar# pwsh PowerShell v6.0.0 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/pscore6-docs Type 'help' to get help. PS /home/ei/t-saitoh> Segmentation fault root@host:/home/foobar#
起動するけど、30秒ほどほっておくと、勝手に Segmentation Fault で落ちる。
役に立たんじゃん。早々に、”aptitude purge powershell”。
pychromecastを使ってgoogle homeにキャスト
Google Homeを活用を模索するなか、Google Home は chromecast のスピーカーでもあるので、パソコンからchromecastの制御の記事を探してみた。
すると、pychromecast の記事を発見。
$ sudo aptitude install python-pychromecast
記事を参考に python script をコピペしたけど開発がすすんで関数名などが変更となっているようで、github 側の記事をみてちょっとだけ修正。pythonをいつも使っていないので、chromecast の試行錯誤の前に、漢字コードの扱いの方で四苦八苦。
#!/usr/bin/python2 # -*- coding: utf-8 -*- from __future__ import print_function import sys import re import time import pychromecast #------ ddev = "" #------ args = sys.argv args.pop(0) dev = "" # device url = "" # chromecast URL mtype = "" # media type # コマンドライン引数からキャスト内容を取得 if len( args ) == 3 : dev, url, mtype = args elif len( args ) == 2 : dev, url, mtype = [ ddev ] + args elif len( args ) == 1 : dev = ddev url = args[0] if re.match( r'\.mp4$' , url ) : mtype = 'video/mp4' elif re.match( r'\.mp4$' , url ) : mtype = 'audio/mp3' elif re.match( r'\.jpg$' , url ) : mtype = 'image/jpeg' elif re.match( r'\.png$' , url ) : mtype = 'image/png' # デバイス一覧を取得 chromecasts = pychromecast.get_chromecasts() # 指定したデバイスを見つける cast = next( cc for cc in chromecasts if cc.device.friendly_name.encode( 'utf-8' ) == dev ) cast.wait() # キャスト開始 mc = cast.media_controller mc.play_media( url , mtype ) mc.block_until_active()