やるきなし

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 にある(バイナリ).たまにダンプしてバックアップするのが良いかもしれない.

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)

上記作業だと

と,かなり容量が必要で,もとの / は 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 しようという企画なのだが...).

ssCpuRawIdle の仕様をいろいろあたってみたのだが,/usr/share/snmp/mibs/UCD-SNMP-MIB.txt によると以下のとおり.

ssCpuRawIdle OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The number of 'ticks' (typically 1/100s) spent
         idle.

         On a multi-processor system, the 'ssCpuRaw*'
         counters are cumulative over all CPUs, so their
         sum will typically be N*100 (for N processors)."
    ::= { systemStats 53 }

つまり MaxBytes が 100 だと invalid な数値だとして .rrd file (←私の環境ではRRDを利用している)にそもそも値が保存されない様子.ということで,monitor 対象の計算機毎に個別に設定してやる必要がある.当然ここでの CPU の数は論理プロセッサの数(コア数ではなく).たぶん上記 DESCRIPTION のとおり他の ssCpuRaw* についても同様だが,Idle は常に最大値付近の値をとるので,この問題がより顕在化しやすい.

Related articles

2016/07/22 10:09 / MediaWiki on Debian/GNU Linux jessie

ふと aptitude を見てみると MediaWiki (1:1.19.20+dfsg-2.3) が Obsolete and Locally Created Packages に分類されていた.どうやら jessie から削除された模様

調べてみるとEarly termination of MediaWiki security supportとのことで,当初からjessieから削除予定だった模様(1.19 のセキュリティサポートがjessieの次のstretchのリリースの前,というか既に終了した模様).

ということで,MediaWiki 1.27 を自前でインストールする(sid の package を持ってくることも考えたが php5 ではなく php 依存するらしく,混乱しそうなので断念).

1.19 では日本語検索のためにBruteSearchを導入していたのであるが,同ページの情報によると1.23.xで動作しないとのことで,導入を見送る.

BruteSearch のかわりにElasticsearchを導入.Install は https://www.mediawiki.org/wiki/Extension:CirrusSearch参照.設定(index生成)等はhttps://phabricator.wikimedia.org/diffusion/ECIR/browse/master/README参照.

別途 elasticsearch (java で動く deamon)を導入する必要があるが,これは Debian package でインストールする.ただし jessie で提供される 1.0.3 だと,検索してみても

An error has occurred while searching: We could not complete your search due to a temporary problem. Please try again later.

などと表示されるだけで検索できない.backports から 1.6.2+dfsg-1~bpo8+1 を install すれば (jessie でも)ちゃんと動く.

Related articles

2016/07/21 16:08 / チャット・メッセンジャーアプリ

なんだかいろいろあってわけがわからない.

2016/07/15 12:01 / CacheFiles BUG (Linux 4.6.x)

Since 4.5.7 is the last release of 4.5 series, I tried to update my server to 4.6.4. However, the following disturbs my upgrading to 4.6.4.
BUG: unable to handle kernel NULL pointer dereference at 0000000000000098
IP: [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0
PGD 0
Oops: 0000 [#1] SMP
Modules linked in: dm_crypt dm_mod algif_skcipher af_alg rpcsec_gss_krb5 overlay squashfs ext4 crc16 jbd2 mbcache loop cpufreq_powersave cpufreq_userspace cpufreq_conservative cpufreq_ondemand cpufreq_stats binfmt_misc nfsd btrfs xor raid6_pq sg sr_mod cdrom sd_mod intel_rapl x86_pkg_temp_thermal intel_powerclamp kvm_intel kvm irqbypass crct10dif_pclmul crct10dif_common crc32_pclmul ghash_clmulni_intel sha256_ssse3 sha256_generic snd_hda_codec_hdmi drbg ansi_cprng hid_generic uas usbhid snd_hda_codec_realtek usb_storage snd_hda_codec_generic hid snd_hda_intel aesni_intel snd_hda_codec aes_x86_64 iTCO_wdt snd_hda_core ablk_helper iTCO_vendor_support snd_pcm ahci cryptd snd_timer libahci lrw nvidiafb evdev snd gf128mul libata vgastate soundcore glue_helper lpc_ich mei_me scsi_mod pcspkr acpi_cpufreq serio_raw i2c_i801 mfd_core mei shpchp tpm_tis rtc_cmos tpm button processor md_mod fbcon bitblit fbcon_rotate fbcon_ccw fbcon_ud fbcon_cw softcursor tileblit lm78 hwmon_vid f71882fg i5k_amb coretemp msr nvidia(PO) drm agpgart fuse autofs4 crc32c_intel xhci_pci ehci_pci xhci_hcd ehci_hcd usbcore usb_common
CPU: 2 PID: 926 Comm: kworker/u16:4 Tainted: P           O    4.6.4-myn-01+ #95
Hardware name: OEM something
Workqueue: fscache_object fscache_object_work_func
task: ffff88042c02f2c0 ti: ffff880425fa4000 task.ti: ffff880425fa4000
RIP: 0010:[<ffffffff8127343f>]  [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0
RSP: 0018:ffff880425fa7d90  EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff88042ac14400 RCX: 0000000000000034
RDX: ffff88043f7ceb10 RSI: ffff8803c219f390 RDI: ffff88043f7ceb08
RBP: ffff8803c219f280 R08: 0000000000000000 R09: 00000000000000ec
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88042ca2f000
R13: ffff88042ac14400 R14: 00000000ffffffff R15: 00000000ffffb96f
FS:  0000000000000000(0000) GS:ffff88043f480000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000098 CR3: 0000000001c06000 CR4: 00000000000406e0
Stack:
 ffff8803c219f280 ffff88042ac14400 ffffffff81271c75 ffff8803c219f280
 ffff880418c4c140 ffff8803bf985a50 ffffffff8120a74a ffff8803c219f310
 ffffffff81827580 ffff8803c219f280 000000000000006d ffffffff8120aae9
Call Trace:
 [<ffffffff81271c75>] ? cachefiles_drop_object+0xd5/0x180
 [<ffffffff8120a74a>] ? fscache_drop_object+0xda/0x260
 [<ffffffff8120aae9>] ? fscache_object_work_func+0xf9/0x460
 [<ffffffff8106e925>] ? process_one_work+0x135/0x3c0
 [<ffffffff8106ec0d>] ? worker_thread+0x5d/0x470
 [<ffffffff8106ebb0>] ? process_one_work+0x3c0/0x3c0
 [<ffffffff81073e2a>] ? kthread+0xca/0xe0
 [<ffffffff81603402>] ? ret_from_fork+0x22/0x40
 [<ffffffff81073d60>] ? kthread_create_on_node+0x170/0x170
Code: 11 09 00 48 8d bd 10 01 00 00 f0 80 a5 10 01 00 00 fe c6 83 20 01 00 00 00 31 f6 e8 7c b7 e1 ff 48 8b 85 f8 00 00 00 48 8b 40 30 <48> 8b 80 98 00 00 00 f0 48 01 83 30 01 00 00 b8 01 00 00 00 f0
RIP  [<ffffffff8127343f>] cachefiles_mark_object_inactive+0x4f/0xa0
 RSP <ffff880425fa7d90>
CR2: 0000000000000098
---[ end trace 0b204b8eafde5e55 ]---

Function cachefiles_mark_object_inactive is introduced at CacheFiles: Provide read-and-reset release counters for cachefilesd. So when I revert this commit, my linux 4.6.4 system works fine.

P.S.(2016/7/16)

My system is Debian GNU/Linux stable (jessie). The version of cachefilesd is 0.10.5-1. I may need to update this to the latest one, 0.10.9, which includes Suspend/resume culling based on recently released file/block counts.

P.S.(2016/8/23)

Altough it seems that this patch (4.7.2 version) might be related to this issue, I still got the following Oops.

BUG: unable to handle kernel NULL pointer dereference at 0000000000000098
IP: [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles]
PGD 0
Oops: 0000 [#1] SMP
Modules linked in: rpcsec_gss_krb5 overlay squashfs ext4 crc16 jbd2 mbcache dm_crypt loop algif_skcipher af_alg dm_mod cpufreq_powersave cpufreq_userspace cpufreq_conservative cpufreq_ondemand cpufreq_stats binfmt_misc nfsd btrfs xor raid6_pq sg sr_mod cdrom sd_mod intel_rapl x86_pkg_temp_thermal intel_powerclamp kvm_intel kvm irqbypass crct10dif_pclmul crct10dif_common crc32_pclmul ghash_clmulni_intel drbg snd_hda_codec_hdmi ansi_cprng hid_generic usbhid uas snd_hda_codec_realtek snd_hda_codec_generic hid usb_storage snd_hda_intel aesni_intel snd_hda_codec aes_x86_64 snd_hda_core ablk_helper cryptd snd_pcm iTCO_wdt lrw ahci iTCO_vendor_support snd_timer gf128mul nvidiafb libahci evdev snd glue_helper libata vgastate soundcore pcspkr serio_raw mei_me i2c_i801 scsi_mod acpi_cpufreq lpc_ich mei shpchp mfd_core rtc_cmos tpm_tis tpm button processor cachefiles fbcon bitblit fbcon_rotate fbcon_ccw fbcon_ud fbcon_cw softcursor tileblit md_mod lm78 hwmon_vid f71882fg i5k_amb coretemp msr nvidia(PO) drm agpgart fuse autofs4 crc32c_intel xhci_pci ehci_pci xhci_hcd ehci_hcd usbcore usb_common
CPU: 2 PID: 938 Comm: kworker/u16:6 Tainted: P           O    4.7.2-myn-01+ #101
Hardware name: OEM something
Workqueue: fscache_object fscache_object_work_func
task: ffff88042c6a0f00 ti: ffff880426668000 task.ti: ffff880426668000
RIP: 0010:[<ffffffffa0bc386c>]  [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles]
RSP: 0018:ffff88042666bd88  EFLAGS: 00010202
RAX: 0000000000000000 RBX: ffff88042a9b2200 RCX: 0000000200000000
RDX: ffff88042c6a0f00 RSI: ffff8803e8d122c0 RDI: ffff88042a9b2320
RBP: ffff8803e8d122c0 R08: 0000000000000000 R09: 00000000000000ec
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88042ca08f00
R13: ffff88042a9b2200 R14: 00000000ffffffff R15: 00000000ffff0e67
FS:  0000000000000000(0000) GS:ffff88043f480000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000098 CR3: 0000000001c06000 CR4: 00000000000406e0
Stack:
 ffff8803e8d122c0 ffff88042a9b2200 ffff88042ca08f00 ffffffffa0bc20d5
 ffff8803e8d122c0 ffff88041a336780 ffff8800ae5fb230 ffffffff81213e7a
 ffff8803e8d12350 ffffffff8182d900 ffff8803e8d122c0 000000000000006d
Call Trace:
 [<ffffffffa0bc20d5>] ? cachefiles_drop_object+0xd5/0x180 [cachefiles]
 [<ffffffff81213e7a>] ? fscache_drop_object+0xda/0x260
 [<ffffffff81214219>] ? fscache_object_work_func+0xf9/0x460
 [<ffffffff810738f5>] ? process_one_work+0x135/0x3c0
 [<ffffffff81073bdd>] ? worker_thread+0x5d/0x470
 [<ffffffff81073b80>] ? process_one_work+0x3c0/0x3c0
 [<ffffffff81078dda>] ? kthread+0xca/0xe0
 [<ffffffff8161063f>] ? ret_from_fork+0x1f/0x40
 [<ffffffff81078d10>] ? kthread_create_on_node+0x170/0x170
Code: 8d fe ff ff 66 66 2e 0f 1f 84 00 00 00 00 00 41 54 55 48 89 f5 53 48 8b 86 f8 00 00 00 48 89 fb 48 8d bf 20 01 00 00 48 8b 40 30 <4c> 8b a0 98 00 00 00 e8 88 ca a4 e0 48 8d bd 28 01 00 00 48 8d
RIP  [<ffffffffa0bc386c>] cachefiles_mark_object_inactive+0x1c/0xa0 [cachefiles]
 RSP <ffff88042666bd88>
CR2: 0000000000000098
---[ end trace b0980ebb0851d8ca ]---

P.S.(2016/11/2)

This bug is finally fixed by https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/fs/cachefiles?id=a818101d7b92e76db2f9a597e4830734767473b9. This patch is included in Linux 4.8.4 as 336f2e1ef8d52fac6420aff8d50191fc81c0c4ec .

2016/07/02 23:54 / RAID5 resync が起動時に始まってしまい,いつまでたっても起動しない

Root file system を RAID5 (software RAID w/Intel Rapid Storage Technology)にしていて,再起動時にうまく clean な状態で再起動できず verify flag が立ってしまうと,initramfs の時点で resync が開始されてしまい,いつまで経ってもまともに起動しないという話.ファイルサーバなのでさくっと起動してもらわないと困る.

なんとかする方法は以下.

これでひとまずは起動するはず.起動した後は

# echo 5000 > /sys/block/md126/md/sync_speed_max
# echo idle > /sys/block/md126/md/sync_action
# ionice -c 3 -p (md126_resync's pid)

とかをしてじっくり resync する.resync の状況は /proc/mdstat で

md126 : active raid5 sda[3] sdb[2] sdc[1] sdd[0]
      8351277056 blocks super external:/md127/0 level 5, 128k chunk, algorithm 0 [4/4] [UUUU]
      [============>........]  resync = 63.3% (1763918288/2783759232) finish=3019.9min speed=5627K/sec

の様に確認できる.以下,試行錯誤の経緯.

Root file system は RAID5 かつ btrfs なのだが,当初は fsck.btrfs の箇所でなかなか終わらない状況だった.fastboot で fsck を skip しても,起動のあらゆるステップで時間がかかってしまい

INFO: task something blocked for more than 120 seconds.

的な warning が連発する.ということで resync を止めざるを得ないということになった.幸い initrd の backup があったので,適当な directory を掘ってそこで,

zcat /somewhere/initrd.img-4.X.X-something-amd64 | cpio -i

して眺めた感じ,boot option break の存在と

[scripts/local-top/mdadm] の最後の箇所
maybe_break post-mdadm

exit 0

というように RAID の認識が終わったところで,break=post-mdadm で break point を設定できることがわかったので,それでなんとか対処することにした.

注(2021/9/9): bullseyd では scripts/local-top/mdadm は存在しない.scripts/local-bottom/mdadmscripts/local-block/mdadm は存在するが,ここに maybe_break は含まれない.

RAID の resync を中断する方法は man mdadm 等で調査.mdadm 自体 initrd に含まれているが,直接/sys/block/md126/md/sync_actionにアクセスする方が簡便.ちなみにfrozenだと中断され,idle だと中断されはするがすぐに再開される.

あとはbtrfsのfsckがskipされて気持ち悪いが,

% sudo btrfs scrub start -r -c3 /

で scrub をして,しばらくの後に

% sudo btrfs scrub status /
scrub status for XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
        scrub started at XXXX and finished after 11487 seconds
        total bytes scrubbed: 2.96TiB with 0 errors

のように 0 errors を確認しておく.

Related articles

2016/06/15 11:10 / aptitude でインストールを指示した package をリストする

新たにクリーンインストールする時とかのために.

aptitude search '?and(~i !~M)'

追記(2017/06/19)

インストールを指示したもので Upgradable なものは以下でリスト.

aptitude search '?and(~U !~M)'

2016/06/13 23:22 / Let's Note CF-AX2 ACアダプタ故障

Let’s Note CF-AX2を未だに使っているのであるが,付属の(専用)ACアダプタを使っているのに「指定以外のACアダプターが使用されています」というメッセージが表示され始めた.

エラー検出のお知らせ 指定以外のACアダプターが使用されています 指定のACアダプターをご使用ください。 指定以外のACアダプターを使用すると、正しく動作しない場合があります。 ※指定のACアダプターを使用時にこのお知らせが表示された場合は、ACアダプターがパソコン本体に正しく奥まで挿し込まれていない可能性があります。一度パソコン本体よりACアダプターを抜いてから奥まで挿し直してください。
エラー検出のお知らせ

指定以外のACアダプターが使用されています

指定のACアダプターをご使用ください。

指定以外のACアダプターを使用すると、正しく動作しない場合があります。

※指定のACアダプターを使用時にこのお知らせが表示された場合は、ACアダプターがパソコン本体に正しく奥まで挿し込まれていない可能性があります。
一度パソコン本体よりACアダプターを抜いてから奥まで挿し直してください。

まあ普通に使えていたので放置していたのであるが,ついに充電できなくなってしまったので仕方なくACアダプタを購入することとした.

調べてみると専用アダプタでなければ上手く使えないような細工がされているらしく,互換アダプタは見つけられず,仕方なく純正を購入(CF-AA62J2CJS).

というか,そもそもACアダプタ側の故障か,本体電源端子部分の故障か,問題の切り分けができていない状態でかなり不安だったが,購入したACアダプタで無事動作.

この状態で故障したと思っていたACアダプタを接続してみると同じようなメッセージが表示されはするものの充電はできた.どちらにせよ壊れているのだろうけど,本体バッテリー残量が極端に不足していると(この壊れたっぽい)ACアダプタは動作しない模様.

ちなみにテスタで測ってみたところ,新しく購入したACアダプタは15V強(定格16V)の出力があるが,この故障したらしいACアダプタはほぼ0Vで,10mVまでのところで電圧が微妙に変動している(専用のものかどうかを識別するための信号が電源側に漏れて来ている?).

Related articles

2016/05/30 14:21 / Apache 2.4.10 Satisfy Any

IPアドレスが特定のものであれば,認証なしでコンテンツを見せて,そうでなければベーシック認証を行うという設定(BASIC認証とIPアドレス制限の併用?)について,以下のように Satisfy Any を用いる設定が各所で紹介されているが,

Satisfy Any

Order Deny,Allow
Deny from all
Allow from XXX.XXX.XXX.XXX
Allow from XXX.XXX.XXX.YYY

AuthType Basic
AuthName "Local Informatin for Hoge"
AuthUserFile "/var/www/hoge/.htpasswd"
require valid-user

これは Apache 2.2 までの書き方で,Apache 2.4 では上記とは異なる認証機構が導入されていて,古い書き方も一応動くが,新しい記述に改めたほうが良い.上記の場合は以下のようになる.

AuthType Basic
AuthName "Local Informatin for Hoge"
AuthUserFile "/var/www/hoge/.htpasswd"

<RequireAny>
Require ip XXX.XXX.XXX.XXX
Require ip XXX.XXX.XXX.YYY
Require valid-user
</RequireAny>

詳細は

などを参照.ちなみに当方の環境(apache2 2.4.10-10+deb8u4)ではSatisfy Anyの設定で一応は動作しているものの,BASIC認証時にPOSTメソッドがタイムアウトを起こすという現象が発生していた.

ちなみに2013/06/03 13:25 / apache 2.2 → 2.4の記事にも微妙に書いてあるが,すっかり失念していた.

追記(2016/06/13)

「BASIC認証時にPOSTメソッドがタイムアウトを起こす」はどうやら解決していなかった.具体的には Debian GNU/Linux jessie の MediaWiki なのだが,ファイルのアップロードはできるが記事の更新ができない(Show preview/changes も).

2016/05/21 17:00 / tex-common 6.05 on Debian GNU/Linux

aptitude upgrade で tex-common が以下で上がってくれないというか configure されない.

% sudo /var/lib/dpkg/info/tex-common.postinst configure
Running mktexlsr. This may take some time... done.
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
Building format(s) --all.
       This may take some time...
fmtutil failed. Output has been stored in
/tmp/fmtutil.R5YhUP3w
Please include this file if you report a bug.
[/tmp/fmtutil.R5YhUP3w]
fmtutil [INFO]: /var/lib/texmf/web2c/pdftex/latex.fmt installed.
fmtutil [ERROR]: running `pdftex -ini   -jobname=mptopdf -progname=context -translate-file=cp227.tcx mptopdf.tex </dev/null' return status 1
fmtutil [ERROR]: return error due to options --strict
fmtutil [INFO]: Disabled formats: 3
fmtutil [INFO]: Successfully rebuilt formats: 18
fmtutil [INFO]: Failed to build: 1 (pdftex/mptopdf)
fmtutil [INFO]: Total formats: 22
fmtutil [INFO]: exiting with status 1

fmtutil の箇所で止まっているらしく,とりあえずの解決策は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=824889 にあるように /var/lib/dpkg/info/tex-common.postinst で fmtutil の option から --string を消すというもの.

追記(2016/05/21)

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=824853 にあるように,mptopdf の箇所でコケているのはsyst-tex.mkiiがtexlive-latex-baseからcontext (ConTeXt) packageに移動した(?)のが原因で,そもそもmptopdf自体contextに移すべき,とう話ならしい.

ということで context package を install しても解決する.

追記(2016/05/24)

texlive-latex-base (2016.20160523-1)で修正された模様で,syst-tex.mkii が texlive-latex-base に含まれるように修正された模様.

Related articles

2016/05/21 16:30 / octave 4.0.2-1+b2 w/libgl2ps0 1.3.8-2 on Debian GNU/Linux

aptitude upgrade で octave が以下で上がってくれない.

/usr/lib/x86_64-linux-gnu/octave/4.0.2/exec/x86_64-pc-linux-gnu/octave-gui: error while loading shared libraries: libgl2ps.so.0: cannot open shared object file: No such file or directory

付近のバグレポートにあるとおりなぜか libgl2ps.so.0 が libgl2ps.so.1 になってしまった(libgl2ps0 1.3.8-2)のが原因.libgl2ps0 1.3.8-3 で直るらしいがまだ download できないようなので,とりあえずlibgl2ps0_1.3.8-1.3_amd64.debをdpkg -iして解決

2016/05/03 05:48 / WordPress Twenty Sixteen wp_nav_menu

Twenty Twelve とか Twenty Thirteen ぐらいだと,Menu を手動で作成していない状態だと,自動で Menu を生成してくれたような気がするのだが,Twenty Sixteen だと上手くいかない.結局うまく行かないという話なのだが,以下調べた内容.

Twenty Twelve だと wp_nav_menu() location が1箇所,Twenty Sixteenは2箇所.

[wp-content/themes/twentytwelve/functions.php]
register_nav_menu( 'primary', __( 'Primary Menu', 'twentytwelve' ) );

[wp-content/themes/twentysixteen/functions.php]
register_nav_menus( array(
    'primary' => __( 'Primary Menu', 'twentysixteen' ),
    'social'  => __( 'Social Links Menu', 'twentysixteen' ),
) );

適当に以下をすれば(子テーマの function.php に書いておく) Twenty Sixteen の wp_nav_menu() location を1つ(primary)のみにできて,wp-admin/nav-menus.php を開いた時でメニューが存在しない場合に$one_theme_location_no_menus がアサートされて,自動でメニューのテンプレートが作成される(保存はされない).でもこれは比較的どうでもいい.

function remove_social() {
    unregister_nav_menu( 'social' );
}
add_action( 'after_setup_theme', 'remove_social' , 20);

header.phpから呼ばれるwp_nav_menu() (nav-menu-template.php) でメニューを表示するのだが,メニューを作っていない状態だとfallback_cbのwp_page_menu() (post-template.php)が呼び出される.これがメニューを自動で作る部分で,以下のファイルを開いてみたりすると確認できる(wp_nav_menu を wp_page_menu に置き換えたりしてみる).

[test.php]
<?php
require_once( dirname(__FILE__) . '/wp-load.php' );
wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) );

メニューを作っていない状態だとやはり Twenty Sixteen ではメニューが表示されない.これは header.php で if ( has_nav_menu( 'primary' ) ) という条件付で wp_nav_menu() が呼び出されるから.ということで,header.php を修正して無理やり wp_nav_menu() を呼び出してみると,メニューは自動で生成されるが,手動で作成したメニューと体裁が異なる(右側に縦積みになってしまう).

手動で作ったメニュー(通常のメニュー)の場合<div class="menu-menu-1-container"> として生成されるが,wp_page_menu() が生成するのは<div class="nav-menu"> で,これで見た目が違ってくるらしい.あまりthemeをいじりたくないので,仕方なく手動でメニューを生成することにして,項目が多くなってきたらなにがしかpluginを導入するしかなさげ.

2016/05/02 11:01 / WordPress Link Manager

いつも Link Manager を Enable するやりかたを忘れるので備忘メモ.

WordPress (現在 Version 4.5.1) だが,以前は Link Manager なるものが存在してこれでリンク一覧を管理できたのだが,Version 3.5 以降はこの機能が Off になっている.

で,これを Enable する(だけの)Plug-in が Link Manager.中身は以下のみ.

add_filter( 'pre_option_link_manager_enabled', '__return_true' );

ちなみに link list を sort するには「評価 (rating)」を使うと比較的自由に並び替えができる(なにで sort するかは Widgets の設定の箇所で行う).ただし rating の値は 0 から 10 まで.

2016/04/01 11:44 / lftp 4.7.0

lftpだが,4.6.4から4.7.0でいろいろ変わったらしくmirrorに躓く.

まず以下のようにEPSVコマンド(RFC 2428)を発行してしまい,私が使っているサーバでは以下のような感じでコケる.

---> EPSV
<--- 501 EPSV: Not owner
---- Switching passive mode off
---> LIST -a
---> ABOR
---- Closing aborted data socket
---- Closing control socket

ftp:prefer-epsv trueがdefaultになったらしく,EPSVではなくPASVを使うようにするには,以下の設定が必要.

set ftp:prefer-epsv false

あと,どうもmirrorコマンドを実行した際に一部ファイルでタイムスタンプが「適切に」取れない気配があって,最新版になっているのに無駄にファイルを転送してしまう.サーバとの相性もあるのかもしれないが.これはMLSDコマンドをdefaultで使うようになったかららしい.これを元の挙動,つまり4.6.4のdefaultに戻すには以下の設定をする.

set ftp:use-mlsd false

これでMLSDのかわりに,LIST -aして各ファイル/ディレクトリに対してMDTMでタイムスタンプを取得するようになる.もちろんmirror速度は落ちる.MLSDもMDTMもRFC 3659のコマンドなのだが,なにやら実装がいろいろあるらしい.

以上,該当するchangelogは以下のような感じになっている.

[/usr/share/doc/lftp/changelog.gz]
Version 4.7.0 - 2016-03-28
(snip)
* ftp: prefer EPSV by default.
* ftp: enable MLSD by default (when supported).
(snip)

Related articles

2016/04/01 09:21 / Android Studio (Java) on Debian GNU/Linux sid

Android Studioの Install メモ.基本的には android-studio-ide-141.2456560-linux.zip を拾ってきて,bin/studio.sh を起動するだけなのだが,JDKがopenjdk-8-jdkだと Oracle の JDK にした方が Performance が出る云々言われる.ということで,Oracle JDK の install からスタート.

https://wiki.debian.org/JavaPackageを参照しつつ Oracle JDK の .deb file を作成,dpkg -i する.jdk-8u77-linux-x64.tar.gz を事前にダウンロードしておいて,以下をする.

% sudo aptitude install java-package
% make-jpkg jdk-8u77-linux-x64.tar.gz
% sudo dpkg -i oracle-java8-jdk_8u77_amd64.deb

このままだと Android Studio が Oracle JDK を見付けてくれないので,.zshrc 等に以下を書いておく.

export JAVA_HOME=/usr/lib/jvm/oracle-java8-jdk-amd64

Related articles

2016/03/31 10:24 / snmpd (5.7.3+dfsg-1.1), adduser: Please enter a username matching the regular expression configured (Debian-snmp user)

snmpdのupgradeで以下のように失敗する.

Setting up snmpd (5.7.3+dfsg-1.1) ...
adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.
dpkg: error processing package snmpd (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 snmpd
E: Sub-process /usr/bin/dpkg returned an error code (1)
Setting up snmpd (5.7.3+dfsg-1.1) ...
adduser: Please enter a username matching the regular expression configured
via the NAME_REGEX configuration variable.  Use the `--force-badname'
option to relax this check or reconfigure NAME_REGEX.
dpkg: error processing package snmpd (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 snmpd

sudo /var/lib/dpkg/info/snmpd.postinst configure で追ってみると,実際のadduser commandは以下のようなもので,これ自体には一見問題なさげなのだが,

adduser --quiet --system --group --home /var/lib/snmp --disabled-password --disabled-login --shell /bin/false Debian-snmp

/etc/adduser.conf にある NAME_REGEX という変数で username に対して制限をかけているらしく Default では NAME_REGEX="^[a-z][-a-z0-9_]*\$" となっている模様.ということで Debian-snmp はこれにマッチしないのでコケている様子.同様に Debian- が prefix になっている username としては,手元の計算機では既に Debian-gdm というのがあって,/var/lib/dpkg/info/gdm3.postinst ではadduserを--force-badname option 付きで呼んでいる.ということで/var/lib/dpkg/info/snmpd.postinstのadduserの箇所に--force-badname optionを追加して解決.

ちなみに,これより前のバージョンでは snmp の pseudo user は snmp.

なおこの問題は既にhttps://bugs.debian.org/cgi-bin/bugreport.cgi?bug=819531のように解決されているらしく,5.7.3+dfsg-1.2 で直る見込み(使っているミラーサイトにはまだ来ていない).

2016/03/19 11:26 / JPEG Exif 変更操作

写真はすべてGoogle Photosに集約しているのであるが,デジカメで撮った写真をDrag and DropでGoogle Photosに突っ込んだら,思っていた日付の箇所に写真が現れず悩む.アップロード直後その写真をAlbumに追加して,様子を見てみたら,(デジカメの)日付が1年ずれていたことが判明.ということでGoogle Photos上の該当ファイルを削除して,JPEGのExifを操作して再アップロード.

以前は知り合いからもらったPerl ScriptでExifをいじったりしていたのだが,発掘が面倒だったので jhead というコマンドを使うことにした(Debian package も存在する).

いろいろ試行錯誤をしたが,1年のずれを修正するのは至って簡単で,以下のとおり修正後の年を指定すれば良いだけ(他の情報はそのまま保持される).man によると「Date is specified as: yyyy:mm:dd, yyyy:mm, or yyyy」とのことなので,日付を修正するだけならこれが一番シンプル.

[Single file]
% jhead -ds 2016 DSC01448.JPG
[Bulk mode]
% jhead -ds 2016 DSC*.JPG

以下は -ts という Exif に保持されている『時刻』を変更するオプションを使おうとして試行錯誤した際の情報.以下のようにダンプした Exif 情報を sed で修正して -ts で突っ込む,というようなことも可能,というぐらい.

% jhead DSC01448.JPG
File name    : DSC01448.JPG
File size    : 3427630 bytes
File date    : 2015:03:18 13:07:24
Camera make  : SONY
Camera model : DSLR-A200
Date/Time    : 2015:03:18 13:07:24
Resolution   : 3872 x 2592
Flash used   : Yes (auto)
Focal length : 18.0mm  (35mm equivalent: 27mm)
Exposure time: 0.013 s  (1/80)
Aperture     : f/5.6
ISO equiv.   : 250
Whitebalance : Auto
Metering Mode: pattern
Exposure     : program (auto)
JPEG Quality : 95
% jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/'
2015:03:18-13:07:24
% jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'
2016:03:18-13:07:24
% jhead -ts`jhead DSC01448.JPG | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'` DSC01448.JPG
Modified: DSC01448.JPG
% jhead DSC01448.JPG | grep ^Date
Date/Time    : 2016:03:18 13:07:24
% for i in *.JPG ; do
  j=`jhead $i | sed '/^Date/!d;s/.*: //;s/ /-/;s/^2015/2016/'`
  jhead -ts$j $i
done

2016/03/13 01:15 / Samba+LDAP 設定メモ

いつも忘れるのでメモ.LDAP は動いていて,Samba の認証を LDAP で行う,というだけの話.ただし Samba は LDAP サーバとは別のホストで動かしていて,Windows 認証のための設定(smbldap-tools)は LDAP と同じホストで適切に動いているという前提.手順ザックリ以下.

Related articles

2016/03/03 00:06 / お名前.com 共用サーバーSD で SSH 接続

いつのまにかお名前.comレンタルサーバー共用サーバーSDでSSH接続が可能になっていた.https://www.onamae-server.com/news/150616.htmlによると2015/06/16から提供していたらしい.コントロールパネルで有効化できるのだが,公開鍵認証(authorized_keys)が使えずちょっと辛い.気づいた点は以下のとおり.

公開鍵認証が使えない.そもそも mkdir ~/.ssh/ できない.これ深刻.

ログインに失敗すると接続元IP Addressに対して一定時間接続制限がかけられる模様(公開鍵認証が使えないため ssh-agent も使えず,かなりつらい)

ssh -x しないと接続時に以下のように timeout 待ちが発生する

/usr/openwin/bin/xauth:  timeout in locking authority file /export/(snip)/.Xauthority

追記(2016/05/24)

password を毎回打たなくて良いように,以下のように sshpass を利用すれば,かなり幸せ.Makefile や mirror 用 script に password を含めることになるが.

sshpass -pPASSWORD ssh -x YYYY@gmoserver.jp@XXXX.gmoserver.jp

ちなみに上記,XXXX.gmoserver.jp というホスト名で,YYYY@gmoserver.jp というユーザー名を想定.

Related articles

2016/03/02 23:23 / phpMyAdmin から Adminer に乗り換え

phpMyAdmin 4.5.5 を頑張って ftp しか繋がらない共用サーバにインストールしたのだが,インストールした翌日に 4.5.5.1 がリリースされた.癪だったので Adminer に乗り換えることにした.

というか,実際のところは ftp しか繋がらないサーバに,大量のファイルからなる phpMyAdmin を転送するのが面倒で (lftp で mirror するので,バッチ処理ではあるが),1つのファイルだけの Adminer に惹かれて乗り換えた.

Mysql のみ対応,英語インターフェースのみ,でよければ https://www.adminer.org/latest-mysql-en.php を Download して適当な directory に index.php として配置するだけでいい(ただし念の為 Basic 認証をかけておいた).

Related articles

2016/02/25 11:14 / php 7.0.3-9 (cli), Cannot load Zend OPcache - it was already loaded

Debian GNU/Linux sid でタイミング的には私の環境では php7.0-cli 7.0.3-3 -> 7.0.3-5 の upgrade 付近なのだが,それ以降

% php -v
Cannot load Zend OPcache - it was already loaded
PHP 7.0.3-9 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

みたいな感じで Cannot load Zend OPcache - it was already loaded という Warning が出るようになった.かつ cron から起動される /usr/lib/php/sessionclean でも同じ Warning を吐くので,いちいち root 宛にメールが届く.

原因は何らかの拍子に以下のように /etc/php/7.0/cli/conf.d/に 2つの opcache.ini が存在するようになってしまったため.

% ls -l /etc/php/7.0/cli/conf.d/*opcache*
lrwxrwxrwx 1 root root 35 Feb 18 13:13 /etc/php/7.0/cli/conf.d/10-opcache.ini -> /etc/php/mods-available/opcache.ini
lrwxrwxrwx 1 root root 35 Feb  9 10:12 /etc/php/7.0/cli/conf.d/20-opcache.ini -> /etc/php/mods-available/opcache.ini

/var/lib/dpkg/info/php7.0-cli.postinst は以下のように 20-opcache.ini を削除するように細工されているようだが,うまく削除できなかった模様.20-opcache.ini を削除すれば解決する.

[/var/lib/dpkg/info/php7.0-cli.postinst]
    if [ -n "$2" ] && dpkg --compare-versions "$2" lt "7.0.3-2~"; then
        rm -f /etc/php/7.0/cli/conf.d/20-opcache.ini;
    fi

もしくは以下で /etc/php/7.0/cli/conf.d/ を作りなおす.

# rm -rf /etc/php/7.0/cli/conf.d/
# mkdir /etc/php/7.0/cli/conf.d/
# /var/lib/dpkg/info/php7.0-cli.postinst configure

2016/02/20 22:59 / overlayfs over btrfs (rm -r; Invalid argument)

As follows, I've tested directory removal in overlayfs over several filesystems, such as ext4, btrfs, and xfs. It seems that it is better not to use btrfs as an upper (and work; *1) directory of overlayfs.

*1: overlayfs: workdir and upperdir must reside under the same mount

% cat <<EOF > /tmp/test.sh
cd /tmp/test/
rm -rf *
mkdir -p lower/dir
mkdir -p upper/
mkdir -p work/
mkdir -p overlay/
touch lower/dir/a
touch lower/dir/b
touch lower/dir/c
EOF

% cat <<EOF > /tmp/test2.sh
rm -f /tmp/test.img
fallocate -l 100M /tmp/test.img
if ! \$1 /tmp/test.img > /dev/null 2>&1 ; then
  echo failed
  exit
fi
mkdir -p /tmp/test
sudo mount /tmp/test.img /tmp/test
sudo chmod 777 /tmp/test
sh /tmp/test.sh
sudo mount overlayfs -t overlay -o lowerdir=/tmp/test/lower,upperdir=/tmp/test/upper,workdir=/tmp/test/work  /tmp/test/overlay
rm -r /tmp/test/overlay/dir
ls -Rla /tmp/test/upper
sudo umount /tmp/test/overlay
sudo umount /tmp/test
EOF
% sh /tmp/test2.sh /sbin/mkfs.ext4
/tmp/test/upper:
total 2
drwxr-xr-x 2 myn     users 1024 Feb 20 23:25 .
drwxrwxrwx 6 root    root  1024 Feb 20 23:25 ..
c--------- 1 myn     users 0, 0 Feb 20 23:25 dir
% sh /tmp/test2.sh /sbin/mkfs.xfs
/tmp/test/upper:
total 0
drwxr-xr-x 2 myn     users   17 Feb 20 23:25 .
drwxrwxrwx 6 root    root    59 Feb 20 23:25 ..
c--------- 1 myn     users 0, 0 Feb 20 23:25 dir
% sh /tmp/test2.sh /bin/mkfs.btrfs
rm: cannot remove '/tmp/test/overlay/dir': Invalid argument
/tmp/test/upper:
total 16
drwxr-xr-x 1 myn     users  6 Feb 20 23:25 .
drwxrwxrwx 1 root    root  42 Feb 20 23:25 ..
drwxr-xr-x 1 myn     users  6 Feb 20 23:25 dir

/tmp/test/upper/dir:
total 0
drwxr-xr-x 1 myn     users    6 Feb 20 23:25 .
drwxr-xr-x 1 myn     users    6 Feb 20 23:25 ..
c--------- 1 myn     users 0, 0 Feb 20 23:25 a
c--------- 1 myn     users 0, 0 Feb 20 23:25 b
c--------- 1 myn     users 0, 0 Feb 20 23:25 c

In the cases of ext4 and xfs, the whiteout directory can be successfully generated. But btrfs fails.

I traced the overlayfs's behavior using debugfs (Documentation/dynamic-debug-howto.txt) as follows.

% sudo sh -c 'echo -n "module overlay +p" > /sys/kernel/debug/dynamic_debug/control'
% sh /tmp/test2.sh /sbin/mkfs.ext4 > /dev/null
% dmesg
[208788.770416] mkdir(work/work, 040000) = 0
[208788.773640] mkdir(work/#ffff8800bb3c5618, 040000) = 0
[208788.773648] rename2(work/#ffff8800bb3c5618, upper/dir, 0x0)
[208788.773664] whiteout(work/#ffff88007579a9d8) = 0
[208788.773666] rename2(work/#ffff88007579a9d8, dir/b, 0x0)
[208788.773693] whiteout(work/#ffff8800bb3b3798) = 0
[208788.773695] rename2(work/#ffff8800bb3b3798, dir/a, 0x0)
[208788.773712] whiteout(work/#ffff880094ef2cd8) = 0
[208788.773713] rename2(work/#ffff880094ef2cd8, dir/c, 0x0)
[208788.773753] mkdir(work/#ffff8800bb3c5618, 040755) = 0
[208788.773765] setxattr(work/#ffff8800bb3c5618, "trusted.overlay.opaque", "y", 0x0) = 0
[208788.773770] rename2(work/#ffff8800bb3c5618, upper/dir, 0x2)
[208788.773780] unlink(#ffff8800bb3c5618/b) = 0
[208788.773789] unlink(#ffff8800bb3c5618/a) = 0
[208788.773794] unlink(#ffff8800bb3c5618/c) = 0
[208788.773821] rmdir(work/#ffff8800bb3c5618) = 0
[208788.773828] whiteout(work/#ffff8800bb3c5618) = 0
[208788.773829] rename2(work/#ffff8800bb3c5618, upper/dir, 0x2)
[208788.773837] rmdir(work/#ffff8800bb3c5618) = 0
% sh /tmp/test2.sh /bin/mkfs.btrfs > /dev/null 2>&1
% dmesg
[208822.019517] mkdir(work/work, 040000) = 0
[208822.022430] mkdir(work/#ffff88009d74b858, 040000) = 0
[208822.022439] rename2(work/#ffff88009d74b858, upper/dir, 0x0)
[208822.022520] whiteout(work/#ffff88009d68e558) = 0
[208822.022523] rename2(work/#ffff88009d68e558, dir/a, 0x0)
[208822.022564] whiteout(work/#ffff8800aea6e9d8) = 0
[208822.022565] rename2(work/#ffff8800aea6e9d8, dir/b, 0x0)
[208822.022592] whiteout(work/#ffff8800877e83d8) = 0
[208822.022593] rename2(work/#ffff8800877e83d8, dir/c, 0x0)
[208822.022634] mkdir(work/#ffff88009d74b858, 040755) = 0
[208822.022640] setxattr(work/#ffff88009d74b858, "trusted.overlay.opaque", "y", 0x0) = 0
[208822.022643] rename2(work/#ffff88009d74b858, upper/dir, 0x2)
[208822.022657] ...rename2(work/#ffff88009d74b858, upper/dir, ...) = -22
[208822.022669] rmdir(work/#ffff88009d74b858) = 0

rename2's 0x2 means RENAME_EXCHANGE (1 << 1) (see include/uapi/linux/fs.h) and its return value -22 means EINVAL (see include/uapi/asm-generic/errno-base.h). According to Documentation/filesystems/vfs.txt, it seems that btrfs does not support RENAME_EXCHANGE.

  rename2: this has an additional flags argument compared to rename.
        If no flags are supported by the filesystem then this method
        need not be implemented.  If some flags are supported then the
        filesystem must return -EINVAL for any unsupported or unknown
        flags.  Currently the following flags are implemented:
        (1) RENAME_NOREPLACE: this flag indicates that if the target
        of the rename exists the rename should fail with -EEXIST
        instead of replacing the target.  The VFS already checks for
        existence, so for local filesystems the RENAME_NOREPLACE
        implementation is equivalent to plain rename.
        (2) RENAME_EXCHANGE: exchange source and target.  Both must
        exist; this is checked by the VFS.  Unlike plain rename,
        source and target may be of different type.

Note that I tested the above on linux-image-4.3.0-1-amd64 4.3.5-1 Debian package and my Linux 4.4.2 build.

According to Btrfs Wiki, this issue is not claimed yet.

Implement new RENAME_* modes

Not claimed — no patches yet — Not in kernel yet

There are new modes of rename syscall.

  * RENAME_EXCHANGE
  * RENAME_WHITEOUT

P.S.(2016/2/24)

This issue seems to be already reported to LKML and CentOS/RedHat BTS as follows.

P.S.(2016/4/1)

It seems that a patch for RENAME_EXCHANGE implementation is available as follows. It might be merged into Linux 4.7 according to http://www.spinics.net/lists/linux-btrfs/msg53206.html.

2016/02/05 13:55 / WordPress RSS Aggregator がうまく Feed を受け取ってくれない (Not well-formed (invalid token) at line 1, column 1)

Feedを受け取る側で以下のようなエラーが出てFeedできないという話(受け取る側は業者で,こちらはFeedする側).

Failed to fetch the RSS feed. Error: This XML document is invalid,
likely due to invalid characters. XML error: Not well-formed
(invalid token) at line 1, column 1

Feed XML は Validator をとおっていて,かつ手元の simplepie で XML をパースしてみても問題がない.

そもそも line 1, column 1 でコケているので,受け取る側の問題なのだが,対応してくれないので,こちらで対応することにした.

原因はサーバ側が deflate (gzip) されたデータを正しくハンドリングできないこと.つまり,

[S->C]
GET /?feed=rss2 HTTP/1.1
Host: client.example.org
User-Agent: SimplePie/1.3.1 (Feed Parser; http://simplepie.org; Allow like Gecko) Build/2015XXXXXXXXXX
Accept-Encoding: x-gzip,gzip,deflate
Accept: application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1
Connection: Close

のリクエストに対して

[C->S]
HTTP/1.1 200 OK
Date: Fri, 05 Feb 2016 XX:XX:XX GMT
Server: Apache
Set-Cookie: qtrans_front_language=ja; expires=Sat, 04-Feb-2017 XX:XX:XX GMT; Max-Age=31536000; path=/
Last-Modified: Mon, 01 Feb 2016 XX:XX:XX GMT
ETag: (snip)
Link: <http://client.example.org/?rest_route=/>; rel="https://api.w.org/"
Content-Length: 8000
Connection: close
Content-Type: application/rss+xml; charset=UTF-8

XMLデータ

のように Accept-Encoding: x-gzip,gzip,deflate を無視して RAW データ(といってもテキスト)を返す場合は OK だが,

[C->S]
HTTP/1.1 200 OK
Date: Fri, 05 Feb 2016 XX:XX:XX GMT
Server: Apache
Set-Cookie: qtrans_front_language=ja; expires=Sat, 04-Feb-2017 XX:XX:XX GMT; Max-Age=31536000; path=/
Last-Modified: Mon, 01 Feb 2016 XX:XX:XX GMT
ETag: (snip)
Link: <http://client.example.org/?rest_route=/>; rel="https://api.w.org/"
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 2000
Connection: close
Content-Type: application/rss+xml; charset=UTF-8

圧縮されたXMLデータ

のように律儀に(というか apache のデフォルト) Content-Encoding: gzip で返すとコケる.クライアントというか Feed する側にて,この特定のサーバに対して,以下のように圧縮しないように設定すれば解決./?feed=rss2 が Feed URL なので,以下のように RewriteCond/RewriteRule で対処(RewriteEngine Onとかはこの上付近にあることを想定).

RewriteCond %{QUERY_STRING} feed=rss2
RewriteCond %{REMOTE_HOST} XXX.XXX.XXX.XXX
RewriteRule ^ - [E=no-gzip]

先方のサーバの設定が不明だが,Google で検索してもこの問題(の上記のような解決策)は出てこないようなので,かなりのコーナーケースな模様.

追記(2016/04/19)

WordPress の SimplePie の(サーバ側)該当箇所は wp-includes/SimplePie/File.php の以下の付近,だろうと思われる.

if (extension_loaded('zlib'))
{
         $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
}
// snip
case 'gzip':
case 'x-gzip':
        $decoder = new SimplePie_gzdecode($this->body);
        if (!$decoder->parse())
        {
                $this->error = 'Unable to decode HTTP "gzip" stream';
                $this->success = false;
        }
        else
        {
                $this->body = $decoder->data;
        }
        break;
// snip

$decoder->parse()前後でコケているのだと思われるが (上流のエラーハンドリングまでは今回追わず),上のような問題が発生するような状況では if (extension_loaded('zlib')) の if 文まるごと削除してしまってもよいのかもしれない.

2016/01/31 01:31 / NotePC CPU Fan 交換 (Let's Note CF-AX2)

先日のCPU Fanが壊れた件,だましだまし使っていたが,なかなかつらいものがあるので,CPU Fanを交換した.Note PC 自体は Let’s Note CF-AX2 で,その CPU Fan は台湾AVC社MODEL BAAA0505R5UPC01.適当に入手して交換.以下備忘.

入手した CF-AX2 用 CPU Fan (AVC BAAA0505R5UPC01)

images/0061.jpg images/0062.jpg images/0063.jpg

CF-AX2 を開ける

images/0064.jpg
まず通風孔(通風口)のカバーを外す.

images/0065.jpg images/0068.jpg
バッテリー(取り外し可能な方)を外す.ここにSIMのスロットがある(使ってない).

CF-AX2 をさらに開ける

images/0069.jpg images/0114.jpg
PC底部のネジを外して,蓋を取る(ヒンジ近くの2箇所だけ異なるサイズのネジ).取り外したバッテリー部分にシールがあって,この時点で VOID になってしまう(分解したことの印が付く).

images/0070.jpg images/0081.jpg
CPU Fan 付近.ネジは裏側からのようなので,メインボードを剥がす必要がある.メインボード左手はネジ2つ.

images/0071.jpg images/0072.jpg
内蔵バッテリー.まず取り出したい.

images/0073.jpg images/0084.jpg images/0085.jpg
機内モードスイッチとバッテリーを引っ掛けるもの.取れるので注意.

images/0086.jpg
電源スイッチは取れてなくなったりしなさげ.

images/0074.jpg images/0075.jpg images/0076.jpg
謎の黒いテープ.仕方がないので剥がす.

images/0077.jpg images/0078.jpg
この辺もややこしい.

images/0079.jpg
下の方,バッテリーコネクタとそこそこ幅のあるリボンケーブル.

images/0080.jpg
mSSD.簡単に交換出来そう.

images/0082.jpg images/0083.jpg
冷却部分.

CF-AX2 メインボードを取り出す

images/0087.jpg
メインボード左側2箇所のネジ外した.

images/0088.jpg images/0089.jpg images/0113.jpg
メインボード,バッテリーコネクタの部分のネジ外した.ここだけネジが長い.

images/0090.jpg
その少し右にもメインボードを固定しているネジがある.

images/0091.jpg images/0092.jpg
内蔵バッテリー付近.

images/0093.jpg images/0094.jpg images/0098.jpg
CPU Fan の左側.無線モジュールがある.

images/0095.jpg images/0097.jpg
右手側.こちらにも無線モジュールがある.

images/0096.jpg
その部分をよく見ると,画像ヒンジの左付近にメインボードを固定しているネジがある.ケーブルに隠れていて見えにくい.

CF-AX2 メインボードから CPU Fan を取り出す

images/0099.jpg
メインボードをとりはずしたところ.

images/0102.jpg
その裏側.

images/0103.jpg
images/0104.jpg
メインボードが収まっていた部分.太いリボンケーブルの右付近に少し粘着質の部分があってメインボードをとりはずす時かなりビクビクしながら取り外す...

images/0106.jpg
CPU Fan.メインボードとの接続ネジ(裏側)をとったところ.FANのうえのところにあるシールは剥がす必要がない(一度剥がしてしまった).

images/0107.jpg
ひっくり返してFANをとったところ.FANは2つのネジとちょっとした突起でFAN枠に固定されている.この枠だが(とうか熱を伝える導体も...),簡単に曲げたりできるので,突起の部分は簡単に取れる.

元に戻す

逆の手順で新しいCPU Fanを装着して,元に戻すだけ.なお,小さめのドライバー(写真に写り込んでいるもの)と指だけで基本なんとかなった.あとエアダスターで適宜ほこりを飛ばす.

Related articles

2016/01/18 10:22 / google-chrome の表示言語設定

ブラウザの言語に応じてページが切り替わる(英語・日本語)場合があって,普段ブラウザを英語で使っているつもりなのだが,たとえば Google Forms 等は別の言語設定を見て言語を切り替えているらしい.

というのは,設定(Settings)→詳細設定を表示(Show advanced settings…)→言語(Languages)の箇所は英語を一番上に設定しているのだが(かつ Google のアカウントの設定も英語),なぜか日本語で表示される.表示言語が「日本語」になっているのが問題らしい.Windows の場合は同じ設定の箇所に「Google Chrome をこの言語で表示(Display Google Chrome in this language)」という設定があるのだが(https://support.google.com/chrome/answer/173424),Linux の場合は存在しない.

いろいろ調べた結果,LANG=en_US.UTF-8 もしくは LANGUAGE=en で google-chrome を起動しないとダメならしい.

Related articles

2015/12/27 00:15 / NotePC CPU Fan 故障

数日前にCPU Fanが異音を発していたような気がしたが,それが収まって,どうやら本格的にFanが壊れたらしい.微妙に回転はしているものの,冷却性能は殆どなさげ.ちなみに Let’s Note.

OS は Win10Pro (Win8Pro からアップグレード)なのだが,「電源オプション」で高パフォーマンス(最小のプロセッサの状態: 100%; つまり周波数を最大値で固定)にしても,頑張らせると 800MHz ぐらいまで落ちてしまい,仕事にならない(あれこれ4時間ぐらい格闘したがどうにもならないと悟った).

ということで,Core i7 の CPU が手元にある状態で,軽い作業は VMWare 上の端末+Emacs,重い作業は ssh で入った先,Chrome (←こいつが重い) は RDP で接続した先(もしくは Android 携帯)で,という謎の環境に...

なんというか,やはり持ち歩くということもあっていつかは壊れるということを想定すると,安めのものにするか(頻繁に買い換える),高いやつを選ぶ場合でもできるだけ駆動部が少ないものにしたほうが良いような気がしてきた.そもそも VMWare (Linux) 上の Emacs と LaTeX,Host (Windows) 上の MS Office と Chrome,を使うぐらいなので,8G メモリ搭載を最低条件にして安いものを選択しても良いようなきがしつつある.

Related articles

2015/12/25 23:34 / 香港メモ

Related articles

2015/12/14 23:06 / ruby-gsl w/GSL-2.1 問題

Debian GNU/Linux unstable (sid) 環境では GSL が 2.1 になっており,軒並みに GSL に依存する package (inkscape や bogofilter-bdb)がこれに移行している.

がしかし,ruby-gsl が GSL 1.16 に依存したままでなかなか移行できない.かつ上流も動く気配なし.https://github.com/SciRuby/rb-gsl/issues/25.testing も GSL 2.1 に移行しているようなので,これはまずいような.

追記(2016/11/18)

Mar 2016 付近で GSL 2.1 対応になっている模様

2015/12/05 10:34 / WARNING: EDNS query returned status FORMERR - retry with '+noedns'

VMWare で運用している Debian/GNU Linux sid で dig が正常な応答を返さなくなった.

% dig

; <<>> DiG 9.9.5-12+b1-Debian <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 46970
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; WARNING: EDNS query returned status FORMERR - retry with '+noedns'

;; QUESTION SECTION:
;.                              IN      NS

;; Query time: 1 msec
;; SERVER: 192.168.40.2#53(192.168.40.2)
;; WHEN: Sat Dec 05 10:34:16 JST 2015
;; MSG SIZE  rcvd: 17

どうやら dig +noedns で query しないとだめならしい.もしくは ~/.digrc+noedns を書いておけば良いらしい.

EDNS RFC6891 Extension Mechanisms for DNS (EDNS(0)) なわけで,どうやら VMWare (の NAT モードのネットワーク)が独自に持っている DNS サーバ(基本的には上流に転送するのみ)は EDNS0 をサポートしていないのか?...と思ったが,上流の DNS (ホテルの DNS サーバ)に問い合わせても同じだったので,上流のブロードバンドルータかなにかがEDNS0をサポートしていないということらしい.

参考:

2015/12/04 21:00 / Skipping ssh-dss key /home/myn/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes

sid で ~/.ssh/id_dsa を用いた passphrase での login ができなくなった.ssh -v で調べてみると

debug1: Skipping ssh-dss key /home/myn/.ssh/id_dsa for not in PubkeyAcceptedKeyTypes

とのこと.とのことで,~/.ssh/config に

Host *
    PubkeyAcceptedKeyTypes +ssh-dss

とかを書いておけば id_dsa による共通鍵認証が利用できるようになる./usr/share/doc/openssh-client/changelog.Debian.gz によれば

openssh (1:7.1p1-1) unstable; urgency=medium

  * New upstream release (http://www.openssh.com/txt/release-7.0, closes:
    #785190):
    - Support for the legacy SSH version 1 protocol is disabled by default
      at compile time.
    - Support for the 1024-bit diffie-hellman-group1-sha1 key exchange is
      disabled by default at run-time.  It may be re-enabled using the
      instructions at http://www.openssh.com/legacy.html
    - Support for ssh-dss, ssh-dss-cert-* host and user keys is disabled by
      default at run-time.  These may be re-enabled using the instructions
      at http://www.openssh.com/legacy.html
(snip)
<pre>

<p><a href="http://www.openssh.com/legacy.html">http://www.openssh.com/legacy.html</a>によると

<pre>
OpenSSH 7.0 and greater similarly disables the ssh-dss (DSA) public key algorithm. It too is weak and we recommend against its use. It can be re-enabled using the HostkeyAlgorithms configuration option:

とのこと.どうやら鍵ペアを作りなおす時期になったらしい.確かに10年以上同じ鍵を使っている.

2015/12/01 12:45 / MediaWiki で SVG

MediaWiki で SVG (scalable vector graphics) を利用するには https://www.mediawiki.org/wiki/Manual:Image_administration#SVG を参照しつつ設定すれば良いわけだが,Preview 作成に ImageMagick (convert) を利用するらしくその部分で少しはまる.

具体的には inkscape が install されていると convert コマンドは svg から png の生成に inkscape を利用するのだが,svg のファイル名に ! (exclamation mark)が含まれているとうまく変換できない.strace で追った感じだと,以下のように !_ だと解釈して inkscape を起動するのだが,そのファイルが見つからなくてタイムアウトまで何度も inkscape を起動する.

% strace -f convert 't!s.svg' t.png
[pid 20817] execve("/bin/sh", ["sh", "-c", "\"inkscape\" \"t_s.svg\" --export-ep"...], [/* 48 vars */]) = 0

これの何が問題かというと,svg を MediaWiki に upload した後にそのファイルの差替を行うと,古いファイルが images/thumb/archive/f/fa/201512010XXXXX!hoge.svg のようなファイル名で保存され,ファイル名に!が含まれてしまいうまく変換できない.

解決策は$wgSVGConverterにinkscapeを直接指定してしまえば良いらしい.DefaultだとImageMagick (convert).

[/etc/mediawiki/LocalSettings.php]
$wgFileExtensions[] = 'svg';
$wgAllowTitlesInSVG = true;
$wgSVGConverter = 'inkscape';

ちなみにImageMagickをpurgeしてしまうという手もあるが,これだと日本語がうまく変換できない.なお,手元の imagemagick の version は8:6.8.9.9-5.

Related articles

2015/11/01 22:21 / gitk Error in startup script: bad menu entry index "ビュー編集..."

Debian GNU/Linux sid で最近 gitk が以下のような感じで起動してくれない.一瞬ウィンドウが表示されるが,すぐにコケる.

% gitk .
Error in startup script: bad menu entry index "ビュー編集..."
    while executing
".bar.view entryconf [mca "Edit view..."] -state normal"
    invoked from within
"if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} {
    # create a view for the files/dirs specified on the command line
    se..."
    (file "/usr/bin/gitk" line 12442)

「ビュー編集」ということなので,メニューのLANG関連なような気がするのだが,詳細は追えず.ちなみに

% gitk

であれば正常に起動する(とはいえ特定のファイルに関する履歴のみ追いたい場合もある).

Workaround は

% LANG=en_US.UTF-8 gitk .

で起動するか,UTF-8 以外の文字コードを取り扱っている場合は

% LC_MESSAGES=C gitk .

でメニューの部分のLANGのみを(英語に)設定する.

2015/10/29 12:44 / nfsroot で / に対して fscache (fsc) を有効にする

FS-Cache や cachefilesd 等に関しては他のページを参照のこと.ここでは / 自体が NFS な環境でそれを有効にすることを考える.

http://askubuntu.com/questions/23767/using-the-fsc-mount-option-with-nfsroot-kernel-parameter-to-allow-fs-cache に情報があるが,これだとうまく動かない.というのは /sbin/mount.nfs/usr/lib/klibc/bin/ に copy するだけだと /sbin/mount.nfs が依存するライブラリが initrd に含まれない.

私の環境(Debian GNU/Linux)では以下のようにした.

% sudo vi /usr/share/initramfs-tools/scripts/nfs
(nfs_mount_root_impl()の箇所)
-       nfsmount -o nolock ${roflag} ${NFSOPTS} ${NFSROOT} ${rootmnt}
+       mount.nfs ${NFSROOT} ${rootmnt} -o nolock ${roflag} ${NFSOPTS}

nfsmount は klibc に含まれるものだが,これが fsc option を解釈してくれない.ということで mount.nfs を使うように書き換える.引数の順も変更になるので注意.これは askubuntu.comと同じ.

% sudo vi /usr/share/initramfs-tools/hooks/klibc
(以下をファイル末に追加)
. /usr/share/initramfs-tools/hook-functions
copy_exec /sbin/mount.nfs /bin/mount.nfs

実際は /usr/share/initramfs-tools/hooks/klibc ではなく,新しいファイルを用意したほうが良いような気もするが,面倒だったので copy_exec で依存するライブラリも含めて initrd に含まれるようになる.

あとは,update-initramfs -u -k 3.XX.XX-2015XXXX+ で initrd 再生成,tftp に配置,pxelinux.cfg/default 等 PXE での起動 option の nfsroot=10.0.0.XX:/export/diskless,rw みたいな箇所を nfsroot=10.0.0.XX:/export/diskless,rw,fsc として fsc option を追加,という感じ.で,再起動.

% cat /proc/fs/nfsfs/volumes
NV SERVER   PORT DEV     FSID              FSC
v4 0a08000a  801 0:16    0:0               yes
v4 0a08000a  801 0:48    0:0               yes
v4 0a080002  801 0:49    0:0               yes

とかで全ての NFS mount point で cache が有効になっていることが確認できる.

nfsroot なので,kernel の option に注意が必要.多分以下ぐらいが必要.

CONFIG_FSCACHE=y
CONFIG_CACHEFILES=y
CONFIG_NFS_FSCACHE=y

追記(2017/5/18)

http://askubuntu.com/questions/23767/using-the-fsc-mount-option-with-nfsroot-kernel-parameter-to-allow-fs-cachecopy_execを利用して/sbin/mount.nfsをinitrdに含める手法が(追加)紹介されている.

Related articles

2015/10/28 13:34 / slapd[XXXX]: <= bdb_equality_candidates: (uid) not indexed

slapd が以下のように syslog になにやら大量に吐くので,対処する.http://d.hatena.ne.jp/labunix/20130421にある手法で対処.

slapd[6000]: <= bdb_equality_candidates: (cn) not indexed
slapd[6000]: <= bdb_equality_candidates: (gidNumber) not indexed
slapd[6000]: <= bdb_equality_candidates: (member) not indexed
slapd[6000]: <= bdb_equality_candidates: (memberUid) not indexed
slapd[6000]: <= bdb_equality_candidates: (ou) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaGroupType) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaSIDList) not indexed
slapd[6000]: <= bdb_equality_candidates: (sambaSID) not indexed
slapd[6000]: <= bdb_equality_candidates: (uid) not indexed
slapd[6000]: <= bdb_equality_candidates: (uidNumber) not indexed

具体的には ldapmodify で ldif を読ませる.

http://blog.remibergsma.com/2012/03/05/howto-solve-openldap-bdb_equality_candidates-errors/ にあるように /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif を直接修正する手もあるが,Debian GNU/Linux の場合 /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif の冒頭に以下のように書かれていて,ldapmodify を使うことになっている.

# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.

Related articles

2015/10/14 14:06 / Xorg on sid, gdm3 が起動しない

しばらく再起動していなかったのだが,なんだか挙動がおかしくなってきたので再起動すると,Xが起動しないという Debian GNU/Linux sid (unstable) に良くあるいつものパタン.

以下のような環境で,まず gdm3 が起動しない.

/var/log/messages によると /usr/lib/gdm3/gdm-x-session がこけて gnome-shell の起動に失敗している.これがひたすら繰り返されて画面とログが結構大変なことになっていた.

以下死ぬところの様子.

Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE) Please also check the log file at "/var/lib/gdm3/.local/share/xorg/Xorg.0.log" for additional information.
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE)
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: (EE) Server terminated with error (1). Closing log file.
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-x-session[22290]: Unable to run X server
Oct 14 13:47:34 hoge gdm3: Child process -22290 was already dead.
Oct 14 13:47:34 hoge gdm3: Child process 22287 was already dead.
Oct 14 13:47:34 hoge gdm3: Unable to kill session worker process
Oct 14 13:47:34 hoge gnome-session[22300]: gnome-session[22300]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
Oct 14 13:47:34 hoge gnome-session[22300]: (gnome-shell:22306): Clutter-CRITICAL **: Unable to initialize Clutter: Unable to initialize the Clutter backend
Oct 14 13:47:34 hoge gnome-session[22300]: (gnome-shell:22306): mutter-ERROR **: Unable to initialize Clutter.
Oct 14 13:47:34 hoge kernel: [ 1110.944017] traps: gnome-shell[22306] trap int3 ip:7f8679b9388b sp:7ffec7c23a50 error:0
Oct 14 13:47:34 hoge gnome-session[22300]: gnome-session[22300]: WARNING: Application 'gnome-shell-wayland.desktop' killed by signal 5
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-wayland-session[22297]: Activating service name='ca.desrt.dconf'
Oct 14 13:47:34 hoge /usr/lib/gdm3/gdm-wayland-session[22297]: Successfully activated service 'ca.desrt.dconf'
Oct 14 13:47:34 hoge gdm3: GdmDisplay: display lasted 0.105362 seconds
Oct 14 13:47:34 hoge gdm3: Child process -22297 was already dead.
Oct 14 13:47:34 hoge gdm3: Child process 22294 was already dead.
Oct 14 13:47:34 hoge gdm3: Unable to kill session worker process

最近は /var/log/Xorg.0.log ではなく(ユーザ毎に) /var/lib/gdm3/.local/share/xorg/Xorg.0.log にログが保存されるらしい.一般ユーザが startx したら ~/.local/share/xorg/Xorg.0.log にログが保存される.

% startx -- -verbose n -logverbose n
(n は適当に大きめの数)

上とかで verbose にログを吐かせて調べてみると /dev/dri/card0 が開けなくて死んでいるらしい.ちなみに GPU は NVIDIA.

% ls -arlt /dev/dri/card0
crw-rw----+ 1 root video 226, 0 Oct 14 14:02 /dev/dri/card0

chmod 666 等してもなぜかうまく行かなかったので sudo vigr で video group に Debian-gdm (gdm3を起動する pseudo user)を追加.これで gdm3 を restart したら,gdm3 が起動してくれた.

がしかし,ログインができない.ということでログインユーザも video group に追加.

あと,Windows 機上の VMWare で飼っている Debian GNU/Linux sid (unstable) は vmmouse (xserver-xorg-input-vmmouse)が動いてくれない.Xorg は起動するが,マウスが反応しない.

こちらもいろいろ試したがダメだったので,以下をして,通常の mouse driver で使うことにした.ただしこれだと Guest と Host をマウスで行ったり来たりする際に,マウスがかなりの頻度であらぬところに飛ぶ.

% sudo aptitude purge xserver-xorg-input-vmmouse

追記(2015/10/15)

xserver-xorg-input-vmmouse の件,sudo startx だと mouse が動くので,user で起動した場合と root で起動した場合との差分をとってみた.

- xf86EnableIOPorts: failed to set IOPL for I/O (Operation not permitted)
- (EE) PreInit returned 2 for "ImPS/2 Generic Wheel Mouse"
- (II) VMWARE(0): VMMouseUnInit
- (II) UnloadModule: "vmmouse"
+ (II) VMWARE(0): vmmouse is available
+ (**) Option "Device" "/dev/input/event5"
+ (**) ImPS/2 Generic Wheel Mouse: ZAxisMapping: buttons 4 and 5
+ (**) Option "config_info" "udev:/sys/devices/platform/i8042/serio1/input/input10/event5"
+ (II) XINPUT: Adding extended input device "ImPS/2 Generic Wheel Mouse" (type: MOUSE, id 10)
+ (II) VMWARE(0): VMMOUSE DEVICE_INIT
+ (**) ImPS/2 Generic Wheel Mouse: (accel) keeping acceleration scheme 1
+ (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration profile 0
+ (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration factor: 2.000
+ (**) ImPS/2 Generic Wheel Mouse: (accel) acceleration threshold: 4
+ (II) VMWARE(0): VMMOUSE DEVICE_ON
+ (**) Option "Device" "/dev/input/event5"
+ (II) VMWARE(0): vmmouse enabled

xf86EnableIOPorts がこけて(IOPL)いるようなのだが,Google に聞いてもあまり情報がなく(ソースコードを見なければわからない?),この付近で断念.

追記(2015/10/15)

ソースコードを追ってみた.

% apt-get source xserver-xorg-input-vmmouse
% cd xserver-xorg-input-vmmouse-13.0.99
% vi src/vmmouse.c
(下にあるパッチ参照)
% fakeroot make -f debian/rules clean binary

上でつくった deb を dpkg -i すれば動いた.

--- a/src/vmmouse.c
+++ b/src/vmmouse.c
@@ -420,7 +420,7 @@ VMMousePreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
           xorgHWAccess = TRUE;
       else {
           rc = BadValue;
-          goto error;
+//        goto error;
       }
    }

この箇所

   if (!xorgHWAccess) {
      if (xf86EnableIO())
          xorgHWAccess = TRUE;
      else {
          rc = BadValue;
          goto error;
      }
   }

となっていて,xf86EnableIO() を叩くのだが,これがコケる模様.このxf86EnableIO()は http://lists.x.org/archives/xorg-devel/2012-May/030838.html で導入されたっぽいが,なくても大丈夫らしい.

この付近に関連するような気もするが,動いたのでとりあえず良しとする.

追記(2015/11/24)

xserver-xorg-input-vmmouse の件,xserver-xorg-input-vmmouse 1:13.1.0-1 でも同様.上記 patch で解決可能.

Related articles

2015/08/27 18:11 / Wanderlust SMTP Auth Fail

何かの拍子に Wanderlust でメールが送れなくなった.*Message* には

Invalid response: AUTH PLAIN <文字列>

とあって,送信している情報を受信情報と勘違いしているらしい.SMTP なので,Wanderlust というか FLIM でコケているわけだが,ということで該当箇所は smtp.el の中.

いろいろ試していると,たまに送れる場合もあって,どうやらサーバのレスポンスが若干悪いか,その付近の同期処理(そもそも実装されてる?)に問題があるらしい (それ以上は調べられず).

追記(2015/8/28)

これ,どうやら AUTH PLAIN を送る前にコケているような気がしてきた.サーバー側の問題なような気がするが,icedove 等を使うと送信できるので良くわからない.

Process SMTP connection broken by remote peer
EHLO smtp.example.org
250-mail1.example.org
250-PIPELINING
250-SIZE 52428800
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
421 4.7.0 mail1.example.org Error: too many errors
AUTH PLAIN <文字列>

追記(2015/8/28)

たまに送れるのは,smtp 側で load balancer が動いているらしく,smtp.example.org から mail1.example.org に送られる場合は OK で mail2.example.org の場合は NG という,なんとも感じ悪い状況.

追記(2015/8/28)

この手の STARTTLS を使った SMTP を手動で送るやり方を見つけたのでメモ.

% gnutls-cli --crlf --x509cafile /etc/ssl/certs/ca-certificates.crt --port 587 --starttls-proto=smtp smtp.example.org
Processed 180 CA certificate(s).
Resolving 'smtp.example.org'...
Connecting to 'XXX.XX.X.XXX:587'...
- Certificate type: X.509
- Got a certificate list of 2 certificates.
- Certificate[0] info:
略
- Certificate[1] info:
略
- Status: The certificate is trusted.
- Description: (TLS1.2)-(RSA)-(AES-128-GCM)
- Session ID: 略
- Version: TLS1.2
- Key Exchange: RSA
- Cipher: AES-128-GCM
- MAC: AEAD
- Compression: NULL
- Options: safe renegotiation,
- Handshake was completed

- Simple Client Mode:

EHLO smtp.example.org
250-mail1.example.org
250-PIPELINING
250-SIZE 52428800
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN 略
235 2.7.0 Authentication successful
MAIL FROM:<myn@example.org>
250 2.1.0 Ok
RCPT TO:<myn@example.org>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
To: myn@example.org
From: myn@example.org
Subject: test

test

--myn

.
250 2.0.0 Ok: queued as 略
quit
221 2.0.0 Bye
- Peer has closed the GnuTLS connection

追記(2015/8/28)

ちなみに AUTH PLAIN の後の文字列は以下のようにユーザ名とパスワードから作る.

echo -n '\0username\0password' | base64
AHVzZXJuYW1lAHBhc3N3b3Jk

デコードするには base64 -d に pipe で送ればいい.

2015/08/20 09:48 / screen.xterm-256color

gnome-terminal 上で screen を使っているのだが,TERM が sid では screen.xterm-256color になる.jessie だと TERM は screen (たぶん).

sid には /usr/share/terminfo/s/screen.xterm-256color が存在するが,jessie には存在せず,ssh 等で jessie の計算機に入った際に困る.shell で C-p とか C-b すると表示が崩れる.C-r で incremental search しようとすると表示が酷く崩れる.

ということで,思い出しながら terminfo をいじることにする.

infocmpの出力は例えば以下.

sid% infocmp
#   Reconstructed via infocmp from file: /usr/share/terminfo/s/screen.xterm-256color
screen.xterm-256color|GNU Screen with xterm using 256 colors,
    am, bw, km, mc5i, mir, msgr, npc, xenl,
    colors#256, cols#80, it#8, lines#24, pairs#32767,
    acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
    bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
    clear=\E[H\E[2J, cnorm=\E[?12l\E[?25h, cr=^M,
    csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
    cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
    cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
    cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
    dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
    el1=\E[1K, flash=\E[?5h$<100/>\E[?5l, home=\E[H,
    hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
    il=\E[%p1%dL, il1=\E[L, ind=^J, indn=\E[%p1%dS,
    is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~, kEND=\E[1;2F,
    kHOM=\E[1;2H, kLFT=\E[1;2D, kRIT=\E[1;2C, kb2=\EOE,
    kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
    kcuu1=\EOA, kdch1=\E[3~, kend=\E[4~, kent=\EOM, kf1=\EOP,
    kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P,
    kf14=\E[1;2Q, kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~,
    kf18=\E[17;2~, kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~,
    kf21=\E[20;2~, kf22=\E[21;2~, kf23=\E[23;2~,
    kf24=\E[24;2~, kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R,
    kf28=\E[1;5S, kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~,
    kf31=\E[18;5~, kf32=\E[19;5~, kf33=\E[20;5~,
    kf34=\E[21;5~, kf35=\E[23;5~, kf36=\E[24;5~,
    kf37=\E[1;6P, kf38=\E[1;6Q, kf39=\E[1;6R, kf4=\EOS,
    kf40=\E[1;6S, kf41=\E[15;6~, kf42=\E[17;6~,
    kf43=\E[18;6~, kf44=\E[19;6~, kf45=\E[20;6~,
    kf46=\E[21;6~, kf47=\E[23;6~, kf48=\E[24;6~,
    kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q, kf51=\E[1;3R,
    kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
    kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
    kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
    kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
    kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
    kind=\E[1;2B, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
    kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i, op=\E[39;49m,
    rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmacs=\E(B,
    rmam=\E[?7l, rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>,
    rmm=\E[?1034l, rmso=\E[27m, rmul=\E[24m, rs1=\Ec,
    rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
    setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
    setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
    sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p5%t;2%;m,
    sgr0=\E(B\E[m, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h,
    smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h, smso=\E[7m,
    smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
    u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,

これをファイルか何かに出力して tic で compile すると ~/.terminfo/s/screen.xterm-256color に compile 済み terminfo が保存され,これは /usr/share/terminfo/ よりも優先的に読まれる.

ということで,sid にて以下で ~/.terminfo/s/screen.xterm-256color を生成 (手元の環境だと jessie でも ~ は同じ NFS なのでこれでOK).

sid% infocmp screen.xterm-256color | tic -

もしくは全ユーザ向けに対応する場合は,/usr/share/terminfo/s/screen.xterm-256color に置いてしまうか,以下で compile する.

sid% infocmp screen.xterm-256color > screen.xterm-256color.ti
jessie% sudo TERMINFO=/usr/share/terminfo tic screen.xterm-256color.ti

ちなみに screen.xterm-256color の大元の定義は ncurses source package の ncurses-6.0+20150810/misc/terminfo.src にあって,以下のような感じ.

screen.xterm-256color|GNU Screen with xterm using 256 colors,
        use=xterm+256setaf, use=screen.xterm-new,

Related articles

2015/08/11 17:09 / Wanderlust iso-2022-jp 半角カタカナ問題

半角カタカナは ISO-2022-JP (7bit) に含まれないので,半角カタカナを含むメールを

Content-Type: text/plain;charset=iso-2022-jp

で送られても困るという話.最近の大抵の環境では文字化けを起こさないが,手元の Wanderlust では化けてしまう.

http://qiita.com/kkimura/items/4cc94dff1c4df24fbdc8によると CP50220 (JISに対するMicrosoftによる拡張を含んだCP)だと思い込めばいいらしい.

cp5022x.el (cp50220, cp50221, cp50222, cp51932 が定義されている) を適当なところに置いて,

(require 'cp5022x)
(add-to-list 'mime-charset-coding-system-alist '(iso-2022-jp . cp50220))

を ~/.wl に記述しておけば文字化けが解消される.手元の環境では他の設定無しで,返信の際は自動的に UTF-8 になってくれる.

ちなみに今回遭遇した半角カタカナを iso-2022-jp で送るメールソフトは以下.

User-Agent: SquirrelMail/1.4.21

2015/08/08 16:24 / libstdc++6: Breaks: libboost-date-time1.55.0

Debian GNU/Linux sid で依存関係が混乱していて upgrade できない.どうやら libstdc++6 Breaks (破壊) libboost-date-time1.55.0 になっていて,libboost-date-time1.55.0 に依存するものに関して削除を提案される.手元では blender, libreoffice.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=794774によると,iceweasel,gnome-shell, gnome-core, gdm も,とのこと.

そして,今回 libstdc++6 は 5.1.1-14 → 5.2.1-14 なのだが,5.2.1-14 に依存する upgradable package が upgrade できない.GCC 5 が Default になる,というのとも関連しているらしい.

追記(2015/8/11)

手元の aptitude では blenderinkscape がネックになっていて,libstdc++6 と新しい libstdc++6 に依存するものが upgrade できない.

libreoffice の libboost-date-time1.55.0 依存は 解消済.blender (2.74+dfsg0-4+b1) は upgrade の気配なし(boost 1.55 に依存のまま).inkscape は,

に依存しており,これらが GCC 5 版の

と conflict しており upgrade できない.

追記(2015/8/19)

inkscapeに関しては 0.91-5+b1 (+b1 というのは binary non-maintainer upload)で解決した模様.

追記(2015/8/19)

blender は消すことにした.

追記(2015/10/6)

現在私の環境では blendergimpがネックになっていてもろもろ依存で躓く状況.

追記(2015/10/23)

どうやら一旦 gimp,blender を抜いてしまって,再度 install すれば大丈夫らしい.あと手元の他の環境では,自前 package を含んだ依存関係で躓いていた模様.

2015/07/27 18:18 / Java Plugin (32bit, 64bit)

Web会議等でJavaがまだ必要な場合があって,JavaのPluginで混乱する.ポイントは以下.

2015/07/26 00:57 / シンガポールメモ

Related articles

2015/07/17 12:51 / nanaco クレジットチャージ

nanaco クレジットチャージを利用.登録や申込みに少し時間がかかるが,なんとか手続きをしてチャージ(Web から行う).

クレジットチャージすると,「センターお預り分」扱いになって,「残高確認」(or 現金チャージ)をすることによって(nanacoに)受け取る.nanaco の Web ページに書かれている文面どおりで,単に nanaco で支払いをするだけでは受け取りが行われない(実際に確認してみた).

ちなみこのログイン画面だが,カード情報だけで(拾ったカードででも)ログインできてしまうので,ちょっと怖い...

あと,個人的にはパソリ(PaSoRi)を利用してクレジットチャージが (かなりお手軽に)できる Edy の方が好きかも.

Related articles

2015/07/16 10:17 / WordPress w/ Google Search Console (Webmaster Tools)

WordPress で運用しているサイトに Google Analytics および Google Search Consoleを導入した.なお,Google Search Consoleは以前はWebmaster Toolsという名称で知られていて,2015/5/21 にSearch Consoleへと名称変更をしたらしい

WordPress なので,もとからだいたいStructured Dataになっているわけだが,WordPress および Search Console の問題で,いくつか対応が必要.ちなみに使っているテーマは twentytwelve ベース.

追記(2015/7/20)

どうやらこの記事を書いたのと同じぐらいのタイミングで,Structured Data Testing Toolが上記に関して Error を出力しないようになった模様.

Related articles

2015/07/15 15:59 / /etc/papersize

dvipdfmx の default の papersize が letter になってしまっていたので a4 に変更したい,という話.

以前は

% sudo dpkg-reconfigure libpaper1

で a4 を選んで,それによって /etc/papersize に a4 が書き込まれて,かつ /etc/libpaper.d/texlive-base が起動され,tex 関連の paper size も a4 になったりしたのだが,/etc/libpaper.d/texlive-base の以下の部分だが,

[/etc/libpaper.d/texlive-base]
# If texlive-base is removed, just  do nothing.
test -x /usr/share/texlive/texmf-dist/texconfig/tcfmgr || exit 0

現状(sid, version 2015.20150703-1)では texlive-base に /usr/share/texlive/texmf-dist/texconfig/tcfmgr が含まれないので,設定してくれない.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=726107 の付近の話なような気もするがよくわからない.https://www.tug.org/texlive/debian.html で packaging の履歴を見てみたらなにかわかるかも,わからないかも.ちなみに /usr/share/texlive/texmf-dist/texconfig/tcfmgr は jessie (version 2014.20141024-2)には存在する.

仕方がないので /var/lib/dpkg/info/texlive-base.postinst を参照しつつ,以下で手動で設定.

% tl-paper status
Current dvipdfmx paper size (from /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg): letter
Current dvips paper size (from /var/lib/texmf/dvips/config/config-paper.ps): letter
Current pdftex paper size (from /var/lib/texmf/tex/generic/config/pdftexconfig-paper.tex): letter
Current xdvi paper size (from /var/lib/texmf/xdvi/XDvi-paper): letter
% tl-paper list
letter
a4
% 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.

Related articles

2015/07/12 22:33 / Debian GNU/Linux unstable (sid) で sdic が動かない

急に sdic が動かなくなって,大変困る.sdicとはEmacs上で辞書をひく軽量な実装.

調べたところ Debian の grep package の version が 2.21-2 に上がったことが原因ならしい.この version の grep は LANG=ja_JP.UTF-8 環境で EUC-JP なファイルをバイナリだと認識してしまうらしい(ある意味正しい挙動?).

% echo $LANG
ja_JP.UTF-8
% dpkg -l grep | grep ^ii
ii  grep           2.21-2       amd64        GNU grep, egrep and fgrep
% /bin/fgrep -e "<K>air" /usr/share/dict/gene.sdic
バイナリファイル /usr/share/dict/gene.sdic に一致しました
% sudo dpkg -i grep_2.20-4.1_amd64.deb
% dpkg -l grep | grep ^ii
ii  grep           2.20-4.1     amd64        GNU grep, egrep and fgrep
% /bin/fgrep -e "<K>air" /usr/share/dict/gene.sdic | head  -1 | nkf -u
<K>air</K>1.〜を放送する(〜が放送される),公表する,発表する,2.(衣類などを)風に当てる,干す,乾かす,部屋に風を通す,3.意見を吹聴する,不平を並べる,4.様子, 空気,態度,大気,空間,外見,5.空気の,空気を用いる,6.空の,空中の,飛行機の,7.曲,旋律

とりあえず grep を 2.20-4.1 に downgrade すれば動く.もしくは自前の fgrep (script かなにか)を用意して,LANG=ja_JP.UTF-8 環境でも EUC-JP のファイル (gene.sdic) をバイナリだと認識しないように細工してあげれば (-a option を付けて実体を起動する)動きそう.

というか,fgrep は script になっていて,その内容は exec grep -F "$@" のみなので,ここに -a option を付けてしまえばとりあえず良いような気がする.

以下デバッグメモ.

2015/07/06 12:06 / mrtg-rrd.cgi

MRTG の監視状況を見るのに mrtg-rrd.cgi を使っているのだが,なんだか PNG の生成が遅い(/ が nfs のためか1枚につき5秒程度).

以下のようにユーザー権限でローカルで PNG を生成してみると,結構早いので,strace で様子を見てみたら,CGIから起動される場合は毎回全ての font をスキャンしている模様.

% PATH_INFO=/hostname_2-day.png ./mrtg-rrd.cgi | less

解決策は以下で font の cache を生成することらしい.root で以下を実行すると /var/cache/fontconfig に cache が生成される.

% sudo fc-cache -f -v

2015/07/01 13:41 / うるう秒

本日 9:00 付近のうるう秒に関して,手元の Linux 機の dmesg によると自動で1秒挿入されたらしい.

Clock: inserting leap second 23:59:60 UTC

2015/06/24 15:26 / A&I services

仕事関連の文献データベース (abstracting and indexing (A&I) services)に関して(身近なものから)メモ.

IEEE Xplore Digital Library

IEEE 主催会議,Journal 等が含まれる.Technically sponsored by IEEE の場合でも含まれる(会議側が IEEE に LoA を送っていれば).また,著作権は基本的に IEEE に譲渡.正確な意味では A&I services ではないような気がするが,ここに掲載されれば他のA&I services にも載る(可能性がある).

参考:

Ei Compendex (EI: Engineering Index)

EIとして知られる Index.現在は Elsevierが運営.http://www.elsevier.com/solutions/engineering-village/content でCompendex Source List公開されている.

参考:

Web of Science (*1)(WoS)

トムソン・ロイターが運営している.

上記,ともにWeb of Science Core Collectionに含まれる.

2015/06/18 12:00 / imapd-ssl: couriertls: accept: error:14094417:SSL routines:SSL3_READ_BYTES:sslv3 alert illegal parameter

久しぶりに icedove を起動してみたら,courier-imap-ssl で運用しているIMAPサーバに繋がらなくなってた.サーバ側では以下のように couriertls の部分でコケている.

imapd-ssl: couriertls: accept: error:14094417:SSL routines:SSL3_READ_BYTES:sslv3 alert illegal parameter

どうやらこれは courier-ssl: mkdhparams default bit size is insufficient for libnss3 >= 3.19.1 というバグの影響らしい.実際 client (sid)側の libnss3 は 2:3.19.1-2 だった.

bug report のページにあるとおり,workaround は以下で/etc/courier/dhparams.pem を再生成するというもの.

# rm /etc/courier/dhparams.pem
# DH_BITS=2048 mkdhparams

もしくは /usr/sbin/mkdhparams を修正してしまって (BITS=768 を BITS=2048 に変更),以下をする.

# rm /etc/courier/dhparams.pem
# dpkg-reconfigure courier-ssl

追記(2015/6/18)

libnss3 3.19.1 以降で DH (Diffie-Hellman) 鍵のビット数は1023bit以上,ということになっていて,これは logjam attack対策らしい

2015/06/17 09:21 / dig gmail とか dig google とかで 127.0.53.53 が返ってくる

Google Chrome のアドレスバーに gmail と入力すると,「もしかして: http://gmail/」とか聞かれて,試しにその URL にアクセスしてみると,なぜか localhost で運用しているWeb Serverに繋がって焦る.

調べてみると,名前衝突(Name Collision)問題に対応するための「ICANN理事会による名前衝突問題への対応フレームワーク(2014/8/1)」の影響ならしい.

具体的にはhttp://stats.research.icann.org/dns/wildcard/index.htmlにリストされているTLDに関しては,名前衝突が発生しているので,それで名前解決しようとすると 127.0.53.53 が返ってくることになっているらしい.

リストされているのは,ローカルで使用されがちなTLDのみならず,ブラウザのアドレスバーに直接入れて検索に使用しがちなキーワードも含まれているような気がする(ブラウザが名前解決を試みるから?).

上記は単に 127.0.53.53 が返ってくるなぁというだけだが,hostname として利用してたりすると【調べた】LAN内のコンピュータにアクセスできず、DNSを引くと「127.0.53.53」が返ってくる問題という状況になる可能性があるらしい.

2015/06/11 12:31 / 名刺ファイリングOCR

Windows 8.1 Pro 64bit を英語化したら,名刺ファイリングOCRが起動しなくなった.具体的には「BCGCBProRes000.dll が見つからない」と怒られる.

BCGCBProResJPN.dll は存在するので,それを BCGCBProRes000.dll に Copy して起動を試みると,起動はするが名刺データベースを見つけてくれず,かつ,メニューが ???? だらけになる.

仕方がなく Windows を日本語に戻す.名刺ファイリングOCRのバージョンは V3.1L52 (V3.1L51 から L52 に上げてみたが状況は変わらなかった).

2015/05/23 22:39 / Windows 8 を LDAP+Samba で構築したドメインに参加させる

Linux (LDAP+Samba) 側は正しく sambaldap-tools 等で設定ができている状態を想定.

アプリケーションのインストールの際に管理者権限が必要になるが,その際はローカルの管理者ユーザ権限を用いる.

Related articles

2015/05/22 23:29 / Windows 8 で Local User Password を Reset する

職場から異動していった人のPCを他の人が使うということで,その設定をしようとしたが,ドメイン参加無しのスタンドアロン状態の Windows 8 で,前の使用者のみのアカウントがある状態で,ログインできず悩む.リカバリしようとリカバリDVDを探したが見つからない.

ということで,いろいろ調べた結果,その前使用者には悪いがパスワードをリセット(クリア)させてもらうことにした.

具体的には HDD の中を直接操作して,パスワードの保存されているファイル Windows/System32/config/SAMを修正するという作業になる.

今回対象としている計算機は1G HDD + 60G SSDで,Intel Rapid Storage Technology で RAID0 (Cache) という構成になっていて,はまる.起動時の設定画面で見えるのは http://www.pcper.com/reviews/Storage/Intel-Smart-Response-Technology-SSD-Caching-Z68-Tested/Boot-Option-ROM-Boot-Performaにあるような感じ.

Debian Installer でこの Disk を認識させようとすると,/dev/md127, /dev/md126 として見える (コンソールで mdadm 等を使ってもイマイチ正しく扱えない).

普通に起動させた Linux から認識させようとすると,今度は /dev/sda4 などとして Windows 領域が見えるが,この状態で mount してファイルを修正すると,どうもファイルの内容が壊れるらしい (詳細未確認,ファイルシステムが壊れるまではいかない).

ということで,起動時の Intel RST Option ROM からの設定で,RAID0(Cache)を解除(Reset Disks to Non-RAID)し,Cache 設定が無くなった素のHDDの状態で作業すると上手く行くことがわかった.

具体的には SAM ファイルのバックアップをとった状態で作業.アカウントのリスト表示は以下のようにする.

% cd /somewhere/Windows/System32/config/
% /usr/sbin/chntpw -l SAM

chntpw コマンドは Debian GNU/Linux の場合 chntpw というパッケージに入っている.ユーザーのパスワードをリセット(正確には Clear (blank))するには,

% /usr/sbin/chntpw -i SAM
で対話モードに入って,対話的に行う.

あとはこれで再起動してしまえば,パスワード入力無しで,その唯一のユーザーとして自動的にログインしてしまう.ちょっとこの状態で設定を続けるのは問題があるような気もするので,

を手早く行い,新たに作成したアカウントでもって,ドメイン参加等の設定を行った.

ちなみに Intel RST Option ROM からはRAID0(Cache)の (つまりSSDをキャッシュとして使う)設定は出来ず (出来るのは通常のRAID0とRAID1のみ),再度有効にするためには Windows から設定を行う.

chntpw 以外のアプローチ

パスワードリセット用 CD-R or USB を利用する

一般的には,こういった小細工をするための CD-R や USB を作成して,そこから作業をするらしい.利用してみたのは以下の2種類.この時はRAID0(Cache)設定に気付かず,ともに Windows 領域が見えず断念.

Utilman.exe に細工する

にあるように, Utilman.exe を cmd.exe で置き換えてしまう,という技もあるらしい.

Utilman.exe は Ease of Access (コンピュータの簡単操作) を提供する実行ファイル.Ease Of Access Replacer はこれを置き換えて,ログイン画面のスクリーンショットが取れるようにするツールならしい.

まとめ

このようにパスワードがリセットされると,リセットされたユーザーとしてその Windows にログインできることになって,たとえばブラウザに保持されている個人情報が悪用される可能性がある (というかパスワードが保存されている Chrome が起動されてしまえば,やりたい放題?).結局 HDD まるごと暗号化するか,もしくは手放す前に HDD をきっちり消去するのが賢明.

2015/05/19 10:21 / nvidia-kernel-dkms 343.36 on Linux 4.0.0

Debian GNU/Linux unstable (sid) を再起動したら,X が表示されなくなった.以下の組み合わせ.

sid の nvidia-kernel-dkms はちょっと古く(340.46-1),最新デバイスに対応していないので,experimeltal のもの(343.36-1)を導入している.

問題は343.36-1がLinuxに追いついていないということならしい.

まず f_dentry 関連で compile に失敗するので,https://github.com/archlinuxcn/repo/blob/master/nvidia-340xx-mainline/nvidia-3.19.patch の patch をあてる.nv.cnv-frontend.cfile->f_dentryfile->f_path.dentryに変更.

次にraed_cr4, write_cr4関連で compile に失敗するので,https://devtalk.nvidia.com/default/topic/813458/linux-4-0-rc1-346-47-build-error-_cr4-functions-fix/ の patch をあてる.nv-pat.cに関して,raed_cr4, write_cr4__raed_cr4, __write_cr4に変更.

これで,compile が上手く行く.ちなみにより具体的には nvidia-kernel-dkms_343.36-1 に含まれている /usr/src/nvidia-current-343.36/ 以下の source code に上記 patch をあてて,あとは以下で dkms を実行する.

% sudo dkms install -m nvidia -v current-343.36 -k 4.0.0-1-amd64

Related articles

2015/05/14 13:55 / Sun Grid Engine

複数の Linux 機を運用している場合に,計算を分散してくれる gridengine であるが,Debian GNU/Linux jessie から削除されている.

もともとは Sun Grid Engine という名称で,それが Oracle による Sun の買収にともない Oracle Grid Engine になって,その影響でオープンソースでの開発は Sun Grid Engine 6.2u5 で停止している (その後2013年にGrid EngineはOracleからUnivaに引き継がれる).

オープンソース版をベースに

が開発されている.という状況だが Debian package は依然 6.2u5 ベースのまま.upstream を Son of Grid Engine にする方向で話は進んでいるらしく (2年前に?),WNPP に RFH (Request For Help)が出ている状態(のまま).

GridenginePackaging GitGuideを参考にすれば自前 package を作れるらしい.

参考にしたページ:

2015/05/13 00:32 / 2015/6/6(Sat) の札幌のホテル

どうやら 6月6日(土),7(日) にサザンオールスターズのライブが札幌ドームであるらしく,通常のホテルがほぼ満室になっている様子.こういう大物やジャニーズが来る日程および雪まつりシーズンは要注意.

2015/04/23 13:07 / Email clients on Linux

普段は Emacs + Wanderlust でメールを見ているのだが,添付ファイルの扱いが面倒になりつつあるので,GUIベースのクライアント(MUA)を検討中.候補は以下の3つ.

Mozilla Thunderbird (Icedove)

昔ながらの(いわゆるNetscapeに由来する)クライアント.IMAP の I/F が NNTPによる newsgroup の購読と同様になっていて,いちいち Subscribe するのがちょっと面倒.

IMAP の INBOX (Subscribe した Folder 全て?)は,まるごと fetch して,~/.icedove/ 以下に保存される (Account Setting -> Synchronization & Storage で設定を変更可能).その他のキャッシュは ~/.cache/icedove/ 以下に保存.検索は賢そう.

引用部分は引用部分として表示されるが,ぱっと見た感じ引用の表示を省略するなどの機能はなさげ.

スレッドは,スレッドモードにして,collapse した状態で選択すると,Preview (Summary) が表示され,これはいい感じ.複数メールを選択するとこのモードになるらしい.

SPAM フィルタが付いているが,私の場合 procmail + SpamAssassin でフィルタするので不要.

Evolution

現在は GNOME の一部になっている.

IMAPのフォルダは自動展開.一度フォルダを選択するとサマリ(メールのヘッダ情報)がキャッシュされ,一度メールを選択するとメールがキャッシュされる模様.添付ファイルもまた別途キャッシュ.非常に IMAP フレンドリ.

~/.local/share/evolution/ に各種設定が,~/.cache/evolution/ にキャッシュが保存される.

引用部分は引用部分として表示されるが,ぱっと見た感じ引用の表示を省略するなどの機能はなさげ.スレッドモードでは,単にメールをまとめてリストするだけ.

検索はたぶんキャッシュから.

Geary

比較的新しい.Vila で記述されたメールクライアント.

~/.local/share/geary/MAIL_ACCOUNT/ にキャッシュが保存される.というか,添付ファイルを積極的にキャッシュする模様なのだが (Folder View のみで Fetch してしまう?),あまり賢くなくて,同じファイルが別のメールに添付されていても,別物とみなしてキャッシュする (それが普通?).

スレッドのまとめ方や引用の表示等,Gmail と同様のスタイルになっていて,見た目は非常に良い.ただし,なんだか全体的にもっさりしていて残念 (フォルダ選択時の同期に時間がかかっている?はじめだけ?).

あと,古いメールを効率よく参照する仕方がわからない...

検索は https://wiki.gnome.org/Apps/Geary/FullTextSearchStrategyのようなストラテジならしい.

Related articles

2015/03/27 13:50 / Intel Rapid Storage Technology and Linux mdadm

H97 Expressチップセットの計算機を RAID1 構成にて購入.さて Debian GNU/Linux (今回は jessie)を入れようとしたが,Disk が見えない.

インストーラの shell とかで見ると /dev/md127 (container)は存在していて,dmesg や mdadm --detail /dev/md127 によると,/dev/md127 に/dev/sda と /dev/sdb は bind されている.

どうやら

# mdadm --run /dev/md127

を実行すれば,/dev/md126 が作成されるらしく,無事 /dev/md126 を partition することができた.

ちなみに Intel® Rapid Storage Technology (Intel® RST) in Linux*, August 2011を参考にすると,

# mdadm -C /dev/md126 /dev/md127 -n 2 -l 1

を実行するのが本来らしいが,

mdadm: Not enough devices to start the array.

とか怒られる.

あとは grub (RAID1から起動)だが,/dev/md126 に install すればいいらしい.

Related articles

2015/03/19 11:51 / USB disconnecting log

dmesg (or /var/log/kernel や /var/log/messages) で以下のようなログが繰り返し表示される問題.

usb 1-9.3: USB disconnect, device number 51
usb 1-9.3: new low-speed USB device number 52 using xhci_hcd
usb 1-9.3: New USB device found, idVendor=046d, idProduct=c05a
usb 1-9.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 1-9.3: Product: USB Optical Mouse
usb 1-9.3: Manufacturer: Logitech
usb 1-9.3: ep 0x81 - rounding interval to 64 microframes, ep desc says 80 microframes
input: Logitech USB Optical Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9.3/1-9.3:1.0/0003:046D:C05A.0033/input/input59
hid-generic 0003:046D:C05A.0033: input,hidraw2: USB HID v1.11 Mouse [Logitech USB Optical Mouse] on usb-0000:00:14.0-9.3/input0

ログによるとだいたい1分毎に USB Mouse を抜き差ししていることになるが,もちろんそんなことはしていない(刺したまま).

一旦 USB を抜いて挿し直せば大抵静かになってくれるが,リモートで面倒なので,

% sudo modprobe -r xhci_hcd

で黙らせる.

2015/03/19 11:11 / systemd-localed が起動に失敗する

Debian GNU/Linux jessie にて,何かの拍子で systemd-localed.service が FAIL するようになった.

% sudo systemctl reload systemd-localed.service
Failed to reload systemd-localed.service: Job type reload is not applicable for unit systemd-localed.service.
% sudo journalctl -xn50 | grep systemd
Mar 19 11:XX:00 hoge systemd[1]: Starting Locale Service...
Mar 19 11:XX:00 hoge systemd[1]: Couldn't stat device /dev/pts/ptmx
Mar 19 11:XX:00 hoge systemd[1]: systemd-localed.service: main process exited, code=killed, status=7/BUS
Mar 19 11:XX:00 hoge systemd[1]: Failed to start Locale Service.
Mar 19 11:XX:00 hoge systemd[1]: Unit systemd-localed.service entered failed state.

調べた結果,以下のバグのためだということがわかった.Debian Bug report logs - #773932 check for CONFIG_DEVPTS_MULTIPLE_INSTANCES=y in preinst

実際,運用している計算機の kernel は自前 compile のものなので,

% grep CONFIG_DEVPTS_MULTIPLE_INSTANCES /boot/config-3.18.*
/boot/config-3.18.9-XXX-01:# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set

となっていた.Debian GNU/Linux の Default の kernel では CONFIG_DEVPTS_MULTIPLE_INSTANCES=y となっている.次に compile する際には y にする.

2015/02/27 17:28 / gnome-shell が 3D acceleration 無し環境では動かない件

どうやら最新の gnome-shell というか gdm3 は 3D acceleration が無い環境では動作しないらしい.つまり XDMCP 経由でのリモートログインができない模様.

% Xnest -geometry 1920x1080 :1 -query remote

で remote に繋いでも

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

という画面が表示され,どうにもならない.remote 側のログは以下のような感じ.

Feb 27 17:37:45 remote gnome-session[3622]: gnome-session[3622]: WARNING: Could not parse desktop file orca-autostart.desktop or it references a not found TryExec binary
Feb 27 17:37:45 remote gnome-session[3622]: gnome-session[3622]: WARNING: Could not parse desktop file caribou-autostart.desktop or it references a not found TryExec binary

ということで仕方なく Xvfb + VNC で GUI 環境を飛ばしてくる.

local% ssh -L5900:localhost:5900 remote
remote% Xvfb :1 -screen 0 1920x1080x16 &
(解像度はlocalに合わせておく)
remote% DISPLAY=:1 xterm &
remote% x11vnc -storepasswd
(~/.vnc/passwd にパスワードが保存される; 1回だけ実行)
remote% x11vnc -display :1 -rfbauth ~/.vnc/passwd &
local% vncviewer -FullScreen localhost

あとはつながった先にある xterm からお好みの window manager を立ち上げる.個人的には以下のどれか.

% fluxbox &
% xfwm4 &
% xfce-panel &
% metacity &
% gnome-panel &

metacity だと gnome-shell っぽい雰囲気になる.あと,vncviewer で fullscreen を抜けるには F8 の VNC のメニューから.ちなみに Alt-Tab の Task Swich は local に送られてしまうので注意.

追記(2016/04/05)

orca-autostart.desktop や caribou-autostart.desktop は screen reader や screen keyboard なので,通常は(screen reader等をinstallしていない状態では) parse errorが出ても(というかTryExecで設定したbinaryが存在しなくても)問題ない.

追記(2017/2/12)

この件,

https://www.debian.org/releases/jessie/amd64/release-notes/ch-information.en.html#gnome-3d のとおり jessie (以降の?)問題らしい.

The GNOME 3.14 desktop in Jessie no longer has fallback support for machines without basic 3D graphics.

Related articles

2015/02/09 18:43 / Emacs html-mode 自動インデントを切る

このページは Emacs でほぼ HTML 直書きなのだが,html-mode が自動インデントしてくれて,ちょっと困る (改行の入れ方とか他にもいろいろ考えたいところだが).

ということで,以下で offset を 0 にして indent を off にする.

(add-hook 'html-mode-hook
          (lambda ()
            (set (make-local-variable 'sgml-basic-offset) 0)))

2015/02/09 18:39 / logrotate gzip: stdin: file size changed while zipping

Debian GNU/Linux jessie にて cron で起動する logrotate から以下のメールが朝届く.

Subject: Anacron job 'cron.daily' on XXX
From: Anacron <XXX@mail.example.org>
Date: Mon,  9 Feb 2015 07:XX:XX +0900 (JST)

/etc/cron.daily/logrotate:
gzip: stdin: file size changed while zipping

gzip で固めている最中に log が追記された,とかそういうことなのだが,
Debian Bug report logs - #772448
logrotate: non-helpful cron mail: gzip: stdin: file size changed while zipping
のように bug report されている.どういう風にfixされるんだろうか.

2015/02/08 19:42 / gnome-terminal (Error constructing proxy for...)

gnome-shell は VMWare 上で使うのは重いので,未だに startx で X を起動しているのだが,~/.xinitrc から起動した xterm から gnome-terminal が以下のエラーで起動しない(再起動したら直る場合も).

% gnome-terminal
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: org.gnome.Terminal を StartServiceByName で呼び出そうとしてエラー: GDBus.Error:org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.gnome.Terminal exited with status 8

/var/log/message によると,

org.gnome.Terminal[XXXX]: Non UTF-8 locale (ANSI_X3.4-1968) is not supported!

とのことなので,LANG まわりなのであるが(xterm は LANG=ja_JP.UTF-8 で起動していて,/etc/locale.gen を見ても特に問題なさげ),

% /usr/lib/gnome-terminal/gnome-terminal-server &
% gnome-terminal &

とすれば起動してくれる.なお gnome-terminal が終了すると gnome-terminal-server も落ちる.

Related articles

2015/02/07 23:18 / Bluetooth HOGP (HID over GATT profile)

いままでNotePC用に ELECOM Bluetooth BlueLED マウス M-BL3BBを使っていたのだが,電池の箇所の蓋が閉まりづらくなったり,ペアリングの際の状態表示LEDが内部に入ってしまったりしていたので,新たに同社の Bluetooth 4.0 レーザーマウス M-BT13BLを購入.値段はアップグレードされるが,ボタン3つから5つに増えるし,低消費電力化されてて電池の持ちも良さそう,ということで.

早速利用しようとペアリングしてみるも HID (human interface device) として認識されない.試しに Android 携帯とマウスをペアリングしてみると,正常に認識される(携帯の画面にマウスカーソルが現れる...).

どうやら NotePC 側は HOGP (HID over GATT profile) (GATT: generic attribute profile) 対応でなければならないらしい.使っている NotePC は Let's note CF-AX2 で,これの Bluetooth は OS (Windows 8)標準のものではなく,Bluetooth Stack for Windows by Toshiba v9.10.04 というもの.Bluetooth 4.0 対応ではあるものの,HOGP 対応ではないらしい.

2015/02/07 23:05 / gnome-shell のパネルに日付を表示する

デフォルトの状態では jessie (sid も) の gnome-shell では,画面上部のバーの箇所(パネル)に日付が表示されない(曜日は出ている).

日付を表示するには以下をする.

% gsettings set org.gnome.desktop.interface clock-show-date true

追記(2017/12/12)

時計の秒表示をするには以下をする.

% gsettings set org.gnome.desktop.interface clock-show-seconds true

Related articles

2015/01/26 19:21 / a2ps で日本語

たまに a2ps で日本語を使いたくなるのだが,大抵どうしようもならない.

EUC-JP ならなんとかなるという話もあるが,Debian GNU/Linux sid の a2ps (4.14-1.3) では,以下のような感じだった.

% LANG=ja_JP.eucjp date | nkf
2015年  1月 26日 月曜日 19:35:03 JST
% LANG=ja_JP.eucjp date | LANG=ja_JP.eucjp a2ps --encoding=euc-jp -o - -1 | grep JST
(2015\257  1\356 26\374 \356\313\374 19:35:03 JST) p n

どうも2バイト文字の1バイト目が無くなってしまうらしい.ということで,2バイト文字の各バイトに無駄なバイトを付けてみる (やるきなしワンライナー).

% LANG=ja_JP.eucjp date | ruby -e 'print STDIN.read.unpack("C*").map{|i| i>128 ? [-1,i] : i}.flatten.pack("C*")' | LANG=ja_JP.eucjp a2ps --encoding=euc-jp -o - -1 | grep JST
(2015\307\257  1\267\356 26\306\374 \267\356\315\313\306\374 19:36:36 JST) p n

これで生成される postscript (.ps) は gs (evince とか)で表示可能.この手の postscript は,あとは ps2pdf にさえ通ってしまえばなんとかなるのだが,今回はここで挫折.以前は (2015\307\257) p n(2015) p (\307\257) p n とかみたいに分解すれば ps2pdf に通ったような気がするのだが,手元の gs (9.06~dfsg-2) ではダメっぽい.

ということで e2ps を導入.入力は EUC (UTF-8 未サポート) で,landscape/portrate や 2-in 等にも対応.ただし a2ps (や enscript; こちらも日本語NG) にあるような style sheet サポートは無し.

というか,style sheet を諦めるのであれば,ブラウザ (google-chrome) でテキストファイルを開いて CUPS で PDF に印刷するか,Save to Google Drive で Google Drive に PDF を送る,というのでいいような気がしてきた.

2015/01/21 18:02 / service autofs stop 時に mount point が削除される

autofs (automount) を停止すると,mount point が削除されてしまうという問題.NFS root (/ 自体を NFS でマウントしている状態)だったりすると,他の client が非常に困ることになる.

これに関しては autofs 4 時代に removes the toplevel mountpoint directories and fails to start the next time (Severity: grave) という bug report が出ていて,現在の autofs では mount 時に mount point がなくても

umount_autofs_indirect: mount point /home does not exist

という syslog を吐きつつ mkdir して mount してくれる仕様になっている.がしかし,umount 時に mount point を unlink する仕様はそのまま.

解決法は上記 bug report の中にあるように,予め mount point を mkdir しておき,chmod u-w (or chmod 555) しておくというもの.

とはいえ,NFS root で client 多数という状況では,各 client が mount point を open したまま保持しているので,一旦全 client で autofs stop して,mkdir, chmod した後に autofs start という対処が必要だった.

ちなみに上記 bug report は,autofs5 という package ができて,autofs (version 4) の package が削除される,というタイミングで,うやむやのうちに close された模様.その後 autofs5 は autofs (version 5) という package 名になる(この bug report は close されたまま).ということで,仕様として理解するしかなさげ.

追記(2015/5/8)

どうやら mount point (/home 等) の mode を 444 にしていても削除される(?) ようで,ほかの計算機の autofs が死んでしまう.

mount point の directory に何らかのファイルがもともとあれば削除されない(?) ようなので,ダミーのファイル(.dummy 等)を mount point に置いておくことにする.

2015/01/15 18:24 / Debian GNU/Linux jessie (testing) autofs w/-hosts

jessie だと automount の -hosts (cd /net/hostname/ とすると自動で NFS mount してくれるあれ)の挙動がおかしい.バグレポートは https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=741064のとおり(Severity: important).

[/etc/auto.master]
/net	-hosts
としておけば通常は動作してくれるところが,
automount[XXX]: get_exports: lookup(hosts): exports lookup failed for HOSTNAME
automount[XXX]: key "HOSTNAME" not found in map source(s).
という感じの syslog を吐いて,うまく動かない.ということで, とりあえず上記バグレポートにある workaround である
[/etc/auto.master]
/net	/etc/auto.net
を使うことにする(/etc/auto.net は autofs インストール時に配置される). 実際はこういった情報(/net -hosts)は LDAP で +auto.master で配っていて,LDAP 側を修正したくないので,
[/etc/auto.master]
/net	/etc/auto.net
+auto.master
という感じで LDAP の前に /net のエントリを書いておくとこちらが優先されるらしい.

Related articles

2015/01/15 18:04 / Debian GNU/Linux wheezy (stable) の mesa が古すぎて最近の Intel HD Graphics がまとに動かない

wheezy の mesa が古すぎて(8.0.5)最近の Intel HD Graphics で GLX がまともに動作しない,という問題があって jessie (testing) に移行試行中(mesa は 10.3.2).

ちなみに wheezy であっても /usr/lib/xorg/modules/drivers/intel_drv.sohttps://01.org/linuxgraphics/downloadsの最新の xf86-video-intel を compile して配置すれば,Xorg 自体は最新の Intel HD Graphics を認識してくれる.がしかし mesa が古すぎて,これの自前 compile は大変なので...という話.

以下Xorg.0.logの情報(wheezyとjessie).ともにXorgからは認識できている.

で,wheezy の場合は mesa が古いので,glxinfo で

Unrecognized deviceID 0x412

と怒られてしまう.ということで仕方なしにjessie (testing)にあげる.

2015/01/12 19:52 / apply: Setting current directory: そのようなファイルやディレクトリはありません

何かの拍子で,Wanderlust で k s (SPAM登録),k c (SPAMチェック)が以下の Error でこけるようになってしまった.

apply: Setting current directory: そのようなファイルやディレクトリはありません, /home/someone/somewhere/

どうやら消してしまった directory /home/someone/somewhere/ が current directory に(なにかの拍子に)なってしまったらしい.

M-x cd で current buffer's default directory を変更して復帰.

2015/01/07 20:29 / rhsbl.ahbl.org 停止

http://www.ahbl.org/content/last-notice-wildcarding-services-jan-1st にあるとおり,メールサーバにて DNSBL として rhsbl.ahbl.org, dnsbl.ahbl.org, ircbl.ahbl.org を使っている場合は早急に設定が必要な模様.というか,先程あるサーバからメールが

  said: 554 5.7.1 Service unavailable; Client host
  [mail.example.org] blocked using rhsbl.ahbl.org; List shut down.
  See: http://www.ahbl.org/content/last-notice-wildcarding-services-jan-1st
  (in reply to RCPT TO command)
で返ってきてます.1/1 に止めると言っておきながら,1週間猶予した感じ?

なお,以下のような postfix の設定例を書いているページが多いので,かなりの数のサーバが影響を受けるような気がする.

 smtpd_client_restrictions = permit_mynetworks,
                             reject_rhsbl_client rhsbl.ahbl.org,
                             reject_rbl_client spamcop.net,
                             reject_rbl_client dynablock.wirehub.net,
                             reject_rbl_client sbl.spamhaus.org,
                             reject_unknown_client,
                             permit

2014/08/25 19:11 / ニコニコ動画 over squid3 3.3.8-1.1+b1

なぜか squid proxy を通すとニコニコ動画が見れないので調べてみた.Debian GNU/Linux で squid は squid3 3.3.8-1.1+b1.

どうやらアクセスログによると

1408960XXX.XXX     31 ::1 TCP_MISS/400 231 GET http://smile-fnl00.nicovideo.jp/smile? - HIER_DIRECT/119.110.89.1 -
1408960XXX.XXX     31 ::1 TCP_MISS/400 231 GET http://smile-fnl00.nicovideo.jp/crossdomain.xml - HIER_DIRECT/119.110.89.1 -

みたいな感じになっており,通常は最後の - の箇所が content-type になるのだがそうなっていない.tcpdump や telnet 等で調べてみると smile-fnl00.nicovideo.jp が問答無用で Bad Request,つまり,

HTTP/1.1 400 Bad Request
Date: Mon, 25 Aug 2014 10:XX:XX GMT
Server: lighttpd
Connection: close

を返すらしい.これは squid proxy が

X-Forwarded-For: ::1
という怪しげな Header をつけていたのが原因. 127.0.0.1 ならOKだったので ::1 を 127.0.0.1 にすれば良いのだが, やり方がわからないので(どこのIPv6をdisableしたらいいか不明), squid.conf で以下で X-Forwarded-For を付けない設定とする.
-# forwarded_for on
+forwarded_for off

Related articles

2014/08/21 11:49 / Debian GNU/Linux でビルマ(ミャンマー)語

% sudo aptitude install fonts-sil-padauk

これで Chrome でビルマ語(မြန်မာဘာသာ)が文字化けせず表示される.

あとはGoogle翻訳に流しこめば...と思ってたら,Google翻訳がミャンマー語に対応していない模様.東南アジアの主要言語でGoogle翻訳が未対応なのは,カンボジア語とビルマ(ミャンマー)語,とのこと.

参考にしたページ: http://www.asiahonyaku.com/essey/2013journal/201303journal/20130314cambodia.html

追記(2015/1/12)

カンボジア(クメール)語もビルマ(ミャンマー)語も現在Google翻訳は対応している模様.ビルマ語対応は昨年の12月だった模様.クメール語対応はもっと前で2013年4月.

参考にしたページ:

2014/08/15 16:20 / ACM renew

ACMのMembershipをrenewした.ACM Professional Membership: 99 USD.ACM Digital Library をつけるとその倍の 198 USD になる.

Sister Society との相互割引の制度があり,

となっている.なんか惰性で会費を払っている感があるが79 USDをVISAで決済.

オンライン決済で選べるのは paypal, VISA/Master, AMEX.JCBもAMEX扱いだったような気がするが (海外でJCBを見せると「なにそれ?ホントにクレジットカード?」みたいなことを言われるが,カードリーダーがAMEX対応だったら,JCBでも支払える,ような気がする),安全にVISAで支払い.

追記(2017/6/14)

今年は Paypal で払ってみた.

2014/08/14 23:58 / google-chrome-stable on Debian GNU/Linux sid

Chrome でアドレスバーが激しく文字化けするという症状に見まわれる.文字化けというか www からしてなにか適当な平仮名になっている.調べてみたら fonts-droid が問題ならしい.fonts-droid を purge して解決 (私の場合これに依存する package は無かった.というかなんで入れてたんだろうか...).

同時に gnome-terminal が起動しない問題,つまり手動で /usr/lib/gnome-terminal/gnome-terminal-server を実行してから gnome-terminal を起動しなければならない問題,も解決したような気がする (詳細不明).

参考にしたページ: http://www.kaoriya.net/blog/2014/04/18/

追記(2014/8/15)

blenderがfonts-droidに依存する模様.

Related articles

2014/07/17 12:41 / Emacs kill ring

Emacs での copy & paste は M-w (copy) と C-y (paste)で行うわけだが,普段 Windows の C-c と C-v と同じ使い方していなかったのだが,実はいろいろ出来たはず,ということで,思い出してみた.

M-x describe-key (F1-k)によると以下のような感じ.

C-w, M-w は Cut, Copy として使うとして,C-y (paste) の後 M-y すると順に前に Copy (or Cut) したものが paste (instert) されていく.

C-2 C-u C-y などで最新より1つ前に copy (or cut) したものが Paste される (kill-ring の位置が変わるのでちょっと混乱する).

emacs-goodies-el package が install されていれば,M-x browse-kill-ring で kill-ring の様子を見ることができる(かつ選択的に Yank 可能).

2014/07/03 13:28 / ruby2.1 の YAML

YAML.dump(object)で日本語文字列がダブルクォートされる.ruby 2.0 ではダブルクォートされなかったような...

YAMLでお手軽にシリアライズして,それをgitに突っ込んでいたりするので,処理系によって差分が出てしまう(個人で使っているだけなので問題ないのだが).

ということで,調べてみた.

該当処理箇所は /usr/lib/ruby/2.1.0/psych/visitors/yaml_tree.rbclass Psych::Visitors::YAMLTree < Psych::Visitors::VisitorPsych::Visitors::YAMLTree#visit_String(o) の箇所.の以下.

        elsif o =~ /^\W[^"]*$/
          style = Nodes::Scalar::DOUBLE_QUOTED

/usr/lib/ruby/2.0.0/psych/visitors/yaml_tree.rb にはこの行がない.ということでもしダブルクォートを回避するにはこの辺を何とかすれば良いらしい.

2014/07/03 12:33 / dvipdfmx で図が消える

先月ぐらいの texlive の upgrade で,dvipdfmx により生成したPDFにて図が消える(真っ白)という症状が発生.

% sudo vi /etc/texmf/dvipdfmx/dvipdfmx.cfg
-sPAPERSIZE=a0 を -dEPSCrop に変更

で解決する.

Related articles

2014/05/11 17:00 / texlive 2012.20120611 (Debian GNU/Linux) でフォント埋め込み

dvipdfmx で .dvi から .pdf を生成する際に PDF ファイルにフォントを埋め込む設定.Default の状態では /etc/texmf/dvipdfmx/dvipdfmx.cfg が存在しないので

が参照される.ということで /etc/texmf/dvipdfmx/dvipdfmx.cfg を配置して設定する.

% sudo cp /usr/share/texlive/texmf-dist/dvipdfmx/dvipdfmx.cfg /etc/texmf/dvipdfmx/dvipdfmx.cfg
% sudo vi /etc/texmf/dvipdfmx/dvipdfmx.cfg
-D  "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile='%o' '%i' -c quit"
+D  "gs -q -dNOPAUSE -dBATCH -dPDFX -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -sOutputFile='%o' '%i' -c quit"
+f jis-cjk.map
% sudo vi /etc/texmf/dvipdfmx/jis-cjk.map
rml     H fonts-japanese-mincho.ttf
gbm     H fonts-japanese-gothic.ttf
rmlv    V fonts-japanese-mincho.ttf
gbmv    V fonts-japanese-gothic.ttf
rml-jis H fonts-japanese-mincho.ttf
gbm-jis H fonts-japanese-gothic.ttf

つまり以下を行っている.

PDFファイルに全てのfontが埋め込まれているかどうかは以下のコマンドで embが全てyesになっているかどうかで確認する.

% pdffonts make.pdf

追記(2017/6/22)

stretch がリリースされたので若干更新した.

/usr/share/texlive/texmf-dist/fonts/map/dvipdfmx/updmap/kanjix.mapに以下のように記述されているが,これではフォントが埋め込まれない.

% ptex-ipaex.map
gbm H ipaexg.ttf %!PS IPAexGothic
gbmv V ipaexg.ttf %!PS IPAexGothic
rml H ipaexm.ttf %!PS IPAexMincho
rmlv V ipaexm.ttf %!PS IPAexMincho

Related articles

2014/05/02 23:44 / RPM メモ

普段 aptitude (apt) と dpkg を使っているので,yum と rpm を使う際は混乱する.

あと redhat 系で update-rc.d に相当するのは /sbin/chkconfig ならしい.

参考にしたページ: http://matsu.teraren.com/blog/2008/12/08/rpm-dpkg-%E5%A4%89%E6%8F%9B%E8%A1%A8/

Related articles

2014/05/02 17:23 / RPM パケージからの差分を見る

なぜか CentOS 5 を触ることになった.

rpm -V [package_name]

でインストールした時点からのファイルに加えられた変更を確認できるが,その差分まで見たい時の話.

まず rpm を拾ってくる.これは http://www.cyberciti.biz/faq/yum-downloadonly-plugin/ のMethod #2を参考にしつつ,yum-utils に入っている yumdownloader を使う.

yumdownloader [package_name]

でカレントディレクトリにrpmを取得できる.

あとは http://superuser.com/questions/194928/view-configuration-file-changes-with-rpm-or-yum を参考に rpmpeek を使う.

rpmpeek は rpmdevtools に含まれていて,rpmdevtools は EPEL (extra packages for enterprise Linux)に入っている (参考: Available Repositories for CentOS).ということで,yumで rpmdevtools を installするために epel-release-5-4.noarch.rpm (とか)を拾ってきてrpmで突っ込んであとは yum install rpmdevtools する.

あとはrpmpeakを叩くだけ.

RPM=package_name
for FILE in `rpm -V $RPM | sed -e 's+^[^/]*++' | grep '^/etc/'` ; do
  rpmpeek $RPM*.rpm diff -uw .$FILE $FILE
done

Related articles

2014/04/28 13:15 / VMware-Player-6.0.2 w/Debian GNU/Linux sid

% sudo vmware-modconfig --console --install-all

すると

make[1]: Entering directory `/usr/src/linux-headers-3.13-1-amd64'
Makefile:10: *** mixed implicit and normal rules.  Stop.

みたいに怒られてしまう.どうも

[/usr/src/linux-headers-3.13-1-amd64/Makefile]
$(cmd) %/: all
        @:

の箇所が問題ならしい.mix するな,ということらしいので,

[/usr/src/linux-headers-3.13-1-amd64/Makefile]
$(cmd): all
        @:
%/: all
        @:
として解決.

2014/04/29 00:31 / File system crash

aptitude で upgrade かけているうちに反応がなくなり VMWare の reset も効かなくなり VMWare の poweroff も効かなくなり VMWare が起動したまま Windows を強制再起動したら VMWare 上の Linux の file system がぐちゃぐちゃになった.

grub で適切な kernel を選んでで起動すると一応は起動.しかし,いろんな .so が行方不明.なんとかしようとしているうちに aptitude が libc の remove を提案する始末.仕方なく再インストールすることにする.

以下簡単な手順メモ.Install したのは Debian GNU/Linux の sid.

  1. mini.iso で起動して rescue mode に入る

  2. crypt 領域の PW が判らず焦るが,幾つか入れているうちになんとかなる

  3. 古い / を /old に移動して、base system install + grub install

  4. shell から passwd で root password 設定

  5. fstab, crypttab を調整のうえ update-initramfs -u -k all して reboot

  6. aptitude で各種 package を突っ込む

  7. /old/etc を参照しつつ /etc を調整

  8. i386 アーキテクチャの追加

    % sudo dpkg --add-architecture i386

再起動後なぜか Wanderlust の挙動が少し変化する.具体的には /usr/share/emacs/*/lisp/net/tls.elc が存在するためか elmo-vars.el の

(defvar elmo-network-stream-type-alist
  `(("!" ssl ,@(cond
        ((and (fboundp 'gnutls-available-p)
              (gnutls-available-p))
         '(gnutls open-gnutls-stream))
        ((module-installed-p 'tls)
         '(tls    open-tls-stream))
        (t
         '(ssl    open-ssl-stream))))

の箇所で tls.el の open-tls-stream が選択されてしまい,connection を張る際に

(defcustom tls-program '("gnutls-cli -p %p %h"
             "gnutls-cli -p %p %h --protocols ssl3"
             "openssl s_client -connect %h:%p -no_ssl2 -ign_eof")

を順番に試すようになってしまった.gnutls-cli でも –insecure option を付ければ繋がるが今まで openssl を使っていたので,

(setq tls-program '("openssl s_client -connect %h:%p -no_ssl2 -ign_eof"))

とする.

あと気になったのは rdtool-elisp の install の際にちょっと文句を言われる.そろそろ使わないようにしたほうが良いのかも.

Preparing to unpack .../rdtool-elisp_0.6.38-2_all.deb ...
ERROR: rdtool-elisp is broken - called emacs-package-install as a new-style add-on, but has no compat file.
Unpacking rdtool-elisp (0.6.38-2) ...
Setting up rdtool-elisp (0.6.38-2) ...
ERROR: rdtool-elisp is broken - called emacs-package-install as a new-style add-on, but has no compat file.
Install rdtool-elisp for emacs
Install rdtool-elisp for emacs23
install/rdtool-elisp: Handling install for emacsen flavor emacs23
Wrote /usr/share/emacs23/site-lisp/rdtool-elisp/rd-mode.elc

Related articles

2014/04/25 20:50 / qmail の設定

自分管理のドメインに関してレンタルサーバに移行することにしたので,qmail とお別れする.といっても,/etc/qmail/rcpthosts /etc/qmail/virtualdomains を変更(自分のドメインの情報を削除する)した後に qmail-send に HUP を送ればOKとのこと.

HUP を送るにも daemontools で管理されていたような気がするので,その流儀に従うことにする.以下 qmail-src から作った qmail package を入れていた場合の話.

sudo svc -h /etc/qmail/qmail-send

今は qmail-src は無くなって netqmail になっているらしい (package 名は qmail)が,その場合も上記でOKかは不明.

2014/04/24 00:25 / Wanderlust elmo-passwd-alist-save w/IMAP

なぜか Wanderlust でパスワードを記憶させておくことができない場合が発生していたので,調べてみた.

%:username/plain@imap.example.org:993!/%:username/clear@imap.example.org:993!/ は基本的には同じはずなのだが,plain だと PLAIN passpharase for usename: でパスワードが聞かれ,clear だと Password for IMAP:username/clear@imap.example.org:991: でパスワードが聞かれる.

info によると

認証法には `login' (エンコードしてパスワードを送信)か
           `cram-md5' (CRAM-MD5 による認証)か
           `digest-md5' (DIGEST-MD5 による認証)か
           `clear' (または `nil'。生パスワードを送信) のいずれかを指定。

となっているので,clear を使うのが流儀っぽい.

plain の場合は /usr/share/emacs/site-lisp/flim/sasl.elsasl-plain-response が呼ばれて,clear の場合は /usr/share/emacs/site-lisp/wl/elmo/elmo-util.elelmo-get-passwd が呼ばれる.前者はパスワードは変数にも保存されず,後者の場合は(エンコードされた)パスワードが elmo-passwd-alist に保存され,これが elmo-passwd-alist-save~/.elmo/ 以下に保存される.

2014/04/23 19:03 / nvidia-kernel-dkms 319.82-1~bpo70+1 on Linux 3.12.17

最近個人的に module-assistant (m-a) ではなく DKMS を使うようになりつつある (勝手にDKMSが入ったから?).

具体的に使うのは nvidia の kernel module のコンパイルぐらい.stable backports (stable-bpo) の nvidia の version が 319.82-1~bpo70+1.これは Linux の 3.12.xx であればコンパイルが通る(3.12.17で確認).3.14.1 だと不可.ということでもうしばらく 3.12 を利用.

ちょっとややっこしい環境なので,自前で dkms を実行する必要があるのだが,その場合は以下のようにする.

% sudo dkms install -m nvidia -v current-319.82 -k 3.12.17-20140423-hoge-01+

オプションは -v module-version-k kernel-versionという感じ.

Related articles

2014/04/23 18:50 / csv2wp (CSV to WikiMedia table converber)

CSV から WikiMedia のテーブルへの変換スクリプト.Ruby で書いてある.やるきなしなし.

require "csv"
list=CSV.open(ARGV[0]).to_a
size=list.map{|i| i.size}.max
t=["!"]
a=list.map{|j| p=t.shift; (0...size).to_a.map{|i| "#{p}|#{j[i]}\n"}*""}
print %Q!{| class="wikitable"\n#{a*"|-\n"}|}!,"\n"

CSV Converter にオンラインで変換するものがあるようですが.

2014/04/23 15:53 / LDAP 作業メモ

すぐに忘れるのでよく使うものだけ以下にメモ.

/etc/hosts の LDIF (LDAP Data Interchange Format) への変換

% perl -I/etc/migrationtools /usr/share/migrationtools/migrate_hosts.pl /etc/hosts > hosts.ldif

設定を記述している/etc/migrationtools/migrate_common.ph をincludeするために上記のようにする.

LDIF の LDAP への追加

% ldapadd -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw) -f hosts.ldif

-w (pw) を -W にすると,パスワードを入力するモードになる.

LDAP から /etc/hosts 情報に相当する部分を検索

% ldapsearch -x objectClass=ipHost

Related articles

2014/04/20 23:08 / WordPress 3.9 with qTranslate 2.5.39 → mqTranslate 2.6

前の記事で qTranslate が WordPress 3.9 に対応していない旨書いて,なんとか応急措置的に使えるようにしたが,この状態だと Visual Editor が起動しない (私自身は HTML 直書きなのでほぼ問題がないのだが).かつ未だに qTranslate が更新される気配無し.

ということで,https://wordpress.org/support/topic/dont-upgrade-to-wordpress-90-for-now-couldnt-plugin-author-help-us を参考に qtranslate から fork した mqtranslate に乗り換え.この URL のページ,[resolved] になっているわりにその解決法が別の plugin を使うといもので,なかなか qtranslate の作者をバカにしているような.

Related articles

2014/04/17 14:45 / WordPress 3.9 with qTranslate 2.5.39

WordPress 3.9 がリリースされたのでバージョンアップを行う (当然こことは別のサイト).

qTranslate で多言語化を行っているのであるが(一般的に重いと言われているが気にしない),qTranslate がまだ WordPress 3.9 に対応していないので,なんとかしてみる.

$before. があると以下のようなメッセージが apache の error.log に現れて,うまく表示が行われない(1つのpostの最後のところまでしか表示されなくなる).

PHP Catchable fatal error:  Object of class WP_Post could not be converted to string in /document_root/wp-content/plugins/qtranslate/qtranslate_core.php on line 455

追記(2014/4/20)

2014/4/20 23:08 / WordPress 3.9 with qTranslate 2.5.39 → mqTranslate 2.6も参照のこと.

Related articles

2014/04/14 19:34 / gnome-shell 3.8.4-8 + ibus 1.5.5-1

gnome-shell + uim (mozc) 環境だったのだが,libreoffice に uim で日本語入力できないので,uim の代わりに ibus (ibus-daemon -dx)を使うことにした.

と,同時かどうかは不明だが,gnome-shell + ibus の場合の input source (method) switch の設定は Gnome の keyboard の設定側 (Keyboard - Shortcuts - Typing - Switch to next source) にあって,これを Shift+space にしようとすると

The shortcut "Shift+Space" cannot be used because it will become impossible
to type using this key.

みたいな酷いことを言われて設定できない,という問題に遭遇.Default の Ctrl+Space は Emacs の Mark set と conflict するので,とんでもない.

http://yutarine.blogspot.jp/2013/10/ubuntu1310ibus15de.html を参考に dconf-editor で ['<Shift>space'] に設定してみてもうまく効いてくれない(Ctrl+Space で switch しなくなるが,Shift+Space で switch しない).

ということで,いろいろ悩んだ挙句,window manager を xfwm4 にすることにした.xfwm4 の場合は ibus-setup で ibus 側の設定として next input method の shortcut を設定できる.

最近 metacity (←大人のための退屈なあれ; Boring window manager for the adult in you) と xfwm4 と gnome-shell を行ったり来たりしている...

Related articles

2014/02/01 14:34 / Credit Card 限度額一時的増額

2月,3月に海外に数回行く見込みで,航空券代だけで限度額が厳しくなってきたので,クレジットカード会社のオーソリセンターに電話.以前増額したときはなんか事細かに聞かれたような気がするのだが,今回は日常月○○円,大きな買い物○○円,海外利用分○○円,をざっくり聞かれるだけだった.

国内・海外は別枠で Amazon.co.jp や Google の決済は海外利用扱いになる旨注意を受けたのと,鉄道回数券,金券,パソコン,カメラ,時計,の購入予定に関しても聞かれた.

電話口で審査され,電話を切った5分後から利用可能.枠増額は4月10日まで有効(だから結構金額多めに申告する必要がある) で,繰り上げ返済しても枠は回復しない,と言われたような気がする.期間中MyJCBや音声応答での利用限度額は正しく表示されない旨注意を受ける.

2014/01/08 16:25 / Invalid command 'Alias' @ Debian GNU/Linux apache2 2.4.7-1

apache が止まっていたので調べてみた.

% sudo service apache2 start
Starting web server: apache2 failed!
The apache2 configtest failed. ... (warning).
Output of config test was:
AH00526: Syntax error on line 1 of /etc/apache2/conf-enabled/javascript-common.conf:
Invalid command 'Alias', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.

とのことで,http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=711925 の症状らしい.

そもそも jQuery とかも使っていないので javascript-common 自体が不要な気がするが,

% sudo a2enmod alias
% sudo service apache2 start

で復帰.

2013/12/30 17:30 / Monster Energy

Monster Energy だが,いつも開けるときに少し中身がはねて手に付いてしまう.Stay-on-tab の出来が悪いような気がする.

2013/12/11 01:30 / Amazon.co.jp 返品

カートに以前に入れていたのを忘れてて,間違えて「数量2」のまま発注してしまった.ということで,1つ返品.Amazon.co.jp で手続きをして(手順に従って同封するバーコードとラベルを印刷),「Amazon.co.jp返品専用 日本郵便株式会社集荷サービス」にWebから集荷依頼.

2013/12/06 18:07 / BTO スリム計算機

年度末に向けて計算機購入を検討中.いくつかBTOで組んでみた(スリム,Core i7-4770,MEM: 32G,HDD: 2T).

ちなみに,Windows 8.1 と Windows 8.1 Pro の違いは http://windows.microsoft.com/ja-jp/windows/compareによると

とのこと.BitLocker (HDD暗号化)の代替としては LUKS でもなんとかなるかも(Windows でも FreeOTFE で利用できるらしい).

2013/11/07 13:25 / ゴールドブレンド

インスタントコーヒーといえばゴールドブレンドしか飲まない方針なのだが,飲んだ後カップに残る残留物の雰囲気が異なっていて,どうやら新しくなったらしい.味はそんなに変わってないように感じた.

調べてみたら9月1日から「挽き豆包みフリーズドライ製法」になって,「インスタントコーヒー」の範疇を出てしまいソリュブルコーヒーになったらしい.

2013/11/06 14:22 / Cacoo

Cacoo使ってみた.Free Plan だと Export Format が PNG only.有料版は1年49USD.

2013/10/29 23:58 / Windows 8.1 Pro

Windows 8.1 に上げた.スタートボタンが復活した(もういらないけど).あと余波で VMPlayer のネットワークインタフェースがなくなってしまったようなので(VMの設定で色々してみたけど直らなかった),VMPlayer を再(修復)インストール.

あと,caps に ctrl を割り当ててたレジストリ設定が消えたので,色々調べつつ再度レジストリにて設定.

2013/10/24 22:11 / sid の aptitude が動かなくなった

aptitude: symbol lookup error: aptitude: undefined symbol: _ZNK7tagcoll4coll4FastISsSsE13getTagsOfItemERKSs

libept1.4.12 を 1.0.10 に上げたのがだめだったらしい(#727540).libept1.4.12 を1.0.9 に downgrade して解決.

2013/10/19 21:50 / Zip file の中身の画像 Viewer

複数の画像を含む Zip file を直接画像としてみる Viewer として gimvを長年使っていたが,Debian GNU/Linux の package として提供されなくなって久しいので,代替のものを使うことにした.有名どころでは pornview というのがあったような気もするが,これももう package が無いようなので,mcomix というのを使うことにする.

Android では Perfect Viewerを使っている.スクショを見て気づいたのだが,これ,スクリーントーンに合わせて色をつける機能があるっぽい.試してみたら donated users only だった...

2013/10/18 22:12 / Samba で EUC-JP なファイル名を見れるようにする

今どき Linux で EUC-JP なファイル名を使っている方が問題な気がするが, /etc/samba/smb.conf でとりあえず設定.
[global]
  unix charset = EUCJP-MS
  dos charset = CP932
いつも忘れてググるのでメモ.

2013/10/11 19:16 / 那覇空港のウェブページには英語版がない

那覇空港のウェブページには English version が無い.そして,そこからのアクセス手段であるゆいレールのページに関しても English version が無い.

追記(2014/4/23)

今日見てみたら那覇空港のウェブページが多言語化されてました.英語以外にも簡体字・繁体字・ハングルもAvailable.

追記(2016/4/1)

今日見てみたらゆいレールのページが多言語化されてました.外国語のページの方がシンプルで見やすいような気がする.

2013/10/11 18:30 / Makehuman

Makehuman. Debian GNU/Linux の package だと(Ubuntu でも?)一部うまく動かない部分が あるような気配.でも面白い.

2013/09/24 20:46 / Mozc Dictionary Tool

uim で mozc をつかっているのだが,なぜか(LANGの設定の問題?) uim-toolbar-gtk-systray から Mozc Dictionary Tool を起動できないので,コマンドラインから起動する.いつも忘れるのでメモ.

% LANG=C /usr/lib/mozc/mozc_tool --mode=dictionary_tool

LANGの箇所はお好みで.

参考にしたページ: https://wiki.archlinux.org/index.php/Mozc

Related articles

2013/08/08 17:44 / ks_c_5601-1987 の MIME decode

From等にある=?ks_c_5601-1987?B?...?= をWanderlustで文字化け無しで見れるようにするには

(eval-after-load "mcs-20"
  '(add-to-list 'mime-charset-coding-system-alist
        '(ks_c_5601-1987 . euc-kr)))

とすればいいらしい.

参考にした記事: http://nijino.homelinux.net/diary/200108.shtml#200108090

Related articles

2013/07/18 10:41 / 灯油タンク内の灯油処分

引越しをするのだが,室内灯油タンク(サンダイヤ オイルタンク) 内に残っている灯油を処分するようにと管理会社から言われた.どういう管理になっているのか良く判らないが,灯油ストーブと灯油タンクは入居時から部屋にあったのだが,この管理はこの管理会社が行なっているものではなく,単に前の住人が置いていったもの,という位置付けならしい.

ということで,適当に調べて灯油業者に聞いてみると,残量が少ない場合(つまり買取にならない場合)は自分で抜き取った方が安いとのこと.ポンプ(ちょっと長めのものが必要)はホーマック等で入手可能.ちなみに業者に依頼すると5,000円(税別).

追記(2013/7/21)

いわゆる一般的なシュポシュポ (手動の灯油ポンプ,正式名称: 石油燃焼機器用注油ポンプ) では長さが足りなかったので,とはいえ長めのものもホーマックに置いてなかったので,適当なホース(ホーマックで切り売りしてもらった) でシュポシュポを若干延長して灯油を抜き出した.

この抜き出した灯油の処分だが,適当にガソリンスタンド(セルフのスタンドで灯油も買えるようなところ) に持ち込んだところ,処分の費用(サービス料)として525円必要だった.これで灯油生活と決別.

2013/06/25 13:33 / Wanderlust で To: が長い場合に MIME decode が省略されてしまう

Wanderlust で To: が長い(宛先が多数指定されているメール)場合に MIME decode が省略されてしまうという問題. FLIM の eword-decode.el を眺めてみると mime-field-decoding-max-size というので制限がかかっている模様 (default: 1000 (bytes), see mime-def.el). ということで ~/.wl にて1桁ほど増やす.
(setq mime-field-decoding-max-size 10000)
あと Wanderlust 側で行数が多い場合に表示を省略する機能もあって, その行数は wl-message-header-narrowing-lines で指定する. が,そもそも省略不要なような気がし始めたので以下で省略機能自体を切る.
(setq wl-message-use-header-narrowing nil)

2013/06/24 18:50 / LDAP server + autofs

LDAP と autofs を利用して home directory や共通設定(というかアカウント)を共有するためのメモ.

% sudo aptitude install slapd

で OpenLDAP (slapd) をインストールする.この際 admin のパスワードを設定させられる.

% sudo slapcat

で保持されている情報(暗号化されたパスワードも含めて)を確認.初期状態では,以下の DN (distinguished name: 識別名)のみ.これも Debian の場合ドメイン名から適当に決まる (おそらく dpkg-reconfigure slapd でもう少し詳細に設定可能).

dn: dc=meganecco,dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: meganecco.example.org
dc: meganecco
(snip)

dn: cn=admin,dc=meganecco,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: (snip)
(snip)

/etc/ldap/ldap.conf には

BASE    dc=meganecco,dc=example,dc=org
URI     ldapi:///

を書いておく.ldapi:/// は UNIX ドメインソケットでのアクセス.別計算機で LDAP server が動いている場合は ldap://192.168.xx.xx/ とかでサーバ指定.これで

% ldapsearch -x
% ldapsearch -x objectClass=account

などで情報が参照できるようになる (-x: use simple authentication instead of SASL).

クライアント設定

/etc/nsswitch.conf に

passwd:         compat ldap
shadow:         compat ldap
hosts:          files dns ldap
automount:      ldap

とか,LDAP を使いたい箇所に ldap と書いておく.ここでは user 認証と host 名と autofs (automount) のための map を想定.automount: ldap としておけば /etc/auto.master も不要.

これだけだと client にはなれず,他に,

% sudo aptitude install nslcd

で nslcd (local LDAP name service daemon) を入れておく.localhost が LDAP server になっている場合は,

[/etc/nslcd.conf]
uri ldapi:///
base dc=meganecco,dc=example,dc=org

ぐらいの設定をする(別計算機の場合は ldap://192.168.xx.xx/).

LDAPの情報操作

% ldapadd -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw)
% ldapdelete -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw)
% ldapmodify -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw)

でLDAPの保持している情報を操作する.(pw)は設定したパスワード.-w (pw) ではなく -W とすれば,毎回パスワード入力を求められる(そのほうが安全?).ちなみに sudo せずにユーザー権限でOK.

ldapadd の場合は DN の内容をそのまま書く.空行で DN の区切れ目だと認識され,add の処理が行われる.失敗すると exit する.-f (filename) で手書き(or C&P)の代わりにファイルから入力も可能.

% ldapadd -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw)
dn: ou=People,dc=meganecco,dc=example,dc=org
objectClass: organizationalUnit
ou: People

dn: ou=Hosts,dc=meganecco,dc=example,dc=org
objectClass: organizationalUnit
objectClass: top
ou: Hosts
^D

とか.ldapdelete の場合は削除したい DN を書く.-f (filename) も可能.

% ldapdelete -x -D "cn=admin,dc=meganecco,dc=example,dc=org" -w (pw)
dn: ou=Hosts,dc=meganecco,dc=example,dc=org
^D

ldapmodify はほんのちょっとだけややこしいので省略.

上の例で示した People に /etc/passwd の内容を,Hosts に /etc/hosts の内容を追加していく.ちなみに OU は organizational unit (組織単位).イチから書くとあれなので,変換 script を使う.

% cd /usr/share/migrationtools/
% sudo vi migrate_common.ph (/etc/migrationtools/migrate_common.ph への symlink)
$DEFAULT_MAIL_DOMAIN = "meganecco.example.org";
$DEFAULT_BASE = "dc=meganecco,dc=example,dc=org";
% sudo ./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
% sudo ./migrate_hosts.pl /etc/hosts > /tmp/hosts.ldif

これで生成した LDIF (LDAP data interchange format) を適当に編集 (共有したい部分のみ残す)して ldapadd に -f で喰わせる.簡単.たぶんこれぐらいで多分ユーザ認証はできるはず.

うまく行かない場合は /var/log/daemon を参照したり nslcd を再起動したりする.

autofs 向け LDAP 設定

http://wiki.debian.org/LDAP/AutoFSSetupにある極めて不親切な情報を参考にする.まずLDAPにautomount用のschemaを追加する.つまりautomountのマップ情報を扱えるように設定を行う.ちなみにNISによるautofsはDefaultで使える.そういった機能を追加するイメージ.

LDAPの設定は

sudo ldapsearch -Y EXTERNAL -b "cn=config"

で確認する(sudo).People とかと同様にDNで設定(schema等)が保持されている.つまりldapaddやldapdeleteで設定を変更する感じになる.

ということで/etc/ldap/schema/autofs.schemaから ldapadd するものを作成し,ldapadd する.以下の通り.

% vi hoge.conf
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/autofs.schema
% mkdir hoge
% /usr/sbin/slaptest -f hoge.conf -F hoge
% vi hoge/cn=config/cn=schema/cn={1}autofs.ldif
(適当に整形...というか以下のようにする)
dn: cn=autofs,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: autofs
olcAttributeTypes: {0}( 1.3.6.1.1.1.1.25 NAME 'automountInformation' DESC 'Inf
 ormation used by the autofs automounter' EQUALITY caseExactIA5Match SYNTAX 1.
 3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
olcObjectClasses: {0}( 1.3.6.1.1.1.1.13 NAME 'automount' DESC 'An entry in an
 automounter map' SUP top STRUCTURAL MUST ( cn $ automountInformation $ object
 class ) MAY description )
olcObjectClasses: {1}( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' DESC 'An gro
 up of related automount objects' SUP top STRUCTURAL MUST ou )
% sudo cp hoge/cn=config/cn=schema/cn={1}autofs.ldif /etc/ldap/schema/autofs.ldif
(今後使うことがあるかもしれないから保存しとく)
% sudo ldapadd -Y EXTERNAL -f /etc/ldap/schema/autofs.ldif

autofs からLDAPを参照(するための設定他)

先の nsswitch.conf に automount: ldap とあれば ldap の ou=auto.master,dc=meganecco,dc=example,dc=orgがまず参照される.そこから順に情報をたどっていくっぽい.ということで以下を ldapadd.

## /etc/auto.master の代わりの入れ物
dn: ou=auto.master,dc=meganecco,dc=example,dc=org
ou: auto.master
objectClass: top
objectClass: automountMap

## /etc/auto.master の書いていただろう内容
dn: cn=/home,ou=auto.master,dc=meganecco,dc=example,dc=org
objectClass: automount
cn: /home
automountInformation: ldap://192.168.xx.xx/ou=auto.home,dc=meganecco,dc=example,dc=org

dn: cn=/-,ou=auto.master,dc=meganecco,dc=example,dc=org
objectClass: automount
cn: /-
automountInformation: ldap://192.168.xx.xx/ou=auto.direct,dc=meganecco,dc=example,dc=org

dn: cn=/net,ou=auto.master,dc=meganecco,dc=example,dc=org
objectClass: automount
cn: /net
automountInformation: -hosts

## 上から辿られる MAP (auto.home)
dn: ou=auto.home,dc=meganecco,dc=example,dc=org
ou: auto.home
objectClass: top
objectClass: automountMap

dn: cn=/,ou=auto.home,dc=meganecco,dc=example,dc=org
cn: /
objectClass: automount
automountInformation: -rw,intr,soft 192.168.xx.xx:/export/home/&

## 上から辿られる MAP (auto.direct)
dn: ou=auto.direct,dc=meganecco,dc=example,dc=org
objectClass: top
objectClass: automountMap
ou: auto.direct

dn: cn=/opt,ou=auto.direct,dc=meganecco,dc=example,dc=org
objectClass: automount
cn: /opt
automountInformation: 192.168.xx.xx:/export/opt

あとは client 側で service autofs restart 等で autofs を再起動する.うまく動かない場合は,

# /usr/sbin/automount -v -d -f

で様子を探る(-v verbose and -d debug and -f foreground).

Related articles

2013/06/19 15:56 / Samba でホームディレクトリの外へのシンボリックリンク先を参照する

% cd
% ln -s .. home
などとしておいて,home にアクセスしたいという話. 以前は Default で可能だったが今では
wide links = yes
unix extensions = no
というのを[global]の箇所に書いておく必要がある.いつも忘れてググるのでメモ.

2013/06/19 15:49 / Apple Mail から送信されたメールの添付ファイルが Wanderlust で見えない

X-Mailer: Apple Mail (2.1508) なメールの添付ファイルが multipart/mixed の中にあって見えないという話.Apple Mail から送信されたメールが Wanderlust で decode できない場合の対処方によれば

して強制的に表示させれば良いとのこと.

2013/06/18 22:58 / gnome-terminal 3.8.3-1 背景が透けない

gnome-terminal (GNOME端末) で背景が透けなくなった,と思ったら,http://en.wikipedia.org/wiki/GNOME_Terminal によると 3.8 以降では透過背景の機能が削除されたとのこと.Edit->Profile Preferences から Background という Tab が削除されている.

Related articles

2013/06/08 16:54 / dm-crypt 関連メモ (cryptroot)

/ 自体を暗号化してしまう場合の話.この場合,key を /boot/luks_key に置いて(/boot は暗号化しない),

[/etc/crypttab]
hoge_crypt UUID=(略) /boot/luks_key luks

だと,key file が initrd から見えず,/ を mount できない状態になる.

を想定する場合,/boot/luks_key に key を置くことにすると,

[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev

という設定で /dev/sda5 の luksOpen が initrd の段階で可能になる.passdev に /dev/disk/by-uuid/(sda1 uuid):luks_key という引数が渡され,passdev は /dev/disk/by-uuid/(sda1 uuid):luks_key の中身を返す(?)らしい.

あとは

% sudo update-initramfs -u -k all

で initrd の中の conf/conf.d/cryptroot が

[conf/conf.d/cryptroot]
target=sda5_crypt,source=UUID=(sda5 uuid),key=/dev/disk/by-uuid/(sda1 uuid):luks_key,rootdev,lvm=hoge-root,keyscript=/lib/cryptsetup/scripts/passdev
target=sda5_crypt,source=UUID=(sda5 uuid),key=/dev/disk/by-uuid/(sda1 uuid):luks_key,lvm=hoge-swap_1,keyscript=/lib/cryptsetup/scripts/passdev

という感じで適切に生成され,あとは起動時に initrd 中の scripts/local-top/cryptroot が適切に処理してくれる.

追記(2017/4/18)

逆に / として利用しない crypt device を起動時に自動 open するには passdev を使ってはいけない(使えない).sda5_crypt に / があるとすると,

[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
sda6_crypt UUID=(sda6 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev

これだと sda6_crypt が open されない.以下のようにする必要がある.

[/etc/crypttab]
sda5_crypt UUID=(sda5 uuid) /dev/disk/by-uuid/(sda1 uuid):luks_key luks,keyscript=/lib/cryptsetup/scripts/passdev
sda6_crypt UUID=(sda6 uuid) /boot/luks_key luks

Related articles

2013/06/08 15:11 / X dead keys

ノートPCの日本語キーボードを無理やり英語キーボードとして使うとき Backspace の左側の \ (|) と矢印キー付近の \ (_) が使えない場合がある(こいつらがdead keys).これを(お手軽に) Xorgで使えるようにするには,以下のようにする.

% xmodmap -e 'keycode 132 = backslash bar'
% xmodmap -e 'keycode 97 = backslash underscore'

Related articles

2013/06/03 17:57 / grub vga

grub の画面表示が VBE かなにかで高解像度になってしまい, 非常に間の抜けた画面(しかも反応が遅い)になるのでVGAにもどす.
[/etc/default/grub](抜粋)
GRUB_GFXMODE=640x480
% sudo update-grub
これで/boot/grub/grub.cfgに
set gfxmode=640x480
という行が追加されVGAでコンパクトなgrubになる模様.

2013/06/03 17:51 / dm-crypt 関連メモ

Debian GNU/Linux インストール時にブロックデバイスの暗号化を選択できるので,

という構成にしたら起動時に /home と swap で2回 passphrase を入力しなければならなくなった (本当は / は LVM の中に入れず別 partition にして,LVMの手前で暗号化をかけるべきだった→これだと少なくとも1回で済む).ということで改善をはかる.

swap

まず swap.これは https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS#Without_suspend-to-disk_support を参考に毎回異なるランダム鍵で暗号化することにする.元の状態は以下.

[/etc/crypttab]
hoge-home_crypt UUID=(略) none luks
hoge-swap_crypt UUID=(略) none luks

[/etc/fstab]
/dev/mapper/hoge-home_crypt /home btrfs defaults 0 2
/dev/mapper/hoge-swap_crypt none  swap  sw       0 0

まず

% sudo swapoff -a
% sudo cryptdisks_stop hoge-swap_crypt

でswapを解除して,hoge-swap_crypt を luksClose する.cryptdisks_stop の行は

% sudo cryptsetup luksClose hoge-swap_crypt

と同じ意味.cryptdisks_start/cryptdisks_stop は /etc/crypttab を参照してくれるのでmountのように使える.

https://wiki.archlinux.org/index.php/Dm-crypt_with_LUKS#Without_suspend-to-disk_support に従い

[/etc/crypttab]
hoge-home_crypt UUID=(略) none luks
hoge-swap_crypt /dev/mapper/hoge-swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

とし,LUKSのヘッダ情報を削除(wipe)する.

% sudo sh -c 'head -c 1052672 /dev/zero > /dev/mapper/hoge-swap; sync'

ちなみにヘッダ情報は

% sudo cryptsetup luksDump /dev/mapper/hoge-home
% sudo cryptsetup luksDump /dev/mapper/hoge-swap

とかで参照可能.ヘッダがなくなると UUID でのアクセスができなくなるので,/etc/crypttab の hoge-swap_crypt の行では UUID は使えない.あと/dev/urandomではなく/dev/randomとすると乱数を得るのに時間がかかるので注意.

あとは,initrd 中に

[conf/conf.d/cryptroot]
target=hoge-swap_crypt,source=UUID=(略),key=none

という感じで,luksOpen を指示するような記述があるので,

% sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-3.8-2-amd64
cryptsetup: WARNING: target hoge-swap_crypt has a random key, skipped

で initrd を再生成しておく.

キーファイルを用いて passpharese 入力を省略

http://jehupc.exblog.jp/19078309/を参考に設定.このページでは /boot/luks_key に鍵を置いているが,私の環境では /boot の mount が /home よりも後のようなので,暗号化されていない / に置くことにした(そうしないとうまく起動できなかった).

% sudo dd if=/dev/urandom of=/etc/luks_key bs=1 count=1024
% sudo chmod 600 /etc/luks_key
% sudo cryptsetup luksAddKey /dev/mapper/hoge-home /etc/luks_key
% sudo cryptsetup luksDump /dev/mapper/hoge-home
(→Key Slot 1が追加されたことを確認)

あとは,

[/etc/crypttab]
hoge-home_crypt UUID=(略) /etc/luks_key luks
hoge-swap_crypt /dev/mapper/hoge-swap /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

としておく.

コマンドメモ

device mapper の状態確認.

% sudo dmsetup ls --tree
% sudo dmsetup info
% sudo dmsetup status

cryptsetup に関しては luksOpen luksClose luksDump luksFormat luksAddkey ぐらいを頻繁に使う.

Related articles

2013/06/03 16:55 / dvipdfmx: Invalid glyph name index number

% dvipdfmx main.dvi
main.dvi -> main.pdf
[1
** WARNING ** Invalid glyph name index number: 12502 (>= 12495)
** WARNING ** Invalid TrueType 'post' table...
** ERROR ** Could not obtain necessary font info.

Output file removed.

とかで dvipdfmx が落ちる.

ls -arlt /etc/alternatives/fonts-japanese-*
lrwxrwxrwx 1 root root 53  5月  2 21:22 /etc/alternatives/fonts-japanese-gothic.ttf -> /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf
lrwxrwxrwx 1 root root 53  5月  2 21:22 /etc/alternatives/fonts-japanese-mincho.ttf -> /usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf

ということで ipaexfont (fonts-ipaexfont-mincho と fonts-ipaexfont-gothic) が怪しい.以下で解決する模様.

% sudo update-alternatives --config fonts-japanese-gothic.ttf
There are 3 choices for the alternative fonts-japanese-gothic.ttf (providing /usr/share/fonts/truetype/fonts-japanese-gothic.ttf).

  Selection    Path                                                                                      Priority   Status
------------------------------------------------------------
* 0            /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf                                      120       auto mode
  1            /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf                                      120       manual mode
  2            /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf                                          100       manual mode
  3            /usr/share/fonts/truetype/ipafont-nonfree-jisx0208/ipag0208_for_legacy_compatibility.ttf   100       manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf to provide /usr/share/fonts/truetype/fonts-japanese-gothic.ttf (fonts-japanese-gothic.ttf) in manual mode
% sudo update-alternatives --config fonts-japanese-mincho.ttf
There are 3 choices for the alternative fonts-japanese-mincho.ttf (providing /usr/share/fonts/truetype/fonts-japanese-mincho.ttf).

  Selection    Path                                                                                      Priority   Status
------------------------------------------------------------
* 0            /usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf                                      120       auto mode
  1            /usr/share/fonts/opentype/ipaexfont-mincho/ipaexm.ttf                                      120       manual mode
  2            /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf                                          100       manual mode
  3            /usr/share/fonts/truetype/ipafont-nonfree-jisx0208/ipam0208_for_legacy_compatibility.ttf   100       manual mode

Press enter to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/share/fonts/opentype/ipafont-mincho/ipam.ttf to provide /usr/share/fonts/truetype/fonts-japanese-mincho.ttf (fonts-japanese-mincho.ttf) in manual mode

Related articles

2013/06/05 09:51 / 起動時に brtfs に対して fsck がうまくかからない

起動時の btrfs に対する fsck で

Unknown option: -a

とかで失敗する.手動でfsckをかけるように言われてroot passwordを要求されるが,そもそも fsck.btrfs (btrfsck への symlink) が標準的な fsck の option を受け付けないのが問題らしい.

起動出来ないと困る,というか / 自体を brtfs にしていたので,とりあえず

# mount -o remount,rw /
# vi /etc/fstab

して fstab の sixth field を 0 (起動時にfsckしない)にして再起動→調整.ちなみに

と普通は設定する(see man fstab).

これだと fsck されないので,感じ悪いので,対処法を探す.https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=709217 に対処法が書かれているが,今度は https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=701956

check_mounted(): Could not open /run/rootdev

問題が発生する.色々やっている時間もないので fstab をもとにもどして btrfs-tools を 0.19+20130315-2 から 0.19+20130131-3+really20121004-1 に downgrade することにした.

2013/06/03 13:25 / apache 2.2 → 2.4

/etc/apache2/\*-enabled/ 以下が初期状態にもどってハマる.以下,最低限やったこと.

あとは

# /etc/init.d/apache2 restart

追記(2013/7/5)

mod-available にあるものを mod-enabled に symlink するには普通は

# a2enmod mime

等とする.

2013/05/31 10:46 / i386 acroread を amd64 で動かすために必要なもの

Debian GNU/Linux unstable (sid) での話.いつも忘れていつの間にか purge してしまうのでメモ.

追記(2015/6/30)

すでに通常の Adobe Acrobat Reader DC のダウンロードページでは Linux 版が存在しない(Windows, Intel Mac, Android のみ).Linux 版は 32bit のみ ftp://ftp.adobe.com/pub/adobe/reader/unix/9.x/9.5.5/enu/ からダウンロードするらしい.たぶん今なら PDF を Linux 上で見るには Evince (Popper based)を用いるのが最も標準的.

追記(2022/8/23)

あるいは Google Chrome (PDFium based)で.

2013/05/31 01:38 / オフィスチェア

新しい職場で使う椅子を選定中.オフィスチェア メーカー・ブランド一覧 厳選17社が参考になった.

追記(2022/8/23)

NAVERまとめサービス終了(2020年9月30日)に伴いリンク先参照不可だけど,https://matome.eternalcollegest.com/post-2136685880842148001 にミラーされている様子.

Related articles

2013/05/30 15:05 / 最近の texlive

Debian GNU/Linux unstable (sid) の最新の LaTeX 環境 (texlive 2013) がちょっとひどいことになっているような気がする.一応日本語も大丈夫そうだが図が意図したところに入らず致命的.

Related articles