やるきなし

2024/09/14 10:18 / ラピート 関西空港→なんば

ラピートに乗る際,改札前でいつもどうしたら良いかわからなくなる.なので,通常は以下の2択.

南海のことなので券売機で特急券がクレジットカードで買えるようには思えない...と,調べてみたら買えるようになっている様子.知らなかった.

さて,今回は15分ぐらい余裕はあったので,Webで特急券購入.https://www.club-nankai.jp/sta/web/OnetimeTop.do から会員登録なしで購入できる.座席指定も可能.

座席指定で良い席を見繕っていたら,クレジットカード決済の段階で座席確保に失敗する(おそらく窓口購入でその座席が販売された).座席指定してから決済するまでに結構入力する項目があるので,何度か失敗したけど,4回目ぐらいでうまく購入できた.会員登録をしておけば入力する項目を減らせるのだろうけどほぼ南海乗らないので,また機会があれば会員登録する.

なお,関空やなんば周辺は海外からの人だらけ.

2024/09/11 15:30 / 画像から文字選択可能な2値画像のPDFを作成する

結論としては一旦2値画像のTIFFを作成して,Acrobat で PDF に変換,その後 Acrobat で OCR して保存する,ということ.

レシートとかをスキャナで取り込む環境がなくて,やむなくスマートフォンで撮影したりした場合,あとできれいな PDF にしたくなる(そんなこともない?).

2024/06/04 19:20 / CDFV2 Microsoft Outlook Message (.msg) 形式メールから mbox 形式(.eml)への変換

.msg 形式のメールが転送されてきて,これを印刷せよとの指示を受ける....eml であれば Wanderlust や Thunderbird に取り込めるので,変換することを検討.

libemail-outlook-message-perlというパッケージに含まれるmsgconvertを使うと良いらしい.

% sudo apt install libemail-outlook-message-perl
% msgconvert example.msg

example.eml が生成される.既存の mbox (複数メール/1ファイル)に追加したい場合は,--mbox オプションを使うらしい.

% msgconvert example.msg --mbox my_mbox

2024/04/08 13:19 / Linux 6.8.4

Linux 6.7.x が EOL になったので,Linux 6.8.4 にあげる.久しぶりに .config がどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.

追加

削除

変更

Related articles

2024/03/10 18:26 / 確定申告 w/e-Tax と源泉徴収税額の内書き

年末ぎりぎりの雑所得について,精算手続きの都合で振り込まれたのが年明けだったので,源泉徴収票において源泉徴収税額の欄が2段(いわゆる内書き有り状態)になってしまった.さてどうしたものかと悩んだのでメモ.

確定申告は確定申告書等作成コーナーで申告書を作成して,そのまま e-Tax (スマートフォンでQRコードスキャン)で提出するとして,内書きがある場合は源泉徴収税額の納付届出書 (汎用手続ID HKO0410,様式)の提出が必要 (説明).つまり,未納源泉徴収があるものとして確定申告して,「源泉徴収税額の納付届出書」というだけ.

「源泉徴収税額の納付届出書」は e-Taxソフト(WEB版)を用いれば電子的に提出可能.イメージデータで送信可能な手続に含まれていて,PDFを送付するのみ.たぶんe-Taxソフト(Windows等にインストールして使うもの)でもできるらしいが,こちらはICカードリーダーが必要 (インストールしたが英語 Windows 環境だと結構文字化けがひどい印象).なお,e-Taxソフト(Web版)のログイン画面が「読み込み中です…」のまま進まない場合は,環境の確認が必要(Chrome を英語で使っている場合は,日本語環境に変更する必要がある; これ).

なお確定申告の際の納税額(あるいは還付額)は未納源泉徴収の有無に依存しない雰囲気.確定申告書等作成コーナーで両方のバージョンを作成したが金額が変わらなかった.

Related articles

2024/03/03 21:44 / Gnome 環境で日本語入力モードにすると gnome-shell が死ぬ

64-bit time_t への移行とかあったりして Debian unstable がややこしいことになっているが,それの影響かよくわからないが Mozc で日本語入力モードにすると gnome-shell が死ぬようになった.死ぬというのは以下の表示と Log Out ボタンが現れる.

Oh no! Something has gone wrong.
A problem has occurred and the system can't recover.
Please log out and try again.

別環境では問題無いようだったので,調べてみたら dconf の設定に依存するらしい.というか org.gnome.desktop.input-sourcesper-windowtrue だと不具合起こすらしい.以下で解決.

% gsettings set org.gnome.desktop.input-sources per-window false

なお,dconf の内容は以下のように dump して(テキスト形式),編集して,取り込む,ということができる.

% dconf dump / > dump.dconf
% vi dump.dconf
% dconf reset -f /
% dconf load / < dump.dconf 

以下の設定を一旦まるごと消して,そこから再度設定をしていって問題箇所を明らかにしていった.

ちなみに dconf の設定は ~/.config/dconf/user にある(バイナリ).たまにダンプしてバックアップするのが良いかもしれない.

追記(2024/5/21)

現在は per-windowtrue でも gnome-shell は問題なく動作する.Terminal (や Emacs) は基本的に Direct 入力なので,per-window false だと少々面倒だった.なお,Emacs は以下をして,そもそもデスクトップ環境のIMを使わないように設定している.

echo "Emacs*useXIM: false" | xrdb -merge

追記(2024/5/30)

% gsettings set org.gnome.desktop.input-sources per-window true

な状態で gnome-shell 起動して,Mozc で日本語入力しようと Direct input から Hiragana に切り替えたタイミングで gnome-shell が死んでしまう様子.

% gsettings set org.gnome.desktop.input-sources per-window false

としておいて,Mozc Hiragana 状態にしてしまえば,あとは per-window true にして問題ない様子.

Related articles

2023/11/21 19:12 / オーストラリア・シドニー メモ

先月シドニーに行ったメモ.

Related articles

2023/09/18 11:20 / mmm-mode 0.5.9-1, Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

Debian GNU/Linux sid (unstable) で以下のように mmm-mode の問題で upgrade に失敗する.

Install mmm-mode for emacs
install/mmm-mode: Handling install of emacsen flavor emacs
install/mmm-mode: byte-compiling for emacs

In toplevel form:
mmm-auto.el:178:4: Error: Wrong number of arguments: (3 . 4), 2

In toplevel form:
mmm-class.el:36:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-cmds.el:36:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-cweb.el:35:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-defaults.el:37:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-erb.el:62:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-mason.el:36:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-mode.el:93:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-myghty.el:41:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-noweb.el:44:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-region.el:42:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-rpm.el:45:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-sample.el:38:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

In toplevel form:
mmm-univ.el:35:2: Error: Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)
ERROR: install script from mmm-mode package failed
dpkg: error processing package mmm-mode (--configure):
 installed mmm-mode package post-installation script subprocess returned error exit status 1

原因は /usr/share/emacs/site-lisp/mmm-mode/mmm-auto.el の以下の箇所で define-obsolete-function-alias もマクロ展開に失敗している(XEmacs だった場合の引数の少ない方).

(if (not (string-match "XEmacs" (emacs-version)))
    (define-obsolete-function-alias 'mmm-add-find-file-hooks 'mmm-add-find-file-hook
      "0.3.8"
      "Both `mmm-add-find-file-hooks' and `mmm-add-find-file-hook' are deprecated.")
  (define-obsolete-function-alias 'mmm-add-find-file-hooks 'mmm-add-find-file-hook))

本家 git で https://github.com/dgutov/mmm-mode/issues/137 のとおり報告されていて,https://github.com/dgutov/mmm-mode/commit/244f8c4794f20a6be5ebe1e405400a9c35ea6d2f のとおり修正されているが,そもそもこの XEmacs サポートは Debian package 化する際に patch されており,該当 patch は https://sources.debian.org/src/mmm-mode/0.5.9-1/debian/patches/01-xemacs/ のとおり.

結局の所,XEmacs は手元で使っていないので,git にある https://raw.githubusercontent.com/dgutov/mmm-mode/master/mmm-auto.el で置き換えてしまえば問題ない(上記ブロックと mmm-add-find-file-hook 自体が削除される).

追記(2023/9/19)

mmm-mode: post-install script failsのとおりバグ報告がされており mmm-mode 0.5.9-2 で本件修正された様子.Conflicts: xemacs21 となって,XEmacs サポートは削除された.XEmacs なんか誰も使っていないので順当...

Related articles

2023/06/22 16:04 / 運転免許証再交付@札幌運転免許試験場

財布を落としてしまい,身分を証明するものが何もなくなってしまったので,ひとまず免許証から復活させた,という話.とほほ.

https://www.police.pref.hokkaido.lg.jp/guide/menkyo/menkyo3.html に従って手続き.札幌運転免許試験場で即日発行可能(ただし平日のみ; 受付は 8:45–11:30,13:00–15:00; 受付から交付まで約3時間半とのこと).以下実際の流れ.

Related articles

2023/05/24 23:09 / お名前.com 共用サーバーSD (SDプラン)からRSプランに移行

共用サーバーSD (SD-11プラン; 年払い12,936円(税込))はいろいろ不便で,別プロジェクトでRSプラン(初回は若干割引あるけどコストは同じ)を利用したこともあったので,RSプランに移行.移行に関する説明はここにある.いろいろ便利になった.

Related articles

2023/03/28 19:42 / RTL-SDR で FM を聞く(ffmpeg と pulseaudio メモ)

手元に https://www.amazon.co.jp/dp/B00VDSFXDC/ の RTL-SDR があるので,ひとまず FM を聞いてみる.何故かリモート計算機に RTL-SDR を接続してあるので,リモートでごにょごにょするメモ.

リモートサーバ(hoge; 実際には手元)で起動している pulseaudio にデータを送って,それで聞く.

% export PULSE_SERVER=hoge
% sudo rtl_fm -f 80.4M -Mwbfm | ffplay - -f s16le -nodisp -ar 32000

環境変数 PULSE_SERVER については こちら 参照.なお,この場合 hoge 側で TCP/IP で受けられる設定が必要.

あるいは,nc で送って,ただし AAC で圧縮する.

@hoge
% nc -l -p 2000 | ffplay - -f aac
@RTL-SDR
% sudo rtl_fm -f 80.4M -Mwbfm | ffmpeg -f s16le -ar 32000 -i - -f adts -y /dev/stdout | nc hoge 2000

先に hoge 側で nc を起動しておく必要があるし,接続が途絶えると nc の process が終了する.

なお,-Mwbfm-M fm -s 170k -o 4 -A fast -r 32k -l 0 -E deemp と同じで,ffmpegffplay-ar 32000 はこれ由来のオーディオサンプリングレート.

2023/03/16 13:48 / Amazon からの注文確定のメールを MHonArc が Nested start tags で拒否る

Amazon からの注文確定のメールを MHonArc が Nested start tags で拒否る.以下.

Warning: Rejecting Invalid HTML: Nested start tags
         Message-Id: <xxxxxxxxxxxxxxxx-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-xxxxxx@us-west-x.amazonses.com>

この Warning を吐くコードは以下で,

[/usr/share/mhonarc/mhtxthtml.pl]
    # Bug-32013 (CVE-2010-4524): Invalid tags cause immediate rejection.
    # Bug-32014 (CVE-2010-1677): Prevents DoS if massively nested.
    my $allowcom = $args =~ /\ballowcomments\b/i;
    strip_comments($fields, $data)  unless $allowcom;
    if ($$data =~ /<[^>]*</) {
      # XXX: This will reject HTML that includes a '<' char in a
      #      comment declaration if allowcomments is enabled.
      return bad_html_reject($fields, "Nested start tags");
    }

/<[^>]*</ の正規表現で引っかかっている箇所は以下.確かに Amazon が悪い...

    <!-- This is called in a loop from the MAIN template
## #foreach($orderId in $orderIds)--> 
    <!--Images--> 
    <!--ROW 4--> 
    <tr <td="" style="font-family: Arial, sans-serif !important">   
    </tr> 
    <!--Checks if the buyerName and groupName is null or empty--> 
    <tr style="font-family: Arial, sans-serif !important"> 
     <td width="600" valign="top" style="font-family: Arial, sans-serif !important;border-collapse: collapse"> 
      <!--Order Details Table--> 
      <table style="border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;font-family: Arial, sans-serif !important"> 

CVE割当があって,

ちょっと嫌だけど,MHonArc に掛けるメールはフィルタ済み(特定の送信元; 発注情報共有目的)なので,bad_html_reject の行をコメントアウトすることにした.

Related articles

2023/02/25 18:56 / シンプルパソコンデスク検討

古いデスク(横長; たぶん安物)の真ん中が少々下がってきてディスプレイが斜めになるので,検討.

ちなみに別拠点ではサンワダイレクトの古い 100-DESK080M を利用していて,70D x 160W x 70H cm とかなり広いのだけど重量も相当で(24 kg),かつモニターアームを取り付けるにはフレームがゴツすぎたはず.100Wの同型だと 17 kgなので,それに比べると70Dと60Dの違いを考慮しても最近のものは少し軽くなっている様子.

Related articles

2023/02/25 13:10 / http と https,www. を付ける付けないの正規化(Canonicalization)

Apache mod_rewrite を使って http は https に,example.org は www.example.org に転送する設定.以下.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^/?(.*) https://www.%{HTTP_HOST}/$1 [R=301,L,NE]
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L,NE]
</IfModule>

Related articles

2023/02/12 17:22 / ImageMagick で PDF を PNG に変換するメモ

ImageMagickでPDFをPNG等画像に変換する際のメモ.単純には以下で良いのだけど,

% convert input.pdf output.png

この場合 output-0.png, output-1.png, …, output-10.png, output-11.png, … というファイルが生成される.

% convert -scene 1 input.pdf output-%03d.png

とすると output-001.png, output-002.png, … というファイルが生成される.なお,%03d-export.png などとすることも可能.

% convert "input.pdf[11-12]" output-%03d.png

とすると output-011.png, output-012.png が生成される(指定するページ番号は 0 始まり).加えて,

% convert -scene 1 "input.pdf[11-12]" output-%03d.png

とすると,一つ前の例と同じページが output-001.png, output-002.png として生成される.

あと,(レンダリングの)解像度を指定するには -density 100 のように指定する(100 dpi, default は 72 dpi).

なぜ PDF を PNG にしたいかというと,超大なPDFの更新版を頂いた際などに,差分を取ったりするのに使えるから.その際ページ番号の桁が揃っていないと,差分ファイルを見る際に(ファイル名ソートで)面倒なことになる.例えば以下.

% convert -scene 1 input1.pdf %03d-input1.png
% convert -scene 1 input2.pdf %03d-input2.png
% for i in ???-input1.png ; do echo $(compare -metric PSNR $i ${i%-input1.png}-input2.png ${i%-input1.png}-diff.png) ; done

compare はなぜか改行を返してくれないので echo している.

Related articles

2023/01/30 16:15 / 運転免許証更新メモ

5年に一度(ゴールド免許)でよくわからなくなるのでメモ.

今回必要だった持ち物

得られたもの

なお,優良運転者オンライン更新時講習のモデル事業なるものをやっているらしく(2023 3Eまで),受付けでオンライン講習を受けましたか? とか聞かれたけど,その時までその事業の存在自体を知らなかった.

ちなみに,免許証の有効期限の表示が平成だったので,免許証を見るたびに有効期限が切れていないか不安な気持ちになっていた.新しい免許証は西暦が併記されている.

Related articles

2023/01/09 18:37 / Barrier on Wanland

XWayland の試用を続けているが,Barrierが動いてくれない.なお,Barrier は Synergy 1.9 からの fork で (Synergy は現在有料),キーボードとマウスを複数の PC で共有する Server と Client.

https://github.com/debauchee/barrier/issues/109 で Wayland support の議論が行われていたらしいが,https://github.com/input-leap/input-leap/issues/1414 にあるとおり主要な開発者(p12tic と shymega)が Barrier の fork である input-leap に移動したらしくて,とはいえ

As of mid-2022, there is no expected completion date for Wayland support.

とのこと.なお本家の Synergy については https://github.com/symless/synergy-core/issues/4090 のとおり 2014年頃から Support するする言っておきながら未だサポートしていない様子.

images/1002.png

現状では waynergy が Wayland サポートの Barrier client として動作するので,

という構成は可能.Wayland 環境で Barrier server を動かせないのがちょっと厳しいけど.あとは rkvm を利用するアプローチもあるけど,Rust で書かれていて openssl 周辺の問題で Debian GNU/Linux unstable (sid) 環境ではコンパイルできない(sid の openssl は 3.0.7-1).

waynergy を sid 環境でコンパイルするには以下ぐらい.

% PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig meson setup -Dprefix=`pwd`/local build
The Meson build system
Version: 1.0.0
Source dir: /home/myn/work/waynergy
Build dir: /home/myn/work/waynergy/build
Build type: native build
Project name: waynergy
Project version: 0.0.15
C compiler for the host machine: ccache cc (gcc 12.2.0 "cc (Debian 12.2.0-13) 12.2.0")
C linker for the host machine: cc ld.bfd 2.39.90.20230104
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/bin/pkg-config (1.8.0)
Run-time dependency wayland-client found: YES 1.21.0
Run-time dependency xkbcommon found: YES 1.4.1
Run-time dependency libtls found: YES 3.7.0
Program wayland-scanner found: YES (/usr/bin/wayland-scanner)
Build targets in project: 5

waynergy 0.0.15

  User defined options
    prefix: /home/myn/work/waynergy/local

Found ninja-1.11.1 at /usr/bin/ninja
% cd build
% ninja install

これで /home/myn/work/waynergy/local/bin/waynergy とかが install される.なお,wayland-client.pc 等 pkgconfig のファイルが /usr/lib/x86_64-linux-gnu/pkgconfig/ にあるので,PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig で場所を指定している.

あとは

./waynergy -c 192.168.1.xxx -e -t

とかでサーバに接続する../waynergy/dev/uinput にアクセスする権限を要求するので,調整が必要.ちょっと危険だけど手元ではchmod 666 /dev/uinputした.

追記(2023/1/9)

rkvm は以下で compile 出来なかったのだけど,

  cargo:warning=build/expando.c:4:24: error: pasting "RUST_VERSION_OPENSSL_" and "(" does not give a valid preprocessing token
  cargo:warning=    4 | #define VERSION2(n, v) RUST_VERSION_##n##_##v
  cargo:warning=      |                        ^~~~~~~~~~~~~
  cargo:warning=build/expando.c:5:23: note: in expansion of macro ‘VERSION2’
  cargo:warning=    5 | #define VERSION(n, v) VERSION2(n, v)
  cargo:warning=      |                       ^~~~~~~~
  cargo:warning=build/expando.c:10:1: note: in expansion of macro ‘VERSION’
  cargo:warning=   10 | VERSION(OPENSSL, OPENSSL_VERSION_NUMBER)
  cargo:warning=      | ^~~~~~~
  exit status: 1

一旦 Cargo.lock を削除して以下で,

% rm Cargo.lock
% PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig cargo build --release

が compile できる.あとは鍵/証明書を作成して example/ の下のサンプルを参考に server/client を起動すればよいのだけど,

[ 4400.612998] input: Logitech M280/320/275 as /devices/virtual/input/input462
[ 4400.615160] input: Topre Corporation HHKB Professional as /devices/virtual/input/input463
[ 4400.616645] input: HDA Intel PCH HDMI/DP,pcm=8 as /devices/virtual/input/input464
[ 4400.617821] input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/virtual/input/input465
[ 4400.618878] input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/virtual/input/input466
[ 4400.619870] input: HDA Intel PCH Headphone as /devices/virtual/input/input467
[ 4400.620981] input: HDA Intel PCH Headset Mic as /devices/virtual/input/input468
[ 4400.621923] input: USB2.0 HD UVC WebCam: USB2.0 HD as /devices/virtual/input/input469
[ 4400.622296] input: Asus WMI hotkeys as /devices/virtual/input/input470
[ 4400.622787] input: GDX1301:00 27C6:01F0 Touchpad as /devices/virtual/input/input471
[ 4400.623144] input: GDX1301:00 27C6:01F0 Mouse as /devices/virtual/input/input472
[ 4400.623504] input: ELAN9008:00 04F3:2772 Stylus as /devices/virtual/input/input473
[ 4400.623875] input: ELAN9008:00 04F3:2772 UNKNOWN as /devices/virtual/input/input474
[ 4400.624117] input: ELAN9008:00 04F3:2772 UNKNOWN as /devices/virtual/input/input475
[ 4400.624421] input: ELAN9008:00 04F3:2772 as /devices/virtual/input/input476
[ 4400.624696] input: PC Speaker as /devices/virtual/input/input477
[ 4400.625134] input: DP-2 as /devices/virtual/input/input478
[ 4400.625420] input: Video Bus as /devices/virtual/input/input479
[ 4400.625865] input: Power Button as /devices/virtual/input/input480
[ 4400.626484] input: Power Button as /devices/virtual/input/input481
[ 4400.626941] input: Sleep Button as /devices/virtual/input/input482
[ 4400.629118] input: Lid Switch as /devices/virtual/input/input483
[ 4400.629940] input: AT Translated Set 2 keyboard as /devices/virtual/input/input484
[ 4400.631582] input: rkvm as /devices/virtual/input/input485

のように /sys/devices/virtual/input/inputXXX/ に仮想デバイスが生成され,これを掴むように gdm 側を調整する必要がありそうな雰囲気で(gdm が起動する前に rkvm server/client を起動しておく),そこで断念.

追記(2023/1/18)

waynergy だけど,動かしたまま Display の解像度を変更すると混乱する様子(前の解像度を想定したまま waynergy が動き続ける).

Related articles

2022/12/30 13:29 / Inkscape と Wanland と Zoom

/etc/gdm3/daemon.confWaylandEnable=false として Wanland を Off にした X11 環境を使っているのであるが,いつのまにか Inkscape がまともに動かなくなった.具体的には Text tool モードにすると Inkscape 内の描画が固まる.Control + マウスホイールのズームが機能していることはルーラ(の拡大縮小)でわかるけど,その内側の描画は反応してくれない.

という環境で,たぶんX.Org Server が 1.20 から 21.1 になったことが原因だろうと思うのだけど,よくわからず.

/etc/gdm3/daemon.confWaylandEnable=false をコメントアウトして(Default は WaylandEnable=true),Wayland を利用するようにすると Inkscape は正常に動作してくれる.ただし,Wayland 利用の副作用,気がついた範囲では以下.

Zoomの画面共有(share)ができない,は以下の様に怒られる.

images/s1000.png
Can not start share, we only support Wayland on GNOME with
Ubuntu 17 and above, Fedora 25 and above, Debian 9 and
above, CentOS 8 and above, OpenSUSE Leap 15 and above,
Oracle Linux 8 and above, RHEL 8 and above, Mageia 7 and
above, Rocky 8 and above, Arch Linux, AnterGos, Manjaro. If
your OS is not on the list, please use x11 instead.

環境は Debian GNU/Linux の unstable なのだけど,何が悪いのだろうか...Wayland 関連の(よく分かってないけど) Version は以下.

追記(2022/12/31)

OSのバージョン云々でZoomに怒られるのは /etc/os-release を偽装すれば良いらしい.bullseye (Debian 11)の /etc/os-release (/usr/lib/os-release への symlink)を copy して使えば OK だが,最小限の修正は以下.

% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux bookworm/sid
Release:        n/a
Codename:       bookworm
% vi /etc/os-release
VERSION_ID="13" を末尾に追加
% lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux bookworm/sid
Release:        13
Codename:       bookworm

これで,以下の Dialog を出すところまでは進める.

images/1001.png

ただし Use system capture を選んで Share しても何も起こらなくて(Dialog が閉じられるだけ),この場合は (参考: Wayland screen sharing broken with GNOME 41 on Fedora 35Screen sharing with Wayland) xdg-desktop-portal-gnome を install する必要があるらしい(systemd 周りのことがあるので,再起動するか systemctl をごにょごにょする必要がある).

あと,xset によるキーリピート変更が効かないのは gnome-terminal のみのようで,他の GUI では効いている.How to set keyboard repeat delay and speed in Ubuntu Gnome 16.10?によると,Gnome のキーリピートは gsettings で行えば良いらしく,現状を確認すると以下.

% gsettings describe org.gnome.desktop.peripherals.keyboard repeat
Set this to TRUE to enable keyboard repeat.
% gsettings describe org.gnome.desktop.peripherals.keyboard repeat-interval
Delay between repeats in milliseconds.
% gsettings describe org.gnome.desktop.peripherals.keyboard delay
Initial key repeat delay in milliseconds.
% gsettings get org.gnome.desktop.peripherals.keyboard repeat
true
% gsettings get org.gnome.desktop.peripherals.keyboard repeat-interval
uint32 30
% gsettings get org.gnome.desktop.peripherals.keyboard delay
uint32 500

すっかり数値の意味を忘れているが xset r rate 300 55 の 300 と 55 はそれぞれ delay と rate で,意味は man xset にある以下の通り.

the delay is the number of milliseconds before autorepeat starts, and the rate is the number of repeats per second

ということで,以下設定することにした.だいたい以前と同じような key の感覚になった.

% gsettings set org.gnome.desktop.peripherals.keyboard delay 300
% gsettings set org.gnome.desktop.peripherals.keyboard repeat-interval 18

追記(2023/1/2)

https://lists.debian.org/debian-devel-announce/2022/10/msg00004.htmlによると

Debian 14
=========

The release team has decided that the release after bookworm and
trixie will be called forky.

だとかで,既に Debian 14 までの code name が決まっているようなので,VERSION_ID="14" としておいても良いかもしれない.

追記(2023/1/3)

XWayland の試用を続けているが,Remmina で Windows キーが接続先に届いてくれず,手元の Gnome が反応してしまう.Grab all keyboard events のボタンを On にしても.

以下を設定すれば効くとか,そのように書いている記事もあるが,効いてくれず.

https://gitlab.gnome.org/GNOME/mutter/-/blob/main/data/org.gnome.mutter.wayland.gschema.xml.in/usr/share/glib-2.0/schemas/org.gnome.mutter.wayland.gschema.xml にある説明は以下の通り.

    <key name="xwayland-allow-grabs" type="b">
      <default>false</default>
      <summary>Allow X11 grabs to lock keyboard focus with Xwayland</summary>
      <description>
        Allow all keyboard events to be routed to X11 “override redirect”
        windows with a grab when running in Xwayland.

        This option is to support X11 clients which map an “override redirect”
        window (which do not receive keyboard focus) and issue a keyboard
        grab to force all keyboard events to that window.

        This option is seldom used and has no effect on regular X11 windows
        which can receive keyboard focus under normal circumstances.

        For a X11 grab to be taken into account under Wayland, the client must
        also either send a specific X11 ClientMessage to the root window or be
        among the applications allowed in key “xwayland-grab-access-rules”.
      </description>
    </key>

    <key name="xwayland-grab-access-rules" type="as">
      <default>[]</default>
      <summary>Xwayland applications allowed to issue keyboard grabs</summary>
      <description>
        List the resource names or resource class of X11 windows either
        allowed or not allowed to issue X11 keyboard grabs under Xwayland.

        The resource name or resource class of a given X11 window can be
        obtained using the command “xprop WM_CLASS”.

        Wildcards “*” and jokers “?” in the values are supported.

        Values starting with “!” are denied, which has precedence over
        the list of values allowed, to revoke applications from the default
        system list.

        The default system list includes the following applications:

        “gnome-boxes,remote-viewer,virt-viewer,virt-manager,vinagre,vncviewer,Xephyr”

        Users can break an existing grab by using the specific keyboard
        shortcut defined by the keybinding key “restore-shortcuts”.
      </description>
    </key>

そもそも,xwayland-grab-access-rules には WM_CLASS をリスト形式で書くはずで,Remmina 自体が Wayland client として動作しているので xprop で調べることもできず,xprop の変わりの looking glassを使ってもよくわからず(実際にはLooking Glass Buttonを利用)...

xfreerdp だと all keyboard events を grab してくれるようなので,こちらでしばらく代用.xfreerdp は X client.

% xfreerdp /v:rdpserver.example.org /dynamic-resolution /u:username

なお,Remmina は TopIcons Plus で Tray Icon を出していたのだが,これもなぜか出なくなった(Skype やら Barrier の Icon は正しく表示されている).

追記(2023/1/4)

XWaylandの試用を続けているが,一部のWindowで上部のタイトルバーダブルクリックによるWindow最大化が効かない.

追記(2023/1/12)

Wayland 環境でなければ Inkscape がまともに動かない(Text まわりで固まる)ということで Wayland を試用していたが,別計算機であれば X (の他はほぼ同じ環境; Debian GNU/Linux)でも問題なかった.GPU が異なるのでそのドライバの問題かもしれない.Intel の Comet Lake UHD Graphics 環境(i7-10710U)では X + Inkscape で不具合起こす.

Related articles

2022/12/17 19:40 / systemd で Emacs が勝手に起動している...

いつの頃からかユーザ権限で Emacs が勝手に起動するようになっていた./usr/lib/systemd/user/emacs.service が原因で,以下で停止可能.

% systemctl --user stop emacs.service

なお,/usr/bin/emacs --fg-daemon が起動されて,emacsclient でこの daemon process 内で Emacs を利用することが想定されているらしいが,X 上で起動しているわけではないので,Terminal 内での Emacs 利用に限定されてしまう.

ユーザレベルで勝手に起動しないようにするには以下.これで ~/.config/systemd/user/emacs.service -> /dev/null という symlink ができる.

% systemctl --user mask emacs.service

システムレベルで Emacs を勝手に起動しないようにするには以下.これで /etc/systemd/user/emacs.service -> /dev/null という symlink ができる.

% sudo systemctl --global mask emacs.service
% systemctl --user daemon-reload

Don’t enable Debian systemd unit by default や以下の通り default では enable されないことになっているのだけど...

[/usr/share/doc/emacs-common/changelog.Debian.gz]
emacs (1:28.1+1-4) unstable; urgency=medium
(snip)
  [ Nicholas D Steeves ]
  * Don't enable Debian systemd unit by default.

2022/12/03 19:35 / sshd: Failed to allocate internet-domain X11 display socket で X11 Forwarding が効かない

他の設定は特に問題ないのに,SSHでX11 Forwardingが効かない症状発生,かなり悩んだ.原因はX11Forwarding does not work when net.ipv6.conf.all.disable_ipv6 = 1の様子(2010年のバグ報告だけど...).

IPv6をdisableするためにsysctlnet.ipv6.conf.all.disable_ipv6 = 1としている環境ではX11 Forwardingが動作しない様子.解決方法は以下のいづれか.

手元環境はIPv4 Onlyだが,SSH serverとはいえNote PCで,出先でテザリング等するので,この際IPv6をenable (前者で対応)することにした.

なお,Client/Serverとも他の設定は問題なくて,最新のDebian GNU/Linux unstableの ssh serverを起動して,そこに繋ごうとしたら症状が出た.いつのなにのupgradeが原因か不明.

X11 Forwardingが効かない,のログは以下.

Client:

debug1: Requesting X11 forwarding with authentication spoofing.
debug1: Requesting authentication agent forwarding.
debug1: Sending environment.
debug1: channel 0: setting env LANG = "en_US.UTF-8"
X11 forwarding request failed on channel 0

Server:

2022-12-03T19:54:38.724819+09:00 xxxxxx sshd[21834]: Accepted publickey for myn from 10.8.0.13 port 46426 ssh2: RSA SHA256:(snip)
2022-12-03T19:54:38.727374+09:00 xxxxxx sshd[21834]: pam_unix(sshd:session): session opened for user myn(uid=XXXX) by (uid=0)
2022-12-03T19:54:38.827380+09:00 xxxxxx sshd[21834]: pam_env(sshd:session): deprecated reading of user environment enabled
2022-12-03T19:54:38.957033+09:00 xxxxxx sshd[21846]: error: Failed to allocate internet-domain X11 display socket.

最初は deprecated reading of user environment enabled を疑って,sshd: pam_env(sshd:session): deprecated reading of user environment enabled のバグレポートを発見したが,これについては現状では皆スルーしている様子.で,他の bug reportを漁って,X11Forwarding does not work when net.ipv6.conf.all.disable_ipv6 = 1 を発見,sudo sysctl net.ipv6.conf.all.disable_ipv6=0 としたらひとまず X11 Forwarding が有効になった.にしても openssh-server のバグレポート,大量にあるな...

2022/10/30 15:05 / pandoc で生成される HTML における改行の扱い

Debian GNU/Linux 11 (bullseye)

 % pandoc -v
pandoc 2.9.2.1
Compiled with pandoc-types 1.20, texmath 0.12.0.2, skylighting 0.8.5
Default user data directory: /home/myn/.local/share/pandoc or /home/myn/.pandoc
Copyright (C) 2006-2020 John MacFarlane
Web:  https://pandoc.org
This is free software; see the source for copying conditions.
There is no warranty, not even for merchantability or fitness
for a particular purpose.
 % pandoc
test
ててててててててててててててててててててててててててててててててててててててててててててて
<p>test ててててててててててててててててててててててててててててててててててててててててててててて</p>

Debian GNU/Linux unstable (sid)

 % pandoc -v
pandoc 2.17.1.1
Compiled with pandoc-types 1.22.2.1, texmath 0.12.4, skylighting 0.12.3.1,
citeproc 0.6.0.1, ipynb 0.2
User data directory: /home/myn/.local/share/pandoc
Copyright (C) 2006-2022 John MacFarlane. Web:  https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.
 % pandoc
test
ててててててててててててててててててててててててててててててててててててててててててててて
<p>test
ててててててててててててててててててててててててててててててててててててててててててててて</p>

という感じで sid (unstable) の pandoc は,長すぎる行はできるだけ短くなるように,改行を入れても問題ない箇所に改行を入れる.Debian GNU/Linux 11 (bullseye) を同じ挙動をさせるためには --wrap option を使う.

% pandoc --wrap=none
test
ててててててててててててててててててててててててててててててててててててててててててててて
<p>test ててててててててててててててててててててててててててててててててててててててててててててて</p>

Related articles

2022/10/05 11:27 / LibreOffice および Inkscape からコマンドラインで PDF 生成

Makefile を書く際にいつも過去のやつを探すのが面倒なのでメモ.

Makefile に書くなら以下かな...

%.pdf: %.odt
    libreoffice --headless --convert-to pdf $< --outdir .
%.pdf: %.docx
    libreoffice --headless --convert-to pdf $< --outdir .
%.pdf: %.svg
    inkscape $< -o $@

Related articles

2022/09/05 08:00 / Mattermost 7.2 に upgrade すると DM が表示できない

Mattermost 7.2 に upgrade すると DM が表示できない(通常の channel や group message は表示できる).環境は以下.

Web appでも Desktop appでもだめで,Mobile appの場合は User を選択して,Send Message から DM を参照できる.

いろいろ探ってみたのだが API で /api/v4/users/me/teams/<team_id>/channels/categories (Sidebar 用の情報取得) を叩いた際に Direct Messages の Category が空になっていて,どうやら DM の Channel ID が取得できていない雰囲気.Mobile app でも確かに Sidebar 情報の DM の箇所が空になる.

直接 DM の Channel ID を指定して /api/v4/channels/<channel_id>/posts は,きちんと DM のやり取りを返すので,Channel (ID)まわりが怪しい.

Mattermost self-hosted changelog Release v7.2 - Feature Release によると 7.2 に upgrade する際に

ALTER TABLE Channels MODIFY COLUMN Type ENUM("D", "O", "G", "P");

するらしい.backup をとっていたので,upgrade 前後で Channels table を比較すると,Type column の値がもとは D O G P といった 1文字だったところが,空になっている.なお,型については以下の通り変更されていた.

なんだか ALTER コマンドがうまく変換してくれないらしい.Type が空なので,

の区別ができなくなって(https://github.com/mattermost/mattermost-server/blob/master/model/channel.go#L20),DM の Channel ID が取得できなかったものと思われる.Backup から適当に sql を作成して,Type カラムの値を復元したら直った.

全然だれもこのバグの報告を forum とかでしていなくて,known issue にもなっていなくて,実はだれも Debian で self-hosted で Mattermost を運用していないのかしらと思ったり思わなかったり(Slack が 9/1 から無料プランだと90日間しか履歴が見れなくなったので(以前は期限なしで,ただし,10,000件までだった),Mattermost も積極的にプレゼンスを上げようとしているはずなのだけど).

以下備忘.

file=`date +%Y%m%d%H%M`
mysqldump -u root -p<PW> --all-databases --events | xz > $file

のように backup をとっていた.以下みたいな箇所を切り出してきて(backup はこのように,一旦 Table を削除して,再度作り直す SQL になっている),

DROP TABLE IF EXISTS `Channels`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `Channels` (
  `Id` varchar(26) NOT NULL,
  `CreateAt` bigint(20) DEFAULT NULL,
  `UpdateAt` bigint(20) DEFAULT NULL,
  `DeleteAt` bigint(20) DEFAULT NULL,
  `TeamId` varchar(26) DEFAULT NULL,
**snip**
) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `Channels`
--

LOCK TABLES `Channels` WRITE;
/*!40000 ALTER TABLE `Channels` DISABLE KEYS */;
INSERT INTO `Channels` VALUES (**snip**);
/*!40000 ALTER TABLE `Channels` ENABLE KEYS */;
UNLOCK TABLES;

CREATE TABLE の箇所は upgrade 後のものを,INSERT INTO `Channels` VALUES の箇所は upgrade 前のものを利用するようにして,それを適当に from_backup.sql とかのファイル名で保存して,あとは以下のように実行するのみ.もちろん Mattermost は停止しておく.

% mysql -u <mattermost_db username> -p<mattermost_db_password>
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2965
Server version: 10.5.15-MariaDB-0+deb11u1 Debian 11

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use mattermost;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mattermost]> source from_backup.sql

なお,API 叩く(テストする)のに以下のような script を作っておくと便利(.token というファイルを用意しておいて Personal Access Tokens を入れておく).

#!/bin/sh
curl -H "Authorization: Bearer $(cat .token)" https://mattermost.example.org/$1 | jq

./a.sh だとして % ./a.sh /api/v4/users/me のように使う.GET しかできないけど,問題を追うにはこれで充分だった.

/api/v4 も書かせる仕様にしてあるのは,config.jsonLogSettingsFileLevelDEBUG にした際の mattermost.log に出力される API endpoint の表記が /api/v4 を含んでいたため.% tail -f mattermost.log | grep GET | sed 's,.*"url":"\([^"]*\)".*,\1,' とかで,どの API が叩かれているかを追っていた.

Related articles

2022/09/01 15:22 / Ruby の FileUtils.mv がなんか遅い (NFS と EXDEV と btrfs)

Ruby の FileUtils.mv がなんか遅い,というか /usr/bin/mv が異様に早い,という話.

ファイルサーバの /home/<username>/ (/home 自体が btrfs subvolume)を NFS+autofs でクライアントがマウントしていて,/home/myn/ から /home/default/ へのファイル移動することを考える(/home/myn//home/default/ をそれぞれ NFS mount している状態).

FileUtils.mv の場合 rename を試みて Errno::EXDEV あるいは Errno::EPERM だったら copy を行う(ファイルサイズが大きいと時間がかかる).

https://github.com/ruby/fileutils/blob/master/lib/fileutils.rb

  def mv(src, dest, force: nil, noop: nil, verbose: nil, secure: nil)
    fu_output_message "mv#{force ? ' -f' : ''} #{[src,dest].flatten.join ' '}" if verbose
    return if noop
    fu_each_src_dest(src, dest) do |s, d|
      destent = Entry_.new(d, nil, true)
      begin
        if destent.exist?
          if destent.directory?
            raise Errno::EEXIST, d
          end
        end
        begin
          File.rename s, d
        rescue Errno::EXDEV,
               Errno::EPERM # move from unencrypted to encrypted dir (ext4)
          copy_entry s, d, true

/usr/bin/mv の場合は rename しようとして失敗すると clone operation (下の箇所)を試みる.成功すればそれで移動(一瞬で終わる).

https://github.com/coreutils/coreutils/blob/master/src/copy.c

/* Perform the O(1) btrfs clone operation, if possible.
   Upon success, return 0.  Otherwise, return -1 and set errno.  */
static inline int
clone_file (int dest_fd, int src_fd)
{
#ifdef FICLONE
  return ioctl (dest_fd, FICLONE, src_fd);
#else
  (void) dest_fd;
  (void) src_fd;
  errno = ENOTSUP;
  return -1;
#endif
}

strace で追った感じ,以下 EXDEV の行以降抜粋.

FileUtils.mv の場合

copy_file_range で copy.

rename("test", "/home/default/test")    = -1 EXDEV (Invalid cross-device link)
newfstatat(AT_FDCWD, "test", {st_mode=S_IFREG|0644, st_size=192658, ...}, AT_SYMLINK_NOFOLLOW) = 0
openat(AT_FDCWD, "test", O_RDONLY|O_CLOEXEC) = 5
ioctl(5, TCGETS, 0x7ffc0c5c7490)        = -1 ENOTTY (Inappropriate ioctl for device)
newfstatat(5, "", {st_mode=S_IFREG|0644, st_size=192658, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/home/default/test", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0100644) = 6
ioctl(6, TCGETS, 0x7ffc0c5c7000)        = -1 ENOTTY (Inappropriate ioctl for device)
newfstatat(5, "", {st_mode=S_IFREG|0644, st_size=192658, ...}, AT_EMPTY_PATH) = 0
newfstatat(6, "", {st_mode=S_IFREG|0644, st_size=0, ...}, AT_EMPTY_PATH) = 0
lseek(5, 0, SEEK_CUR)                   = 0
copy_file_range(5, NULL, 6, NULL, 192658, 0) = 192658
close(6)                                = 0
close(5)                                = 0

/usr/bin/mv の場合

ioctl で clone を試みる

renameat2(AT_FDCWD, "test", AT_FDCWD, "/home/default/test", RENAME_NOREPLACE) = -1 EXDEV (Invalid cross-device link)
stat("/home/default/test", 0x7ffebbebd0a0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "test", {st_mode=S_IFREG|0644, st_size=192658, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "/home/default/test", 0x7ffebbebcd60, AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
unlink("/home/default/test")            = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "test", O_RDONLY|O_NOFOLLOW) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=192658, ...}) = 0
openat(AT_FDCWD, "/home/default/test", O_WRONLY|O_CREAT|O_EXCL, 0600) = 4
fstat(4, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
ioctl(4, BTRFS_IOC_CLONE or FICLONE, 3) = 0
utimensat(4, NULL, [{tv_sec=1662011348, tv_nsec=268642097} /* 2022-09-01T14:49:08.268642097+0900 */, {tv_sec=1662011426, tv_nsec=47929040} /* 2022-09-01T14:50:26.047929040+0900 */], 0) = 0

NFS からでももとファイルシステムの機能が使えるんだなぁと.

2022/08/20 13:22 / Emacs 28.1 Error: Wrong number of arguments: (3 . 4), 2

Debian GNU/Linux unstable (sid) で Emacs が .el の compile に(以下のように)失敗して upgrade 失敗する.

In toplevel form:
ess-r-package.el:560:1: Error: Wrong number of arguments: (3 . 4), 2
Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)
Eager macro-expansion failure: (wrong-number-of-arguments (3 . 4) 2)

Emacs が 1:27.1+1-3.1 から 1:28.1+1-1 になった際に define-obsolete-function-alias に仕様変更があったのが原因.

emacs-28.1/etc/NEWS:

** The WHEN argument of 'make-obsolete' and related functions is mandatory.
The use of those functions without a WHEN argument was marked obsolete
back in Emacs 23.1.  The affected functions are: 'make-obsolete',
'define-obsolete-function-alias', 'make-obsolete-variable',
'define-obsolete-variable-alias'.

/usr/share/emacs/27.1/lisp/emacs-lisp/byte-run.el.gz:

(defmacro define-obsolete-function-alias (obsolete-name current-name
                           &optional when docstring)

/usr/share/emacs/28.1/lisp/emacs-lisp/byte-run.el.gz:

(defmacro define-obsolete-function-alias ( obsolete-name current-name when
                                           &optional docstring)

手元でこれの影響を受けるのは elpa-ess (Emacs Speaks Statistics (ESS))のみだった様子で,かつ引数 2つだった箇所は1箇所(ess-r-package.el 内にある).ということで,elpa-ess 側に手動でパッチを当てればなんとなかる.以下.

--- /usr/share/emacs/site-lisp/elpa-src/ess-18.10.2/ess-r-package.el.orig       2022-08-20 13:25:40.649872918 +0900
+++ /usr/share/emacs/site-lisp/elpa-src/ess-18.10.2/ess-r-package.el    2022-08-20 13:25:47.654118456 +0900
@@ -557,7 +557,7 @@
   (error "As of ESS 16.04, `ess-developer' is deprecated. Use `ess-r-set-evaluation-env' instead"))
 
 (defalias 'ess-toggle-developer 'ess-developer)
-(define-obsolete-function-alias 'ess-r-devtools-check-package-buildwin 'ess-r-devtools-check-with-winbuilder)
+(define-obsolete-function-alias 'ess-r-devtools-check-package-buildwin 'ess-r-devtools-check-with-winbuilder "")
 (define-obsolete-function-alias 'ess-r-devtools-ask 'ess-r-devtools-execute-command "18.04")
 
 (make-obsolete-variable 'ess-developer "Please use `ess-developer-select-package' and `ess-r-set-evaluation-env' instead." "16.04")

追記(2022/8/20)

ということで Emacs 28.1 になったのだが

Related articles

2022/07/11 13:15 / MS Office の暗号化ファイルをコマンドラインで復号する

MS Office の暗号化ファイルをコマンドラインで復号する だけにいちいち Windows を用意したり Libreoffice 起動したりが面倒なので,CLI でなんとかする方法検討.msoffcrypto-tool (Debian package) というのがあって,これが使える.

pip install msoffcrypto-tool で install するか,sudo aptitude install python3-msoffcrypto-tool で Debian package を install する.使い方は簡単で,以下のような感じ.

% msoffcrypto-tool -p PPAP_PASSW0RD ppap_encrypted_file.xlsx ppap_decrypted_file.xlsx

あとは,.xlsx なら Python か Ruby で読んだり,xls(x) to csv using libreofficeのとおり Libreoffice で csv に変換したり,.docx なら pandoc で markdown やらに変換したり.

xlsx や docx は実際は zip なので,zip の復号をやってみたのだけど,そもそも暗号化 zip として見えない様子.以下のように Encrypted Composite Document File V2 (CDF) として見える.

% file ppap_encrypted_file.xlsx zip_encrypted_file.zip
ppap_encrypted_file.xlsx: CDFV2 Encrypted
zip_encrypted_file.zip:   Zip archive data, at least v1.0 to extract, compression method=store

Related articles

2022/06/18 09:35 / Emacs Failed to load module "canberra-gtk-module"

Emacs (emacs-gtk)起動時に以下のような Warning が出る.

Gtk-Message: 09:25:50.067: Failed to load module "canberra-gtk-module"

libcanberra-gtk3-module を install して Warning が出ないようにする.

2022/05/17 21:09 / 厚生労働省 新型コロナウイルス接触確認アプリ(COCOA)から通知きた

厚生労働省の新型コロナウイルス接触確認アプリ(COCOA)を延々と使っているが,690日目にしてやっと通知来た.この○○daysでなにかポイント還元してくれたらいいのに...マイナポイントなりで.

images/4110.jpgimages/4111.jpg

さて,May 11 の 9am からの 24時間中 67 分間接触があったとのこと.GMT基準の24時間毎に測っている様子で,もしかすると 8:50-9:10 に close contact があったりしたらうまく反応してくれないのかも.

67 minutes of contact に基本的に身に覚えがないが,あるとすれば飛行機に乗っていた時(かつ機内モードでも bluetooth を有効にする習慣がある; COCOA と Fitbit と,たまに AVIOT の Earbud).周りの乗客で,後で陽性になった人が居たのかも.

images/4112.jpgimages/4113.jpg

Instructions によると,症状があったり見に覚えがある場合は相談窓口に連絡,そうでない場合は7日間注意せよ(自己隔離せよ,とまでは書かれていない),とのこと.Find COVID-19 Consultation Centers をクリックすると都道府県を選ぶページが出てきて,そこから相談窓口を探す.

症状はなくて,機内でもマスクつけていたし,換気システムで充分な換気がされているはずで,たぶん感染はしていないのだけど,機内では爆睡していてその間になにかあったりとかしたら嫌なので,念の為 PCR 検査を受けたくて悩む.

札幌市では以下の無料検査事業をやっていて,札幌駅近辺でも予約不要で受けることができる様子.

のだけど,動き始める際にそこまで調べられなくて,ひとまずいつもの野良PCR検査を受けて,安心を買っておいた.

受けたのは狸小路の東亜産業PCR検査(2,000円).要予約だけど大抵空いてる.以前は1Fでやっていたけど(かつ3,000円だったような気がする),今は3Fに移動していて,1Fはドラッグストアのようなものが入っている(1F,2Fが商品だらけで3Fに上がる階段が見つけづらい).ちなみに「陰性証明」は発行されなくて,以下の抜粋のような報告レポートが届くのみ.

検体として取り出した唾液内に、SARS-CoV-2(新型コロナウイルス)に特徴的な RNA 配列が、「存在しない」状況を示していました。したがいまして、検査状況としては、「低リスク」であることをご報告申し上げます。

本レポートは、検査の状況をご報告するものであり、検体にウイルスが存在する又はしないことを保証するものではありません。

2022/04/24 18:16 / Key is stored in legacy trusted.gpg keyring

sudo apt update で以下の Warning が最近出るようになった.Debian GNU/Linux unstable (sid) 環境で,apt 2.4.5.

All packages are up to date.
W: https://repo.skype.com/deb/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://packages.cloud.google.com/apt/dists/cloud-sdk-sid/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
W: http://linux.dropbox.com/debian/dists/sid/Release.gpg: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

/usr/share/doc/apt/changelog.gz によると 2.4.0 からとのこと.

[/usr/share/doc/apt/changelog.gz] (partial excerpt)

apt (2.4.0) unstable; urgency=medium

  * Warn if the legacy trusted.gpg keyring is used for verification

 -- Julian Andres Klode <jak@debian.org>  Tue, 22 Feb 2022 20:00:46 +0100

以下で import した key が /etc/apt/trusted.gpg に保存されているのが原因で,最近は /etc/apt/trusted.gpg.d/ に置くことになっているとのこと(--dearmour した binary は .gpg として,ASCII armored keys は .asc で置くことになっている).

wget -qO- https://myrepo.example/myrepo.asc | sudo apt-key add -

man apt-key によると以下のとおり /etc/apt/keyrings に置く選択肢もあって,ただしこの場合 /etc/apt/sources.listSigned-By option により path を指定知る必要があるらしく(deb822-styleを想定?),面倒そうなので普通に /etc/apt/trusted.gpg.d/ に置くことにした.

Recommended: Instead of placing keys into the /etc/apt/trusted.gpg.d
directory, you can place them anywhere on your filesystem by using the
Signed-By option in your sources.list and pointing to the filename of
the key. See sources.list(5) for details. Since APT 2.4,
/etc/apt/keyrings is provided as the recommended location for keys not
managed by packages. When using a deb822-style sources.list, and with
apt version >= 2.4, the Signed-By option can also be used to include
the full ASCII armored keyring directly in the sources.list without an
additional file.

まず以下で,

sudo mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.0
sudo apt update

以下のように必要な key を確認して,

Err:11 http://packages.cloud.google.com/apt cloud-sdk-sid InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FEEA9169307EA071 NO_PUBKEY 8B57C5C2836F4BEB
Err:12 https://repo.skype.com/deb stable InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 1F3045A5DF7587C3
Err:18 http://linux.dropbox.com/debian sid Release.gpg
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY FC918B335044912E

あとは,以下で順に export していった.

sudo mv /etc/apt/trusted.gpg.0 /etc/apt/trusted.gpg
sudo apt update
sudo apt-key export FEEA9169307EA071 8B57C5C2836F4BEB | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/packages.cloud.google.com.gpg'
sudo apt-key export 1F3045A5DF7587C3 | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/repo.skype.com.gpg'
sudo apt-key export FC918B335044912E | gpg --dearmour | sudo sh -c 'cat > /etc/apt/trusted.gpg.d/linux.dropbox.com.gpg'
sudo rm /etc/apt/trusted.gpg

2022/04/18 15:22 / Linux 5.17

Linux 5.17 がでたので 5.16.18 から .config がどう変更されるのか見てみた.もう 5.17.3 が出ているけど 5.16 は EOL らしいので.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-517-features 参照.

追加

削除

モジュール化

nvidia-legacy-390xx-kernel-dkms

proc: remove PDE_DATA() completelyの影響で bullseye の nvidia-legacy-390xx-kernel-dkms の compile に以下の通り失敗する.

/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_gpu_info’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:29: error: implicit declaration of function ‘PDE’ [-Werror=implicit-function-declaration]
  118 | # define NV_PDE_DATA(inode) PDE(inode)->data
      |                             ^~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
  136 |             NV_PDE_DATA(inode));                                              \
      |             ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:161:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
  161 | NV_DEFINE_PROCFS_SINGLE_FILE(gpu_info);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
  118 | # define NV_PDE_DATA(inode) PDE(inode)->data
      |                                       ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
  136 |             NV_PDE_DATA(inode));                                              \
      |             ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:161:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
  161 | NV_DEFINE_PROCFS_SINGLE_FILE(gpu_info);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_version’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
  118 | # define NV_PDE_DATA(inode) PDE(inode)->data
      |                                       ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
  136 |             NV_PDE_DATA(inode));                                              \
      |             ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:175:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
  175 | NV_DEFINE_PROCFS_SINGLE_FILE(version);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_file’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
  118 | # define NV_PDE_DATA(inode) PDE(inode)->data
      |                                       ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:195:23: note: in expansion of macro ‘NV_PDE_DATA’
  195 |     nvfp->proc_data = NV_PDE_DATA(inode);
      |                       ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c: In function ‘nv_procfs_open_params’:
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:118:39: error: invalid type argument of ‘->’ (have ‘int’)
  118 | # define NV_PDE_DATA(inode) PDE(inode)->data
      |                                       ^~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/common/inc/nv-procfs.h:136:13: note: in expansion of macro ‘NV_PDE_DATA’
  136 |             NV_PDE_DATA(inode));                                              \
      |             ^~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.147/build/nvidia/nv-procfs.c:346:1: note: in expansion of macro ‘NV_DEFINE_PROCFS_SINGLE_FILE’
  346 | NV_DEFINE_PROCFS_SINGLE_FILE(params);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

/usr/src/nvidia-legacy-390xx-390.147 に以下のパッチをあてればなんとかなる.

--- a/common/inc/nv-procfs.h
+++ b/common/inc/nv-procfs.h
@@ -113,7 +113,7 @@ typedef struct file_operations nv_proc_ops_t;
     })

 #if defined(NV_PDE_DATA_PRESENT)
-# define NV_PDE_DATA(inode) PDE_DATA(inode)
+# define NV_PDE_DATA(inode) pde_data(inode)
 #else
 # define NV_PDE_DATA(inode) PDE(inode)->data
 #endif
--- a/conftest.sh
+++ b/conftest.sh
@@ -1800,7 +1800,7 @@ compile_test() {
             CODE="
             #include <linux/proc_fs.h>
             void conftest_PDE_DATA(void) {
-                PDE_DATA();
+                pde_data();
             }"

             compile_check_conftest "$CODE" "NV_PDE_DATA_PRESENT" "" "functions"

Related articles

2021/12/11 19:39 / Jupyterhub LDAP Authentication

Python の code (正確には Jupyter Notebook)を Web 上でインタラクティブに動作させる環境である Jupyterhub で LDAP 認証が使えるのであるが(つまりマルチユーザで利用可能),LDAP w/o SSL 環境(port #: 389)ではそのままではうまく認証できない,という話.

以下のようなエラーを吐いて,認証しようとするとコケる.

[I 2021-12-11 12:48:55.527 JupyterHub app:2717] Running JupyterHub version 2.0.0
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Authenticator: ldapauthenticator.ldapauthenticator.LDAPAuthenticator-1.3.2
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Spawner: jupyterhub.spawner.LocalProcessSpawner-2.0.0
[I 2021-12-11 12:48:55.527 JupyterHub app:2747] Using Proxy: jupyterhub.proxy.ConfigurableHTTPProxy-2.0.0
[I 2021-12-11 12:48:55.528 JupyterHub app:1641] Writing cookie_secret to /tf/jupyterhub_cookie_secret
[I 2021-12-11 12:48:55.541 alembic.runtime.migration migration:201] Context impl SQLiteImpl.
[I 2021-12-11 12:48:55.541 alembic.runtime.migration migration:204] Will assume non-transactional DDL.
[I 2021-12-11 12:48:55.548 alembic.runtime.migration migration:615] Running stamp_revision  -> 833da8570507
[I 2021-12-11 12:48:55.683 JupyterHub proxy:496] Generating new CONFIGPROXY_AUTH_TOKEN
[I 2021-12-11 12:48:55.709 JupyterHub app:1913] Not using allowed_users. Any authenticated user will be allowed.
[I 2021-12-11 12:48:55.727 JupyterHub roles:358] Adding role admin for User: myn
[W 2021-12-11 12:48:55.729 JupyterHub app:2152] No admin role found; assuming hub upgrade. Initializing default roles for all entities
[I 2021-12-11 12:48:55.768 JupyterHub app:2786] Initialized 0 spawners in 0.002 seconds
[W 2021-12-11 12:48:55.769 JupyterHub proxy:687] Running JupyterHub without SSL.  I hope there is SSL termination happening somewhere else...
[I 2021-12-11 12:48:55.769 JupyterHub proxy:691] Starting proxy @ http://:8000
12:48:55.921 [ConfigProxy] info: Proxying http://*:8000 to (no default)
12:48:55.934 [ConfigProxy] info: Proxy API at http://127.0.0.1:8001/api/routes
[I 2021-12-11 12:48:56.023 JupyterHub app:3035] Hub API listening on http://0.0.0.0:8081/hub/
[I 2021-12-11 12:48:56.023 JupyterHub app:3037] Private Hub API connect url http://hoge-mydockerimage:8081/hub/
12:48:56.023 [ConfigProxy] info: 200 GET /api/routes 
12:48:56.024 [ConfigProxy] info: 200 GET /api/routes 
[I 2021-12-11 12:48:56.024 JupyterHub proxy:431] Adding route for Hub: / => http://hoge-mydockerimage:8081
12:48:56.025 [ConfigProxy] info: Adding route / -> http://hoge-mydockerimage:8081
12:48:56.026 [ConfigProxy] info: Route added / -> http://hoge-mydockerimage:8081
12:48:56.026 [ConfigProxy] info: 201 POST /api/routes/ 
[I 2021-12-11 12:48:56.026 JupyterHub app:3101] JupyterHub is now running at http://:8000
[I 2021-12-11 12:53:41.998 JupyterHub log:189] 302 GET / -> /hub/ (@::ffff:10.8.1.6) 0.61ms
[I 2021-12-11 12:53:42.069 JupyterHub log:189] 302 GET /hub/ -> /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 0.51ms
[I 2021-12-11 12:53:42.240 JupyterHub log:189] 200 GET /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 27.24ms
[E 2021-12-11 12:53:47.996 JupyterHub web:1789] Uncaught exception POST /hub/login?next=%2Fhub%2F (::ffff:10.8.1.6)
    HTTPServerRequest(protocol='http', host='hoge:8000', method='POST', uri='/hub/login?next=%2Fhub%2F', version='HTTP/1.1', remote_ip='::ffff:10.8.1.6')
    Traceback (most recent call last):
      File "/usr/local/lib/python3.8/dist-packages/tornado/web.py", line 1704, in _execute
        result = await result
      File "/usr/local/lib/python3.8/dist-packages/jupyterhub/handlers/login.py", line 151, in post
        user = await self.login_user(data)
      File "/usr/local/lib/python3.8/dist-packages/jupyterhub/handlers/base.py", line 788, in login_user
        authenticated = await self.authenticate(data)
      File "/usr/local/lib/python3.8/dist-packages/jupyterhub/auth.py", line 473, in get_authenticated_user
        authenticated = await maybe_future(self.authenticate(handler, data))
      File "/usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.py", line 382, in authenticate
        conn = self.get_connection(userdn, password)
      File "/usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.py", line 314, in get_connection
        conn = ldap3.Connection(
      File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 363, in __init__
        self._do_auto_bind()
      File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 391, in _do_auto_bind
        if self.start_tls(read_server_info=False):
      File "/usr/local/lib/python3.8/dist-packages/ldap3/core/connection.py", line 1314, in start_tls
        if self.server.tls.start_tls(self) and self.strategy.sync:  # for asynchronous connections _start_tls is run by the strategy
      File "/usr/local/lib/python3.8/dist-packages/ldap3/core/tls.py", line 277, in start_tls
        raise LDAPStartTLSError(connection.last_error)
    ldap3.core.exceptions.LDAPStartTLSError: startTLS failed - protocolError
    
[E 2021-12-11 12:53:48.018 JupyterHub log:181] {
      "X-Forwarded-Host": "hoge:8000",
      "X-Forwarded-Proto": "http",
      "X-Forwarded-Port": "8000",
      "X-Forwarded-For": "::ffff:10.8.1.6",
      "Accept-Language": "en-US,en;q=0.9,ja;q=0.8",
      "Accept-Encoding": "gzip, deflate",
      "Referer": "http://hoge:8000/hub/login?next=%2Fhub%2F",
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
      "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
      "Content-Type": "application/x-www-form-urlencoded",
      "Origin": "http://hoge:8000",
      "Upgrade-Insecure-Requests": "1",
      "Cache-Control": "max-age=0",
      "Content-Length": "34",
      "Connection": "close",
      "Host": "hoge:8000"
    }
[E 2021-12-11 12:53:48.018 JupyterHub log:189] 500 POST /hub/login?next=%2Fhub%2F (@::ffff:10.8.1.6) 23.50ms
12:53:56.029 [ConfigProxy] info: 200 GET /api/routes 

Jupyterhub は Docker image として構築していて,Jupyterhub (+ LDAP auth) 関連の Docierfile 該当部は以下.

RUN pip install jupyterhub
RUN pip install jupyterhub-ldapauthenticator
RUN npm install -g configurable-http-proxy

あとは,起動時に

jupyterhub --config=/etc/jupyterhub_config.py

が呼ばれるようになっていて,jupyterhub_config.py は以下のようなもの.

c.JupyterHub.authenticator_class = "ldapauthenticator.LDAPAuthenticator"
c.LDAPAuthenticator.server_address = "10.0.0.1"
c.LDAPAuthenticator.server_port = 389
c.LDAPAuthenticator.bind_dn_template = "uid={username},ou=People,dc=example,dc=com"
c.LDAPAuthenticator.use_ssl = False
c.JupyterHub.hub_ip = '0.0.0.0'
c.Authenticator.admin_users = {'myn'}

LDAP には SSL 使っていない(ローカル環境なので)のに startTLS しようとしているように見える.たぶん /usr/local/lib/python3.8/dist-packages/ldapauthenticator/ldapauthenticator.pyの以下の箇所がおかしいような気がしていて,

    def get_connection(self, userdn, password):
        server = ldap3.Server(
            self.server_address, port=self.server_port, use_ssl=self.use_ssl
        )
        auto_bind = (
            ldap3.AUTO_BIND_NO_TLS if self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND
        )
        conn = ldap3.Connection(
            server, user=userdn, password=password, auto_bind=auto_bind
        )
        return conn

ここの箇所で以下の修正をするとうまく動いてくれる.

-    ldap3.AUTO_BIND_NO_TLS if self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND
+    ldap3.AUTO_BIND_NO_TLS if not self.use_ssl else ldap3.AUTO_BIND_TLS_BEFORE_BIND

Dockerfile 的には以下を書いている.

RUN sed -i 's/ldap3\.AUTO_BIND_NO_TLS if self\.use_ssl/ldap3.AUTO_BIND_NO_TLS if not self.use_ssl/g' /usr/local/lib/python3.*/dist-packages/ldapauthenticator/ldapauthenticator.py

Related articles

2021/12/04 11:13 / Gnome で Input Source を Window 毎に変える

Gnome で Input Source は

を使っているのだけど Window 毎に Input Source をスイッチしたいという話.具体的にはたとえば

として固定(というか個別に Input Source を変えられるように)して使いたいという話.そうしないと Chome (Japanese (Mozc) による日本語入力)から Terminal に移った際に全角でコマンドを打ってしまったりする.以下で Switch input sources individually for each window を有効にする.

現在の設定の確認:

% gsettings get org.gnome.desktop.input-sources per-window
false

設定の変更:

% gsettings set org.gnome.desktop.input-sources per-window true

変更後の設定の確認:

% gsettings get org.gnome.desktop.input-sources per-window
true

なお,Mozc の入力モードは Desktop 全体で共通になるので

といった運用はできない.

念の為,日本語キーボード利用環境でも同じ話.

加えて,

という謎環境にすると,Mozc の際のキーボード配列は,Japanese (Mozc) に Switch する前のキーボード配列になる.

GUI では Settings→Keyboard で Input Source Switching で Switch input sources individually for each window を有効にする.

Settings→Keyboard (Gnome で Input Source を Window 毎に変える)

Related articles

2021/10/21 11:29 / Mailman 3.3.3 設定メモ

Mailman 2.1 設定メモの Mailman 3 版.Mailman 2.1 の環境を Debian GNU/Linux bullseye に移行した際,Mailman 2.1 環境は一式削除して,新たにインストール(あらかじめ list pseudo user が存在していた環境なので,クリーンインストール環境とは差があるかもしれない).

Mailman 3 インストール

Mailman 3 + Postfix + Apache を想定.

sudo apt install mailman3-full

これが以下に依存して,

さらに以下が install される.

Mailman 3 の Web I/F は以下で提供される.

/usr/share/doc/mailman3/README.Debian.gz/usr/share/doc/mailman3-web/README.Debian.gz に従って設定すればOKだが,Postfix 向け alias (mailman process への転送)は /var/lib/mailman3/data/postfix_lmtp* で提供され,mailman3 install 時に /etc/postfix/main.cf に以下のとおり(コメントアウトされた状態で)追記されるので,この箇所を有効にする.

# mailman
owner_request_special = no
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
local_recipient_maps = proxy:unix:passwd.byname $alias_maps hash:/var/lib/mailman3/data/postfix_lmtp
relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}} hash:/var/lib/mailman3/data/postfix_domains

Apache 向けの snippet は /etc/mailman3/apache.conf にあり,これも mailman3-web install 時に適切に Apache に組み込まれる (/etc/apache2/ 以下に適切に symlink が生成される).が,手元では以下の patch が必要だった.

-       ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
+       ProxyPass /mailman3/ unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/

HyperKitty に archive させるには Mailman への REST アクセスが必要で,その api_key を /etc/mailman3/mailman-hyperkitty.cfg に書き込む.これは以下で実現される.

sudo dpkg-reconfigure python3-mailman-hyperkitty

他,以下の通り微調整.

ML (list) 作成/削除/メンバ制御

ML (list) 作成時に作成されるエイリアスについて

mailman create/var/lib/mailman3/data/postfix_lmtp (およびそのdb)が以下の通り自動生成される.

# This file is generated by Mailman, and is kept in sync with the binary hash
# file.  YOU SHOULD NOT MANUALLY EDIT THIS FILE unless you know what you're
# doing, and can keep the two files properly in sync.  If you screw it up,
# you're on your own.

# Aliases which are visible only in the @myn.example.com domain.
testml@myn.example.com                          lmtp:[127.0.0.1]:8024
testml-bounces@myn.example.com                  lmtp:[127.0.0.1]:8024
testml-confirm@myn.example.com                  lmtp:[127.0.0.1]:8024
testml-join@myn.example.com                     lmtp:[127.0.0.1]:8024
testml-leave@myn.example.com                    lmtp:[127.0.0.1]:8024
testml-owner@myn.example.com                    lmtp:[127.0.0.1]:8024
testml-request@myn.example.com                  lmtp:[127.0.0.1]:8024
testml-subscribe@myn.example.com                lmtp:[127.0.0.1]:8024
testml-unsubscribe@myn.example.com              lmtp:[127.0.0.1]:8024

Envelope from は testml-bounces で,また,testml-owner にはなにがしか mailman から notification が届く.自動 subscripe や参加者 command を使わせないのであれば,それ以外はこの段階で disable しておいたほうが安心かもしれない.

以下で適当に comment out して,それを /var/lib/mailman3/data/postfix_lmtp に配置して,

cat /var/lib/mailman3/data/postfix_lmtp | sed 's,\(.*-\(confirm\|join\|leave\|request\|subscribe\|unsubscribe\)\),# \1,'

その後は以下で /var/lib/mailman3/data/postfix_lmtp.db を作成する.

sudo -u list postmap /var/lib/mailman3/data/postfix_lmtp

本当は手動で調整するのは微妙.mailman createmailman remove の後に自動で処理するようにしたほうが良いはず.

追記(2021/11/5): mailman3 が起動する際に /var/lib/mailman3/data/postfix_lmtp が生成されるので,その後に hook が必要.

追記(2022/4/6): /var/lib/mailman3/data/postfix_lmtp に作成されるエイリアスのリストは /usr/lib/python3/dist-packages/mailman/mta/aliases.py で以下の通り定義されている.ここを修正すれば制御可能.

SUBDESTINATIONS = (
    'bounces',
    'confirm',
    'join',
    'leave',
    'owner',
    'request',
    'subscribe',
    'unsubscribe',
    )

ということで以下にした.Package が upgrade される際に上書きされるけど.

SUBDESTINATIONS = (
    'bounces',
    'owner',
    )

ML (list) の設定

Mailman 2 と異なり Mailman 3 では /usr/sbin/config_list のような設定を直接操作するコマンドが用意されていない.Web I/F でポチポチ設定するということになるが,他は REST を使うか mailman shell の Python の shell を使う.他に Python の method を list を引数に呼び出すアプローチもある.

私にとって一番やりやすいのは上記の最後のアプローチで,以下の script を作成した.これを main.py とかでどこかに置いておいて,あとは /usr/lib/mailman3/bin に symlink を置いておけば,ユーザ権限でいろいろな操作を (method を書けば)可能になる.

from mailman.testing.documentation import dump_json
from mailman.testing.documentation import call_http
from mailman.interfaces.mailinglist import SubscriptionPolicy
from mailman.interfaces.archiver import ArchivePolicy


# default method
def main():
    dump_json('http://localhost:8001/3.1/lists')


# config dump
def getconf(mlist):
    url = 'http://localhost:8001/3.1/lists/%s/config' % mlist.fqdn_listname
    dump_json(url)


# private ml default configuration
def conf(mlist):
    mlist.send_welcome_message = False
    mlist.send_goodbye_message = False
    mlist.subject_prefix = ''
    mlist.include_rfc2369_headers = False
    mlist.digests_enabled = False
    mlist.archive_policy = ArchivePolicy.private
    mlist.require_explicit_destination = False
    mlist.collapse_alternatives = False
    mlist.max_message_size = 0
    mlist.subscription_policy = SubscriptionPolicy.moderate
    mlist.unsubscription_policy = SubscriptionPolicy.moderate
    mlist.max_num_recipients = 20

# site level で footer を disable する
def site_conf():
    r = call_http('http://localhost:8001/3.1/uris')
    for key in ['list:member:regular:footer', 'list:member:digest:footer']:
        flag = True
        if 'entries' in r:
            for i in r['entries']:
                if 'name' in i:
                    if i['name'] == key:
                        flag = False
                        break
        if flag:
            s = 'file:///var/lib/mailman3/templates/site/en/{}'.format(key)
            call_http('http://localhost:8001/3.1/uris',
                      {key: s}, method='PATCH')

以下で,上記の main() が処理される.list の list を得る.

sudo -u list mailman shell -r main

以下で,指定した list の個人的好みの default の設定を行う.上記の conf(mlist) がコマンドラインで指定した list を引数に呼ばれる.

sudo -u list mailman shell -r main.conf -l testml@myn.example.com

https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/listconf.html?highlight=send_goodbye_message#changing-a-partial-configuration のように dump_json を使っても良いかもしれない.

他,上記 script では以下用意した.

site_conf では site level で footer を disable する設定をしている.

を参照するようにしていて,ここに空(zero file size)のファイルを配置する.

追記(2021/11/5): SQLite での運用時,ファイルがなくてもなんとかなっていた(空として処理される)ような気がしたのだけれど,MySQL (MariaDB) に変更したらファイルがなければ配信が止まるようになった(HyperKitty には Archive される).ファイルを touch すると勢い良く配信が始まった.

個人的好みの default の設定

mailman 自体の Default 設定は /usr/lib/python3/dist-packages/mailman/styles/base.py 参照.

mailman 2 にあったような DontReceiveDuplicates は Web I/F でユーザ毎に設定可能.Default では DontReceiveDuplicates は Off の様子.

追記 (2021/11/5) Backend DB について

SQLite3 で運用していたら以下のような Error が頻出しており (ちょうど下にある Bounce 処理の確認をしている際),

Nov 05 20:28:28 2021 (688389) Uncaught runner exception: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurri
ng prematurely)
(sqlite3.OperationalError) database is locked
[SQL: UPDATE mailinglist SET last_post_at=?, post_id=? WHERE mailinglist.id = ?]
[parameters: ('2021-11-05 11:28:23.577152', 4, 2)]
(Background on this error at: http://sqlalche.me/e/13/e3q8)
Nov 05 20:28:28 2021 (688389) Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1276, in _execute_context
    self.dialect.do_execute(
  File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 609, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: database is locked
sqlalchemy.exc.OperationalError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)
(sqlite3.OperationalError) database is locked
[SQL: UPDATE mailinglist SET last_post_at=?, post_id=? WHERE mailinglist.id = ?]

/usr/share/doc/mailman3/README.Debian に書いてあるとおり,SQLite が怪しいので MySQL に backend を置き換えた.

Database backend ================

The default configured database backend is SQLite3. This is necessary to not break automated (non-interactive) installations without installing recommends.

For productive setups, SQLite3 is not recommended as database backend. PostgreSQL or MySQL should be used instead. The database configuration can be automated by installing ‘dbconfig-pgsql’ or ‘dbconfig-mysql’ and running ‘dpkg-reconfigure mailman3’. A respective local or remote database server has to be available in this case.

(SQLite だとメールが SHUNT されたり,それを sudo -u list mailman unshuntsudo /etc/init.d/mailman3 restart で吐き出させたり,いろいろややこしい状況になっていた; 上にあるテンプレートのファイルを置いていなかったのも原因の一つかもしれない)

ひとまず MariaDB (MySQL) をインストールして

sudo aptitude install mariadb-server

あとは以下を順番に行う.

sudo dpkg-reconfigure mailman3
sudo dpkg-reconfigure mailman3-web

SQLite3 か MySQL か聞かれるので,MySQL と答え,他は以下にした(ほぼ Default; 以下 mailman3 のみ,mailman3-web もほぼ同じ).

mailman3 は ModuleNotFoundError: No module named 'pymysql' で起動できなかったので sudo aptitude install python3-pymysql して,mailman3-web は django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module. でコケている雰囲気だったので sudo aptitude install python3-mysqldb した.

追記 (2021/11/5) Bounce 処理について

Mailman 3 の Default の Bounce 処理 (See /usr/lib/python3/dist-packages/mailman/model/bounce.py)は

手元では

にして,bounce したら即 remove することにした.

disable, removal の際に list owner に通知が届く.Template は以下にある.

bounce_notify_owner_on_disable および bounce_notify_owner_on_removal でこの通知の Enable/Disable を設定できるが,True (Enabled)が Default で,このままで通常問題ない.

が,上で作成した list では owner の設定ができてなくて,設定するには Web から設定するのがおそらく簡単.http://myn.example.com/mailman3/postorius/lists/testml.myn.example.com/members/owner/ から設定.一旦1人設定すると,Removing the last owner is impossible とか怒られて削除できなくなる.

CUI から owner を設定するには,以下を上で説明している main.py に書いておいて,

from mailman.interfaces.usermanager import IUserManager
from zope.component import getUtility
from mailman.interfaces.member import MemberRole

def set_owner(mlist):
    user_manager = getUtility(IUserManager)
    admin = user_manager.get_user('myn@myn.example.com')
    mlist.subscribe(admin.addresses[0], MemberRole.owner)

def members():
    dump_json('http://localhost:8001/3.1/members')

以下で呼び出す.

sudo -u list mailman shell -r main.set_owner -l testml@myn.example.com

たぶん address が既に mailman 内に無いと get_user でコケるかもしれない.Owner を削除するには

sudo -u list mailman shell -r main.members

で該当 Owner の member_id を探して,以下を呼び出すようにする (Leaving a mailing list参照).

dump_json('http://localhost:8001/3.1/members/<member_id>', method='DELETE')

なお,disable, removal の際の list owner への通知は以下のヘッダで届く (上の bounce したら即 remove の設定だと2通同時に届く).また,bounce の log は /var/log/mailman3/bounce.log で確認できる.

Return-Path: <testml-bounces@myn.example.com>
To: testml-owner@myn.example.com
Subject: myn-error@myn.example.com's subscription disabled on Testml
From: myn@myn.example.com

Return-Path: <testml-bounces@myn.example.com>
To: testml-owner@myn.example.com
Subject: myn-error@myn.example.com unsubscribed from Testml mailing list due to bounces
From: myn@myn.example.com

Related articles

2021/09/08 12:13 / Linux 5.14

Linux 5.14 がでたので 5.13.13 から .config がどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-514-features 参照.

bullseye の nvidia の以下の driver については https://gist.github.com/joanbm/144a965c36fc1dc0d1f1b9be3438a368 のパッチが必要.

nvidia-kernel-dkms についてはそのまま patch apply 可能,nvidia-legacy-390xx-kernel-dkms については以下ぐらい.

参考:

Related articles

2021/09/07 17:26 / Adobe Acrobat Pro DC で単位をミリにする

もしかしたら英語で使っているのが原因なだけかもしれないが,Adobe Acrobat Pro DC で長さの単位がインチ(Inches)になっていて感じ悪い.Edit → Preferences → Unit & Guides から Page & Ruler Units を Inches から Millimeters に変更すると,単位がミリになる.

Adobe Acrobat Pro DC で単位をミリにする

2021/09/03 11:03 / Debian GNU/Linux 10 (buster) から 11 (bullseye) への upgrade

https://www.debian.org/releases/bullseye/amd64/release-notes/ch-upgrading.ja.html を参照しつつ進める.

2021/08/18 16:26 / fetchmail には UTF-8 support がない

メールサーバ(Courier Mail Server)から手元の独自メールサーバに fetchmail でメールを取り出しているのだけど(POP),fetchmail は UTF-8 をサポートしておらず,8bit を含む Subject のメールは POP される際に Courier Mail Server 側で 以下のように変換される.

MUA がこういった表示をしているのかと思ってたのだけど,fetchmail の問題で Courier Mail Server が変換していた.大抵 Subject は MIME で Encode されて 7bit で送信されるので,8bit Subject で送信されるのは SPAM がほとんどだけどちょっと気になる.

Received: from pop.example.com [xx.xx.xx.xx]
    by client.example.com with POP3 (fetchmail-6.4.0.beta4)
    for <myn@localhost> (single-drop); Tue, 17 Aug 2021 20:50:24 +0900 (JST)
From: Mail Delivery Subsystem <postmaster>
Subject: Cannot display Unicode content
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="=_XXXXXX-XXXXXXXXXX"



--=_XXXXXX-XXXXXXXXXX
Content-Type: text/plain

This E-mail message was determined to be Unicode-formatted
but your E-mail reader does not support Unicode E-mail.

Please use an E-mail reader that supports POP3 with UTF-8
(see https://tools.ietf.org/html/rfc6856.html).

This can also happen when the sender's E-mail program does not
correctly format the sent message.

The original message is included as a separate attachment
so that it can be downloaded manually.

--=_XXXXXX-XXXXXXXXXX
Content-Type: message/global

https://gitlab.com/fetchmail/fetchmail/-/issues/14 のとおり Issue 登録はされている.

なお,fetchmail には他に 32bit 問題があって,サーバのスプール容量が 2G を超えると log に spool サイズがマイナスで表示される,というのがあって,直る気配がない.ログを漁ってたらちょうどマイナスに切り替わるタイミングがあったので,以下.

fetchmail: 68112 messages (68112 seen) for myn at mail.example.com (2137611084 octets).
fetchmail: 68113 messages (68112 seen) for myn at mail.example.com (-2145081713 octets).

ちなみに,以前は Courier Mail Server 側で UTF8 コマンドのチェックをしていなかったはずで,調べてみたら以下の commit とかで導入されたらしい.

追記 (2021/9/3)

fetchmail 6.4.0~beta4-3+deb10u1 を bullseye の 6.4.16-4 に上げたら,上記 (-2145081713 octets). が表示されなくなった.加えて改行まで消える様子で,log がやたら見づらい...どうやら report.c の bug で https://gitlab.com/fetchmail/fetchmail/-/commit/d3db2da1d13bd2419370ad96defb92eecb17064c のパッチが必要な様子.修正すると,(8367740453 octets) とか表示された...Maildir でため過ぎ...

参考:

2021/08/17 19:05 / list git untracked files

作業中で git add していないファイルが溜まってきていて,しかもその内容はもう見たくもない,が,あとで参照する可能性はある...という状況で,git status で大量にそういったファイルがリストされるので,なんとかしたい(なんともならないけど).

まとめてそういったファイルをある新しい directory に移動してしまったら,リストされる行が1行になるので,見た目ストレスが軽減される(なお,通常は git stash -u するが,stash したことを絶対忘れそうなので,git status でなにか untracked なものがあることはリマインドしたい,という話).

untracked files の list は,あまり git の command を覚えていない私的には以下.

% git status -s . | grep '^\?\?'

ただしこれだと,スペースを含むファイルがある際に以下のように double quote を含むようになり,パイプしづらい.

?? "test death.txt"

ということで,調べた範囲だと,以下とするのが良さそう.

git ls-files --others --exclude-standard --directory .

幸い今処理したい working repository では sub-directory に untracked なファイルがないので,

% mkdir work-old
% git ls-files --others --exclude-standard --directory . | while read i ; do mv -v "$i" work-old ; done

ぐらいで1つの directory に untracked files をまとめてしまえる.あるいは -z を使うと null 文字区切りにできるので,以下.

% mkdir -p work-old
% git ls-files --others --exclude-standard --directory -z . | xargs -0 mv -t work-old

mv-t は予め移動先を指定してしまう方法.なお,いずれも work-old も ls-files されてしまうので,以下のように怒られるけど気にしない.

mv: cannot move 'work-old/' to a subdirectory of itself, 'work-old/work-old'

なお,通常は git stash -u する(再度).

Related articles

2021/08/14 11:34 / SpamAssassin をユーザ権限でインストールする

Web サーバ兼 MTA なサーバを(ある組織で)共有で使っているのだけど,以前は SPAM 対策がされていた(おそらくプロプライエタリなもので,SPAM を隔離した旨メールが届いて,Web から確認するタイプのもの)のだけど,サーバリプレースに伴いその機能がなくなり,SPAM が多くなってきた(特に ML で悲惨)ので対策.

もともと procmail + fml でなんとなくシステムを作ってあるので(MTA は postfix と qmail の併用),procmail から簡単に使える SpamAssassin を利用する.タイトルどおりユーザ権限で,必要なものをどんどん入れていく.のメモ.

方針としては以下.

まず,SpamAssassin の機嫌を尋ねる.

ユーザ権限で CPAN でモジュールを入れると ~/perl5/ にファイルがインストールされていく.加えて ~/.cpan/ に管理用(や build)のファイルが溜まっていく.手元環境でインストールしたもの,以下.たぶん.順番とか怪しい.

Mail::SPF は /usr/sbin にファイル(spfd)を copy しようとして失敗する(権限がない; see https://rt.cpan.org/Public/Bug/Display.html?id=34768).以下のようにして $HOME/perl5/bin にインストールするようにする.spfd は今のところ使わないつもり.

cpan Mail::SPF (→ install でコケる)
cd ~/.cpan/build/Mail-SPF-v2.9.0-0 (build directory に移動)
sed 's,/usr/sbin,/home/myn/perl5/bin,' -i Build.PL
cpan .

Mail::DKIM はまず依存する Crypt::OpenSSL::RSA や Crypt::OpenSSL::Random のインストールでこける.これは,手元では独自に OpenSSL をインストールしていて,その OpenSSL のパスを探せず(あるいは設定できず)に嵌った.

Crypt::OpenSSL::RSA は Crypt::OpenSSL::Guess に依存して,これがパスを探してくれるが,カスタムなパスをどのように渡すが謎だったので,直接推定(?)させることにした.~/perl5/lib/perl5/Crypt/OpenSSL/Guess.pm@guesses という連想配列の先頭に '/home/myn/local/bin/openssl' => '/home/myn/local', を追加して,確実にこれが推定されるようにする.ほか rpath 関連もなにか問題があったような気がするが(~/.cpan/CPAN/MyConfig.pmmakepl_argLIBSINC を自前で指定していると Crypt::OpenSSL::Guess の推定が使われないとかだったように思う; makepl_arg の設定をなくし,Crypt::OpenSSL::Guess で正しく推定できれば LD_RUN_PATH 付きで build されていたような気がする).

Mail::DKIM が依存するものがインストールできたとして,次は Mail::DKIM の test でコケる.t/policy.tt/public_key.t のテストでコケていて,

cd ~/.cpan/build/Mail-DKIM-1.20200907-0
% perl -Ilib t/policy.t
1..19
ok 1 - new() works
ok 2 - parse() works
DNS query timeout for _domainkey.policy.test.authmilter.org at lib/Mail/DKIM/DNS.pm line 100.

これ,8.8.8.8 (Google の Public DNS) および 1.1.1.1 (Cloudflare の Public DNS) を DNS サーバ(リゾルバ)としてテストするのが原因(ゲートウェイをパケットが通らない環境なので...).それぞれのテストファイルのリゾルバ(のリスト)の箇所を手元の /etc/resolv.conf に合わせて修正して解決.

Net::LibIDN2 は,そもそも libidn2 (IDN (internationalized domain names) の encode/decode ライブラリ)を install するところから(システム側にヘッダファイルが用意されていない...).

wget https://ftp.gnu.org/gnu/libidn/libidn2-2.3.2.tar.gz
tar zxfv libidn2-2.3.2.tar.gz
cd libidn2-2.3.2
./configure --prefix=/home/myn/local
make
make install

そのうえで cpan Net::LibIDN2 が上記 install した libidn2 を見つけられずに当然ハマる.上記 libidn2.so の symbol が見つけられず perl module LibIDN2.so が load できない,とか.以下でなんとかする.cpan する前に ./Build したかも.いずれにせよ --extra_linker_flags でしていた option 付きで link された LibIDN2.so~/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Net/LibIDN2/LibIDN2.so にインストールされれば OK.ldd LibIDN2.so で自前インストールの libidn2.so に link されているか確認できる.

cd .cpan/build/Net-LibIDN2-1.01-0
perl Build.PL --extra_compiler_flags=-I/home/myn/local/include --extra_linker_flags='-L/home/myn/local/lib -lidn2 -Wl,--rpath,/home/myn/local/lib'
cpan .

色々整った段階でようやく Mail-SpamAssassin をインストール.

tar jxfv Mail-SpamAssassin-3.4.6.tar.bz2
cd Mail-SpamAssassin-3.4.6
perl Makefile.PL CONTACT_ADDRESS=admin@example.com
make
make install

~/perl5/bin/spamassassin に install される.CONTACT_ADDRESS を指定しないとインタラクティブに聞かれる.

SpamAssassin 設定

もう疲れたので,手短に.

% spamassassin -D < mail_file

とかでテストする.はじめは rule が存在しないので sa-update で取得する(かつ cron を仕込んでおく).なお ~/perl5/var/spamassassin/3.004006/ に rule ファイルが置かれる.

~/.spamassassin/user_prefs にユーザ設定を置く.

required_score 10
score SUBJECT_ENCODED_TWICE 0
score DNS_FROM_AHBL_RHSBL 0
report_safe 0
internal_networks 1XX.XX.XX.XX....

whitelist_from ...@....

SPAM 判定のしきい値は高め(10; default は 5)に設定した.スコア 0 にしているものは,以前そのような設定にしたもので,今でもこのルールがあるかどうかは確認していない.internal_networks にはこのメールサーバに到達するために通常通過するサーバをリストする(それらの IP address の良し悪しを評価しなくなる; 評価すると SPAM Score が通常は下がる).

whitelist_fromwelcomelist_from に将来的に(Target Milestone: 4.0.0)変更になる様子だが,現時点(3.4.6)では welcomelist_from と書くと parse error になる.なお,blacklist_fromblocklist_from になる.ただし,spamassassin の report では USER_IN_BLACKLIST DEPRECATED: See USER_IN_BLOCKLIST とか表示されるので感じ悪い.

あとは procmail から spamassassin を filter として呼び出して,その結果に応じて処理をする.procmail をローカル配送に使っていないので,無理やり procmail を呼び出すようにしていて,

[~/.qmail-hoge]
|/usr/bin/procmail /home/myn/spool/procmail/hoge

そのレシピファイルで spamassassin を通して,その結果に応じて処理を変える.以下では spam@example.com に転送しているが,これはローカル配送を想定していて,結果同じメールサーバ(example.com)の Maildir に保存されていく,みないな設定にした.なお spamassassin.lock のロックファイルは $HOME/spamassassin.lock に作成される.

[/home/myn/spool/procmail/hoge]
LOGFILE=$HOME/spool/procmail/log/hoge.`date +%Y-%m`
SENDMAIL=/var/qmail/bin/sendmail
DEFAULT=$HOME/Maildir/.myn/

:0fw: spamassassin.lock
* < 10000000
| /home/myn/perl5/bin/spamassassin

:0
* ^X-Spam-Flag: YES
!spam@example.com

:0c
!myn@example.com

あと,はじめはあまり賢くないので,sa-learn --ham および sa-learn --spam で HAM (!SPAM)と SPAM の違いを覚えさせる.ある程度覚えるとあとは autolearn してくれる(はず).

追記 (2021/8/15)

高速化のために re2c をインストールして,rule ファイルを native code にコンパイルできるようにしていたのだけど,手動で sa-compile する必要があるのを忘れていた(sa-update とともに cron に仕込む).

ただし,手元の CPAN 環境では,手動で実行した感じ以下のようにエラーで落ちる.

Aug 15 14:15:06.345 [4115915] info: generic: base extraction starting. this can take a while...
Aug 15 14:15:06.345 [4115915] info: generic: extracting from rules of type body_0
100% [==========================================================================================] 5277.67 rules/sec 00m00s DONE
100% [==========================================================================================] 4722.65 bases/sec 00m00s DONE
Aug 15 14:15:07.069 [4115915] info: body_0: 1328 base strings extracted in 1 seconds
cd /tmp/.spamassassin4115915hkQrfJtmp
reading bases_body_0.in
cd Mail-SpamAssassin-CompiledRegexps-body_0
re2c -i -b -o scanner1.c scanner1.re
re2c -i -b -o scanner2.c scanner2.re
re2c -i -b -o scanner3.c scanner3.re
re2c -i -b -o scanner4.c scanner4.re
re2c -i -b -o scanner5.c scanner5.re
re2c -i -b -o scanner6.c scanner6.re
re2c -i -b -o scanner7.c scanner7.re
/usr/bin/perl Makefile.PL PREFIX=/tmp/.spamassassin4115915hkQrfJtmp/ignored INSTALLSITEARCH=/home/myn/perl5/var/spamassassin/compiled/5.026/3.004006 
Only one of PREFIX or INSTALL_BASE can be given.  Not both.
command failed: exit 25

CPAN の初期設定段階で ~/.zshrc に以下が書かれていたのが原因の様子.ということで PERL_MM_OPT= sa-compile でうまく compile できる.

PERL_MM_OPT="INSTALL_BASE=/home/myn/perl5"; export PERL_MM_OPT;

踏まえて仕込んだ cron (から呼ばれる script)はだいたい以下のような感じ.case 文は Debian の /etc/cron.daily/spamassassin を参考にした.

/home/myn/perl5/bin/sa-update
case $? in
    0)
        # got updates!
        PERL_MM_OPT= sa-compile
        ;;
    1)
        # no updates
        ;;
    2)
        # lint failed!
        ;;
    *)
        echo "sa-update failed for unknown reasons" 1>&2
        ;;
esac

コンパイルされたものは ~/perl5/var/spamassassin/compiled/ に置かれることになる.

追記 (2021/8/16)

書き忘れていた.コンパイルされた rule を利用するには ~/perl5/etc/mail/spamassassin/v320.pre の以下の行のコメントアウトを外す.

loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody

Related articles

2021/08/12 10:40 / Backup and Sync (バックアップと同期) から Drive for Desktop (パソコン版 Google ドライブ) に移行

Sync content across all devices with Drive for desktop のとおり Backup and Sync (バックアップと同期) から Drive for Desktop (パソコン版 Google ドライブ)への移行が推奨されている.というか Backup and Sync は今後使えなくなる.

移行についてもう少し詳細な Instruction が公開されるのでは? とか思って様子見していたのだけど,特にそういった気配はなく,どうやら単に Drive for Desktop をインストール(Backup and Sync に対して上書きインストール?)すれば良いらしい(←と,どこかに書いておいてくれてたら良かったのに...).

Drive for Desktop インストール時のメモ(Backup and Sync がすでにインストールされている場合).

2021/08/06 01:25 / Gmail で以前スヌーズしたメールを探す

Inbox by Gmail の機能(の一部)が Gmail に統合されて久しいが,そのうちスヌーズ機能に関して,以前スヌーズしたメールを探すやり方などなどがよくわからなかったので,メモ.公式ドキュメントにはいまいち明記されていない様子.

手元で試した感じこれらは排他的になっていて,snooze 終了後に pinned というラベルが付加され,再度 snooze すると pinned というラベルが削除される,という仕様になっている様子.なので,両方同時にリストするには in:snoozed OR label:pinned とする(in:snoozed OR label:pinned だと ∅).

なお,pinned というラベルは Inbox by Google の「ピン留め」機能の名残っぽい.

参考:

2021/08/02 15:18 / Gnome の Autostart を制御する

いつのまにか Login する度に Xilinx Information Center (xic) と Skype for Linux と Teams が起動するようになっていて,それらを止めたいという話.~/.config/autostart/ にある .desktop file を削除すると解決する.

2021/07/23 20:04 / 日本語 Markdown の改行が Pandoc でスペースに変換される問題(`east_asian_line_breaks` 拡張)

日本語で書いた Markdown を pandoc で変換する際,改行がスペースに変換されてしまう問題,east_asian_line_breaks という拡張が存在していてそれを使えば解決できるらしい.今まで改行なしでパラグラフを書いていて,git diff とかが見づらかったのだが,これで解決できる.

% cat test.md
これ
は
this is
a test
です
% cat test.md | pandoc -f markdown
<p>これ は this is a test です</p>
% cat test.md | pandoc -f markdown+ignore_line_breaks
<p>これはthis isa testです</p>
% cat test.md | pandoc -f markdown+east_asian_line_breaks
<p>これは this is a test です</p>

Related articles

2021/07/22 17:24 / WordPress Application Passwords and PHP Basic Auth

WordPress が動作しているサーバでいろいろコマンドラインから操作するには WP-CLI を使えば良いのだが,そうではなくて WordPress が用意している API を叩くというアプローチは無いのだろうか? と思ったら,当然あって,REST APIが用意されている.

認証まわりも Application Passwords が使えて,Application Passwords Plugin 自体 WordPress 5.6 で本体に取り込まれている.

ということでApplication Passwords: Integration Guideに従って使ってみようとしたのだが,Basic Auth (ベーシック認証)がうまく行かず悩む.

% curl --user 'USERNAME:PASSWORD' 'https://myn.example.com/?rest_route=/wp/v2/users/me' | jq

上でユーザ情報が得られたら正しく動作していることになるのだが,以下が返ってくる.

{
  "code": "rest_not_logged_in",
  "message": "You are not currently logged in.",
  "data": {
    "status": 401
  }
}

そもそも PHP が Basic Auth の情報を受け取らなければ,認証情報が WordPress に渡らないわけで,HTTP authentication with PHP を参考にテストしつつ,最終的には https://www.php.net/manual/en/features.http-auth.php#114877 にある以下を .htaccess に書いて,正しく動作するようになった(お名前.com 共用サーバーSD).

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

これがあると HTTP_AUTHORIZATION という環境変数で HTTP ヘッダの Authorization の情報(Basic ...)が PHP に渡される.

あと,メモがてら Server process から CGI が起動される際に渡される環境変数をチェックするためのスクリプト(サーバの情報ダダ漏れになるので,使ったあとは削除).

[test.cgi]
#!/bin/sh

echo Content-Type: text/plain
echo
env

REST API が使えるようになったので,いちいち Web I/F で操作していた部分を一部自動化しようかと.

追記 (2021/7/23)

どうやら Pages の Update ができない.https://developer.wordpress.org/rest-api/reference/pages/ を見る限り API は用意されていそうなのだけど,POST 自体は成功する(content の raw で新しいデータを POST)けど更新されない...

2021/07/19 11:11 / Linux 5.13

Linux 5.13 出てた.5.12.XX から .config がどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.今回やるきなし.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-512-features 参照.Apple M1 support.

+CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
+CONFIG_ARCH_USE_MEMTEST=y
+CONFIG_AS_IS_GNU=y
+CONFIG_AS_VERSION=23101
+CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
+CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
+CONFIG_MODPROBE_PATH="/sbin/modprobe"
+CONFIG_MODULE_COMPRESS_NONE=y
+CONFIG_NETFILTER_XTABLES_COMPAT=y
+CONFIG_NETFS_SUPPORT=y
+CONFIG_NET_SELFTESTS=y
+CONFIG_NET_SOCK_MSG=y
+CONFIG_NET_VENDOR_MICROSOFT=y
+CONFIG_PCPU_DEV_REFCNT=y
+CONFIG_SND_CTL_LED=m
-CONFIG_BOUNCE=y
-CONFIG_HAVE_NET_DSA=y
-CONFIG_TOUCHSCREEN_PROPERTIES=y

追記 (2021/7/19)

Linux 5.13 では以下が compile できない.

/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-modeset.c: In function ‘__will_generate_flip_event’:
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-modeset.c:96:23: warning: unused variable ‘primary_plane’ [-Wunused-variable]
     struct drm_plane *primary_plane = crtc->primary;
                       ^~~~~~~~~~~~~
   ./tools/objtool/objtool orc generate  --module  --no-fp   --retpoline  --uaccess  /var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-linux.o
   ./tools/objtool/objtool orc generate  --module  --no-fp   --retpoline  --uaccess  /var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nv-pci-table.o
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:311:23: error: initialization of ‘int (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘int (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
     .atomic_check   = nv_drm_plane_atomic_check,
                       ^~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:311:23: note: (near initialization for ‘nv_plane_helper_funcs.atomic_check’)
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:312:23: error: initialization of ‘void (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘void (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
     .atomic_update  = nv_drm_plane_atomic_update,
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:312:23: note: (near initialization for ‘nv_plane_helper_funcs.atomic_update’)
/var/lib/dkms/nvidia-current/460.73.01/build/nvidia-drm/nvidia-drm-crtc.c:313:23: error: initialization of ‘void (*)(struct drm_plane *, struct drm_atomic_state *)’ from incompatible pointer type ‘void (*)(struct drm_plane *, struct drm_plane_state *)’ [-Werror=incompatible-pointer-types]
     .atomic_disable = nv_drm_plane_atomic_disable,
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~

460.67 Incompatible with Kernel 5.13 at the moment の patch を当てる必要がある.nvidia-legacy-390xx-kernel-dkms については patch に失敗するので手動で調整.

Related articles

2021/07/05 12:59 / pdftk で PDF ファイルの password を削除する

2020/9/15 17:56 / 256-bit AES encrypted PDF file に書いたとおりなのだけども,バルク処理したい時のメモ.

% for i in *hoge*.pdf ; do pdftk "$i" input_pw XXXX output "$i:r-decrypt.pdf" ; done

で一旦確認してから,

% for i in *-decrypt.pdf ; do mv -v "$i" "${i%-decrypt.pdf}.pdf" ; done

とか.

Related articles

2021/06/13 18:21 / Emacs でお手軽オレオレモード

以前一度作成して,その修正(具体的には keybind を追加)したくて,なかなか思い出せなかったので備忘まで.

端的には generic.eldefine-generic-mode というマクロを使う.ここで,呼び出される関数を定義可能なので,そこで keybind (keymap) を書く.keymap の object (構造) は make-sparse-keymap で作成する.そこに define-key で key を追加していく.こうして作った keymap を利用するには use-local-map を使う(というのを mode が呼び出される際に評価されるように書いておく).

参考:

2021/05/20 17:34 / pLaTeX で全角疑問符(?)の後にスペースが入る

今まで気づかなかったのだが,pLaTeX では全角疑問符(?)の後にスペースが入るらしい.LaTeX で書くような文章であまり全角疑問符を使わなかったから気づかなかったなのかも.

ただし「?」の後が全角の「)」だとスペースが入らない.「?」の後にスペースを入れないようにするには \mbox{?} とする.

日本語の文章での括弧は全角を使うべきということになっている(*1)のだけど,あんまり全角括弧は使いたくなくて,その割に疑問符(感嘆符も)については全角の方が大きくてインパクトがあるので全角を使いたい,という妙なこだわりで無駄に嵌る.

*1: 英文フォントの半角括弧はディセンダの箇所(yやgのベースラインから下の箇所)まであるので,括弧が下にはみ出るように見える)

\begin{itemize}
\item \mbox{?}A
\item ?A
\item ?\,A
\item ?~A
\item ? A
\item \mbox{?}あ
\item ?あ
\item ?\,あ
\item ?~あ
\item ? あ
\item ?A
\item (?)A
\item (?)A
\item (?)A
\item (?)A
\end{itemize}
pLaTeX ? test

2021/05/15 17:09 / MediaWiki で docx ファイルの移動(rename)

MediaWiki で docx ファイルを移動(rename)しようとすると以下のように怒られる.

The page could not be moved, for the following reason:
The new file extension does not match its type.

もとの docx は手元では MIME type: application/zip としてアップロードされており,たぶん拡張子が .zip ではないということで怒られているような気がする.MS Word のファイル(docx)が zip であると判定されるのは,docx が実は zip であるというだけ(拡張子を zip に変更すると zip で展開できる).

一旦削除して再アップロードしてしまったので,解決可能か全く不明だが,LocalSettings.php に以下を書いておくことにした.

$wgMimeDetectorCommand = "file -bi";

file コマンドは docx を application/vnd.openxmlformats-officedocument.wordprocessingml.document と判定する.ただし https://www.mediawiki.org/wiki/Manual:$wgMimeDetectorCommand に以下のようにあって,これで直るかどうかは不明.

It is important to note that MediaWiki itself performs a set of MIME detection tests itself, and only if those are unsuccessful is the MIME detector invoked.

追記 (2021/5/16)

結局上記では直らなかった.移動の際にこのチェックを行っているのは includes/MovePage.php の以下の箇所で,この箇所コメントアウトしたら無事ファイル(File:)の移動ができるようになった.

if ( !File::checkExtensionCompatibility( $file, $this->newTitle->getDBkey() ) ) {
    $status->fatal( 'imagetypemismatch' );
}

Related articles

2021/05/08 10:38 / UUDeview を ruby の mail.rb で代替

uudeview でメールのファイルから添付ファイル(当然 uuencode されたものではなく,MIME)を取り出したかったのだけど,日本語のファイル名で文字化けが酷いので,ruby でなんとかする.以下であっさり添付ファイルをファイルに落とせる.

cat 200000.eml | ruby -e "require 'mail'; Mail.read_from_string(STDIN.read).attachments.each { |i| File.open(i.filename, 'w').write(i.decoded) }"

Ruby の Mail は非常に便利.

2021/05/01 15:27 / bbdb3 bbdb-merge-records に key を割り当てる

以前は bbdb-merge-records がなにがしかの key に割り当てられていたはずなのだけど,describe-mode した感じどの key にも割り当てられていない状態になっていて,いちいち M-x bbdb-merge-records は面倒なので割り当てる.

(define-key bbdb-mode-map "r" 'bbdb-merge-records)

Default では M に割り当てられていたけれど http://git.savannah.gnu.org/gitweb/?p=emacs/elpa.git;a=commitdiff;h=ee9feb6183052ae2d5a528ab5748cdc1a5ceb9b1Mbbdb-mail-address に変更になっていた様子(2010頃).r に割り当てられていた気もするのだけど,もしかすると自身で設定していたのかも.

Related articles

2021/04/29 13:58 / Markdown のスペース数問題

Markdown の itemize (unordered list, ul) や enumerate (ordered list, ol) で使うスペースの数でいつも悩む.Emacs の markdown-mode の default は 4文字に揃うようにスペースが入る.ただこれだと markdownlint (MDL)怒られる(MD030)MDL の場合の default は - の後にスペース1つ.

一般的には4文字アラインメントが推奨されているはずで,ただ各 item がシンプルで短くたとえば1段落である場合はスペース1つにするべき,という話もある

MDL に従ってスペース1つに直しつつあったが,すべて4文字アラインメントにすることにした(code block との親和性もあるし,markdown-mode が使えれさえすれば良くてスペースの多さはあまり気にならないので).MDLMD030 を無視するには .mdlrcrules "~MD030" を書いていく.

あと AsciiDoc を使う選択肢もあるかもしれないが,Emacs major mode が未だ貧弱なので後回し.

Related articles

2021/04/28 18:58 / Linux 5.12

Linux 5.12 がでたので 5.11.11 から .config がどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-512-features 参照.

などなど.

Related articles

2021/04/21 17:52 / MATLABライセンスサーバが no such file or directory で起動できない

mathworks_network_license_manager_glnxa64.zip を展開して得られる MATLAB ライセンスサーバのバイナリが謎の no such file or directory で起動できない.以下の通り.

 % ls -la lmgrd
-r-xr-xr-x 1 myn users 1166680 Nov 15 09:16 ./lmgrd
 % ./lmgrd 
zsh: no such file or directory: ./lmgrd

これ,以下の通りバイナリの interpreter/lib64/ld-lsb-x86-64.so.3 になっているのが原因.Debian GNU/Linux にはこのファイルがない.

 % file lmgrd
lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped

/lib64/ld-linux-x86-64.so.2 への symlink として /lib64/ld-lsb-x86-64.so.3 を作成するか,以下のようにすると起動できる.

 % /lib64/ld-linux-x86-64.so.2 ./lmgrd
(略)

参考:

2021/02/03 16:25 / find した結果それぞれに対する処理

いつも忘れるのでメモ.

find . -type f とかで file をリストして,そのそれぞれに chmod 644 をしたい,とかそういう話.Windows とかから Linux に rsync したすべて 777 の file/directory に対して,

してもいいし,chmod 644 `find . -type f` で全てのファイルに対して chmod 644 してもいいのだけど,ファイル名やディレクトリ名にスペースが含まれると大変ややこしい.

2通りやり方があって,1つは find-exec option を使う方法.{} は引数に置換され,\; で終了を表す.{}\; の間にはスペースが必要.

もう1つは xargs を使う方法.find-print0 オプションは null 文字(^@)を区切りにしてリストするので,それを xargs -0 で 1つずつ処理していく.

あるいは shell の機能でなんとかするか.$i" でくくるのがポイント.

Related articles

2021/01/13 21:27 / brtfs 上に swap ファイルを置く

btrfs 上の file を swap file として利用しようとすると,以下のように kernel に怒られる.

[1646778.804931] BTRFS warning (device nvme0n1): swapfile must not be copy-on-write

これを回避するには以下のようにして copy-on-write (CoW) の機能を off にしたファイルを作成して swapon する(要 Linux 5.0以降).

% sudo touch swap
% sudo lsattr swap
-------------------- swap
% sudo chattr +C swap
% sudo lsattr swap
---------------C---- swap
% sudo fallocate -l 2g swap
% sudo chmod 600 swap
% sudo mkswap swap
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=(snip)
% sudo swapon swap

touch してから fallocate する必要があるので注意.See man chattr.

A file with the ‘C’ attribute set will not be subject to copy-on-write updates. This flag is only supported on file systems which perform copy-on-write. (Note: For btrfs, the ‘C’ flag should be set on new or empty files. If it is set on a file which already has data blocks, it is undefined when the blocks assigned to the file will be fully stable. If the ‘C’ flag is set on a directory, it will have no effect on the directory, but new files created in that directory will have the No_COW attribute set.)

Related articles

2021/01/12 14:52 / gnome-shell で Alt-tab で group ベースの window switch (swith-application)をしない

gnome-shell の Alt-tab は window を純粋にスイッチ(switch-windows)するわけではなく,複数 window がある application はグループ化されてしう.グループ化された window グループ内で window を switch されるためには Alt-`,あるいは Alt-tab で window switcher を出した状態で矢印キーを使う必要がある.ということで Alt-tab で group ベースの window switch をしたくなくて,そのための設定.

具体的には switch-applications に割り当てられている <Alt>Tab を switch-windows に移動する.以下.dconfdconf-editor (GUI)でも同じようなことができる.

現在の設定の確認:

% gsettings get org.gnome.desktop.wm.keybindings switch-applications
['<Super>Tab', '<Alt>Tab']
% gsettings get org.gnome.desktop.wm.keybindings switch-windows
@as []

設定の変更:

% gsettings set org.gnome.desktop.wm.keybindings switch-applications "['<Super>Tab']"
% gsettings set org.gnome.desktop.wm.keybindings switch-windows "['<Alt>Tab']"

変更後の設定の確認:

% gsettings get org.gnome.desktop.wm.keybindings switch-applications
['<Super>Tab']
% gsettings get org.gnome.desktop.wm.keybindings switch-windows
['<Alt>Tab']

なお,グループ化された window グループ内で window を switch されるための Alt-` は以下のような default 設定になっていて,

% gsettings get org.gnome.desktop.wm.keybindings switch-group
['<Super>Above_Tab', '<Alt>Above_Tab']

ここで Above_Tab は ` のことで,Tab の上にあるキーであることが想定されている.標準的な英語キーボードがそのようなレイアウト(HKKBの場合は英語配列でも右上端に ` がある.).

追記 (2021/12/4)

関連する org.gnome.desktop.wm.keybindings の key をまとめると以下.

GUI では Settings → Keyboard → Keyboard Shortcuts → View and Customize Shortcuts → Navigation →

他に

がある(これらは window を list 表示しない).

参考:

Related articles

2021/01/08 15:00 / WordPress を独自にバージョン管理している場合でも自動更新する

もろもろの設定等のログを残すために WordPress を git で管理しているのだが,.git ディレクトリが存在する場合は以下のように表示されて自動更新が無効化される.

関連するファイル・関数は以下.

automatic_updates_is_vcs_checkout というフィルタがあるので,これを使えば制御できる.自動更新を(バージョン管理下でも)有効にする場合は以下を wp-content/mu-plugins/automatic_updates.php とかに置いておく.

<?php
add_filter( 'automatic_updates_is_vcs_checkout', '__return_false', 1 );

参考:

2020/12/07 15:39 / snmpd の起動 option を systemd で変更する

snmpd の default の logging に関する option が -Lsd で,syslog の LOG_DAEMON に送るような設定になっている.これが結構 verbose (LOG_NOTICE が送られる)なので,-LSwd に変更して LOG_WARNING の level に変更したい,という話.

以前は /etc/default/snmpd で設定できていたのだが,/etc/init.d/snmpd/etc/default/snmpd を source しているように見せかけて,実は systemctl が呼び出される仕組みが導入されており,/etc/default/snmpd を変更したところで設定が反映されない./etc/default/snmpd にも以下のようにそんなことが書いてある.

# This file controls the behaviour of /etc/init.d/snmpd
# but not of the corresponding systemd service file.
# If needed, create an override file in
# /etc/systemd/system/snmpd.service.d/local.conf
# see man 5 systemd.unit and man 5 systemd.service

で,/etc/systemd/system/snmpd.service.d/local.conf を作成するというのはいわゆる drop-in ファイルを作るというもので,sudo systemctl edit snmpd.service で作成される /etc/systemd/system/snmpd.service.d/override.conf と同様(local.conf でも問題ない; man systemd.unitlocal.conf で説明されている).

drop-in については man systemd.unit が詳しい.

Note that for drop-in files, if one wants to remove entries from a setting that is parsed as a list (and is not a dependency), such as AssertPathExists= (or e.g. ExecStart= in service units), one needs to first clear the list before re-adding all entries except the one that is to be removed. Dependencies (After=, etc.) cannot be reset to an empty list, so dependencies can only be added in drop-ins. If you want to remove dependencies, you have to override the entire unit.

あと,drop-in ファイルを用意したあとは sudo systemctl daemon-reload が必要(sudo systemctl edit で編集した場合は不要; see man systemctl).

2020/10/02 17:29 / GNU Mailman で送付されてきたメールに対する MHonArc+Namazu システム構築

MHonArc+Namazu での Namazu の UTF-8 対応の続き.MLシステムが刷新されて fml から GNU Mailman に変更になったため対応.

fml はメールのヘッダに X-Mail-Count というフィールドがあって,ここに何件目の投稿かの番号が振られていたのだが,GNU Mailman に変更されてこのフィールドを参照できなくなった.GNU Mailman 側で対応してもらう手もあるが(https://shugo.net/jit/20100213.html等),これは期待できないので,幸い Subject の形式が [ML-Name:Count] Mail Subject だったので,ここから抽出する.mhamain.pl への追加パッチ以下.抽出に失敗したときのことはやるきがないので知らない.あと perl っぽい書き方もよく分かっていないので ruby っぽい書き方になってる.

--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -932,7 +932,13 @@ sub read_mail_header {
     ##------------------##
     if (defined($SEQNUMFIELD)) {
         $seq = $fields->{$SEQNUMFIELD}[0];
-        $seq =~ s/(\d+)/$1/;
+        if ($seq =~ /^(\d+)$/) {
+            $seq=$1;
+        } elsif ($seq =~ /^\[\S+?:(\d+)\].*$/) {
+            $seq=$1;
+        } else {
+           $seq='';
+       }
         print STDOUT "($seq)";
     }
     ##------------------##

ついでに...MHonArc は URL をリンクに変換してくれるのだが,URL 末尾に全角スペースがあると,それも URL の一部だと解釈される.ということで URL 末尾に %E3%80%80 がついたベージに飛ばされる.ぴえんだ.これを修正するパッチは以下.こちらもやるきなし.変に表示が詰まるのを避けるため,末尾に全角スペースがあった場合は</a>の後にスペースを入れることにしている.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@ sub filter {
        ($HUrlExp)
    }{
        if (!defined($nolink) && !defined($link)) {
+                my $a = $1;
+                my $b = '';
+                $a =~ s/ +$/ /;
+                if ($a =~ /^(.*) +$/) {
+                    $a = $1;
+                    $b = ' ';
+                }
        join('', '<a ', $target, ' rel="nofollow" href="',
-            $1, '">', $1, '</a>');
+            $a, '">', $a, '</a>', $b);
        } else {
        my $url_match = $1;
        my $scheme;

追記 (2021/7/21)

上のパッチだと文末の全角スペースのみしか考慮していない.全角スペースのあとに文字がある場合にも対応するには以下.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -576,10 +576,10 @@ sub filter {
        if (!defined($nolink) && !defined($link)) {
                 my $a = $1;
                 my $b = '';
-                $a =~ s/ +$/ /;
-                if ($a =~ /^(.*) +$/) {
+                $a =~ s/ +/ /;
+                if ($a =~ /^([^ ]*)(.*)$/) {
                     $a = $1;
-                    $b = ' ';
+                    $b = $2;
                 }
        join('', '<a ', $target, ' rel="nofollow" href="',
             $a, '">', $a, '</a>', $b);

もとの /usr/share/mhonarc/mhtxtplain.pl からの patch は以下.

--- a/perl/mhtxtplain.pl
+++ b/perl/mhtxtplain.pl
@@ -574,8 +574,15 @@
        ($HUrlExp)
    }{
        if (!defined($nolink) && !defined($link)) {
+                my $a = $1;
+                my $b = '';
+                $a =~ s/ +/ /;
+                if ($a =~ /^([^ ]*)(.*)$/) {
+                    $a = $1;
+                    $b = $2;
+                }
        join('', '<a ', $target, ' rel="nofollow" href="',
-            $1, '">', $1, '</a>');
+            $a, '">', $a, '</a>', $b);
        } else {
        my $url_match = $1;
        my $scheme;

Related articles

2020/09/27 18:10 / xls(x) to csv using libreoffice

いつも忘れるのでメモ.以下で input.xlsxinput.csv に変換できる.環境は Debian GNU/Linux の libreoffice package.

% libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)":44,34,76 --outdir . input.xlsx

44,34,76 の意味は

% libreoffice --headless --convert-to csv:"Text - txt - csv (StarCalc)" --outdir . input.xlsx

のように Default でも input.csv は生成されるが日本語が全て ? になってしまう.ということで Character Set の指定が必要で,3つの Token を与える.詳細は https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options のとおり.

追記 (2021/8/7)

csv (UTF-8)から xlsx への変換も同様に可能で,例えば以下.

% libreoffice --headless --convert-to xlsx --infilter="CSV:44,34,76" --outdir . input.csv

なお,MS Excel で CSV を直接開くには,もとの CSV の文字コードが Shift_JIS でなければならないはずで,UTF-8 の CSV を MS Excel に読み込むには「データ→テキストまたはCSVから」でインポートする必要がある.

Related articles

2020/09/15 17:56 / 256-bit AES encrypted PDF file

PDFがメールで送られてきていて,パスワードも知らされていたのだが Evince で開けない(伝えられたパスワードが微妙に間違っているのではないかと思い script で結構な数のパスワードを試してしまった...).

調べたところ 256-bit AES (Acrobat X or later) で暗号化されていて,未対応で開けない様子だった.

256-bit AES (Acrobat X or later)

手元の環境でいろいろ調べたところ Debian buster だと尽く未対応の様子.Debian sid でも pdftk が未対応(その代わり qpdf という program がある).google-chrome がもっとも汎用性が高いのかも知れない.

以下,qpdf および pdftk で decrypt するコマンドメモ.

% qpdf --decrypt --password=XXXX encrypted_file.pdf output_file.pdf
% pdftk encrypted_file.pdf input_pw XXXX output output_file.pdf

Related articles

2020/09/11 20:24 / Linux 5.9-rc4

Linux 5.9-rc1 がでたので(既に rc4 になってるけど),5.8.8 から .configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-59-features 参照.

追加

削除

Related articles

2020/09/11 19:13 / /dev/md126 が Linux 5.8.8 で認識されない

Kernel を Linux 5.7.X から Linux 5.8.8 に上げたら /dev/md126/dev/md127 が見えなくなった.Kernel の問題なのか,udev の問題なのか,あるいは mdadm の問題か,という感じで順番に探っていったのだけど,Kernel と mdadm の問題だった.

Linux 5.8.8 の block: fix locking in bdev_del_partition の修正で,BLKPG_DEL_PARTITION ioctl の仕様が微妙に変更になっていて,mdadm がこの ioctl を使ってブロックデバイスが partition か否かをチェックしていて,そこで挙動がおかしくなっていた.

mdadm の該当箇所 util.cは以下のとおりで,errnoENXIOENOTTY の場合は partition ではないと判断している.Linux 5.7.19 では partition ではない場合 ENXIO (No such device or address)が返される.これが,Linux 5.8.8 では ENOMEM (Cannot allocate memory)が返される.うーん.

int test_partition(int fd)
{
    /* Check if fd is a whole-disk or a partition.
     * BLKPG will return EINVAL on a partition, and BLKPG_DEL_PARTITION
     * will return ENXIO on an invalid partition number.
     */
    struct blkpg_ioctl_arg a;
    struct blkpg_partition p;
    a.op = BLKPG_DEL_PARTITION;
    a.data = (void*)&p;
    a.datalen = sizeof(p);
    a.flags = 0;
    memset(a.data, 0, a.datalen);
    p.pno = 1<<30;
    if (ioctl(fd, BLKPG, &a) == 0)
        /* Very unlikely, but not a partition */
        return 0;
    if (errno == ENXIO || errno == ENOTTY)
        /* not a partition */
        return 0;

    return 1;
}

sudo mdadm --detail-platform は 5.7.19 と 5.8.8 で出力は同じ.一方 sudo mdadm --examine /dev/sda (sda は RAID メンバの1つ)の出力が両者で異なっていたので,そこから探っていって問題箇所を見つけた.

Linux 5.7.19 での sudo mdadm --examine /dev/sda は以下で,

/dev/sda:
          Magic : Intel Raid ISM Cfg Sig.
        Version : 1.3.00
    Orig Family : 231b061f
         Family : 231b061f
     Generation : 00e7c753
     Attributes : All supported
           UUID : (snip)
       Checksum : (snip)
    MPB Sectors : 2
          Disks : 4
   RAID Devices : 1

  Disk01 Serial : (snip)
          State : active
             Id : 00000001
    Usable Size : (snip)

[Volume0]:
           UUID : (snip)
     RAID Level : 5
        Members : 4
          Slots : [UUUU]
(snip)

Linux 5.8.8 の sudo mdadm --examine /dev/sda は以下.

/dev/sda:
   MBR Magic : aa55
Partition[0] :   (snip) sectors at            1 (type ee)

ということで,mdadm 側に以下のパッチをあてると解決する.

--- mdadm-4.1/util.c    2018-10-02 03:26:06.000000000 +0900
+++ mdadm-4.1/util.c    2020-09-11 18:59:17.924356095 +0900
@@ -524,7 +524,7 @@
    if (ioctl(fd, BLKPG, &a) == 0)
        /* Very unlikely, but not a partition */
        return 0;
-   if (errno == ENXIO || errno == ENOTTY)
+   if (errno == ENXIO || errno == ENOTTY || errno == ENOMEM)
        /* not a partition */
        return 0;
 

手元環境 Debian なので上記 patch をあてた mdadm のパッケージを作って,dpkg -i で突っ込んで,mdadminitrd にも含まれることになるので initrd が更新されていなければ sudo update-initramfs -k all -u で作り直す.

追記 (2020/9/18)

ENOMEM が返される問題,Linux 5.8.10 で仕様がもとにもどされて(block: restore a specific error code in bdev_del_partition),今は ENXIO を返すようになっている.

Related articles

2020/09/09 21:09 / ImageMagick で空の PDF 作成に失敗する

以下のようなコマンドで通常は A4 サイズの空の PDF を作成出来るのであるが(pdftk とかで空のページを挿入するなどの時に便利),まさに以下のようにコケる.

 % convert xc:none -page A4 empty.pdf
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.

Debian GNU/Linux buster で imagemagick の version は 8:6.9.10.23+dfsg-2.1+deb10u1

原因は /etc/ImageMagick-6/policy.xml に以下の様に記載されていること.

  <!-- disable ghostscript format types -->
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />

PDF の箇所を

<policy domain="coder" rights="read|write" pattern="PDF" />

に修正すれば解決する./etc/ImageMagick-6/policy.xml を直接修正するか,それを ~/.magick/policy.xml にコピーして自分用のそれを修正するか.

Related articles

2020/08/28 13:59 / ffmpeg を使って mp4 の一部を削除する

お手軽に ffmpeg を使って mp4 の一部を削除するメモ.

[Makefile]
FILES=input-0.mp4 input-1.mp4
output.mp4: $(FILES:.mp4=.ts)
    t=`echo $(FILES:.mp4=.ts) | sed 's, ,|,'` ;\
    ffmpeg -y -i "concat:$$t" -c copy -bsf:a aac_adtstoasc $@
input-0.mp4: input.mp4
    ffmpeg -y -t "59:32" -i $< -c copy $@
input-1.mp4: input.mp4
    ffmpeg -y -ss "59:38" -i $< -c copy $@
$(FILES:.mp4=.ts): %.ts: %.mp4
    ffmpeg -y -i $< -c copy -bsf:v h264_mp4toannexb -f mpegts $@

MP4 (Video: h264, Audio: aac) を想定.59分32秒のところまでの mp4 と 59分38秒から終わりまでの mp4 を作成して,それを(一旦TSを経由して)結合(つまりその間の6秒をカット).コーデックはそのまま(copy)なので高速に (ほぼディスクアクセスのみで)処理できる反面,切り出し指定の精度はかなり悪いので,ざっくりとした削除しかできないけど.

TSを経由するのは https://trac.ffmpeg.org/wiki/Concatenate を参考にした.以下とのこと.

If you have MP4 files, these could be losslessly concatenated by first transcoding them to MPEG-2 transport streams.

2020/08/26 17:03 / Wanderlust obsoletes elmo-replace-in-string

Wanderlust (Debian 版 wl-beta 2.15.9+0.20200822-1)でサマリ表示で Error になり焦る.原因は Obsolete elmo-replace-in-string. Use replace-regexp-in-string. により elmo-replace-in-string が削除されたこと.elmo-replace-in-stringreplace-regexp-in-string に単純に replace すれば直る.wl-summary-subject-filter-function を default の wl-summary-default-subject-filter 以外にカスタマイズしている人が影響を受ける.

また,http://www.fan.gr.jp/~ring/Meadow/wanderlust.htmlhttps://uwabami.github.io/cc-env/Emacs.html にあるような Wanderlust 設定例を参考にして,以下で Subject に含まれる複数の Tab/Space を無視する設定をしている人も修正が必要.

(defadvice std11-unfold-string (after simply activate)
  (setq ad-return-value
        (elmo-replace-in-string ad-return-value "[ \t]+" " ")))

2020/08/07 23:01 / LaTeX の default の paper size

以前

% sudo tl-paper set all a4
/usr/bin/tl-paper: setting paper size for dvipdfmx to a4.
/usr/bin/tl-paper: setting paper size for dvips to a4.
/usr/bin/tl-paper: setting paper size for pdftex to a4.
/usr/bin/tl-paper: setting paper size for xdvi to a4.

で defailt の paper size を letter から a4 に変更できたはずなのだが,なぜか効かない.上記でたとえば pdftex (pdflatex)なら /var/lib/texmf/tex/generic/config/pdftexconfig.tex が以下のように変更はされている.

--- pdftexconfig.tex.orig  2020-08-07 20:48:23.642640762 +0900
+++ pdftexconfig.tex       2020-08-07 23:00:43.181888255 +0900
@@ -6,8 +6,8 @@
 \pdfoutput           = 1
 
 % Paper size: dimensions given in absolute terms
-\pdfpageheight       = 11 true in
-\pdfpagewidth        = 8.5 true in
+\pdfpageheight       = 297 true mm
+\pdfpagewidth        = 210 true mm
 
 % Enable PDF 1.5 output and thus more compression
 \pdfminorversion     = 5

どうやら /var/lib/texmf/web2c/pdftex/pdflatex.fmt を作り直す必要があるらしい.以下のようにdpkg-reconfigure texlive-baseするか,そこからトリガされているtex-commondpkg-reconfigureしてやればいいらしい.

 % sudo dpkg-reconfigure texlive-base
mktexlsr: Updating /var/lib/texmf/ls-R-TEXLIVEDIST...
mktexlsr: Updating /var/lib/texmf/ls-R-TEXMFMAIN...
mktexlsr: Updating /var/lib/texmf/ls-R...
mktexlsr: Done.
tl-paper: setting paper size for dvips to a4: /var/lib/texmf/dvips/config/config-paper.ps
tl-paper: setting paper size for dvipdfmx to a4: /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg
tl-paper: setting paper size for xdvi to a4: /var/lib/texmf/xdvi/XDvi-paper
tl-paper: setting paper size for pdftex to a4: /var/lib/texmf/tex/generic/config/pdftexconfig.tex
Processing triggers for tex-common (6.15) ...
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
        This may take some time... done.

Related articles

2020/08/03 19:39 / gb2312 の MIME decode @Wanderlust

Wanderlustで最近良く中国からのメールで文字化けを起こす.原因は

Content-Type: text/plain; charset="gb2312"

(gb2312)のメールなのに実態は gb18030ということが原因ならしい.ちなみに送信元は Outlook.com.

Wanderlustで文字化け無しで見れるようにするには

(eval-after-load "mcs-20"
  '(add-to-list 'mime-charset-coding-system-alist
        '(gb2312 . gb18030)))

とすればいい.mcs-20.elapelのファイルで,mime-charset-coding-system-alistdefcustom の以下の箇所はそもそも gb18030 にしたほうが良いのかもしれない.

       (gb2312    . cn-gb-2312)
       (cn-gb     . cn-gb-2312)

Related articles

2020/07/24 17:54 / マイナポイント手続き

マイナンバーカード持っているので折角なので手続き(予約?).https://id.mykey.soumu.go.jp/mypage/MKCAS010/ によると以下のとおりで,急ぐ必要もないのだけれど忘れてしまうので(といっても最大5,000円だけど...).

○マイナポイントの予約・申込の際には、以下の点にご注意ください。・申込みを行った後も、8月末までの間は、チャージやお買い物をしていただいても、マイナポイントは付与されません。・申込みが可能なサービスは、7月1日より順次増えていきます。一度申し込んだサービスを変更することはできませんので、サービスの詳細情報をマイナポイント事業のホームページで事前によく確認いただき、慎重にサービスを選択してください。

申請にはマイナンバーカードが必要で,それで手続きをするにはスマートフォンアプリかPC (w/Internet Explorer)が必要(あるいは,コンビニのマルチコピー機で手続きできるらしい).なぜか私のスマートフォンはマイナポイントアプリに対応していなくて,PCで手続きしようにも既に削除済みのInternet Explorerが必要ということで,Internet Explorer 11のインストールから開始.

マイナポイントのIE縛りについては何故お役所ってオワコンIEが大好きなの?参照.

マイナポイントアプリ このアプリはお使いのどのデバイスにも対応していません。
「Windows の機能の有効化または無効化」からInternet Explorerの再インストール

Internet Explorer 11から手続きを使用としても「マイキーID作成・登録準備ソフト」が必要.下は「マイキーID作成・登録準備ソフト」をインストールした後にそれを有効化しようとしているところ(英語環境).

MKPFWindowsClientApp.dll の有効化

あとは必要情報を入力するのみ.「マイナポイントの対象となるキャッシュレス決済サービス」としてなにを選択するか,については,私は JCB 系のサービス(Quick Payとか)が良かったのだが,JCBカードはマイナポイント事業の対象になりますか?によると以下の通りで,5,000円に加えて2,000円も付加される WAON を選択(see https://www.waon.net/mynapoint/).

JCBグループが発行するカードは、本事業への参画予定はありません。制度の対応準備までの期間等、総合的に判断いたしました。

WAONの場合は「WAONマイナポイント申込アプリ」というのがあって,これで手続きできるようなのだが,試したら途中で(私の端末では利用できない)「マイナポイントアプリ」を呼び出すようで,断念.結局 IE で手続き.手続きは簡単で WAON の番号(16桁)とセキュリティコード(00+コード番号6桁)を入力するのみ(WAON カードのウラ面に刻印されている).

WAON番号とセキュリティコード

Related articles

2020/07/12 16:42 / Linux 5.8-rc4

Linux 5.8-rc1 がでたので(既に rc4 になってるけど),5.7.8 から .configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-58-features 参照.

追加

CONFIG_MEDIA_SUPPORT_FILTER 関連

削除

追記 (2020/8/21)

cachefiles の挙動が 5.8.x で怪しい.以下でコケる.5.6 でも cachefiles にはバグがあって,それは 5.6.14 で修正されたのだけど (Linux 5.6.x fs/cachefiles/rdwr.c bug参照),そもそも cachefiles ユーザ(あるいは NFS ユーザ?)はそんなに多くないのかな...cachefiles 自体のコードは 5.7 から 5.8 でほぼ変更が加えられていない様子なのだけど.

Aug 21 19:14:42 qemu kernel: [  323.988885] CacheFiles: 
Aug 21 19:14:42 qemu kernel: [  323.988888] CacheFiles: Assertion failed
Aug 21 19:14:42 qemu kernel: [  323.988926] ------------[ cut here ]------------
Aug 21 19:14:42 qemu kernel: [  323.988927] kernel BUG at fs/cachefiles/rdwr.c:715!
Aug 21 19:14:42 qemu kernel: [  323.988934] invalid opcode: 0000 [#13] SMP PTI
Aug 21 19:14:42 qemu kernel: [  323.988937] CPU: 2 PID: 4214 Comm: sshd Tainted: P      D    O      5.8.2-20200821-diskless-01 #313
Aug 21 19:14:42 qemu kernel: [  323.988938] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1 04/01/2014
Aug 21 19:14:42 qemu kernel: [  323.988946] RIP: 0010:cachefiles_read_or_alloc_pages.cold.20+0x307/0x3b3 [cachefiles]
Aug 21 19:14:42 qemu kernel: [  323.988948] Code: 10 e8 69 db cc e0 48 8b 44 24 28 8b 10 e9 50 c2 ff ff 48 c7 c7 43 87 40 a0 e8 51 db cc e0 48 c7 c7 60 9d 40 a0 e8 45 db cc e0 <0f> 0b 49 8b 57 20 44 89 e9 48 c7 c7 e7 87 40 a0 65 48 8b 34 25 00
Aug 21 19:14:42 qemu kernel: [  323.988950] RSP: 0018:ffffc9000192f9c0 EFLAGS: 00010246
Aug 21 19:14:42 qemu kernel: [  323.988952] RAX: 000000000000001c RBX: ffff8881fbc8ac00 RCX: 0000000000000027
Aug 21 19:14:42 qemu kernel: [  323.988953] RDX: 0000000000000000 RSI: ffff88822be979c0 RDI: ffff88822be979c8
Aug 21 19:14:42 qemu kernel: [  323.988954] RBP: ffff8881dec0a068 R08: 0000000000000534 R09: 000000000000002b
Aug 21 19:14:42 qemu kernel: [  323.988955] R10: 0000000000000000 R11: ffffc9000192f875 R12: ffff8881c84dfa58
Aug 21 19:14:42 qemu kernel: [  323.988956] R13: ffffc9000192fcd0 R14: ffff888227a36900 R15: ffff8881dec0a000
Aug 21 19:14:42 qemu kernel: [  323.988958] FS:  00007f725f467e40(0000) GS:ffff88822be80000(0000) knlGS:0000000000000000
Aug 21 19:14:42 qemu kernel: [  323.988961] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 21 19:14:42 qemu kernel: [  323.988963] CR2: 0000564ddd7d6168 CR3: 0000000187cfc000 CR4: 00000000000006e0
Aug 21 19:14:42 qemu kernel: [  323.988964] Call Trace:
Aug 21 19:14:42 qemu kernel: [  323.988971]  ? out_of_line_wait_on_bit+0x91/0xb0
Aug 21 19:14:42 qemu kernel: [  323.988976]  ? fscache_run_op.isra.12+0x55/0xb0
Aug 21 19:14:42 qemu kernel: [  323.988978]  __fscache_read_or_alloc_pages+0x28e/0x300
Aug 21 19:14:42 qemu kernel: [  323.988982]  __nfs_readpages_from_fscache+0x60/0x160
Aug 21 19:14:42 qemu kernel: [  323.988985]  nfs_readpages+0xb5/0x1a0
Aug 21 19:14:42 qemu kernel: [  323.988990]  read_pages+0x1c1/0x1f0
Aug 21 19:14:42 qemu kernel: [  323.988993]  page_cache_readahead_unbounded+0x1ad/0x200
Aug 21 19:14:42 qemu kernel: [  323.988997]  generic_file_buffered_read+0x5c3/0x960
Aug 21 19:14:42 qemu kernel: [  323.989001]  ? nfs4_do_check_delegation+0x18/0x40
Aug 21 19:14:42 qemu kernel: [  323.989005]  ? nfs_check_cache_invalid+0x33/0x90
Aug 21 19:14:42 qemu kernel: [  323.989007]  nfs_file_read+0x6b/0x90
Aug 21 19:14:42 qemu kernel: [  323.989011]  new_sync_read+0x114/0x1a0
Aug 21 19:14:42 qemu kernel: [  323.989013]  vfs_read+0x151/0x180
Aug 21 19:14:42 qemu kernel: [  323.989015]  ksys_read+0x59/0xd0
Aug 21 19:14:42 qemu kernel: [  323.989018]  do_syscall_64+0x3e/0xb0
Aug 21 19:14:42 qemu kernel: [  323.989020]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
Aug 21 19:14:42 qemu kernel: [  323.989023] RIP: 0033:0x7f725f80a461
Aug 21 19:14:42 qemu kernel: [  323.989025] Code: fe ff ff 50 48 8d 3d fe d0 09 00 e8 e9 03 02 00 66 0f 1f 84 00 00 00 00 00 48 8d 05 99 62 0d 00 8b 00 85 c0 75 13 31 c0 0f 05 <48> 3d 00 f0 ff ff 77 57 c3 66 0f 1f 44 00 00 41 54 49 89 d4 55 48
Aug 21 19:14:42 qemu kernel: [  323.989026] RSP: 002b:00007ffd776e1588 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
Aug 21 19:14:42 qemu kernel: [  323.989028] RAX: ffffffffffffffda RBX: 0000564ddd7bdf90 RCX: 00007f725f80a461
Aug 21 19:14:42 qemu kernel: [  323.989029] RDX: 0000000000002000 RSI: 0000564ddd7d4160 RDI: 0000000000000004
Aug 21 19:14:42 qemu kernel: [  323.989030] RBP: 0000000000000d68 R08: 0000000000000003 R09: 00007f725f8dbd30
Aug 21 19:14:42 qemu kernel: [  323.989031] R10: 0000564ddd79e010 R11: 0000000000000246 R12: 00007f725f8d7760
Aug 21 19:14:42 qemu kernel: [  323.989032] R13: 00007f725f8d82a0 R14: 0000000000000000 R15: 0000000000000000
Aug 21 19:14:42 qemu kernel: [  323.989034] Modules linked in: fuse ext4 crc16 mbcache jbd2 dm_crypt ecb aes_generic libaes crypto_simd cryptd glue_helper xts algif_skcipher af_alg dm_mod xt_conntrack xt_MASQUERADE xfrm_user xfrm_algo nft_counter xt_addrtype nft_compat nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter cpufreq_userspace cpufreq_powersave cpufreq_ondemand cpufreq_conservative rpcsec_gss_krb5 btrfs blake2b_generic zstd_decompress zstd_compress bochs_drm drm_vram_helper drm_ttm_helper ttm drm_kms_helper syscopyarea intel_agp sysfillrect intel_gtt snd_pcm sg sysimgblt fb_sys_fops snd_timer joydev evdev snd serio_raw button soundcore pcspkr cachefiles lm78 i5k_amb nf_tables hwmon_vid nfnetlink msr drm agpgart nfsd binfmt_misc ip_tables x_tables autofs4 loop squashfs overlay raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c crc32c_generic raid1 raid0 multipath linear md_mod sd_mod t10_pi crc_t10dif crct10dif_generic sr_mod cdrom crct10dif_common
Aug 21 19:14:42 qemu kernel: [  323.989066]  ata_generic ata_piix libata psmouse scsi_mod rtc_cmos
Aug 21 19:14:42 qemu kernel: [  323.989072] ---[ end trace f27e8415c423cf4c ]---
Aug 21 19:14:42 qemu kernel: [  323.989076] RIP: 0010:cachefiles_read_or_alloc_pages.cold.20+0x307/0x3b3 [cachefiles]
Aug 21 19:14:42 qemu kernel: [  323.989078] Code: 10 e8 69 db cc e0 48 8b 44 24 28 8b 10 e9 50 c2 ff ff 48 c7 c7 43 87 40 a0 e8 51 db cc e0 48 c7 c7 60 9d 40 a0 e8 45 db cc e0 <0f> 0b 49 8b 57 20 44 89 e9 48 c7 c7 e7 87 40 a0 65 48 8b 34 25 00
Aug 21 19:14:42 qemu kernel: [  323.989079] RSP: 0018:ffffc900005cf9c0 EFLAGS: 00010246
Aug 21 19:14:42 qemu kernel: [  323.989081] RAX: 000000000000001c RBX: ffff8881fbc8ac00 RCX: 0000000000000027
Aug 21 19:14:42 qemu kernel: [  323.989082] RDX: 0000000000000000 RSI: ffff88822bf179c0 RDI: ffff88822bf179c8
Aug 21 19:14:42 qemu kernel: [  323.989083] RBP: ffff8881dec0a068 R08: 000000000000027c R09: 000000000000002b
Aug 21 19:14:42 qemu kernel: [  323.989084] R10: 0000000000000000 R11: ffffc900005cf875 R12: ffff8881c84dfa58
Aug 21 19:14:42 qemu kernel: [  323.989085] R13: ffffc900005cfcd0 R14: ffff88822a584f00 R15: ffff8881dec0a000
Aug 21 19:14:42 qemu kernel: [  323.989086] FS:  00007f725f467e40(0000) GS:ffff88822be80000(0000) knlGS:0000000000000000
Aug 21 19:14:42 qemu kernel: [  323.989087] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Aug 21 19:14:42 qemu kernel: [  323.989088] CR2: 0000564ddd7d6168 CR3: 0000000187cfc000 CR4: 00000000000006e0

https://bugzilla.kernel.org/show_bug.cgi?id=208883 にも報告されていて,ここでは https://lkml.org/lkml/2020/8/3/960fscache-iterを merge すれば解決するという案が示されているが,https://lkml.org/lkml/2020/8/10/454でこの pull request は一旦取り下げられている.

追記 (2020/9/2)

cachefiles の挙動が 5.8.x で怪しい問題,https://lkml.org/lkml/2020/8/27/714 の patch をあてたら解決する.少なくとも 5.8.5 ではこの patch が必要.

追記 (2021/1/30)

cachefiles の挙動が怪しい問題,https://lkml.org/lkml/2020/8/27/714 の patch がようやく cachefiles: Drop superfluous readpages aops NULL checkのように取り込まれた様子.5.11-rc5 および 5.10.11 (commit)で修正されている.

追記 (2020/8/21)

以下の compile には https://gitlab.com/-/snippets/1986228/ のパッチが必要.

また,nvidia-legacy-390xx-kernel-dkms については kernel 側に https://www.spinics.net/lists/linux-fsdevel/msg173844.html のパッチが必要(なぜか radix_tree_preloadsEXPORT_PER_CPU_SYMBOL_GPL されていてリンクできない,とかだったはず).

Related articles

2020/07/11 23:30 / Intel Display Driver Update Loop on Windows 10

使っているNotePC (ASUS ZenBook S UX391UA, Windows 10 Pro)で Windows Update が Intel Corporation - Display - 26.20.100.7325 の Install を繰り返す.Update history では Successfully installed になっているのだが,実際にはベンダ提供ドライバ(23.20.16.4927)が使われ続ける.

一般的にはベンダ提供ドライバを使うことが推奨されるのだが,それを Windows Update が上書きしようとして,しかも成功しているかに見せかけて失敗して,繰り返しインストールを試みる,という症状.

ずっと放置していたのだが,何かの拍子に Windows Update によるインストールが正しく失敗するようになって,Windows Update の警告が表示されるようになってしまったので対処.

一般的には

などによると

が解決法ならしいが,手元では解決しない.ベンダ提供ドライバの再インストール等との組み合わせや,Intel からドライバを直接ダウンロードしてインストールを試みたがだめだった.

仕方がないので,個別の Windows Update を無効化する方法を調べた.Hide Windows Updates or driver updatesHide Windows Updates or driver updatesにある Show or hide updates という Troubleshooter を利用すると,個別の Windows Update を無効化できる.これで警告が出る問題,解決した.

なお,Intel® Driver & Support Assistant ではベンダ提供ドライバの状態で Your Intel® drivers and software are up to date と判定される.

なお,急いでいる時にトラブルになると嫌なので,gpedit.msc (Local Group Policy Editor; Windows 10 Pro 用)で以下のように辿ってたどり着く Configure Automatic Update の設定で,自動ダウンロードを抑制している.

参考にしたページ:

2020/05/01 21:21 / Linux 5.7-rc1

Linux 5.7-rc1 がでたので(既に rc3 になってるけど),5.6.3 から .configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-57-features 参照.大きなところは Tiger Lake 関連かなと.

Compiler: gcc (Debian 8.3.0-6) 8.3.0

General setup

IRQ subsystem

General architecture-dependent options

Memory Management options

Core Netfilter Configuration

SCSI support type (disk, tape, CD-ROM)

SCSI device support

Display Engine Configuration

DMABUF options

Clock Source drivers

Compile-time checks and compiler options

Generic Kernel Debugging Instruments

Related articles

2020/04/03 22:18 / Linux 5.6.x fs/cachefiles/rdwr.c bug

The commit, cachefiles: drop direct usage of ->bmap method., included in v5.5 has a bug. The return value before list_for_each_entry_safe, that is ret = space ? -ENODATA : -ENOBUFS, overwritten by the return value of bmap. This bug exists in Linux 5.6.2 at least.

The following is a patch to fix this bug. This patch also includes https://lkml.org/lkml/2020/3/20/399.

--- a/fs/cachefiles/rdwr.c
+++ b/fs/cachefiles/rdwr.c
@@ -431,7 +431,7 @@ int cachefiles_read_or_alloc_page(struct fscache_retrieval *op,
    block <<= shift;
 
    ret = bmap(inode, &block);
-   ASSERT(ret < 0);
+   ASSERT(!ret);
 
    _debug("%llx -> %llx",
           (unsigned long long) (page->index << shift),
@@ -739,8 +739,8 @@ int cachefiles_read_or_alloc_pages(struct fscache_retrieval *op,
        block = page->index;
        block <<= shift;
 
-       ret = bmap(inode, &block);
-       ASSERT(!ret);
+       ret2 = bmap(inode, &block);
+       ASSERT(!ret2);
 
        _debug("%llx -> %llx",
               (unsigned long long) (page->index << shift),

Update (2020/5/24)

This bug has been fixed in Linux 5.6.14 while fixed in v5.7-rc6 as for the master branch.

Related articles

2020/03/13 22:40 / Ruby で3桁区切りのカンマ挿入

数値を3桁区切り表示したいときの話.Rails にはそれっぽい関数があるらしいが Ruby のみで.やるきなしなし.

class Integer
    def to_c
        (to_s.reverse.scan(/\d{1,3}/)*",").reverse
    end
end

Python の場合は以下.

>>> "{:,}".format(12345678)

2020/03/10 14:56 / Windows で Tensorboard が真っ白 (mimetypes.py on Windows)

https://github.com/tensorflow/tensorboard/issues/3077 にあるように index.js を tensorboard が返す際に Content-Type: text/plain で応答するため,ブラウザ側で index.js を実行出来ず真っ白な状態になる.これ,python に付属の mimetypes.py 関連の問題で,以下のように mime type を application/javascript として推定して欲しいのに,Windows では text/plain になってしまう.

% python3 /usr/lib/python3.6/mimetypes.py index.js
type: application/javascript encoding: None

でこれ,mimetypes.pyimport winreg as _winreg とかしていて,Windows の場合レジストリの情報から拡張子と mime type の対応を作成しているのが原因.index.js に対して text/plain が返るということはそういう風にレジストリに登録されている.

最も簡単に対処するには Win-r で regedit 起動して,HKEY_LOCAL_MACHINE\Software\Classes.jsContent Typeapplication/javascript に変更してしまうこと.

2020/02/29 18:50 / Mattermost で日本語検索 (Mariadb+Mroonga)

Slackのかわりに Mattermostを利用しているのだが,Default 環境では日本語検索ができない.日本語全文検索可能なストレージエンジン Mroonga を導入して検索できるようにする.環境は Debian GNU/Linux の stable (buster; Debian 10),RDBMS (relational database management system) は MySQL派生の MariaDB (Debian 9 以降の Default RDBMS).

以下で Mroonga を install

sudo aptitude install mariadb-plugin-mroonga

MySQL (=MariaDB,以下同様)が既に導入済みで password 設定済みだと

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

のように MySQL への install に失敗するので以下実行.

mysql -u root -p<sql root password> < /usr/share/mysql/mroonga/install.sql

登録済みエンジン確認.

% mysql -u root -p<sql root password>
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 49565
Server version: 10.3.22-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                            | NO           | NO   | NO         |
| CSV                | YES     | Stores tables as CSV files                                                       | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                        | NO           | NO   | NO         |
| MyISAM             | YES     | Non-transactional engine with good performance and small data footprint          | NO           | NO   | NO         |
| Aria               | YES     | Crash-safe tables with MyISAM heritage                                           | NO           | NO   | NO         |
| Mroonga            | YES     | CJK-ready fulltext search, column store                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                               | NO           | NO   | NO         |
| SEQUENCE           | YES     | Generated tables filled with sequential values                                   | YES          | NO   | YES        |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.000 sec)

テーブルのエンジン確認.Mattermost の DB name は mattermost を想定.

MariaDB [(none)]> select table_name, engine from information_schema.tables where table_schema = 'mattermost';
+----------------------+--------+
| table_name           | engine |
+----------------------+--------+
| ClusterDiscovery     | InnoDB |
| Compliances          | InnoDB |
| Systems              | InnoDB |
| Licenses             | InnoDB |
| Tokens               | InnoDB |
| ChannelMemberHistory | InnoDB |
| PluginKeyValueStore  | InnoDB |
| TermsOfService       | InnoDB |
| Reactions            | InnoDB |
| Roles                | InnoDB |
| Schemes              | InnoDB |
| Teams                | InnoDB |
| TeamMembers          | InnoDB |
| ChannelMembers       | InnoDB |
| Channels             | InnoDB |
| PublicChannels       | InnoDB |
| Posts                | InnoDB |
| Users                | InnoDB |
| Audits               | InnoDB |
| Sessions             | InnoDB |
| OAuthApps            | InnoDB |
| OAuthAccessData      | InnoDB |
| OAuthAuthData        | InnoDB |
| IncomingWebhooks     | InnoDB |
| OutgoingWebhooks     | InnoDB |
| Commands             | InnoDB |
| CommandWebhooks      | InnoDB |
| Preferences          | InnoDB |
| Emoji                | InnoDB |
| Status               | InnoDB |
| FileInfo             | InnoDB |
| Jobs                 | InnoDB |
| UserAccessTokens     | InnoDB |
| UserTermsOfService   | InnoDB |
| LinkMetadata         | InnoDB |
| GroupMembers         | InnoDB |
| UserGroups           | InnoDB |
| Bots                 | InnoDB |
| GroupTeams           | InnoDB |
| GroupChannels        | InnoDB |
+----------------------+--------+

Channels と Posts のエンジンを Mroonga に変更.その後上のコマンドでテーブルのエンジン確認.

MariaDB [mattermost]> alter table Channels ENGINE = Mroonga;
MariaDB [mattermost]> alter table Posts ENGINE = Mroonga;

念の為 Mattermost 再起動(systemctl で制御可能であることを想定).

ちなみに Mattermost,既存 Web server を利用することができるが,パスとして / から利用するので,それ用のドメインを切って Virtual Domain にて運用.

% sudo systemctl stop mattermost.service
% sudo systemctl start mattermost.service

参考にしたページ:

Related articles

2020/02/29 17:46 / Detected unsafe path transition (systemd:amd64 244-3~bpo10+1 -> 244.3-1~bpo10+1)

chroot 環境で systemd の upgrade に以下で失敗する.

Detected unsafe path transition / → /var during canonicalization of /var/log/journal.

/ の owner が root:root になっていない場合に発生する.

# chown root:root /

すれば解決する.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=950684 参照.

2020/02/22 19:33 / Linux 5.6-rc2

Linux 5.6-rc2 で 5.5.5 から .configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-56-features 参照.大きなところは net: WireGuard secure network tunnel で VPN である WireGuard が取り込まれたことと AMD 関連かなと.

追記 (2020/2/29)

いつものように以下の DKMS のコンパイルに失敗する.

nvidia-kernel-dkms については https://gitlab.com/snippets/1937313 のパッチを当てればコンパイルできる.以下の kernel の修正による.

nvidia-legacy-390xx-kernel-dkms についても同様だが,こちらは以下の影響も受ける.

nvidia-legacy-390xx-kernel-dkms 390.116-1 向け patch (Linux 5.5 向け patch があたっていることを想定)を https://pastebin.com/g4VD5U7F に置いた.

Related articles

2020/01/11 20:50 / Linux 5.5-rc5

Linux 5.5-rc5 で 5.4.X から .configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-55-features 参照.

CRYPTO関連

Direct Rendering Manager, DRM 関連

Btrfs 関連

追加

削除

Renamed

追記 (2020/1/12)

drm: delete drmP.h + drm_os_linux.hによって drmP.h が削除されたので,

/var/lib/dkms/nvidia-current/430.64/build/nvidia-drm/nvidia-drm-utils.h:30:10: fatal error: drm/drmP.h: No such file or directory
 #include <drm/drmP.h>
          ^~~~~~~~~~~~

ように以下の DKMS のコンパイルに失敗する.

https://devtalk.nvidia.com/default/topic/1068332/linux/nvidia-driver-does-not-build-on-linux-v5-5-release-candidate-kernel/ にあるパッチでともに対応可能.kernel/nvidia-drm/nvidia-drm-connector.cbreak の箇所が #if で条件付けされていないのが気になるけど.

nvidia-kernel-dkms 430.64-4~bpo10+1 向け patch を https://pastebin.com/dgBadP0K に置いた.

あとパッチによるとdrm/connector: Allow max possible encoders to attach to a connectorによって DRM_CONNECTOR_MAX_ENCODER (3) の #define が削除されたものへの対応も必要らしい(drm_connector_for_each_possible_encoder マクロを利用する).

Related articles

2020/01/06 15:26 / wl-beta 2.15.9+0.20190919-1 with bbdb3 3.2-7

Emacs の MUA である Wanderlust で,bbdb を使ってメールアドレス等を収集しているのであるが,bbdb3 が 3.2-6 から 3.2-7 にあがったタイミングで以下のエラーで表示メール関連の bbdb entry が表示されなくなった.M-x bbdb 自体は機能している.

save-current-buffer: Wrong type argument: stringp, nil

そもそも bbdb3 自体が Wanderlust で設定困難で,https://github.com/wanderlust/wanderlust/issues/64#issuecomment-388231182 にあるとおり,以下のような bbdb/wl-header (see /usr/share/emacs/site-lisp/bbdb3/bbdb-wl.el)を自前で用意していたのだが,これが原因らしい.

--- orig.el     2020-01-06 15:24:44.308354408 +0900
+++ new.el      2020-01-06 15:25:24.643900212 +0900
@@ -1,7 +1,7 @@
 (defun bbdb/wl-header (header)
-  (with-current-buffer wl-summary-buffer-name
+  (with-current-buffer wl-message-buffer-cur-summary-buffer
     (elmo-message-entity-field
      (elmo-message-entity wl-summary-buffer-elmo-folder
                           (wl-summary-message-number))
      (intern (downcase header))
      'string)))

3.2-7 では

のとおり bbdb-mua-auto-updatewl-message-redisplay-hookではなく wl-summary-redisplay-hookadd-hookされるようになったので,上記自前 bbdb/wl-header は不要になった様子.

Related articles

2019/12/29 16:01 / Windows 10 mobile hotspot

いつもハマるのでメモ.有線接続している NotePC を AP にする話.

有線は Realtek USB GbE Family Controller のアダプタで接続されていて,これを WiFi で共有する.WiFi のアダプタは Intel(R) Dual Band Wireless-AC 8265.

Intel(R) Dual Band Wireless-AC 8265 では Hosted Network をサポートしていなくて (See Why Hosted and Ad-Hoc Networks Are Not Working on Windows® 10)

% netsh wlan show drivers

で調べても

Hosted network supported : No

と表示される.つまり

% netsh wlan set hostednetwork mode=allow ssid=NetworkName key=YourPassword
% netsh wlan start hostednetwork

とかで有効にできない(↑上の情報がWeb上にあふれている).さて...

以下設定方法(for Windows 10 で最近の Intel WiFi Adapter の場合).

Settings → Network and Internet → Mobile hotspot

から Share my Internet connection with other devices を On にする(同じページのSSIDおよびパスワードの設定があるので,ここは適宜).

これが出来ない場合は Device Manager でおもむろに有線およびWiFi,Microsoft Wi-Fi Direct Virtual Adapter 等関連アダプタを削除して,Scan for hardware changes でデバイスを検索してデバイスを再認識する (大抵これでできるようになる).

ただこの状態だと,Client (子)側で WiFi 経由で IP Address が取得できない.そこで

Control Panel\Network and Internet\Network Connections

でアダプタ一覧を表示し,有線のアダプタの Property で Sharing Tab から

Allow other network users to connect through this computers internet connection

をチェックして,共有先として Microsoft Wi-Fi Direct Virtual Adapter のネットワーク名(Local Area Connection* 2 等)を指定する.これでつながるはず.

2019/12/11 21:32 / MHonArc+Namazu での Namazu の UTF-8 対応

ひさしぶりに MHonArc (2.6.19-2) と Namazu (2.0.21-22) をつかってメール検索システム構築(対象は fml で送られてきたメール).いろいろ嵌ったのでメモ.

MHonArc が生成する HTML を X-Mail-Count の値(整数)にしたい

mhonarcの出力ファイル名の数字を特定のフィールドから決める場当たり的改造」で紹介されているパッチをあてる.mhonarc 実行時に mhonarc -seqnumfield x-mail-count というオプションをつける.以下念の為の 2.6.19 向け版パッチ.

diff --git a/perl/mhamain.pl b/perl/mhamain.pl
index 7af1fcc..eefca45 100644
--- a/perl/mhamain.pl
+++ b/perl/mhamain.pl
@@ -771,7 +771,7 @@ sub write_mail {
 sub read_mail_header {
     my $handle = shift;
     my($date, $tmp, $i, $field, $value);
-    my($from, $sub, $msgid, $ctype);
+    my($from, $sub, $msgid, $ctype, $seq);
     local($_);
 
     my $index  = undef;
@@ -927,6 +927,14 @@ sub read_mail_header {
     }
     @refs = remove_dups(\@refs);        # Remove duplicate msg-ids
 
+    ##------------------##
+    ## Get seq number   ##
+    ##------------------##
+    if (defined($SEQNUMFIELD)) {
+        $seq = $fields->{$SEQNUMFIELD}[0];
+        $seq =~ s/(\d+)/$1/;
+        print STDOUT "($seq)";
+    }
     ##------------------##
     ## Get Content-Type ##
     ##------------------##
@@ -941,6 +949,10 @@ sub read_mail_header {
     my $t = $index;
     $index .= $X . sprintf('%d',(defined($msgnum)?$msgnum:($LastMsgNum+1)));
 
+    if (defined($SEQNUMFIELD)) {
+        $IndexNum{$index} = $seq;
+    }
+
     ## Set mhonarc fields.  Note how values are NOT arrays.
     $fields->{'x-mha-index'} = $index;
     $fields->{'x-mha-message-id'} = $msgid;
@@ -970,7 +982,11 @@ sub read_mail_header {
    $IndexNum{$index} = $msgnum;
    ++$NumOfMsgs; # Counteract decrement by delmsg
     } else {
-   $IndexNum{$index} = getNewMsgNum();
+   if(defined $SEQNUMFIELD) {
+       &getNewMsgNum();
+   }else{
+       $IndexNum{$index} = getNewMsgNum();
+   }
     }
 
     $Refs{$index} = [ @refs ]  if (@refs);
diff --git a/perl/mhopt.pl b/perl/mhopt.pl
index 939109b..587ccab 100644
--- a/perl/mhopt.pl
+++ b/perl/mhopt.pl
@@ -221,7 +221,8 @@ sub get_resources {
    'readdb',   # Just read db
 
    'v',        # Version information
-   'help'      # A brief usage message
+   'help',     # A brief usage message
+   'seqnumfield=s',    # Sequence number field name
     );
 
     ## Check for help/version options (nothing to do)
@@ -576,6 +577,8 @@ sub get_resources {
 
     $IdxPageNum  = $opt{'pagenum'}   if defined($opt{'pagenum'});
 
+    $SEQNUMFIELD = $opt{'seqnumfield'}   if defined($opt{'seqnumfield'});
+
     $AttachmentDir = $opt{'attachmentdir'}  if defined($opt{'attachmentdir'});
     $AttachmentUrl = $opt{'attachmenturl'}  if defined($opt{'attachmenturl'});
 

MHonArc が抽出する添付ファイルのファイル名を MD5SUM 由来のものにしたい

Default だとランダムな文字列(しかも実行する度に異なる)ファイル名になる.

ということもあって MD5SUM 由来のものにする.以下パッチ.やるきなしなのでオプション切り替え不能なパッチ.ファイルが存在する場合は上書きしないことにしてある.

diff --git a/perl/mhmimetypes.pl b/perl/mhmimetypes.pl
index deb806b..c723ead 100644
--- a/perl/mhmimetypes.pl
+++ b/perl/mhmimetypes.pl
@@ -28,6 +28,7 @@
 package mhonarc;
 
 use File::Basename;
+use Digest::MD5 qw(md5_hex);
 
 $UnknownExt     = 'bin';
 
@@ -336,26 +337,27 @@ sub write_attachment {
    $fname =~ tr/\0-\40\t\n\r?:\57\134*"'<>|\177-\377/_/;
     }
 
-    ## Write to random file first
-    my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
-    binmode($fh);
-    print $fh $$sref;
-    close($fh);
-
-    ## Set pathname for file
+    my $target;
     if ($fname) {
-   # need to rename to desired filename
-   $pathname .= $DIRSEP . $fname;
-   if (!rename($tmpfile, $pathname)) {
-       die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
-   }
+        $target = $pathname . $DIRSEP . $fname;
     } else {
-   # just use random filename
-   $pathname = $tmpfile;
-   $fname    = basename($tmpfile);
+        my $md5 = md5_hex($$sref);
+        $fname = $md5.".".$ext;
+        $target = $pathname . $DIRSEP . $fname;
+    }
+    if(! -e $target) {
+        ## Write to random file first
+        my($fh, $tmpfile) = file_temp($ext.'XXXXXXXXXX', $pathname, '.'.$ext);
+        $pathname = $target;
+        binmode($fh);
+        print $fh $$sref;
+        close($fh);
+        if (!rename($tmpfile, $pathname)) {
+            die qq/ERROR: Unable to rename "$tmpfile" to "$pathname": $!\n/;
+        }
+        file_chmod($pathname);
     }
     $url .= '/' if ($url); $url .= urlize_file_path($fname);
-    file_chmod($pathname);
 
     if ($rel_outdir) {
    $pathname  = $path;

なお m2h_external::filterusename argument (添付ファイル名をそのまま用いる,ただし日本語は_に変換される)は活かしておく.誰も使わないだろうけど.usename を使う場合はrcfileに以下を書いておく(See https://www.mhonarc.org/MHonArc/doc/resources/mimeargs.html).

<MIMEArgs>
m2h_external::filter; usename
</MIMEArgs>

Namazu で PDF が検索対象にならない (pdftotext オプション問題)

PDF ファイルは pdftotext で一旦テキストに変換されてインデックスされるが,日本語環境(LANG=ja_JP mknmz . -O indexとか)だと Unable to convert pdf file (maybe copying protection) と怒られてインデックスされない.これ,Namazu の内部処理文字コードの EUC-JP に変換しようとして pdftotext のオプションの箇所でコケている(copy protection が原因ではない).

手元のpdftotextは version 0.71.0 (poppler)なのだが,mknmz はなぜか pdftotext -eucjp で EUC-JP 出力をしようとする(古いやり方).これをpdftotext -enc EUC-JPに変更する.以下パッチやるきなしなし.どこでバージョンのカウントを間違えたのだろうか?...

diff --git a/perl/pdf.pl b/perl/pdf.pl
index 5d63763..2d12946 100644
--- a/perl/pdf.pl
+++ b/perl/pdf.pl
@@ -61,12 +61,13 @@ sub status() {
         if (util::islang("ja")) {
             if ($pdfconvver >= 1.00) {
                 @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
             } else {
                 @pdfconvopts = ('-q', '-raw', '-eucjp');
             }
+        @pdfconvopts = ('-q', '-raw', '-enc', 'EUC-JP');
         } else {
             @pdfconvopts = ('-q', '-raw');
         }
         if (defined $pdfinfopath) {
             my @cmd = ("$pdfinfopath");
             my $result = "";

Namazu でエクセルファイルが検索対象にならない

というか xlhtml って今手に入るの? 問題.xlhtml でHTMLに変換してそれをインデックスすることになっている.

python-excelerator付属のpy_xls2htmlで代用する.PATHの通っているところにxlhtmlとしてシンボリックリンクを作る(これだけでOK).

MHonArc で日本語をそれなりに...

Default だと UTF-8 ではなく数値文字参照(&#xXXXX;とか)を大量に含む HTML になって極めて感じ悪い.http://www.mhonarc.jp/MHonArc の日本語化 (for v2.6.x)を行う.具体的には以下を rcfile に書いておく.

<Include>
/usr/share/doc/mhonarc/examples/utf-8-encode.mrc
</Include>

<DefCharset>
iso-2022-jp
</DefCharset>

<DecodeHeads>

MHonArc のインデックスファイルと Namazu の連携で文字化け

<IdxPgBegin> に Namazu の form を置いておくと便利かと思ったら,Namazu に適切にクエリが渡らない.これは MHonArc が UTF-8 で Namazu が EUC-JP だから.今どき EUC-JP て...

対策は以下のように別 script (ラッパー)でクエリを一旦受け取り,それを EUC-JP に変換して namazu を呼び出すというもの.

perl で書かれているものは手元では動かず,http://www.ne.jp/asahi/music/marinkyo/namazu/utf8.html.ja の下の方にある Ruby 版を利用することにした (真ん中あたりに書いてある iconv 版は,今どきの ruby には iconv が付属しないので注意...String#encode を使うことになる).ほぼ同じだが以下私版.

#!/usr/bin/env ruby

require 'cgi'

cgi = CGI.new
query_str = ""

cgi.params.each{|key, values|
    values.each{|a_value|
        query_str += key + "=" + CGI.escape(a_value.encode("EUC-JP")) + ";"
    }
}
print "Location: https://myn.example.com/namazu/?"+query_str+"\n\n"

短くしてみた(2021/8/19)

#!/usr/bin/env ruby
# frozen_string_literal: true

require 'cgi'

s = CGI.new.params.inject([]) do |i, (key, values)|
  i + values.map { |j| "#{key}=#{CGI.escape(j.encode('EUC-JP'))}" }
end.join(';')
print "Location: https://myn.example.com/namazu/?#{s}\n\n"

MHonArc でインクリメンタルにファイルを追加できない

MHonArc では -add オプションにより,追加されたファイルのみ処理するモードがある.ただし以下でコケる.

% mhonarc -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add
This is MHonArc v2.6.19+, Perl 5.028001 linux
Reading database ...

Can't locate output/.mhonarc.db in @INC (@INC contains: lib /usr/share/mhonarc /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.28.1 /usr/local/share/perl/5.28.1 /usr/lib/x86_64-linux-gnu/perl5/5.28 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.28 /usr/share/perl/5.28 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/mhonarc/mhopt.pl line 401.

もうやるきなしなので,以下で @INC. を追加して MHonArc 実行.

% perl -I. `which mhonarc` -rcfile mhonarc.rc -outdir output -seqnumfield x-mail-count archive -add

Namazu で PDF の Subject が文字化け (pdfinfo オプション問題) (2020/10/20)

Namazu で PDF が検索対象にならない (pdftotext オプション問題)同様pdfinfoのオプションにも問題がある.手元の環境 pdfinfo version 0.71.0 だが,適切な option (EUC出力する...)をつけるためには 2.02 以上が要求される様子.以下やるきなしなしパッチ.

--- /usr/share/namazu/filter/pdf.pl.0   2020-10-20 12:37:23.047777984 +0900
+++ /usr/share/namazu/filter/pdf.pl 2020-10-20 12:32:43.196339697 +0900
@@ -82,20 +82,21 @@
             );
             if ($result =~ /^pdfinfo\s+version\s+([0-9]+\.[0-9]+)/) {
                 $pdfinfover = $1;
             }
             if (util::islang("ja")) {
                 if ($pdfinfover >= 2.02) {
                     @pdfinfoopts = ('-enc', 'EUC-JP');
                 } else {
                     @pdfinfoopts = ();
                 }
+                @pdfinfoopts = ('-enc', 'EUC-JP');
             } else {
                 @pdfinfoopts = ();
             }
         }
         return 'yes';
     }
     return 'no';
 }
 
 sub recursive() {

Related articles

2019/11/25 14:45 / nvidia-kernel-dkms 418.74-1 with Linux 5.4

以下の nvidia のドライバが Linux 5.4 でコンパイルできない話.

まず以下のエラー.

The Module.symvers file is missing, or does not contain any
symbols exported from the kernel. This could cause the NVIDIA
kernel modules to be built against a configuration that does
not accurately reflect the actual target kernel.
The Module.symvers file check can be disabled by setting the
environment variable IGNORE_MISSING_MODULE_SYMVERS to 1.

これは modpost: add support for symbol namespacesModule.symvers に1つエントリ(namespace)が追加されたことによる.conftest.shModule.symvers の symbol をチェックするがその箇所はただの grep なので影響なし.IGNORE_MISSING_MODULE_SYMVERS=1 にしても問題ないが conftest.sh を修正する.

次,以下のエラー.

In file included from /var/lib/dkms/nvidia-current/418.74/build/nvidia/nv.c:14:
/var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:1852:6: error: "NV_BUILD_MODULE_INSTANCES" is not defined, evaluates to 0 [-Werror=undef]
 #if (NV_BUILD_MODULE_INSTANCES != 0)
      ^~~~~~~~~~~~~~~~~~~~~~~~~

これ,なに由来のエラーか不明.NV_BUILD_MODULE_INSTANCES = 0 で問題ないはずなので,Kbuild ファイルで define してしまう.

次,以下のエラー.

/var/lib/dkms/nvidia-current/418.74/build/nvidia-drm/nvidia-drm-drv.c:657:44: error: ‘DRIVER_PRIME’ undeclared here (not in a function); did you mean ‘DRIVER_PCI_DMA’?
     .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
                                            ^~~~~~~~~~~~
                                            DRIVER_PCI_DMA

これは drm/prime: Actually remove DRIVER_PRIME everywhereDRIVER_PRIMEが削除されたことによる.削除する.

次,以下のエラー.

/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c: In function ‘nv_drm_gem_prime_export’:
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:33: error: passing argument 1 of ‘drm_gem_prime_export’ from incomp
atible pointer type [-Werror=incompatible-pointer-types]
     return drm_gem_prime_export(dev, gem, flags);
                                 ^~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘struct drm_gem_object *’ but argument is of type ‘struct drm_device *’
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:38: warning: passing argument 2 of ‘drm_gem_prime_export’ makes int
eger from pointer without a cast [-Wint-conversion]
     return drm_gem_prime_export(dev, gem, flags);
                                      ^~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: expected ‘int’ but argument is of type ‘struct drm_gem_object *’
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:64:12: error: too many arguments to function ‘drm_gem_prime_export’
     return drm_gem_prime_export(dev, gem, flags);
            ^~~~~~~~~~~~~~~~~~~~
In file included from ./include/drm/drmP.h:75,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-legacy-390xx/390.116/build/nvidia-drm/nvidia-drm-gem.c:27:
./include/drm/drm_prime.h:94:17: note: declared here
 struct dma_buf *drm_gem_prime_export(struct drm_gem_object *obj,
                 ^~~~~~~~~~~~~~~~~~~~

これdrm/prime: Align gem_prime_export with obj_funcs.exportによりdrm_gem_prime_exportの引数が変更になった(3つの引数のうち1つ目が削除された)ことが原因.

以下まとめてパッチ.ただし5.3でコンパイルするためのパッチがあたっていることを想定.

nvidia-kernel-dkms 418.74-1

diff --git a/Kbuild b/Kbuild
index 6a65185..ff3417c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -62,6 +62,7 @@ EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-
 EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"418.74\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE
 EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
 EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
 
 #
 # Detect SGI UV systems and apply system-specific optimizations.
diff --git a/conftest.sh b/conftest.sh
index d17ba21..087fda5 100644
--- a/conftest.sh
+++ b/conftest.sh
@@ -3708,7 +3708,7 @@ case "$6" in
         TAB='  '
 
         if [ -f "$OUTPUT/Module.symvers" ] && \
-             grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
+             grep -e "^[^${TAB}]*${TAB}[^${TAB}]*${TAB}[^${TAB}]*${TAB}vmlinux" \
                      "$OUTPUT/Module.symvers" >/dev/null 2>&1; then
             exit 0
         fi
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 6ec01f4..18cf167 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -654,7 +654,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 
 static struct drm_driver nv_drm_driver = {
 
-    .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+    .driver_features        = DRIVER_GEM | DRIVER_RENDER,
 
     .gem_free_object        = nv_drm_gem_free,

nvidia-legacy-390xx-kernel-dkms 390.116-1

diff --git a/Kbuild b/Kbuild
index 0665f50..992a48c 100644
--- a/Kbuild
+++ b/Kbuild
@@ -61,6 +61,7 @@ EXTRA_CFLAGS += -I$(src)
 EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wsign-compare -Wno-cast-qual -Wno-error
 EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.116\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args
 EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
+EXTRA_CFLAGS += -DNV_BUILD_MODULE_INSTANCES=0
 
 #
 # Detect SGI UV systems and apply system-specific optimizations.
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 90ce30b..d9f3961 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -634,7 +634,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 
 static struct drm_driver nv_drm_driver = {
 
-    .driver_features        = DRIVER_GEM | DRIVER_PRIME | DRIVER_RENDER,
+    .driver_features        = DRIVER_GEM | DRIVER_RENDER,
 
     .gem_free_object        = nv_drm_gem_free,
 
diff --git a/nvidia-drm/nvidia-drm-gem.c b/nvidia-drm/nvidia-drm-gem.c
index 3d51196..addff14 100644
--- a/nvidia-drm/nvidia-drm-gem.c
+++ b/nvidia-drm/nvidia-drm-gem.c
@@ -46,10 +46,9 @@ void nv_drm_gem_free(struct drm_gem_object *gem)
 
     nv_gem->ops->free(nv_gem);
 }
-
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
-                                        struct drm_gem_object *gem, int flags)
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags)
 {
+    struct drm_device *dev = gem->dev;
     struct nv_drm_device *nv_dev = to_nv_device(dev);
 
     struct nv_drm_gem_object *nv_gem = to_nv_gem_object(gem);
@@ -61,7 +60,7 @@ struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
         return ERR_PTR(-EINVAL);
     }
 
-    return drm_gem_prime_export(dev, gem, flags);
+    return drm_gem_prime_export(gem, flags);
 }
 
 struct sg_table *nv_drm_gem_prime_get_sg_table(struct drm_gem_object *gem)
diff --git a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h
index c3cb875..c4da335 100644
--- a/nvidia-drm/nvidia-drm-gem.h
+++ b/nvidia-drm/nvidia-drm-gem.h
@@ -156,8 +156,7 @@ done:
 
 void nv_drm_gem_free(struct drm_gem_object *gem);
 
-struct dma_buf *nv_drm_gem_prime_export(struct drm_device *dev,
-                                        struct drm_gem_object *gem, int flags);
+struct dma_buf *nv_drm_gem_prime_export(struct drm_gem_object *gem, int flags);
 
 static inline struct nv_drm_gem_object *nv_drm_gem_object_lookup(
     struct drm_device *dev,

Related articles

2019/11/04 15:59 / VcXsrv での「半角/全角 漢字」キーのキーリピートがおかしい

薄々気づいていたのだが,手元の Debian on WSL with VcXsrv で「半角/全角 漢字」キーのキーリピートがおかしい.日本語キーボードを無理やり英語キーボードとしてつかっているため,「半角/全角 漢字」キーは ` (Shiftで ~ )に割り当てられるのだが,一度押すだけで,位置文字 ` が入力された後に連続で ` が入力される.` を打ったあとに間髪入れずに他のキーを押すと問題ない...

これ,X の設定で解決できて,手元の環境ではxset -r 49で直る (もとのキーリピートにするにはxset r 49とする.しないけど).49は「半角/全角 漢字」キーのkeycode.xev等で調べられる.

参考:

Related articles

2019/10/26 18:45 / ScanSnap S1500 -> iX1500

ScanSnap S1500 をずっと使っていたのだが,先日 ScanSnap iX1500 を購入.

Windows 10 で ScanSnap S1500 (USB接続のみ)を使う場合,何故か PC Hibernate/Resume 後に ScanSnap Manager (ドライバに近いところのソフトで,S1500 で取り込みボタンを押すと,プロファイルに従ってスキャン開始し,適切なソフトに取り込んだデータを送ってくれる) が ScanSnap S1500 を認識してくれない状態になってしまう (Device Manager で見た感じ ScanSnap S1500 自体は Windows 10 に認識はされている).仕方なく S1500 を使う時は再起動していた...

で,iX1500 だが,管理ソフトは Windows/Android 両方ある.

ScanSnap Cloud は iX1500 から直接 Google Drive 等に送るような使い方が想定されている様子(一旦設定してしまうと iX1500 単体でクラウドにデータを送ることができるようになる).ScanSnap Home は S1500 での ScanSnap Organizer のような位置づけで,スキャンした PDF を管理できるソフト (スキャン開始は PC からでも iX1500 のパネルからでも,どちらからでも可能).ScanSnap Home でもクラウドにデータが送れるが,これは一旦 PC に保存して,それを Google Download Backup and Sync 等の同期機能で Google Drive に送る感じ.

Could との連携やライセンスのこともあって,ScanSnap Account を作らされるが,これ,私の Android (英語で使用)だと国が United States になってしまい,Windows 10 (こちらも英語で利用)は Japan (日本)になってしまう.かつ,それらのアカウントは別扱いになっている様子で,かなり悩んだ...(オンラインゲームで使うサーバ毎にアカウントが別みたいな...)

あと,英語インタフェースで使っているのだが,説明書もそうだが,日本語版がオリジナルのようで,英単語のチョイスが極めて悪く,使い勝手が非常に悪い(それの逆の理由でOSは英語で使っている).

以下,ScanSnap Home メモ.

ということで,基本はクラウドに送る感じで利用予定.

追記 (2019/10/28)

書き忘れたが,当然 ScanSnap S1500 に比べて iX1500 の方が読み取り速度が早く,かつ OCR については,以前は Organizer に取り込んで OCR を待つ感じだったが,クラウドに送るともうその時点で OCR がかかっている.

追記 (2019/11/12)

ScanSnap Home で名刺を取り込むと OS が英語モードだと日本語のOCRをしてくれない...

2019/10/23 19:22 / Twitter ユーザー名変更

Twitter はユーザー名(@以降の部分)変更が容易に可能ということを知る.Webではログインした状態で,以下のように辿ると変更可能.

表示名は以下のように Edit profile から変更.

なお,ユーザー名を変更すると変更前のリンク https://twitter.com/username は無効になって,かつ @username のメンションもリンクされなくなる.

というのは,ちょっと中の人を担当していたアカウントのユーザー名変更をすることがあったのだが,いろいろ怖いので,ユーザー名を変更したあとに,古いユーザー名で再度ユーザー登録し,新ユーザー名への誘導 Tweet をしておいた(というのが無難な対応っぽい).

ちなみにメールアドレス1つに付きTwitterアカウントは1つしか作成できないので,Gmail のサブアドレス(@gmail.com の @ の前に +example 等任意の文字列追加)を利用する(Postfix では拡張メールアドレスとか address extension と呼ばれるもの,もしくは RFC 5233).

2019/10/22 23:05 / SoftBank HTC U11修理

2017年11月から SoftBank の HTC U11 を利用しているのだが,主に酔っ払って落とすからなのだが,ガラスにかなりひびが入った状態になっていて,先日そのひび割れの箇所で指を若干切ったこともあって,修理を検討.指を切ったときはホテルだったので,ホテルで絆創膏をもらったぐらいには血が出た...

大昔に(へたった)バッテリー交換のことを考えると「あんしん保証パック」に入っておいたほうが良いとか友人に勧められていたこともあって,それを使って修理に出すことにした.My SoftBank から修理依頼.

https://www.softbank.jp/mobile/special/repair-smartphone/ から最適手続きのシミュレーションが可能で,選択肢は以下.

土曜日夜中に申し込んで月曜日に代替機着かつ修理の引取,という感じ.思っていたより早い.

代替機については時間指定ができない様子で,一方の引取りは時間指定可能だった.Web には代替機は引取りとは別便との記載があって,ちょっと代替機は引取りより早めに届くと良いなとおもって,引取りの時間指定は最終(19:00-21:00)にしていたのだが,代替機が佐川便で届いたのが 18:00 で,かつ引取りも佐川だったはずなので佐川の人に聞いたら,確かなにかあったようなと言っていたので,佐川車の中を確認してもらってその場で引き取ってもらった.

代替機は同機種(HTC U11)の色違いで,SIMカード差し替えてそのまま使えている.ただし以下.

ちょっと困ったのが『Google Authenticator』.これがないと AWS と Mailgun にログインできないことが本体引取り後...に気づいて,悩む.

AWS については AWS Multi-Factor Authentication (MFA) の削除が必要で,メールアドレスと電話番号が正しく登録されていれば自身で Web から削除可能.ただ,登録していた電話番号が古いもので,フォームから入力のうえ AWS のスタッフに助けてもらった.直ぐに米国から電話が掛かってきて,今からメール送るからそこに書かれているコードを読むように言われて,読んだら MFA を削除してくれて,ログイン試してみろと言われて,2FA なしでログインできるようになった(なんだか英語が相当聞きづらかったけど...).その後フォローアップメールが届いて,最新情報にアップデートするように書かれていた...

Mailgun については Paper Key があれば自身でなんとかできるらしいがそれを保存しておらず,サポートにメールで連絡.1日後ぐらいに verify.example.com (example.com は所持しているドメインを想定)の CNAME に mailgun.org を追加するよう指示があり,設定した旨伝えたら二要素認証 (2FA; Two-factor Authentication)を解除してくれた.

AWS/Mailgunともログインできる状態だとMFA/2FAを解除可能で,機種変更の際新旧デバイス両方利用できるようであれば,解除して新しい Authenticator を登録することが可能.

以下タイミングまとめ.

思っていたより早く修理された.代替機から修理済機への以降は同じ手順.費用は修理代金 30,240円(8%税込)で,会員割引が適用されて1,296円(8%税込み).

ちなみに Android 9 (pie) にアップデートされて帰ってきた.

2019/10/14 17:24 / gnome-terminal で Control-s が効かない

手元の Debian on WSL with VcXsrv の gnome-terminal で ctrl-s すると固まる(ctrl-q で復帰).stty -a によると以下のような感じで stop に割り当てられている.

% stty -a
speed 38400 baud; rows 32; columns 140; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

いつからこうなったのか不明.ターミナル内で Emacs を起動(emacs -nw)する際に C-s によるインクリメンタルサーチが出来ず非常に困る.以下で stop を undef する(ついでに C-q の start も undef).

% stty stop undef
% stty start undef

Windows から WSL の Debian を起動する際に現れる Windows のコンソールではこの問題は発生しない様子(stty -aでは stop/start が C-s/C-q に割り当てられているが).

2019/10/02 00:03 / Linux 5.3.1 -> 5.4-rc1

Linux 5.4-rc1 がでたので,.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-54-features&num=1 参照.

追加

削除

追記 (2019/11/25)

Linux 5.4 がでたので再確認.

Related articles

2019/10/01 17:29 / qTranslate-XT

随分前に開発が止まった qtranslate の代替として mqtranslate を利用したり,その開発も止まって qTranslate-X を利用したりしていたのだが,qTranslate-X も開発が止まっているらしい.

2019/9/1 9:53 / WordPress on Debian 10でも書いたとおりパッチが必要だったり,PHP 7.3.9-1~deb10u1 環境だと更に以下のワーニングも出る.WP-CLIを利用して気付いた.

PHP Warning:  "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /somewhere/wp-content/plugins/qtranslate-x/qtranslate_frontend.php on line 497

case 文中の continuebreak に置き換えれば済む話だが,qTranslate-X を引き継いで開発が進められている qTranslate-XT (eXTended) に移行することにした.ただし /wp-admin/ (WordPress の Web I/F) からだとプラグインが見つけられず,自前で/somewhere/wp-content/plugins/qtranslate-xt/に配置(zipを展開するかgit clone)する必要がある.

Related articles

2019/09/21 01:22 / 自転車ライト交換

2013年頃から使っていた自転車のライト,CAT EYE HL-EL130 が壊れてしまった.ブラケットにカチッと固定する部分がプラスチックで,それがもうきっちり嵌らなくなったと言うかすぐに取れてしまう状態になっていて,走っているうちに落としてしまい点かなくなった.ちなみに CAT EYE 製造なのだがCBA (サイクルベースアサヒ)ブランドの同等品.

ということで,明るめ・充電式・そこまで高くない CAT EYE VOLT200 HL-EL151RC を購入.明るくなってよいのだが,点滅モードも明るいままなので,結構チカチカうざい.あと点滅が少し遅い気がする.ちなみにブラケットは共通なので前のものをそのまま利用(新しいライトに付属しているものは保存).

2019/09/21 00:11 / Missing field "itemListElement" on WorePress with Breadcrumb NavXT

Google Search Console から以下のようなメールが届いた.

Google has started validating your fix of Breadcrumbs issues on your site. Specifically, we are checking for ‘Missing field “itemListElement”’, which currently affects 143 pages.

WordPress で Breadcrumb NavXTというプラグインを利用しているサイトに関する Validation Report で,古い Breadcrumb NavXT の Default のテンプレートのままだったのが原因.その Default はたぶん以下.

<span typeof="v:Breadcrumb"><a rel="v:url" property="v:title" title="Go to %title%." href="%link%" class="%type%">%htitle%</a></span>

これ,本来は以下のようになっているべき(class.bcn_breadcrumb.phpget_default_templateという関数で作られる様子).

<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to %title%." href="%link%" class="%type%" ><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>

ただ,このテンプレートを一括設定できる箇所がない.Settings → Breadcrumb NavXT でジャストなものを見つけられず,Home へのリンク向け等特別な場合のテンプレートは設定可能な様子で,それらも古い Default になっていて,さらに全てプラグインの Default に設定することも不可の様子.

ということで,一旦 Breadcrumb NavXT を Deactivate して,Delete して,再度インストールしたらプラグインの Default に設定された.これでしばらく様子見.

これで直らなかったら mysql に保存されている Breadcrumb NavXT 関連の設定を削除するなどを考えていたが,アンインストールすれば設定も削除される様子.ちなみに WordPress の options のテーブルの option_name = bcn_options というレコードに保存されている(uninstall.phpで削除される).

Related articles

2019/09/20 14:45 / nvidia-kernel-dkms 418.74-1 with Linux 5.3

以下の nvidia のドライバが Linux 5.3 でコンパイルできない話.

具体的には以下のエラー.

In file included from /var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c:21:
/var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c: In function ‘nvUvmInterfaceDeRegisterUvmOps’:
/var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:733:21: error: void value not ignored as it ought to be
         int __ret = on_each_cpu(func, info, 1);        \
                     ^~~~~~~~~~~
/var/lib/dkms/nvidia-current/418.74/build/nvidia/nv_uvm_interface.c:991:5: note: in expansion of macro ‘NV_ON_EACH_CPU’
     NV_ON_EACH_CPU(flush_top_half, NULL);
     ^~~~~~~~~~~~~~

これは smp: Remove smp_call_function() and on_each_cpu() return valueson_each_cpu が値を返さなくなったということなので,マクロでダミーの正常時の戻り値を作ってしまえばOK.以下パッチ.nvidia-legacy-390xx-kernel-dkms も同様.

--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -730,8 +730,8 @@ static inline void nv_vunmap(NvUPtr vaddr, NvU32 page_count)
 #elif (NV_ON_EACH_CPU_ARGUMENT_COUNT == 3)
 #define NV_ON_EACH_CPU(func, info)                     \
     ({                                                 \
-        int __ret = on_each_cpu(func, info, 1);        \
-        __ret;                                         \
+        on_each_cpu(func, info, 1);                    \
+        0;                                             \
      })
 #else
 #error "NV_ON_EACH_CPU_ARGUMENT_COUNT value unrecognized!"

Related articles

2019/09/10 19:12 / ヤマト運輸当日再配達受付時間

ヤマト運輸(クロネコヤマト)のインターネットからの申込みによる当日再配達受付時間(期限),なんとなく18:00だと思っていたが,17:40だった.http://www.kuronekoyamato.co.jp/ytc/info/info_180903.html によるともともとは18:40までだったところ,2018年9月に17:40になった模様.仕方なくドライバーに電話(この場合19:00まで).

インターネットで再配達依頼しようとしたら「以降在宅」という選択肢があったので,18:00までに帰宅できるから帰ってからでいいやと思って,帰宅後インターネットから再配達依頼しようとしたら,そもそも「当日」が選べなくて凹んだ...

というか宅配ボックス使ってくれたら良かったのに(ということで時間指定していなかったのだが),入らなかなったのか空きがなかったのだろうか...宅配ボックス頼みもアレ.

2019/09/04 16:41 / MegaRAID SAS (megaclisas-status)

MegaRAID SAS の状況を monitoring する package である megaclisas-status を導入.http://hwraid.le-vert.net/wiki/DebianPackages のとおり /etc/apt/sources.list を修正して,https://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.keyapt-key add して,megaclisas-status を入れるだけ.あとは sudo megaclisas-status で status が確認できる.

/etc/init.d/megaclisas-statusd 自体が daemon になっていて,

MAILTO=root   # Where to report problems
PERIOD=600    # Seconds between each check    (default 10 minutes)
REMIND=7200   # Seconds between each reminder (default 2 hours)

となっていて,10分毎にチェック,non-optimal RAID status になると2時間おきに root 宛に mail コマンドでリマインドメール送付,となっている.ただ,mailmailutils 由来の mail だと,root@hostname にメールを送ろうとして,プライベートネットワークで postfixInternet with smarthost の設定(外部のmail serverに全転送)で運用しているとメールが消える.ということで mailutils のかわりに bsd-mailx を install して,その mail コマンドを利用するようにする.

/etc/init.d/megaclisas-statusd/usr/sbin/sendmail を叩いてくれたらいいのに...

Related articles

2019/09/04 14:37 / OpenVPN on Debian 10 / OpenSSL: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small

OpenVPN が以下のエラーを吐いて起動しない問題発生.

Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: WARNING: POTENTIALLY DANGEROUS OPTION --verify-client-cert none|optional (or --client-cert-not-required) may accept clients which do not present a certificate
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: library versions: OpenSSL 1.1.1c  28 May 2019, LZO 2.10
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: PLUGIN_INIT: POST openvpn-plugin-auth-pam.so '[openvpn-plugin-auth-pam.so] [openvpn]' intercepted=PLUGIN_AUTH_USER_PASS_VERIFY 
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: OpenSSL: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: SSL_CTX_set_tmp_dh
Sep  1 00:00:30 XXX ovpn-vpn_server[XXXX]: Exiting due to fatal error

dh key too small ということで,DH 鍵交換(Diffie-Hellman key exchange)のビット数が少なく落ちてしまっている様子.1024ビットで使用していた.以下の通り2048ビットで生成したパラメタファイルを生成し,

% sudo openssl dhparam -out /etc/openvpn/dh2048.pem 2048

/etc/openvpn/hoge.conf 等設定ファイルで dh1024.pem を使っている場合は,以下の通り dh2048.pem に変更.

-dh dh1024.pem
+dh dh2048.pem

Related articles

2019/09/01 23:05 / X server でキーマップ変更

キーボードの設定は様々なレイヤがあってややこしいのだが,今回は X server というか Windows 版 X server である VcXsrv + WSL 環境での話.もっとハードウェアに近いところでの変更は当然 Windows 任せになるので(udev 使えない),X 上でキーマップを変更する.具体的には日本語キーボードをむりやり英語配列として使う場合に効かなくなる以下のいわゆる dead keys をなんとかしたいということ.

xev でまず keycode を調べる.よりハードウェアに近いレイヤに依存するので環境によっていろいろ変わる.手元(Windows を英語キーボードモードにした状態で VcXsrv を起動) では以下だった.

あとは以下実行するだけ.

% xmodmap -e "keycode 133 = backslash bar"
% xmodmap -e 'keycode 211 = backslash underscore'

Related articles

2019/09/01 10:53 / Debian 10 に上げたときのメモ

Related articles

2019/09/01 10:11 / MediaWiki on Debian 10

Debian 10 に上げた機会に MediaWiki も 1.30 から 1.33 に上げる.以下メモ.

Related articles

2019/09/01 09:53 / WordPress on Debian 10

Debian を stretch (Debian 9) から buster (Debian 10)にあげたら apache が以下のようなWarningを吐くようになった.

[Sat Aug 31 20:XX:XX.XXXXXX 2019] [php7:warn] [pid 23XX] [client XXX.XX.XXX.XX:XXXXXX] PHP Warning:  Parameter 2 to qtranxf_postsFilter() expected to be a reference, value given in /var/www/wp-includes/class-wp-hook.php on line 286

これは qtranslate-x の問題で,https://wordpress.org/support/topic/problem-with-php-7-1-2/ によると以下のように &$query& を取り除けば良いらしい.

diff --git a/wp-content/plugins/qtranslate-x/qtranslate_frontend.php b/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
index 64df38f9..461ce94e 100644
--- a/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
+++ b/wp-content/plugins/qtranslate-x/qtranslate_frontend.php
@@ -520,7 +520,7 @@ function qtranxf_translate_post($post,$lang) {
        }
 }

-function qtranxf_postsFilter($posts,&$query) {//WP_Query
+function qtranxf_postsFilter($posts,$query) {//WP_Query
        global $q_config;
        //qtranxf_dbg_log('qtranxf_postsFilter: $posts: ',$posts);
        //$post->post_content = qtranxf_useCurrentLanguageIfNotFoundShowAvailable($post->post_content);
@@ -543,7 +543,7 @@ function qtranxf_postsFilter($posts,&$query) {//WP_Query
 add_filter('the_posts', 'qtranxf_postsFilter', 5, 2);

 /** allow all filters within WP_Query - many other add_filters may not be needed now? */
-function qtranxf_pre_get_posts( &$query ) {//WP_Query
+function qtranxf_pre_get_posts( $query ) {//WP_Query
        //qtranxf_dbg_log('qtranxf_pre_get_posts: $query: ',$query);
        //'post_type'
        if(isset($query->query_vars['post_type'])){

Related articles

2019/08/26 15:22 / フロリダ・オーランド メモ

先月オーランドに行ったメモ.

Related articles

2019/08/05 11:31 / rstudio on Debian 10 (rstudio: error while loading shared libraries: libssl.so.1.0.2: cannot open shared object file: No such file or directory)

RStudio Desktop (Free)はDebian 9版までしか現状なくて,Debian 10 (buster)では以下の様に libssl.so.1.0.2 が存在せず起動できない.

% rstudio
rstudio: error while loading shared libraries: libssl.so.1.0.2: cannot open shared object file: No such file or directory

libssl.so.1.0.2 は package libssl1.0.2 (stretch でのみ存在)で提供されていて,これを入れると解決する.

% wget http://security.debian.org/debian-security/pool/updates/main/o/openssl1.0/libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb
% sudo dpkg -i libssl1.0.2_1.0.2s-1~deb9u1_amd64.deb

2019/07/24 20:01 / wl-summary-redisplay-internal: ‘recenter’ing a window that does not display current-buffer.

Wanderlust で複数メッセージを * でマークして,m f でまとめて転送しようとすると,以下の様に怒られて1件目しか draft バッファに入ってくれない.

wl-summary-redisplay-internal: ‘recenter’ing a window that does not display current-buffer.

wl-summary-redisplay-internalの以下の箇所でコケているっぽい.

      (when wl-summary-recenter
        (recenter (/ (- (window-height) 2) 2))
        (if (not wl-summary-indent-length-limit)
        (wl-horizontal-recenter)))

あまり深追いせずに ~/.wl に以下を書いておく.

(setq wl-summary-recenter nil)

Info による変数の説明は以下の通り.

`wl-summary-recenter'
     初期設定は `t'。Non-nil ならば表示したときに表示中のメッセージのサ
     マリ行をウィンドウの中央付近に移動します。

今まで気にしたこと無いし,nil にしたところで挙動が変わらないような気もする.

2019/07/23 19:42 / Windows 10 WSL (Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux)(Debian 9)導入のメモ.様々なことができるようになるつつあり便利なので,手元以外の他の計算機でも導入したので,そのメモ.まず WSL を有効にする.https://docs.microsoft.com/en-us/windows/wsl/install-win10 参照.以下を管理者権限の PowerShell で実行.再起動.

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

あとは,Store から Debian を検索して Install/Launch.以下の様な感じで Shell が立ち上がって終了.

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: myn
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
myn@example:~$ id
uid=1000(myn) gid=1000(myn) groups=1000(myn),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)

まず gid (primary group)が username で感じ悪いと言うか落ち着かないので,100(users) に変更する.

myn@example:~$ sudo usermod -gusers myn

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

[sudo] password for myn:

上記,usermod -Gusers myn だと groups=100(users) のみになって,sudo group から抜けてしまい,sudoできなくなるので注意(一回間違えてやってしまい,一旦 Debian を削除して,再度 Install した).

一旦窓を閉じて再度 Debian を起動し以下確認.ついでにいちいち sudo で password 入力するのが面倒なのでvisudoNOPASSWDにする.

myn@example:~$ id
uid=1000(myn) gid=100(users) groups=100(users),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
myn@example:~$ sudo sh -c 'EDITOR=vi visudo'
-%sudo   ALL=(ALL:ALL) ALL
+%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

Default の umask が 000 で落ち着かないので,umask 022 する...

ひとまず package を upgrade して zshgit を入れる./usr/bin/zsh に切り替えて窓立ち上げ直し.

myn@example:~$ sudo apt update
myn@example:~$ sudo apt upgrade
myn@example:~$ sudo apt install zsh git
myn@example:~$ chsh
Password:
Changing the login shell for myn
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /usr/bin/zsh

おもむろに sid に上げる.

myn@example:~$ echo deb http://deb.debian.org/debian unstable main | sudo tee /etc/apt/sources.list
myn@example:~$ sudo apt update
myn@example:~$ sudo apt dist-upgrade

使用している zsh が混乱した状態になるので,窓立ち上げ直し.ここから git で設定ファイル等を他から持ってくるのだが,ssh が必要になるので,key-pairs を copy してくる.

% rsync -avz remote:.ssh/ .ssh/
myn@remote's password:
% ssh-agent screen
% ssh-add

あとは自身管理で git に入れている,必要 package を install したり各種設定をする謹製 script を実行.時間を喰うので,その間に Windows 用 Xserver である VcXsrv (現時点では vcxsrv-64.1.20.1.4.installer.exe が最新) を install.

他メモ.

Related articles

2019/07/22 19:13 / Linux 5.2.2 -> 5.3-rc1

Linux 5.3-rc1 がでたので,.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.New features 等は https://www.phoronix.com/scan.php?page=article&item=linux-53-features&num=1 参照.

追加

Rename

削除された

RDM関連

crypto 関連

Related articles

2019/07/19 16:32 / Mac の NFD: Normalization Form Canonical Decompression 問題

MacではUnicode正規化形式としてNFD (Normalization Form Canonical Decompression; 正規化形式D)が利用されていて,Macユーザから日本語ファイル名のファイルを含むzipファイルが送られてくる際,そのファイル名がNFDになっていて Windows/Linux ユーザからすると感じが悪い.具体的には濁点(U+3099)・半濁点(U+309A)が文字として分離されている状態.

Windows ではエクスプローラーでひとまず表示はされる.手元の Linux の場合もそれっぽくは表示されるが ÿ という謎の文字が後に付加される...

そもそもファイル名がUTF-8でzipに含まれるので,Windows (Shift_JISを想定)では激しくファイル名が文字化けする.一方 Linux の unzip は UTF-8 を想定するので正しいファイル名で復号される(Windows 由来の Shift_JIS ファイル名が含まれるzipをLinuxで解凍する際は自動文字コード変換をする unar 等を使う).

いろいろやり方はあるが以下の Ruby script で濁点と半濁点だけなんとかする(あ゛などは想定外).

print STDIN.read.split("").inject([]){|r,i|
    if [0x3099,0x309a].include?(j=i.ord)
        i=(r.pop.ord + j - 0x3098).chr('UTF-8')
    end
    r<< i
}*""

convmv (Perl script)というコマンドが利用可能な場合は以下でまるごと置換可能.

% convmv * -f UTF-8 -t UTF-8 --nfc --notest

なお,Mac 環境から rsync する際は --iconv=UTF8-MAC,UTF-8 optionを付けると良いらしい.NFD/NFC変換がiconvでできないか手元(Linux)で試してみたが,以下のとおりサポートされていなかった.

iconv: conversion to `UTF-8-MAC' is not supported

参考:

追記 (2019/9/10)

Ruby で外部ライブラリを利用するならruby-unfを利用する.以下にパイプで送るとか.require "unf"String class に to_nfcto_nfd といった instance method が追加される.

ruby -e 'require "unf"; print STDIN.read.to_nfc'

なお ÿ が表示されてしまうのは screen のバグならしい.ただ,NFCと同様に表示されると,それはそれでNFDが見つけられなくてちょっと困るが...そもそも Mac の screen ユーザにとってはこれ死活問題かもしれない.screen に対するパッチ等,以下参照.

2019/07/04 23:04 / /usr/lib/mozc/mozc_tool: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

WSL で Debian GNU/Linux を使っている(Windows 10 May 2019 Update でかなり使えるようになったのでもう VMWare いらないかも...)のだが,sid に upgrade したらmozc_toolが以下でコケるようになった.

% /usr/lib/mozc/mozc_tool --mode=config_dialog
/usr/lib/mozc/mozc_tool: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory
% ldd /usr/lib/mozc/mozc_tool | grep 'not found' | uniq
        libQt5Core.so.5 => not found
% LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 /usr/lib/mozc/mozc_tool --mode=config_dialog
ERROR: ld.so: object '/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
/usr/lib/mozc/mozc_tool: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory

package libqt5core5a/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 は含まれていて,確かに存在するのだが,うまく読み込んでもらえない.解決法は以下.

sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 

ちなみに file で違いが確認できるらしい.for GNU/Linux 3.17.0 となっているのが問題ならしい.

% sudo apt reinstall libqt5core5a
% file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 > 0
% sudo strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3
% file /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3 > 1
% wdiff 0 1
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5.11.3: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=70947cf4ce539861badd2c95e0130074456c9bee, [-for GNU/Linux 3.17.0,-] stripped
% uname -r
4.4.0-18362-Microsoft

手元のWSL環境,Xserver には VcXsrv (multiple windows)を利用.日本語入力は基本的に Emacs のみで OK なので,それ用に emacs-mozc と設定用の mozc-utils-gui を install.いわゆる ibus の mozc を動かすのは断念.Windows の Google 日本語入力と WSL 上の Mozc の両方が動いている謎環境になっている.

参考:

追記 (2019/9/10)

ibusは断念したのだが,fcitxは動作を確認.Toggle Input Method などのキーバインドの変更はfcitx-configtoolで行う.

追記 (2020/6/24)

WSL2 + VcXsrv + fcitx だと,特定の GUI ソフトとの相性が悪く,具体的には inkscape が Windows サイズを適切に定められずに高速で窓のリサイズを繰り返し,最終的には VcXsrv を道連れに落ちてしまう.Emacs 上で日本語を書いて貼り付けるのが現状では無難げ.

Related articles

2019/06/28 20:38 / GeForce GT 430 with nvidia-legacy-390xx-kernel-dkms 390.116-1~bpo9+1

Debian GNU/Linux stretch (backports) の NVIDIA のドライバ,古いデバイスと新しいデバイスの混在環境(計算機としては別) で以下を利用していたのだが,418.56 から GeForce GT 430 のサポートがなくなった様子.

ii  nvidia-kernel-dkms              418.56-2~bpo9+1  amd64        NVIDIA binary kernel module DKMS source
ii  nvidia-legacy-340xx-kernel-dkms 340.107-2~bpo9+1 amd64        NVIDIA binary kernel module DKMS source (340xx legacy version)

nvidia-current のドライバを modprobe すると以下のように怒られる.

NVRM: The NVIDIA GeForce GT 430 GPU installed in this system is
NVRM:  supported through the NVIDIA 390.xx Legacy drivers. Please
NVRM:  visit http://www.nvidia.com/object/unix.html for more
NVRM:  information.  The 418.74 NVIDIA driver will ignore
NVRM:  this GPU.  Continuing probe...

ということで nvidia-legacy-340xx-kernel-dkms を purge して nvidia-legacy-390xx-kernel-dkms 390.116-1~bpo9+1 を install.結構コードが 418.56 と似たような感じになっていて,5.1.15 向け patch は以下のような感じ.nvidia-kernel-dkms 410.104-1~bpo9+1 の Linux 5.1 向け patch とほぼ同じ (行数が若干ずれる程度).

diff --git a/common/inc/nv-list-helpers.h b/common/inc/nv-list-helpers.h
index 0aed851..81c2d4e 100644
--- a/common/inc/nv-list-helpers.h
+++ b/common/inc/nv-list-helpers.h
@@ -91,10 +91,12 @@
         list_entry((pos)->member.next, typeof(*(pos)), member)
 #endif
 
+/*
 static inline int list_is_first(const struct list_head *list,
                                 const struct list_head *head)
 {
     return list->prev == head;
 }
+*/
 
 #endif // __NV_LIST_HELPERS_H__
diff --git a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c
index 24631c0..e64b9fe 100644
--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -30,7 +30,7 @@
 #include "nvidia-drm-utils.h"
 #include "nvidia-drm-encoder.h"
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 1c2db68..90ce30b 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -41,7 +41,7 @@
 
 #include <drm/drmP.h>
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #if defined(NV_DRM_DRM_GEM_H_PRESENT)
 #include <drm/drm_gem.h>
diff --git a/nvidia-drm/nvidia-drm-encoder.c b/nvidia-drm/nvidia-drm-encoder.c
index f66bbd7..0e5e2a8 100644
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -31,7 +31,7 @@
 #include "nvidia-drm-crtc.h"
 #include "nvidia-drm-helper.h"
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
index 8636eff..01c6ce4 100644
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -222,7 +222,7 @@ done:
 
 /* XXX Move these vma operations to os layer */
 
-static int __nv_drm_vma_fault(struct vm_area_struct *vma,
+static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
                               struct vm_fault *vmf)
 {
     unsigned long address = nv_page_fault_va(vmf);
@@ -268,7 +268,7 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
  */
 
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
-static int nv_drm_vma_fault(struct vm_fault *vmf)
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
 {
     return __nv_drm_vma_fault(vmf->vma, vmf);
 }
diff --git a/nvidia-uvm/uvm8.c b/nvidia-uvm/uvm8.c
index e00923d..7278415 100644
--- a/nvidia-uvm/uvm8.c
+++ b/nvidia-uvm/uvm8.c
@@ -166,13 +166,13 @@ static void uvm_destroy_vma_semaphore_pool(struct vm_area_struct *vma)
 // If a fault handler is not set, paths like handle_pte_fault in older kernels
 // assume the memory is anonymous. That would make debugging this failure harder
 // so we force it to fail instead.
-static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
     UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
     return VM_FAULT_SIGBUS;
 }
 
-static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -390,7 +390,7 @@ static void uvm_vm_close_managed(struct vm_area_struct *vma)
         uvm_record_unlock_mmap_sem_write(&current->mm->mmap_sem);
 }
 
-static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
     uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
     uvm_va_block_t *va_block;
@@ -507,7 +507,7 @@ convert_error:
     }
 }
 
-static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault(vmf->vma, vmf);

Related articles

2019/06/19 15:05 / Postfix メールの最大サイズ変更

手元の Postfix で大きめのメールが弾かれるので設定./etc/postfix/main.cfmessage_size_limit = 30720000 などと書いて postfix を restart するだけ.

Default は http://www.postfix.org/postconf.5.html のとおり 10240000 (10MByte).

ちなみに,Gmail/Outlook.com のサイズ制限は以下.

2019/06/17 16:32 / rdtool-elisp 0.6.38-4, Symbol's function definition is void: insert-string

ほぼ markdown に移行したのだが,一部 RD を使う場面があって,Emacs の rd-mode を使っているのだが,M-RET (箇条書きItem (*)追加)が以下でコケる.

if: Symbol’s function definition is void: insert-string

手元の Emacs 24.5.1 で f1-f insert-string で確認したところ以下とのことでinsertを使わなければならないらしい.

This function is obsolete since 22.1;
use `insert' instead.

なお insert-string は以下で定義されている(integerであればstringに変換のうえinsertする).

(defun insert-string (&rest args)
  "Mocklisp-compatibility insert function.
Like the function `insert' except that any argument that is a number
is converted into a string by expressing it in decimal."
  (declare (obsolete insert "22.1"))
  (dolist (el args)
    (insert (if (integerp el) (number-to-string el) el))))

github では https://github.com/uwabami/rdtool/commit/9879b190716b43ff5801782ddf2de65b0a5893ef で修正されているようだが Debian Package はまだのようで,ひとまず ~/.emacs に以下を書いておく.

(defun rd-intelligent-newline ()
  (interactive)
  (let (item)
    (setq item
          (save-excursion (rd-search-last-listitem) )
          )
    (end-of-line)
    (newline)
    (if item (insert item) )
    )
  )

Related articles

2019/06/12 16:10 / Linux 5.1.8 -> 5.2-rc4

Linux 5.2 の準備のため,.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.x86_64.

追加

ほか

削除

追記 (2019/7/13)

nvidia-kernel-dkms 418.74-1 と nvidia-legacy-390xx-kernel-dkms 390.116-1 で,以下の箇所で compile に失敗する(Linux 5.2.0).mm: introduce put_user_page*(), placeholder versions

/var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm8_tools.c:209:13: error: conflicting types for ‘put_user_pages’
 static void put_user_pages(struct page **pages, NvU64 page_count)
             ^~~~~~~~~~~~~~
In file included from /var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-pgprot.h:17,
                 from /var/lib/dkms/nvidia-current/418.74/build/common/inc/nv-linux.h:20,
                 from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm_linux.h:41,
                 from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm_common.h:48,
                 from /var/lib/dkms/nvidia-current/418.74/build/nvidia-uvm/uvm8_tools.c:23:
./include/linux/mm.h:1075:6: note: previous declaration of ‘put_user_pages’ was here
 void put_user_pages(struct page **pages, unsigned long npages);
      ^~~~~~~~~~~~~~

./include/linux/mm.hに導入されたput_user_pagesはNVIDIAのドライバのそれと全く同じなので,以下のようにNVIDIA側でcomment outしてしまう.これでcompileできる.

--- a/nvidia-uvm/uvm8_tools.c
+++ b/nvidia-uvm/uvm8_tools.c
@@ -204,12 +204,14 @@ static bool tracker_is_counter(uvm_tools_event_tracker_t *event_tracker)
     return event_tracker != NULL && !event_tracker->is_queue;
 }
 
+/*
 static void put_user_pages(struct page **pages, NvU64 page_count)
 {
     NvU64 i;
     for (i = 0; i < page_count; i++)
         put_page(pages[i]);
 }
+*/
 
 static void unmap_user_pages(struct page **pages, void *addr, NvU64 size)
 {

Related articles

2019/05/08 01:01 / RAID1 の LUKS encrypted volume が壊れた

Intel Rapid Storage Technology の RAID1 (mirror) で運用していたボリューム(HDD 2台で構成)の片方の HDD が頻繁に以下で反応しなくなって,使い物にならないので,別途買っていたHDDでリプレースしようとして失敗.

May  7 19:11:22 hoge kernel: [1666250.655691] ata2: link is slow to respond, please be patient (ready=0)
May  7 19:11:27 hoge kernel: [1666255.359669] ata2: COMRESET failed (errno=-16)
May  7 19:11:30 hoge kernel: [1666258.195679] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
May  7 19:11:30 hoge kernel: [1666258.197435] ata2.00: configured for UDMA/133

http://blog.e-photographer.net/raid-degraded?lang=ja の記事を参考にしつつやっていたつもりなのだが,途中で失敗.以下失敗手順.

この手順でなにが起こったかというと /dev/md126 の先頭 4096 byte が初期化されてしまい(sudo dd if=/dev/md126 | less等でざっと見の結果),実は LUKS でまるごと /dev/md126 を encrypted volume として利用していたので,つまり LUKS ヘッダが壊れてしまった.

cryptsetup luksOpenできず,そもそもcryptsetup luksDumpもできず(ヘッダが存在しないので),実はどこかにヘッダのバックアップがあったりしないかとman cryptsetupを確認すると,以下のように書かれており,どうやらダメっぽいことに気づく.

LUKS header: If the header of a LUKS volume gets damaged, all data is permanently lost unless you have a header-backup. If a key-slot is damaged, it can only be restored from a header-backup or if another active key-slot with known passphrase is undamaged. Damaging the LUKS header is something people manage to do with surprising frequency. This risk is the result of a trade-off between security and safety, as LUKS is designed for fast and secure wiping by just overwriting header and key-slot area.

他の計算機で LUKS header のバックアップを sudo cryptsetup luksHeaderBackup /dev/md126 --header-backup-file backup_file でとってみたところ 2,068,480 byte (4096x505) あって,その先頭 4,096 byte (UUIDやCipher mode,MK digest/salt)を移植してみたが当然だめだった(偽情報だが luksDump は可能になるが,やはり luksOpen でパスフレーズが合うはずがない).

参考:

2019/05/07 19:43 / Linux 5.0.9 -> 5.1.0

5.1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.

その他

DKMS

案の定 nvidia-kernel-dkms (410.104-1~bpo9+1) と nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) が compile できない.broadcom-sta-dkms は今回試さず.エラーは以下のようなもの(抜粋).

/var/lib/dkms/nvidia-current/410.104/build/common/inc/nv-list-helpers.h:94:19: error: redefinition of ‘list_is_first’
 static inline int list_is_first(const struct list_head *list,
                   ^~~~~~~~~~~~~
In file included from /var/lib/dkms/nvidia-current/410.104/build/common/inc/nv-kthread-q.h:28:0,
                 from /var/lib/dkms/nvidia-current/410.104/build/nvidia/nv-kthread-q.c:24:
./include/linux/list.h:214:19: note: previous definition of ‘list_is_first’ was here
 static inline int list_is_first(const struct list_head *list,
                   ^~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/410.104/build/nvidia-uvm/uvm8.c:187:14: error: initialization from incompatible pointer type [-Werror=incompatible-po
inter-types]
     .fault = uvm_vm_fault_sigbus_wrapper
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/410.104/build/nvidia-drm/nvidia-drm-encoder.c:293:5: error: implicit declaration of function ‘drm_kms_helper_hotplug_event’ [-Werror=implicit-function-declaration]
     drm_kms_helper_hotplug_event(dev);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

list_is_first については mm, compaction: use free lists to quickly locate a migration sourcelist_is_firstdrivers/gpu/drm/i915/i915_utils.h から include/linux/list.h に移動したことによるもの./usr/src/nvidia-current/410.104/build/common/inc/nv-list-helpers.h でも全く同じコードなので,/usr/src/nvidia-current/410.104/build/common/inc/nv-list-helpers.h から削除してしまう.

vm_operations_struct.faultincompatible pointer type の件については,mm: change return type to vm_fault_t で返り値がvm_fault_tに変更になったため.返り値をvm_fault_tにする.

最後のimplicit declaration of functionについては drm: Split out drm_probe_helper.h で drm probe helper が drm_crtc_helper.h から drm_probe_helper.h に分離されたことによるもの.drm_crtc_helper.h ではなく drm_probe_helper.hinclude するようにする.

以下 nvidia-kernel-dkms (410.104-1~bpo9+1) 向け patch.

diff --git a/common/inc/nv-list-helpers.h b/common/inc/nv-list-helpers.h
index 0aed851..81c2d4e 100644
--- a/common/inc/nv-list-helpers.h
+++ b/common/inc/nv-list-helpers.h
@@ -91,10 +91,12 @@
         list_entry((pos)->member.next, typeof(*(pos)), member)
 #endif
 
+/*
 static inline int list_is_first(const struct list_head *list,
                                 const struct list_head *head)
 {
     return list->prev == head;
 }
+*/
 
 #endif // __NV_LIST_HELPERS_H__
diff --git a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c
index 4dd12d1..723d35f 100644
--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -30,7 +30,7 @@
 #include "nvidia-drm-utils.h"
 #include "nvidia-drm-encoder.h"
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
index 49f099f..ca714c2 100644
--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -41,7 +41,7 @@
 
 #include <drm/drmP.h>
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #if defined(NV_DRM_DRM_GEM_H_PRESENT)
 #include <drm/drm_gem.h>
diff --git a/nvidia-drm/nvidia-drm-encoder.c b/nvidia-drm/nvidia-drm-encoder.c
index f66bbd7..0e5e2a8 100644
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -31,7 +31,7 @@
 #include "nvidia-drm-crtc.h"
 #include "nvidia-drm-helper.h"
 
-#include <drm/drm_crtc_helper.h>
+#include <drm/drm_probe_helper.h>
 
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
diff --git a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
index 998fcc2..1f2d974 100644
--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -330,7 +330,7 @@ done:
 
 /* XXX Move these vma operations to os layer */
 
-static int __nv_drm_vma_fault(struct vm_area_struct *vma,
+static vm_fault_t __nv_drm_vma_fault(struct vm_area_struct *vma,
                               struct vm_fault *vmf)
 {
     unsigned long address = nv_page_fault_va(vmf);
@@ -377,7 +377,7 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
  */
 
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
-static int nv_drm_vma_fault(struct vm_fault *vmf)
+static vm_fault_t nv_drm_vma_fault(struct vm_fault *vmf)
 {
     return __nv_drm_vma_fault(vmf->vma, vmf);
 }
diff --git a/nvidia-uvm/uvm8.c b/nvidia-uvm/uvm8.c
index 70ed244..9f3d107 100644
--- a/nvidia-uvm/uvm8.c
+++ b/nvidia-uvm/uvm8.c
@@ -166,13 +166,13 @@ static void uvm_destroy_vma_semaphore_pool(struct vm_area_struct *vma)
 // If a fault handler is not set, paths like handle_pte_fault in older kernels
 // assume the memory is anonymous. That would make debugging this failure harder
 // so we force it to fail instead.
-static int uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
     UVM_DBG_PRINT_RL("Fault to address 0x%lx in disabled vma\n", nv_page_fault_va(vmf));
     return VM_FAULT_SIGBUS;
 }
 
-static int uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_sigbus_wrapper(struct vm_fault *vmf)
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault_sigbus(vmf->vma, vmf);
@@ -390,7 +390,7 @@ static void uvm_vm_close_managed(struct vm_area_struct *vma)
         uvm_record_unlock_mmap_sem_write(&current->mm->mmap_sem);
 }
 
-static int uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
     uvm_va_space_t *va_space = uvm_va_space_get(vma->vm_file);
     uvm_va_block_t *va_block;
@@ -507,7 +507,7 @@ convert_error:
     }
 }
 
-static int uvm_vm_fault_wrapper(struct vm_fault *vmf)
+static vm_fault_t uvm_vm_fault_wrapper(struct vm_fault *vmf)
 {
 #if defined(NV_VM_OPS_FAULT_REMOVED_VMA_ARG)
     return uvm_vm_fault(vmf->vma, vmf);

以下 nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) 向け patch.Linux 5.0 向け patchがあたっていることが前提.

diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 9f1a479..7d6a99a 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -828,7 +828,7 @@ done:
 
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
-int _fault(struct vm_fault *vmf)
+vm_fault_t _fault(struct vm_fault *vmf)
 #else
 int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 #endif
@@ -884,7 +884,7 @@ static struct vm_operations_struct uvmlite_vma_ops =
 //
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
-int _sigbus_fault(struct vm_fault *vmf)
+vm_fault_t _sigbus_fault(struct vm_fault *vmf)
 #else
 int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 #endif

ともに Linux 5.1 より前の version で動かすことは考えていない.

追記 (2019/5/9)

nvidia-kernel-418.56 では list_is_first が存在するかのチェックが行われるので,コメントアウト不要.

Related articles

2019/04/19 12:48 / TermService の再起動

RDPで接続している先の TermService (RDPサーバ; termsrv.dll)を(いろいろあって再起動したい時の)再起動するやり方メモ.Administrator Command Prompt で以下.

> tasklist /svc /fi "imagename eq svchost.exe" | findstr TermService
> taskkill /f /pid PID

1行目で TermService の PID を調べて,2行目で kill する(RDP接続は一旦切られる).その後自動で起動する.

参考:

2019/04/14 15:28 / Let's Encrypt の Root Certificate の Debian への追加

Debian の場合 /usr/share/ca-certificates/ に *.crt として配置して dpkg-reconfigure ca-certificates する.

wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt
sudo cp lets-encrypt-x3-cross-signed.pem.txt /usr/share/ca-certificates/lets-encrypt-x3-cross-signed.crt
sudo dpkg-reconfigure ca-certificates

追記 (2019/4/15)

Debian が信じてくれないのはどうやら Apache の設定の問題だった様子.以下のように cert.pem (証明書) の箇所を fullchain.pem (証明書と中間証明書を連結したファイル)に変更したら curl 等でも正しくアクセスできるようになった.上記のように lets-encrypt-x3-cross-signed.pem (中間証明書)を install するのは宜しくない.

-SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
+SSLCertificateFile /etc/letsencrypt/live/www.example.com/fullchain.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
 SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem

参考:

Related articles

2019/03/09 00:06 / Windows 10 Pro 1803 の Samba NT4 ドメイン参加

通常以下の手続で Samba NT4 Domain に参加可能なのだがなぜだかうまく行かない.

症状は「ドメインに参加できなくなってしまいました」と同じ.日本語で調べていても埒が明かなくて,本家を見てみるとそもそも Windows 10 で NT4 は...みたいなことが書かれていて,Active Directory (AD) にアップグレードせよと書かれている.

Setting up Samba as an Active Directory Domain Controller を参照しつつ AD DC に移行することも考えたが,いろいろ調べたところ,Unable to join domain with new windows 10 computers - build 1803によると単に Windows Version 1803 のバグらしい.1809 に更新すると直る.ただしいろいろ試行錯誤していて,以下の状態でドメイン参加できている(どれが効いているか不要なのか不明).

Related articles

2019/03/07 22:16 / Linux 4.20.13 -> 5.0.0

5.0が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.汎用指向の環境.Btrfs だと swap file が使えなかった(禁止されていた)のだが,Btrfs: support swap filesにより復活.

DKMS

案の定 nvidia-kernel-dkms (390.87-8~deb9u1) と nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) が compile できない.broadcom-sta-dkms は今回試さず.エラーは以下のようなもの(抜粋).

/var/lib/dkms/nvidia-current/390.87/build/nvidia/os-interface.c:434:5: error: implicit declaration of function ‘do_gettimeofday’ [-Werror=implicit-function-declaration]
     do_gettimeofday(&tm);
     ^~~~~~~~~~~~~~~
/var/lib/dkms/nvidia-current/390.87/build/nvidia-drm/nvidia-drm-gem.h:82:5: error: implicit declaration of function ‘drm_gem_object_unreference_unlocked’ [-Werror=implicit-function-declaration]
     drm_gem_object_unreference_unlocked(&nv_gem->base);

do_gettimeofday は適当に関数を用意して,DRMについては以下のとおり置換で対応.

-drm_gem_object_unreference_unlocked(object);
+drm_gem_object_put_unlocked(object);

-drm_gem_object_unreference(object);
+drm_gem_object_put(object);

-drm_framebuffer_reference(object);
+drm_framebuffer_get(object);

-drm_framebuffer_unreference(object);
+drm_framebuffer_put(object);

-drm_dev_unref(object);
+drm_dev_put(object);

以下 nvidia-kernel-dkms (390.87-8~deb9u1) の patch.conftest.shNV_DRM_DEV_UNREF_PRESENT が define されなくなるので,逆に else の方を修正(drm_dev_free は更に古い I/F).とりあえず stable の package ベースでやり過ごすためだけのパッチ.

--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -1893,4 +1893,13 @@ static inline NvU64 nv_expand_nvlink_addr(NvU64 addr47)
 #include <linux/backlight.h>
 #endif
 
+static inline void do_gettimeofday(struct timeval *tv)
+{
+    struct timespec64 now;
+
+    ktime_get_real_ts64(&now);
+    tv->tv_sec = now.tv_sec;
+    tv->tv_usec = now.tv_nsec/1000;
+}
+
 #endif  /* _NV_LINUX_H_ */
diff --git a/nvidia-drm/nvidia-drm-gem.h b/nvidia-drm/nvidia-drm-gem.h
index f5964e2..a9f057d 100644
--- a/nvidia-drm/nvidia-drm-gem.h
+++ b/nvidia-drm/nvidia-drm-gem.h
@@ -79,7 +79,7 @@ static inline int nv_drm_gem_handle_create_drop_reference(
 
     /* drop reference from allocate - handle holds it now */
 
-    drm_gem_object_unreference_unlocked(&nv_gem->base);
+    drm_gem_object_put_unlocked(&nv_gem->base);
 
     return ret;
 }
@@ -153,13 +153,13 @@ static inline struct nv_drm_gem_object *nv_drm_gem_object_lookup(
 static inline void
 nv_drm_gem_object_unreference_unlocked(struct nv_drm_gem_object *nv_gem)
 {
-    drm_gem_object_unreference_unlocked(&nv_gem->base);
+    drm_gem_object_put_unlocked(&nv_gem->base);
 }
 
 static inline void
 nv_drm_gem_object_unreference(struct nv_drm_gem_object *nv_gem)
 {
-    drm_gem_object_unreference(&nv_gem->base);
+    drm_gem_object_put(&nv_gem->base);
 }
 
 static inline int nv_drm_gem_handle_create(struct drm_file *filp,
diff --git a/nvidia-drm/nvidia-drm-helper.c b/nvidia-drm/nvidia-drm-helper.c
index 4ccf819..429f346 100644
--- a/nvidia-drm/nvidia-drm-helper.c
+++ b/nvidia-drm/nvidia-drm-helper.c
@@ -149,12 +149,12 @@ void nv_drm_atomic_clean_old_fb(struct drm_device *dev,
         if (ret == 0) {
             struct drm_framebuffer *new_fb = plane->state->fb;
             if (new_fb)
-                drm_framebuffer_reference(new_fb);
+                drm_framebuffer_get(new_fb);
             plane->fb = new_fb;
             plane->crtc = plane->state->crtc;
 
             if (plane->old_fb)
-                drm_framebuffer_unreference(plane->old_fb);
+                drm_framebuffer_put(plane->old_fb);
        }
        plane->old_fb = NULL;
    }
diff --git a/nvidia-drm/nvidia-drm-helper.h b/nvidia-drm/nvidia-drm-helper.h
index ab61c7e..e002d7c 100644
--- a/nvidia-drm/nvidia-drm-helper.h
+++ b/nvidia-drm/nvidia-drm-helper.h
@@ -39,7 +39,7 @@ static inline void nv_drm_dev_free(struct drm_device *dev)
 #if defined(NV_DRM_DEV_UNREF_PRESENT)
     drm_dev_unref(dev);
 #else
-    drm_dev_free(dev);
+    drm_dev_put(dev);
 #endif
 }
 
diff --git a/nvidia-drm/nvidia-drm-linux.c b/nvidia-drm/nvidia-drm-linux.c
index 333bfe1..d3614b9 100644
--- a/nvidia-drm/nvidia-drm-linux.c
+++ b/nvidia-drm/nvidia-drm-linux.c
@@ -156,6 +156,15 @@ void nv_drm_vunmap(void *address)
     vunmap(address);
 }
 
+static inline void do_gettimeofday(struct timeval *tv)
+{
+    struct timespec64 now;
+
+    ktime_get_real_ts64(&now);
+    tv->tv_sec = now.tv_sec;
+    tv->tv_usec = now.tv_nsec/1000;
+}
+
 uint64_t nv_drm_get_time_usec(void)
 {
     struct timeval tv;
diff --git a/nvidia-modeset/nvidia-modeset-linux.c b/nvidia-modeset/nvidia-modeset-linux.c
index 6f51178..07c207e 100644
--- a/nvidia-modeset/nvidia-modeset-linux.c
+++ b/nvidia-modeset/nvidia-modeset-linux.c
@@ -208,6 +208,15 @@ void NVKMS_API_CALL nvkms_usleep(NvU64 usec)
     }
 }
 
+static inline void do_gettimeofday(struct timeval *tv)
+{
+    struct timespec64 now;
+
+    ktime_get_real_ts64(&now);
+    tv->tv_sec = now.tv_sec;
+    tv->tv_usec = now.tv_nsec/1000;
+}
+
 NvU64 NVKMS_API_CALL nvkms_get_usec(void)
 {
     struct timeval tv;

以下 nvidia-legacy-340xx-kernel-dkms (340.107-2~bpo9+1) 向け patch.

--- a/nv-drm.c
+++ b/nv-drm.c
@@ -252,7 +252,7 @@ RM_STATUS NV_API_CALL nv_alloc_os_descriptor_handle(
         goto done;
     }
 
-    drm_gem_object_unreference_unlocked(&nv_obj->base);
+    drm_gem_object_put_unlocked(&nv_obj->base);
 
     status = RM_OK;
 
diff --git a/os-interface.c b/os-interface.c
index 7e3d362..f1ca725 100644
--- a/os-interface.c
+++ b/os-interface.c
@@ -433,6 +433,15 @@ void NV_API_CALL os_free_mem(void *address)
 *
 *****************************************************************************/
 
+static inline void do_gettimeofday(struct timeval *tv)
+{
+   struct timespec64 now;
+
+   ktime_get_real_ts64(&now);
+   tv->tv_sec = now.tv_sec;
+   tv->tv_usec = now.tv_nsec/1000;
+}
+
 RM_STATUS NV_API_CALL os_get_current_time(
     NvU32 *seconds,
     NvU32 *useconds
diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 19e3b36..9f1a479 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -2008,6 +2008,15 @@ void umvlite_destroy_per_process_gpu_resources(UvmGpuUuid *gpuUuidStruct)
 // Function to check for ECC errors and returns true if an ECC DBE error
 // has happened.
 //
+static inline void do_gettimeofday(struct timeval *tv)
+{
+   struct timespec64 now;
+
+   ktime_get_real_ts64(&now);
+   tv->tv_sec = now.tv_sec;
+   tv->tv_usec = now.tv_nsec/1000;
+}
+
 static RM_STATUS _check_ecc_errors(UvmGpuMigrationTracking *pMigTracker,
                                     NvBool *pIsEccErrorSet)
 {

ともに Linux 5.0 より前の version で動かすことは考えていない.

Related articles

2018/12/14 09:07 / ハワイ(ホノルル・ワイキキ)メモ

少し前に仕事でハワイに行った際のメモ.全然観光とかしてない.

images/2426.jpg

Related articles

2018/11/18 17:15 / curl on お名前.com 共用サーバーSD CGI (curl: (48) An unknown option was passed in to libcurl)

お名前.com 共用サーバーSDで再び curl が動かなくなった.

最もシンプルに curl https://www.yahoo.co.jp/ を CGI から実行すると以下のように怒られる.

curl: (48) An unknown option was passed in to libcurl

原因は curl と libcurl の version が揃っていないこと.CGIから curl --version すると確かに以下のように curl は 7.54.1 で libcurl は 7.32.0.

curl 7.54.1 (i386-pc-solaris2.10) libcurl/7.32.0 OpenSSL/1.0.2n zlib/1.2.3 libidn/1.26
Release-Date: 2017-06-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smtp smtps telnet tftp 
Features: IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP 

具体的なファイルをみてみても,ldd /usr/local/bin/curl が以下で,

    libcurl.so.4 =>  /usr/local/lib/amd64/libcurl.so.4
    libssl.so.1.0.0 =>   /usr/local/lib/amd64/libssl.so.1.0.0
    libcrypto.so.1.0.0 =>    /usr/local/lib/amd64/libcrypto.so.1.0.0
    libldap-2.4.so.2 =>  /usr/local/lib/amd64/libldap-2.4.so.2
    liblber-2.4.so.2 =>  /usr/local/lib/amd64/liblber-2.4.so.2
    libresolv.so.2 =>    /lib/64/libresolv.so.2
    libgen.so.1 =>   /lib/64/libgen.so.1
    libnsl.so.1 =>   /lib/64/libnsl.so.1
    libsocket.so.1 =>    /lib/64/libsocket.so.1
    libz.so =>   /usr/lib/64/libz.so
    librt.so.1 =>    /lib/64/librt.so.1
    libc.so.1 =>     /lib/64/libc.so.1
    libidn.so.11 =>  /usr/local/lib/64/libidn.so.11
    libgcc_s.so.1 =>     /usr/sfw/lib/64/libgcc_s.so.1
    libdl.so.1 =>    /lib/64/libdl.so.1
    libmp.so.2 =>    /lib/64/libmp.so.2
    libmd.so.1 =>    /lib/64/libmd.so.1
    libscf.so.1 =>   /lib/64/libscf.so.1
    libaio.so.1 =>   /lib/64/libaio.so.1
    libiconv.so.2 =>     /usr/local/lib/64/libiconv.so.2
    libdoor.so.1 =>  /lib/64/libdoor.so.1
    libuutil.so.1 =>     /lib/64/libuutil.so.1
    libm.so.2 =>     /lib/64/libm.so.2

libcurl.so.4 関連は以下のような感じ.Symlink 先が最近変更になったらしい...

-rwxr-xr-x 1 root root 202504 Jun 26  2017 /usr/local/bin/curl
-rw-r--r-- 1 root root 770226 Jan 27  2014 /usr/local/lib/amd64/libcurl.a
-rwxr-xr-x 1 root root   1164 Jan 27  2014 /usr/local/lib/amd64/libcurl.la
lrwxrwxrwx 1 root root     16 Nov 14 14:20 /usr/local/lib/amd64/libcurl.so -> libcurl.so.4.3.0
lrwxrwxrwx 1 root root     16 Nov 14 14:20 /usr/local/lib/amd64/libcurl.so.4 -> libcurl.so.4.3.0
-rwxr-xr-x 1 root root 505336 Jan 27  2014 /usr/local/lib/amd64/libcurl.so.4.3.0
-rwxr-xr-x 1 root root 565344 Jun 26  2017 /usr/local/lib/amd64/libcurl.so.4.4.0

ということで LD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curl で curl を起動すると正しく動く.以下 LD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curl --verion の結果.

curl 7.54.1 (i386-pc-solaris2.10) libcurl/7.54.1 OpenSSL/1.0.2n zlib/1.2.3
Release-Date: 2017-06-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy 

あと,お名前.com 共用サーバーSDに SSH でログインすると時間が結構ずれてる(WEB サーバは問題なさそう).

参考:

追記 (2019/1/28)

今見てみたらcurlだけで動くようになっていた.逆にLD_PRELOAD=/usr/local/lib/amd64/libcurl.so.4.4.0 curlだとコケる.

ld.so.1: curl: fatal: /usr/local/lib/amd64/libcurl.so.4.4.0: open failed: No such file or directory

ldd /usr/local/bin/curl

    libcurl.so.4 =>  /usr/local/lib/amd64/libcurl.so.4
    libnsl.so.1 =>   /lib/64/libnsl.so.1
    libsocket.so.1 =>    /lib/64/libsocket.so.1
    libssl.so.1.0.0 =>   /usr/local/lib/amd64/libssl.so.1.0.0
    libcrypto.so.1.0.0 =>    /usr/local/lib/amd64/libcrypto.so.1.0.0
    libz.so.1 =>     /usr/lib/64/libz.so.1
    librt.so.1 =>    /lib/64/librt.so.1
    libc.so.1 =>     /lib/64/libc.so.1
    libgcc_s.so.1 =>     /usr/local/lib/amd64/libgcc_s.so.1
    libmp.so.2 =>    /lib/64/libmp.so.2
    libmd.so.1 =>    /lib/64/libmd.so.1
    libscf.so.1 =>   /lib/64/libscf.so.1
    libdl.so.1 =>    /lib/64/libdl.so.1
    libaio.so.1 =>   /lib/64/libaio.so.1
    libdoor.so.1 =>  /lib/64/libdoor.so.1
    libuutil.so.1 =>     /lib/64/libuutil.so.1
    libgen.so.1 =>   /lib/64/libgen.so.1
    libm.so.2 =>     /lib/64/libm.so.2

libcurl.so.4 関連.

-rwxr-xr-x 1 root root 223032 Nov 30 09:51 /usr/local/bin/curl
-rw-r--r-- 1 root root 943778 Nov 30 09:51 /usr/local/lib/amd64/libcurl.a
-rwxr-xr-x 1 root root   1019 Nov 30 09:51 /usr/local/lib/amd64/libcurl.la
lrwxrwxrwx 1 root root     16 Jan 28 13:58 /usr/local/lib/amd64/libcurl.so -> libcurl.so.4.5.0
lrwxrwxrwx 1 root root     16 Jan 28 13:58 /usr/local/lib/amd64/libcurl.so.4 -> libcurl.so.4.5.0
-rwxr-xr-x 1 root root 572608 Nov 30 09:51 /usr/local/lib/amd64/libcurl.so.4.5.0

curl --verion

curl 7.62.0 (x86_64-pc-solaris2.10) libcurl/7.62.0 OpenSSL/1.0.2n zlib/1.2.3
Release-Date: 2018-10-31
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy 

いつのまにか i386-pc-solaris2.10 から x86_64-pc-solaris2.10 に変更になってる...

Related articles

2018/11/11 15:50 / Changed its 'Origin' value from 'Google, Inc.' to 'Google LLC' とかで Google Chrome が Upgrade できない

aptitudeでGoogle Chrome (google-chrome-stable)が Upgrade できない問題発生.

E: Repository 'http://dl.google.com/linux/chrome/deb stable Release' changed its 'Origin' value from 'Google, Inc.' to 'Google LLC'
E: Failed to download some files
W: Failed to fetch http://dl.google.com/linux/chrome/deb/dists/stable/Release: 
E: Some index files failed to download. They have been ignored, or old ones used instead.

https://stackoverflow.com/questions/50942353/e-repository-http-dl-google-com-linux-chrome-remote-desktop-deb-stable-relea/50942354によるとsudo apt updateで名前の変更を許可すれば良いだけの話らしい.

2018/11/06 11:30 / Linux 4.19.0 -> 4.20-rc1

4.20-rc1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.汎用指向の環境.Linux 5.0 になるのは来年らしい.

DKMS

broadcom-sta-dkms (6.30.223.271-9.1)は以下で compile できない.

Assembler messages:
Error: can't open arch/x86/kernel/macros.s for reading: No such file or directory

arch/x86/kernel/macros.s/usr/src/linux-headers-4.20.0-hoge-01/arch/x86/kernel/ に配置してあげると compile できる.

nvidia-kernel-dkms (390.87-2) は conftest の段階で以下の error.これ以上はひとまず追わず.

#error INIT_WORK() conftest failed!
#error kmem_cache_create() conftest failed!
#error on_each_cpu() conftest failed!
#error smp_call_function() conftest failed!
#error acpi_walk_namespace() conftest failed!
#error pci_dma_mapping_error() conftest failed!
#error wait_on_bit_lock() conftest failed!
#error radix_tree_replace_slot() conftest failed!

追記 (2018/12/14)

まず上記 conftest の失敗は arch/x86/kernel/macros.s を見に行くことが原因.nvidia-legacy についても同様.以下で解決.Version は nvidia-kernel-dkms (390.87-3) と nvidia-legacy-340xx-kernel-dkms 340.107-3.

# cd /usr/src/nvidia-current-390.87
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .
# cd /usr/src/nvidia-legacy-340xx-340.107
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .
# cd /usr/src/nvidia-legacy-340xx-340.107/uvm
# ln -s /usr/src/linux-headers-4.20.0-rcX-hogege-01/arch .

nvidia-current (390.87-3) は以下で compile に失敗する.Kernel の mm: change return type to vm_fault_tによる変更に由来する.

/var/lib/dkms/nvidia/current-390.87/build/nvidia-drm/nvidia-drm-gem-nvkms-memory.c: In function ‘__nv_drm_vma_fault’:
/var/lib/dkms/nvidia/current-390.87/build/nvidia-drm/nvidia-drm-gem-nvkms-memory.c:240:11: error: implicit declaration of function ‘vm_insert_pfn’; did you mean ‘vmf_insert_pfn’? [-Werror=implicit-function-declaration]
     ret = vm_insert_pfn(vma, address, pfn + page_offset);
           ^~~~~~~~~~~~~
           vmf_insert_pfn

以下の patch で解決.

--- a/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
+++ b/nvidia-drm/nvidia-drm-gem-nvkms-memory.c
@@ -230,31 +230,15 @@ static int __nv_drm_vma_fault(struct vm_area_struct *vma,
     struct nv_drm_gem_nvkms_memory *nv_nvkms_memory = to_nv_nvkms_memory(
         to_nv_gem_object(gem));
     unsigned long page_offset, pfn;
-    int ret = -EINVAL;
+    vm_fault_t ret;
 
     pfn = (unsigned long)(uintptr_t)nv_nvkms_memory->pPhysicalAddress;
     pfn >>= PAGE_SHIFT;
 
     page_offset = vmf->pgoff - drm_vma_node_start(&gem->vma_node);
 
-    ret = vm_insert_pfn(vma, address, pfn + page_offset);
-
-    switch (ret) {
-        case 0:
-        case -EBUSY:
-            /*
-             * EBUSY indicates that another thread already handled
-             * the faulted range.
-             */
-            return VM_FAULT_NOPAGE;
-        case -ENOMEM:
-            return VM_FAULT_OOM;
-        default:
-            WARN_ONCE(1, "Unhandled error in %s: %d\n", __FUNCTION__, ret);
-            break;
-    }
-
-    return VM_FAULT_SIGBUS;
+    ret = vmf_insert_pfn(vma, address, pfn + page_offset);
+    return ret;
 }
 
 /*

Related articles

2018/10/14 03:06 / procmail レシピメモ

いつも procmail のレシピの書き方の細かい部分を忘れるのでメモ.

:0c
* ^TO_myn@a.example.org
! myn@c.example.org

:0c
* ^TO_.*@b.example.org
! myn@c.example.org

これでmyn@a.example.org宛のメール,もしくはドメイン@b.example.org宛のメールだったら,ローカル配送とともにmyn@c.example.orgに転送される.

レシピの開始

Condition line

Action line

参考:

Related articles

2018/09/29 23:40 / お名前.com 共用サーバ FTP パスワード変更

お名前.com から以下のようなメールが届く.いくつか管理している共用サーバそれぞれで同一内容のメールが届いたので,全てのユーザーに対してFTPパスワードが変更された模様(以前のものに対して少し長くなった).

また、お客様に安全に安心してサービスをご利用いただくために、弊社側で、FTPパスワードの変更を実施させていただきました。

※FTPパスワードとコントロールパネルのログインパスワードが、連動しているため、併せて変更されております。

Related articles

2018/09/29 22:37 / List of Connected Apps

OAuth 等で接続しているアプリ等のリストを得るためのURL達.

Facebook
https://www.facebook.com/settings?tab=applications&section=active
Google
https://myaccount.google.com/permissions
Twitter
https://twitter.com/settings/sessions
Yahoo! (www.yahoo.com)
https://login.yahoo.com/account/activity
Instagram
https://www.instagram.com/accounts/manage_access/

2018/09/20 15:55 / MS Word で文字を丸で囲む

とある様式で『○で囲む』という指示があって,図形挿入で対応すれば良いのだが,あまりエレガントでないので,他のやり方を探る.http://blog.heiichi.com/?eid=547488にあるとおり『囲い文字』で1文字を○で囲んであとは Alt-F9 でフィールドコードを表示のうえそれを編集すれば良いらしい.『囲い文字』で利用される丸は普通の丸(○)で,これだとちょっと線が太いので,大きなの丸(◯)を利用するとちょうどよい感じになった.

2018/09/15 17:22 / openssh-client 1:7.8p1-1 on VMWare (NAT)

Debian GNU/Linux sid (unstable) で openssh の version が上がって,なぜだかどのホストにも接続できなくなった.Windows host の VMWare 上の Linux でのみ問題が発生していて,クライアントの問題.

% ssh server.example.com
packet_write_wait: Connection to XX.XX.XX.XX port 22: Broken pipe

サーバのログや -v で追ってみたところ,認証接続自体はできているが,直ぐに切れてしまっていた.原因は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=908113 にあるとおり,

の複合要因.AF21/CS1 が default になる前は lowdelay/throughtput が default だったので,その挙動になるように設定を行えば良いらしい.確かに以下のようにすれば繋がる.

% ssh -o 'IPQoS lowdelay throughput' server.example.com

ということで,/etc/ssh/ssh_config に以下を書いておいて,以前の option を system default にする.

Host *
    IPQoS lowdelay throughput

2018/08/29 11:06 / Linux 4.18.5 -> 4.19-rc1

4.19-rc1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.汎用指向の環境.

nvidia-kernel-dkms 390.77-1 の compile に以下の通り失敗するが,

/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-encoder.c: In function ‘nv_drm_add_encoder’:
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-encoder.c:219:11: error: implicit declaration of function ‘drm_mode_connector_attach_encoder’; did you mean ‘drm_connector_attach_encoder’? [-Werror=implicit-function-declaration]
     ret = drm_mode_connector_attach_encoder(connector, encoder);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           drm_connector_attach_encoder
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-connector.c: In function ‘nv_drm_connector_get_modes’:
/var/lib/dkms/nvidia-current/390.77/build/nvidia-drm/nvidia-drm-connector.c:229:9: error: implicit declaration of function ‘drm_mode_connector_update_edid_property’; did you mean ‘drm_connector_update_edid_property’? [-Werror=implicit-function-declaration]
         drm_mode_connector_update_edid_property(
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         drm_connector_update_edid_property

原因はdrm: drop mode from remaining connector functionsの修正.以下の patch を /usr/src/nvidia-current-390.77/ にあるファイルにあてる.

--- a/nvidia-drm/nvidia-drm-connector.c
+++ b/nvidia-drm/nvidia-drm-connector.c
@@ -226,7 +226,7 @@ static int nv_drm_connector_get_modes(struct drm_connector *connector)
 
 
     if (nv_connector->edid != NULL) {
-        drm_mode_connector_update_edid_property(
+        drm_connector_update_edid_property(
             connector, nv_connector->edid);
     }
 
--- a/nvidia-drm/nvidia-drm-encoder.c
+++ b/nvidia-drm/nvidia-drm-encoder.c
@@ -216,7 +216,7 @@ nv_drm_add_encoder(struct drm_device *dev, NvKmsKapiDisplay hDisplay)
 
     /* Attach encoder and connector */
 
-    ret = drm_mode_connector_attach_encoder(connector, encoder);
+    ret = drm_connector_attach_encoder(connector, encoder);
 
     if (ret != 0) {
         NV_DRM_DEV_LOG_ERR(

追記 (2018/9/29)

4.19-rc4に詳細があるが Linus しばらくお休みで,4.19-rc5は Greg による公開.

など参照.

Related articles

2018/08/14 16:16 / microSDXC 速度計測

Silicon Power の microSDXC UHS-1 Speed Class 1 256GB (elite)を購入したのだが,今まで使っていた Samsung の microSDXC UHS-I Speed Class 1 128G (EVO+)と比較してなんだかもっさりしている.

CrystalDiskMark で調べた結果,以下のように Silicon Power は結構遅い...

Silicon Power microSDXC UHS-1 Speed Class 1 256GB (elite)

   Sequential Read (Q= 32,T= 1) :    86.820 MB/s
  Sequential Write (Q= 32,T= 1) :    21.993 MB/s
  Random Read 4KiB (Q=  8,T= 8) :     6.187 MB/s [   1510.5 IOPS]
 Random Write 4KiB (Q=  8,T= 8) :     1.340 MB/s [    327.1 IOPS]
  Random Read 4KiB (Q= 32,T= 1) :     6.208 MB/s [   1515.6 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     1.319 MB/s [    322.0 IOPS]
  Random Read 4KiB (Q=  1,T= 1) :     5.466 MB/s [   1334.5 IOPS]
 Random Write 4KiB (Q=  1,T= 1) :     1.236 MB/s [    301.8 IOPS]
Samsung microSDXC UHS-I Speed Class 1 128G (EVO+)

   Sequential Read (Q= 32,T= 1) :    87.620 MB/s
  Sequential Write (Q= 32,T= 1) :    63.907 MB/s
  Random Read 4KiB (Q=  8,T= 8) :     5.574 MB/s [   1360.8 IOPS]
 Random Write 4KiB (Q=  8,T= 8) :     2.594 MB/s [    633.3 IOPS]
  Random Read 4KiB (Q= 32,T= 1) :     5.617 MB/s [   1371.3 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :     2.552 MB/s [    623.0 IOPS]
  Random Read 4KiB (Q=  1,T= 1) :     4.783 MB/s [   1167.7 IOPS]
 Random Write 4KiB (Q=  1,T= 1) :     2.430 MB/s [    593.3 IOPS]

今なら Samsung でSpeed Class 3のものもあるので,そちらにしたら良かった.以下ついでに測った NotePC の SSD.

   Sequential Read (Q= 32,T= 1) :   508.879 MB/s
  Sequential Write (Q= 32,T= 1) :   191.672 MB/s

2018/08/14 15:57 / docker.io を install すると kvm -net bridge がうまく動かない

Debian GNU/Linux に docker.io (18.03.1+dfsg1-6) を Install すると KVM (ブリッジ接続)に接続できなくなった.docker0 という interface ができたのが原因かと思い,かなり悩む.

% /sbin/ifconfig -s | awk '{print $1}'
Iface
br0
docker0
eth0
lo
tap0
% /sbin/brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.xxxxxxxxxxxx       yes             eth0
                                                        tap0
docker0         8000.yyyyyyyyyyyy       no

原因は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=865975 のとおり iptables の Chain FORWARD の default policy を dockerDROP にしてしまうこと.sudo iptables -P FORWARD ACCEPT すれば直る.

追記 (2019/2/6)

sudo iptables -P FORWARD ACCEPT しても packet が流れないのでおかしいなと思ったら,sid 環境では iptables-legacy を使わないといけないらしい.sudo iptables-legacy -P FORWARD ACCEPT

% sudo iptables -L
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
# Warning: iptables-legacy tables present, use iptables-legacy to see them
% sudo iptables-legacy -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
(略)

追記 (2019/7/18)

/usr/sbin/iptables として /usr/sbin/iptables-nft/usr/sbin/iptables-legacy を選択できるようになっていて(buster でもそう),自動で /usr/sbin/iptables-nft が選択されるようになっている(sudo update-alternatives --config iptables 等で変更).

上記 iptables-legacy でなければうまく行かない話は Kernel で CONFIG_NF_TABLES (nftables; NFT) が n になっていたか正しく動作しなかったため(Debian の Kernel Package で)だった模様.現在は NFT が正常に動作する package が提供されている.

2018/07/17 22:33 / OpenVPN 2.4.4-2~bpo9+1

Debian GNU/Linux の OpenVPN (server) を 2.4.0-6+deb9u2 から 2.4.4-2~bpo9+1 に version up したらユーザー認証ができなくなった./etc/default/openvpn は以下のとおり(抜粋).

AUTOSTART="vpn_server"

/etc/openvpn/vpn_server.conv で以前は以下で password 認証(というかLDAP)ができていた.

plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
client-cert-not-required

まずclient-cert-not-requiredについては以下のように怒られるので,verify-client-cert optionalぐらいに変更.See https://community.openvpn.net/openvpn/wiki/DeprecatedOptions#a--client-cert-not-required . client-cert-not-required は OpenVPN 2.5 で削除される様子.

DEPRECATED OPTION: --client-cert-not-required, use --verify-client-cert instead

/usr/lib/openvpn/openvpn-plugin-auth-pam.so はまず path が /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so に変更になっている.パスの変更については,full path を書かなければ良いらしく以下で対応.

plugin openvpn-plugin-auth-pam.so openvpn

ただし,これだと,以下のようなエラーで認証できない(client の IP Address が 127.0.0.1 なのは SSH でポートフォワードしているから).

myserver openvpn[XXXXX]: AUTH-PAM: BACKGROUND: user 'myn' failed to authenticate: System error
myserver ovpn-vpn_server[XXXXX]: 127.0.0.1:XXXXX PLUGIN_CALL: POST /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so/PLUGIN_AUTH_USER_PASS_VERIFY status=1
myserver ovpn-vpn_server[XXXXX]: 127.0.0.1:XXXXX PLUGIN_CALL: plugin function PLUGIN_AUTH_USER_PASS_VERIFY failed with status 1: /usr/lib/x86_64-linux-gnu/openvpn/plugins/openvpn-plugin-auth-pam.so

調べてみたところ,/lib/systemd/system/openvpn@.serviceCapabilityBoundingSetCAP_AUDIT_WRITE を追加する必要があるらしい.

参考:

Related articles

2018/07/12 12:15 / overlayfs の挙動がおかしい(Linux 4.17.5)

以下のような状況を想定.

% ls -Rla
.:
total 0
drwxr-xr-x 1 myn    users   24 Jul 12 12:06 ./
drwxr-xr-x 1 myn    users 2018 Jul 12 12:12 ../
drwxr-xr-x 1 myn    users    8 Jul 12 12:13 low/
drwxr-xr-x 1 myn    users    0 Jul 12 12:06 over/
drwxr-xr-x 1 myn    users   16 Jul 12 12:14 up/
drwxr-xr-x 1 myn    users    0 Jul 12 12:14 work/

./low:
total 0
drwxr-xr-x 1 myn    users  8 Jul 12 12:13 ./
drwxr-xr-x 1 myn    users 24 Jul 12 12:06 ../
drwxr-xr-x 1 myn    users 18 Jul 12 12:08 dir0/

./low/dir0:
total 0
drwxr-xr-x 1 myn    users 18 Jul 12 12:08 ./
drwxr-xr-x 1 myn    users  8 Jul 12 12:13 ../
-rw-r--r-- 1 myn    users  0 Jul 12 12:05 test
-rw-r--r-- 1 myn    users  0 Jul 12 12:05 test1

./over:
total 0
drwxr-xr-x 1 myn    users  0 Jul 12 12:06 ./
drwxr-xr-x 1 myn    users 24 Jul 12 12:06 ../

./up:
total 0
drwxr-xr-x 1 myn    users   16 Jul 12 12:14 ./
drwxr-xr-x 1 myn    users   24 Jul 12 12:06 ../
c--------- 1 root   root  0, 0 Jul  6 11:18 dir0
drwxr-xr-x 1 myn    users   20 Jul 12 12:14 dir1/

./up/dir1:
total 0
drwxr-xr-x 1 myn    users   20 Jul 12 12:14 ./
drwxr-xr-x 1 myn    users   16 Jul 12 12:14 ../
-rw-r--r-- 1 myn    users    0 Jul 12 12:09 file0
c--------- 1 root   root  0, 0 Jul  6 11:18 file1

./work:
total 0
drwxr-xr-x 1 myn    users  0 Jul 12 12:14 ./
drwxr-xr-x 1 myn    users 24 Jul 12 12:06 ../

ここで

% sudo mount -t overlay -olowerdir=low,upperdir=up,workdir=work overlay over

で mount すると,

% ls -Rla over
over:
total 0
drwxr-xr-x 1 myn    users 16 Jul 12 12:14 ./
drwxr-xr-x 1 myn    users 26 Jul 12 12:16 ../
drwxr-xr-x 1 myn    users 20 Jul 12 12:14 dir1/

over/dir1:
ls: cannot access 'over/dir1/file1': No such file or directory
total 0
drwxr-xr-x 1 myn    users 20 Jul 12 12:14 ./
drwxr-xr-x 1 myn    users 16 Jul 12 12:14 ../
-rw-r--r-- 1 myn    users  0 Jul 12 12:09 file0
c????????? ? ?      ?      ?            ? file1

といった悲しい状況になる.upper 側で消すファイルが lower 側に存在せず,かつ,その directory が upper 側でのみ存在する場合に発生する様子(しかも起こったり起こらなかったり).Linux の Version は 4.17.5.

2018/07/11 00:37 / Mailgun

お名前.com で取得していた(ある用途で利用する)ドメインをとある会社に移管したのだが,メールの設定等はそちらでやってね,みたいなことを言われて(正確には,連絡してきた内容が「普通のメールアカウントを作りかた」(しかもメールで先方に指示)のみで),仕方なくお名前.com の共用サーバーに MX 「だけ」向けるアプローチを探すも情報がなかく,Google Compute Engine (GCE)で飼っている VM instance に MX を向けようとするもいろいろハマる.

そもそも以下のとおり,GCE では ポート 25,465,587 はブロックされている.

G Suiteで Gmail 化するということも考えたが Basic で USD 5/month の費用がかかって,特に今回 ML を作成したい(かなりシンプルな設定のみでOK)ということもあって,Google Group ベースの ML を利用するのもちょっとイマイチな気がして(退会案内のフッタが挿入されるとか),いろいろ悩む.

いろいろ悩んだ結果,Compute Engine ドキュメント|インスタンスからのメールの送信で紹介されているクラウドベースの Email Service を利用することにした.候補はCompute Engine のドキュメントにある以下の3つで考える.この時はメール受信のことはあまり考えていなかった.

https://qiita.com/yukari-n/items/45624096582111dd25b9に記事もあったので,Mailgunを利用することにした.設定は至って簡単.https://www.ritolab.com/entry/39にアカウントの作成から順に解説されている.ちょっとだけ DNS (サーバ側)の設定項目が多いが,これはやむなし.

Mailgun には SMTP Server としての機能があるので(送信サーバとして使用するには認証が必要),Compute Engine からメールを送信する場合は postfix をつかって smtp.mailgun.org:2525 に relay するという設定を行うだけでOK (外向きポート2525なのでブロックされない).

受信メールについても Compute Engine 側に転送できるだろうと思っていたのであるが,Mailgun には SMTP を SMTP に relay する機能がなく(メールは別メールアドレスに転送可能),あったとしても結局 Compute Engine 側でブロックされるということに気づく...

ただ,調べてみると Mailgun でメール転送のルールを書くことができ,かつ,メーリングリストの設定も可能なので,Mailgun 上で全て設定することにした(そもそも,Compute Engine から送信可能とする必要もなかったが,Mailgun の Google パートナーページでアカウントを作成しないと無料枠が 10,000 件になる).

Mailgun での各 ML メンバについて,Subscribe するしない,を設定できる.ML への投稿者限定は以下の種類(https://documentation.mailgun.com/en/latest/user_manual.html#mailing-lists).

ML から unsubscribe する自動生成 URL を mail に含めることも可能だが(送信する mail に %mailing_list_unsubscribe_url% を含める),これは API 経由で送信しなければ %mailing_list_unsubscribe_url% が正しく変換されない(普通に SMTP で送信するとそのまま送られる).

ちなみに,ML を subscribe している投稿者にはメールが配信されない様子.

追記 (2018/7/11)

MLの詳細.結構独特な挙動をする(特に To: の書き換え).

また,Route 機能で,特定の宛先宛のメールを他のアドレスに転送することができるが(複数転送することも可能),こちらは上記のような書き換え等は発生しない(ただし誰からでも送信可能になって,メンバの管理 I/F も Web のものだと ML のようなバルク登録はサポートしていない(APIを使って自前で用意すれば可能)).

ちなみに ML と Route は排他的ではなく,ML 宛メールが Route のルールにマッチしていれば,ML にも配信されかつ Route のルールも適用される.

http://mailgun-documentation.readthedocs.io/en/latest/user_manual.html#mailing-lists

Mailing Lists work independently from Routes. If there is a Mailing List or Route with the same address, the incoming message will hit the Route and Mailing List simultaneously. This can be pretty convenient for processing replies to the Mailing List and integrating into things like forums or commenting systems.

追記 (2018/7/11)

他にはmailman のホスティングサービスを利用するということも考えられたのかもしれない.一度リストは見たが,選択肢が多く(比較が大変),面倒になって辞めた.

2018/07/02 22:58 / Change tmp directory for Android Studio

Android Studio を使っていると,各種 Tool の install/update や,AVD (Andriod Virtual Device) のダウンロードで,ファイルが /tmp 以下にダウンロードされる./tmp の容量が小さいと disk が溢れて失敗する.

具体的には /tmp/PackageOperation00/ /tmp/PackageOperation01/ /tmp/PackageOperation02/ みたいな感じで directory が作成されていく.

そもそも /tmp の容量を大きくとればよいのだが,そうも行かない場合もある.この一時保存場所を変更するには,以下のようにすれば良いらしい.

% export _JAVA_OPTIONS=-Djava.io.tmpdir=/somewhere/tmp
% /somewhere/android-studio/bin/studio.sh &

Related articles

2018/06/20 17:06 / Linux 4.17.2 -> 4.18-rc1

4.18-rc1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの(or n),+ は追加されたもの,m->y等は値の変化.汎用指向の環境.

STACKPROTECTOR 関連

kbuild/kconfig/kcov

Network 関連

ほか

DKMS

普段使う DKMS である以下(sid)は,すべて compile に失敗する...

追記 (2018/6/21)

上記DKMS問題,まず broadcom-sta で以下の様な error が出る.

  CC [M]  /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.o
In file included from ./include/linux/rseq.h:13:0,
                 from ./include/linux/sched.h:30,
                 from ./include/linux/ioprio.h:5,
                 from ./include/linux/fs.h:39,
                 from ./include/linux/huge_mm.h:7,
                 from ./include/linux/mm.h:479,
                 from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/include/linuxver.h:65,
                 from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.c:25:
/usr/lib/gcc/x86_64-linux-gnu/7/include/stdint.h:9:26: error: no include path in which to search for stdint.h
 # include_next <stdint.h>

rseq.h は以下の2つあって,include/uapi/linux/のものを使うのが正解.

以下の2つのファイルを削除すると broadcom-sta と nvidia-legacy-340xx-kernel-dkms (nvidia-legacy-340xx) は compile できるようになる.

次にnvidia-kernel-dkms.上記対応を想定して,こちらはさらに以下のようなエラー.

  gcc -Wp,-MD,/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.nvidia-drm-prime-fence.o.d  -nostdinc -isystem /usr/lib/gcc/x86_64-linux-gnu/7/include -I./arch/x86/include -I./arch/x86/include/generated  -I./include -I./arch/x86/include/uapi -I./arch/x86/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -Werror-implicit-function-declaration -Wno-format-security -std=gnu89 -fno-PIE -DCC_HAVE_ASM_GOTO -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -march=core2 -mno-red-zone -mcmodel=kernel -funit-at-a-time -DCONFIG_X86_X32_ABI -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -DCONFIG_AS_SSSE3=1 -DCONFIG_AS_CRC32=1 -DCONFIG_AS_AVX=1 -DCONFIG_AS_AVX2=1 -DCONFIG_AS_AVX512=1 -DCONFIG_AS_SHA1_NI=1 -DCONFIG_AS_SHA256_NI=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -DRETPOLINE -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-int-in-bool-context -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-var-tracking-assignments -g -pg -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=implicit-int -Werror=strict-prototypes -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -mrecord-mcount -I/var/lib/dkms/nvidia-current/390.59/build/common/inc -I/var/lib/dkms/nvidia-current/390.59/build -Wall -MD -Wsign-compare -Wno-cast-qual -Wno-error -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.59\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args -Werror=undef -I/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm -UDEBUG -U_DEBUG -DNDEBUG -DNV_BUILD_MODULE_INSTANCES=0  -DMODULE  -DKBUILD_BASENAME='"nvidia_drm_prime_fence"' -DKBUILD_MODNAME='"nvidia_drm"' -c -o /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.tmp_nvidia-drm-prime-fence.o /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-prime-fence.c
   ./tools/objtool/objtool orc generate  --module --no-fp  --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-modeset/.tmp_nvidia-modeset-linux.o";
   ./tools/objtool/objtool orc generate  --module --no-fp  --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_mmu_test.o";
   ./tools/objtool/objtool orc generate  --module --no-fp  --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/.tmp_nvidia-drm.o";
   ./tools/objtool/objtool orc generate  --module --no-fp  --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_peer_identity_mappings_test.o";
   ./tools/objtool/objtool orc generate  --module --no-fp  --retpoline "/var/lib/dkms/nvidia-current/390.59/build/nvidia-uvm/.tmp_uvm8_pmm_sysmem_test.o";
In file included from ./include/drm/drmP.h:82:0,
                 from /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-priv.h:30,
                 from /var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-drv.c:25:
/var/lib/dkms/nvidia-current/390.59/build/nvidia-drm/nvidia-drm-drv.c:637:23: error: ‘DRM_CONTROL_ALLOW’ undeclared here (not in a function); did you mean ‘DRM_RENDER_ALLOW’?
                       DRM_CONTROL_ALLOW|DRM_UNLOCKED),
                       ^
./include/drm/drm_ioctl.h:162:12: note: in definition of macro ‘DRM_IOCTL_DEF_DRV’
   .flags = _flags,     \
            ^~~~~~

対応するLinux側の変更は以下.

以下のようにDRM_CONTROL_ALLOWnvidia-drm/nvidia-drm-drv.cから削除すればcompileはとおる.

--- a/nvidia-drm/nvidia-drm-drv.c
+++ b/nvidia-drm/nvidia-drm-drv.c
@@ -634,26 +634,26 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
     DRM_IOCTL_DEF_DRV(NVIDIA_GEM_IMPORT_NVKMS_MEMORY,
                       nv_drm_gem_import_nvkms_memory_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_UNLOCKED),
+                      DRM_UNLOCKED),
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 
     DRM_IOCTL_DEF_DRV(NVIDIA_GEM_IMPORT_USERSPACE_MEMORY,
                       nv_drm_gem_import_userspace_memory_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
     DRM_IOCTL_DEF_DRV(NVIDIA_GET_DEV_INFO,
                       nv_drm_get_dev_info_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
 
 #if defined(NV_DRM_DRIVER_HAS_GEM_PRIME_RES_OBJ)
     DRM_IOCTL_DEF_DRV(NVIDIA_FENCE_SUPPORTED,
                       nv_drm_fence_supported_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
     DRM_IOCTL_DEF_DRV(NVIDIA_FENCE_CONTEXT_CREATE,
                       nv_drm_fence_context_create_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
     DRM_IOCTL_DEF_DRV(NVIDIA_GEM_FENCE_ATTACH,
                       nv_drm_gem_fence_attach_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
 #endif
 
     DRM_IOCTL_DEF_DRV(NVIDIA_GET_CLIENT_CAPABILITY,
@@ -662,7 +662,7 @@ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
 #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
     DRM_IOCTL_DEF_DRV(NVIDIA_GET_CRTC_CRC32,
                       nv_drm_get_crtc_crc32_ioctl,
-                      DRM_CONTROL_ALLOW|DRM_RENDER_ALLOW|DRM_UNLOCKED),
+                      DRM_RENDER_ALLOW|DRM_UNLOCKED),
 #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
 };
 

ちなみに現状,実動作は未検証.

Related articles

2018/05/22 13:01 / Xilinx Vivado 2018.1 Web Pack

https://www.xilinx.com/support/download.html の Xilinx FPGA 向けのツール Vivado の最新版 2018.1 であるが,Linux Self Extracting Web Installer も All OS installer (Single-File) も,どちらも rdi_0339_2018.1_0405_1.xz というファイルを展開箇所でエラーになり,インストールできない.Linux Self Extracting Web Installer しか試していないが 2017.4 も rdi_0276_2017.4_1216_1.xz の箇所でエラーになる.メッセージは以下のようなもの.

The possible reasons can be: the disk is full,
you've exceeded disk quota, or the destination directory is too long.

Disk full にはなっていないし,directory もそれほど深くなく,かつ filesystem (btrfs) も特に error message を出していない.原因不明.

追記 (2018/5/22)

https://japan.xilinx.com/support/answers/64982.html に解決のヒントが書いてあった...

/opt/Xlinix_webに install しようとしていたのだが ~/.Xilinx/xinstall/xinstall_*.log によると /opt/Xilinx/.xinstall/xic への書き込み権限がなく失敗していた模様.確かに /opt/Xilinx/ は NFS mount した read-only filesystem.

2018/05/17 18:07 / NVIDIA Quadro K600 FAN 故障

PC使用中(gnome 環境)に突然画面が真っ暗になる症状に見舞われる.kernel.logには以下が10秒おきに出力されていた.GPUはNVIDIA Quadro K600.

nvidia-modeset: ERROR: GPU:0: Failed to query display engine channel state: 0x0000XXXX:X:0:0x0000000X

ドライバ(nvidia-kernel-dkms 390.48-2~bpo9+1)やKernel (Linux 4.16.9)周りを疑ったが,ググった感じだと overheating が原因の可能性があることがわかった.

ということで,nvidia-settingで温度とFANスピードを確認したところ,温度が90度を越えていて,FANスピードは0 RPMだった.ケースを開けて確認したところFANが故障していた(軸がずれたのか,回転が引っかかる感じで全然回ってくれない).GPUボードを取り除いて,オンボードで運用することに.

2018/05/02 12:35 / MS Windows icacls メモ

Windows 10 April 2018 Update の影響で,ちょっとした事情により \windows\system32 以下のファイルを一部前のバージョンに戻す必要があって(ファイルは事前に copy していた),access control list (ACL) も含めて戻したかったので,ACL および icacls 関連メモ(必要最小限).

結局やりたかったのは owner を TrustedInstaller にしつつ Administrators に RX 権限付与(を Administrator で)なのだが,一旦 owner を Administrators にしてしまって,BUILDIN\Administrators:F の状態で owner を TrustedInstaller にしたり,他の ACL を付与したりして,最後に icacls file /grant:r "BUILDIN\Administrators:RX" すれば良いらしい./grant:r を知らず少し嵌った.

2018/05/02 10:11 / pandoc 1.19.2.4~dfsg-1+b3 -> 2.2-1

Debian GNU/Linux sid の pandoc (markdown (.md) を html 等に変換するあれ)がこのところ慌ただしく version up されて,仕様変更がかなりある.以下,stable の pandoc (1.17.2) と sid の pandoc (2.2) で比較.

インデント

インデントは either 4 spaces or one tab というのが標準的なのだが,2 spaces でも正しく解釈されるようになった.

pandoc 1.17.2% echo "
- A
  - B
" | pandoc
<ul>
<li>A</li>
<li>B</li>
</ul>
pandoc 2.2% echo "
- A
  - B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>
pandoc 1.17.2% echo "
-   A
    -   B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>
pandoc 2.2% echo "
-   A
    -   B
" | pandoc
<ul>
<li>A
<ul>
<li>B</li>
</ul></li>
</ul>

smart

--- を em-dash (&mdash;), -- を en-dash (&ndash;), ... を省略記号(&hellip;)として出力したりする機能(smart)が default の挙動になった.以前の option は -S だったが,これは廃止されて,markdown-smart (smart off) や markdown+smart (smart on) のように format を指定する仕様に.

pandoc 1.17.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc
<p>A - B -- C --- D ... Mr. Abc'</p>
pandoc 1.17.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc -S
<p>A - B – C — D … Mr. Abc’</p>
pandoc 2.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc -f markdown-smart
<p>A - B -- C --- D ... Mr. Abc'</p>
pandoc 2.2% echo "A - B -- C --- D ... Mr. Abc'" | pandoc
<p>A - B – C — D … Mr. Abc’</p>

わかりにくいかもしれないが,+smart の場合 Mr. の後は改行禁止のスペース(Non-breaking space; &nbsp;, &#160;)になっている.また single quote も全角 single quote (’; &rsquo;?)になる.

ついでに...''"" で囲んでいる場合,自動で左右の適切な quote に変換される.また \ で escape 可能.以下のとおり.

pandoc 2.2% echo "'A'" | pandoc
<p>‘A’</p>
pandoc 2.2% echo "\'A\'" | pandoc
<p>'A'</p>
pandoc 2.2% echo '"A"' | pandoc
<p>“A”</p>
pandoc 2.2% echo '\"A\"' | pandoc
<p>&quot;A&quot;</p>
pandoc 2.2% echo "A--B" | pandoc
<p>A–B</p>
pandoc 2.2% echo "A\--B" | pandoc
<p>A--B</p>

追記 (2018/9/22)

行末の\の取り扱いが変更になっているらしく,これはちょっと悩ましい.

pandoc 1.17.2% pandoc
# Hi\
there
<h1 id="hi-there">Hi<br />
there</h1>
pandoc 2.2.1% pandoc
# Hi\
there
<h1 id="hi">Hi<br />
</h1>
<p>there</p>
pandoc 2.2.1% pandoc -f markdown-escaped_line_breaks
# Hi\
there
<h1 id="hithere">Hi
there</h1>
pandoc 2.2.1% pandoc -f markdown-escaped_line_breaks
# Hi<br />\
there
<h1 id="hi-there">Hi<br />
there</h1>

Header でなければ一応挙動は同じっぽい.

pandoc 1.17.2% pandoc
Hi\
there
<p>Hi<br />
there</p>
pandoc 2.2.1% pandoc
Hi\
there
<p>Hi<br />
there</p>

Related articles

2018/04/19 15:25 / Linux 4.16.2 -> 4.17-rc1

4.17-rc1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの.汎用指向の環境.以下の warning がそこそこの量出ていたが,/sys/fs/pstore/ の下にいくつか以前の log が保存されていた模様.削除したら warning も出なくなった.

pstore: crypto_comp_decompress failed, ret = -22!
pstore: decompression failed: -22

追記 (2018/5/2)

4.17-rc3 で以下追加.

追記 (2018/6/3)

4.17-rc7 で以下追加.

Related articles

2018/03/27 09:58 / Mailman 2.1 設定メモ

いつも ML を作成する際は fml 4 を利用していたのだが,使えないことはないのだが(若干の patch が必要)最近利用している人がめっきり減ってきているので Mailman を利用することにした.

Debian GNU/Linux Stretch で mailman3 package (backports 3.1.1-8~bpo9+1)を利用しようとしたのだが,RDBMS に依存したうえかなり手作業で調整する必要がありそうだったので,mailman package (1:2.1.23-1+deb9u2) を利用.

(注(2021/9/8): 2021/8/14 にリリースされた Debian 11 “bullseye” には mailman package が無いので,選択肢としては mailman3 のみ.See 特記すべき時代遅れとなったパッケージたち.)

インストールは基本的に aptitude 等で mailman package を入れるだけ(debconf でもろもろ聞かれるが適当に答える; 言語とか).

list group に属していれば一般ユーザ権限で ML の操作が可能.以下手動でメンバの操作をして,参加者からの制御を禁止するMLの設定例.Default の状態だとかなりメンバ宛にいろいろなメールが届いてちょっと鬱陶しいので.

ML 作成

% /usr/sbin/newlist mytestml
Enter the email of the person running the list: myn@example.com
Initial mytestml password: 
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:

## mytestml mailing list
mytestml:              "|/var/lib/mailman/mail/mailman post mytestml"
mytestml-admin:        "|/var/lib/mailman/mail/mailman admin mytestml"
mytestml-bounces:      "|/var/lib/mailman/mail/mailman bounces mytestml"
mytestml-confirm:      "|/var/lib/mailman/mail/mailman confirm mytestml"
mytestml-join:         "|/var/lib/mailman/mail/mailman join mytestml"
mytestml-leave:        "|/var/lib/mailman/mail/mailman leave mytestml"
mytestml-owner:        "|/var/lib/mailman/mail/mailman owner mytestml"
mytestml-request:      "|/var/lib/mailman/mail/mailman request mytestml"
mytestml-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mytestml"
mytestml-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mytestml"

Hit enter to notify mytestml owner...

これで owner (myn@example.com) 宛に以下のメールが届く(newlist-q option を付けると届かない).

To: myn@example.com
Subject: Your new mailing list: mytestml
From: mailman-owner@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:15:05 +0900
X-List-Administrivia: yes

The mailing list `mytestml' has just been created for you.  The
following is some basic information about your mailing list.

Your mailing list password is:

    xxxxxxxx

You need this password to configure your mailing list.  You also need
it to handle administrative requests, such as approving mail if you
choose to run a moderated list.

You can configure your mailing list at the following web page:

    http://example.com/cgi-bin/mailman/admin/mytestml

The web page for users of your mailing list is: 

    http://example.com/cgi-bin/mailman/listinfo/mytestml

You can even customize these web pages from the list configuration
page.  However, you do need to know HTML to be able to do this.

There is also an email-based interface for users (not administrators)
of your list; you can get info about using it by sending a message
with just the word `help' as subject or in the body, to:

    mytestml-request@example.com

To unsubscribe a user: from the mailing list 'listinfo' web page,
click on or enter the user's email address as if you were that user.
Where that user would put in their password to unsubscribe, put in
your admin password.  You can also use your password to change
member's options, including digestification, delivery disabling, etc.

Please address all questions to mailman-owner@example.com.

From: が mailman-owner@example.com になっているが,インストール時に mailman という名前の ML を作成するように言われて作ったような気もする.

/etc/aliasesについては以下のみ追加, newaliasesする.

mytestml:              "|/var/lib/mailman/mail/mailman post mytestml"
mytestml-bounces:      "|/var/lib/mailman/mail/mailman bounces mytestml"
mytestml-owner:        "|/var/lib/mailman/mail/mailman owner mytestml"

mytestml は ML の宛先,mytestml-bounces は配信時の envelope from.mytestml-owner には何かあった時に mailman から連絡が届く(メンバ外からの投稿を許可していない状態でメンバ外からメールが来た際に moderate request が届いたり).他は今回目的外なので,そもそも aliases に登録しない.

Web I/F 設定

手元の環境では sudo a2enmod cgid して,/etc/apache2/sites-enabled//etc/mailman/apache.conf への symlink を配置するのみで動作している.ただし,外部公開はかなり危険なので,サーバ自体へのアクセスを制限(iptables).各種 URL は以下のとおり.

ML 設定

以下で現在の設定を Export.

% /usr/sbin/config_list -o mytestml.conf mytestml

mytestml.conf (python) を修正のうえ,以下で Import.

/usr/sbin/config_list -i mytestml.conf mytestml

Web interface もあるが,上記が最も手軽で再現性がある.以下設定メモ.

To: myn@example.com
Subject: Welcome to the "Mytestml" mailing list
From: mytestml-request@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:37:05 +0900
X-List-Administrivia: yes

Welcome to the Mytestml@example.com mailing list!

To post to this list, send your message to:

  mytestml@example.com

General information about the mailing list is at:

  http://example.com/cgi-bin/mailman/listinfo/mytestml

If you ever want to unsubscribe or change your options (eg, switch to
or from digest mode, change your password, etc.), visit your
subscription page at:

  http://example.com/cgi-bin/mailman/options/mytestml/myn%40example.com


You can also make such adjustments via email by sending a message to:

  Mytestml-request@example.com

with the word `help' in the subject or body (don't include the
quotes), and you will get back a message with instructions.

You must know your password to change your options (including changing
the password, itself) or to unsubscribe without confirmation.  It is:

  xxxxxxxx

Normally, Mailman will remind you of your example.com
mailing list passwords once every month, although you can disable this
if you prefer.  This reminder will also include instructions on how to
unsubscribe or change your account options.  There is also a button on
your options page that will email your current password to you.
To: myn@example.com
Subject: You have been unsubscribed from the Mytestml mailing list
From: mytestml-bounces@example.com
Content-Type: text/plain; charset="utf-8"
Message-ID: <mailman.0.XXXXXXXXXX.XXXXX.mytestml@example.com>
Date: Tue, 27 Mar 2018 10:41:49 +0900
X-List-Administrivia: yes

以下 subject_prefix, msg_footer, include_rfc2369_headers が default の状態の投稿.

To: mytestml@example.com
Subject: [Mytestml] test
From: myn@example.com
Delivered-To: mytestml@example.com
Date: Tue, 27 Mar 2018 10:45:31 +0900
Message-ID: <xxxx@example.com>
Precedence: list
List-Id: <mytestml.example.com>
List-Unsubscribe: <http://example.com/cgi-bin/mailman/options/mytestml>,  <mailto:mytestml-request@example.com?subject=unsubscribe>
List-Archive: <http://example.com/pipermail/mytestml/>
List-Post: <mailto:mytestml@example.com>
List-Help: <mailto:mytestml-request@example.com?subject=help>
List-Subscribe: <http://example.com/cgi-bin/mailman/listinfo/mytestml>,  <mailto:mytestml-request@example.com?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Errors-To: mytestml-bounces@example.com
Sender: "Mytestml" <mytestml-bounces@example.com>

test

-- 
myn.meganecco.org

_______________________________________________
Mytestml mailing list
Mytestml@example.com
http://example.com/cgi-bin/mailman/listinfo/mytestml

ML メンバ追加・削除

メンバ全員削除.

% /usr/sbin/remove_members -a mytestml

メンバリスト export.

% /usr/sbin/list_members mytestml > mytestml.members.txt

(Regular)メンバ追加.mytestml.members.txt に one address per line 形式でメールアドレスをリストしておく.-r ではなく -d を使うと digest member になるが,この機能は今回使わない.

% /usr/sbin/add_members -r mytestml.members.txt mytestml

cron について

以下が仕込まれる(/etc/cron.d/mailman).

0 8 * * * list [ -x /usr/lib/mailman/cron/checkdbs ] && /usr/lib/mailman/cron/checkdbs
0 9 * * * list [ -x /usr/lib/mailman/cron/disabled ] && /usr/lib/mailman/cron/disabled
0 12 * * * list [ -x /usr/lib/mailman/cron/senddigests ] && /usr/lib/mailman/cron/senddigests
0 5 1 * * list [ -x /usr/lib/mailman/cron/mailpasswds ] && /usr/lib/mailman/cron/mailpasswds
27 3 * * * list [ -x /usr/lib/mailman/cron/nightly_gzip ] && /usr/lib/mailman/cron/nightly_gzip
30 4 * * * list [ -x /usr/lib/mailman/cron/cull_bad_shunt ] && /usr/lib/mailman/cron/cull_bad_shunt

0 5 1 * * の mailpasswds が気になるが(テストし辛い...),これは各MLの send_reminders (0:No, 1:Yes, Default: 0)を見て送付するかどうかを決めているので,特に問題なさげ.

追記 (2018/3/28)

「mailman 設定」でGoogle検索するとトップに現れる https://www.speever.jp/vzmanual/mailman/ は,丁寧に設定のやり方が書かれている割に,誤りが多いような気がする(訳した際に解釈を誤ったか,バージョン違い?).

追記 (2018/3/29)

new_member_options (Default: 256) というのがあって,これは新規ユーザ追加時のオプションで,DontReceiveDuplicates (nodupes) flag のみ On になるのが Default の設定.各ビットの意味は以下のとおり.

[/usr/lib/mailman/Mailman/Defaults.py]
# Bitfield for user options.  See DEFAULT_NEW_MEMBER_OPTIONS above to set
# defaults for all new lists.
Digests             = 0 # handled by other mechanism, doesn't need a flag.
DisableDelivery     = 1 # Obsolete; use set/getDeliveryStatus()
DontReceiveOwnPosts = 2 # Non-digesters only
AcknowledgePosts    = 4
DisableMime         = 8 # Digesters only
ConcealSubscription = 16
SuppressPasswordReminder = 32
ReceiveNonmatchingTopics = 64
Moderate = 128
DontReceiveDuplicates = 256

DontReceiveDuplicates (nodupes) だが,To: 個人,Cc: ML のメールで,この個人が ML メンバだった場合に,その個人にこのメールを配信しない,というオプション.通常はこの手のメールは2通届いたりするのだが,mailman の場合は default で重複配信しないようになっている.

追記 (2018/4/18)

max_num_recipients (Default: 10) というのがあって,これは,この数字以上の宛先がメールに含まれている場合に admin proval を要求するというもの.0 だと制限がなくなる.通常は 10 ぐらいで充分なのだが,メールのやり取りをしている間に宛先が徐々に増えていって,この制限に引っかかる事例が発生した.0 は少し怖いので少しだけ大きく 15 にしておいた.

Related articles

2018/03/12 15:56 / マレーシアメモ

AirAsia X のクアランプール便(経由)を使ってランカウイ島まで行ったのでその際のメモ.

images/4087.jpg
Satellite Building 3F から Skybridge 方向.写真 3F 左方向はホテル設備,背後はフードコート.エスカレーターで 2F に降りてそのまま真っすぐ奥方向,スターバックス・インターネットコーナーの奥に喫煙所.2F に降りて写真の左奥にシャワー設備のあるトイレ.

images/4096.jpg
2Fにおりたところ.左奥,スターバックスの裏付近に喫煙所.写真の左に映っているのは土産物屋で,ドリアンやマンゴーのお菓子や,石鹸(なまこ石鹸)等を売っている.ドリアンの菓子を買おうとしたら,どこから来たのか聞かれて,日本だと答えると,日本人はあまりドリアン好まないよ,という普通の情報がもらえる.

images/4101.jpg
フロアマップ.上左付近に喫煙所マーク.

Related articles

2018/03/10 23:59 / 政府認証基盤(GPKI)自己署名証明書インストール

今年も確定申告の時期になったので,Web で処理しようとするのだが,環境が変わったせいか(Google Chrome on Linux),利用者識別番号を入力するところでブラウザに Not secure だと怒られる(以下の証明書がNET::ERR_CERT_AUTHORITY_INVALID).

Issued To
  Common Name (CN)  uketsuke.e-tax.nta.go.jp
  Organization (O)  Japanese Government
  Organizational Unit (OU)  Ministry of Finance
Issued By
  Common Name (CN)  ApplicationCA2 Sub
  Organization (O)  Japanese Government
  Organizational Unit (OU)  GPKI

ということで,前にもやったが再度メモ.今は証明書単体のダウンロードが可能になっている.あと,書類作成だけであれば APCA2Root.der のみあれば充分(最終提出は Windows の Internet Explorer から).

http://www.gpki.go.jp/ から「アプリケーション認証局2の証明書(APCA2Root.der)」をダウンロード.

以下のコマンドでfingerprintがhttps://www.gpki.go.jp/selfcert/finger_print.htmlのものと一致するか確認(このページの証明書もこのRootで署名されているので Not secture と怒られる).ついでに PEM に変換.

% openssl x509 -noout -fingerprint -sha1 -inform def -in APCA2Root.der
SHA1 Fingerprint=F0:0F:C3:7D:6A:1C:92:61:FB:6B:C1:C2:18:49:8C:5A:A4:DC:51:FB
% openssl x509 -inform der -in APCA2Root.der -out APCA2Root.pem

chrome://settings/certificatesの Authoriies から PEM を Import.その際「Trust this certificate for identifying websites」にcheckをしておく.

https://www.gpki.go.jp/selfcert/finger_print.htmlを開いて怒られないことを確認.

Related articles

2018/02/19 10:35 / お名前.com 共用サーバーSD SSL設定 (Let's Encrypt)

いつのまにかお名前.comレンタルサーバー共用サーバーSDでSSLが利用可能になっていた.https://www.onamae-server.com/news/180122_2.htmlによると2018/01/22から提供していたらしい.コントロールパネルで設定可能.中身は Let’s Encrypt (日本語による総合ポータル).

Chrome 68 からすべてのHTTPサイトで Not secure と表示されるらしい,というのもあってSSL化した.

Related articles

2018/02/12 17:23 / Linux 4.15.3 -> 4.16-rc1

4.16-rc1が出たので.configがどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.汎用指向の環境.ちなみにmake menuconfigするのにbisonflexが必要になっている.kbuild: prepare to remove C files pre-generated by flex and bison参照.

以下,その他.

なお,普段使う DKMS である以下(sid)は特に問題なく compile できている.

追記 (2018/2/19)

4.16-rc2で以下追加になった.

追記 (2018/3/5)

4.16-rc4で以下の変更があった.

追記 (2018/4/3)

4.16がリリースされていて,少し試してみたところ nvidia.ko の compile は問題ないのだが,modprobe する際に以下のようなエラーがでて nvidia.ko が利用できない(nvidia-kernel-dkms 384.111-3~bpo9+1).

Apr  2 16:02:45 XXXX kernel: [  178.010148] nvidia: Unknown symbol swiotlb_map_sg_attrs (err 0)

以下に原因と解決法がまとめられているが少し面倒.

具体的には以下の kernel の修正に対応するように nvidia の driver の source code にパッチをあてたりする必要がある.

やはり面倒なので,bpo package の更新を待つことにして 4.15 系を利用することに...

追記 (2018/4/6)

上記Unknown symbol swiotlb_map_sg_attrsの件,以下のパッチをあてることにした.usercopy: WARN() on slab cache usercopy region violations に対する対応については,手元の環境ではCONFIG_HARDENED_USERCOPYyではないので,そのまま放置(WARNINGさえ出ない).

--- a/common/inc/nv-linux.h
+++ b/common/inc/nv-linux.h
@@ -1320,7 +1320,7 @@ static inline NvU32 nv_alloc_init_flags(int cached, int contiguous, int zeroed)
 static inline NvBool nv_dma_maps_swiotlb(struct pci_dev *dev)
 {
     NvBool swiotlb_in_use = NV_FALSE;
-#if defined(CONFIG_SWIOTLB)
+#if defined(CONFIG_SWIOTLB) && LINUX_VERSION_CODE < KERNEL_VERSION(4, 16, 0)
   #if defined(NV_DMA_OPS_PRESENT) || defined(NV_GET_DMA_OPS_PRESENT)
     /*
      * We only use the 'dma_ops' symbol on older x86_64 kernels; later kernels,

追記 (2018/4/25)

最近でたnvidia-kernel-dkms (390.48-2~bpo9+1)は patch 等不要で問題なく使える.

Related articles

2018/01/29 11:08 / Linux 4.14.15 -> 4.15

4.15が出たので.configがどう変更されるのか見てみた.2017/11/28 12:42 / Linux 4.14.2 -> 4.15-rc1 との差分のみ.汎用指向の環境.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

追記 (2018/2/19)

2018/02/12 17:23 / Linux 4.15.3 -> 4.16-rc1 にも書いたが CONFIG_SSB_PCIHOST_POSSIBLE が disable される件,BUG だった模様.4.15.4 ではssb: Do not disable PCI host on non-Mipsで修正されている.

Related articles

2018/01/24 18:17 / VMWare 上で Synaptics Touchpad の two-finger scroll を使う

Host: Windows 10, Guest: Linux 環境なのだが,Linux 側で Synaptics Touchpad の two-finger scroll が効かない.調べた感じ https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにあるとおりhttps://bitbucket.org/DouglasCameron/windows-trackpad-scroller-for-vmwareを使うのが最も簡単(VMWare動かしたままで,Hostの再起動も不要.ダウンロードして展開して,.exe を実行してダイアログの質問に答えるだけ).

https://superuser.com/questions/131297/use-synaptics-touchpad-scroll-in-vmware-guestにhorizontal scrollingが効かないとか書かれているが,普通にhorizontal scrollingも使える.

追記 (2018/1/29)

Host を再起動したら再度上記を行う必要がある.

2018/01/22 11:40 / tclsh /usr/lib/modulecmd.tcl bash autoinit launches less command

いつものように google chrome を起動しようとしたら以下のような謎な状態に.

% google-chrome &
[1] 8067
% 
[1]  + suspended (tty output)  google-chrome

/opt/google/chrome/google-chrome は bash script なのだが,以下のような空の bash script でも再現することがわかって,どうやら bash と environment-modules 付近の問題.

#!/bin/bash

/usr/share/modules/init/bash から起動される tclsh /usr/lib/modulecmd.tcl bash autoinit が less を起動してしまう模様.

/usr/lib/modulecmd.tcl は environment-modules に含まれていて 4.1.0-1 ではこの問題が発生して 4.0.0-2 では問題は発生しない.

modulecmd.tcl に 4.1.0-1 で追加された以下の行関連が問題かと探ったが,どうやら環境変数 PAGER に設定されていた less が起動されていた模様(modulecmd.tclPAGERMODULES_PAGER を pager 向けの環境変数として使うらしいが(408行目付近),詳細までは見ていない).

set g_pager "/usr/bin/less" ;# Default command to page into, empty=disable

ということで,PAGER 環境変数を unset して解決(もしくは export PAGER=, 但しこの場合 man command が stdout に出力してそのまま終了してしまう).

追記 (2018/1/29)

上記,混乱していたようで,PAGER 環境変数を unset しても less が起動される.export PAGER= すれば問題は一応解決する.もしくは以下とか.

% PAGER= google-chrome &

2018/01/10 00:52 / nvidia-kernel-dkms 384.98-3~bpo9+1 on Linux 4.14.9 以降

https://devtalk.nvidia.com/default/topic/1028134/error-upgrading-to-4-14-10-kernel-in-xubuntu-17-10-in-dkms-384-90/?offset=2などで報告されていて,各所で nvidia のドライバの version を上げることが解決策として示されているが,nvidia-kernel-dkms 384.98-3~bpo9+1 が Linux 4.14.9 以降で以下のようなエラーでコンパイルできない.

/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c: In function ‘block_cpu_fault_locked’:
./arch/x86/include/asm/processor.h:826:39: error: implicit declaration of function ‘task_stack_page’ [-Werror=implicit-function-declaration]
  unsigned long __ptr = (unsigned long)task_stack_page(task); \
                                       ^
./arch/x86/include/asm/processor.h:909:26: note: in expansion of macro ‘task_pt_regs’
 #define KSTK_EIP(task)  (task_pt_regs(task)->ip)
                          ^~~~~~~~~~~~
/var/lib/dkms/nvidia-current/384.98/build/nvidia-uvm/uvm8_va_block.c:8771:41: note: in expansion of macro ‘KSTK_EIP’
                                         KSTK_EIP(current));
                                         ^~~~~~~~

上記問題に対応した version が stable backports でまだ利用できないので,とりあえず対処する.方法は,https://patchwork.kernel.org/patch/10137715/のとおり#include <linux/sched/task_stack.h>すること.

Kernel側の原因はx86/entry/64: Remove thread_struct::sp0.x86_64 と x86_32 で task_pt_regs が共通化され,いままで 64bit だと task_stack_page が不要だったが,使われるようになって,そのため#include <linux/sched/task_stack.h>が必要になったということらしい.

Debian GNU/Linux experimental では 387.34 が利用可能で,少しコードをみてみたが,以下がnvidia-uvm/uvm_linux.hに追加されていた(conftest.shlinux/sched/task_stack.h がチェックされ NV_LINUX_SCHED_TASK_STACK_H_PRESENT がセットされる).

#if defined(NV_LINUX_SCHED_TASK_STACK_H_PRESENT)
#include <linux/sched/task_stack.h>
#endif

追記 (2018/1/13)

stable-bpo 384.111-1~bpo9+1 で本件解決した模様.

Related articles

2017/12/27 23:38 / FTP の NAT 超え

Private network から少なくとも Passive で FTP を使いたくてずっと悩んでいたのだが以下で解決した.

% echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

これをしないと modprobe nf_nat_ftpmodprobe nf_conntrack_ftp していても,これらの機能が働かない.他の iptables の設定は以下の通り.

iptables -F
iptables -t nat -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

つまり,基本 DROP で,特定のポートのみ以下で開けていく方式で運用している.

iptables -A FORWARD -i <interface> -s <network> -p tcp --dport <port> -j ACCEPT

Passive mode の場合は nf_conntrack_ftp が使われて,PASV コマンドをクライアントからサーバに送ったあとにサーバから返ってくるサーバの使用ポート番号向けのポートが自動で開く(RELATED として INPUT が許可される).

Active の場合は nf_nat_ftp が使われて,PORT コマンドでクライントからサーバに通知する情報が適切にNATで変換される.つまりプライベートネットワークから送出した PORT 10,0,0,X,202,171 といったコマンドが,NAT で PORT <Global IP>,202,171 に変換されてサーバに転送され,同時にサーバの IP address からの source port 20, destination port 50428 (= 202<<8 + 171) のパケットが通るようになる.

ちなみに FTPS (FTP over TLS) も ftp と同じ 21番ポートを利用するが,通信が暗号化されてしまうので,上記のような変換等は全く効かない(そのサーバ向けに使いそうなポートを全開放するしかないっぽい).

以上,tcpdumpiptables ならびに lftp を駆使して探ったのだが,以下 lftp メモ.

Bool値としてはいろいろ使えるらしい(以下 man lftp より).

Boolean settings can be one of (true, on, yes, 1, +) for a True value or one of (false, off, no, 0, -) for a False value.

Related articles

2017/12/27 23:20 / Switch to next input source (Gnome)

最近の Gnome では input source (キーボードの言語切り替えも含む)の切り替えは Windows+Space が割り当てられている.慣れればよいのかもしれないが,慣れ親しんでいる Shift+Space を割り当てたい.やり方はhttps://askubuntu.com/questions/604462/how-to-set-languages-shortcuts-from-config-files-or-command-lineにあるとおり.以下のようなコマンドで Windows+Space と Shift+Space の両方を割り当てることができる.

% gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Shift>space','<Super>space']"

GUI の Settings → Devices → Keyboard では1つしか割り当てられない(上のように2つを割り当てた場合は始めのもののみ表示される).

ちなみに Emacs での日本語入力は emacs-mozc を使いたいので(そうしないと C-x C-c するにもいちいち日本語モードから抜ける必要がある),以下を ~/.Xresources に書いておく.

Emacs*useXIM: false

Related articles

2017/12/24 17:04 / Googleカスタム検索エンジン設置見直し

やるきなしなしだったGoogle Custom Search (Googleカスタム検索エンジン)の設置を見直した.今まではページトップに設置して,検索結果はポップアップ表示というやる気のない感じだったが,検索フォームを自前設置して結果を別ページに表示する方式に変えた.

https://myn.meganecco.org/s/が検索結果のページで,?q=query 付きで開く(<form action="/s/" method="get">でsubmitする)と検索結果が表示される.Google Custom Search のページから copy した javascript と以下を書いてあるぐらい.

<div class="gcse-searchresults-only" data-linkTarget="_self"></div>

当初は以下だったがHTML validatorで少し怒られるのでhttps://developers.google.com/custom-search/docs/element#html5を参照のうえ上記にした.

<gcse:searchresults-only linkTarget="_self"></gcse:searchresults-only>

あとは検索の後に query 文字列を検索テキストボックスに入力するために,以下のような細工を入れておく(要jQuery).

$(function() {
var urlParams = new URLSearchParams(window.location.search);
$('input[type="text"]').val(urlParams.get("q"));
});

ちなみに,親サービスであるGoogle Site Search はhttps://enterprise.google.co.jp/intl/ja/search/products/gss.htmlに以下のようにある通り,今年度いっぱいでサービス終了.無料のGoogle Custom Search (Googleカスタム検索エンジン)は引き続き使えるらしい.

Google Site Search の販売および更新は、2017年4月1日をもって終了いたしました。同サービスの提供は、2018年4月1日までに完全に停止されます。

2017/12/22 09:36 / UTC in Windows

Windows Note PCにDual Boot環境を構築して,Linux側のシステムクロックをUTCではなくLocal Timeに設定しようとして,いろいろ調べた.

ということで,WindowsもUTCにするのが素直なので,そうすることに.

設定はhttps://wiki.archlinux.org/index.php/time#UTC_in_WindowsのとおりHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TimeZoneInformationRealTimeIsUniversalとしてDWORD 1を追加するのみ.

ちなみに,Debian GNU/Linux sidでは/etc/init.d/hwclock.shが存在するが,sudo /etc/init.d/hwclock.sh start等とすると途中でexitされてしまう.ということで,systemdとsysv-rcの関係を理解する目的も含めて少し流れを追ってみた.以下のような感じ.

2017/12/20 13:38 / 90-second timeout during boot on cryptroot with passdev

dm-crypt 関連メモ (cryptroot)のように / 自体をLUKSで暗号化している場合に,起動時に90秒間待たされる問題について.

/ 自体をLUKSで暗号化している場合,通常は /etc/crypttab を以下のようにして,鍵ファイルを用いて自動で cryptsetup open <device> <name> --type luksする.

[/etc/crypttab]
sda5_crypt UUID=<snip> /dev/disk/by-uuid/<snip>:luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev

ここで/dev/disk/by-uuid/<snip>は鍵ファイルを置いている partition 等(/boot等)で,luks_key (/boot/luks_key等)が鍵ファイル,/lib/cryptsetup/scripts/passdevはinitrdに組み込まれるscriptになる.

このままだと以下のように 90 秒のタイムアウト待ちが生じる.

A start job is running for dev-disk...:luks_key.device (1min 3s / 1min 30s)

というのは sda5_crypt として open するために /dev/disk/by-uuid/<snip>:luks_key という device が ready 状態になるのを待つため.以下のように systemd-cryptsetup@sda5_crypt.servicedev-disk-by\x2duuid-(略):luks_key.device に依存してしまう.:luks_key というのはファイルを示していて,device ではないので,当然 ready 状態になるわけがなくタイムアウト待ちが生じる.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862 として systemd の important bug として登録されている.

% systemctl cat systemd-cryptsetup@sda5_crypt.service
# /run/systemd/generator/systemd-cryptsetup@sda5_crypt.service
# Automatically generated by systemd-cryptsetup-generator

[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:systemd-cryptsetup@.service(8)
SourcePath=/etc/crypttab
DefaultDependencies=no
Conflicts=umount.target
IgnoreOnIsolate=true
After=cryptsetup-pre.target
Before=cryptsetup.target
After=dev-disk-by\x2duuid-(略):luks_key.device
Requires=dev-disk-by\x2duuid-(略):luks_key.device
BindsTo=dev-disk-by\x2duuid-(略).device
After=dev-disk-by\x2duuid-(略).device
Before=umount.target

[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
KeyringMode=shared
ExecStart=/lib/systemd/systemd-cryptsetup attach 'sda5_crypt' '/dev/disk/by-uuid/(略)' '/dev/disk/by-uuid/(略)
ExecStop=/lib/systemd/systemd-cryptsetup detach 'sda5_crypt'

最もシンプルな解決策は systemd にこのような依存関係を自動生成させないこと(device は通常 ready だと想定されるので).https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=618862 にもあるとおり,起動時の kernel option に luks=no と追加するだけで良い.詳細はman systemd-cryptsetup-generator参照.具体的には以下の通り.

他には/etc/systemd/system.confにてDefaultTimeoutStopSec=90sのコメントアウトを外して,短めに設定する等がある.

追記 (2019/9/1)

これ,上記の場合で sda5_crypt が / であれば sda5_crypt を initrd から luksOpen されるので luks=no の kernel option を使ってもよいのだが,他に起動してから luksOpen (cryptdisks_start) するものがあれば,その unit が systemd-cryptsetup-generator により生成されず,自動 start/open されない(see man systemd-cryptsetup-generator)...

Related articles

2017/12/12 12:29 / GNOME 3.26 System Tray (Status Icons) Removed

https://blogs.gnome.org/aday/2017/08/31/status-icons-and-gnome/http://www.omgubuntu.co.uk/2017/09/will-you-miss-gnome-legacy-trayにあるとおりGnomeのSystem TrayとかStatus Icons呼ばれるものが表示されなくなった.remmina (remote desktop client)をここから制御していたので,少々困った.TopIcons PlusというExtensionをinstallして有効にすれば時計の近くに現れるようになる.Debian では gnome-shell-extension-top-icons-plus という package 名で提供されている.

Related articles

2017/11/28 12:42 / Linux 4.14.2 -> 4.15-rc1

4.15-rc1が出ているので .config がどう変更されるのか見てみた.汎用指向の環境.以下 - は削除されたもの,+ は追加されたもの.

以下,その他.

追記 (2017/12/12)

timer: Pass timer_list pointer to callbacks unconditionallyで struct timer_list から (unsigned long) data が削除されていて,timer: Remove init_timer() interfaceでinit_timer()が削除されたりで,broadcom-sta-dkms (6.30.223.271-7), nvidia-kernel-dkms (384.98-3), nvidia-legacy-340xx-kernel-dkms (340.104-3) の kernel module の build に失敗する.nvidia-kernel-dkms (384.98-3) の場合以下のような感じ.

[/var/lib/dkms/nvidia-current/384.98/build/make.log] 抜粋
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c: In function ‘nv_start_rc_timer’:
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3259:5: error: implicit declaration of function ‘init_timer’; did you mean ‘init_timers’? [-Werror=implicit-function-de
claration]
     init_timer(&nvl->rc_timer);
     ^~~~~~~~~~
     init_timers
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3260:28: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
     nvl->rc_timer.function = nvidia_rc_timer;
                            ^
/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.c:3261:18: error: ‘struct timer_list’ has no member named ‘data’
     nvl->rc_timer.data = (unsigned long) nvl;
                  ^
cc1: some warnings being treated as errors
scripts/Makefile.build:310: recipe for target '/var/lib/dkms/nvidia-current/384.98/build/nvidia/nv.o' failed

treewide: init_timer() -> setup_timer()にあるとおり以下のような変更をすればよいはずなのだが試していない.

This mechanically converts all remaining cases of ancient open-coded timer
setup with the old setup_timer() API, which is the first step in timer
conversions. This has no behavioral changes, since it ultimately just
changes the order of assignment to fields of struct timer_list when
finding variations of:

    init_timer(&t);
    f.function = timer_callback;
    t.data = timer_callback_arg;

to be converted into:

    setup_timer(&t, timer_callback, timer_callback_arg);

追記 (2018/1/19)

Debian GNU/Linux sid では nvidia の kernel package は 4.15 対応になっていて,broadcom-sta-dkms (6.30.223.271-7) については以下のパッチが必要.

treewide: setup_timer() -> timer_setup()のとおりsetup_timerはさらにtimer_setupに書き換える必要があって,コールバック関数側の修正も必要.

--- a/src/wl/sys/wl_linux.c
+++ b/src/wl/sys/wl_linux.c
@@ -93,7 +93,7 @@ struct iw_statistics *wl_get_wireless_stats(struct net_device *dev);
 
 #include <wlc_wowl.h>
 
-static void wl_timer(ulong data);
+static void wl_timer(struct timer_list *t0);
 static void _wl_timer(wl_timer_t *t);
 static struct net_device *wl_alloc_linux_if(wl_if_t *wlif);
 
@@ -2295,9 +2295,9 @@ wl_timer_task(wl_task_t *task)
 }
 
 static void
-wl_timer(ulong data)
+wl_timer(struct timer_list *t0)
 {
-       wl_timer_t *t = (wl_timer_t *)data;
+       wl_timer_t *t = from_timer(t, t0, timer);
 
        if (!WL_ALL_PASSIVE_ENAB(t->wl))
                _wl_timer(t);
@@ -2349,9 +2349,7 @@ wl_init_timer(wl_info_t *wl, void (*fn)(void *arg), void *arg, const char *tname
 
        bzero(t, sizeof(wl_timer_t));
 
-       init_timer(&t->timer);
-       t->timer.data = (ulong) t;
-       t->timer.function = wl_timer;
+       timer_setup(&t->timer, wl_timer, 0);
        t->wl = wl;
        t->fn = fn;
        t->arg = arg;

追記 (2018/1/23)

上のパッチ,treewide: setup_timer() -> timer_setup()のとおりなのだが,from_timer(t, t0, timer)の箇所が謎めいている(左辺の値が右辺にある).

[include/linux/timer.h]
#define from_timer(var, callback_timer, timer_fieldname) \
        container_of(callback_timer, typeof(*var), timer_fieldname)

上がfrom_timer#defineで,container_ofは,struct timer_list *t0 (wl_timer の引数)を struct member timerとして含むwl_timer_t (struct wl_timer)の pointer を取得するように動くマクロということらしい.右辺にある左辺の値は typeof で使われるのみなので問題にならない.

参考にしたページ:

追記 (2018/1/29)

Debian GNU/Linux stable (Stretch) でも以下の backports で 4.15 対応になっている.

追記 (2018/2/12)

broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=885885 で登録されている様子(patch の提供もあり).

追記 (2018/2/15)

broadcom-sta-dkms (6.30.223.271-7) の wl_linux.c に patch が必要という件,broadcom-sta 6.30.223.271-8で修正された様子.

Related articles

2017/11/16 14:57 / broadcom-sta if.h: fatal error: sys/socket.h: No such file or directory

broadcom-sta-dkms (6.30.223.271-7) の compile に以下の通り fail する.

[/var/lib/dkms/broadcom-sta/6.30.223.271/build/make.log] 抜粋
Kernel architecture is X86_64
  AR      /var/lib/dkms/broadcom-sta/6.30.223.271/build/built-in.o
  CC [M]  /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.o
In file included from ./include/linux/compat.h:17:0,
                 from ./include/linux/ethtool.h:17,
                 from ./include/linux/netdevice.h:41,
                 from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/include/linuxver.h:69,
                 from /var/lib/dkms/broadcom-sta/6.30.223.271/build/src/shared/linux_osl.c:25:
./include/linux/if.h:28:10: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h>   /* for struct sockaddr.  */
          ^~~~~~~~~~~~~~
compilation terminated.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862175 にあるとおりinclude/uapi/linux/if.hが使われるべきで,include/linux/if.hは存在しないべき(?)だそう.include/uapi/linux/if.hが存在すれば /usr/src/linux-headers-<version>/include/linux/if.h を削除してしまえば解決する.

2017/11/15 15:56 / Linux ORC unwinder と objtool (CONFIG_STACK_VALIDATION needs tools/objtool/objtool along headers)

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833500 にあるとおり CONFIG_STACK_VALIDATION=yだと(CONFIG_ORC_UNWINDER=yが依存する) 別途コンパイルするタイプのモジュール(nvidia-kernel-dkms 等)のコンパイルにことごとく失敗する(Makefile がうまく *.o を生成してくれず,ld を呼び出して link する際に make が error で落ちる,という不親切な状態).

以下のように kernel compile 時にできた objtool を /usr/src/linux-headers-<version>/tools/objtool/ に copy すれば解決する.

sudo cp tools/objtool/objtool /usr/src/linux-headers-<version>/tools/objtool/

Related articles

2017/11/15 15:41 / Linux 4.13.12 -> 4.14.0

4.14 が出たので.configがどう変更されるのか見てみた.2017/09/18 07:04 / Linux 4.13.1 -> 4.14-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/11/07 10:34 / mendeleydesktop on Debian GNU/Linux unstable (sid)

mendeleydesktop(最新版は 1.17.11)をDebian GNU/Linux unstableにinstallしたのだが,aptitude updateで以下のように怒られる.もっと書くとCRON-APTでupdateに失敗したと見なされてupgradeされない.

W: Failed to fetch https://desktop-download.mendeley.com/download/apt/dists/stable/InRelease: 403  Forbidden [IP: 54.230.108.7 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.

stable (stretch) では特に問題ないので,unstable の apt の原因らしい(仕様変更がある?)./etc/apt/sources.list.d/mendeleydesktop.list を削除するか,当該ファイルにてapt lineをcomment outするのがwork aroundな模様.

2017/09/18 07:04 / Linux 4.13.1 -> 4.14-rc1

4.14-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

ちなみに 4.14-rc1 は使用に耐えられず(刺さる),0666f560b71b899cd11a7caf39fd45129e9030fdを使用.Firmware が削除されたということだが,特に問題になることはなかった.

以下,その他.

追記 (2017/10/12)

Linux 4.14-rc3Linux 4.14-rc4にあるように4.14のリリースは結構大変そう.手元でも rc2 以降は Xorg が起動しない状況(rc4まで確認).

追記 (2017/10/16)

Linux 4.14-rc5ではだいぶましになってきていて,Xorg も起動するようになった.

Related articles

2017/09/05 04:14 / Linux 4.12.10 -> 4.13

4.13 が出たので.configがどう変更されるのか見てみた.2017/07/16 23:56 / Linux 4.12.0 -> 4.13-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/08/12 11:52 / WordPress Multisite Post Duplicator Plugin 1.7.1

以下のように wp-cli (以下の wp command)を使って WordPress の自動 update を行っているのだが,

#!/bin/sh

wp core update
wp core update-db --network
wp plugin update --all
wp theme update --all
wp core language update

cron から以下のようなエラーメールが届く.

PHP Parse error:  syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
PHP Parse error:  syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418
Parse error: syntax error, unexpected '[' in /somewhere/public_html/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php on line 418

Update 後 Multisite Post Duplicator (v1.7.1) (https://wordpress.org/plugins/multisite-post-duplicator/) が正常動作せず,うまく表示がされなくなる.

サーバの PHP のバージョンは以下のとおりで,

% php -v
PHP 5.3.3 (cli) (built: Jan  5 2016 08:52:51)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

http://php.net/manual/en/language.types.array.php にある PHP 5.4 形式の配列(array in PHP = ordered map)定義を使っているのが原因.ということで,以下パッチ.

--- a/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php
+++ b/wp-content/plugins/multisite-post-duplicator/inc/mpd-functions.php
@@ -415,10 +415,10 @@ function mpd_get_images_from_the_content($post_id){
             $image_obj = get_post($matches[0]);
             //Push this object into an array.
             // Save all elements needed to the duplication process
-            $images_objects_from_post[ $matches[0] ] = [
+            $images_objects_from_post[ $matches[0] ] = array(
                 'attached_file_path' => get_attached_file( $matches[0] ),
                 'object'             => $image_obj
-             ];
+            );
 
         }
         //Deliver the array of attachment objects to the core

2017/08/10 11:39 / ligitning 付属の DTD ファイル

使っていないので実害ないのだが,Debian GNU/Linux の lighitning (Calendar Extension for Thunderbird) package の /usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/ にある以下等の DTD ファイルは,更新されてもファイルのタイムスタンプが同じままで,かつ変更によってファイルサイズも変わらない(1文字の変更等)なので,rsync -a で更新されない.

念の為 diff を取った際に若干焦った.以下のように 2010-01-01 (GMT 00:00) で固定されているっぽい.

ls --full-time /usr/lib/lightning/chrome/calendar-en-US/locale/en-US/calendar/preferences/
total 20
-rw-r--r-- 1 root root 1932 2010-01-01 09:00:00.000000000 +0900 alarms.dtd
-rw-r--r-- 1 root root 1295 2010-01-01 09:00:00.000000000 +0900 categories.dtd
-rw-r--r-- 1 root root 2074 2010-01-01 09:00:00.000000000 +0900 general.dtd
-rw-r--r-- 1 root root  396 2010-01-01 09:00:00.000000000 +0900 preferences.dtd
-rw-r--r-- 1 root root 1955 2010-01-01 09:00:00.000000000 +0900 views.dtd

2017/08/09 19:37 / From: の書き換えに対応しているメールサービス

たとえば Gmail で送信者情報として Gmail ではない自身のメールアドレスを使う,といった話.もっと書くと,SMTP (RFC 821 -> RFC 2821 -> RFC 5321)では RCPT TO:/MAIL FROM: コマンドでそれぞれ送信先/送信元を設定しつつも,メール本体(DATA)は RFC 822 のとおりこの中にも別途 From: と To: 等が記載できるようになっていて,その From: を書き換えるという話.ちょっとだけ調べた範囲.

追記 (2019/11/19)

outlook.com の Email alias だが,Microsoft account として登録されている他のメールアドレスは Email alias として追加できない.

2017/08/07 13:05 / ストレージ32GBのマシンにWindows 10 Creators Updateを適用する

手元に Office 入りの 32Gストレージの Windows 10 Note (Windows 8 から無償アップデート)があって,それを最新のWindows 10にするためになんとかする.

空き容量が8G必要で(解説ページによっては10Gが安全と書いてあったりする),ちょっとどうあがいても6G程度の空き容量しか作れなかったので,Media Creation Tool (MCT)で別途インストールメディアを作成してインストール.

基本的にはAnniversary Update適用の際にMCTを利用する詳細を記述してある http://ascii.jp/elem/000/001/232/1232920/ の記事のとおりのことを今やればCreators Updateが入ってくれる.

手元の 32GB Windows 10 Note は Windows 10 Home なので,メディア作成時のエディションとしてはWindows 10 Homeを単純に選びたかったのだが,

という項目しか表示されなかった.後者を選択して,現状特に問題なし.Office 等もそのまま使えている.

Media Creation Tool (MCT)は https://www.microsoft.com/software-download/windows10 からダウンロードする(言語自動判定).ただしこのURL,Windows ではない OS からアクセスするとISOをダウンロードするページに飛ばされる様子.

2017/07/16 23:56 / Linux 4.12.0 -> 4.13-rc1

4.13-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/07/03 12:39 / dax: Could not allocate 8192 bytes percpu data on Linux 4.12

Kernel を 4.12 に上げたら dax (手元では device-mapper が依存)が modprobe に失敗するようになった.

percpu: allocation failed, size=8192 align=4096 atomic=0, alloc from reserved chunk failed
CPU: 4 PID: 3257 Comm: modprobe Tainted: P           O    4.12.0-(snip)
Hardware name: (snip)
Call Trace:
 ? dump_stack+0x5c/0x7a
 ? pcpu_alloc+0x601/0x640
 ? load_module+0x7bf/0x2af0
 ? kernel_read_file+0x19d/0x1c0
 ? SyS_finit_module+0xa5/0xe0
 ? SyS_finit_module+0xa5/0xe0
 ? entry_SYSCALL_64_fastpath+0x1e/0xa9
dax: Could not allocate 8192 bytes percpu data

mm/percpu.cpcpu_allocでコケているようなのだが(8192 byteが大きいということ?),percpu_testのkernel moduleを作ってみても以下のような感じでうまく動かず.

% sudo modprobe percpu_test
modprobe: ERROR: could not insert 'percpu_test': Resource temporarily unavailable

ということで,これ以上は追えず.とりあえずはCONFIG_DAX=mCONFIG_DAX=yにすれば解決する.

2017/07/03 12:32 / nvidia-legacy-340xx-kernel-dkms 340.102-1 on Linux 4.12

Kernel を 4.12 に上げたら nvidia-legacy-340xx-kernel-dkms の compile でコケるようになった.treewide: move set_memory_* functions away from cacheflush.hの影響でset_memory_uc()他がasm/cacheflush.hから<asm/set_memory.h>に移動した影響.

以下 nvidia-legacy-340xx-kernel-dkms 向けやるきなしなしパッチ.4.12 以前では動かない.

--- a/conftest.sh
+++ b/conftest.sh
@@ -372,6 +372,7 @@ compile_test() {
             #
             CODE="
             #include <asm/cacheflush.h>
+            #include <asm/set_memory.h>
             void conftest_set_memory_uc(void) {
                 set_memory_uc();
             }"
@@ -385,6 +386,7 @@ compile_test() {
             #
             CODE="
             #include <asm/cacheflush.h>
+            #include <asm/set_memory.h>
             void conftest_set_memory_array_uc(void) {
                 set_memory_array_uc();
             }"
@@ -398,6 +400,7 @@ compile_test() {
             #
             CODE="
             #include <asm/cacheflush.h>
+            #include <asm/set_memory.h>
             void conftest_set_pages_uc(void) {
                 set_pages_uc();
             }"
--- a/nv-linux.h
+++ b/nv-linux.h
@@ -194,6 +194,7 @@ RM_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
 #if defined(NV_SET_MEMORY_UC_PRESENT)
 #undef NV_SET_PAGES_UC_PRESENT
 #undef NV_CHANGE_PAGE_ATTR_PRESENT
+#include <asm/set_memory.h>
 #elif defined(NV_SET_PAGES_UC_PRESENT)
 #undef NV_CHANGE_PAGE_ATTR_PRESENT
 #endif

Related articles

2017/06/28 11:30 / nfsroot + squashfs + overlayfs

良くあるDiskless Clientの構成法だと思われるが,あまり情報がないので自分用メモ.

ということを overlayfs で squashfs に tmpfs を overlay して実現する,という話.

ざっくりと設定手順は以下のとおり.サーバ・クライアントは Debian GNU/Linux stretch を想定.

DHCP Server の設定

isc-dhcp-server をインストールして,/etc/dhcp/dhcpd.confを以下のような感じで設定.groupを使うと記述が少なくて済む(global parameter として next-server と filename を書いても良い).

group {
  next-server 10.0.0.2;
  filename "/client/pxelinux.0";
  host megane {
    hardware ethernet xx:xx:xx:xx:xx:xx;
    fixed-address 10.0.0.71;
    option host-name "megane";
  }
  ### 他のホストの設定多数
}

10.0.0.2はTFTP ServerのIP Address,filenameでTFTPのパスを指定.

TFTP Server の設定

tftpd-hpa をインストール(tftpd は Tftpd is not suitable for use with the PXE bootloader (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=401288) とのことで PXE boot 向けではないとのこと).

/etc/default/tftpd-hpaTFTP_DIRECTORY="/srv/tftp"とあって,つまりサーバの/srv/tftpがTFTPの/になる.

PXE netboot 用のファイルを /srv/tftp/client (dhcpd.confで指定したパス)に配置する.network boot の Debian installerを細工する形で置くが簡単.

/srv/tftp/client/pxelinux.cfg/defaultに設定ファイルを置く.私の場合は以下.

default syslinux/vesamenu.c32
    prompt 0
    menu title Diskless clients
    MENU AUTOBOOT Starting the default kernel in # seconds

include syslinux/stdmenu.cfg

label Linux 4.11.7-diskless-01+
    menu label Linux 4.11.7-diskless-01+ (stretch)
    menu default
    timeout 100
    kernel boot/vmlinuz-4.11.7-diskless-01+
    append initrd=boot/initrd.img-4.11.7-diskless-01+ root=/dev/nfs nfsroot=10.0.0.2:/export/diskless,ro ip=:::::eth0:dhcp

label Linux 4.11.6-diskless-01+
    menu label Linux 4.11.6-diskless-01+ (stretch)
    kernel boot/vmlinuz-4.11.6-diskless-01+
    append initrd=boot/initrd.img-4.11.6-diskless-01+ root=/dev/nfs nfsroot=10.0.0.2:/export/diskless,ro ip=:::::eth0:dhcp

boot/は実際には/srv/tftp/client/boot/が対応し,ここに後の手順で作成する root のイメージから,vmlinuz と initrd を copy する.10.0.0.2:/export/disklessはNFSで mount する際の source.

syslinux/以下のファイルはDebian installerから流用(若干調整が必要).

NFS Server の設定

nfs-kernel-server をインストール./export/disklessがNFSでクライアントからマウント可能なように/etc/exportsを設定する.See man exportfs.

root (/) イメージ作成

debootstrap を利用する.debootstrapをインストールしておく.

sudo debootstrap --verbose --arch amd64 stretch stable http://ftp.jp.debian.org/debian/

で,stable/ 以下に root (/) のファイルが配置される.あとは

sudo chroot stable /bin/sh

stable// とみなした shell が起動するので,そこで apt-get で必要なパッケージを入れまくる(/etc以下や password 等も設定).

ただし /proc 等が存在しないので,chroot の前に以下で mount しておくのが無難.

sudo mount -t devpts devpts stable/dev/pts
sudo mount -t proc proc stable/proc
sudo mount -t binfmt_misc binfmt_misc stable/proc/sys/fs/binfmt_misc
sudo mount -t sysfs sysfs stable/sys
sudo mount -t tmpfs tmpfs stable/sys/fs/cgroup

この段階で,別途 make-kpkg でカスタム linux-image package を作成し,それを chroot 環境で dpkg -i する.kernel 再構築の際,使う NIC の Driver や NFS 等は module (m)ではなくkernelに組み込んでおく(y)必要がある.また,initrd に細工する必要があるが,これはまた後ほど.

あと,ホスト毎に処理を変えたい部分については /etc/rc.local に書いておく.ssh server の鍵をホスト毎に変えたくなる(かつ永続性も確保したい)が,これについてはたとえば以下のようなファイルを用意しておき,

[/etc/init.d/ssh-pre]
#! /bin/sh

### BEGIN INIT INFO
# Provides:             ssh-pre
# Required-Start:       $remote_fs $syslog
# Required-Stop:        $remote_fs $syslog
# X-Start-Before:       sshd
# Default-Start:        2 3 4 5
# Default-Stop:         
# Short-Description:    Prepare ssh host keys
### END INIT INFO

# `hostname` に応じてどこかから鍵を /etc/ssh/ に copy する

chroot環境でinsserv ssh-preを実行して,起動時に実行されるようにしておく.

好みの感じに仕上がった stable/ を squashfs 化する.

sudo rsync -avzL --exclude=... stable/ stable-tmp/
sudo mksquashfs stable-tmp stable.img

上のように無駄なファイルを squashfs に入れても仕方がないので rsync で一旦フィルタする.mksquashfs の -ef option でも exclude できるが,容量が大きくテストが煩雑になるので,rsync で exclude するようにした.手元の script では例えば以下のように exclude している.

     --exclude='/tmp/*'                                 \
     --exclude='/opt/*'                                 \
     --exclude='/proc/*'                                \
     --exclude='/sys/*'                                 \
     --exclude='/dev/*'                                 \
     --exclude='/var/cache/apt/archives/*'              \
     --exclude='/var/tmp/*'                             \
     --include='/var/log/*/'                            \
     --exclude='/var/log/*'                             \
     --exclude='/var/log/*/*'                           \

initrd の細工

initrd から squashfs を mount (ro)して,それに対して tmpfs (rw) を overlay して diskless client の / とする,という設定を行う.今から思えばhttps://github.com/chesty/overlayrootとほぼ同じ.

以下の2つのファイルを用意する.

[/usr/share/initramfs-tools/hooks/overlayroot]
#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

manual_add_modules overlay
manual_add_modules squashfs
manual_add_modules loop

hooks/* は kernel module や initrd で必要な実行ファイルを initrd に含める設定を書く箇所.overlay や squashfs が initrd に含まれるようにする.

$1で処理を分岐している部分は,hook ファイルの起動順を決めるための部分で,もし他のhookファイルに依存する場合はPREREQ変数にその名前を記載しておく (see man initramfs-tools).

[/usr/share/initramfs-tools/scripts/init-bottom/overlayroot]
#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

modprobe overlay
modprobe squashfs
modprobe loop

mkdir -p /over
mount -t tmpfs -o size=1g tmpfs /over

mkdir -p /over/rw
mkdir -p /over/ro
mkdir -p /over/sq
mkdir -p /over/work

mount -o remount,ro /root
ro=/over/ro

file=`ls /root/*.img | tail -1`
if test -f $file ; then
    mount -t squashfs $file /over/sq
    ro=/over/sq
fi

mount --move /root /over/ro

mount -t overlay -o upperdir=/over/rw,lowerdir=$ro,workdir=/over/work overlay /root

# Create files for /var/log/ .
# See /var/lib/dpkg/info/base-files.postinst .
touch /root/var/log/wtmp /root/var/log/btmp /root/var/log/lastlog

mkdir -p /root/over
mount --move /over /root/over

if command -v nuke >/dev/null; then
    nuke /over
fi

scripts/init-bottom/overlayroot/usr/share/initramfs-tools/init (/init)から起動されることになるファイル.scripts/init-bottom/udev も存在すると思われるが,それより先に実行される(ファイル名で sort した順っぽい).PREREQについてはhookと同じ.

やっていることは以下のとおり.

あとは chroot 環境で以下で initrd を作り直す.initrd は /boot/initrd*に生成される.

# update-initramfs -u -k all

NFSROOT の設置

NFS server の /export/diskless に squashfs のイメージ stable.img を置く.また,/export/diskless/dev/ 等は一時的に mount point となるので,以下を mkdir しておく(中身は空).

テスト

いちいち実機でテストするのは面倒なので同一ネットワーク内の別ホストで kvm を用いてテストすると簡便.たとえば以下(DHCP サーバに接続するため要ブリッジの設定).

% qemu-img create -f qcow2 debian.qcow 20G
% kvm -vnc :0 -hda debian.qcow -smp 8 -net bridge -net nic,model=e1000 -m 8000 &
% vncviewer :0 &

追記 (2017/08/03)

上記作業だと

  1. debootstrap で作った /
  2. そこから無駄なファイルを除外するための rsync した / (これは削除可能)
  3. そこから作った squashfs

と,かなり容量が必要で,もとの / は upgrade 等のために必要で保存しておく必要もあるので,いっそのこと作った squashfs + overlayfs で 1. の代用にしようとしたのだが,

ということで,1. を 3. +overlayfsに rsync -a しようとしたら,大量の同一ファイルの copy が発生してしまった.

% ls -l --full-time stable/etc/hosts stable-20170731-over/etc/hosts
-rw-r--r-- 1 root root 109 2017-06-20 13:05:10.000000000 +0900 stable-overlay/etc/hosts
-rw-r--r-- 1 root root 109 2017-06-20 13:05:10.714742658 +0900 stable/etc/hosts
% stat stable/etc/hosts stable-20170731-over/etc/hosts
  File: stable/etc/hosts
  Size: 109             Blocks: 8          IO Block: 4096   regular file
Device: 2ch/44d Inode: 11835294    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-08-04 10:32:23.151773243 +0900
Modify: 2017-06-20 13:05:10.714742658 +0900
Change: 2017-06-20 13:05:10.714742658 +0900
 Birth: -
  File: stable-20170731-over/etc/hosts
  Size: 109             Blocks: 1          IO Block: 1024   regular file
Device: 702h/1794d      Inode: 1613        Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-06-20 13:05:10.000000000 +0900
Modify: 2017-06-20 13:05:10.000000000 +0900
Change: 2017-06-20 13:05:10.000000000 +0900
 Birth: -

みたいな感じで,stable/ は通常の 1. filesystem 上のファイル,stable-overlay/ は 3. のファイル.

rsync で dry-run してみると,以下のとおり一応同じ timestamp だとはみなしてもらえる.

% rsync -avz -n stable/etc/hosts stable-20170731-over/etc/hosts
sending incremental file list

sent 44 bytes  received 12 bytes  112.00 bytes/sec
total size is 109  speedup is 1.95 (DRY RUN)

で,実際に rsync しようとすると以下のように怒られる.

% rsync -avz stable/etc/hosts stable-20170731-over/etc/hosts
sending incremental file list
rsync: failed to set times on "/somewhere/stable-20170731-over/etc/hosts": Operation not permitted (1)

sent 44 bytes  received 141 bytes  370.00 bytes/sec
total size is 109  speedup is 0.59
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1196) [sender=3.1.2]

実際に copy はしないが,timestamp の update を試みていることが分かる(user権限でrsyncしたので,permission が deny された).実際に timestamp が update されると,overlayfs の upper layer 側にファイルが作成されることになる.

ということで 1. を完全に削除(つまり 3. のうえに rsync しない)しようか思案中.

Related articles

2017/06/21 19:50 / Debian GNU/Linux stretch の NVIDIA Driver

Kernel は 4.11.6 の自前パッケージ.ドライバのソースは以下の2種類を試した.

Linux 4.11.6 + nvidia-kernel-dkms 375.66-1

嵌ったのは,以下のような2つのファイルを混同してしまう点.conftest.sh でことごとく error がでる.

/usr/src/linux-headers-4.11.6-<version>/include/asm/ をまるごと削除して解決させた.ソースコードの修正は不要.

Linux 4.11.6 + nvidia-legacy-340xx-kernel-dkms 340.102-1

手元に GeForce 8600 (古い)があって,これは最新のドライバではダメで,legacy ドライバを利用する必要がある.ということで仕方なくコンパイル.以下の対応する変更が必要.

以下パッチ.

--- a/conftest.sh
+++ b/conftest.sh
@@ -1579,6 +1579,7 @@ compile_test() {
             #
             CODE="
             #include <linux/sched.h>
+            #include <linux/sched/signal.h>
             void conftest_fatal_signal_pending(void) {
                 fatal_signal_pending();
             }"
--- a/nv-drm.c
+++ b/nv-drm.c
@@ -48,7 +48,7 @@ static int nv_drm_load(
     return -ENODEV;
 }
 
-static int nv_drm_unload(
+static void nv_drm_unload(
     struct drm_device *dev
 )
 {
@@ -64,7 +64,7 @@ static int nv_drm_unload(
         }
     }
 
-    return -ENODEV;
+    return;
 }
 
 static void nv_gem_free(
diff --git a/uvm/nvidia_uvm_linux.h b/uvm/nvidia_uvm_linux.h
index f69c107..3d21a47 100644
--- a/uvm/nvidia_uvm_linux.h
+++ b/uvm/nvidia_uvm_linux.h
@@ -189,6 +189,9 @@
 #include <linux/ratelimit.h>
 #endif
 
+#include <linux/signal.h>
+#include <linux/sched/signal.h>
+
 #if !defined(no_printk)
 //
 // TODO: bug 1329255: instead of this heavy-handed approach, use conftest to
diff --git a/uvm/nvidia_uvm_lite.c b/uvm/nvidia_uvm_lite.c
index 71bebe3..3685dc6 100644
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -818,7 +818,7 @@ done:
 }
 
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
-int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+int _fault(struct vm_fault *vmf)
 {
 #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
     unsigned long vaddr = (unsigned long)vmf->virtual_address;
@@ -828,7 +828,7 @@ int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
     struct page *page = NULL;
     int retval;
 
-    retval = _fault_common(vma, vaddr, &page, vmf->flags);
+    retval = _fault_common(vmf->vma, vaddr, &page, vmf->flags);
 
     vmf->page = page;
 
@@ -866,7 +866,7 @@ static struct vm_operations_struct uvmlite_vma_ops =
 // it's dealing with anonymous mapping (see handle_pte_fault).
 //
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
-int _sigbus_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
+int _sigbus_fault(struct vm_fault *vmf)
 {
     vmf->page = NULL;
     return VM_FAULT_SIGBUS;

Related articles

2017/06/19 11:23 / Debian GNU/Linux stretch

Debian GNU/Linux 9.0 stretch が 2017-06-17 にリリースされたので,upgrade.リリースノートはhttps://www.debian.org/releases/stretch/amd64/release-notes/.以下でアップグレード.

リリースのノートには以下のように記載されているが,aptitude を使ってしまった.

以前のリリースの一部では、アップグレード作業に aptitude の利用を推奨していました。このツールは jessie から stretch へのアップグレードには推奨されません。

update 時点で以下のように怒られる場合は,

W: There is no public key available for the following key IDs:
EF0F382A1A7B6500

まず debian-archive-keyring を upgrade する.

aptitude install debian-archive-keyring

あとは aptitude で調整しつつ upgrade.個人的に気付いた点(リリースノートにも書いてある)等,メモは以下のとおり.

なお,MariaDB になったため mysqldump が途中でコケるようになった.

mysqldump -u root -p --all-databases --events
(略)
mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Scheduler were found damaged at server start (1577)

以下でDBをアップグレードすれば良いらしい(適宜 --verbose --force オプションをつける).

mysql_upgrade -u root -p

追記(2017/6/24)

Postfix を upgrade (3.1.4-7)したら以下のように表示されるようになった.

Postfix is running with backwards-compatible default settings
See http://www.postfix.org/COMPATIBILITY_README.html for details
To disable backwards compatibility use "postconf compatibility_level=2" and "postfix reload"

upgrade ではなく,イチから install した場合の/etc/postfix/main.cfは以下のとおり.

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

微妙に該当するchangelog.Debian.gzは以下.

[/usr/share/doc/postfix/changelog.Debian.gz]
postfix (3.1.4-1) unstable; urgency=medium
(snip)
  * Default to compatibility_level=2 on fresh installs.
 -- LaMont Jones (snip)  Wed, 04 Jan 2017 17:55:06 -0700

よく見てみたら sid 環境でも同じ Warning が出ていた.

ほぼ default の設定でつかっているので,受け入れることにして以下を実行.

% sudo postconf compatibility_level=2
% sudo postfix reload

/etc/postfix/main.cfcompatibility_level = 2が追加される.将来のdefaultの変更も受け入れる場合は(各自の責任のもと)9999に設定せよとのことだが,そこまでの度胸はなし.

追記(2017/6/29)

sdic も stretch に含まれていない.

2017/06/13 09:41 / background-image transition

以下のようなやる気のない感じで背景画像を20秒間隔でクロスフェード(3.5秒)で切り替えるようなページを作っていたのだが,Chrome で表示する分には問題ないのだが,Chrome 以外だとことごとく無視されるということに気付く.

$(function(){
    cnt=1; t=0;
    body=$('body');
    arr=['bg0.jpg','bg1.jpg','bg2.jpg','bg3.jpg','bg4.jpg'];
    setInterval(function() {
        bg='url("images/'+arr[cnt++]+'")';
        if(cnt==arr.length)cnt=0;
        if(t==0){body.css('transition','background 3s linear 0.5s');t=1;}
        setTimeout(function(){body.css('background-image',bg);},3500);
    },20000);
});

どうやら background-image は animatable ではないというのが標準ならしい.Chrome でクロスフェードできていたのは,Chrome の勝手な実装によるものならしい.

ということで,div を2枚重ねして交互に画像そ差し替えつつ fadeIn()/fadeOut() するようにとりあえずjQueryで実装.その後,div を複数重ねてCSSのみでの実装例を見付けたので,CSSのみで実装(CSSが若干見通し悪くなるので,CSSを生成するスクリプトを書いた).

参考にしたページ:

2017/06/10 23:51 / google-chrome Emacs key binding

google-chrome の key binding が gnome (GTK) の default に戻ってしまい悩む.環境は Debian GNU/Linux sid で,gdm および gnome-shell は利用せず,window manager は awesome window manager.以下のような状況.

Gnome の key binding を Emacs にするには,(時代によって)いろいろあって,手元の残骸を見てみた感じでは以下のとおり.

[~/.gtkrc-2.0]
gtk-key-theme-name = "Emacs"
[~/.gtkrc-2.0]
include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
[~/.config/gtk-3.0/settings.ini]
[Settings]
gtk-key-theme-name = Emacs
% dconf write /org/gnome/desktop/interface/gtk-key-theme  \'Emacs\'
or
% gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"

~/.config/dconf/user に設定される

他に gnome-tweak-tool を使うというのもあるらしいが,gnome-tweak-tool はいろんな package に依存して面倒だったので試さず(おそらく dconf と同じ).

どの設定も効かなくて悩んだのだが,gnome-terminal を一旦 gnome-terminal-server とともに終了して,gnome-terminal-server と gnome-terminal を起動し直したら設定が有効になった.手元の環境では dconf の設定は効かず,~/.gtkrc-2.0も obsolete で,~/.config/gtk-3.0/settings.ini の設定が唯一効くらしい.

ちなみに gnome の設定まわりは

ややこしいのだが,それらの関係はGconf, Dconf, Gsettings and the relationship between themのとおりで,最新環境では dconf のみを信じていればいいらしい.

追記(2017/12/12)

通常の gnome 環境 (手元では 3.26) では以下が必要.~/.config/gtk-3.0/settings.iniの設定は効かず.

gsettings set org.gnome.desktop.interface gtk-key-theme "Emacs"

Related articles

2017/05/18 17:40 / nfsroot で / に対して fscache (fsc) を有効にする,再び

以前の記事で nfsroot で / に対して fscache (fsc) を有効にする方法を記載していたのだが,これだと initramfs-tools が upgrade されると編集したファイルが上書きされて正常に起動しなくなる.

ということで,もう少しスマートな方法(アプローチは同じ).以下の2つのファイルを用意して,chmod 755 しておく.

[/usr/share/initramfs-tools/hooks/zz-nfsmount]
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /bin/mount.nfs
cp -pnL /usr/share/initramfs-tools/extra/* ${DESTDIR}/bin

[/usr/share/initramfs-tools/extra/nfsmount]
#!/bin/sh

opt=""
while [ "$1" = "-o" ] ; do
    opt="$opt $1"; shift
    opt="$opt $1"; shift
done
mount.nfs $1 $2 $opt

あとはupdate-initramfs -u -k allとかで initrd 再生成.

/usr/share/initramfs-tools/hooks/zz-nfsmountは以前 /usr/share/initramfs-tools/hooks/klibcの末尾に書いていたもの./usr/share/initramfs-tools/extra/nfsmountは initrd に含める nfsmountの代用 script.やっていることは以下のとおり.

Related articles

2017/05/15 14:04 / Linux 4.11.0 -> 4.12-rc1

4.12-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/05/03 00:24 / Linux 4.10.13 -> 4.11.0

4.11 が出たので 2017/02/20 10:31 / Linux 4.9.X -> 4.10同様 .config がどう変更されるのか見てみた.2017/03/06 09:51 / Linux 4.10.1 -> 4.11-rc1 との差分のみ(ターゲットが異なって,こちらはより汎用指向の環境).以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/04/25 12:22 / Wanderlust+IMAP/SSL w/emacs24 24.5+1-10

Debian GNU/Linux unstable (sid) で emacs24 が 24.5+1-10 に上がった際に,以下のとおりopenssl s_clientが使えなくなった.

[/usr/share/doc/emacs24-common/changelog.Debian.gz]
* Don't offer/use openssl s_client by default: "s_client is a debug
  tool, it does not set up a secure connection, it ignores all
  errors and just continues.  It also doesn't do checks it should be
  doing.  This is all documented behaviour." -- Kurt Roeckx
  Add these patches to fix the problem:
    0028-IMAP-connections-no-longer-use-openssl-s_client.patch
    0029-openssl-s_client-is-no-longer-a-default-for-ssl-conn.patch
  Thanks to Kurt Roeckx for reporting the issue. (Closes: #766397)

おそらくその影響で,Wanderlust の IMAP/SSL が gnutls-cli を使うようになって,うまくサーバに接続できない状況となってしまった.

% gnutls-cli --port XXXXX localhost
Processed 173 CA certificate(s).
Resolving 'localhost:XXXXX'...
Connecting to '::1:XXXXX'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
- Certificate[0] info:
 - subject `EMAIL=postmaster@example.com,CN=localhost,OU=Automatically-generated IMAP SSL key,O=Courier Mail Server,L=New York,ST=NY,C=US', issuer `EMAIL=postmaster@example.com,CN=localhost,OU=Automatically-generated IMAP SSL key,O=Courier Mail Server,L=New York,ST=NY,C=US', serial 0x.................., RSA key 4096 bits, signed using RSA-SHA1, activated `2015-03-.. ..:..:.. UTC', expires `2016-03-.. ..:..:.. UTC', key-ID `sha256:........'
        Public Key ID:
                sha1:........
                sha256:........
        Public key's random art:
(snip)

- Status: The certificate is NOT trusted. The certificate issuer is unknown. The certificate chain uses expired certificate. 
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.
*** handshake has failed: Error in the certificate.

Wanderlust から /usr/share/emacs/24.5/lisp/net/tls.el.gz が呼ばれて,gnutls-cli の引数は以下のように定義されている.

(defcustom tls-program
  '("gnutls-cli --x509cafile %t -p %p %h"
    "gnutls-cli --x509cafile %t -p %p %h --protocols ssl3")
; snip

ということで ~/.wl に以下を書いて解決.自前サーバを port forward して使っているので--insecureでとりあえずは問題なし.

(setq tls-program '("gnutls-cli --insecure --x509cafile %t -p %p %h"))

2017/04/08 08:41 / Emacs の local variable を eval する

いろいろ互換性を考慮して code 毎に ruby-indent-level 等の Emacs local variable を設定することにしている.以下のような感じ.

#!/usr/bin/env ruby

if true
    puts "foo"
end

# Local Variables:
# ruby-indent-level: 4
# End:

Default の ruby-indent-level は 2 なので,Local Variables:を書いた後にそれをEmacsのBufferに反映させるためには,ファイルの再読込みをすればよいのだが,それをしなくても M-x normal-mode すれば反映されるらしい.See f1-f normal-mode or /usr/share/emacs/24.5/lisp/files.el.gz.

2017/03/26 00:54 / curl on お名前.com 共用サーバーSD CGI

お名前.com 共用サーバーSDにて,ちょっとした CGI で curl を利用していたのだが,急に使えなくなった.仕方なく wget を使うことにする.

原因は(64-bitの) libldap-2.4.so.2,liblber-2.4.so.2 が存在しないこと.ldap 対応の curl が install されているらしい.ちなみに curl は 64-bit で,OS は Solaris 10.ssh でログインした際には 32-bit 版の curl が普通に使える.

% ldd /usr/local/bin/curl (← ruby の CGI で `ldd /usr/local/bin/curl` とかを叩く)
    libcurl.so.4 =>  /usr/local/lib/64/libcurl.so.4
    libidn.so.11 =>  /usr/lib/64/libidn.so.11
    libiconv.so.2 =>     /usr/local/lib/64/libiconv.so.2
    libssl.so.1.0.0 =>   /usr/local/lib/64/libssl.so.1.0.0
    libcrypto.so.1.0.0 =>    /usr/local/lib/64/libcrypto.so.1.0.0
    libldap-2.4.so.2 =>  (file not found)
    liblber-2.4.so.2 =>  (file not found)
    libresolv.so.2 =>    /lib/64/libresolv.so.2
    libgen.so.1 =>   /lib/64/libgen.so.1
    libz.so.1 =>     /usr/lib/64/libz.so.1
    librt.so.1 =>    /lib/64/librt.so.1
    libsocket.so.1 =>    /lib/64/libsocket.so.1
    libnsl.so.1 =>   /lib/64/libnsl.so.1
    libc.so.1 =>     /lib/64/libc.so.1
    liblber-2.4.so.2 =>  (file not found)
    libldap-2.4.so.2 =>  (file not found)
    libgcc_s.so.1 =>     /usr/sfw/lib/64/libgcc_s.so.1
    libdl.so.1 =>    /lib/64/libdl.so.1
    libaio.so.1 =>   /lib/64/libaio.so.1
    libmd.so.1 =>    /lib/64/libmd.so.1
    libmp.so.2 =>    /lib/64/libmp.so.2
    libscf.so.1 =>   /lib/64/libscf.so.1
    libdoor.so.1 =>  /lib/64/libdoor.so.1
    libuutil.so.1 =>     /lib/64/libuutil.so.1
    libm.so.2 =>     /lib/64/libm.so.2

もちろん 64-bit libldap-2.4.so.2,liblber-2.4.so.2 をどこかから入手して,LD_RUN_PATH でパス指定するなども考えたが,まず Solaris 10 のバイナリがなかなか見つからず(sunsite.sut.ac.jpはいつのまにかなくなっていて,KDDI のミラーも404),https://mirror.opencsw.org/opencsw/ に OpenCSW Solaris package archive があるにはあったが,.pkg.gz の取り扱い(Linux 等での展開)を考えた時点で面倒になって断念.

追記(2018/2/11)

今調べてみたら libldap-2.4.so.2 および liblber-2.4.so.2 が用意されていて,curl が CGI から動くようになっていた.

Related articles

2017/03/22 16:51 / X-Forwarded-For: unknown (forwarded_for off) (Squid 3.4.8-6+deb8u4)

Squid (Debian GNU/Linux 3.4.8-6+deb8u4) 経由で www.ieee.org にアクセスすると,以下のようなエラーが表示されるようになった.

Bad Request
Bad Request
An error occurred. Please contact your System Administrator.
Copyright 2017 © IEEE . All rights reserved. Use of this Web site signifies your agreement to the IEEE Terms and Conditions.A not-for-profit organization, IEEE is the world's largest professional association for the advancement of technology.

squid.conf で forwarded_for off としているのだが,off だと X-Forwarded-For: unknown というヘッダ情報を送るらしい.X-Forwarded-For を付けない設定とするには delete とする必要があるらしい.以下 squid.conf より.

Related articles

2017/03/10 18:09 / Let's Note CF-AX2 キーボード掃除(キートップ取り外し)

ノートPC (Let’s Note CF-AX2) の Enter キー付近にちょっと粘っこいジュースをこぼしてしまい,Enter キーの効きが相当悪くなった.というか,小指で Enter を押すのだが,かなり力を要する状態に.ということで,なんとかしてみた.

http://faq.askpc.panasonic.co.jp/faq/docs/003181を参照して爪とクランプの位置を確認しつつ,マイナスドライバーでクランプ側をまず外し,その後に爪側を外す.あとキートップやパンタグラフ部分の詳細はhttp://akiba-neo.com/letsnote/s9/210/が参考になった.

images/2704.jpg
ジュースをこぼした箇所のキートップを外したところ.Enter 以外も若干引っかかる状態だったので,取り外して綿棒で(少し水を付けたりして)掃除.

images/2707.jpg
パンタグラフ.

images/2708.jpg
Enter キーのキートップの裏は金具があったりなどで結構複雑な構造になっている.

images/2710.jpg
Enter キーのキートップの裏.金具を上げてみたところ.この金具の箇所で動きが悪くなっていた模様.

という感じで,外したキートップを全て水洗いして元に戻したら普通に使えるようになった.

2017/03/06 09:51 / Linux 4.10.1 -> 4.11-rc1

4.11-rc1が出ているので .config がどう変更されるのか見てみた.ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2017/03/05 23:07 / 確定申告 w/e-Tax

マイナンバーカードとPaSoRi RC-S380があれば e-Taxでの申告が可能ということで,やってみたメモ.

申告書の提出まで

「e-Tax受付システム」での確認

「e-Tax受付システム」の「メッセージボックス」から提出内容を確認する.ただし Chrome on Linux でログインしようとすると「政府共通認証局(官職認証局)のルート証明書」等がなければ警告がでるので,以下で対応.

pay-easy (インターネットバンキング)で支払い

クレジットカードでの支払も可能だが,この場合手数料が生じる(https://kokuzei.noufu.jp/参照.1万円毎82円)ので pay-easy (ペイジー)を利用.http://www.e-tax.nta.go.jp/tetsuzuki/tetsuzuki4.htm#Link2を参照しつつ「入力方式による納税手続」(つまり納付目的コードを利用)で納税する.

pay-easy で入力が要求されるのは金額の他に以下.

平成49年まで復興特別所得税額があるので,020(申告所得税)ではなく320(申告所得税及復興特別所得税)になるので注意 (いくつかの解説ページでは 020 を利用しているものもあるが).

「登録方式による納税手続」というのもあるらしく,この場合,e-Taxソフト等を使用して納付情報データを作成し,e-Taxに登録(納付情報登録依頼)し,e-Tax上で納付区分番号を確認するというもの.今回「e-Taxソフト」は使っていないので,この手続きはとらず.

Related articles

2017/03/04 22:45 / マイナンバーカードと PaSoRi RC-S380

PaSoRi RC-S380でマイナンバーカードが利用できるらしい.ということでやってみた.

基本的には http://www.nta.go.jp/tetsuzuki/shinkoku/shotoku/tokushu/jyunbi.htm に沿って「JPKI利用者ソフト」なるものをインストールするだけ.ただしこの「JPKI利用者ソフト」は「FeliCaランチャー」と干渉するらしく「FeliCaランチャー」が起動していると「JPKI利用者ソフト」がPaSoRiにアクセスできなく(ポートをFeliCaランチャーが掴んでいる状態に)なるので,「JPKI利用者ソフト」を利用する場合は「FeliCaランチャー」を終了しておく(通知領域から終了可能).

なお,署名用電子証明書と利用者証明用電子証明書の2種類が収められていて,それらのパスワードは以下のようになっている.

市役所等でマイナンバーカード受け取りの際に設定したものだが,その際英字は大文字で入力していたと思われるが,大文字小文字の区別はないっぽい.

Related articles

2017/02/20 13:03 / nvidia-kernel-dkms 340.96-1 on Linux 4.10

以下の kernel の修正に対する対応が必要.NVIDIA 375.26 Kernel 4.10-rc1 (w/ CPU hotplug workaround) を参考に.

--- a/nv-linux.h
+++ b/nv-linux.h
@@ -277,11 +277,13 @@ RM_STATUS nvos_forward_error_to_cray(struct pci_dev *, NvU32,
 
 extern int nv_pat_mode;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
 #if !defined(NV_VMWARE) && defined(CONFIG_HOTPLUG_CPU)
 #define NV_ENABLE_HOTPLUG_CPU
 #include <linux/cpu.h>              /* CPU hotplug support              */
 #include <linux/notifier.h>         /* struct notifier_block, etc       */
 #endif
+#endif
 
 #if !defined(NV_VMWARE) && \
   (defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE))
--- a/os-mlock.c
+++ b/os-mlock.c
@@ -50,8 +50,13 @@ RM_STATUS NV_API_CALL os_lock_user_pages(
        unsigned int flags = 0;
        if(write) flags |= FOLL_WRITE;
        if(force) flags |= FOLL_FORCE;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
+       ret = get_user_pages_remote(current, mm, (unsigned long)address,
+                       page_count, flags, user_pages, NULL, NULL);
+#else
        ret = get_user_pages_remote(current, mm, (unsigned long)address,
                        page_count, flags, user_pages, NULL);
+#endif
     }
 #elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
     ret = get_user_pages_remote(current, mm, (unsigned long)address,
--- a/uvm/nvidia_uvm_lite.c
+++ b/uvm/nvidia_uvm_lite.c
@@ -815,7 +815,7 @@ done:
 #if defined(NV_VM_OPERATIONS_STRUCT_HAS_FAULT)
 int _fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-    unsigned long vaddr = (unsigned long)vmf->virtual_address;
+    unsigned long vaddr = (unsigned long)vmf->address;
     struct page *page = NULL;
     int retval;
 

Related articles

2017/02/20 10:31 / Linux 4.9.X -> 4.10

4.10 が出たので 2016/12/14 23:00 / Linux 4.8 -> 4.9同様 .config がどう変更されるのか見てみた.2016/12/30 21:28 / Linux 4.9 -> 4.10-rc1 との差分のみ(ターゲットが異なる).

Related articles

2017/02/17 18:20 / ZSWAP と ZRAM メモ

ZSWAP と ZRAM のメモ.ZSWAP は SWAP のための compressed cache で,ZRAM は Compressed RAM block device.ともに圧縮を用いてメモリ/SWAPの効率化を図るもの,だと思う.

ZRAM

CONFIG_ZRAM で設定する.モジュール化可.CONFIG_ZSMALLOCに依存し,CONFIG_ZSMALLOC_STAT=y としておくと debugfs 経由で stat が確認できる./sys/kernel/debug/zsmalloc/zram0/classes 等.

Debian の場合は特に package は提供されておらず,https://wiki.debian.org/ZRam のように /etc/init.d/zram を用意して利用する.

SWAP する際にこの圧縮された block device が利用されるイメージ.とはいえこの compressed block device 自体も RAM であるという,不思議な状況になる.

ZSWAP

SWAP する際にそれを圧縮して RAM 上に CACHE する,というアプローチ.こちらは別途 SWAP 用の HDD/SDD などの存在が想定される.

CONFIG_ZSWAP で設定,モジュール化不可.CONFIG_ZPOOL に依存するとともに,Default の mm/zswap.c#define ZSWAP_ZPOOL_DEFAULT "zbud" となっているので,CONFIG_ZBUD=y (Low (Up to 2x) density storage for compressed pages)も組み込む必要があるっぽい.

# echo 1 > /sys/module/zswap/parameters/enabled で enable する.max_pool_percent, zpool, compressor を設定可能./sys/kernel/debug/zswap/ 以下に stat がある.sudo grep -R . /sys/kernel/debug/zswap とかで参照.

参考にしたページ: https://web.archive.org/web/20170311013437/http://gnu.hatenablog.com/entry/2016/01/12/072154

2017/02/09 11:03 / MediaWiki で SVG w/inkscape 0.92.0-4~bpo8+1 (jessie backports)

MediaWiki で inkscape を用いて SVG (scalable vector graphics) のサムネイルを作る設定をしていたのだが,inkscape の version を jessie の backports のもの (0.48.5-3 -> 0.92.0-4~bpo8+1)にしたらうまく動かなくなった.

Error creating thumbnail: 
(process:2380): Gtk-WARNING **: Locale not supported by C library.
Using the fallback 'C' locale.
Failed to get connection
** (inkscape:2380): CRITICAL **: dbus_g_proxy_new_for_name: assertion 'connection != NULL' failed

** (inkscape:2380): CRITICAL **: dbus_g_proxy_call: assertion 'DBUS_IS_G_PROXY (proxy)' failed

** (inkscape:2380): CRITICAL **: dbus_g_connection_register_g_object: assertion 'connection != NULL' failed

** (inkscape:2380): WARNING **: GC Warning: Out of Memory! Heap size: 2 MiB. Returning NULL!

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

Emergency save activated!
Emergency save completed. Inkscape will close now.
If you can reproduce this crash, please file a bug at www.inkscape.org
with a detailed description of the steps leading to the crash, so we can fix it.
** Message: Error: Inkscape encountered an internal error and will close now.

/somewhere/mediawiki/includes/limit.sh: line 101: 2379 Aborted /usr/bin/timeout $MW_WALL_CLOCK_LIMIT /bin/bash -c "$1" 3>&-

どうやら shell を起動する際にメモリサイズを制限しているらしく,そこで引っかかっているらしい./etc/mediawiki/LocalSettings.php$wgMaxShellMemory という変数で設定するが,https://www.mediawiki.org/wiki/Manual:$wgMaxShellMemoryによると default は 307200 KB = 300 MB.inkscape がメモリを喰いすぎな気もする.以下のように500 MBに設定すれば動くようになった.

[/etc/mediawiki/LocalSettings.php]
$wgMaxShellMemory = 512000;

Related articles

2017/02/08 14:07 / MediaWiki 1.28.0 on Debian/GNU Linux jessie

いろいろ事情があって MediaWiki を 1.28.0 に上げた.実際には git の REL1_28.以下メモ.

Elasticsearchだが,今回色々混乱して色んなバージョンが混ざった状態に一瞬なってしまい,Elasticsearchが保持するデータ(/var/lib/elasticsearch/にある)を一旦まるごと削除した.以下のような感じ.

sudo /etc/init.d/elasticsearch stop
sudo rm -rf /var/lib/elasticsearch/*
sudo rm -rf /var/lib/elasticsearch/.* (dot で始まるものがあれば)
sudo /etc/init.d/elasticsearch start

LocalSettings.phpだが,

$wgCacheDirectory = "$IP/cache";

などと明示的に $wgCacheDirectory を指定しないと以下のようなエラーが出たような気がする(default の設定がなくなった?).

LCStoreCDB.php: Unable to move the new CDB file into place.

Related articles

2017/01/16 22:15 / Windows 10 Client が Samba (2:4.2.14+dfsg-0+deb8u2) で構築されているドメインに参加できない

既存ユーザ(一度ログインしたことのあるユーザ)は Windows 10 Client に(ドメインのアカウントで)ログインできるが,新規ユーザはログインできないという問題が発生.おそらくちょっと前にあった更新プログラムの影響かもしれない.

サーバ側は Samba (2:4.2.14+dfsg-0+deb8u2) で smbldap-tools で LDAP に繋いで,Linux とアカウントを共有しているような環境.サーバ側の問題,特に Samba と LDAP の連携まわりを疑ったが,Windows 8 Client ではこのような症状がでていないので,Windows 10 固有の問題らしい.

症状は以下のとおり.

一旦ドメインから抜けたり再度参加したりいろいろ試したが,今度は既存ユーザ(一度ログインしたことのあるユーザ)までログインできなくなるという状況に.

日本語で調べていたためまったく検索に引っかからなかったのだが,samba.org の https://wiki.samba.org/index.php/Required_Settings_for_Samba_NT4_Domains によると smb.conf

server max protocol = NT1

を書く必要があるとのこと.これで解決した.なお「現在ログオン要求をサービスするログオン サーバーがありません」に対応する英語メッセージは There are currently no logon servers available to service the logon request.

Related articles

2016/12/30 21:28 / Linux 4.9 -> 4.10-rc1

4.10-rc1 が出ているので .config がどう変更されるのか見てみた.ただし 2016/12/14 23:00 / Linux 4.8 -> 4.9 とはターゲットが異なる(ターゲットは VMware on Windows 上の Guest で CPU は i7-3687U).以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

docs-rst: create an user’s manual book で REPORTING-BUGS が Documentation/admin-guide/reporting-bugs.rst に rename されているので,make-kpkg で .deb が作れなくなっている./usr/share/kernel-package/ruleset/targets/headers.mk で REPORTING-BUGS を install している箇所を comment out して make-kpkg する.

あと arch/x86/kernel/cpu/vmware.c に幾つか修正が施されているようで dmesg の diff (抜粋)は以下のような感じ.

-Host bus clock speed read from hypervisor : 66000000 Hz
+vmware: TSC freq read from hypervisor : 2601.000 MHz
+vmware: Host bus clock speed read from hypervisor : 66000000 Hz
+vmware: using sched offset of 10831029224 ns
-Booting paravirtualized kernel on bare hardware
+Booting paravirtualized kernel on VMware hypervisor

追記(2017/2/27)

Linux 4.10 に REPORTING-BUGS が含まれない問題だが,kernel-package に https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849357 のように bug report されている.

追記(2017/12/28)

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849357 だが NMU (Non-maintainer upload) で修正済み(Jul 2017).メンテナの git https://anonscm.debian.org/git/users/srivasta/debian/kernel-package.git/ には反映されていない模様.

Related articles

2016/12/30 02:42 / 電子マネービューワー FLO:Q(フローク) サービス終了

PaSoRi RC-S380で nanaco の残高が確認できず,変だなと思っていたら http://www.floq.jp/kisekae/ のとおり FLO:Q(フローク)(電子マネービューワー含む)が12月20日でサービスを終了していた.

残高を確認するだけなので FeliCa Balance Viewerをとりあえず使うことにした(Linux版もあるらしい).スマートフォンのNFCをつかってアプリで読んでもよいのだけども.

Related articles

2016/12/29 02:03 / ZenFone 3 検討

スマートフォン(Android)の買い替えを検討中.現在使っているのは HTC One (M7) でスペックは以下.

不満はないが,若干もっさりしだしたのとディスプレイが割れているので,買い替えたい.ASUS の ZenFone シリーズで検討中.

ZS570KL の日本版は Snapdragon 821 になっていて,ストレージも 256G というとんでもないスペック(256Gをなにに使うんだろう...).ZS570KL は https://www.asus.com/jp/News/M3BOvqwUePdKjglj のとおり一旦受注停止していたが 12/22 に受注再開されている.買うのであれば ZS570KL なのだが10万円ぐらいなので逡巡してしまう.対して海外版は7万円強(その分スペックも落ちる).微妙.とりあえず ZE520KL が手頃感もありつつ,今のものと比べてサイズも若干だけ大きい程度なので,当面を凌ぐには良いかもと思いつつある.

2016/12/20 11:54 / nvidia-kernel-dkms 340.96-1 on Linux 4.9

nvidia-kernel-dkms 340.96-1 (Debian GNU/Linux stable) を Linux 4.9 で compile しようとすると以下のようにコケる.

/usr/src/nvidia-current-340.96/os-mlock.c:XX:XX: error: too many arguments to function ‘get_user_pages_remote’

https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=9beae1ea89305a9667ceaab6d0bf46a045ad71e7 の影響の様なので os-mlock.c の

ret = get_user_pages_remote(current, mm, (unsigned long)address,
                            page_count, write, force, user_pages, NULL);

の箇所を以下のように変更.

{
    unsigned int flags = 0;
    if(write) flags |= FOLL_WRITE;
    if(force) flags |= FOLL_FORCE;
    ret = get_user_pages_remote(current, mm, (unsigned long)address,
                                page_count, flags, user_pages, NULL);
}

実際は write=1, force=0 なので,

ret = get_user_pages_remote(current, mm, (unsigned long)address,
                            page_count, FOLL_WRITE, user_pages, NULL);

でもOKなはず.ただし compile は通るが

NVRM: failed to register procfs!
NVRM: request_mem_region failed for 16M @ 0xfa000000. This can
NVRM: occur when a driver such as rivatv is loaded and claims
NVRM: ownership of the device's registers.
NVRM: DRM init failed
NVRM: NVIDIA init module failed!

という感じで modprobe に失敗する.かつ /proc/driver/nvidia/ だけが残されて,再度 modprobe する際は

proc_dir_entry 'driver/nvidia' already registered

とか怒られたり ls /proc/driver/nvidia/ とかすると固まったりする...Linux 4.9 を諦めるか,340.96-1 ではなく backports の 367.57-2~bpo8+1を使うか...

追記(2016/12/27)

/proc/driver/nvidia/ (procfs) の部分については単に nvidia-kernel-dkms 340.96-1 の bug らしい(error handling が抜けている).以下でなんとかなる.

--- a/nv.c
+++ b/nv.c
@@ -809,13 +809,17 @@ int __init nvidia_init_module(void)
     /* create /proc/driver/nvidia/... */
     rc = nv_register_procfs();
     if (rc < 0)
+    {
         nv_printf(NV_DBG_ERRORS, "NVRM: failed to register procfs!\n");
+        rc = -ENODEV;
+        goto failed5;
+    }
 
     if (pci_register_driver(&nv_pci_driver) < 0)
     {
         rc = -ENODEV;
         nv_printf(NV_DBG_ERRORS, "NVRM: No NVIDIA graphics adapter found!\n");
-        goto failed4;
+        goto failed35;
     }
 
     if (nv_drm_init(&nv_pci_driver) < 0)
@@ -1040,6 +1044,9 @@ failed3:
 
     pci_unregister_driver(&nv_pci_driver);
 
+failed35:
+    nv_unregister_procfs();
+
 failed5:
     rm_shutdown_rm(sp);
 
 

goto failed4 の箇所は普通に goto 先を間違っているような気がする.

追記(2016/12/27)

https://devtalk.nvidia.com/default/topic/981852/linux/resolution-patch-attached-for-nvidia-linux-driver-340-98-x86_64-using-linux-kernel-4-9/ から辿れる http://pastebin.com/raw/0XE0e8Wx にある以下のパッチをあてたらうまく動くようになった.

--- kernel/nv-drm.c
+++ kernel/nv-drm.c
@@ -115,7 +115,11 @@ static const struct file_operations nv_drm_fops = {
 };

 static struct drm_driver nv_drm_driver = {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+    .driver_features = DRIVER_GEM | DRIVER_PRIME | DRIVER_LEGACY,
+#else
     .driver_features = DRIVER_GEM | DRIVER_PRIME,
+#endif
     .load = nv_drm_load,
     .unload = nv_drm_unload,
     .fops = &nv_drm_fops,

https://patchwork.freedesktop.org/patch/102820/https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=3cbf6a5deb2f4a469de7a90a3cc169e8fcba95e2 によると,drm について比較的新しい driver は DRIVER_MODESET というフラグが用いられているが,実際にこれは「DRIVER_MODERN」(新しい driver)の意味であって super confusing だから古いタイプの driver に DRIVER_LEGACY というフラグを付けることにしたらしい.

Related articles

2016/12/14 23:00 / Linux 4.8 -> 4.9

Linux 4.9リリースされたので,make menuconfigで何もせずに Exit したら手元の Linux 4.8 の .config がどう変更されるのか見てみた.以下 - は削除されたもの,+ は追加されたもの m->n 等は値の変化を示す.

Related articles

2016/12/13 21:46 / yasnippet メモ

yasnippet を使おうと思う機会がそこそこあるのだが,いちいち思い出すのに時間がかかるのでメモ.

ところで yas-insert-snippet を C-x i i に割り当てる設定が散見されるが,C-x i は通常 insert-file なので(see /usr/share/emacs/24.5/lisp/file.el.gz),ちょっとイマイチ.

参考にしたページ:

2016/12/10 04:50 / dmesg on Debian GNU/Linux sid (unstable)

いつの間にか以下のとおり sid で dmesg が user 権限で実行できないようになった.

% dmesg
dmesg: read kernel buffer failed: Operation not permitted

/usr/share/doc/linux-image-4.8.0-2-amd64/changelog.linux.gz によるとCONFIG_SECURITY_DMESG_RESTRICT=yが default になった模様.

* security,printk: Enable SECURITY_DMESG_RESTRICT, preventing non-root users
  reading the kernel log by default (sysctl: kernel.dmesg_restrict)

少なからず困惑した人がいるようで https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=842226 では純粋に bug として報告されていたり (そういう仕様になった,ということで終わり),https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=847198 では adm group の user は dmesg できるようにして欲しいというのが wishlist として挙げられていたりする(これは難しそう).

以下のどちらかをすれば user 権限で dmesg できるようになる.

% sudo sysctl kernel.dmesg_restrict=0
% sudo sh -c 'echo 0 > /proc/sys/kernel/dmesg_restrict'

起動時に有効にするには/etc/rc.confにそれっぽい command を書いておくか /etc/sysctl.confもしくは /etc/sysctl.d/local.confに以下を書いておく.

kernel.dmesg_restrict = 0

追記(2017/1/20)

jessie の backports の最新版 kernel linux-image-4.8.0-0.bpo.2-amd64 (4.8.15-2~bpo8+2) でも上記と同じ症状が発生する模様.

2016/12/06 12:24 / xserver-xorg-video-nvidia 367.57-2 on Debian GNU/Linux sid (unstable)

何かの拍子に(というかCRON-APTで)再び xserver-xorg-video-nvidia (unstable は 367.57-2)が uninstall され,これが xorg-video-abi-20 以下 (および xserver-xorg-core (< 2:1.18.99) に依存しており,xserver-xorg-core は現在 2:1.19.0-2 で Provides: xorg-input-abi-24, xorg-video-abi-23 という状況なので,xserver-xorg-video-nvidia が install できない.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845638 にあるとおり xorg-server の 1.18 から 1.19 への transition に関する問題らしい.Debian experimental にある 375.20 を使えば問題ないらしいが,845638 ではまず 370.28 を unstable に push することを考えているらしい(375.20 は変更点が多いから,というのが理由になっている).

がしかし 370.28 が push される気配もないので,experimetal の 375.20 を install して使うことにした.問題なく動作している.

追記(2016/12/9)

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=845638 だが結局 375.20 が unstable に降りてくる形になった模様.

Related articles

2016/12/01 00:20 / xserver-xorg-input-vmmouse Removed 1:13.1.0-1 from unstable (Debian GNU/Linux)

xserver-xorg-input-vmmouse が古い xserver-xorg-core に依存したままで xserver-xorg-core を upgrade することが出来なかったのでちょっと調べた.どうやら xserver-xorg-input-vmmouse は https://tracker.debian.org/news/784550 によると July 16 時点で unstable から削除された模様 (July 20 には testing からも削除された).理由は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=831420 のとおり Linux kernel driver 側でサポートされたからとのこと.たしかに 4.1-rc1 で取り込まれているCONFIG_MOUSE_PS2_VMMOUSE=yで有効になる (CONFIG_HYPERVISOR_GUEST=y等に依存).

Related articles

2016/11/25 10:44 / btrfs tuning

Intel 8 Series/C220 Series Chipset (具体的にはC226)の Onboard RAID (RAID5)上で LUKS の暗号化を入れて,その上で btrfs を置いて NFS でファイルサーバにしているのだが,そのパフォーマンスについて.

ちなみに CPU は4コア4スレッド(stable 運用で,kernel は backports の linux-image-4.6.0-0.bpo.1-amd64 4.6.4-1~bpo8+1).暗号化しているのは廃棄の手間を考えて,btrfs は snapshot による daily backup のため.RAID5 が Onboard (ソフトウェア RAID)なのは予算の都合上.

だいたい2年半ぐらい運用していて,それなりにファイル数も増えて,snapshot数も増えた状態で,頻繁にiowaitで固まるようになった.

以下チューニングのポイント.

追記(2016/12/7)

ionice や renice で nfsd や btrfs-transacti の優先度を下げて(I/O については ionice -c 3 で idle class にして,プロセス優先度も nice -n 19 するとか)負荷が上がった時でも譲り合ってもらえるような設定を試してみたが,やはりうまく行かない.

結局 btrfs-transacti が間欠的に書き込みを行うのが問題らしい.通常は数十MBなのだが,たまに数百Mbyte級の read/write が発生する (なにに由来してサイズが変動するのか未調査).ちょっと微妙だが btrfs-transacti の kernel thread を起こすタイミングを手動で調整することにする.というか,mount -o remount すると btrfs-transacti が起きるので,あとはずっと sleep してもらうようにする.具体的には以下.

commit interval が長いと不具合発生時に未 commit のものが残ることになる(ように思われる)ので,その点要注意.手動で再起動する前にも一旦 remount したほうが良いのかもしれない.

ちなみに数時間分の commit すべきなにかを溜め込んだだろう状態で remount して一気に commit してみたが,それほど disk access は無かった.適切に merge されたりするのかもしれない.あと,メモリ使用量(もしくは disk 上のバッファ?)とかも気になるところ (際限なく溜め込めるわけでもないような気がする).

Related articles

2016/11/02 06:44 / タイ王国メモアゲイン

Related articles

2016/10/12 12:12 / samba segfault on Debian GNU/Linux sid (unstable)

samba 2:4.4.6+dfsg-1 が segfault で動いてくれない.

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
0x00007f9713a4ae1a in __GI___waitpid (pid=8474, stat_loc=stat_loc@entry=0x7ffe7b34f310, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid.c:29
#0  0x00007f9713a4ae1a in __GI___waitpid (pid=8474, stat_loc=stat_loc@entry=0x7ffe7b34f310, options=options@entry=0) at ../sysdeps/unix/sysv/linux/waitpid.c:29
#1  0x00007f97139d208b in do_system (line=<optimized out>) at ../sysdeps/posix/system.c:148
#2  0x00007f97150ee191 in smb_panic_s3 () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0
#3  0x00007f9717601b6f in smb_panic () from /usr/lib/x86_64-linux-gnu/libsamba-util.so.0
#4  0x00007f9717601d86 in ?? () from /usr/lib/x86_64-linux-gnu/libsamba-util.so.0
#5  <signal handler called>
#6  0x00007f9713f460f5 in talloc_get_size () from /usr/lib/x86_64-linux-gnu/libtalloc.so.2
#7  0x00007f97151092d6 in event_add_to_poll_args () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0
#8  0x00007f97151098b1 in ?? () from /usr/lib/x86_64-linux-gnu/libsmbconf.so.0
#9  0x00007f9713d3604d in _tevent_loop_once () from /usr/lib/x86_64-linux-gnu/libtevent.so.0
#10 0x00007f9713d3627b in tevent_common_loop_wait () from /usr/lib/x86_64-linux-gnu/libtevent.so.0
#11 0x000055dffc2e4221 in main ()
A debugging session is active.

以下が関連するのかも.

追記(2016/10/12)

とりあえず libtalloc2 と libtevent0 を以下のように downgrade したら直った.

追記(2016/10/13)

この BUG 対策でsamba 2:4.4.6+dfsg-2がリリースされ,問題点が修正された様子.patch は https://anonscm.debian.org/cgit/pkg-samba/samba.git/commit/?id=9a72dc156a10627edf301365c5110d5c13768f2c

2016/10/05 03:41 / タイ王国バンコク スワンナプーム空港メモ

Related articles

2016/09/06 10:28 / Xorg on sid, gdm3 が起動しない

しばらく再起動していなかったのだが,諸事情により再起動すると,Xが起動しないという Debian GNU/Linux sid (unstable) に良くあるいつものパタン.

以下のような環境で,まず Xorg が起動しない.

/var/log/messages によると以下のループ.

Sep  5 10:16:23 hoge gdm-launch-environment]: AccountsService: Could not get current seat: No data available
Sep  5 10:16:23 hoge /usr/lib/gdm3/gdm-wayland-session[5493]: Unable to register display with display manager
Sep  5 10:16:23 hoge gdm3: Child process -5493 was already dead.
Sep  5 10:16:23 hoge gdm3: Child process 5489 was already dead.
Sep  5 10:16:23 hoge gdm3: Unable to kill session worker process

/var/lib/gdm3/.local/share/xorg/Xorg.0.log によると nvidia の driver が見つからなくて EE で落ちている.最近 CRON-APT で横着して upgrade していたのだが何かの拍子に xserver-xorg-video-nvidia が抜けてしまったらしい.ということで入れる.

次は Xorg も /usr/lib/gdm3/gdm-x-session も起動しているが gnome-shell が起動しない(ログイン画面が出ず真っ黒のまま)./var/log/messages によると以下のようにまた nvidia まわりでコケている.

Sep  5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted
Sep  5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset
Sep  5 10:16:52 hoge gnome-session[9184]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted
Sep  5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9210]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted
Sep  5 10:16:52 hoge kernel: [ 1059.936725] gnome-shell[9210]: segfault at 14 ip 00007faf5bd4a817 sp 00007fff6e0c7a80 error 4 in libmutter.so.0.0.0[7faf5bcfb000+127000]
Sep  5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Application 'org.gnome.Shell.desktop' killed by signal 11
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: could not insert 'nvidia_current_modeset': Operation not permitted
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: ../libkmod/libkmod-module.c:977 command_do() Error running install command for nvidia_modeset
Sep  5 10:16:52 hoge org.gnome.Shell.desktop[9221]: modprobe: ERROR: could not insert 'nvidia_modeset': Operation not permitted
Sep  5 10:16:52 hoge kernel: [ 1060.010282] gnome-shell[9221]: segfault at 14 ip 00007f08d9038817 sp 00007ffd8e2648a0 error 4 in libmutter.so.0.0.0[7f08d8fe9000+127000]
Sep  5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: Application 'org.gnome.Shell.desktop' killed by signal 11
Sep  5 10:16:52 hoge gnome-session[9184]: gnome-session-binary[9184]: WARNING: App 'org.gnome.Shell.desktop' respawning too quickly
Sep  5 10:16:52 hoge gnome-session[9184]: Unable to init server: Could not connect: Connection refused
Sep  5 10:16:52 hoge gnome-session-f[9231]: Cannot open display:
Sep  5 10:16:52 hoge gnome-session-binary[9184]: Entering running state
Sep  5 10:16:53 hoge gdm3: GdmDisplay: display lasted 2.595077 seconds

どうやら modprobe nvidia_modeset の権限がなくてコケている様子.ということで,/etc/modules に nvidia-current-modeset およびついでに nvidia-current-uvm を追加して解決.

Related articles

2016/08/08 09:55 / namazu2 2.0.21-15 @ Debian GNU/Linux sid (trying to overwrite '/usr/share/man/man1/mknmz.1.gz', which is also in package namazu2-index-tools 2.0.21-15)

以下のように mknmz (の man) が namazu2 と namazu2-index-tools の両方に含まれていて,upgrade できない.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833335に bug report もされている.

Unpacking namazu2 (2.0.21-15) over (2.0.21-12) ...
dpkg: error processing archive /var/cache/apt/archives/namazu2_2.0.21-15_amd64.deb (--unpack):
 trying to overwrite '/usr/share/man/man1/mknmz.1.gz', which is also in package namazu2-index-tools 2.0.21-15
Processing triggers for man-db (2.7.5-1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/namazu2_2.0.21-15_amd64.deb

たしかに apt-get source namazu2 して fakeroot -f debian/rules binary すると mknmz.1.gz が namazu2 にも namazu2-index-tools にも含まれる.詳細は見ていないが,以下で直るっぽい.

--- debian/rules        2016-08-02 16:03:17.000000000 +0900
+++ debian/rules.new    2016-08-08 10:35:16.237076456 +0900
@@ -83,7 +83,7 @@
        dh_installemacsen --priority=50

 override_dh_installman:
-       dh_installman man/mknmz.1 man/namazu.1
+       dh_installman man/namazu.1

 override_dh_link:
        -rm -rf $(CURDIR)/debian/namazu2-index-tools/usr/share/doc/namazu2-index-tools

追記(2016/08/22)

おそらく2.0.21-18 (その前に -16, -17 もあったが)で直っている気配.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833335はそのままfixedにならないまま残っているようですが.

2016/08/03 14:34 / iowait monitoring by MRTG

File server (RAID5 w/LUKS) の iowait がなんだかひどいので,MRTG で monitoringしようとして悩む.

OID (object identifier) は .1.3.6.1.4.1.2021.11 付近の以下を monitoring.

mrtg.cfg は http://net-snmp.sourceforge.net/tutorial/tutorial-5/mrtg/ にある通りに書けば良いらしい.なお,Debian GNU/Linux の場合の UCD-SNMP-MIB.txt の PATH は /usr/share/snmp/mibs/UCD-SNMP-MIB.txt で,これは libsnmp-base package に含まれている.ちなみに LoadMIBs に複数の MIB file を記載するには comma (,) 区切りで書く

ここで問題なのはMaxBytesで,上記URLの例ではMaxBytes[...]: 100のようになっているが,これだと ssCpuRawIdle がうまく測れない(もともと iowait を monitor しようという企画なのだが...).

ssCpuR