linuxでOneDriveを使う
macOS用のonedriveアプリも更新され、オンデマンド機能が便利。以前は、使わないファイルの同期を外したり、利用頻度の低いファイルのパソコン側のディスク容量圧迫の心配がなくなった。
利便性が上がったし、linux 環境でも改めて使いたくなってきた。以前は、onedrive-d というソフトがあったけど、同じように開発されていた、onedrive の完成度があがってる。
linux用のonedriveを使ってみる。
OneDriveのインストール
$ sudo aptitude install onedrive
認証設定
最初の認証設定を行う。以前のバージョンで設定が残っているようなら、”rm -rf ~/.config/onedrive/” で消せばいい。
$ onedrive Authorize this app visiting: ...URL... このURLをブラウザでアクセスし、OneDriveの認証を行う。 この後、真っ白なページが表示されるので、 このページのURLをコピーする。 Enter the response uri: ここにURLをペースト
これで、使える状態になり同期が始まるけど、OneDrive をサービスで起動させたままにしたいので、ひとまず Ctrl-C で停止させる。
常駐起動させる
新しいバージョンでは、通常ユーザ状態での systemctl 起動に対応しているので、以下のコマンドで、自動起動の登録、および起動を行う。
$ systemctl --user enable onedrive $ systemctl --user start onedrive
SambaがWindowsのネットワークから見えない
サーバが、Windows10のエクスプローラのネットワークから見えない。
どうも、Windows側で、「Windowsの機能の有効化または無効化」で、”SMB 1.0/CIFS Client” の設定が必要みたいで、設定したけど、また見えなくなった。
参考となる記事を探していたけど、IPv6 の問題が指摘されていたものがあった。自宅では、IPv6 が一応使えるようにしてあるし、設定を見直し。
(( /etc/samba/smb.conf )) [global] # CIFS標準の SMB1 では見えないようなので、SMB3 を使えるようにする client max protocol = SMB3 # IPv6 からのアクセスを受け付けるようにする。 hosts allow = 192.0.0.0/8 192.168.0.0/16 fe80::/10 : $ sudo /etc/init.d/smbd restart ; sudo /etc/init.d/nmbd restart
IPv6 用の hosts allow を加えたら、Windows から サーバが見えるようになった。
wsltty いいね
Windows 10でLinux環境を WSL で使っているけど、cmd.exe が動くコンソールの動きに色々と違和感を感じていた。WSLが出始めた頃なら、フォントの文字化けとか酷かったけど、最近はかなりマシに動いていても、画面の反応のタイミングが微妙だったり。
ネットの記事を探していたら、wsltty の紹介記事をみつけた。 試しに入れてみたけど、違和感ない。
今まで、あまり使ってこなかったけど、コンソールの背景が透ける設定も悪くない。ウィンドウ開きまくりだと、隠れたウィンドウがどこかのヒントとして、背景透過ってアリだな。
香港からのアクセス制限解除
自宅サーバは、少しでも危険な攻撃を避けるために、国ごとのIPアドレスの配布状況にあわせアクセス拒否をしている。
しかし、明日からの香港での学会参加に合わせ、アクセス拒否の設定を外した。一時的だけどね。
apachectl graceful で segfault part2
以前、apachectl graceful を実行すると、segfault で子プロセスが止まっていて、php7.3 に 統一したら、なぜかしら問題解決をしていたが、症状が再発。
また、mbstring で segfault が発生している。
解決しないので、/etc/logrotate.d/apache2 を修正
/var/log/apache2/*.log { : postrotate if invoke-rc.d apache2 status > /dev/null 2>&1; then ¥ invoke-rc.d apache2 stop > /dev/null 2>&1; ¥ invoke-rc.d apache2 start > /dev/null 2>&1; ¥ fi ; endscript }
添付ファイル付きメールの送信
WatchOS5 を使うと、メール添付画像を見ることができるので、監視システムなどから画像付きでメールを送りたくなった。HTML形式で画像へのリンクを送っても画像はみえない。
#!/usr/bin/perl =head1 使用方法 mail-mixed.jp [options] 宛先... 標準入力をメール本文として送る -t --to 宛先 -c --cc CC宛先 -b --bcc BCC宛先 -f --from 差し出し人 -s --subject タイトル -a --attach 添付 -h --html HTML形式かどうか =cut use warnings ; use Getopt::Long ; use Jcode ; use Encode ; use utf8 ; use MIME::Lite ; use File::MimeInfo::Magic ; my $m_from = "" ; my $m_html = 0 ; my @m_attach = () ; my @m_to = () ; my @m_cc = () ; my @m_bcc = () ; my $m_body = "" ; # オプションの読み込み GetOptions( 'to=s' => \@m_to , 'cc=s' => \@m_cc , 'bcc=s' => \@m_bcc , 'from=s' => \$m_from , 'subject=s' => \$m_subject , 'attach=s' => \@m_attach , 'html' => \$m_html , ) ; # 残りのオプション To として扱う @m_to = ( @m_to , @ARGV ) ; # 標準入力はメール本文 while( ) { $m_body .= $_ ; } # メール MIME::Lite用引数 my %arg = () ; $arg{From} = $m_from ; if ( $m_html ) { # $arg{Subject} = encode( 'MIME-Header' , $m_subject ) ; # UTF-8だと文字化けするぞ # $arg{Subject} = encode( 'MIME-Header-UTF_8' , Jcode->new( $m_subject )->utf8 ) ; $arg{Subject} = encode( 'MIME-Header-ISO_2022_JP' , Jcode->new( $m_subject )->jis ) ; } else { $arg{Subject} = encode( 'MIME-Header-ISO_2022_JP' , Jcode->new( $m_subject )->jis ) ; } $arg{To} = join( ", " , @m_to ) if ( @m_to > 0 ) ; $arg{Cc} = join( ", " , @m_cc ) if ( @m_cc > 0 ) ; $arg{Bcc} = join( ", " , @m_bcc ) if ( @m_bcc > 0 ) ; $arg{Type} = 'multipart/mixed' ; # メール全体の作成 my $msg = MIME::Lite->new( %arg ) ; # メール本文の作成 if ( $m_html ) { # HTML形式ではUTF-8を使う $msg->attach( Type => 'text/html; charset="utf-8"' , Data => Jcode->new( $m_body )->utf8 ) ; } else { # それ以外は日本語ISO-2022-JP $msg->attach( Type => 'text/plain; charset="iso-2022-jp"' , Encoding => '7bit' , Data => Jcode->new( $m_body )->jis ) ; } # 添付ファイルを付ける foreach my $file ( @m_attach ) { if ( -r $file ) { my $r_file = $file ; # ファイル名のディレクトリ部を削除 $r_file =~ s/^.*\/// ; # 添付 $msg->attach( Type => mimetype( $file ) , Path => $file , Filename => $r_file , Disposition => 'attachment' ) ; } } # メールを送る $msg->send ; ### Local Variables: ### ### mode: perl ### ### End: ###
dhcp-evalの使い方
自宅ネットワークでは、利用する機器の状態を把握するために固定IPアドレスを割り振っているが、DHCP の hardware ethernet で、Mac アドレスをみて配布している。この DHCP のリース時に、状態に合わせた処理を起動するための機能がある。
- dhcp-eval(isc-dhcp のマニュアル)
on commit などで script を実行
on commit , on release , on expiry を設定すると、IPアドレス割り振り時にプログラムを起動できる。
# vi /etc/dhcp/dhcpd.conf : # IPアドレス割り振り時に on-commit.sh を起動 on commit { set clip = binary-to-ascii(10, 8, ".", leased-address); set clhw = binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)); execute("/etc/dhcp/on-commit.sh", clip, clhw); } # vi /etc/dhcp/on-commit.sh #!/bin/bash # IPアドレスを割り振り時にメールを送る IP=$1 MAC=$2 if [ -n "$IP" -a -n "$MAC" ]; then echo "$IP $MAC" \ | /usr/bin/mail -s "dhcp on commit" foo@example.com fi
on commit の例で示した方法は、DHCPがアドレスをリースする度に呼び出される。スクリプトは同期して行われるため、遅い処理の場合には アドレス割り振りに支障がでるかもしれない。よって、スクリプトはシンプルなものを使う必要がある。
自宅では、host { fixed-address … } で、固定しているとはいえ WiFi なスマホだと、電波強度不足で再接続が発生する時だと、頻繁にメールが届くことになる。接続情報を保存するなどの Script を書かないとウザぃ。
host 毎に script を実行
こういうことができると、状況に合わせてリースを制御したくなる。自宅で使う場合だと、子供が長い時間使っている場合には、IPアドレスのリースを失敗させて、ネットワーク接続を切りたいかもしれない。
こういう場合には、host … { } の中に、execute を埋め込むことができる。しかも、execute で実行される script の返り値で、lease を失敗させることもできる。
# /etc/dhcp/dhcpd.conf : host game-machine { hardware ethernet 00:11:22:33:44:55 ; fixed-address 192.168.11.222 ; execute( "/etc/dhcp/lease-check.sh , "192.168.11.222" , "00:11:22:33:44:55" ) ; } # vi /etc/dhcp/lease-check.sh #!/bin/bash # DHCP接続を判定する script IP=$1 MAC=$2 if [ -n "$IP" -a -n "$MAC" ]; then if [ アドレスを許可する条件 ]; then # 接続許可 exit 1 else # 接続禁止 exit 0 fi fi
注意: 最初 lease-check.sh は許可するときに shell-script 成功時を表す exit 0 を返せばいいとおもったけど、逆だったな。
mineo 宛のメールを取り込む
子供の携帯は、mineo を使っているけど、子供の契約変更(auプラン→docomoプラン)の時に、子供のmineo メール宛に送られている確認メールに気づくのが遅れ、手間取った。
子供の mineo メールのアカウントで、転送設定すればいい…と思ったけど、mineo メールにはそんな機能は無いらしい。gmail で mineo のメールを取り込む方法もあるけど、基本は本人任せで契約変更をしたい時だけメールを確認するのなら、自宅のメールサーバに読み込むほうが手っ取り早そう。
そこで、自宅メールサーバで、mineo.jp のメールを取り込む .fetchmailrc を書き、crontab で fetchmail を実行するように設定した。
メールの日本語化
自宅で動かしている様々な機能で、警告メールを送信することも多いけど、基本英字。日本語でも文字コードが utf-8 なら、mail コマンドで送ることもできるけど、日本語の定番のJISコードで送りたい。そこで、Subject をMIMEエンコード、本文をJISコードで送るスクリプトを設置。
#!/bin/bash # 日本語のメールを送る(SubjectのMIME化,本文のJIS,Content-Type出力) # Usage: mail-jp -s SUBJECT -r FROM TO_ADDR ... SUBJECT="" FROM="" TO="" ( # オプション(subject,from)引数処理 while [ $# -gt 0 ]; do case $1 in '-s' ) SUBJECT=$2 shift ;; '-r' ) FROM=$2 shift ;; * ) # レシビの出力 [ -n "$FROM" ] && echo "From: $FROM" [ -n "$SUBJECT" ] \ && echo "Subject: $SUBJECT" | /usr/bin/nkf -M echo 'Content-Type: text/plain charset="iso-2022-jp"' echo 'Content-Transfer-Encoding: 7bit' break ;; esac shift done # 引数(to:メールアドレス) while [ $# -gt 0 ]; do echo "To: $1" shift done echo "" # 本文 /usr/bin/nkf -j ) | /usr/sbin/sendmail -t
apachectl graceful で segmentation fault
以前からたまに発生していた、夜中になると、Webサーバが停止するトラブル。
確認をすると、logrotate あたりの cron で、“apachectl graceful”を実行すると、apache2 の子プロセスが、segmentation fault で落ちている。
最初は、エラーメッセージに geoip あたりのモジュールのエラーが出ていたので、いろいろ調べたけど改善せず。根本の原因ではなかったようで、更新をダメ元でかけているうちに出なくなった。
以前に、同じ症状で、 php7.2 → php7.0 にしていたけど、改めて最新パッケージにするために、最新の php7.3 に切り替える。これにより、graceful をかけても、落ちなくなった。
$ sudo aptitude install php7.3 php7.3-cli php7.3-common php7.3-curl php7.3-gd php7.3-imap php7.3-json php7.3-mbstring php7.3-mysql $ sudo a2dismod php7.0 $ sudo a2enmod php7.3 $ sudo /etc/init.d/apache2 restart
しかし、最新の php7.3 にあげたら、wordpress の投稿時に、以下のようなメッセージが表示されるようになった。PHPのcompact()の説明にも、php7.3から E_NOTICE を出すようになったと書いてある。
Notice: compact() : Undefined variable:...
エラー警告は消したくないけど、デバッグモードを外す。
/* /etc/wordpress/config-default.php */ define( 'WP_DEBUG' , false ) ;