平山::Ubuntu Linux 16.04 64ビット版
このページは、Ubuntu Linux 16.04 64ビット版に関する個人的なメモです。
私が自分のパソコンでUbuntuを使っているため、 ソフトのインストールの記録などをメモしています。 教育用計算機システムの端末に使われているOSもUbuntu Linuxです(ただしバージョンは異なります)ので、教育用計算機システムを使ったり、システム管理したりするときにも、このメモは役に立つかもしれません。 なお、このメモは、あくまで自分のパソコンに関するメモですので、 教育用計算機システムの話ではありません。 私は、教育用計算機システムの管理者ではありません。
現在の情報
これまで私はUbuntu 14.04LTSを使ってきて、16.04LTSにアップグレードした。 そのため、ほとんどの設定は14.04のものを引き継いでいる。 14.04の話は、平山::Ubuntu Linux 14.04 64ビット版を参照して欲しい。 下記では、新たに変更した点について記載する。
ハードウェア構成
- CPU
- Intel Core i7
- メモリ
- 32GB
- グラフィックカード
- AMD RADEON R9 380X
- SSD/HDD
- SSD Plextor M3Pro 128GB * 1個 (OS用), LSI MegaRAID SAS 9265-8i RAID 6 実容量680GB (ホームディレクトリとVMware用), HDD * 2個(バックアップ用)
デバイスドライバの関係で、Ubuntu 16.04でRADEONのグラフィックカードを使いたいときには、サポートされている比較的新しいカードを使う必要があるので、カードを新調した。
キーバインド変更の方法を、xmodmapからxkbに乗り換えた。
Fcitxがxmodmapの設定を書き換えてしまうので、すでに廃止状態のxmodmapは捨てて、xkbに乗り換えることにした。
下記のページを参考に、いろいろやってみたが、ユーザ側の設定では、入力メソッドを切り替えると元に戻ってしまう。??
参考URL:
Fcitxの設定をしても、意図したように動作してくれないようだ。 現バージョンのFcitxの動作がおかしいのかもしれない。 (20171108追記: ここの情報によると、gsettingsでこの挙動を直せるかもしれません。いつか試してみよう。)
仕方がないので、禁断のシステム側のファイルをいじることにした。
参考URL:
いじるファイルは/usr/share/X11/xkb/symbols/inet。 バックアップをとっておく。
% cd /usr/share/X11/xkb/symbols/ % sudo cp inet inet.org
「xkb_symbols "evdev" {」から下の設定を変える。
% diff inet.org inet 107,109c107,119 < key <HKTG> { [ Hiragana_Katakana ] }; < key <HENK> { [ Henkan ] }; < key <MUHE> { [ Muhenkan ] }; --- > // key <HKTG> { [ Hiragana_Katakana ] }; > // key <HENK> { [ Henkan ] }; > // key <MUHE> { [ Muhenkan ] }; > key <CAPS> { [ Control_L, Control_L ] }; // Caps_Lock > key <MUHE> { [ Shift_L ] }; // Muhenkan > key <HENK> { [ Control_L, Control_L ] }; // Henkan_Mode > key <HKTG> { [ BackSpace ] }; // Hiragana-Katakana > key <RALT> { [ Henkan_Mode, Henkan_Mode ] }; // Alt_R > key <COMP> { [ NoSymbol ] }; // Menu > key <RCTL> { [ Muhenkan ] }; // Control_R > key <AB11> { [ underscore, underscore ] }; // backslash underscore > modifier_map Control { <HENK>, <CAPS> }; > }; ----
xkbの代わりに、xremapを使うとよいのかもしれない。 今後の候補。
次のUbuntuのアップグレードのときには、ユーザ側の設定のみで動くようになることを期待して、ユーザ側の設定で対処する方法を下記にメモしておく(16.04LTSでは、入力メソッドを切り替えると元に戻ってしまい、うまくいかなかった)。
ディレクトリを作る。
% cd ~ % mkdir .xkb % mkdir .xkb/keymap % mkdir .xkb/symbols
~/.xkb/symbols/my_keymap_at109jpというファイルを作り、内容を下記のようにする。
partial modifier_keys xkb_symbols "my_keys" { replace key <CAPS> { [ Control_L, Control_L ] }; // Caps_Lock replace key <MUHE> { [ Shift_L ] }; // Muhenkan replace key <HENK> { [ Control_L, Control_L ] }; // Henkan_Mode replace key <HKTG> { [ BackSpace ] }; // Hiragana-Katakana replace key <RALT> { [ Henkan_Mode, Henkan_Mode ] }; // Alt_R replace key <COMP> { [ NoSymbol ] }; // Menu replace key <RCTL> { [ Muhenkan ] }; // Control_R replace key <AB11> { [ underscore, underscore ] }; // backslash underscore modifier_map Control { <HENK>, <CAPS> }; };
「setxkbmap -print」の実行結果を、~/.xkb/keymap/my_kbdに入れて、 xkb_symbolsの行に「+my_keymap_at109jp(my_keys)」を追加する。
xkb_keymap { xkb_keycodes { include "evdev+aliases(qwerty)" }; xkb_types { include "complete" }; xkb_compat { include "complete" }; xkb_symbols { include "pc+jp+us:2+inet(evdev)+my_keymap_at109jp(my_keys)" }; xkb_geometry { include "pc(pc105)" }; };
あとは、ログイン時に下記のコマンドを実行すればよいはずなのだが、 入力メソッドを切り替えると元に戻ってしまう。??
xkbcomp -I$HOME/.xkb ~/.xkb/keymap/my_kbd $DISPLAY
fasdとzsh-autosuggestions
Zsh標準の予測候補機能がいまいち使いにくいので、代わりのものを探して、 fasdとzsh-autosuggestionsを入れることにした。
zsh-autosuggestions
GitHubのオフィシャルページから手動でインストールする。
.zshrcファイルのZsh標準の予測候補機能の設定を無効にしたうえで、 以下の設定を.zshrcに追加する。
### Enabling zsh-autosuggestions ### This was installed from GitHub manually. source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=5' # Color ID (0-7?) for suggestion. The number of colors supported by the terminal may be tested by the command 'echotc Co'. bindkey '\Cj' autosuggest-execute # Accepts and executes the current suggestion by crtl-enter. (It seems like \Cj = \C\n)
zsh-autosuggestionsが提示する予測候補で確定したいときには、C-j(C-Enterでもよい)する設定をしている。
fasd
Ubuntu標準パッケージにはないが、GitHubのオフィシャルページにPPAを追加する方法が載っていたので、それに従ってインストールした。
sudo add-apt-repository ppa:aacebedo/fasd sudo apt-get update sudo apt-get install fasd
以下の設定を.zshrcに追加する。
### Enabling fasd for quick access to files and directories. ### This was installed from GitHub manually. eval "$(fasd --init auto)"
fasdのzコマンドが超便利。cdの代わりのコマンドだが、ディレクトリ名の一部を指定すれば、最近アクセスしたそれらしいディレクトリにcdしてくれる。
透過的なHugePagesの無効化
VMware, Opera, LibreOfficeを使用すると、ある程度の時間(10秒から30秒程度)、異様に動作が重くなることが頻繁に発生する。 topで見てみると、khugepagedというプロセスがCPU使用率を食っている。 どうやら、透過的なHugePages(transparent hugepages)の仕業らしい。
HugePagesは、大容量メモリを消費するアプリケーションのメモリ管理を効率よくするために、従来よりも大きなサイズのページを使う仕組み。 「透過的な」HugePagesは、動的に大きなサイズのページを使うようにするための機能らしいが、実行中にメモリー割当ての遅延が生じる欠点があるらしい。 具体的には、標準の4Kbのページを大きなサイズのページに変換(defrag)していて動作が重くなるらしい。 例えば、Hadoopでは、透過的なHugePagesによりパフォーマンス低下が発生することが報告されている。
Oracleデータベースでは透過的なHugePagesは非推奨となっている。
- https://docs.oracle.com/cd/E57425_01/121/CWLIN/memry.htm
- http://www.intellilink.co.jp/article/column/oracle-yam07.html
これらの状況から、透過的なHugePagesを無効にすることにした。
まずは、現在の設定を確認する。 alwaysが角括弧で囲まれているので、有効になっている。
% cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never % cat /sys/kernel/mm/transparent_hugepage/defrag [always] madvise never
透過的なHugePagesを無効化する。 上記のファイルの中身を書き換えれば、一時的には効果があるが、再起動すると元に戻ることに注意。 永続的に無効にするには、起動ファイルを修正する必要がある。 ネットを検索すると、様々な方法が見つかる。が、試してみても効果がないものばかり。
- hugeadmコマンドによる設定: 一時的なもの。再起動すると共に戻る。
- sysfs.confに設定: そのようなファイルはない。新規に作っても効果なし。よく似た名前のsysctl.confに設定しても無駄だった。
- grubの設定を変更する方法: RedHat系の話のようで、Ubuntuとはファイル構成が異なるみたい。
- rc.localに設定する: すべてのサービスが起動した後に、rc.localが読まれるという順なので、すでに起動したサービスは修正されない。
うまくいった方法は、下記。 Ubuntu 16.04(15.04以降)は、起動システムがsystemdになったので、それに沿った方法にしないといけないようだ。
参考URL:
- http://tonymorellalinux.blogspot.jp/2015/11/ubuntu-1510-disable-transparent-huge.html
- https://askubuntu.com/questions/597372/how-do-i-modify-sys-kernel-mm-transparent-hugepage-enabled
/etc/systemd/system/disable_transparent_huge_pages.service というファイルを新規に作り、内容を下記にする。
[Unit] Description = Disable transparent huge pages [Service] Type = oneshot User = root ExecStart = /bin/sh -c "/bin/echo never | /usr/bin/tee /sys/kernel/mm/transparent_hugepage/enabled" ExecStart = /bin/sh -c "/bin/echo never | /usr/bin/tee /sys/kernel/mm/transparent_hugepage/defrag" [Install] WantedBy = multi-user.target
これをOS起動時に読むように設定する。
% sudo systemctl enable disable_transparent_huge_pages.service
再起動後に、設定を確認する。うまく無効になった。
% cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] % cat /sys/kernel/mm/transparent_hugepage/defrag always madvise [never]
しばらくこれで使ってみたところ、快調になった。
TerminalのControl-Tabの扱い
ふと気がついたことだが、gnome-terminalやxtermなどのTerminalは、Control-Tabをforwardしないようだ。 単なるTabにしてしまっている。 そのため、Terminal版EmacsやByobuなどではControl-Tabのキーバインドを使えない。 ByobuにControl-Tabのキーバインドを設定しても動かなかったのはこのためだった。 残念だ。 forwardしないものの、一応、gnome-terminalはControl-Tabを認識はしており、gnome-terminalの機能を呼び出すためのキーバインドとしてControl-Tabを設定することはできる。 例えば、gnome-terminalのタブを切り替えるキーバインドをControl-Tabに設定することができる。 設定するコマンド例は下記。出典は、https://askubuntu.com/questions/133384/keyboard-shortcut-gnome-terminal-ctrl-tab-and-ctrl-shift-tab-in-12-04
gsettings set org.gnome.Terminal.Legacy.Keybindings:/org/gnome/terminal/legacy/keybindings/ next-tab '<Primary>Tab'
Mewでメール本文を検索
Mewは基本機能として、grepによるメール検索ができるが、検索対象がSubjectやToなどのヘッダフィールドに限られており、メール本文を検索することができない。 メール本文を検索するには、拡張機能のHyper Estraierを使うと良い。 (Mewのマニュアルにある、「日本語の全文検索をしたい場合は、"mg" をインストール」という話は古いので、mgは使わないこと。) Ubuntuの場合、hyperestraierパッケージをインストールすれば、依存するものもすべて入る。 その後、初めて検索する前に、mewestコマンドを実行して検索用インデックスを作る。Mew側の設定は特にない。 Mewのマニュアルに「検索エンジンの初期値は、最初に見つかった利用できるものに自動的に設定されます。」となっているため。 なお、検索用インデックスは自動更新されないので、ユーザ権限のcronで毎時間mewestコマンドを実行することにする。 検索方法は、Mewのマニュアルにあるが、私がよく使うものは下記。
- 「C-u k /」: フォルダを指定して、その中のメールを検索する。
- 「k /」: すべてのメールを検索する。
試したところ、ISO-2022-JPのプレーンテキストのメールだけでなく、Base64エンコードされたUTF8メールでも、quoted-printableのメールでもちゃんと検索できた。 しかも検索が速い。私の持っている10万通以上のメールの中から、体感的にはさくっと検索結果が出る。すばらしい。
+trashフォルダの検索
しばらく使って気がついたこと。+trashフォルダのメールが検索できない。 変だなと思って、mewestスクリプトを見てみたところ、検索用インデックス作成において、trashが除外されてた。 私は+trashフォルダも検索してほしいので、mewestを書き換えて対応した。 私は、日々わんさか来る業務メールをチラ見して、自分に関係なさそうなものはどんどん+trashフォルダに放り込んでいき、後で必要になったら検索すればいいや、というスタイルで運用しているので、+trashフォルダも検索したい。
mewest変更点: trashの代わりに、spamを除外することにした。
% diff -u mewest.org mewest --- mewest.org 2017-11-09 17:12:53.998714092 +0900 +++ mewest 2017-11-09 17:16:58.722670511 +0900 @@ -160,7 +160,7 @@ # "[0-9]*" matches both "123" and "234.mew". ${FIND} "`path_conv \"${TGTDIR}\"`" \ - -type d -name "trash" -prune -o \ + -type d -name "spam" -prune -o \ -type d -name ${INDEXDIR_ORG} -prune -o \ -type d -name ${INDEXDIR_REPLICA} -prune -o \ -type f \( -name "[0-9]" -o -name "[0-9]*[0-9]" -o -name "[0-9]*${SUFFIX}" \) -print |\
Mewの対話
Mewには対話という機能がある。 これを利用するには、下記のパッケージをインストールする。
- sqlite3
- ruby-sqlite3
対話用インデックスを作るコマンドはcmew。対話用インデックスは自動更新されないので、ユーザ権限のcronで毎時間cmewコマンドを実行することにする。
max_map_countの設定変更
sbclがメモリ不足で落ちた。 ハッシュテーブルを大量に消費するCommon Lispプログラムを走らせたときのことである。 解(げ)せないのは、メモリにかなり余裕が残っているように見える状態なのに、メモリ不足で落ちたことだ。
私のPCは32GBのメモリを搭載しているので、 「sbcl --dynamic-space-size 32000」にして実行したのに、 メモリの半分程度16GBくらいまで使ったところで、下記のエラーを出して落ちた。 どうやら、「max_map_count」の制限に引っかかったらしい。
fatal error encountered in SBCL pid 10833(tid 140737353959168): An mprotect call failed with ENOMEM. This probably means that the maximum amount of separate memory mappings was exceeded. To fix the problem, either increase the maximum with e.g. 'echo 262144 > /proc/sys/vm/max_map_count' or recompile SBCL with a larger value for GENCGC-CARD-BYTES in 'src/compiler/target/backend-parms.lisp'.
max_map_countのオフィシャルの説明は、カーネルソースのドキュメントが確実。
max_map_countのデフォルト値は65536だが、これでは足りないらしい。
現在の設定値の確認方法:
% cat /proc/sys/vm/max_map_count 65536
もしくは、
% sudo sysctl -n vm.max_map_count 65536
とりあえず、この16倍にしてやれば十分だろう、ということで、1048576に設定を変更する。
設定を変更する方法は、ネットを検索すればすぐに見つかる。 例えば、一時的に変更するには、下記。
% sudo sysctl -w vm.max_map_count=1048576
永続的に変更するには、/etc/sysctl.confに記載すればよい。 これに準じた方法として、私は、/etc/sysctl.d/60-ease-memory-restrictions.conf というファイルを作り、その中に下記の設定を記載した。
# The default value is 65536. vm.max_map_count = 1048576
このファイルは、マシンが起動時に読み込まれて、設定される。
Keyword(s):
References:[hirayama]